488df13cdb64e4353d48a7786d0ecfae71b4f617
[u/mrichter/AliRoot.git] / TPC / Calib / AliTPCCalibKr.h
1 #ifndef ALITPCCALIBKR_H
2 #define ALITPCCALIBKR_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 #include <TObject.h>
7 #include <TObjArray.h>
8 #include <TChain.h>
9 #include <TTree.h>
10 #include <TClonesArray.h>
11
12 #include "AliTPCclusterKr.h"
13
14 class TH3F;
15 class TH1D;
16
17 class AliTPCCalibKr : public TObject {
18
19 public:
20   AliTPCCalibKr();
21   AliTPCCalibKr(const AliTPCCalibKr&); // copy constructor
22   virtual ~AliTPCCalibKr();
23
24   AliTPCCalibKr& operator=(const AliTPCCalibKr&); 
25
26   //
27   void Init();
28   Bool_t Process(AliTPCclusterKr *cluster);
29   Bool_t Accept(AliTPCclusterKr *cluster);
30   Bool_t Update(AliTPCclusterKr *cluster);
31   TH3F*  CreateHisto(Int_t chamber);
32
33   const TObjArray* GetHistoKrArray () {return &fHistoKrArray;}  // get calibration object
34   TH3F* GetHistoKr(Int_t sector) const;                         // get refernce histogram
35
36   Bool_t IsCSide(Int_t chamber);
37   Bool_t IsIROC(Int_t chamber);
38
39   void Analyse();
40   static TH1D* ProjectHisto(TH3F* histo3D, const char* name = "_pz", Int_t firstxbin = 0, Int_t lastxbin = 0, Int_t firstybin = 0, Int_t lastybin = 0);
41
42   void SetASide(Bool_t bA = kTRUE) {fASide = bA;} // fill histo only A TPC side
43   void SetBSide(Bool_t bC = kTRUE) {fCSide = bC;} // fill histo only C TPC side
44
45   //Merge output objects (needed by PROOF)
46   virtual Long64_t Merge(TCollection* list);
47
48   // Setters
49   void SetADCOverClustSizeRange(Float_t min=0.0,Float_t max=1.0e9)   {fADCOverClustSizeMin = min ; fADCOverClustSizeMax = max;  }
50   void SetMaxADCOverClustADCRange(Float_t min=0.0,Float_t max=1.0e9) {fMaxADCOverClustADCMin = min ; fMaxADCOverClustADCMax = max;  }
51   void SetTimeRange(Float_t min=0.0, Float_t max=1.0e9)              {fTimeMin = min ; fTimeMax = max; }
52   void SetClustSizeRange(Float_t min=0.0, Float_t max=1.0e9)         {fClustSizeMin = min ; fClustSizeMax = max; }
53
54   void SetTimebinRmsMin(Float_t iroc=0.0,Float_t oroc=0.0)           {fTimebinRmsIrocMin = iroc ; fTimebinRmsOrocMin = oroc; }
55   void SetPadRmsMin(Float_t iroc=0.0,Float_t oroc=0.0)               {fPadRmsIrocMin = iroc ; fPadRmsOrocMin = oroc; }
56   void SetRowRmsMin(Float_t iroc=0.0,Float_t oroc=0.0)               {fRowRmsIrocMin = iroc ; fRowRmsOrocMin = oroc; }
57   void SetClusterPadSize1DMax(Short_t iroc=200,Short_t oroc=200) {fClusterPadSize1DIrocMax = iroc ; fClusterPadSize1DOrocMax = oroc; }
58   void SetCurveCoefficient(Float_t iroc=1.0e9,Float_t oroc=1.0e9)    {fCurveCoefficientIroc = iroc ; fCurveCoefficientOroc = oroc; }
59
60   void SetIrocHistogram(Int_t nbins=200,Float_t min=100,Float_t max=6000) {fIrocHistogramNbins = nbins ; fIrocHistogramMin = min ; fIrocHistogramMax = max; }
61   void SetOrocHistogram(Int_t nbins=200,Float_t min=100,Float_t max=5500) {fOrocHistogramNbins = nbins ; fOrocHistogramMin = min ; fOrocHistogramMax = max; }
62
63   void SetRadius(UInt_t row=0, UInt_t pad=0) {fRowRadius = row ; fPadRadius = pad; }
64   void SetStep(UInt_t row=1, UInt_t pad=1) {fRowStep = (row>=1?row:1) ; fPadStep = (pad>=1?pad:1) ; }
65
66 private:
67
68   Bool_t fASide;              //! Only A side
69   Bool_t fCSide;              //! Only C side 
70   TObjArray fHistoKrArray;    //  Calibration histograms for Kr distribution
71
72   Float_t fADCOverClustSizeMin; // min ADCcluster over Cluster size ratio
73   Float_t fADCOverClustSizeMax; // max ADCcluster over Cluster size ratio
74   Float_t fMaxADCOverClustADCMin; // min MaxADC over ADCcluster ratio 
75   Float_t fMaxADCOverClustADCMax; // max MaxADC over ADCcluster ratio
76   Float_t fTimeMin; // min time bin for MaxADC
77   Float_t fTimeMax; // max time bin for MaxADC
78   Float_t fClustSizeMin; // min cluster size
79   Float_t fClustSizeMax; // max cluster size
80
81   Float_t fTimebinRmsIrocMin; // min Timebin RMS for IROCs
82   Float_t fPadRmsIrocMin; // min Pad RMS for IROCs
83   Float_t fRowRmsIrocMin; // min Row RMS for IROCs
84   Short_t fClusterPadSize1DIrocMax; // max size of cluster in pad dir. for IROCs 
85   Float_t fCurveCoefficientIroc; // A coefficient in curve function for IROCs
86
87   Float_t fTimebinRmsOrocMin; // min Timebin RMS for OROCs
88   Float_t fPadRmsOrocMin; // min Pad RMS for OROCs
89   Float_t fRowRmsOrocMin; // min Row RMS for OROCs
90   Short_t fClusterPadSize1DOrocMax; // max size of cluster in pad dir. for OROCs 
91   Float_t fCurveCoefficientOroc; // A coefficient in curve function for OROCs
92
93   Float_t fIrocHistogramMin; // minimal range of histogram for IROCs
94   Float_t fIrocHistogramMax; // maximal range of histogram for IROCs
95   Int_t   fIrocHistogramNbins; // number of bins in IROC histogram
96   Float_t fOrocHistogramMin; // minimal range of histogram for OROCs
97   Float_t fOrocHistogramMax; // maximal range of histogram for OROCs
98   Int_t   fOrocHistogramNbins; // number of bins in OROC histogram
99
100   UInt_t fRowRadius; // window size around pad +/-; set to 0 for pad-by-pad calib
101   UInt_t fPadRadius; // window size around pad +/-; set to 0 for pad-by-pad calib
102   UInt_t fRowStep; // step size; set to 1 for finest granularity
103   UInt_t fPadStep; // step size; set to 1 for finest granularity
104
105
106
107 public:
108   ClassDef(AliTPCCalibKr, 4)  // Implementation of the TPC krypton calibration
109 };
110
111 #endif
112