]>
Commit | Line | Data |
---|---|---|
ee4d8104 | 1 | #if !defined(__CINT__) || defined(__MAKECINT__) |
2 | ||
3 | // Root include files | |
4 | #include "TClonesArray.h" | |
5 | ||
6 | // AliRoot include files | |
7 | #include "AliDAQ.h" | |
8 | #include "AliHitMap.h" | |
9 | ||
10 | #include "AliRawReader.h" | |
11 | #include "AliRawReaderFile.h" | |
12 | ||
13 | #include "AliTOFrawData.h" | |
14 | #include "AliTOFRawMap.h" | |
15 | #include "AliTOFRawStream.h" | |
16 | ||
17 | #endif | |
18 | ||
19 | extern gBenchmark; | |
20 | ||
21 | void AliTOFReadRawData(const char *input, const Int_t evIn, const Char_t *outFile, Int_t runNumber=137366,Int_t decoderVersion=2); | |
22 | ||
23 | void AliTOFReadRawData(const char *input, const Int_t evIn, const Char_t *outFile, Int_t runNumber, Int_t decoderVersion) | |
24 | { | |
25 | ||
26 | // | |
27 | // To read TOF raw data | |
28 | // | |
29 | ||
30 | AliCDBManager *cdb = AliCDBManager::Instance(); | |
31 | cdb->SetDefaultStorage("raw://"); | |
32 | cdb->SetRun(runNumber); | |
33 | ||
34 | AliGeomManager::LoadGeometry(); | |
35 | AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD TOF HMPID PHOS EMCAL T0 VZERO FMD PMD MUON ZDC"); | |
36 | ||
37 | AliTOFcalib *fTOFcalib = new AliTOFcalib(); | |
38 | fTOFcalib->Init(); | |
39 | ||
40 | Int_t Volume[5]; | |
41 | AliTOFHitData *HitData; | |
42 | AliTOFHitDataBuffer *DataBuffer; | |
43 | AliTOFHitDataBuffer *PackedDataBuffer; | |
44 | ||
45 | /* create a tree for decoded data */ | |
46 | TTree DataTree("DataTree", "Decoded Data"); | |
47 | DataTree.Branch("HitData", "AliTOFHitData", &HitData); | |
48 | ||
49 | /* create a tree for decoded packed data */ | |
50 | TTree PackedDataTree("PackedDataTree", "Decoded Packed Data"); | |
51 | PackedDataTree.Branch("HitData", "AliTOFHitData", &HitData); | |
52 | ||
53 | AliRawReader *reader; | |
54 | TString fileName(input); | |
55 | if (fileName.EndsWith("/")) { | |
56 | reader = new AliRawReaderFile(fileName); | |
57 | } else if (fileName.EndsWith(".root")) { | |
58 | reader = new AliRawReaderRoot(fileName); | |
59 | } else if (!fileName.IsNull()) { | |
60 | reader = new AliRawReaderDate(fileName); | |
61 | reader->SelectEvents(7); | |
62 | } | |
63 | ||
64 | TClonesArray *clonesRawData = new TClonesArray("AliTOFrawData",1000); | |
65 | AliTOFRawStream stream; | |
66 | ||
67 | gBenchmark->Reset(); | |
68 | ||
69 | Int_t countNoise = 0; | |
70 | ||
71 | /* loop over events */ | |
72 | for (Int_t iEvent = 0; reader->NextEvent(); iEvent++) { | |
73 | if (iEvent!=evIn) continue; | |
74 | printf("processing event %d\n", iEvent); | |
75 | ||
76 | stream.Clear(); | |
77 | stream.SetRawReader(reader); | |
78 | ||
79 | //reader->RewindEvents(); | |
80 | ||
81 | UInt_t timeStamp = reader->GetTimestamp(); | |
82 | ||
83 | gBenchmark->Start("time"); | |
84 | ||
85 | /* loop over DDLs */ | |
86 | for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls("TOF"); iDDL++){ | |
87 | ||
88 | reader->Reset(); | |
89 | ||
90 | /* reset buffers (actually not needed)*/ | |
91 | stream.ResetBuffers(); | |
92 | ||
93 | switch(decoderVersion) { | |
94 | case 1: | |
95 | stream.LoadRawDataBuffers(iDDL,0); | |
96 | break; | |
97 | case 2: | |
98 | stream.LoadRawDataBuffersV2(iDDL,0); | |
99 | break; | |
100 | case 0: | |
101 | stream.LoadRawData(iDDL); | |
102 | break; | |
103 | } | |
104 | ||
105 | clonesRawData = (TClonesArray*)stream.GetRawData(); | |
106 | for (Int_t iRawData = 0; iRawData<clonesRawData->GetEntriesFast(); iRawData++) { | |
107 | ||
108 | AliTOFrawData *tofRawDatum = (AliTOFrawData*)clonesRawData->UncheckedAt(iRawData); | |
109 | ||
110 | if (tofRawDatum->GetTOF()==-1) continue; | |
111 | Int_t detectorIndex[5]={-1,-1,-1,-1,-1}; | |
112 | stream.EquipmentId2VolumeId(iDDL, tofRawDatum->GetTRM(), tofRawDatum->GetTRMchain(), | |
113 | tofRawDatum->GetTDC(), tofRawDatum->GetTDCchannel(), detectorIndex); | |
114 | Int_t dummy = detectorIndex[3]; | |
115 | detectorIndex[3] = detectorIndex[4]; | |
116 | detectorIndex[4] = dummy; | |
117 | ||
118 | /* check valid index */ | |
119 | if (detectorIndex[0]==-1||detectorIndex[1]==-1||detectorIndex[2]==-1||detectorIndex[3]==-1||detectorIndex[4]==-1) continue; | |
120 | ||
121 | // Do not reconstruct anything in the holes | |
122 | if (detectorIndex[0]==13 || detectorIndex[0]==14 || detectorIndex[0]==15 ) { // sectors with holes | |
123 | if (detectorIndex[1]==2) { // plate with holes | |
124 | inholes++; | |
125 | continue; | |
126 | } | |
127 | } | |
128 | ||
129 | ||
130 | Int_t index = AliTOFGeometry::GetIndex(detectorIndex); | |
131 | ||
132 | /* check channel enabled */ | |
133 | //if (!fTOFcalib->IsChannelEnabled(index)) continue; // bad channels | |
134 | ||
135 | /* get cluster info */ | |
136 | Float_t tot = tofRawDatum->GetTOT() * AliTOFGeometry::ToTBinWidth() * 1.e-3; /* ns */ | |
137 | Float_t timeRaw = tofRawDatum->GetTOF() * AliTOFGeometry::TdcBinWidth(); /* ps */ | |
138 | Float_t time = tofRawDatum->GetTOF() * AliTOFGeometry::TdcBinWidth(); /* ps */ | |
139 | Float_t deltaBC = tofRawDatum->GetDeltaBC(); // deltaBC | |
140 | Float_t l0l1 = tofRawDatum->GetL0L1Latency(); // L0-L1 latency | |
141 | Float_t xHit, yHit, zHit; | |
142 | Int_t sector, strip, padx, padz; | |
143 | ofstream ftxt; | |
144 | ||
145 | /* get correction */ | |
146 | Float_t corr = fTOFcalib->GetTimeCorrection(index, tot, deltaBC, l0l1, timeStamp); /* ps */ | |
147 | ||
148 | /* apply time correction */ | |
149 | time -= corr; | |
150 | ||
151 | //if (iEvent==12) | |
152 | #if 0 | |
153 | cout << " " << index | |
154 | << " " << fTOFcalib->IsChannelEnabled(index) | |
155 | << " " << tot | |
156 | << " " << timeRaw | |
157 | << " " << time | |
158 | << endl; | |
159 | #endif | |
160 | ||
161 | /* geometry */ | |
162 | AliTOFGeometry geo; | |
163 | for (Int_t j=0; j<5; j++) detectorIndex[j] = -1; | |
164 | geo.GetVolumeIndices(index, detectorIndex); | |
165 | xHit = geo.GetX(detectorIndex); | |
166 | yHit = geo.GetY(detectorIndex); | |
167 | zHit = geo.GetZ(detectorIndex); | |
168 | ||
169 | //if (fTOFcalib->IsChannelEnabled(index) == 1) { | |
170 | sector = detectorIndex[0]; | |
171 | strip = detectorIndex[2]; | |
172 | padx = detectorIndex[4]; | |
173 | padz = detectorIndex[3]; | |
174 | ||
175 | //printf("x %f, y %f, z %f\n",xHit,yHit,zHit); | |
176 | //printf("sector %d, strip %d, padx %d, padz %d\n",sector,strip,padx,padz); | |
177 | #if 1 | |
178 | ftxt.open(outFile,ios::app); | |
179 | ftxt << time << " " << timeRaw << " " << tot << " " << sector | |
180 | << " " << strip << " " << padx << " " << padz | |
181 | << " " << xHit << " " << yHit << " " << zHit << endl; | |
182 | ftxt.close(); | |
183 | #endif | |
184 | //} | |
185 | //else countNoise++; | |
186 | ||
187 | } // closed loop on TOF raw data per current DDL file | |
188 | ||
189 | clonesRawData->Clear(); | |
190 | ||
191 | ||
192 | ||
193 | ||
194 | /* | |
195 | // read decoded data | |
196 | DataBuffer = stream.GetDataBuffer(iDDL); | |
197 | PackedDataBuffer = stream.GetPackedDataBuffer(iDDL); | |
198 | ||
199 | // get buffer entries | |
200 | Int_t nDBEntries = DataBuffer->GetEntries(); | |
201 | Int_t nPDBEntries = PackedDataBuffer->GetEntries(); | |
202 | ||
203 | // read data buffer hits | |
204 | for (Int_t iHit = 0; iHit < nDBEntries; iHit++){ | |
205 | HitData = DataBuffer->GetHit(iHit); | |
206 | HitData->SetDDLID(iDDL); | |
207 | // add volume information to hit | |
208 | stream.EquipmentId2VolumeId(HitData, HitData->GetVolume()); | |
209 | DataTree.Fill(); | |
210 | } | |
211 | // reset buffer | |
212 | DataBuffer->Reset(); | |
213 | ||
214 | // read data buffer hits | |
215 | for (Int_t iHit = 0; iHit < nPDBEntries; iHit++){ | |
216 | HitData = PackedDataBuffer->GetHit(iHit); | |
217 | HitData->SetDDLID(iDDL); | |
218 | // add volume information to hit | |
219 | stream.EquipmentId2VolumeId(HitData, HitData->GetVolume()); | |
220 | PackedDataTree.Fill(); | |
221 | } | |
222 | ||
223 | // reset buffer | |
224 | PackedDataBuffer->Reset(); | |
225 | */ | |
226 | ||
227 | } // loop on DDLs | |
228 | ||
229 | } | |
230 | printf("noise %d\n",countNoise); | |
231 | gBenchmark->Print("time"); | |
232 | ||
233 | /* | |
234 | TFile fileOut("TOF_rawQA.root", "RECREATE"); | |
235 | DataTree.Write(); | |
236 | PackedDataTree.Write(); | |
237 | fileOut.Close(); | |
238 | */ | |
239 | ||
240 | } |