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 "AliITSvBeamTestITS04.h"
15 #include "AliITSvSDD03.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"
22 #include "TGeoManager.h"
23 #include "TGeoMaterial.h"
24 #include "TGeoMedium.h"
25 #include "TGeoVolume.h"
26 #include <TVirtualMC.h>
27 //#include <TGeant3.h>
29 const TString AliITSBeamTestDigitizer::fgkDefaultDigitsFileName="ITS.Digits.root";
31 ClassImp(AliITSBeamTestDigitizer)
34 //_____________________________________________________________
35 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer():TTask()
38 // Default constructor
53 //_____________________________________________________________
54 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Char_t* opt):TTask(name,title)
57 // Standard constructor
70 Bool_t aug04 = choice.Contains("Aug04");
71 Bool_t nov04 = choice.Contains("Nov04");
72 if(aug04) fPeriod=kAug04;
73 if(nov04) fPeriod=kNov04;
77 //_____________________________________________________________
78 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Int_t run, Char_t* opt):TTask(name,title)
94 Bool_t aug04 = choice.Contains("Aug04");
95 Bool_t nov04 = choice.Contains("Nov04");
96 if(aug04) fPeriod=kAug04;
97 if(nov04) fPeriod=kNov04;
102 //___________________________________________________________
103 void AliITSBeamTestDigitizer::Init(){
106 //Initialization of run loader and its loader
107 //creation of galice.root
110 fRunLoader = AliRunLoader::Open("galice.root",
111 AliConfig::GetDefaultEventFolderName(),"recreate");
113 gAlice->SetRunLoader(fRunLoader);
114 fRunLoader->SetEventFolderName();
115 if(GetBeamTestPeriod()==kNov04){
116 if(gGeoManager) delete gGeoManager;
117 gGeoManager = new TGeoManager("ITSGeometry","ITS Simulation Geometry Manager");
118 TGeoMaterial *vacmat = new TGeoMaterial("Vacuum",0,0,0);
119 TGeoMedium *vacmed = new TGeoMedium("Vacuum_med",1,vacmat);
120 TGeoVolume *aLICE = gGeoManager->MakeBox("ALICE",vacmed,100.,100.,200.);
121 gGeoManager->SetTopVolume(aLICE);
122 fBt = new AliITSvBeamTestITS04("ITS","ITS beam test");
123 fBt->CreateGeometry();
127 if(GetBeamTestPeriod()==kAug04){
128 fBt = new AliITSvSDD03("ITS",2004);
129 gSystem->Load("libgeant321");
130 // new TGeant3("C++ Interface to Geant3");
131 if(strcmp(gMC->GetName(),"TGeant3")) {
132 Fatal("Init","TGeant3 should be instantiated in advance");
135 fBt->CreateMaterials();
136 fBt->CreateGeometry();
139 gAlice->AddModule(fBt);
141 fRunLoader->AddLoader(fBt);
142 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
143 fRunLoader->MakeTree("E");
144 fRunLoader->WriteHeader("OVERWRITE");
145 fRunLoader->WriteRunLoader("OVERWRITE");
146 fRunLoader->WriteAliRun("OVERWRITE");
148 fDigitsFileName=fgkDefaultDigitsFileName;
149 this->Add(new AliITSBeamTestDigSPD("DigSPD","SPD Digitization"));
150 this->Add(new AliITSBeamTestDigSDD("DigSDD","SDD Digitization"));
151 this->Add(new AliITSBeamTestDigSSD("DigSSD","SSD Digitization"));
156 //_____________________________________________________________
157 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const char* filename)
160 // Constructor for reading (reads galice.root)
163 fRunLoader = AliRunLoader::Open(filename);
164 if (fRunLoader == 0x0)
166 Error("AliITSBeamTestDigitizer","Can not load the session",filename);
169 fRunLoader->LoadgAlice();
170 gAlice = fRunLoader->GetAliRun();
173 Error("AliITSBeamTestDigitizer","gAlice not found on file. Aborting.");
177 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
179 //fBt = (AliITSBeamTest*)gAlice->GetDetector("ITS");
182 fDigitsFileName=fgkDefaultDigitsFileName;
190 //______________________________________________________________________
191 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const AliITSBeamTestDigitizer &bt):TTask(bt){
194 if(this==&bt) return;
195 Error("Copy constructor",
196 "You are not allowed to make a copy of the AliITSBeamTestDigitizer");
200 //______________________________________________________________________
201 AliITSBeamTestDigitizer& AliITSBeamTestDigitizer::operator=(const AliITSBeamTestDigitizer &source){
202 // Assignment operator. This is a function which is not allowed to be
203 // done to the ITS beam test digitizer. It exits with an error.
205 if(this==&source) return *this;
206 Error("operator=","You are not allowed to make a copy of the AliITSBeamTestDigitizer");
208 return *this; //fake return
212 //______________________________________________________________
213 AliITSBeamTestDigitizer::~AliITSBeamTestDigitizer(){
217 if(fLoader) delete fLoader;
218 if(fHeader) delete fHeader;
222 //_____________________________________________________________
223 void AliITSBeamTestDigitizer::SetNumberOfEventsPerFile(Int_t nev)
225 //Sets number of events per file
227 if(fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev);
228 else Warning("SetNumberOfEventsPerFile","fRunLoader is 0");
232 //____________________________________________________
233 void AliITSBeamTestDigitizer::ExecDigitization(){
235 // Execution of digitisation for SPD,SDD and SSD
238 Warning("ExecDigitization()","Run Init() please..");
241 fLoader->SetDigitsFileName(fDigitsFileName);
242 fLoader->LoadDigits("recreate");
246 if(GetOptDate()) rd = new AliRawReaderDate(fRawdataFileName,fEvIn);
247 else rd = new AliRawReaderRoot(fRawdataFileName,fEvIn);
249 AliHeader* header = fRunLoader->GetHeader();
254 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
255 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
256 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
262 if(iev>fEvFin) break;
264 AliITSEventHeader* itsh = new AliITSEventHeader("ITSHeader");
265 fRunLoader->SetEventNumber(iev);
267 rd->RequireHeader(fFlagHeader);
268 rd->SelectEvents(fDATEEvType);
270 digSDD->SetRawReader(rd);
271 digSPD->SetRawReader(rd);
272 digSSD->SetRawReader(rd);
274 if(fLoader->TreeD() == 0x0) fLoader->MakeTree("D");
276 TTree* treeD = (TTree*)fLoader->TreeD();
278 // Make branches outside the dig-classes
280 TClonesArray* digitsSPD = new TClonesArray("AliITSdigitSPD",1000);
281 treeD->Branch("ITSDigitsSPD",&digitsSPD);
283 TClonesArray* digitsSDD = new TClonesArray("AliITSdigitSDD",1000);
284 treeD->Branch("ITSDigitsSDD",&digitsSDD);
286 TClonesArray* digitsSSD = new TClonesArray("AliITSdigitSSD",1000);
287 treeD->Branch("ITSDigitsSSD",&digitsSSD);
290 digSSD->SetTree(treeD);
291 digSDD->SetTree(treeD);
292 digSPD->SetTree(treeD);
294 digSSD->SetBeamTest(fBt);
295 digSDD->SetBeamTest(fBt);
296 digSPD->SetBeamTest(fBt);
298 digSSD->SetITSEventHeader(itsh);
299 digSDD->SetITSEventHeader(itsh);
300 digSPD->SetITSEventHeader(itsh);
302 digSDD->SetBtPeriod(GetBeamTestPeriod());
303 if(GetBeamTestPeriod()==1)digSDD->SetThreshold(16);
304 else digSDD->SetThreshold(0);
307 header->SetEventNrInRun(iev);
308 header->SetEvent(iev);
309 header->SetRun(fRunNumber);
310 fRunLoader->GetHeader()->AddDetectorEventHeader(itsh);
311 fRunLoader->TreeE()->Fill();
312 header->Reset(fRunNumber,iev);
318 }while(rd->NextEvent());
321 fRunLoader->WriteHeader("OVERWRITE");
322 fRunLoader->WriteRunLoader("OVERWRITE");
325 fLoader->UnloadDigits();
326 fLoader->UnloadRawClusters();
327 fRunLoader->UnloadHeader();
334 //_______________________________________________
335 void AliITSBeamTestDigitizer:: SetActive(const TString& subdet,Bool_t value){
337 //Sets active sub-tasks (detectors)
339 Bool_t sdd = subdet.Contains("SDD");
340 Bool_t spd = subdet.Contains("SPD");
341 Bool_t ssd = subdet.Contains("SSD");
344 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
345 digSDD->SetActive(value);
349 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
350 digSPD->SetActive(value);
355 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
356 digSSD->SetActive(value);