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