GetMedium replaced by CurrentMedium (I.Hrivnacova)
[u/mrichter/AliRoot.git] / TOF / AliHits2SDigits.C
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // name: AliHits2SDigits
4 // date: 4.4.2002
5 // last update: 4.4.2002
6 // author: Jiri Chudoba
7 // version: 1.0
8 //
9 // description: 
10 //       creates sdigits for several detectors
11 //       stores sdigits in separate file (or in the source file
12 //       with hits). Stores gAlice object and copies TE to the
13 //       file with sdigits
14 //
15 // input:
16 //       TString fileNameSDigits ... output file with sdigits
17 //       TString fileNameHits ... input file with hits
18 //       Int_t nEvents  ... how many events to proceed
19 //       Int_t firstEvent  ... first event number
20 //       Int_t ITS, TPC, ...   many flags for diff. detectors
21 //
22 // History:
23 //
24 // 04.04.02 - first version
25 // 
26 ////////////////////////////////////////////////////////////////////////
27
28 #if !defined(__CINT__) || defined(__MAKECINT__)
29 #include "iostream.h"
30 #include "TTree.h"
31 #include "TBranch.h"
32 #include "TDirectory.h"
33 #include "TFile.h"
34 #include "AliRun.h"
35 #include "TParticle.h"
36 #include "TPC/AliTPCDigitsArray.h"
37 #include "AliHeader.h"
38 #include "TGeometry.h"
39 #include "TObjArray.h"
40 #include "TString.h"
41 #include "ITS/AliITS.h"
42 #include "TPC/AliTPC.h"
43 #include "PHOS/AliPHOSSDigitizer.h"
44 #include "TOF/AliTOFSDigitizer.h"
45 #include "TRD/AliTRDdigitizer.h"
46 #include "TStopwatch.h"
47 #include "TRD/AliTRDparameter.h"
48 #endif
49
50 TFile* Init(TString fileNameSDigits, TString fileNameHits);
51 TFile* OpenFile(TString fileName);
52 Bool_t ImportgAlice(TFile *file);
53 AliTRDdigitizer *InitTRDdigitizer();
54 void AliCopy(TFile *inputFile, TFile *outputFile);
55
56 // global variables
57
58 TFile *gFileHits = 0;
59 Bool_t gSameFiles = kFALSE;
60 Int_t gDEBUG = 1;
61
62
63 Int_t AliHits2SDigits(TString fileNameSDigits="sdigits.root", 
64                       TString fileNameHits="galice.root", 
65                       Int_t nEvents = 1, Int_t firstEvent = 0, Int_t iITS = 0,
66                       Int_t iTPC = 0, Int_t iTRD = 0,Int_t iPHOS = 0, 
67                       Int_t iTOF = 1, Int_t iCopy = 1)
68 {
69 //
70 // Initialization
71 //
72   TFile *fileSDigits;
73   fileSDigits = Init(fileNameSDigits, fileNameHits);
74   if (!fileSDigits) return 1;
75   if (iCopy) {
76     AliCopy(gFileHits,fileSDigits);
77     gFileHits->cd();
78   }  
79
80 // ITS
81   AliITS *ITS;
82   if (iITS) {
83     ITS  = (AliITS*) gAlice->GetModule("ITS");
84     if (!ITS) {
85       iITS = 0;
86       cerr<<"AliITS object not found on file." << endl;
87     } else if (!ITS->GetITSgeom()) {
88       cerr<<"AliITSgeom not found." << endl;
89       iITS = 0;
90     }
91   }
92
93 // TPC
94   AliTPC *TPC;
95   if (iTPC) {
96     TPC = (AliTPC*)gAlice->GetDetector("TPC");
97     if (!TPC) {
98       iTPC = 0;
99       cerr<<"AliTPC object not found"<<endl;
100     }
101   }
102
103 // TRD
104   AliTRDdigitizer *sdTRD;
105   if (iTRD) {
106     sdTRD = InitTRDdigitizer();
107   }
108
109
110 // PHOS
111   AliPHOSSDigitizer *sdPHOS;
112   if (iPHOS) {
113     sdPHOS = new AliPHOSSDigitizer(fileNameHits.Data());
114   }
115
116 // TOF
117   AliTOFSDigitizer *sdTOF;
118   if (iTOF) {
119     sdTOF = new AliTOFSDigitizer(fileNameHits.Data(),firstEvent,nEvents);
120   }
121
122
123 //
124 // loop over events
125 //
126   TStopwatch timer;
127   timer.Start();
128   for (Int_t iEvent = firstEvent;iEvent<firstEvent+nEvents;iEvent++){
129     gAlice->GetEvent(iEvent);
130     gAlice->MakeTree("S",fileSDigits);
131     
132 // ITS
133     if (iITS) {
134       if (gDEBUG) {cout<<"  Create ITS sdigits: ";}
135       ITS->MakeBranch("S");
136       ITS->SetTreeAddress();
137       ITS->Hits2SDigits();
138       if (gDEBUG) {cout<<"done"<<endl;}
139     }
140
141 // TPC
142     if (iTPC) {
143       if (gDEBUG) {cout<<"  Create TPC sdigits: ";}
144       TPC->SetActiveSectors(1);
145       TPC->Hits2SDigits2(iEvent);
146       if (gDEBUG) {cout<<"done"<<endl;}
147     }
148
149 // TRD
150     if (iTRD) {
151       if (gDEBUG) {cout<<"  Create TRD sdigits: ";}
152       sdTRD->InitOutput(fileSDigits, iEvent);
153       sdTRD->MakeDigits();
154       sdTRD->WriteDigits();
155       if (gDEBUG) {cout<<"done"<<endl;}
156     }
157     
158   } // end of loop over events
159
160 // PHOS processes always all events
161   if (iPHOS) {
162     sdPHOS->ExecuteTask("deb all");
163   }
164
165 // TOF (precesses the events as specified in the AliTOFSDigitizer 
166 // par ctor)
167   if (iTOF) {
168     // Activate this line if you want to print the
169     // parameters used for sdigitization
170     // sdTOF->PrintParameters(); 
171     sdTOF->Exec("all");
172   }
173
174 //
175 // finish 
176 //
177   timer.Stop(); 
178   timer.Print();
179
180   if (iTRD) { 
181     fileSDigits->cd();
182     sdTRD->GetParameter()->Write();
183     gFileHits->cd();
184   }
185
186   fileSDigits->Close();
187   delete fileSDigits;
188   if (!gSameFiles) {
189     gFileHits->Close();
190     delete gFileHits;
191   }
192
193 }
194  
195
196 ////////////////////////////////////////////////////////////////////////
197 TFile* Init(TString fileNameSDigits, TString fileNameHits) {
198 // open input file, read in gAlice, prepare output file
199   if (gAlice) delete gAlice;
200   gAlice = 0;
201
202   Bool_t gSameFiles = kFALSE;
203   if (fileNameSDigits == fileNameHits || fileNameSDigits == "") gSameFiles = kTRUE;
204
205   TString fileMode = "read";
206   if (gSameFiles) fileMode = "update";
207
208   gFileHits =  TFile::Open(fileNameHits.Data(),fileMode.Data());
209   if (!gFileHits->IsOpen()) {
210     cerr<<"Can't open "<<fileNameHits.Data()<<" !\n";
211     return 0;
212   }
213   if (!ImportgAlice(gFileHits)) return 0;
214   if (!gSameFiles) return gAlice->InitTreeFile("S",fileNameSDigits.Data());
215   return gFileHits;
216
217 }
218
219 ////////////////////////////////////////////////////////////////////////
220 TFile* OpenFile(TString fileName) {
221 // open file fileName
222   TFile *file = TFile::Open(fileName.Data());
223   if (!file->IsOpen()) {
224     cerr<<"Can't open "<<fileName.Data()<<" !\n";
225     return 0;
226   }
227   return file;
228 }
229
230 ////////////////////////////////////////////////////////////////////////
231 Bool_t ImportgAlice(TFile *file) {
232 // read in gAlice object from the file
233   gAlice = (AliRun*)file->Get("gAlice");
234   if (!gAlice)  return kFALSE;
235   return kTRUE;
236 }
237 ////////////////////////////////////////////////////////////////////////
238 AliTRDdigitizer *InitTRDdigitizer() {
239 // initialization of TRD digitizer
240   AliTRDdigitizer *sdTRD = new AliTRDdigitizer("TRDdigitizer"
241                                                ,"TRD digitizer class");
242   sdTRD->SetDebug(0);
243   sdTRD->SetSDigits(kTRUE);
244   AliTRDparameter *TRDparam = new AliTRDparameter("TRDparameter"
245                                                   ,"TRD parameter class");
246
247   sdTRD->SetParameter(TRDparam);
248   sdTRD->InitDetector();
249   return sdTRD;
250 }
251 ////////////////////////////////////////////////////////////////////////
252 void AliCopy(TFile *inputFile, TFile *outputFile) {
253 // copy some objects
254
255 // copy gAlice
256   if (gDEBUG) cout<<"Copy gAlice: ";
257   outputFile->cd();
258   gAlice->Write();
259   if (gDEBUG) cout<<"done"<<endl;
260
261   TTree *treeE  = gAlice->TreeE();
262   if (!treeE) {
263     cerr<<"No TreeE found "<<endl;
264     return;
265   }      
266
267 // copy TreeE
268   if (gDEBUG) cout<<"Copy TreeE: ";
269   AliHeader *header = new AliHeader();
270   treeE->SetBranchAddress("Header", &header);
271   treeE->SetBranchStatus("*",1);
272   TTree *treeENew =  treeE->CloneTree();
273   treeENew->Write();
274   if (gDEBUG) cout<<"done"<<endl;
275
276 // copy AliceGeom
277   if (gDEBUG) cout<<"Copy AliceGeom: ";
278   TGeometry *AliceGeom = static_cast<TGeometry*>(inputFile->Get("AliceGeom"));
279   if (!AliceGeom) {
280     cerr<<"AliceGeom was not found in the input file "<<endl;
281     return;
282   }
283   AliceGeom->Write();
284   if (gDEBUG) cout<<"done"<<endl;
285
286 }