updates for 1/pT correction
[u/mrichter/AliRoot.git] / TPC / Calib / AliTPCcalibGainMult.h
1 #ifndef ALITPCCALIBGAINMULT_H
2 #define ALITPCCALIBGAINMULT_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 #include "AliTPCcalibBase.h"
8 #include "AliTPCCalPad.h"
9 #include "TH3F.h"
10 #include "TF1.h"
11 #include "THnSparse.h"
12 #include "THn.h"
13 #include "TMatrixD.h"
14 #include "TVectorD.h"
15 class TH1F;
16 class TList;
17 class AliESDEvent;
18 class AliESDtrack;
19 class AliTPCseed;
20
21 #include "TTreeStream.h"
22
23
24 class AliTPCcalibGainMult:public AliTPCcalibBase {
25 public:
26   AliTPCcalibGainMult(); 
27   AliTPCcalibGainMult(const Text_t *name, const Text_t *title);
28   virtual ~AliTPCcalibGainMult();
29   void SetBBParam(TVectorD * param) {fBBParam=param;}
30   //  virtual void Terminate();  
31   //
32   virtual void           Process(AliESDEvent *event);
33   virtual void           ProcessV0s(AliESDEvent *event);
34   virtual void           ProcessCosmic(const AliESDEvent *event);
35   virtual void           ProcessKinks(const AliESDEvent *event);
36   virtual void           ProcessTOF(const AliESDEvent *event);  
37   virtual void           DumpHPT(const AliESDEvent *event);
38   virtual Long64_t       Merge(TCollection *li);
39   virtual void           Analyze();
40   void                   DumpTrack(AliESDtrack * track, AliESDfriendTrack *ftrack, AliTPCseed * seed, Int_t index);
41   //
42   TH1F   *          GetHistNTracks() const {return fHistNTracks;};
43   TH1F   *          GetHistClusterShape() const {return fHistClusterShape;};
44   TH3F   *          GetHistQA() const {return fHistQA;};
45   //
46   THnSparseF *      GetHistGainSector() const {return fHistGainSector;};
47   THnSparseF *      GetHistPadEqual() const {return fHistPadEqual;};
48   THnSparseF *      GetHistGainMult() const {return fHistGainMult;};  
49   THnF       *      GetHistTopology() const {return fHistTopology;};
50   //
51   THnF       *      GetHistTopolRelMax() const { return fHistTopolRelMax;};
52   THnF       *      GetHistTopolRelTot() const { return fHistTopolRelTot;};
53   THnF       *      GetHistTopolAbsMax() const { return fHistTopolAbsMax;};
54   THnF       *      GetHistTopolAbsTot() const { return fHistTopolAbsTot;};
55   //
56   THnSparseF * GetHistdEdxMap() const { return fHistdEdxMap;}      // 4D dedx histogram
57   THnSparseF * GetHistdEdxMax() const { return fHistdEdxMax;}      // 4D dedx histogram
58   THnSparseF * GetHistdEdxTot() const { return fHistdEdxTot;}      // 4D dedx histogram
59   TTree *      GetdEdxTree() const {return fdEdxTree;}         // tree for the later minimization
60
61   TGraphErrors* GetGainPerChamber(Int_t padRegion=1, Bool_t plotQA=kFALSE);
62   TGraphErrors* GetGainPerChamberRobust(Int_t padRegion=1, Bool_t plotQA=kFALSE);
63   //
64   void SetMIPvalue(Float_t mip){fMIP = mip;};
65   void SetLowerTrunc(Float_t lowerTrunc){fLowerTrunc = lowerTrunc;};
66   void SetUpperTrunc(Float_t upperTrunc){fUpperTrunc = upperTrunc;};
67   void SetUseMax(Bool_t useMax){fUseMax = useMax;};
68   //
69   void SetCutMinCrossRows(Int_t crossRows){fCutCrossRows = crossRows;};
70   void SetCutMaxEta(Float_t maxEta){fCutEtaWindow = maxEta;};
71   void SetCutRequireITSrefit(Bool_t requireItsRefit = kFALSE){fCutRequireITSrefit = requireItsRefit;};
72   void SetCutMaxDcaXY(Float_t maxXY){fCutMaxDcaXY = maxXY;}; 
73   void SetCutMaxDcaZ(Float_t maxZ){fCutMaxDcaZ = maxZ;}; 
74   //
75   void SetMinMomentumMIP(Float_t minMom = 0.4){fMinMomentumMIP = minMom;};
76   void SetMaxMomentumMIP(Float_t maxMom = 0.6){fMaxMomentumMIP = maxMom;};
77   void SetAlephParameters(Float_t * parameters){for(Int_t j=0;j<5;j++) fAlephParameters[j] = parameters[j];};
78   //
79   //
80   void     Process(AliESDtrack *track, Int_t runNo=-1){AliTPCcalibBase::Process(track,runNo);};
81   void     Process(AliTPCseed *track){return AliTPCcalibBase::Process(track);}
82   //
83   void     MakeLookup(THnSparse * hist, Char_t * outputFile);
84   //
85   void     UpdateGainMap();
86   void     UpdateClusterParam();
87
88   Double_t GetEntries() const {return fHistGainSector->GetEntries();}
89
90   static void SetMergeEntriesCut(Double_t c) {fgMergeEntriesCut=c;}
91
92 private:
93   static Double_t fgMergeEntriesCut;  //maximal number of entries for merging  -can be modified via setter
94
95   //
96   // parameter specifications
97   //
98   Float_t fMIP;                  // MIP position to be in fMIP
99   Float_t fLowerTrunc;           // lower truncation for dEdx
100   Float_t fUpperTrunc;           // upper truncation for dEdx
101   //
102   Bool_t fUseMax;                 // flag if Qmax or Qtot should be used
103   //
104   // track cuts
105   //
106   Int_t   fCutCrossRows;                // minimum number of crossed rows 
107   Float_t fCutEtaWindow;                // maximum eta of tracks
108   Bool_t  fCutRequireITSrefit;          // if ITSrefit should be required (dangerous in cpass0)
109   Float_t fCutMaxDcaXY;                 // max dca_xy (only TPConly resolution is guaranteed!)
110   Float_t fCutMaxDcaZ;                  // max dca_z  (dangerous if vDrift is not calibrated)
111   //
112   // definition of MIP window
113   //
114   Float_t fMinMomentumMIP;              // minimum momentum of MIP region, e.g. 400 MeV
115   Float_t fMaxMomentumMIP;              // maximum momentum of MIP region, e.g. 600 MeV
116   Float_t fAlephParameters[5];          // parameters for equalization in MIP window, parameter set should be =1 at MIP
117   //
118   // histograms
119   //
120   TH1F  *fHistNTracks;            //  histogram showing number of ESD tracks per event
121   TH1F  *fHistClusterShape;       //  histogram to check the cluster shape
122   TH3F  *fHistQA;                 //  dE/dx histogram showing the final spectrum
123   //
124   //
125   THnSparseF * fHistGainSector;   //  histogram which shows MIP peak for each of the 3x36 sectors (pad region)
126   THnSparseF * fHistPadEqual;     //  histogram for the equalization of the gain in the different pad regions -> pass0
127   THnSparseF * fHistGainMult;     //  histogram which shows decrease of MIP signal as a function
128   THnF       * fHistTopology;     //  histogram for topological corrections of signal - dip angle theta and curvature (1/pT)
129   //
130   THnF       * fHistTopolRelMax;  //  histogram for topological corrections  (theta,1/pT) of Qmax for each pad region relative to each other
131   THnF       * fHistTopolRelTot;  //  histogram for topological corrections  (theta,1/pT) of Qtot for each pad region relative to each other
132   THnF       * fHistTopolAbsMax;  //  histogram for topological corrections  (theta,1/pT) of Qmax for each pad region relative to each other
133   THnF       * fHistTopolAbsTot;  //  histogram for topological corrections  (theta,1/pT) of Qtot for each pad region relative to each other
134   //
135   TMatrixD *fPIDMatrix;           //! custom PID matrix
136   //
137   THnSparseF * fHistdEdxMap;      // 4D dedx histogram - per sector/phi
138   THnSparseF * fHistdEdxMax;      // 5D dedx histogram - per 1/dedx, tan(theta), tan(phi), mult, pad-type
139   THnSparseF * fHistdEdxTot;      // 5D dedx histogram - per 1/dedx, tan(theta), tan(phi), mult, pad-type
140   TTree *      fdEdxTree;         // tree for the later minimization
141   TVectorD    *fBBParam;          // BetheBloch parameterization used for the dedx expected calculation
142   //
143   AliTPCcalibGainMult(const AliTPCcalibGainMult&); 
144   AliTPCcalibGainMult& operator=(const AliTPCcalibGainMult&); 
145
146   ClassDef(AliTPCcalibGainMult, 4); 
147 };
148
149 #endif
150
151