TVector.h missing
[u/mrichter/AliRoot.git] / TOF / AliTOFMerger.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15 //Piotr.Skowronski@cern.ch :
16 //Corrections applied in order to compile (only) with new I/O and folder structure
17 //To be implemented correctly by responsible
18
19 #include "AliRunLoader.h"
20 #include "AliLoader.h"
21
22 #include <TTree.h> 
23 #include <TVector.h>
24 #include <TObjArray.h>
25 #include <TFile.h>
26 #include <TDirectory.h>
27
28
29 #include "AliTOFMerger.h"
30 #include "AliTOF.h"
31 #include "AliTOFSDigitizer.h"
32 #include "AliTOFhit.h"
33 #include "AliTOFdigit.h"
34
35 #include "AliRun.h"
36 #include "AliPDG.h"
37
38 #include <stdlib.h>
39 #include <Riostream.h>
40 #include <Riostream.h>
41
42 ClassImp(AliTOFMerger)
43
44 //___________________________________________
45   AliTOFMerger::AliTOFMerger() 
46 {
47 // Default ctor    
48     fNDigits = 0;
49     fEvNrSig = 0;
50     fEvNrBgr = 0;
51     fMerge =kDigitize;
52     fDigits = 0;
53     fSDigits =0;
54     fFnBgr = 0;
55     fFnSig = 0;
56     fBgrFile = 0;
57     fRunLoader     = 0 ;
58 }
59
60 //------------------------------------------------------------------------
61 AliTOFMerger::~AliTOFMerger()
62 {
63 // Dtor
64   if(fSDigits)  {
65     fSDigits->Delete();
66     delete fSDigits ;
67     fSDigits = 0;
68   }
69   delete fBgrFile;
70   fBgrFile = 0;
71   if(fFnBgr) {
72     delete[] fFnBgr;
73     fFnBgr = 0;
74   }
75   if(fFnSig) {
76     delete[] fFnSig;
77     fFnSig = 0;
78   }
79   delete fRunLoader;
80 }
81
82
83 //------------------------------------------------------------------------
84 void AliTOFMerger::Init()
85 {
86 // Initialisation
87     if (fMerge) fBgrFile = InitBgr();
88     
89 }
90
91
92
93 //------------------------------------------------------------------------
94 TFile* AliTOFMerger::InitBgr()
95 {
96 // Initialise background event
97    fRunLoader = AliRunLoader::Open(fFnBgr);//open session and mount on default event folder
98    
99     TFile *file = new TFile(fFnBgr);
100 // add error checking later
101     printf("\n AliTOFMerger has opened %s file with background event \n", fFnBgr);
102     return file;
103 }
104
105 //------------------------------------------------------------------------
106 void AliTOFMerger::Digitise()
107 {
108 // as in FMD
109 // keep galice.root for signal and name differently the file for 
110 // background when add! otherwise the track info for signal will be lost !
111
112 #ifdef DEBUG
113   cout<<"ALiTOFMerger::>SDigits2Digits start...\n";
114 #endif
115   Int_t retval;
116
117   if (fRunLoader == 0x0)
118    {
119      Error("Exec","Event is not loaded. Exiting");
120      return;
121    }
122
123   if (fRunLoader->GetAliRun() == 0x0) {
124     retval = fRunLoader->LoadgAlice();
125     if (retval)
126       {
127         Error("Exec","Error occured while loading gAlice. Exiting");
128         return;
129       }
130   }
131
132   if (fRunLoader->TreeE() == 0x0) {
133     retval = fRunLoader->LoadHeader();
134     if (retval)
135       {
136         Error("Exec","Error occured while loading header. Exiting");
137         return;
138       }
139   }
140
141   if (fRunLoader->TreeK() == 0x0) {
142     retval = fRunLoader->LoadKinematics("READ");
143     if (retval)
144       {
145         Error("Exec","Error occured while loading kinematics. Exiting");
146         return;
147       }
148   }
149
150   AliLoader* gime = fRunLoader->GetLoader("TOFLoader");
151   if (gime == 0x0)
152    {
153      Error("Exec","Can not find TOF loader in event. Exiting.");
154      return;
155    }
156   gAlice = fRunLoader->GetAliRun();
157   
158   AliTOF* TOF = (AliTOF *) gAlice->GetDetector("TOF") ;
159
160
161   TFile *f1 =0;
162   TTree *TK = fRunLoader->TreeK();
163   if (TK) f1 = TK->GetCurrentFile();
164
165   fRunLoader->GetEvent(fEvNrSig);
166   
167   if(gime->TreeD() == 0)        
168     gime->MakeTree("D") ;
169   
170   gime->TreeD()->Reset();
171
172   // read and write digits for signal
173    ReadWriteDigit(fEvNrSig);
174
175    if(fMerge)
176     { 
177       // bgr file
178       fBgrFile->cd();
179       // gAlice->TreeS()->Reset();
180       gAlice = (AliRun*)fBgrFile->Get("gAlice");
181       ReadWriteDigit(fEvNrBgr);
182     } //if merge
183
184
185   f1->cd();
186    
187   //Make branch for digits
188   TOF->MakeBranch("D");
189
190   gime->TreeD()->Reset();
191   gime->TreeD()->Fill();
192   
193   fDigits   = TOF->Digits();
194   
195   gime->WriteDigits("OVERWRITE");
196   
197   gAlice->ResetDigits();
198
199 }
200
201 //---------------------------------------------------------------------
202
203 void AliTOFMerger::ReadWriteDigit(Int_t iEvNum)
204 {
205 //
206 // Read Sdigits from the current file and write them in the TreeD
207 //
208   AliTOFdigit* tofsdigit;
209   
210   AliTOF * tofinfile = (AliTOF *) gAlice->GetDetector("TOF") ;
211   
212   Int_t retval = fRunLoader->GetEvent(iEvNum);
213   if (retval)
214    {
215      Error("ReadWriteDigit","Error while getting event %d",iEvNum);
216      return;
217    }
218
219   AliLoader* gime = fRunLoader->GetLoader("TOFLoader");
220   if (gime == 0x0)
221    {
222      Error("Exec","Can not find TOF loader in event. Exiting.");
223      return;
224    }
225   
226   
227   
228   if(gime->TreeS()==0) 
229    {
230     cout<<" TreeS==0 -> return"<<gime->TreeS()<<endl; 
231     return ;
232    }
233   
234   Int_t ndig, k;
235   Int_t    tracks[3];    // track info
236   Int_t    vol[5];       // location for a digit
237   Float_t  digit[2];     // TOF digit variables
238
239   gAlice->ResetDigits();
240   gime->TreeS()->GetEvent(iEvNum);
241   TClonesArray * TOFdigits   = tofinfile->SDigits();
242   
243   ndig=TOFdigits->GetEntries();
244
245   for (k=0; k<ndig; k++) {
246     tofsdigit= (AliTOFdigit*) TOFdigits->UncheckedAt(k);
247
248         tracks[0] = tofsdigit->GetTrack(0);
249         tracks[1] = tofsdigit->GetTrack(1);
250         tracks[2] = tofsdigit->GetTrack(2);
251
252         vol[0] = tofsdigit->GetSector();
253         vol[1] = tofsdigit->GetPlate();
254         vol[2] = tofsdigit->GetStrip();
255         vol[3] = tofsdigit->GetPadx();
256         vol[4] = tofsdigit->GetPadz();
257
258         digit[0] = tofsdigit->GetTdc();
259         digit[1] = tofsdigit->GetAdc();
260
261         new ((*fDigits)[fNDigits++]) AliTOFdigit(tracks, vol, digit);
262   } // end loop on sdigits in the current file
263 }
264
265
266