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. //
8 // Origin: E. Crescio crescio@to.infn.it //
9 // J. Conrad Jan.Conrad@cern.ch //
10 ////////////////////////////////////////////////////
11 #include "AliHeader.h"
13 #include "AliRunLoader.h"
14 #include "AliITSEventHeader.h"
15 #include "AliITSLoader.h"
16 #include "AliITSBeamTestDigSDD.h"
17 #include "AliITSBeamTestDigSPD.h"
18 #include "AliITSBeamTestDigSSD.h"
19 #include "AliITSBeamTestDigitizer.h"
20 #include "AliRawReaderDate.h"
21 #include "AliRawReaderRoot.h"
23 const TString AliITSBeamTestDigitizer::fgkDefaultDigitsFileName="ITS.Digits.root";
25 ClassImp(AliITSBeamTestDigitizer)
28 //_____________________________________________________________
29 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer():TTask(),
44 // Default constructor
50 //_____________________________________________________________
51 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, const Char_t* opt,const char* filename):TTask(name,title),
67 // Standard constructor
72 Bool_t aug04 = choice.Contains("Aug04");
73 Bool_t nov04 = choice.Contains("Nov04");
74 if(aug04) fPeriod=kAug04;
75 if(nov04) fPeriod=kNov04;
79 //_____________________________________________________________
80 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Int_t run, const Char_t* opt,const char* filename):TTask(name,title),
99 Bool_t aug04 = choice.Contains("Aug04");
100 Bool_t nov04 = choice.Contains("Nov04");
101 if(aug04) fPeriod=kAug04;
102 if(nov04) fPeriod=kNov04;
107 //___________________________________________________________
108 void AliITSBeamTestDigitizer::Init(const char* filename){
111 //Initialization of run loader and its loader
112 //creation of galice.root
116 fRunLoader = AliRunLoader::Open(filename,AliConfig::GetDefaultEventFolderName(),"update");
117 if (fRunLoader == 0x0)
119 Error("AliITSBeamTestDigitizer","Can not load the session",filename);
122 fRunLoader->LoadgAlice();
123 gAlice = fRunLoader->GetAliRun();
126 Error("AliITSBeamTestDigitizer","gAlice not found on file. Aborting.");
129 fRunLoader->MakeTree("E");
130 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
132 fDigitsFileName=fgkDefaultDigitsFileName;
133 this->Add(new AliITSBeamTestDigSPD("DigSPD","SPD Digitization"));
134 this->Add(new AliITSBeamTestDigSDD("DigSDD","SDD Digitization"));
135 this->Add(new AliITSBeamTestDigSSD("DigSSD","SSD Digitization"));
141 //______________________________________________________________________
142 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const AliITSBeamTestDigitizer &bt):TTask(bt),
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),
153 fRunLoader(bt.fRunLoader),
158 //______________________________________________________________________
159 AliITSBeamTestDigitizer& AliITSBeamTestDigitizer::operator=(const AliITSBeamTestDigitizer &source){
160 // Assignment operator.
161 this->~AliITSBeamTestDigitizer();
162 new(this) AliITSBeamTestDigitizer(source);
167 //______________________________________________________________
168 AliITSBeamTestDigitizer::~AliITSBeamTestDigitizer(){
171 // if(fBt) delete fBt;
172 if(fLoader) delete fLoader;
173 if(fHeader) delete fHeader;
177 //_____________________________________________________________
178 void AliITSBeamTestDigitizer::SetNumberOfEventsPerFile(Int_t nev)
180 //Sets number of events per file
182 if(fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev);
183 else Warning("SetNumberOfEventsPerFile","fRunLoader is 0");
187 //____________________________________________________
188 void AliITSBeamTestDigitizer::ExecDigitization(){
190 // Execution of digitisation for SPD,SDD and SSD
193 Warning("ExecDigitization()","Run Init() please..");
196 fLoader->SetDigitsFileName(fDigitsFileName);
197 fLoader->LoadDigits("recreate");
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);
207 AliHeader* header = fRunLoader->GetHeader();
211 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
212 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
213 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
219 if(iev>fEvFin) break;
221 AliITSEventHeader* itsh = new AliITSEventHeader("ITSHeader");
222 fRunLoader->SetEventNumber(iev);
224 rd->RequireHeader(fFlagHeader);
226 digSDD->SetRawReader(rd);
227 digSPD->SetRawReader(rd);
228 digSSD->SetRawReader(rd);
230 if(fLoader->TreeD() == 0x0) fLoader->MakeTree("D");
232 TTree* treeD = (TTree*)fLoader->TreeD();
234 // Make branches outside the dig-classes
236 TClonesArray* digitsSPD = new TClonesArray("AliITSdigitSPD",1000);
237 treeD->Branch("ITSDigitsSPD",&digitsSPD);
239 TClonesArray* digitsSDD = new TClonesArray("AliITSdigitSDD",1000);
240 treeD->Branch("ITSDigitsSDD",&digitsSDD);
242 TClonesArray* digitsSSD = new TClonesArray("AliITSdigitSSD",1000);
243 treeD->Branch("ITSDigitsSSD",&digitsSSD);
246 digSSD->SetTree(treeD);
247 digSDD->SetTree(treeD);
248 digSPD->SetTree(treeD);
250 AliITSgeom* geom = fLoader->GetITSgeom();
252 digSSD->SetITSgeom(geom);
253 digSDD->SetITSgeom(geom);
254 digSPD->SetITSgeom(geom);
256 digSSD->SetITSEventHeader(itsh);
257 digSDD->SetITSEventHeader(itsh);
258 digSPD->SetITSEventHeader(itsh);
260 digSDD->SetBtPeriod(GetBeamTestPeriod());
261 if(GetBeamTestPeriod()==1)digSDD->SetThreshold(16);
262 else digSDD->SetThreshold(0);
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);
276 }while(rd->NextEvent());
279 fRunLoader->WriteHeader("OVERWRITE");
280 fRunLoader->WriteRunLoader("OVERWRITE");
283 fLoader->UnloadDigits();
284 fLoader->UnloadRawClusters();
285 fRunLoader->UnloadHeader();
292 //_______________________________________________
293 void AliITSBeamTestDigitizer:: SetActive(const TString& subdet,Bool_t value){
295 //Sets active sub-tasks (detectors)
297 Bool_t sdd = subdet.Contains("SDD");
298 Bool_t spd = subdet.Contains("SPD");
299 Bool_t ssd = subdet.Contains("SSD");
302 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
303 digSDD->SetActive(value);
307 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
308 digSPD->SetActive(value);
313 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
314 digSSD->SetActive(value);