]>
Commit | Line | Data |
---|---|---|
5a5a1232 | 1 | // $Id$ |
2 | ||
86f12f78 | 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 | ||
5a5a1232 | 32 | Reve::TrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100) |
33 | { | |
34 | AliESD* esd = Alieve::Event::AssertESD(); | |
86f12f78 | 35 | AliPID pid; |
5a5a1232 | 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)); | |
86f12f78 | 46 | Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle(); |
47 | rnrStyle->SetMagField( esd->GetMagneticField() ); | |
5a5a1232 | 48 | |
49 | TGListTreeItem *holder = gReve->AddRenderElement(cont); | |
50 | ||
86f12f78 | 51 | Int_t count = 0; |
52 | Double_t pbuf[3]; | |
5a5a1232 | 53 | for (Int_t n=0; n<esd->GetNumberOfTracks(); n++) { |
86f12f78 | 54 | AliESDtrack* at = esd->GetTrack(n); |
5a5a1232 | 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 | ||
86f12f78 | 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 | } | |
5a5a1232 | 69 | |
86f12f78 | 70 | Reve::Track* track = esd_make_track(rnrStyle, at, tp); |
71 | cont->AddElement(track); | |
5a5a1232 | 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 | ||
86f12f78 | 86 | Reve::TrackList* esd_tracks_from_array(TCollection* col, AliESD* esd=0) |
5a5a1232 | 87 | { |
88 | // Retrieves AliESDTrack's from collection. | |
89 | // See example usage with AliAnalysisTrackCuts in the next function. | |
90 | ||
86f12f78 | 91 | if(esd == 0) esd = Alieve::Event::AssertESD(); |
92 | AliPID pid; | |
93 | ||
5a5a1232 | 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)); | |
86f12f78 | 99 | Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle(); |
100 | rnrStyle->SetMagField( esd->GetMagneticField() ); | |
5a5a1232 | 101 | |
102 | TGListTreeItem *holder = gReve->AddRenderElement(cont); | |
103 | ||
5a5a1232 | 104 | Int_t count = 0; |
105 | TIter next(col); | |
106 | TObject *obj; | |
5a5a1232 | 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; | |
86f12f78 | 115 | AliESDtrack* at = (AliESDtrack*) obj; |
5a5a1232 | 116 | |
86f12f78 | 117 | Reve::Track* track = esd_make_track(rnrStyle, at); |
118 | cont->AddElement(track); | |
5a5a1232 | 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(); | |
86f12f78 | 136 | gSystem->Load("libANALYSIS"); |
5a5a1232 | 137 | |
138 | AliAnalysisTrackCuts atc; | |
139 | atc.SetPtRange(0.1, 5); | |
140 | atc.SetRapRange(-1, 1); | |
141 | ||
86f12f78 | 142 | esd_tracks_from_array(atc.GetAcceptedParticles(esd), esd); |
5a5a1232 | 143 | } |