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 "TGeoManager.h"
22 #include "TGeoMaterial.h"
23 #include "TGeoMedium.h"
24 #include "TGeoVolume.h"
25 #include <TVirtualMC.h>
26 //#include <TGeant3.h>
28 const TString AliITSBeamTestDigitizer::fgkDefaultDigitsFileName="ITS.Digits.root";
30 ClassImp(AliITSBeamTestDigitizer)
33 //_____________________________________________________________
34 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer():TTask()
37 // Default constructor
51 //_____________________________________________________________
52 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Char_t* opt):TTask(name,title)
55 // Standard constructor
67 Bool_t aug04 = choice.Contains("Aug04");
68 Bool_t nov04 = choice.Contains("Nov04");
69 if(aug04) fPeriod=kAug04;
70 if(nov04) fPeriod=kNov04;
74 //_____________________________________________________________
75 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const Text_t* name, const Text_t* title, Int_t run, Char_t* opt):TTask(name,title)
90 Bool_t aug04 = choice.Contains("Aug04");
91 Bool_t nov04 = choice.Contains("Nov04");
92 if(aug04) fPeriod=kAug04;
93 if(nov04) fPeriod=kNov04;
98 //___________________________________________________________
99 void AliITSBeamTestDigitizer::Init(){
102 //Initialization of run loader and its loader
103 //creation of galice.root
106 fRunLoader = AliRunLoader::Open("galice.root",
107 AliConfig::GetDefaultEventFolderName(),"recreate");
109 gAlice->SetRunLoader(fRunLoader);
110 fRunLoader->SetEventFolderName();
111 if(GetBeamTestPeriod()==kNov04){
112 if(gGeoManager) delete gGeoManager;
113 gGeoManager = new TGeoManager("ITSGeometry","ITS Simulation Geometry Manager");
114 TGeoMaterial *vacmat = new TGeoMaterial("Vacuum",0,0,0);
115 TGeoMedium *vacmed = new TGeoMedium("Vacuum_med",1,vacmat);
116 TGeoVolume *aLICE = gGeoManager->MakeBox("ALICE",vacmed,100.,100.,200.);
117 gGeoManager->SetTopVolume(aLICE);
118 fBt = new AliITSvBeamTestITS04("ITS","ITS beam test");
119 fBt->CreateGeometry();
123 if(GetBeamTestPeriod()==kAug04){
124 fBt = new AliITSvSDD03("ITS",2004);
125 gSystem->Load("libgeant321");
126 // new TGeant3("C++ Interface to Geant3");
127 if(strcmp(gMC->GetName(),"TGeant3")) {
128 Fatal("Init","TGeant3 should be instantiated in advance");
131 fBt->CreateMaterials();
132 fBt->CreateGeometry();
135 gAlice->AddModule(fBt);
137 fRunLoader->AddLoader(fBt);
138 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
139 fRunLoader->MakeTree("E");
140 fRunLoader->WriteHeader("OVERWRITE");
141 fRunLoader->WriteRunLoader("OVERWRITE");
142 fRunLoader->WriteAliRun("OVERWRITE");
144 fDigitsFileName=fgkDefaultDigitsFileName;
145 this->Add(new AliITSBeamTestDigSPD("DigSPD","SPD Digitization"));
146 this->Add(new AliITSBeamTestDigSDD("DigSDD","SDD Digitization"));
147 this->Add(new AliITSBeamTestDigSSD("DigSSD","SSD Digitization"));
152 //_____________________________________________________________
153 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const char* filename)
156 // Constructor for reading (reads galice.root)
159 fRunLoader = AliRunLoader::Open(filename);
160 if (fRunLoader == 0x0)
162 Error("AliITSBeamTestDigitizer","Can not load the session",filename);
165 fRunLoader->LoadgAlice();
166 gAlice = fRunLoader->GetAliRun();
169 Error("AliITSBeamTestDigitizer","gAlice not found on file. Aborting.");
173 fLoader = (AliITSLoader*)fRunLoader->GetLoader("ITSLoader");
175 //fBt = (AliITSBeamTest*)gAlice->GetDetector("ITS");
178 fDigitsFileName=fgkDefaultDigitsFileName;
185 //______________________________________________________________________
186 AliITSBeamTestDigitizer::AliITSBeamTestDigitizer(const AliITSBeamTestDigitizer &bt):TTask(bt){
189 if(this==&bt) return;
190 Error("Copy constructor",
191 "You are not allowed to make a copy of the AliITSBeamTestDigitizer");
195 //______________________________________________________________________
196 AliITSBeamTestDigitizer& AliITSBeamTestDigitizer::operator=(const AliITSBeamTestDigitizer &source){
197 // Assignment operator. This is a function which is not allowed to be
198 // done to the ITS beam test digitizer. It exits with an error.
200 if(this==&source) return *this;
201 Error("operator=","You are not allowed to make a copy of the AliITSBeamTestDigitizer");
203 return *this; //fake return
207 //______________________________________________________________
208 AliITSBeamTestDigitizer::~AliITSBeamTestDigitizer(){
212 if(fLoader) delete fLoader;
213 if(fHeader) delete fHeader;
217 //_____________________________________________________________
218 void AliITSBeamTestDigitizer::SetNumberOfEventsPerFile(Int_t nev)
220 //Sets number of events per file
222 if(fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev);
223 else Warning("SetNumberOfEventsPerFile","fRunLoader is 0");
227 //____________________________________________________
228 void AliITSBeamTestDigitizer::ExecDigitization(){
230 // Execution of digitisation for SPD,SDD and SSD
233 Warning("ExecDigitization()","Run Init() please..");
236 fLoader->SetDigitsFileName(fDigitsFileName);
237 fLoader->LoadDigits("recreate");
239 AliRawReaderDate rd(fRawdataFileName,fEvIn);
240 AliHeader* header = fRunLoader->GetHeader();
245 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
246 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
247 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
253 if(iev>fEvFin) break;
255 AliITSEventHeader* itsh = new AliITSEventHeader("ITSHeader");
256 fRunLoader->SetEventNumber(iev);
258 rd.RequireHeader(fFlagHeader);
259 rd.SelectEvents(fDATEEvType);
261 digSDD->SetRawReaderDate(&rd);
262 digSPD->SetRawReaderDate(&rd);
263 digSSD->SetRawReaderDate(&rd);
265 if(fLoader->TreeD() == 0x0) fLoader->MakeTree("D");
267 TTree* treeD = (TTree*)fLoader->TreeD();
269 // Make branches outside the dig-classes
271 TClonesArray* digitsSPD = new TClonesArray("AliITSdigitSPD",1000);
272 treeD->Branch("ITSDigitsSPD",&digitsSPD);
274 TClonesArray* digitsSDD = new TClonesArray("AliITSdigitSDD",1000);
275 treeD->Branch("ITSDigitsSDD",&digitsSDD);
277 TClonesArray* digitsSSD = new TClonesArray("AliITSdigitSSD",1000);
278 treeD->Branch("ITSDigitsSSD",&digitsSSD);
281 digSSD->SetTree(treeD);
282 digSDD->SetTree(treeD);
283 digSPD->SetTree(treeD);
285 digSSD->SetBeamTest(fBt);
286 digSDD->SetBeamTest(fBt);
287 digSPD->SetBeamTest(fBt);
289 digSSD->SetITSEventHeader(itsh);
290 digSDD->SetITSEventHeader(itsh);
291 digSPD->SetITSEventHeader(itsh);
293 digSDD->SetBtPeriod(GetBeamTestPeriod());
294 if(GetBeamTestPeriod()==1)digSDD->SetThreshold(16);
295 else digSDD->SetThreshold(0);
298 header->SetEventNrInRun(iev);
299 header->SetEvent(iev);
300 header->SetRun(fRunNumber);
301 fRunLoader->GetHeader()->AddDetectorEventHeader(itsh);
302 fRunLoader->TreeE()->Fill();
303 header->Reset(fRunNumber,iev);
309 }while(rd.NextEvent());
312 fRunLoader->WriteHeader("OVERWRITE");
313 fRunLoader->WriteRunLoader("OVERWRITE");
315 fLoader->UnloadDigits();
316 fLoader->UnloadRawClusters();
317 fRunLoader->UnloadHeader();
324 //_______________________________________________
325 void AliITSBeamTestDigitizer:: SetActive(const TString& subdet,Bool_t value){
327 //Sets active sub-tasks (detectors)
329 Bool_t sdd = subdet.Contains("SDD");
330 Bool_t spd = subdet.Contains("SPD");
331 Bool_t ssd = subdet.Contains("SSD");
334 AliITSBeamTestDigSDD* digSDD = (AliITSBeamTestDigSDD*)fTasks->FindObject("DigSDD");
335 digSDD->SetActive(value);
339 AliITSBeamTestDigSPD* digSPD = (AliITSBeamTestDigSPD*)fTasks->FindObject("DigSPD");
340 digSPD->SetActive(value);
345 AliITSBeamTestDigSSD* digSSD = (AliITSBeamTestDigSSD*)fTasks->FindObject("DigSSD");
346 digSSD->SetActive(value);