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 "AliEveJetPlaneGL.h"
11 #include <EveDet/AliEveJetPlane.h>
13 #include <TGLRnrCtx.h>
14 #include <TGLSelectRecord.h>
15 #include <TGLIncludes.h>
25 //______________________________________________________________________________
29 ClassImp(AliEveJetPlaneGL)
31 AliEveJetPlaneGL::AliEveJetPlaneGL() : TGLObject(), fM(0)
33 fDLCache = kFALSE; // Disable display list -- axis pain.
36 AliEveJetPlaneGL::~AliEveJetPlaneGL()
39 /******************************************************************************/
41 Bool_t AliEveJetPlaneGL::SetModel(TObject* obj, const Option_t* /*opt*/)
43 if(SetModelCheckClass(obj, AliEveJetPlane::Class())) {
44 fM = dynamic_cast<AliEveJetPlane*>(obj);
50 void AliEveJetPlaneGL::SetBBox()
52 // !! This ok if master sub-classed from TAttBBox
53 SetAxisAlignedBBox(((AliEveJetPlane*)fExternalObj)->AssertBBox());
56 /******************************************************************************/
58 void AliEveJetPlaneGL::DirectDraw(TGLRnrCtx & /*rnrCtx*/) const
61 Float_t minEta = (fM->fMinEta)*(fM->fEtaScale);
62 Float_t maxEta = (fM->fMaxEta)*(fM->fEtaScale);
63 Float_t minPhi = (fM->fMinPhi)*(fM->fPhiScale);
64 Float_t maxPhi = (fM->fMaxPhi)*(fM->fPhiScale);
65 Float_t phiCoord, etaCoord, dPhi, dEta;
66 Double_t eta, phi, E, x, y;
68 // Show frame for Eta-Phi coordinates
70 glBegin(GL_LINE_LOOP);
71 glVertex3f( minEta, minPhi, 0);
72 glVertex3f( maxEta, minPhi, 0);
73 glVertex3f( maxEta, maxPhi, 0);
74 glVertex3f( minEta, maxPhi, 0);
77 // Show grid in Eta-Phi coordinates
79 dPhi = (maxPhi-minPhi)/(fM->fNPhiDiv - 1);
80 dEta = (maxEta-minEta)/(fM->fNEtaDiv - 1);
82 for (int count=1; count < fM->fNPhiDiv-1; count++)
84 phiCoord = minPhi + count*dPhi;
86 glVertex3f( minEta, phiCoord, 0);
87 glVertex3f( maxEta, phiCoord, 0);
91 for (int count=1; count < fM->fNEtaDiv-1; count++)
93 etaCoord = minEta + count*dEta;
95 glVertex3f( etaCoord, minPhi, 0);
96 glVertex3f( etaCoord, maxPhi, 0);
100 // Show axis tick marks and labels
103 TGLCapabilitySwitch lights_off(GL_LIGHTING, false);
106 ap.SetLineColor(fM->fGridColor);
107 ap.SetTextColor(fM->fGridColor);
108 TGLVector3 start, end;
110 start.Set(minEta, minPhi, 0);
111 end.Set(maxEta, minPhi, 0);
112 ap.PaintGLAxis(start.CArr(), end.CArr(), fM->fMinEta, fM->fMaxEta, 205);
114 start.Set(maxEta, minPhi, 0);
115 end.Set(maxEta, maxPhi, 0);
116 ap.PaintGLAxis(start.CArr(), end.CArr(), fM->fMinPhi, fM->fMaxPhi, 205);
120 // Finding the maximum energy
122 std::vector<AliAODTrack>::iterator k = fM->fTracks.begin();
123 std::vector<AliAODJet>::iterator j = fM->fJets.begin();
125 Double_t eJetMax = 0., eTrackMax = 0., eMax;
127 while (j != fM->fJets.end())
129 if (j->E() > eJetMax) eJetMax = j->E();
133 while (k != fM->fTracks.end())
135 if (k->E() > eTrackMax) eTrackMax = k->E();
139 eMax = eJetMax > eTrackMax ? eJetMax : eTrackMax;
141 // Rendering Jets and Tracks in the Eta-Phi plane
143 Int_t nCol = gStyle->GetNumberOfColors();
144 Float_t col[4] = { 0., 0., 0., 0.75};
146 glBlendFunc(GL_SRC_ALPHA,GL_ONE);
147 TGLUtil::SetDrawQuality(6);
153 glEnable(GL_BLEND); // Turn Blending On
154 glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off
158 j = fM->fJets.begin();
160 while (j != fM->fJets.end())
166 x = eta*(fM->fEtaScale);
167 y = phi*(fM->fPhiScale);
169 Int_t colBin = TMath::Min((Int_t) ((nCol-2)*E*
170 TMath::Power(10.,fM->fEnergyColorScale)/(eMax)),nCol-2);
171 Int_t colIdx = gStyle->GetColorPalette(colBin);
172 TColor* c = gROOT->GetColor(colIdx);
176 col[0] = c->GetRed();
177 col[1] = c->GetGreen();
178 col[2] = c->GetBlue();
182 TGLUtil::DrawLine( TGLVertex3(x,y,0.),
183 TGLVector3(0.,0.,TMath::Log(E + 1.)*fM->fEnergyScale),
184 TGLUtil::kLineHeadArrow, 25.0, col);
195 glDisable(GL_BLEND); // Turn Blending Off
196 glEnable(GL_DEPTH_TEST); // Turn Depth Testing On
200 k = fM->fTracks.begin();
202 while (k != fM->fTracks.end())
210 // printf(" WARNING: Particle with negative energy has been found.\n");
211 // printf(" PARTICLE NOT DISPLAYED. TrackID: %i\n", trackid);
216 x = eta*(fM->fEtaScale);
217 y = phi*(fM->fPhiScale);
219 Int_t colBin = TMath::Min((Int_t) ((nCol-2)*E*
220 TMath::Power(10.,fM->fEnergyColorScale)/(eMax)),nCol-2);
221 Int_t colIdx = gStyle->GetColorPalette(colBin);
222 TColor* c = gROOT->GetColor(colIdx);
226 col[0] = c->GetRed();
227 col[1] = c->GetGreen();
228 col[2] = c->GetBlue();
232 TGLUtil::DrawLine( TGLVertex3(x,y,0.),
233 TGLVector3(0.,0.,TMath::Log(E + 1.)*fM->fEnergyScale),
234 TGLUtil::kLineHeadArrow, 5.0, col);
241 TGLUtil::ResetDrawQuality();
247 /******************************************************************************/
249 void AliEveJetPlaneGL::ProcessSelection(TGLRnrCtx & /*rnrCtx*/, TGLSelectRecord & rec)
251 // printf("beep %u\n", rec.GetN());
253 static Int_t jet1State;
254 static Int_t jet2State;
255 static Int_t track1State;
256 static Int_t track2State;
258 if (fM->fOneSelection)
264 AliAODJet v = fM->fJets[rec.GetItem(1)];
265 printf("Jet 4-momentum: %f, %f, %f, %f \n", v.Px(),v.Py(),v.Pz(),v.Pt() );
266 printf("Eta-Phi values: %f, %f\n", v.Eta(), v.Phi());
271 AliAODTrack v = fM->fTracks[rec.GetItem(2)];
272 printf("TEveTrack 4-momentum: %f, %f, %f, %f \n", v.Px(),v.Py(),v.Pz(),v.Pt() );
273 printf("Eta-Phi values: %f, %f\n", v.Eta(), v.Phi());
277 if (fM->fTwoSelection)
280 if ( fM->fSelectionFlag == 1)
284 fM->SetJet1(&(fM->fJets[rec.GetItem(1)]));
291 fM->SetTrack1(&(fM->fTracks[rec.GetItem(1)]));
296 fM->SetSelectionFlag(2);
301 if ( fM->fSelectionFlag == 2)
306 fM->SetJet2(&(fM->fJets[rec.GetItem(1)]));
313 fM->SetTrack2(&(fM->fTracks[rec.GetItem(1)]));
318 printf("Jet: %i, TEveTrack: %i \n", jet1State, track1State);
319 printf("Jet: %i, TEveTrack: %i \n\n", jet2State, track2State);
321 if(jet1State && jet2State)
323 Double_t Eta1, Eta2, Phi1, Phi2, d;
325 Eta1 = (fM->GetJet1()).Eta();
326 Eta2 = (fM->GetJet2()).Eta();
327 Phi1 = (fM->GetJet1()).Phi();
328 Phi2 = (fM->GetJet2()).Phi();
330 d = TMath::Sqrt(TMath::Power(Eta2-Eta1,2) + TMath::Power(Phi2-Phi1,2));
332 printf("Eta-Phi: %f, %f\n", Eta1, Phi1 );
333 printf("Eta-Phi: %f, %f\n", Eta2, Phi2 );
334 printf("Eta-Phi Distance: %f\n", d);
337 fM->SetSelectionFlag(1);