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. //
6 // Origin: E. Crescio crescio@to.infn.it //
7 // J. Conrad Jan.Conrad@cern.ch //
8 ////////////////////////////////////////////////////
11 #include "AliRunLoader.h"
12 #include "AliITSEventHeader.h"
13 #include "AliITSLoader.h"
14 #include "AliITSBeamTest.h"
15 #include "AliITSBeamTestDigSDD.h"
16 #include "AliITSBeamTestDigSPD.h"
17 #include "AliITSBeamTestDigSSD.h"
18 #include "AliITSBeamTestDigitizer.h"
19 #include "AliRawReaderDate.h"
22 const TString AliITSBeamTestDigitizer::fgkDefaultDigitsFileName="ITSbt.Digits.root";
24 ClassImp(AliITSBeamTestDigitizer)
27 //_____________________________________________________________
28 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer():TTask()
31 // Default constructor
45 //_____________________________________________________________
46 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title):TTask(name,title)
49 // Standard constructor
60 //_____________________________________________________________
61 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Int_t run):TTask(name,title)
76 //___________________________________________________________
77 void AliITSBeamTestDigitizer::Init(){
80 //Initialization of run loader and its loader
81 //creation of galice.root
83 fRunLoader = AliRunLoader::Open("galice.root",
84 AliConfig::GetDefaultEventFolderName(),"recreate");
86 gAlice->SetRunLoader(fRunLoader);
87 fRunLoader->SetEventFolderName();
88 fBt = new AliITSBeamTest("ITS","ITS beam test");
90 gAlice->AddModule(fBt);
91 fRunLoader->AddLoader(fBt);
92 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
93 fRunLoader->MakeTree("E");
95 fRunLoader->WriteRunLoader("OVERWRITE");
96 fRunLoader->WriteAliRun("OVERWRITE");
97 fDigitsFileName=fgkDefaultDigitsFileName;
98 this->Add(new AliITSBeamTestDigSPD("DigSPD","SPD Digitization"));
99 this->Add(new AliITSBeamTestDigSDD("DigSDD","SDD Digitization"));
100 this->Add(new AliITSBeamTestDigSSD("DigSSD","SSD Digitization"));
105 //_____________________________________________________________
106 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const char* filename)
109 // Constructor for reading (reads galice.root)
112 fRunLoader = AliRunLoader::Open(filename);
113 if (fRunLoader == 0x0)
115 Error("AliITSBeamTestDigitizer","Can not load the session",filename);
118 fRunLoader->LoadgAlice();
119 gAlice = fRunLoader->GetAliRun();
122 Error("AliITSBeamTestDigitizer","gAlice not found on file. Aborting.");
126 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
128 fBt = (AliITSBeamTest*)gAlice->GetDetector("ITS");
131 fDigitsFileName=fgkDefaultDigitsFileName;
138 //______________________________________________________________________
139 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const AliITSBeamTestDigitizer &bt):TTask(bt){
142 if(this==&bt) return;
143 Error("Copy constructor",
144 "You are not allowed to make a copy of the AliITSBeamTestDigitizer");
148 //______________________________________________________________________
149 AliITSBeamTestDigitizer& AliITSBeamTestDigitizer::operator=(AliITSBeamTestDigitizer &bt){
150 // Assignment operator. This is a function which is not allowed to be
151 // done to the ITS beam test digitizer. It exits with an error.
153 if(this==&bt) return *this;
154 Error("operator=","You are not allowed to make a copy of the AliITSBeamTestDigitizer");
156 return *this; //fake return
160 //______________________________________________________________
161 AliITSBeamTestDigitizer::~AliITSBeamTestDigitizer(){
165 if(fLoader) delete fLoader;
166 if(fRunLoader) delete fRunLoader;
170 //_____________________________________________________________
171 void AliITSBeamTestDigitizer::SetNumberOfEventsPerFile(Int_t nev)
173 //Sets number of events per file
175 if(fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev);
176 else Warning("SetNumberOfEventsPerFile","fRunLoader is 0");
180 //____________________________________________________
181 void AliITSBeamTestDigitizer::ExecDigitization(){
183 // Execution of digitisation for SPD,SDD and SSD
186 Warning("ExecDigitization()","Run Init() please..");
189 fLoader->SetDigitsFileName(fDigitsFileName);
190 fLoader->LoadDigits("recreate");
192 AliRawReaderDate rd(fRawdataFileName,fEvIn);
193 AliHeader* header = fRunLoader->GetHeader();
198 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
199 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
200 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
206 if(iev>fEvFin) break;
208 AliITSEventHeader* itsh = new AliITSEventHeader("ITSHeader");
209 fRunLoader->SetEventNumber(iev);
211 rd.RequireHeader(fFlagHeader);
212 rd.SelectEvents(fDATEEvType);
214 digSDD->SetRawReaderDate(&rd);
215 digSPD->SetRawReaderDate(&rd);
216 digSSD->SetRawReaderDate(&rd);
218 if(fLoader->TreeD() == 0x0) fLoader->MakeTree("D");
220 TTree* treeD = (TTree*)fLoader->TreeD();
222 // Make branches outside the dig-classes
224 TClonesArray* digitsSPD = new TClonesArray("AliITSdigitSPD",1000);
225 treeD->Branch("ITSDigitSPD",&digitsSPD);
227 TClonesArray* digitsSDD = new TClonesArray("AliITSdigitSDD",1000);
228 treeD->Branch("ITSDigitSDD",&digitsSDD);
230 TClonesArray* digitsSSD = new TClonesArray("AliITSdigitSSD",1000);
231 treeD->Branch("ITSDigitSSD",&digitsSSD);
234 digSSD->SetTree(treeD);
235 digSDD->SetTree(treeD);
236 digSPD->SetTree(treeD);
238 digSSD->SetBeamTest(fBt);
239 digSDD->SetBeamTest(fBt);
240 digSPD->SetBeamTest(fBt);
242 digSSD->SetITSEventHeader(itsh);
243 digSDD->SetITSEventHeader(itsh);
244 digSPD->SetITSEventHeader(itsh);
246 digSDD->SetBtPeriod(GetBeamTestPeriod());
247 digSDD->SetThreshold(16);
251 header->SetEventNrInRun(iev);
252 header->SetEvent(iev);
253 header->SetRun(fRunNumber);
254 fRunLoader->GetHeader()->AddDetectorEventHeader(itsh);
255 fRunLoader->TreeE()->Fill();
256 header->Reset(fRunNumber,iev);
262 }while(rd.NextEvent());
264 fRunLoader->WriteHeader("OVERWRITE");
265 fRunLoader->WriteRunLoader("OVERWRITE");
266 fLoader->UnloadDigits();
267 fLoader->UnloadRawClusters();
268 fRunLoader->UnloadHeader();
274 //_______________________________________________
275 void AliITSBeamTestDigitizer:: SetActive(const TString& subdet,Bool_t value){
277 //Sets active sub-tasks (detectors)
279 Bool_t sdd = subdet.Contains("SDD");
280 Bool_t spd = subdet.Contains("SPD");
281 Bool_t ssd = subdet.Contains("SSD");
284 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
285 digSDD->SetActive(value);
289 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
290 digSPD->SetActive(value);
295 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
296 digSSD->SetActive(value);