]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/esd_tracks.C
Take track-parameters at inner TPC radius if extrapolation to ITS failed (controlled...
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_tracks.C
1 // $Id$
2
3 Reve::Track* esd_make_track(Reve::TrackRnrStyle* rnrStyle,
4                             AliESDtrack* at,
5                             AliExternalTrackParam* tp=0)
6 {
7   Double_t        pbuf[3], vbuf[3];
8   Reve::RecTrack  rt;
9
10   if(tp == 0) tp = at;
11
12   rt.label  =         at->GetLabel();
13   rt.status = (Int_t) at->GetStatus();
14   rt.sign   = tp->GetSign();
15   tp->GetXYZ(vbuf);
16   rt.V.Set(vbuf);
17   tp->GetPxPyPz(pbuf);
18   rt.P.Set(pbuf);
19   Double_t ep = at->GetP(), mc = at->GetMass();
20   rt.beta = ep/TMath::Sqrt(ep*ep + mc*mc);
21  
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));
27   return track;
28 }
29
30 Bool_t gkFixFailedITSExtr = kTRUE;
31
32 Reve::TrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100)
33 {
34   AliESD* esd = Alieve::Event::AssertESD();
35   AliPID  pid;
36
37   Double_t minptsq = min_pt*min_pt;
38   Double_t maxptsq = max_pt*max_pt;
39   Double_t ptsq;
40
41   TGListTree*     l_tree = gReve->GetListTree();
42   TGListTreeItem* parent = gReve->GetEventTreeItem();
43
44   Reve::TrackList* cont = new Reve::TrackList("ESD Tracks"); 
45   cont->SetMainColor(Color_t(6));
46   Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle();
47   rnrStyle->SetMagField( esd->GetMagneticField() );
48
49   TGListTreeItem *holder = gReve->AddRenderElement(cont);
50
51   Int_t    count = 0;
52   Double_t pbuf[3];
53   for (Int_t n=0; n<esd->GetNumberOfTracks(); n++) {
54     AliESDtrack* at = esd->GetTrack(n);
55
56     // Here would be sweet to have TObjectFormula.
57     at->GetPxPyPz(pbuf);
58     ptsq = pbuf[0]*pbuf[0] + pbuf[1]*pbuf[1];
59     if(ptsq < minptsq || ptsq > maxptsq)
60       continue;
61
62     ++count;
63
64     // If ITS refit failed, take track parameters at inner TPC radius.
65     AliExternalTrackParam* tp = at;
66     if (gkFixFailedITSExtr && !at->IsOn(AliESDtrack::kITSrefit)) {
67        tp = at->GetInnerParam();
68     }
69
70     Reve::Track* track = esd_make_track(rnrStyle, at, tp);
71     cont->AddElement(track);
72     gReve->AddRenderElement(holder, track);
73   }
74
75   const Text_t* tooltip = Form("pT ~ (%.2lf, %.2lf), N=%d", min_pt, max_pt, count);
76   cont->SetTitle(tooltip); // Not broadcasted automatically ...
77   holder->SetTipText(tooltip);
78
79   cont->MakeTracks();
80   cont->MakeMarkers();
81   gReve->DrawRenderElement(cont);
82
83   return cont;
84 }
85
86 Reve::TrackList* esd_tracks_from_array(TCollection* col, AliESD* esd=0)
87 {
88   // Retrieves AliESDTrack's from collection.
89   // See example usage with AliAnalysisTrackCuts in the next function.
90
91   if(esd == 0) esd = Alieve::Event::AssertESD();
92   AliPID  pid;
93
94   TGListTree*     l_tree = gReve->GetListTree();
95   TGListTreeItem* parent = gReve->GetEventTreeItem();
96
97   Reve::TrackList* cont = new Reve::TrackList("ESD Tracks"); 
98   cont->SetMainColor(Color_t(6));
99   Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle();
100   rnrStyle->SetMagField( esd->GetMagneticField() );
101
102   TGListTreeItem *holder = gReve->AddRenderElement(cont);
103
104   Int_t    count = 0;
105   TIter    next(col);
106   TObject *obj;
107   while((obj = next()) != 0) {
108     if(obj->IsA()->InheritsFrom("AliESDtrack") == kFALSE) {
109       Warning("Object '%s', '%s' is not an AliESDtrack.",
110               obj->GetName(), obj->GetTitle());
111       continue;
112     }
113
114     ++count;
115     AliESDtrack* at = (AliESDtrack*) obj;
116
117     Reve::Track* track = esd_make_track(rnrStyle, at);
118     cont->AddElement(track);
119     gReve->AddRenderElement(holder, track);
120   }
121
122   const Text_t* tooltip = Form("N=%d", count);
123   cont->SetTitle(tooltip); // Not broadcasted automatically ...
124   holder->SetTipText(tooltip);
125
126   cont->MakeTracks();
127   cont->MakeMarkers();
128   gReve->DrawRenderElement(cont);
129
130   return cont;
131 }
132
133 void esd_tracks_alianalcuts_demo()
134 {
135   AliESD* esd = Alieve::Event::AssertESD();
136   gSystem->Load("libANALYSIS");
137
138   AliAnalysisTrackCuts atc;
139   atc.SetPtRange(0.1, 5);
140   atc.SetRapRange(-1, 1);
141
142   esd_tracks_from_array(atc.GetAcceptedParticles(esd), esd);
143 }