2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 #include "AliEveJetPlane.h"
12 #include <TEveTrans.h>
13 #include <TEveArrow.h>
14 #include <TEveSelection.h>
15 #include <TEveManager.h>
17 #include <TBuffer3D.h>
18 #include <TBuffer3DTypes.h>
19 #include <TVirtualPad.h>
20 #include <TVirtualViewer3D.h>
26 //______________________________________________________________________________
28 // Show jets and tracks in eta-phi plane.
32 ClassImp(AliEveJetPlane)
34 Bool_t AliEveJetPlane::fgOneMomentumXYZ = kFALSE;
35 Bool_t AliEveJetPlane::fgOneMomentumPhiTheta = kFALSE;
36 Bool_t AliEveJetPlane::fgOneEta = kFALSE;
37 Bool_t AliEveJetPlane::fgOneE = kFALSE;
38 Bool_t AliEveJetPlane::fgOneChgMass = kFALSE;
41 AliEveJetPlane::AliEveJetPlane(Int_t iev) :
42 TEveElementList(Form("AliEveJetPlane %i",iev), Form("%i",iev)),
47 fMaxPhi ( 2.0 * TMath::Pi() ),
53 fPhiScale(350/(TMath::Pi())),
57 fArrowTrackScale (0.7),
67 fOneSelection (kTRUE),
68 fTwoSelection (kFALSE),
69 fSelConnected (kFALSE),
71 fJet1(0), fJet2(0), fTrack1(0), fTrack2(0),
77 SetMainColorPtr(&fGridColor);
81 AliEveJetPlane::~AliEveJetPlane()
87 gEve->GetSelection()->Disconnect("SelectionAdded(TEveElement*)", this);
91 /******************************************************************************/
93 void AliEveJetPlane::AddJet(AliAODJet* jet)
95 // Add a jet for display.
97 fJets.push_back(*jet);
100 /******************************************************************************/
102 void AliEveJetPlane::AddTrack(AliAODTrack* track)
104 // Add a track for display.
106 fTracks.push_back(*track);
109 void AliEveJetPlane::CreateArrows()
111 // Create arrows according to current state.
113 TEveManager::TRedrawDisabler noRedraw(gEve);
117 // Finding the maximum energy
118 Double_t eJetMax = 0., eTrackMax = 0., eMax;
120 std::vector<AliAODTrack>::iterator k = fTracks.begin();
121 std::vector<AliAODJet>::iterator j = fJets.begin();
123 while (j != fJets.end())
125 if (j->E() > eJetMax) eJetMax = j->E();
129 while (k != fTracks.end())
131 if (k->E() > eTrackMax) eTrackMax = k->E();
135 eMax = eJetMax > eTrackMax ? eJetMax : eTrackMax;
139 Int_t nCol = gStyle->GetNumberOfColors();
141 Double_t eta, phi, e, x, y, h;
146 std::vector<AliAODJet>::iterator j = fJets.begin();
147 while (j != fJets.end())
152 h = TMath::Log(e + 1.) * fEnergyScale;
155 y = phi*(fPhiScale) - 350;
157 Int_t colBin = TMath::Min((Int_t) ((nCol-2)*TMath::Log(e + 1.)/(TMath::Log(eMax + 1.))),nCol-2);
158 Int_t colIdx = gStyle->GetColorPalette(colBin);
160 TEveArrow *a = new TEveArrow(0, 0 , h, x, y, 0);
161 a->SetSourceObject(&*j);
162 a->SetElementName (Form("Jet %d", jetid));
163 a->SetElementTitle(Form("Jet 4-momentum: %f, %f, %f, %f \n Pt-Eta-Phi values: %f, %f, %f",
164 j->Px(), j->Py(), j->Pz(), e, j->Pt(), eta, phi ));
165 a->SetPickable(kTRUE);
166 a->SetMainColor(colIdx);
167 a->SetTubeR(0.016*fArrowJetScale);
168 a->SetConeR(0.049*fArrowJetScale);
169 a->SetConeL(0.170*fArrowJetScale);
179 std::vector<AliAODTrack>::iterator k = fTracks.begin();
180 while (k != fTracks.end())
185 h = TMath::Log(e + 1.) * fEnergyScale;
189 Warning("CreateArrows()",
190 "Track %d has negative energy - NOT DISPLAYED.", trackid);
196 y = phi*(fPhiScale) - 350;
198 Int_t colBin = TMath::Min((Int_t) ((nCol-2)*TMath::Log(e + 1.)/(TMath::Log(eMax + 1.))),nCol-2);
199 Int_t colIdx = gStyle->GetColorPalette(colBin);
201 TEveArrow *a = new TEveArrow(0, 0 , h, x, y, 0);
202 a->SetSourceObject(&*k);
203 a->SetElementName (Form("Track %d", trackid));
204 a->SetElementTitle(Form("Track 4-momentum: %f, %f, %f, %f \n Pt-Eta-Phi values: %f, %f, %f",
205 k->Px(), k->Py(), k->Pz(), e, k->Pt(), eta, phi ));
206 a->SetPickable(kTRUE);
207 a->SetMainColor(colIdx);
208 a->SetTubeR(0.015*fArrowTrackScale);
209 a->SetConeR(0.040*fArrowTrackScale);
210 a->SetConeL(0.130*fArrowTrackScale);
217 if ( ! fSelConnected)
219 gEve->GetSelection()->Connect("SelectionAdded(TEveElement*)",
220 "AliEveJetPlane", this, "SelectionAdded(TEveElement*)");
221 fSelConnected = kTRUE;
225 /******************************************************************************/
227 void AliEveJetPlane::SelectionAdded(TEveElement* el)
229 // Slot called when EVE selection gets a new element.
236 printf("\n\nNOW SELECTED: %s\n", el->GetElementName());
238 TObject *src = el->GetSourceObject();
240 AliAODTrack *k = dynamic_cast<AliAODTrack*>(src);
241 AliAODJet *j = dynamic_cast<AliAODJet*> (src);
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() );
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() );
252 TEveSelection *sel = gEve->GetSelection();
253 if (fTwoSelection && sel->NumChildren() == 2)
256 AliVParticle *vpart[2] = { 0 };
257 TEveElement *elmnt[2] = { 0 };
259 for (List_i i = sel->BeginChildren(); i != sel->EndChildren(); ++i)
263 TEveElement *chld = *i;
264 TObject *src = chld->GetSourceObject();
265 AliVParticle *p = dynamic_cast<AliVParticle*>(src);
270 elmnt[numvps] = chld;
278 Double_t eta0, eta1, phi0, phi1, d;
282 eta0 = vpart[0]->Eta();
283 eta1 = vpart[1]->Eta();
284 phi0 = vpart[0]->Phi();
285 phi1 = vpart[1]->Phi();
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);
295 /******************************************************************************/
297 void AliEveJetPlane::ComputeBBox()
299 // Calculate bounding-box.
302 BBoxCheckPoint(-350, -350, -20);
303 BBoxCheckPoint( 350, 350, 20);
307 void AliEveJetPlane::Paint(Option_t* /*option*/)
311 TBuffer3D buff(TBuffer3DTypes::kGeneric);
315 buff.fColor = GetMainColor();
316 buff.fTransparency = GetMainTransparency();
317 if (HasMainTrans()) RefMainTrans().SetBuffer3D(buff);
318 buff.SetSectionsValid(TBuffer3D::kCore);
320 Int_t reqSections = gPad->GetViewer3D()->AddObject(buff);
321 if (reqSections == TBuffer3D::kNone) {
322 // printf("AliEveJetPlane::Paint viewer was happy with Core buff3d.\n");