From Annalisa: new files for TOF visualization.
[u/mrichter/AliRoot.git] / EVE / Alieve / TOFDigitsInfo.cxx
1 //
2 // TOFDigitsInfo
3 //
4
5 #include <Reve/TTreeTools.h>
6
7 #include "TOFDigitsInfo.h"
8 #include <AliTOFdigit.h>
9 #include <AliTOFGeometryV5.h>
10 //#include <AliTOFDigitMap.h>
11
12 using namespace Reve;
13 using namespace Alieve;
14 using namespace std;
15
16 //_________________________________________________________
17
18 ClassImp(TOFDigitsInfo)
19
20   TOFDigitsInfo::TOFDigitsInfo(): 
21     TObject(),
22     ReferenceCount(),
23     fTree (0),
24     fNewTree (0),
25     fGeom (0),
26     fTOFdigitMap(new AliTOFDigitMap())
27 {}
28 /* ******************************************************* */
29
30 TOFDigitsInfo:: ~TOFDigitsInfo() 
31 {
32
33   delete fGeom;
34   delete fTree;
35   delete fNewTree;
36   delete fTOFdigitMap;
37
38 }
39 /* ******************************************************* */
40
41 void TOFDigitsInfo::SetTree(TTree* tree)
42 {
43   static const Exc_t eH("TOFDigitsInfo::SetTree ");
44   
45   if(fGeom == 0) {
46     fGeom = new AliTOFGeometryV5();
47   }
48   
49   fTree = tree;
50   /*
51   DecRefCount();
52   IncRefCount();
53   */
54 }
55 /* ******************************************************* */
56
57 void TOFDigitsInfo::LoadDigits()
58 {
59
60   TClonesArray *digitsTOF = 0x0;
61   AliTOFdigit *digs;
62
63   fTree->SetBranchAddress("TOF",&digitsTOF);
64   fTree->GetEntry(0);
65
66   Int_t vol[5] = {-1,-1,-1,-1,-1};
67
68   for (Int_t digitNumber=0; digitNumber<digitsTOF->GetEntries(); digitNumber++) {
69
70     //if (digitNumber==digitsTOF->GetEntries()-1) printf(" Hello  4 -> %3i digit of %i \n", digitNumber+1, digitsTOF->GetEntries());
71   
72     digs = (AliTOFdigit*)digitsTOF->UncheckedAt(digitNumber);
73
74     vol[0] = digs->GetSector(); // Sector Number (0-17)
75     vol[1] = digs->GetPlate();  // Plate Number (0-4)
76     vol[2] = digs->GetStrip();  // Strip Number (0-14/18)
77     vol[3] = digs->GetPadx();   // Pad Number in x direction (0-47)
78     vol[4] = digs->GetPadz();   // Pad Number in z direction (0-1)
79
80     fTOFdigitMap->AddDigit(vol, digitNumber);
81     //if (digitNumber==digitsTOF->GetEntries()-1) printf(" I am inside LoadDigits %3i \n", digitNumber);
82
83   }
84
85 }
86
87 /* ******************************************************* */
88
89 void TOFDigitsInfo::GetDigits(Int_t nSector, Int_t nPlate,
90                               Int_t nStrip, Int_t nPadZ, Int_t nPadX,
91                               Int_t indexDigit[3])
92 {
93
94   Int_t vol[5] = {nSector,nPlate,nStrip,nPadX,nPadZ};
95
96   fTOFdigitMap->GetDigitIndex(vol, indexDigit);
97
98 }
99 /* ******************************************************* */
100
101 TClonesArray* TOFDigitsInfo::GetDigits(Int_t nSector, Int_t nPlate,
102                                        Int_t nStrip)
103 {
104
105   Int_t newCounter = 0;
106   Int_t nDigitsInVolume[3] = {-1, -1, -1};
107   Int_t dummy[3] = {-1, -1, -1};
108   Int_t informations[4] = {-1, -1, -1, -1};
109
110   TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit",  300);
111   TClonesArray &ldigits = *digitsTOFnew;
112
113   AliTOFdigit *digs;
114
115   TClonesArray *digitsTOF = 0x0;
116   fTree->SetBranchAddress("TOF",&digitsTOF);
117   fTree->GetEntry(0);
118
119
120   Int_t vol[5] = {nSector,nPlate,nStrip,-1,-1};
121
122   for(Int_t iPadZ=0; iPadZ<fGeom->NpadZ(); iPadZ++){
123     vol[4] = iPadZ;
124     for(Int_t iPadX=0; iPadX<fGeom->NpadX(); iPadX++) {
125       vol[3] = iPadX;
126
127       //GetDigits(vol[0], vol[1], vol[2], vol[3], vol[4], nDigitsInVolume)
128
129       fTOFdigitMap->GetDigitIndex(vol, nDigitsInVolume);
130
131       for (Int_t ii=0; ii<3; ii++) {
132
133         if (nDigitsInVolume[ii]>=0 ) {
134           //printf("  nDigitsInVolume[%2i]  = %3i\n ", ii, nDigitsInVolume[ii]);
135           digs = (AliTOFdigit*)digitsTOF->UncheckedAt(nDigitsInVolume[ii]);
136           informations[0] = digs->GetTdc();
137           informations[1] = digs->GetAdc();
138           informations[2] = digs->GetToT();
139           informations[3] = digs->GetTdcND();
140           new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
141         }
142
143       }
144
145       for (Int_t ii=0; ii<4; ii++) informations[ii]=-1;
146       for (Int_t ii=0; ii<3; ii++) dummy[ii]=-1;
147       for (Int_t ii=0; ii<3; ii++) nDigitsInVolume[ii]=-1;
148
149     }
150   }
151
152   /*
153   if (digitsTOFnew)
154     printf("Sector %2i   Plate %1i  Strip %2i  -> number of digits %3i \n",
155            nSector, nPlate, nStrip, digitsTOFnew->GetEntries());
156   */
157   return digitsTOFnew;
158
159 }
160 /* ******************************************************* */
161
162 TClonesArray* TOFDigitsInfo::GetDigits(Int_t nSector)
163 {
164
165   Int_t newCounter = 0;
166   Int_t nDigitsInVolume[3] = {-1, -1, -1};
167   Int_t dummy[3] = {-1, -1, -1};
168   Int_t informations[4] = {-1, -1, -1, -1};
169
170   Int_t nStrips=19;
171
172   TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit",  300);
173   TClonesArray &ldigits = *digitsTOFnew;
174
175   AliTOFdigit *digs;
176
177   TClonesArray *digitsTOF = 0x0;
178   fTree->SetBranchAddress("TOF",&digitsTOF);
179   fTree->GetEntry(0);
180
181   //Int_t nSector = 1;
182   Int_t vol[5] = {nSector,-1,-1,-1,-1};
183  
184   for(Int_t iPlate=0; iPlate<fGeom->NPlates(); iPlate++){
185     vol[1] = iPlate;
186     if(iPlate==2) nStrips=15;
187     else nStrips=19;
188       
189     for(Int_t iStrip=0; iStrip<nStrips; iStrip++){
190       vol[2] = iStrip;
191         
192       for(Int_t iPadZ=0; iPadZ<fGeom->NpadZ(); iPadZ++){
193         vol[4] = iPadZ;
194
195         for(Int_t iPadX=0; iPadX<fGeom->NpadX(); iPadX++) {
196           vol[3] = iPadX;
197
198           //GetDigits(vol[0], vol[1], vol[2], vol[3], vol[4], nDigitsInVolume)
199
200           fTOFdigitMap->GetDigitIndex(vol, nDigitsInVolume);
201
202           for (Int_t ii=0; ii<3; ii++) {
203
204             if (nDigitsInVolume[ii]>=0 ) {
205               //printf("  nDigitsInVolume[%2i]  = %3i\n ", ii, nDigitsInVolume[ii]);
206               digs = (AliTOFdigit*)digitsTOF->UncheckedAt(nDigitsInVolume[ii]);
207               informations[0] = digs->GetTdc();
208               informations[1] = digs->GetAdc();
209               informations[2] = digs->GetToT();
210               informations[3] = digs->GetTdcND();
211               new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
212             }
213
214           }
215
216           for (Int_t ii=0; ii<4; ii++) informations[ii]=-1;
217           for (Int_t ii=0; ii<3; ii++) dummy[ii]=-1;
218           for (Int_t ii=0; ii<3; ii++) nDigitsInVolume[ii]=-1;
219             
220         }
221       }
222     }
223   }
224
225   /*
226   if (digitsTOFnew)
227     printf("Sector %2i   Plate %1i  Strip %2i  -> number of digits %3i \n",
228            nSector, nPlate, nStrip, digitsTOFnew->GetEntries());
229   */
230   return digitsTOFnew;
231
232 }
233 /* ******************************************************* */
234
235 void TOFDigitsInfo::GetDigits()
236 {
237
238   for (Int_t iSector=0; iSector<fGeom->NSectors(); iSector++) {
239
240     fNewTree = new TTree();
241
242
243
244
245   }
246
247 }