3 Reve::Track* esd_make_track(Reve::TrackRnrStyle* rnrStyle,
5 AliExternalTrackParam* tp=0)
7 Double_t pbuf[3], vbuf[3];
12 rt.label = at->GetLabel();
13 rt.status = (Int_t) at->GetStatus();
14 rt.sign = tp->GetSign();
19 Double_t ep = at->GetP(), mc = at->GetMass();
20 rt.beta = ep/TMath::Sqrt(ep*ep + mc*mc);
22 Reve::Track* track = new Reve::Track(&rt, rnrStyle);
23 track->SetName(Form("ESDTrack %d", rt.label));
24 track->SetTitle(Form("pT=%.3f, pZ=%.3f; V=(%.3f, %.3f, %.3f)",
25 rt.sign*TMath::Hypot(rt.P.x, rt.P.y), rt.P.z,
26 rt.V.x, rt.V.y, rt.V.z));
30 Bool_t gkFixFailedITSExtr = kTRUE;
32 Reve::TrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100)
34 AliESD* esd = Alieve::Event::AssertESD();
37 Double_t minptsq = min_pt*min_pt;
38 Double_t maxptsq = max_pt*max_pt;
41 Reve::TrackList* cont = new Reve::TrackList("ESD Tracks");
42 cont->SetMainColor(Color_t(6));
43 Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle();
44 rnrStyle->SetMagField( esd->GetMagneticField() );
46 gReve->AddRenderElement(cont);
50 for (Int_t n=0; n<esd->GetNumberOfTracks(); n++) {
51 AliESDtrack* at = esd->GetTrack(n);
53 // Here would be sweet to have TObjectFormula.
55 ptsq = pbuf[0]*pbuf[0] + pbuf[1]*pbuf[1];
56 if(ptsq < minptsq || ptsq > maxptsq)
61 // If ITS refit failed, take track parameters at inner TPC radius.
62 AliExternalTrackParam* tp = at;
63 if (gkFixFailedITSExtr && !at->IsOn(AliESDtrack::kITSrefit)) {
64 tp = at->GetInnerParam();
67 Reve::Track* track = esd_make_track(rnrStyle, at, tp);
68 gReve->AddRenderElement(cont, track);
71 const Text_t* tooltip = Form("pT ~ (%.2lf, %.2lf), N=%d", min_pt, max_pt, count);
72 cont->SetTitle(tooltip); // Not broadcasted automatically ...
82 Reve::TrackList* esd_tracks_from_array(TCollection* col, AliESD* esd=0)
84 // Retrieves AliESDTrack's from collection.
85 // See example usage with AliAnalysisTrackCuts in the next function.
87 if(esd == 0) esd = Alieve::Event::AssertESD();
90 Reve::TrackList* cont = new Reve::TrackList("ESD Tracks");
91 cont->SetMainColor(Color_t(6));
92 Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle();
93 rnrStyle->SetMagField( esd->GetMagneticField() );
95 gReve->AddRenderElement(cont);
100 while((obj = next()) != 0) {
101 if(obj->IsA()->InheritsFrom("AliESDtrack") == kFALSE) {
102 Warning("Object '%s', '%s' is not an AliESDtrack.",
103 obj->GetName(), obj->GetTitle());
108 AliESDtrack* at = (AliESDtrack*) obj;
110 Reve::Track* track = esd_make_track(rnrStyle, at);
111 gReve->AddRenderElement(cont, track);
114 const Text_t* tooltip = Form("N=%d", count);
115 cont->SetTitle(tooltip); // Not broadcasted automatically ...
125 void esd_tracks_alianalcuts_demo()
127 AliESD* esd = Alieve::Event::AssertESD();
128 gSystem->Load("libANALYSIS");
130 AliAnalysisTrackCuts atc;
131 atc.SetPtRange(0.1, 5);
132 atc.SetRapRange(-1, 1);
134 esd_tracks_from_array(atc.GetAcceptedParticles(esd), esd);