Add example of how to assign lines to a module.
[u/mrichter/AliRoot.git] / EVE / alice-macros / emcal_digits.C
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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  **************************************************************************/
9 #ifndef __CINT__
10
11 #include <TEveManager.h>
12 #include <TEveQuadSet.h>
13 #include <TGeoNode.h>
14 #include <TGeoBBox.h>
15 #include <TGeoManager.h>
16 #include <TStyle.h>
17 #include <TEveTrans.h>
18 #include <TClonesArray.h>
19
20 #include <EveBase/AliEveEventManager.h>
21
22 #include <AliRunLoader.h>
23 #include <AliCluster.h>
24 #include <EMCAL/AliEMCALGeometry.h>
25 #include <EMCAL/AliEMCALDigit.h>
26
27 #include <iostream>
28 #endif
29
30 void emcal_digits()
31 {
32   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
33
34   rl->LoadDigits("EMCAL");
35   TTree* dt = rl->GetTreeD("EMCAL", kFALSE);
36   if (!dt) return;
37
38   AliEveEventManager::AssertGeometry();
39
40   TGeoNode* node = gGeoManager->GetTopVolume()->FindNode("XEN1_1");
41
42   TGeoBBox* bbbox = (TGeoBBox*) node->GetDaughter(0) ->GetVolume()->GetShape();
43   TGeoBBox* sbbox = (TGeoBBox*) node->GetDaughter(10)->GetVolume()->GetShape();
44
45   TEveElementList* l = new TEveElementList("EMCAL");
46   l->SetTitle("Tooltip");
47   gEve->AddElement(l);
48
49   TEveFrameBox* frame_big = new TEveFrameBox();
50   frame_big->SetFrameColorRGBA(200,200,0,50);
51   frame_big->SetAABoxCenterHalfSize(0, 0, 0, bbbox->GetDX(), bbbox->GetDY(), bbbox->GetDZ());
52
53   TEveFrameBox* frame_sml = new TEveFrameBox();
54   frame_sml->SetFrameColorRGBA(200,200,0,50);
55   frame_sml->SetAABoxCenterHalfSize(0, 0, 0, sbbox->GetDX(), sbbox->GetDY(), sbbox->GetDZ());
56
57   gStyle->SetPalette(1, 0);
58   TEveRGBAPalette* pal = new TEveRGBAPalette(0, 512);
59   pal->SetLimits(0, 1024);
60
61   TEveQuadSet* smodules[12];
62
63
64   AliEMCALGeometry * geom  = AliEMCALGeometry::GetInstance();  
65   if (!geom) geom = AliEMCALGeometry::GetInstance("","");
66
67   for (Int_t sm=0; sm<12; ++sm)
68   {
69     TEveQuadSet* q = new TEveQuadSet(Form("SM %d", sm+1));
70     q->SetOwnIds(kTRUE);
71     q->Reset(TEveQuadSet::kQT_RectangleYZFixedDimX, kFALSE, 32);
72     q->SetDefWidth (geom->GetPhiTileSize());
73     q->SetDefHeight(geom->GetEtaTileSize());
74
75     q->RefMainTrans().SetFrom(*node->GetDaughter(sm)->GetMatrix());
76
77     q->SetFrame(sm < 10 ? frame_big : frame_sml);
78     q->SetPalette(pal);
79
80     gEve->AddElement(q, l);
81     smodules[sm] = q;
82
83     // Add line
84     /*
85     TEveLine *ll = new TEveLine("Test");
86     ll->SetMainColor(kRed);
87     ll->SetLineWidth(2);
88
89     ll->SetNextPoint(0, -20, -20);
90     ll->SetNextPoint(0,  20, -20);
91     ll->SetNextPoint(0,  20,  20);
92     ll->SetNextPoint(0, -20,  20);
93     ll->SetNextPoint(0, -20, -20);
94     ll->RefMainTrans() = q->RefMainTrans();
95
96     q->AddElement(ll);
97     */
98   }
99
100   TClonesArray *digits = 0;
101   dt->SetBranchAddress("EMCAL", &digits);
102   dt->GetEntry(0);
103   Int_t nEnt = digits->GetEntriesFast();
104   AliEMCALDigit * dig;
105
106   Float_t amp   = -1 ;
107   Float_t time  = -1 ;
108   Int_t id      = -1 ;
109   Int_t iSupMod =  0 ;
110   Int_t iTower  =  0 ;
111   Int_t iIphi   =  0 ;
112   Int_t iIeta   =  0 ;
113   Int_t iphi    =  0 ;
114   Int_t ieta    =  0 ;
115   Double_t x, y, z;
116
117   for (Int_t idig = 0; idig < nEnt; ++idig)
118   {
119     dig = static_cast<AliEMCALDigit *>(digits->At(idig));
120
121     if(dig != 0) {
122       id   = dig->GetId() ; //cell (digit) label
123       amp  = dig->GetAmp(); //amplitude in cell (digit)
124       time = dig->GetTime();//time of creation of digit after collision
125
126       std::cout<<"Cell ID "<<id<<" Amp "<<amp<<std::endl;//" time "<<time<<endl;
127
128       //Geometry methods
129       geom->GetCellIndex(id,iSupMod,iTower,iIphi,iIeta);
130       //Gives SuperModule and Tower numbers
131       geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,
132                                         iIphi, iIeta,iphi,ieta);
133       //Gives label of cell in eta-phi position per each supermodule
134
135       std::cout<< "SModule "<<iSupMod<<"; Tower "<<iTower
136           <<"; Eta "<<iIeta<<"; Phi "<<iIphi
137           <<"; Cell Eta "<<ieta<<"; Cell Phi "<<iphi<<std::endl;
138
139       geom->RelPosCellInSModule(id, x, y, z);
140       std::cout << x <<" "<< y <<" "<< z <<std::endl;
141
142       TEveQuadSet* q = smodules[iSupMod];
143       q->AddQuad(y, z);
144       q->QuadValue(TMath::Nint(amp));
145       q->QuadId(new AliEMCALDigit(*dig));
146     } else {
147       std::cout<<"Digit pointer 0x0"<<std::endl;
148     }
149   }
150
151   rl->UnloadDigits("EMCAL");
152
153
154   for (Int_t sm = 0; sm < 12; ++sm)
155   {
156     smodules[iSupMod]->RefitPlex();
157   }
158
159   gEve->Redraw3D();
160 }