TOF geometry updating (addition of AliTOFGeometry)
[u/mrichter/AliRoot.git] / TOF / AliTOFReconstructioner.h
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
25 class AliTOFPad;
26 class AliTOFRecHit;
27 class AliTOFTrack;
28 class TVirtualMC;
29
30 class AliTOFReconstructioner: public TTask {
31
32 public:
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);
45   virtual void  ReadTPCTracks(TFile* /*tpcReconFile*/){};
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); 
57   virtual void  IsInsideThePad(TVirtualMC* vmc, Float_t x, Float_t y, Float_t z, Int_t *nGeom, Float_t& zPad, Float_t& xPad);
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
171 private:
172   TFile   *foutputfile;     //! pointer to output file
173   TNtuple *foutputntuple;   //! pointer to output ntuple
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:
259  
260
261   ClassDef(AliTOFReconstructioner,1)  // Task class for TOF reconstruction
262
263 };
264
265 #endif // AliTOFRECONSTRUCTIONER_H