Major upgrades for AliTOFMerger
[u/mrichter/AliRoot.git] / TOF / AliTOFMerger.cxx
CommitLineData
517b7f8f 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
517b7f8f 16#include <TTree.h>
17#include <TVector.h>
18#include <TObjArray.h>
19#include <TFile.h>
20#include <TDirectory.h>
21
22
23#include "AliTOFMerger.h"
24#include "AliTOF.h"
25#include "AliTOFSDigitizer.h"
26#include "AliTOFhit.h"
27#include "AliTOFdigit.h"
28
29#include "AliRun.h"
30#include "AliPDG.h"
31
32#include <stdlib.h>
33#include <iostream.h>
34#include <fstream.h>
35
36ClassImp(AliTOFMerger)
37
38//___________________________________________
39 AliTOFMerger::AliTOFMerger()
40{
bd0c63ae 41// Default ctor
42 fNDigits = 0;
517b7f8f 43 fEvNrSig = 0;
44 fEvNrBgr = 0;
45 fMerge =kDigitize;
46 fFnBgr = 0;
47}
48
49//------------------------------------------------------------------------
50AliTOFMerger::~AliTOFMerger()
51{
bd0c63ae 52// Dtor
517b7f8f 53 if(fSDigits) {
54 fSDigits->Delete();
55 delete fSDigits ;
56 fSDigits = 0;
57 }
58}
59
60
61//------------------------------------------------------------------------
62void AliTOFMerger::Init()
63{
64// Initialisation
65 if (fMerge) fBgrFile = InitBgr();
66
67}
68
69
70
71//------------------------------------------------------------------------
72TFile* AliTOFMerger::InitBgr()
73{
74// Initialise background event
75 TFile *file = new TFile(fFnBgr);
76// add error checking later
77 printf("\n AliTOFMerger has opened %s file with background event \n", fFnBgr);
78 return file;
79}
80
81//------------------------------------------------------------------------
82void AliTOFMerger::Digitise()
83{
bd0c63ae 84// as in FMD
85// keep galice.root for signal and name differently the file for
86// background when add! otherwise the track info for signal will be lost !
87
88
517b7f8f 89
90#ifdef DEBUG
91 cout<<"ALiTOFMerger::>SDigits2Digits start...\n";
92#endif
bd0c63ae 93
94 AliTOF* TOF = (AliTOF *) gAlice->GetDetector("TOF") ;
95
96
97 TFile *f1 =0;
98 TTree *TK = gAlice->TreeK();
99 if (TK) f1 = TK->GetCurrentFile();
100
101 gAlice->GetEvent(fEvNrSig) ;
102
103 if(gAlice->TreeD() == 0)
104 gAlice->MakeTree("D") ;
105 gAlice->TreeD()->Reset();
106
107 // read and write digits for signal
108 ReadWriteDigit(fEvNrSig);
109
110 if(fMerge){
111 // bgr file
112 fBgrFile->cd();
113 // gAlice->TreeS()->Reset();
114 gAlice = (AliRun*)fBgrFile->Get("gAlice");
115 ReadWriteDigit(fEvNrBgr);
116 } //if merge
117
118
119 f1->cd();
120
121 //Make branch for digits
122 TOF->MakeBranch("D");
123
124 gAlice->TreeD()->Reset();
125 gAlice->TreeD()->Fill();
126
127 fDigits = TOF->Digits();
128
129 gAlice->TreeD()->Write(0,TObject::kOverwrite) ;
130
131 gAlice->ResetDigits();
132
133}
134
135//---------------------------------------------------------------------
136
137void AliTOFMerger::ReadWriteDigit(Int_t iEvNum)
138{
139//
140// Read Sdigits from the current file and write them in the TreeD
141//
142 AliTOFdigit* tofsdigit;
143
144 AliTOF * tofinfile = (AliTOF *) gAlice->GetDetector("TOF") ;
145
146 gAlice->GetEvent(iEvNum) ;
147 if(gAlice->TreeS()==0) {
148 cout<<" TreeS==0 -> return"<<gAlice->TreeS()<<endl;
149 return ;}
150
151 Int_t ndig, k;
152 Int_t tracks[3]; // track info
153 Int_t vol[5]; // location for a digit
154 Float_t digit[2]; // TOF digit variables
155
156 gAlice->ResetDigits();
157 gAlice->TreeS()->GetEvent(iEvNum);
158 TClonesArray * TOFdigits = tofinfile->SDigits();
159
160 ndig=TOFdigits->GetEntries();
161
162 for (k=0; k<ndig; k++) {
163 tofsdigit= (AliTOFdigit*) TOFdigits->UncheckedAt(k);
164
165 tracks[0] = tofsdigit->GetTrack(0);
166 tracks[1] = tofsdigit->GetTrack(1);
167 tracks[2] = tofsdigit->GetTrack(2);
168
169 vol[0] = tofsdigit->GetSector();
170 vol[1] = tofsdigit->GetPlate();
171 vol[2] = tofsdigit->GetPadx();
172 vol[3] = tofsdigit->GetPadz();
173 vol[4] = tofsdigit->GetStrip();
174
175 digit[0] = tofsdigit->GetTdc();
176 digit[1] = tofsdigit->GetAdc();
177
178 new ((*fDigits)[fNDigits++]) AliTOFdigit(tracks, vol, digit);
179 } // end loop on sdigits in the current file
517b7f8f 180}
bd0c63ae 181
182
183