]>
Commit | Line | Data |
---|---|---|
d810d0de | 1 | // $Id$ |
2 | // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 | |
4673ff03 | 3 | |
d810d0de | 4 | /************************************************************************** |
5 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * | |
6 | * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * | |
51346b82 | 7 | * full copyright notice. * |
d810d0de | 8 | **************************************************************************/ |
9 | ||
10 | #include "AliEveJetPlane.h" | |
a15e6d7d | 11 | |
12 | #include <TEveTrans.h> | |
2ea57cb0 | 13 | #include <TEveArrow.h> |
9b6216c0 | 14 | #include <TEveSelection.h> |
15 | #include <TEveManager.h> | |
a15e6d7d | 16 | |
4673ff03 | 17 | #include <TBuffer3D.h> |
18 | #include <TBuffer3DTypes.h> | |
19 | #include <TVirtualPad.h> | |
20 | #include <TVirtualViewer3D.h> | |
21 | ||
9b6216c0 | 22 | #include <TColor.h> |
23 | #include <TStyle.h> | |
24 | #include <TROOT.h> | |
25 | ||
57ffa5fb | 26 | //______________________________________________________________________________ |
4673ff03 | 27 | // |
a97abca8 | 28 | // Show jets and tracks in eta-phi plane. |
a15e6d7d | 29 | // |
ff3111ab | 30 | // |
4673ff03 | 31 | |
a97abca8 | 32 | ClassImp(AliEveJetPlane) |
4673ff03 | 33 | |
d810d0de | 34 | Bool_t AliEveJetPlane::fgOneMomentumXYZ = kFALSE; |
35 | Bool_t AliEveJetPlane::fgOneMomentumPhiTheta = kFALSE; | |
a97abca8 | 36 | Bool_t AliEveJetPlane::fgOneEta = kFALSE; |
37 | Bool_t AliEveJetPlane::fgOneE = kFALSE; | |
38 | Bool_t AliEveJetPlane::fgOneChgMass = kFALSE; | |
4673ff03 | 39 | |
40 | ||
d810d0de | 41 | AliEveJetPlane::AliEveJetPlane(Int_t iev) : |
42 | TEveElementList(Form("AliEveJetPlane %i",iev), Form("%i",iev)), | |
4673ff03 | 43 | |
44 | fMinEta (-1.5 ), | |
45 | fMaxEta ( 1.5 ), | |
2ea57cb0 | 46 | fMinPhi ( 0.0 ), |
47 | fMaxPhi ( 2.0 * TMath::Pi() ), | |
4673ff03 | 48 | |
49 | fNEtaDiv(30), | |
50 | fNPhiDiv(30), | |
51 | ||
52 | fEtaScale(350/1.5), | |
2ea57cb0 | 53 | fPhiScale(350/(TMath::Pi())), |
9b6216c0 | 54 | fEnergyScale(50.0), |
4673ff03 | 55 | |
361f01a5 | 56 | fArrowJetScale (2.0), |
57 | fArrowTrackScale (0.7), | |
4673ff03 | 58 | |
59 | fGridColor(5), | |
60 | ||
fd31e9de | 61 | fJets(), |
62 | fTracks(), | |
63 | ||
4673ff03 | 64 | fRnrJets (kTRUE), |
65 | fRnrTracks (kTRUE), | |
66 | ||
67 | fOneSelection (kTRUE), | |
68 | fTwoSelection (kFALSE), | |
9b6216c0 | 69 | fSelConnected (kFALSE), |
4673ff03 | 70 | |
fd31e9de | 71 | fJet1(0), fJet2(0), fTrack1(0), fTrack2(0), |
72 | ||
4673ff03 | 73 | fSelectionFlag (1) |
74 | { | |
9b6216c0 | 75 | // Constructor. |
76 | ||
4673ff03 | 77 | SetMainColorPtr(&fGridColor); |
a15e6d7d | 78 | InitMainTrans(); |
4673ff03 | 79 | } |
80 | ||
9b6216c0 | 81 | AliEveJetPlane::~AliEveJetPlane() |
82 | { | |
83 | // Destructor. | |
84 | ||
85 | if (fSelConnected) | |
86 | { | |
87 | gEve->GetSelection()->Disconnect("SelectionAdded(TEveElement*)", this); | |
88 | } | |
89 | } | |
90 | ||
57ffa5fb | 91 | /******************************************************************************/ |
4673ff03 | 92 | |
ff3111ab | 93 | void AliEveJetPlane::AddJet(AliAODJet* jet) |
4673ff03 | 94 | { |
a97abca8 | 95 | // Add a jet for display. |
ff3111ab | 96 | |
2ea57cb0 | 97 | fJets.push_back(*jet); |
4673ff03 | 98 | } |
99 | ||
57ffa5fb | 100 | /******************************************************************************/ |
4673ff03 | 101 | |
2ea57cb0 | 102 | void AliEveJetPlane::AddTrack(AliAODTrack* track) |
4673ff03 | 103 | { |
a97abca8 | 104 | // Add a track for display. |
105 | ||
2ea57cb0 | 106 | fTracks.push_back(*track); |
4673ff03 | 107 | } |
108 | ||
e930bdfa | 109 | void AliEveJetPlane::CreateArrows() |
110 | { | |
111 | // Create arrows according to current state. | |
112 | ||
361f01a5 | 113 | TEveManager::TRedrawDisabler noRedraw(gEve); |
114 | ||
e930bdfa | 115 | DestroyElements(); |
116 | ||
9b6216c0 | 117 | // Finding the maximum energy |
118 | Double_t eJetMax = 0., eTrackMax = 0., eMax; | |
119 | { | |
120 | std::vector<AliAODTrack>::iterator k = fTracks.begin(); | |
121 | std::vector<AliAODJet>::iterator j = fJets.begin(); | |
122 | ||
123 | while (j != fJets.end()) | |
124 | { | |
125 | if (j->E() > eJetMax) eJetMax = j->E(); | |
126 | ++j; | |
127 | } | |
128 | ||
129 | while (k != fTracks.end()) | |
130 | { | |
131 | if (k->E() > eTrackMax) eTrackMax = k->E(); | |
132 | ++k; | |
133 | } | |
134 | ||
135 | eMax = eJetMax > eTrackMax ? eJetMax : eTrackMax; | |
136 | } | |
137 | ||
138 | // Colors | |
139 | Int_t nCol = gStyle->GetNumberOfColors(); | |
140 | ||
141 | Double_t eta, phi, e, x, y, h; | |
e930bdfa | 142 | |
143 | if (fRnrJets) | |
144 | { | |
145 | UInt_t jetid = 0; | |
146 | std::vector<AliAODJet>::iterator j = fJets.begin(); | |
147 | while (j != fJets.end()) | |
148 | { | |
149 | eta = j->Eta(); | |
150 | phi = j->Phi(); | |
151 | e = j->E(); | |
9b6216c0 | 152 | h = TMath::Log(e + 1.) * fEnergyScale; |
ff3111ab | 153 | |
e930bdfa | 154 | x = eta*(fEtaScale); |
155 | y = phi*(fPhiScale) - 350; | |
ff3111ab | 156 | |
361f01a5 | 157 | Int_t colBin = TMath::Min((Int_t) ((nCol-2)*TMath::Log(e + 1.)/(TMath::Log(eMax + 1.))),nCol-2); |
9b6216c0 | 158 | Int_t colIdx = gStyle->GetColorPalette(colBin); |
ff3111ab | 159 | |
9b6216c0 | 160 | TEveArrow *a = new TEveArrow(0, 0 , h, x, y, 0); |
e930bdfa | 161 | a->SetSourceObject(&*j); |
162 | a->SetElementName (Form("Jet %d", jetid)); | |
ff3111ab | 163 | a->SetElementTitle(Form("Jet 4-momentum: %f, %f, %f, %f \n Pt-Eta-Phi values: %f, %f, %f", |
9b6216c0 | 164 | j->Px(), j->Py(), j->Pz(), e, j->Pt(), eta, phi )); |
e930bdfa | 165 | a->SetPickable(kTRUE); |
9b6216c0 | 166 | a->SetMainColor(colIdx); |
361f01a5 | 167 | a->SetTubeR(0.016*fArrowJetScale); |
168 | a->SetConeR(0.049*fArrowJetScale); | |
169 | a->SetConeL(0.170*fArrowJetScale); | |
e930bdfa | 170 | AddElement(a); |
171 | ||
172 | ++j; ++jetid; | |
173 | } | |
174 | } | |
175 | ||
176 | if (fRnrTracks) | |
177 | { | |
178 | UInt_t trackid = 0; | |
ff3111ab | 179 | std::vector<AliAODTrack>::iterator k = fTracks.begin(); |
e930bdfa | 180 | while (k != fTracks.end()) |
181 | { | |
182 | eta = k->Eta(); | |
183 | phi = k->Phi(); | |
184 | e = k->E(); | |
9b6216c0 | 185 | h = TMath::Log(e + 1.) * fEnergyScale; |
ff3111ab | 186 | |
9b6216c0 | 187 | if (e < 0) |
188 | { | |
189 | Warning("CreateArrows()", | |
190 | "Track %d has negative energy - NOT DISPLAYED.", trackid); | |
191 | ++k; ++trackid; | |
192 | continue; | |
193 | } | |
194 | ||
e930bdfa | 195 | x = eta*(fEtaScale); |
196 | y = phi*(fPhiScale) - 350; | |
ff3111ab | 197 | |
361f01a5 | 198 | Int_t colBin = TMath::Min((Int_t) ((nCol-2)*TMath::Log(e + 1.)/(TMath::Log(eMax + 1.))),nCol-2); |
9b6216c0 | 199 | Int_t colIdx = gStyle->GetColorPalette(colBin); |
ff3111ab | 200 | |
9b6216c0 | 201 | TEveArrow *a = new TEveArrow(0, 0 , h, x, y, 0); |
e930bdfa | 202 | a->SetSourceObject(&*k); |
203 | a->SetElementName (Form("Track %d", trackid)); | |
ff3111ab | 204 | a->SetElementTitle(Form("Track 4-momentum: %f, %f, %f, %f \n Pt-Eta-Phi values: %f, %f, %f", |
9b6216c0 | 205 | k->Px(), k->Py(), k->Pz(), e, k->Pt(), eta, phi )); |
e930bdfa | 206 | a->SetPickable(kTRUE); |
9b6216c0 | 207 | a->SetMainColor(colIdx); |
361f01a5 | 208 | a->SetTubeR(0.015*fArrowTrackScale); |
209 | a->SetConeR(0.040*fArrowTrackScale); | |
210 | a->SetConeL(0.130*fArrowTrackScale); | |
e930bdfa | 211 | AddElement(a); |
212 | ||
213 | ++k; ++trackid; | |
214 | } | |
215 | } | |
9b6216c0 | 216 | |
217 | if ( ! fSelConnected) | |
218 | { | |
219 | gEve->GetSelection()->Connect("SelectionAdded(TEveElement*)", | |
220 | "AliEveJetPlane", this, "SelectionAdded(TEveElement*)"); | |
221 | fSelConnected = kTRUE; | |
222 | } | |
223 | } | |
224 | ||
9b6216c0 | 225 | /******************************************************************************/ |
226 | ||
227 | void AliEveJetPlane::SelectionAdded(TEveElement* el) | |
228 | { | |
229 | // Slot called when EVE selection gets a new element. | |
230 | ||
ff3111ab | 231 | |
232 | if (fOneSelection) | |
9b6216c0 | 233 | { |
ff3111ab | 234 | if (HasChild(el)) |
235 | { | |
236 | printf("\n\nNOW SELECTED: %s\n", el->GetElementName()); | |
237 | ||
238 | TObject *src = el->GetSourceObject(); | |
9b6216c0 | 239 | |
ff3111ab | 240 | AliAODTrack *k = dynamic_cast<AliAODTrack*>(src); |
241 | AliAODJet *j = dynamic_cast<AliAODJet*> (src); | |
9b6216c0 | 242 | |
ff3111ab | 243 | // printf ("Track %p --- Jet %p\n", (void*)t, (void*)j); |
244 | if (k) printf("Track 4-momentum: %f, %f, %f, %f \nPt-Eta-Phi values: %f, %f, %f \n", | |
245 | k->Px(), k->Py(), k->Pz(), k->E(), k->Pt(), k->Eta(), k->Phi() ); | |
9b6216c0 | 246 | |
ff3111ab | 247 | if (j) printf("Jet 4-momentum: %f, %f, %f, %f \nPt-Eta-Phi values: %f, %f, %f \n", |
248 | j->Px(), j->Py(), j->Pz(), j->E(), j->Pt(), j->Eta(), j->Phi() ); | |
249 | } | |
9b6216c0 | 250 | } |
251 | ||
252 | TEveSelection *sel = gEve->GetSelection(); | |
ff3111ab | 253 | if (fTwoSelection && sel->NumChildren() == 2) |
9b6216c0 | 254 | { |
ff3111ab | 255 | Int_t numvps = 0; |
256 | AliVParticle *vpart[2] = { 0 }; | |
257 | TEveElement *elmnt[2] = { 0 }; | |
258 | ||
259 | for (List_i i = sel->BeginChildren(); i != sel->EndChildren(); ++i) | |
9b6216c0 | 260 | { |
ff3111ab | 261 | if (HasChild(*i)) |
262 | { | |
263 | TEveElement *chld = *i; | |
264 | TObject *src = chld->GetSourceObject(); | |
265 | AliVParticle *p = dynamic_cast<AliVParticle*>(src); | |
266 | ||
267 | if (p != 0) | |
268 | { | |
269 | vpart[numvps] = p; | |
270 | elmnt[numvps] = chld; | |
271 | ++numvps; | |
272 | if (numvps >= 2) | |
273 | break; | |
274 | } | |
275 | } | |
276 | } | |
9b6216c0 | 277 | |
ff3111ab | 278 | Double_t eta0, eta1, phi0, phi1, d; |
9b6216c0 | 279 | |
ff3111ab | 280 | if (numvps == 2) |
281 | { | |
282 | eta0 = vpart[0]->Eta(); | |
283 | eta1 = vpart[1]->Eta(); | |
284 | phi0 = vpart[0]->Phi(); | |
285 | phi1 = vpart[1]->Phi(); | |
286 | ||
287 | d = TMath::Sqrt(TMath::Power(eta1-eta0,2) + TMath::Power(phi1-phi0,2)); | |
288 | printf("\n\nNOW SELECTED: '%s' and '%s'\n", | |
289 | elmnt[0]->GetElementName(), elmnt[1]->GetElementName()); | |
290 | printf("Eta-Phi Distance: %f\n", d); | |
9b6216c0 | 291 | } |
292 | } | |
e930bdfa | 293 | } |
4673ff03 | 294 | |
57ffa5fb | 295 | /******************************************************************************/ |
4673ff03 | 296 | |
d810d0de | 297 | void AliEveJetPlane::ComputeBBox() |
4673ff03 | 298 | { |
a97abca8 | 299 | // Calculate bounding-box. |
300 | ||
4673ff03 | 301 | BBoxInit(); |
302 | BBoxCheckPoint(-350, -350, -20); | |
2ea57cb0 | 303 | BBoxCheckPoint( 350, 350, 20); |
4673ff03 | 304 | } |
305 | ||
e930bdfa | 306 | |
d810d0de | 307 | void AliEveJetPlane::Paint(Option_t* /*option*/) |
4673ff03 | 308 | { |
a97abca8 | 309 | // Paint the object. |
310 | ||
4673ff03 | 311 | TBuffer3D buff(TBuffer3DTypes::kGeneric); |
312 | ||
313 | // Section kCore | |
314 | buff.fID = this; | |
68ca2fe7 | 315 | buff.fColor = GetMainColor(); |
316 | buff.fTransparency = GetMainTransparency(); | |
a15e6d7d | 317 | if (HasMainTrans()) RefMainTrans().SetBuffer3D(buff); |
4673ff03 | 318 | buff.SetSectionsValid(TBuffer3D::kCore); |
319 | ||
320 | Int_t reqSections = gPad->GetViewer3D()->AddObject(buff); | |
321 | if (reqSections == TBuffer3D::kNone) { | |
d810d0de | 322 | // printf("AliEveJetPlane::Paint viewer was happy with Core buff3d.\n"); |
4673ff03 | 323 | return; |
324 | } | |
325 | } |