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 // AliEveTOFDigitsInfo
13 #include <TEveTreeTools.h>
15 #include "AliEveTOFDigitsInfo.h"
19 #include <AliTOFdigit.h>
20 #include <AliTOFGeometry.h>
21 #include <AliTOFrawData.h>
22 #include <AliTOFRawStream.h>
24 //_________________________________________________________
26 ClassImp(AliEveTOFDigitsInfo)
28 AliEveTOFDigitsInfo::AliEveTOFDigitsInfo():
34 fTOFdigitMap(new AliTOFDigitMap())
36 /* ******************************************************* */
38 AliEveTOFDigitsInfo:: ~AliEveTOFDigitsInfo()
47 /* ******************************************************* */
49 void AliEveTOFDigitsInfo::SetTree(TTree* tree)
51 static const TEveException eH("AliEveTOFDigitsInfo::SetTree ");
54 fGeom = new AliTOFGeometry();
63 /* ******************************************************* */
64 void AliEveTOFDigitsInfo::ReadRaw(AliRawReader* rawReader, Int_t nEvent)
66 // Read raw-data. AliTOFdigit is used to
67 // store raw-adata for all sub-detectors.
70 //Char_t fileName[100];
71 //sprintf(fileName,"TOFrawDataReadingFromEVE%d.txt",nEvent);
73 //ftxt.open(fileName,ios::app);
75 //ftxt << " " << nEvent << endl;
77 const Int_t kDDL = AliDAQ::NumberOfDdls("TOF");
79 TClonesArray *tofDigits = new TClonesArray("AliTOFdigit",10000);
81 Int_t bufsize = 32000;
82 TBranch *branch = fTree->Branch("TOF", &tofDigits, bufsize);
85 TClonesArray * clonesRawData = 0x0;
87 Int_t detectorIndex[5];
90 AliTOFRawStream stream(rawReader);
92 for (Int_t indexDDL = 0; indexDDL < kDDL; indexDDL++) {
95 stream.LoadRawData(indexDDL);
97 clonesRawData = (TClonesArray*)stream.GetRawData();
99 for (Int_t iRawData = 0; iRawData<clonesRawData->GetEntriesFast(); iRawData++) {
101 AliTOFrawData *tofRawDatum = (AliTOFrawData*)clonesRawData->UncheckedAt(iRawData);
103 if (tofRawDatum->GetTOT()==-1 || tofRawDatum->GetTOF()==-1) continue;
105 digit[0] = tofRawDatum->GetTOF();
106 digit[1] = tofRawDatum->GetTOT();
107 digit[2] = tofRawDatum->GetTOT();
110 if (indexDDL<10) ftxt << " " << indexDDL;
111 else ftxt << " " << indexDDL;
112 if (tofRawDatum->GetTRM()<10) ftxt << " " << tofRawDatum->GetTRM();
113 else ftxt << " " << tofRawDatum->GetTRM();
114 ftxt << " " << tofRawDatum->GetTRMchain();
115 if (tofRawDatum->GetTDC()<10) ftxt << " " << tofRawDatum->GetTDC();
116 else ftxt << " " << tofRawDatum->GetTDC();
117 ftxt << " " << tofRawDatum->GetTDCchannel();
119 stream.EquipmentId2VolumeId(indexDDL, tofRawDatum->GetTRM(), tofRawDatum->GetTRMchain(),
120 tofRawDatum->GetTDC(), tofRawDatum->GetTDCchannel(), detectorIndex);
121 //dummy = detectorIndex[3];
122 //detectorIndex[3] = detectorIndex[4];
123 //detectorIndex[4] = dummy;
125 if (detectorIndex[0]<10) ftxt << " -> " << detectorIndex[0];
126 else ftxt << " -> " << detectorIndex[0];
127 ftxt << " " << detectorIndex[1];
128 if (detectorIndex[2]<10) ftxt << " " << detectorIndex[2];
129 else ftxt << " " << detectorIndex[2];
130 ftxt << " " << detectorIndex[3];
131 if (detectorIndex[4]<10) ftxt << " " << detectorIndex[4];
132 else ftxt << " " << detectorIndex[4];
134 if (tofRawDatum->GetTOT()<10) ftxt << " " << tofRawDatum->GetTOT();
135 else if (tofRawDatum->GetTOT()>=10 && tofRawDatum->GetTOT()<100) ftxt << " " << tofRawDatum->GetTOT();
136 else if (tofRawDatum->GetTOT()>=100 && tofRawDatum->GetTOT()<1000) ftxt << " " << tofRawDatum->GetTOT();
137 else if (tofRawDatum->GetTOT()>=1000 && tofRawDatum->GetTOT()<10000) ftxt << " " << tofRawDatum->GetTOT();
138 else if (tofRawDatum->GetTOT()>=10000 && tofRawDatum->GetTOT()<100000) ftxt << " " << tofRawDatum->GetTOT();
139 else if (tofRawDatum->GetTOT()>=100000 && tofRawDatum->GetTOT()<1000000) ftxt << " " << tofRawDatum->GetTOT();
140 else ftxt << " " << tofRawDatum->GetTOT();
141 if (tofRawDatum->GetTOF()<10) ftxt << " " << tofRawDatum->GetTOF() << endl;
142 else if (tofRawDatum->GetTOF()>=10 && tofRawDatum->GetTOF()<100) ftxt << " " << tofRawDatum->GetTOF() << endl;
143 else if (tofRawDatum->GetTOF()>=100 && tofRawDatum->GetTOF()<1000) ftxt << " " << tofRawDatum->GetTOF() << endl;
144 else if (tofRawDatum->GetTOF()>=1000 && tofRawDatum->GetTOF()<10000) ftxt << " " << tofRawDatum->GetTOF() << endl;
145 else if (tofRawDatum->GetTOF()>=10000 && tofRawDatum->GetTOF()<100000) ftxt << " " << tofRawDatum->GetTOF() << endl;
146 else if (tofRawDatum->GetTOF()>=100000 && tofRawDatum->GetTOF()<1000000) ftxt << " " << tofRawDatum->GetTOF() << endl;
147 else ftxt << " " << tofRawDatum->GetTOF() << endl;
150 TClonesArray &aDigits = *tofDigits;
151 Int_t last = tofDigits->GetEntriesFast();
153 fTOFdigitMap->AddDigit(detectorIndex, last);
155 AliDebug(2,Form(" %3i -> %2i %2i %2i %2i %2i %i %i\n",
156 last, detectorIndex[0], detectorIndex[1], detectorIndex[2], detectorIndex[4], detectorIndex[3],
157 digit[1], digit[0]));
159 Int_t tracknum[3]={-1,-1,-1};
160 new (aDigits[last]) AliTOFdigit(tracknum, detectorIndex, digit);
164 clonesRawData->Clear();
174 /* ******************************************************* */
175 void AliEveTOFDigitsInfo::LoadDigits()
178 TClonesArray *digitsTOF = 0x0;
181 fTree->SetBranchAddress("TOF",&digitsTOF);
184 Int_t vol[5] = {-1,-1,-1,-1,-1};
186 for (Int_t digitNumber=0; digitNumber<digitsTOF->GetEntries(); digitNumber++) {
188 //if (digitNumber==digitsTOF->GetEntries()-1) printf(" Hello 4 -> %3i digit of %i \n", digitNumber+1, digitsTOF->GetEntries());
190 digs = (AliTOFdigit*)digitsTOF->UncheckedAt(digitNumber);
192 vol[0] = digs->GetSector(); // Sector Number (0-17)
193 vol[1] = digs->GetPlate(); // Plate Number (0-4)
194 vol[2] = digs->GetStrip(); // Strip Number (0-14/18)
195 vol[3] = digs->GetPadx(); // Pad Number in x direction (0-47)
196 vol[4] = digs->GetPadz(); // Pad Number in z direction (0-1)
198 fTOFdigitMap->AddDigit(vol, digitNumber);
199 //if (digitNumber==digitsTOF->GetEntries()-1) printf(" I am inside LoadDigits %3i \n", digitNumber);
205 /* ******************************************************* */
207 void AliEveTOFDigitsInfo::GetDigits(Int_t nSector, Int_t nPlate,
208 Int_t nStrip, Int_t nPadZ, Int_t nPadX,
212 Int_t vol[5] = {nSector,nPlate,nStrip,nPadX,nPadZ};
214 fTOFdigitMap->GetDigitIndex(vol, indexDigit);
217 /* ******************************************************* */
219 TClonesArray* AliEveTOFDigitsInfo::GetDigits(Int_t nSector, Int_t nPlate,
223 Int_t newCounter = 0;
224 Int_t nDigitsInVolume[3] = {-1, -1, -1};
225 Int_t dummy[3] = {-1, -1, -1};
226 Int_t informations[4] = {-1, -1, -1, -1};
228 TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit", 300);
229 TClonesArray &ldigits = *digitsTOFnew;
233 TClonesArray *digitsTOF = 0x0;
234 fTree->SetBranchAddress("TOF",&digitsTOF);
238 Int_t vol[5] = {nSector,nPlate,nStrip,-1,-1};
240 for(Int_t iPadZ=0; iPadZ<fGeom->NpadZ(); iPadZ++){
242 for(Int_t iPadX=0; iPadX<fGeom->NpadX(); iPadX++) {
245 //GetDigits(vol[0], vol[1], vol[2], vol[3], vol[4], nDigitsInVolume)
247 fTOFdigitMap->GetDigitIndex(vol, nDigitsInVolume);
249 for (Int_t ii=0; ii<3; ii++) {
251 if (nDigitsInVolume[ii]>=0 ) {
252 //AliDebug(2,Form(" nDigitsInVolume[%2i] = %3i\n ", ii, nDigitsInVolume[ii]));
253 digs = (AliTOFdigit*)digitsTOF->UncheckedAt(nDigitsInVolume[ii]);
254 informations[0] = digs->GetTdc();
255 informations[1] = digs->GetAdc();
256 informations[2] = digs->GetToT();
257 informations[3] = digs->GetTdcND();
258 new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
263 for (Int_t ii=0; ii<4; ii++) informations[ii]=-1;
264 for (Int_t ii=0; ii<3; ii++) dummy[ii]=-1;
265 for (Int_t ii=0; ii<3; ii++) nDigitsInVolume[ii]=-1;
272 AliDebug(2,Form("Sector %2i Plate %1i Strip %2i -> number of digits %3i \n",
273 nSector, nPlate, nStrip, digitsTOFnew->GetEntries()));
278 /* ******************************************************* */
280 TClonesArray* AliEveTOFDigitsInfo::GetDigits(Int_t nSector)
283 Int_t newCounter = 0;
284 Int_t nDigitsInVolume[3] = {-1, -1, -1};
285 Int_t dummy[3] = {-1, -1, -1};
286 Int_t informations[4] = {-1, -1, -1, -1};
290 TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit", 300);
291 TClonesArray &ldigits = *digitsTOFnew;
295 TClonesArray *digitsTOF = 0x0;
296 fTree->SetBranchAddress("TOF",&digitsTOF);
300 Int_t vol[5] = {nSector,-1,-1,-1,-1};
302 for(Int_t iPlate=0; iPlate<fGeom->NPlates(); iPlate++){
304 if(iPlate==2) nStrips=15;
307 for(Int_t iStrip=0; iStrip<nStrips; iStrip++){
310 for(Int_t iPadZ=0; iPadZ<fGeom->NpadZ(); iPadZ++){
313 for(Int_t iPadX=0; iPadX<fGeom->NpadX(); iPadX++) {
316 //GetDigits(vol[0], vol[1], vol[2], vol[3], vol[4], nDigitsInVolume)
318 fTOFdigitMap->GetDigitIndex(vol, nDigitsInVolume);
320 for (Int_t ii=0; ii<3; ii++) {
322 if (nDigitsInVolume[ii]>=0 ) {
324 digs = (AliTOFdigit*)digitsTOF->UncheckedAt(nDigitsInVolume[ii]);
325 informations[0] = digs->GetTdc();
326 informations[1] = digs->GetAdc();
327 informations[2] = digs->GetToT();
328 informations[3] = digs->GetTdcND();
329 new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
331 AliDebug(2,Form(" %2i -> %2i %2i %2i %2i %2i %7i %7i\n",
332 nDigitsInVolume[ii], vol[0], vol[1], vol[2], vol[4], vol[3],
333 informations[1], informations[0]));
339 for (Int_t ii=0; ii<4; ii++) informations[ii]=-1;
340 for (Int_t ii=0; ii<3; ii++) dummy[ii]=-1;
341 for (Int_t ii=0; ii<3; ii++) nDigitsInVolume[ii]=-1;
350 AliDebug(Form(("Sector %2i Plate %1i Strip %2i -> number of digits %3i \n",
351 nSector, nPlate, nStrip, digitsTOFnew->GetEntries()));
356 /* ******************************************************* */
358 Int_t AliEveTOFDigitsInfo::GetTOFInfos() const
361 return fTOFdigitMap->GetFilledCellNumber();
365 /* ******************************************************* */
366 Int_t AliEveTOFDigitsInfo::IsStripFilled(Int_t iSector, Int_t iPlate, Int_t iStrip)
369 Int_t vol[5] = {iSector, iPlate, iStrip, -1, -1};
373 for (Int_t iPadZ=0; iPadZ<fGeom->NpadZ(); iPadZ++)
374 for (Int_t iPadX=0; iPadX<fGeom->NpadX(); iPadX++)
378 if (fTOFdigitMap->GetDigitIndex(vol,0)>=0) index++;
385 /* ******************************************************* */
386 void AliEveTOFDigitsInfo::GetDigits()
389 for (Int_t iSector=0; iSector<fGeom->NSectors(); iSector++) {
391 fNewTree = new TTree();