29 #include <TClonesArray.h> 30 #include <TObjArray.h> 36 #include "AliAnalysisTask.h" 37 #include "AliAnalysisManager.h" 39 #include "AliESDtrack.h" 40 #include "AliExternalTrackParam.h" 41 #include "AliESDVertex.h" 42 #include "AliESDEvent.h" 43 #include "AliESDfriend.h" 44 #include "AliVertexerTracks.h" 45 #include "AliESDInputHandler.h" 48 #include "AliMultiplicity.h" 58 fESD(0),fESDfriend(0),fOutput(0),fTracks(50)
63 DefineInput(0, TChain::Class());
65 DefineOutput(0, TList::Class());
84 if (estID<0 || estID>=
kNEst)
return;
98 if (estID<0 || estID>=
kNEst)
return;
122 TTree* tree =
dynamic_cast<TTree*
> (GetInputData(0));
124 Printf(
"ERROR: Could not read chain from input slot 0");
127 tree->SetBranchAddress(
"ESDfriend.",&
fESDfriend);
128 AliESDInputHandler *esdH =
dynamic_cast<AliESDInputHandler*
> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
129 if (!esdH) Printf(
"ERROR: Could not get ESDInputHandler");
144 Double_t err[3]={0.0400,0.0400,7.5};
146 for (
int i=0;i<kNEst;i++) if (fNEstb[i]>1) {
154 AliESDVertex *initVertex =
new AliESDVertex(
fIPCenIni[i],err);
173 static TClonesArray tracks(
"AliExternalTrackParam",50);
178 Printf(
"ERROR: fESD not available");
183 const AliESDVertex *vtx;
187 for (
int ie=0;ie<
kNEst;ie++) {
189 if (!
fIPEst[ie])
continue;
194 ntracks = vtx->GetNIndices();
195 trackID = (
UShort_t*)vtx->GetIndices();
196 for (
int i=ntracks;i--;)
fTracks.Add((
TObject*)
fESD->GetTrack(trackID[i])->GetTPCInnerParam());
205 ntracks = vtx->GetNIndices();
206 trackID = (
UShort_t*)vtx->GetIndices();
239 double xyzt[3],pxyz[3];
242 const AliMultiplicity *mult =
fESD->GetMultiplicity();
243 const AliESDVertex *spdVtx =
fESD->GetPrimaryVertexSPD();
245 if (mult && spdVtx && (nTracklets=mult->GetNumberOfTracklets())>2 ) {
246 const Double_t kRLay1=3.9, kRLay2=7.6;
247 double xv = spdVtx->GetX();
248 double yv = spdVtx->GetY();
249 double zv = spdVtx->GetZ();
250 for (
int i=0;i<nTracklets;i++) {
251 double phi1 = mult->GetPhi(i);
252 double tht1 = mult->GetTheta(i);
253 double phi2 = phi1 - mult->GetDeltaPhi(i);
254 double tht2 = tht1 - mult->GetDeltaTheta(i);
255 double cs = TMath::Cos(phi1);
256 double sn = TMath::Sin(tht1);
257 double det = xv*sn+yv*sn;
258 det = det*det + kRLay1*kRLay1;
259 double t = -(xv*cs+yv*sn) + TMath::Sqrt(det);
262 double z1 = zv + TMath::Sqrt(x1*x1+y1*y1)/TMath::Tan(tht1);
266 cs = TMath::Cos(phi2);
267 sn = TMath::Sin(tht2);
269 det = det*det + kRLay2*kRLay2;
270 t = -(xv*cs+yv*sn) + TMath::Sqrt(det);
273 double dz = zv + TMath::Sqrt(dx*dx+dy*dy)/TMath::Tan(tht2);
277 double dr = TMath::Sqrt(dx*dx+dy*dy+dz*dz);
281 t = (xv-x1)*pxyz[0] + (yv-y1)*pxyz[1] + (zv-z1)*pxyz[2];
282 xyzt[0] = x1 + t*pxyz[0];
283 xyzt[1] = y1 + t*pxyz[1];
284 xyzt[2] = z1 + t*pxyz[2];
286 new(tracks[nSPDtracks++]) AliExternalTrackParam(xyzt,pxyz,cv,0);
299 Printf(
"ERROR: fOutput not available");
Int_t fNTrMinIP[kNEst]
request to refit the vertex for given estimator
Double_t fEstMin[kNEst]
outliers cut level
AliVertexerTracks * GetVertexer() const
Double_t fOutCut[kNEst]
max vtx multuplicity
Int_t fNTrMax[kNEst]
min vtx multuplicity
AliIntSpotEstimator * fIPEst[kNEst]
request to fill ntuple
virtual void Terminate(Option_t *)
void SetOptions(Int_t estID, Bool_t recoVtx=kFALSE, Double_t outcut=1e-4, Int_t ntrIP=2, Int_t nPhiBins=12, Int_t nestb=1000, Double_t estmin=-4e-2, Double_t estmax=6e-2, Int_t ntrBins=10, Int_t ntMn=2, Int_t ntMx=32, Int_t nPBins=14, Double_t pmn=0.2, Double_t pmx=3., Bool_t fillNt=kFALSE)
Int_t CreateSPDTracklets(TClonesArray &tracks)
Double_t fEstMax[kNEst]
lower estimator boundary
Int_t fNPhiBins[kNEst]
min tracks for IP estimator
Bool_t ProcessEvent(const AliESDEvent *esd, const AliESDVertex *vtx=0)
virtual void CreateOutputObjects()
TObjArray fTracks
list send on output slot 0
Int_t fNPBins[kNEst]
n of vtx.mult. bins
Int_t fNTrMin[kNEst]
n of track P bins
virtual ~AliAnalysisTaskIPInfo()
Bool_t fFillNt[kNEst]
initial estimate of IP Center
virtual void Exec(Option_t *option)
void SetIPCenIni(Double_t *xyz)
TList * fOutput
ESD friend object.
Double_t fPMin[kNEst]
upper estimator boundary
Double_t fIPCenIni[kNEst][3]
upper P cut
AliESDEvent * fESD
estimators
Double_t fPMax[kNEst]
lower P cut
void SetIPCenIni(Int_t esdID, Double_t x=0, Double_t y=0, Double_t z=0)
Int_t fNEstb[kNEst]
n bins in phi for IP
AliESDfriend * fESDfriend
ESD object.
virtual void ConnectInputData(Option_t *)
static const Char_t * fEstNames[kNEst]
temporary storage for extracted tracks
AliAnalysisTaskIPInfo(const char *name="IPInfo")
Int_t fNTrBins[kNEst]
n of estimator bins