TOF geometry updating (addition of AliTOFGeometry)
[u/mrichter/AliRoot.git] / TOF / AliTOFReconstructioner.h
CommitLineData
db9ba97f 1#ifndef ALITOFRECONSTRUCTIONER_H
2#define ALITOFRECONSTRUCTIONER_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6
7//_________________________________________________________________________
8// Task Class for Reconstruction in TOF
9//
10//-- Authors: Bologna-ITEP-Salerno Group
11
12
13#include "TTask.h"
14#include "TString.h"
15#include <TF1.h>
16#include <TF2.h>
17#include <TH1.h>
18#include <TH2.h>
19#include <TRandom.h>
20#include <TNtuple.h>
21#include "TParticle.h"
22#include "AliTOF.h"
23#include "AliDetector.h"
24
25class AliTOFPad;
26class AliTOFRecHit;
27class AliTOFTrack;
b9d0a01d 28class TVirtualMC;
db9ba97f 29
30class AliTOFReconstructioner: public TTask {
31
32public:
33 AliTOFReconstructioner() ; // ctor
34 AliTOFReconstructioner(char* headerFile, Option_t* opt, char *RecFile = 0) ;
35 virtual ~AliTOFReconstructioner() ; // dtor
36 virtual void InitArray(Float_t array[], Int_t nlocations);
37 virtual void InitArray(Int_t array[], Int_t nlocations);
38 virtual void Exec(const char* datafile, Option_t* option); // do the main work
39 virtual void ReadTOFHits(Int_t ntracks, TTree* treehits, TClonesArray* tofhits, Int_t *** MapPixels, Int_t* kTOFhitFirst, AliTOFPad* pixelArray , Int_t* iTOFpixel, Float_t* toftime, AliTOFRecHit* hitArray, Int_t& isHitOnFiredPad, Int_t& ipixel);
40 virtual void AddNoiseFromOuter(Option_t *option, Int_t *** MapPixels, AliTOFPad* pixelArray , AliTOFRecHit* hitArray, Int_t& isHitOnFiredPad, Int_t& ipixel);
41 virtual void SetMinDistance(AliTOFRecHit* hitArray, Int_t ilastEntry);
42 // this line has to be commented till TPC will provide fPx fPy fPz
43 // and fL in AliTPChit class
44 //virtual void ReadTPCHits(Int_t ntracks, TTree* treehits, TClonesArray* tpchits, Int_t* iTrackPt, Int_t* iparticle, Float_t* ptTrack, AliTOFTrack* trackArray, Int_t& itrack);
5c016a7b 45 virtual void ReadTPCTracks(TFile* /*tpcReconFile*/){};
db9ba97f 46 virtual void Matching(AliTOFTrack* trackArray, AliTOFRecHit* hitArray, Int_t *** mapPixel, AliTOFPad* pixelArray, Int_t* kTOFhitFirst, Int_t& ipixel, Int_t* iTrackPt, Int_t* iTOFpixel, Int_t ntotTpcTracks);
47
48 virtual void FillNtuple(Int_t ntracks, AliTOFTrack* trackArray, AliTOFRecHit* hitArray, AliTOFPad* pixelArray, Int_t* iTOFpixel, Int_t* iparticle, Float_t* toftime, Int_t& ipixelLastEntry, Int_t itrack);
49 void Init(Option_t* opt);
50 void CreateNTuple();
51 void SetNEvents(Int_t Nevents) {fNevents = Nevents;}
52 void SetFirstEvent(Int_t firstevent) {fFirstEvent = firstevent;}
53 void SetLastEvent(Int_t lastevent) {fLastEvent = lastevent;}
54 Int_t GetNEvents() const {return fNevents;}
55 const char* GetRecFile() const {return fRecFile.Data();}
56 Int_t PDGtoGeantCode(Int_t pdgcode);
b9d0a01d 57 virtual void IsInsideThePad(TVirtualMC* vmc, Float_t x, Float_t y, Float_t z, Int_t *nGeom, Float_t& zPad, Float_t& xPad);
db9ba97f 58 virtual void BorderEffect(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime);
59 virtual void EpMulScatt(Float_t& px, Float_t& py, Float_t& pz, Float_t& p, Float_t& theta);
60 void SetDbg(Int_t dbgflag) {fdbg=dbgflag;}
61 void SetRecFile(char * file ) ;
62 void SetTimeResolution(Float_t timeResolution) {fTimeResolution=timeResolution;}
63 void SetPadefficiency(Float_t padefficiency) {fpadefficiency=padefficiency;}
64 void SetEdgeEffect(Int_t edgeEffect) {fEdgeEffect=edgeEffect;}
65 void SetEdgeTails(Int_t edgeTails) {fEdgeTails=edgeTails;}
66 void SetHparameter(Float_t hparameter) {fHparameter=hparameter;}
67 void SetH2parameter(Float_t h2parameter) {fH2parameter=h2parameter;}
68 void SetKparameter(Float_t kparameter) {fKparameter=kparameter;}
69 void SetK2parameter(Float_t k2parameter) {fK2parameter=k2parameter;}
70 void SetEffCenter(Float_t effCenter) {fEffCenter=effCenter;}
71 void SetEffBoundary(Float_t effBoundary) {fEffBoundary=effBoundary;}
72 void SetEff2Boundary(Float_t eff2Boundary) {fEff2Boundary=eff2Boundary;}
73 void SetEff3Boundary(Float_t eff3Boundary) {fEff3Boundary=eff3Boundary;}
74 void SetResCenter (Float_t resCenter) {fResCenter=resCenter;}
75 void SetResBoundary(Float_t resBoundary) {fResBoundary=resBoundary;}
76 void SetResSlope(Float_t resSlope) {fResSlope=resSlope;}
77 void SetTimeWalkCenter(Float_t timeWalkCenter) {fTimeWalkCenter=timeWalkCenter;}
78 void SetTimeWalkBoundary(Float_t timeWalkBoundary){fTimeWalkBoundary=timeWalkBoundary;}
79 void SetTimeWalkSlope(Float_t timeWalkSlope) {fTimeWalkSlope=timeWalkSlope;}
80
81 void SetTimeDelayFlag(Int_t timeDelayFlag) {fTimeDelayFlag=timeDelayFlag;}
82 void SetPulseHeightSlope(Float_t pulseHeightSlope){fPulseHeightSlope=pulseHeightSlope;}
83 void SetTimeDelaySlope(Float_t timeDelaySlope) {fTimeDelaySlope=timeDelaySlope;}
84 void SetMinimumCharge(Float_t minimumCharge) {fMinimumCharge=minimumCharge;}
85 void SetChargeSmearing(Float_t chargeSmearing) {fChargeSmearing=chargeSmearing;}
86 void SetLogChargeSmearing(Float_t logChargeSmearing){fLogChargeSmearing=logChargeSmearing;}
87 void SetTimeSmearing(Float_t timeSmearing) {fTimeSmearing=timeSmearing;}
88 void SetAverageTimeFlag(Int_t averageTimeFlag) {fAverageTimeFlag=averageTimeFlag;}
89 void SetChargeFactorForMatching(Int_t chargeFactorForMatching){fChargeFactorForMatching=chargeFactorForMatching;}
90 void SetMatchingStyle(Int_t matchingStyle) {fMatchingStyle=matchingStyle;}
91 void SetTrackingEfficiency(Float_t trackingEfficiency){fTrackingEfficiency=trackingEfficiency;}
92 void SetSigmavsp(Float_t sigmavsp) {fSigmavsp=sigmavsp;}
93 void SetSigmaZ(Float_t sigmaZ) {fSigmaZ=sigmaZ;}
94 void SetSigmarphi(Float_t sigmarphi) {fSigmarphi=sigmarphi;}
95 void SetSigmap(Float_t sigmap) {fSigmap=sigmap;}
96 void SetSigmaPhi(Float_t sigmaPhi) {fSigmaPhi=sigmaPhi;}
97 void SetSigmaTheta(Float_t sigmaTheta) {fSigmaTheta=sigmaTheta;}
98 void SetNoise(Float_t noise) {fNoise=noise;}
99 void SetNoiseSlope(Float_t noiseSlope) {fNoiseSlope=noiseSlope;}
100 void SetNoiseMeanTof(Float_t noiseTof) {fNoiseMeanTof=noiseTof;}
101 void SetField(Float_t field) {fField=field;}
102 void SetRadLenTPC(Float_t radLenTPC) {fRadLenTPC=radLenTPC;}
103 void SetCorrectionTRD(Float_t correctionTRD) {fCorrectionTRD=correctionTRD;}
104 void SetLastTPCRow(Int_t lastTPCRow) {fLastTPCRow=lastTPCRow;}
105 void SetRadiusvtxBound(Float_t radiusvtxBound) {fRadiusvtxBound=radiusvtxBound;}
106 void SetMaxTestTracks(Int_t maxTestTracks) {fMaxTestTracks=maxTestTracks;}
107 void SetStep(Float_t step) {fStep=step;}
108 void SetMaxPixels(Int_t maxPixels) {fMaxPixels=maxPixels;}
109 void SetMaxAllTracks(Int_t maxAllTracks) {fMaxAllTracks=maxAllTracks;}
110 void SetMaxTracks(Int_t maxTracks) {fMaxTracks=maxTracks;}
111 void SetMaxTOFHits(Int_t maxTOFHits) {fMaxTOFHits=maxTOFHits;}
112 void SetPBound(Float_t pBound) {fPBound=pBound;}
113
114 Int_t GetDbgFlag() const {return fdbg;}
115 Float_t GetTimeResolution() const {return fTimeResolution;}
116 Float_t GetPadefficiency() const {return fpadefficiency;}
117 Int_t GetEdgeEffect() const {return fEdgeEffect;}
118 Int_t GetEdgeTails() const {return fEdgeTails;}
119 Float_t GetHparameter() const {return fHparameter;}
120 Float_t GetH2parameter() const {return fH2parameter;}
121 Float_t GetKparameter() const {return fKparameter;}
122 Float_t GetK2parameter() const {return fK2parameter;}
123 Float_t GetEffCenter() const {return fEffCenter;}
124 Float_t GetEffBoundary() const {return fEffBoundary;}
125 Float_t GetEff2Boundary() const {return fEff2Boundary;}
126 Float_t GetEff3Boundary() const {return fEff3Boundary;}
127 Float_t GetResCenter () const {return fResCenter;}
128 Float_t GetResBoundary() const {return fResBoundary;}
129 Float_t GetResSlope() const {return fResSlope;}
130 Float_t GetTimeWalkCenter() const {return fTimeWalkCenter;}
131 Float_t GetTimeWalkBoundary() const {return fTimeWalkBoundary;}
132 Float_t GetTimeWalkSlope() const {return fTimeWalkSlope;}
133 Int_t GetTimeDelayFlag() const {return fTimeDelayFlag;}
134 Float_t GetPulseHeightSlope() const {return fPulseHeightSlope;}
135 Float_t GetTimeDelaySlope() const {return fTimeDelaySlope;}
136 Float_t GetMinimumCharge() const {return fMinimumCharge;}
137 Float_t GetChargeSmearing() const {return fChargeSmearing;}
138 Float_t GetLogChargeSmearing()const {return fLogChargeSmearing;}
139 Float_t GetTimeSmearing() const {return fTimeSmearing;}
140 Int_t GetAverageTimeFlag() const {return fAverageTimeFlag;}
141 Int_t GetChargeFactorForMatching()const{return fChargeFactorForMatching;}
142 Int_t GetMatchingStyle() const{return fMatchingStyle;}
143 Float_t GetTrackingEfficiency() const{return fTrackingEfficiency;}
144 Float_t GetSigmavsp() const{return fSigmavsp;}
145 Float_t GetSigmaZ() const{return fSigmaZ;}
146 Float_t GetSigmarphi() const{return fSigmarphi;}
147 Float_t GetSigmap() const{return fSigmap;}
148 Float_t GetSigmaPhi() const{return fSigmaPhi;}
149 Float_t GetSigmaTheta() const{return fSigmaTheta;}
150 Float_t GetNoise() const{return fNoise;}
151 Float_t GetNoiseSlope() const{return fNoiseSlope;}
152 Float_t GetNoiseMeanTof() const{return fNoiseMeanTof;}
153 Float_t GetField() const{return fField;}
154 Float_t GetRadLenTPC() const{return fRadLenTPC;}
155 Float_t GetCorrectionTRD() const{return fCorrectionTRD;}
156 Int_t GetLastTPCRow() const{return fLastTPCRow;}
157 Float_t GetRadiusvtxBound() const{return fRadiusvtxBound;}
158 Int_t GetMaxTestTracks() const{return fMaxTestTracks;}
159 Float_t GetStep() const{return fStep;}
160 Int_t GetMaxPixels() const{return fMaxPixels;}
161 Int_t GetMaxAllTracks() const{return fMaxAllTracks;}
162 Int_t GetMaxTracks() const{return fMaxTracks;}
163 Int_t GetMaxTOFHits() const{return fMaxTOFHits;}
164 Float_t GetPBound() const{return fPBound;}
165
166 virtual void PrintParameters() const ;
167 virtual void Print(Option_t* option) const ;
168 void UseHitsFrom(const char * filename) ;
169 Bool_t operator == (const AliTOFReconstructioner & tofrec) const ;
170
171private:
5fff655e 172 TFile *foutputfile; //! pointer to output file
173 TNtuple *foutputntuple; //! pointer to output ntuple
db9ba97f 174 TF1 *fZnoise; // pointer to formula giving the noise along z direction
175 TF1 *ftail; // pointer to formula for time with tail
176 Int_t fdbg; // Flag for debug, 0 no debug, 1 debug
177 Int_t fNevents; // Number of events to reconstruct
178 Int_t fFirstEvent; // First event to reconstruct
179 Int_t fLastEvent; // Last event to reconstruct
180 TString fRecFile; // output file
181 TString fHeadersFile; // input file
182 // Intrisic MRPC time resolution and pad edge effect parameters
183 Float_t fTimeResolution; // time resolution of the MRPC (ns)
184 Float_t fpadefficiency; // intrinsic pad efficiency, used if fEdgeEffect==0
185 Int_t fEdgeEffect; // edge effects option
186 Int_t fEdgeTails; // edge tails option
187 Float_t fHparameter; // sensitive edge (to produce hits on the
188 // neighbouring pads) =0.7, new = 0.4 cm
189 Float_t fH2parameter; // parameter to fit the efficiency
190 Float_t fKparameter; // sensitive edge (going ahead towards the
191 // center no delay effects are suffered) =1.0, new = 0.5 cm
192 Float_t fK2parameter; // parameter to fit the efficiency
193 // Pad Efficiency and Resolution parameters
194 Float_t fEffCenter; // efficiency in the central region of the pad
195 Float_t fEffBoundary; // efficiency at the boundary of the pad
196 Float_t fEff2Boundary; // efficiency value at H2parameter
197 Float_t fEff3Boundary; // efficiency value at K2parameter
198 Float_t fResCenter; // resolution (ps) in the central region of the pad
199 Float_t fResBoundary; // resolution (ps) at the boundary of the pad
200 Float_t fResSlope; // slope (ps/K) for neighbouring pad
201 // Time Walk parameters
202 Float_t fTimeWalkCenter; // time walk (ps) in the central region of the pad
203 Float_t fTimeWalkBoundary;// time walk (ps) at the boundary of the pad
204 Float_t fTimeWalkSlope; // slope (ps/K) for neighbouring pad
205 Int_t fTimeDelayFlag; // flag for delay due to the PulseHeightEffect
206 Float_t fPulseHeightSlope;// It determines the charge amount induced
207 // due to edge effect, using the formula
208 // qInduced=exp(-PulseHeightSlope*x)
209 Float_t fTimeDelaySlope; // It determines the time delay. This is the slope
210 // in the T1-T2 vs log(q1/q2) plot
211 // ADC-TDC correlation parameters
212 Float_t fMinimumCharge; // Minimum charge amount which could be induced
213 Float_t fChargeSmearing; // Smearing in charge in (q1/q2) vs x plot
214 Float_t fLogChargeSmearing;// Smearing in log of charge ratio
215 Float_t fTimeSmearing; // Smearing in time in time vs log(q1/q2) plot
216 Int_t fAverageTimeFlag; // flag (see the setter for details)
217 Int_t fChargeFactorForMatching; // if set to 1, during matching procedure
218 // probe hits are weighted according to
219 // the pulse height
220 Int_t fMatchingStyle; // Matching style option (see setter for details)
221
222 // TPC tracking parameters
223 Float_t fTrackingEfficiency; //tracking efficiency in the TPC 0.88
224 Float_t fSigmavsp; //!=0 - sigmas depend on momentum, SIGMA VS P
225 // =0 - sigmas do not depend on momentum
226 Float_t fSigmaZ; //sigma(z) (cm) 0.044, 0.03/P(GeV/c) -> av.0.083, see AN-97-39 table 2
227 Float_t fSigmarphi; //sigma(R(phi)) (cm) 0.023, 0.015/P(GeV/c) -> av.0.041, see AN-97-39 table 2
228 Float_t fSigmap; //sigma(delta(P)/P) 0.019, 0.01*(fabs((logP(GeV/c)+0.5)/0.7)**3+1.5) -> av.0.017
229 Float_t fSigmaPhi; //sigma(phi) (rad) 0.0050, 0.001*((1-logP(GeV/c))**3+0.3) for P<10 -> av.0.003
230 Float_t fSigmaTheta;//sigma(theta) (rad) 0.0035, 0.001*((1-logP(GeV/c))**3+0.3) for P<10 -> av.0.003
231
232 // Parameters for additional noise hits
233 Float_t fNoise; //number of noise hits 6600/7800 with/without the holes,
234 //7800-holes*1200 for V3.02(TDR), 11000-holes*1200 for V3.04
235 // 10000-holes*? for V3.05 with the half z-length 370 cm, for 350 cm
236 // it should be 5% less, 9500
237 //for the field 0.4 T: ? /6333 with/without the holes
238 //for the field 0.4 T: 8400 for V3.05
239 //for PYTHIA p+p at 14 TeV: 26 for V3.05
240 Float_t fNoiseSlope; //slope parameter (ns) in the time distribution of the add. noise hits: ~exp(-tau/NOISETAU)
241 Float_t fNoiseMeanTof; // mean value of the time of flight for noise from outer regions (ns)
242 Float_t fField; //magnetic field (tesla), 0.2 tesla = 2 kilogauss
243 Float_t fRadLenTPC; //radiation length of the outer wall of TPC, 0.03+0.14/0.03 with/out TRD
244 Float_t fCorrectionTRD; //!=0 px, py on the last row of TPC are corrected
245 // using x, y position on the last layer of TRD, see void correctionTRD()
246 //=0 without the correction
247 Int_t fLastTPCRow; //the number of the last TPC row 111 for V3.05
248 Float_t fRadiusvtxBound; //vertex radius (cm) for selected tracks
249 Int_t fMaxTestTracks; //max.number of test tracks 20
250 //for PYTHIA p+p at 14 TeV: 500
251 Float_t fStep; //space step (cm) along circle, shuold be < the pixel width YP=ZAZOR+2*DY=12.3*0.05=0.615
252 Int_t fMaxPixels; //max.number of pixels involved in the matching procedure, 70000
253 Int_t fMaxAllTracks; //max.number of all tracks including the neutral ones, 65000
254 Int_t fMaxTracks; //max.number of tracks selected for matching (hit on TPC with Rvtx<RVTXBOUND), 15000
255 Int_t fMaxTOFHits; //max.number of TOF hits per event, 35000
256 Float_t fPBound; //tracks/hits with P(GeV/c)<PBOUND do not take into account (kinematical cut)
257
258 protected:
0f4a7374 259
db9ba97f 260
261 ClassDef(AliTOFReconstructioner,1) // Task class for TOF reconstruction
262
263};
264
265#endif // AliTOFRECONSTRUCTIONER_H