38300302 |
1 | //////////////////////////////////////////////////// |
2 | // Class to manage the // |
3 | // ITS beam test conversion from rawdata // |
4 | // to digits. It executes the digitization for // |
5 | // SPD, SDD and SSD. // |
7d62fb64 |
6 | // // |
7 | // // |
38300302 |
8 | // Origin: E. Crescio crescio@to.infn.it // |
9 | // J. Conrad Jan.Conrad@cern.ch // |
10 | //////////////////////////////////////////////////// |
11 | #include "AliHeader.h" |
12 | #include "AliRun.h" |
13 | #include "AliRunLoader.h" |
14 | #include "AliITSEventHeader.h" |
15 | #include "AliITSLoader.h" |
38300302 |
16 | #include "AliITSBeamTestDigSDD.h" |
17 | #include "AliITSBeamTestDigSPD.h" |
18 | #include "AliITSBeamTestDigSSD.h" |
19 | #include "AliITSBeamTestDigitizer.h" |
20 | #include "AliRawReaderDate.h" |
8ace09b6 |
21 | #include "AliRawReaderRoot.h" |
38300302 |
22 | |
5ba31760 |
23 | const TString AliITSBeamTestDigitizer::fgkDefaultDigitsFileName="ITS.Digits.root"; |
38300302 |
24 | |
25 | ClassImp(AliITSBeamTestDigitizer) |
26 | |
27 | |
28 | //_____________________________________________________________ |
7537d03c |
29 | AliITSBeamTestDigitizer::AliITSBeamTestDigitizer():TTask(), |
30 | fEvIn(0), |
31 | fEvFin(0), |
32 | fRunNumber(-1), |
33 | fDATEEvType(7), |
34 | fFlagHeader(kTRUE), |
35 | fFlagInit(kFALSE), |
36 | fOptDate(kFALSE), |
37 | fDigitsFileName(0), |
38 | fRawdataFileName(0), |
39 | fPeriod(kNov04), |
40 | fRunLoader(0), |
41 | fLoader(0), |
42 | fHeader(0){ |
38300302 |
43 | // |
44 | // Default constructor |
45 | // |
38300302 |
46 | SetFlagInit(); |
8ace09b6 |
47 | SetOptDate(); |
38300302 |
48 | } |
49 | |
50 | //_____________________________________________________________ |
7537d03c |
51 | AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Char_t* opt,const char* filename):TTask(name,title), |
52 | fEvIn(0), |
53 | fEvFin(0), |
54 | fRunNumber(-1), |
55 | fDATEEvType(7), |
56 | fFlagHeader(kTRUE), |
57 | fFlagInit(kFALSE), |
58 | fOptDate(kFALSE), |
59 | fDigitsFileName(0), |
60 | fRawdataFileName(0), |
61 | fPeriod(kNov04), |
62 | fRunLoader(0), |
63 | fLoader(0), |
64 | fHeader(0) |
38300302 |
65 | { |
66 | // |
67 | // Standard constructor |
68 | // |
8ace09b6 |
69 | SetOptDate(); |
5ba31760 |
70 | |
71 | TString choice(opt); |
72 | Bool_t aug04 = choice.Contains("Aug04"); |
73 | Bool_t nov04 = choice.Contains("Nov04"); |
74 | if(aug04) fPeriod=kAug04; |
75 | if(nov04) fPeriod=kNov04; |
7d62fb64 |
76 | Init(filename); |
38300302 |
77 | } |
78 | |
79 | //_____________________________________________________________ |
7537d03c |
80 | AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Int_t run, Char_t* opt,const char* filename):TTask(name,title), |
81 | fEvIn(0), |
82 | fEvFin(0), |
83 | fRunNumber(run), |
84 | fDATEEvType(7), |
85 | fFlagHeader(kTRUE), |
86 | fFlagInit(kFALSE), |
87 | fOptDate(kFALSE), |
88 | fDigitsFileName(0), |
89 | fRawdataFileName(0), |
90 | fPeriod(kNov04), |
91 | fRunLoader(0), |
92 | fLoader(0), |
93 | fHeader(0){ |
38300302 |
94 | // |
95 | // Constructor |
96 | // |
8ace09b6 |
97 | SetOptDate(); |
5ba31760 |
98 | TString choice(opt); |
99 | Bool_t aug04 = choice.Contains("Aug04"); |
100 | Bool_t nov04 = choice.Contains("Nov04"); |
101 | if(aug04) fPeriod=kAug04; |
102 | if(nov04) fPeriod=kNov04; |
103 | |
7d62fb64 |
104 | Init(filename); |
38300302 |
105 | } |
106 | |
107 | //___________________________________________________________ |
7d62fb64 |
108 | void AliITSBeamTestDigitizer::Init(const char* filename){ |
38300302 |
109 | |
110 | // |
111 | //Initialization of run loader and its loader |
112 | //creation of galice.root |
113 | // |
5ba31760 |
114 | |
38300302 |
115 | |
7d62fb64 |
116 | fRunLoader = AliRunLoader::Open(filename,AliConfig::GetDefaultEventFolderName(),"update"); |
38300302 |
117 | if (fRunLoader == 0x0) |
118 | { |
119 | Error("AliITSBeamTestDigitizer","Can not load the session",filename); |
120 | return; |
121 | } |
122 | fRunLoader->LoadgAlice(); |
123 | gAlice = fRunLoader->GetAliRun(); |
124 | |
125 | if(!gAlice) { |
126 | Error("AliITSBeamTestDigitizer","gAlice not found on file. Aborting."); |
127 | return; |
128 | } |
7d62fb64 |
129 | fRunLoader->MakeTree("E"); |
38300302 |
130 | fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader"); |
38300302 |
131 | |
132 | fDigitsFileName=fgkDefaultDigitsFileName; |
7d62fb64 |
133 | this->Add(new AliITSBeamTestDigSPD("DigSPD","SPD Digitization")); |
134 | this->Add(new AliITSBeamTestDigSDD("DigSDD","SDD Digitization")); |
135 | this->Add(new AliITSBeamTestDigSSD("DigSSD","SSD Digitization")); |
38300302 |
136 | |
7d62fb64 |
137 | SetFlagInit(kTRUE); |
38300302 |
138 | } |
139 | |
7d62fb64 |
140 | |
38300302 |
141 | //______________________________________________________________________ |
7537d03c |
142 | AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const AliITSBeamTestDigitizer &bt):TTask(bt), |
143 | fEvIn(bt.fEvIn), |
144 | fEvFin(bt.fEvFin), |
145 | fRunNumber(bt.fRunNumber), |
146 | fDATEEvType(bt.fDATEEvType), |
147 | fFlagHeader(bt.fFlagHeader), |
148 | fFlagInit(bt.fFlagInit), |
149 | fOptDate(bt.fOptDate), |
150 | fDigitsFileName(bt.fDigitsFileName), |
151 | fRawdataFileName(bt.fRawdataFileName), |
152 | fPeriod(bt.fPeriod), |
153 | fRunLoader(bt.fRunLoader), |
154 | fLoader(bt.fLoader), |
155 | fHeader(bt.fHeader){ |
38300302 |
156 | // Copy constructor. |
38300302 |
157 | } |
158 | //______________________________________________________________________ |
5ba31760 |
159 | AliITSBeamTestDigitizer& AliITSBeamTestDigitizer::operator=(const AliITSBeamTestDigitizer &source){ |
7537d03c |
160 | // Assignment operator. |
161 | this->~AliITSBeamTestDigitizer(); |
162 | new(this) AliITSBeamTestDigitizer(source); |
163 | return *this; |
38300302 |
164 | } |
165 | |
166 | |
167 | //______________________________________________________________ |
168 | AliITSBeamTestDigitizer::~AliITSBeamTestDigitizer(){ |
169 | |
170 | //Destructor |
7d62fb64 |
171 | // if(fBt) delete fBt; |
38300302 |
172 | if(fLoader) delete fLoader; |
5ba31760 |
173 | if(fHeader) delete fHeader; |
38300302 |
174 | } |
175 | |
176 | |
177 | //_____________________________________________________________ |
178 | void AliITSBeamTestDigitizer::SetNumberOfEventsPerFile(Int_t nev) |
179 | { |
180 | //Sets number of events per file |
181 | |
182 | if(fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev); |
183 | else Warning("SetNumberOfEventsPerFile","fRunLoader is 0"); |
184 | } |
185 | |
186 | |
187 | //____________________________________________________ |
188 | void AliITSBeamTestDigitizer::ExecDigitization(){ |
189 | |
190 | // Execution of digitisation for SPD,SDD and SSD |
191 | |
192 | if(!GetFlagInit()){ |
193 | Warning("ExecDigitization()","Run Init() please.."); |
194 | return; |
195 | } |
196 | fLoader->SetDigitsFileName(fDigitsFileName); |
197 | fLoader->LoadDigits("recreate"); |
198 | |
8ace09b6 |
199 | AliRawReader* rd; |
200 | |
3f7450e0 |
201 | |
202 | TString strFile = fRawdataFileName; |
203 | strFile += Form("?EventType=%d",fDATEEvType); |
204 | if(GetOptDate()) rd = new AliRawReaderDate(strFile.Data(),fEvIn); |
205 | else rd = new AliRawReaderRoot(strFile.Data(),fEvIn); |
8ace09b6 |
206 | |
38300302 |
207 | AliHeader* header = fRunLoader->GetHeader(); |
38300302 |
208 | Int_t iev=fEvIn-1; |
209 | |
210 | |
211 | AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD"); |
212 | AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD"); |
213 | AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD"); |
214 | |
215 | |
216 | do{ |
217 | iev++; |
218 | if(fEvFin!=0){ |
219 | if(iev>fEvFin) break; |
220 | } |
221 | AliITSEventHeader* itsh = new AliITSEventHeader("ITSHeader"); |
222 | fRunLoader->SetEventNumber(iev); |
223 | |
8ace09b6 |
224 | rd->RequireHeader(fFlagHeader); |
38300302 |
225 | |
8ace09b6 |
226 | digSDD->SetRawReader(rd); |
227 | digSPD->SetRawReader(rd); |
228 | digSSD->SetRawReader(rd); |
38300302 |
229 | |
230 | if(fLoader->TreeD() == 0x0) fLoader->MakeTree("D"); |
231 | |
232 | TTree* treeD = (TTree*)fLoader->TreeD(); |
233 | |
234 | // Make branches outside the dig-classes |
235 | |
236 | TClonesArray* digitsSPD = new TClonesArray("AliITSdigitSPD",1000); |
5ba31760 |
237 | treeD->Branch("ITSDigitsSPD",&digitsSPD); |
38300302 |
238 | |
239 | TClonesArray* digitsSDD = new TClonesArray("AliITSdigitSDD",1000); |
5ba31760 |
240 | treeD->Branch("ITSDigitsSDD",&digitsSDD); |
38300302 |
241 | |
242 | TClonesArray* digitsSSD = new TClonesArray("AliITSdigitSSD",1000); |
5ba31760 |
243 | treeD->Branch("ITSDigitsSSD",&digitsSSD); |
38300302 |
244 | |
245 | |
246 | digSSD->SetTree(treeD); |
247 | digSDD->SetTree(treeD); |
248 | digSPD->SetTree(treeD); |
5ba31760 |
249 | |
7d62fb64 |
250 | AliITSgeom* geom = fLoader->GetITSgeom(); |
251 | |
252 | digSSD->SetITSgeom(geom); |
253 | digSDD->SetITSgeom(geom); |
254 | digSPD->SetITSgeom(geom); |
5ba31760 |
255 | |
38300302 |
256 | digSSD->SetITSEventHeader(itsh); |
257 | digSDD->SetITSEventHeader(itsh); |
258 | digSPD->SetITSEventHeader(itsh); |
259 | |
260 | digSDD->SetBtPeriod(GetBeamTestPeriod()); |
5ba31760 |
261 | if(GetBeamTestPeriod()==1)digSDD->SetThreshold(16); |
262 | else digSDD->SetThreshold(0); |
38300302 |
263 | ExecuteTask(0); |
264 | |
265 | header->SetEventNrInRun(iev); |
266 | header->SetEvent(iev); |
267 | header->SetRun(fRunNumber); |
268 | fRunLoader->GetHeader()->AddDetectorEventHeader(itsh); |
269 | fRunLoader->TreeE()->Fill(); |
270 | header->Reset(fRunNumber,iev); |
271 | |
272 | delete digitsSPD; |
273 | delete digitsSDD; |
274 | delete digitsSSD; |
275 | |
8ace09b6 |
276 | }while(rd->NextEvent()); |
38300302 |
277 | |
8ace09b6 |
278 | |
38300302 |
279 | fRunLoader->WriteHeader("OVERWRITE"); |
280 | fRunLoader->WriteRunLoader("OVERWRITE"); |
5ba31760 |
281 | |
8ace09b6 |
282 | delete rd; |
38300302 |
283 | fLoader->UnloadDigits(); |
284 | fLoader->UnloadRawClusters(); |
285 | fRunLoader->UnloadHeader(); |
5ba31760 |
286 | |
38300302 |
287 | |
288 | } |
289 | |
290 | |
291 | |
292 | //_______________________________________________ |
293 | void AliITSBeamTestDigitizer:: SetActive(const TString& subdet,Bool_t value){ |
294 | |
295 | //Sets active sub-tasks (detectors) |
296 | |
297 | Bool_t sdd = subdet.Contains("SDD"); |
298 | Bool_t spd = subdet.Contains("SPD"); |
299 | Bool_t ssd = subdet.Contains("SSD"); |
300 | |
301 | if(sdd){ |
302 | AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD"); |
303 | digSDD->SetActive(value); |
304 | } |
305 | |
306 | if(spd){ |
307 | AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD"); |
308 | digSPD->SetActive(value); |
309 | |
310 | } |
311 | |
312 | if(ssd){ |
313 | AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD"); |
314 | digSSD->SetActive(value); |
315 | |
316 | } |
317 | |
318 | |
319 | |
320 | } |
321 | |