In clustering code the method name is changed, Bug fixed in AliPMDrechit, Initializat...
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibPulser.h
1 #ifndef ALITPCCALIBPULSER_H
2 #define ALITPCCALIBPULSER_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 //                  Implementation of the TPC pulser calibration                       //
9 //                                                                                     //
10 /////////////////////////////////////////////////////////////////////////////////////////
11
12 #include <TVectorT.h>
13 #include "AliTPCCalibRawBase.h"
14 #include <TObjArray.h>
15 class TH2S;
16 class TH2F;
17 class TTreeSRedirector;
18 class AliTPCCalPad;
19 class AliTPCROC;
20 class AliTPCCalROC;
21 class AliTPCParam;
22 class AliRawReader;
23 class AliTPCRawStream;
24 class AliTPCRawStreamFast;
25 class AliTPCAltroMapping;
26 class TMap;
27
28 struct eventHeaderStruct;
29
30 class AliTPCCalibPulser : public AliTPCCalibRawBase {
31
32 public:
33   AliTPCCalibPulser();
34   AliTPCCalibPulser(const AliTPCCalibPulser &sig);
35   AliTPCCalibPulser(const TMap *config);
36   virtual ~AliTPCCalibPulser();
37   
38   void Reset();
39   
40   AliTPCCalibPulser& operator = (const  AliTPCCalibPulser &source);
41   
42   
43   virtual Int_t Update(const Int_t isector, const Int_t iRow, const Int_t iPad,
44                        const Int_t iTimeBin, const Float_t signal);
45   virtual void Analyse();
46      //
47   AliTPCCalROC* GetCalRocT0 (Int_t sector, Bool_t force=kFALSE);  // get calibration object - sector
48   AliTPCCalROC* GetCalRocQ  (Int_t sector, Bool_t force=kFALSE);  // get calibration object - sector
49   AliTPCCalROC* GetCalRocRMS(Int_t sector, Bool_t force=kFALSE);  // get calibration object - sector
50   AliTPCCalROC* GetCalRocOutliers(Int_t sector, Bool_t force=kFALSE);  // get calibration object - sector
51   
52   const TObjArray* GetCalPadT0()  const { return &fCalRocArrayT0; }      // get calibration object
53   const TObjArray* GetCalPadQ()   const { return &fCalRocArrayQ;  }      // get calibration object
54   const TObjArray* GetCalPadRMS() const{ return &fCalRocArrayRMS;}      // get calibration object
55   const TObjArray* GetCalPadOutliers() const { return &fCalRocArrayOutliers;}      // get calibration object
56   
57   TH2S* GetHistoQ  (Int_t sector, Bool_t force=kFALSE);           // get refernce histogram
58   TH2S* GetHistoT0 (Int_t sector, Bool_t force=kFALSE);           // get refernce histogram
59   TH2S* GetHistoRMS(Int_t sector, Bool_t force=kFALSE);           // get refernce histogram
60   
61   TH2F* GetHistoTSec();                                        // mean abs time distribution histogram
62   
63   Float_t GetMeanTimeSector(Int_t sector) const {return fVMeanTimeSector[sector];}
64   const TVectorF* GetMeanTimeSectorArray() const {return &fVMeanTimeSector;}
65   
66   Short_t GetDebugLevel()     const { return fDebugLevel;    }
67     //
68   void  SetRangeTime (Int_t firstTimeBin, Int_t lastTimeBin) { fFirstTimeBin=firstTimeBin;   fLastTimeBin=lastTimeBin;  } //Set range in which the pulser signal is expected
69     //
70   void  SetRangeRefQ  (Int_t nBins, Float_t xMin, Float_t xMax){ fNbinsQ   = nBins; fXminQ   = xMin; fXmaxQ   = xMax; }   //Set range for Q reference histograms
71   void  SetRangeRefT0 (Int_t nBins, Float_t xMin, Float_t xMax){ fNbinsT0  = nBins; fXminT0  = xMin; fXmaxT0  = xMax; }   //Set range for T0 reference histograms
72   void  SetRangeRefRMS(Int_t nBins, Float_t xMin, Float_t xMax){ fNbinsRMS = nBins; fXminRMS = xMin; fXmaxRMS = xMax; }   //Set range for T0 reference histograms
73   void  SetRangePeakIntegral(Int_t minus, Int_t plus) { fPeakIntMinus=minus; fPeakIntPlus=plus;}
74   
75   void  SetDebugLevel(Short_t debug=1){ fDebugLevel = debug;}
76   
77   void  SetIsZeroSuppressed(Bool_t zs=kTRUE){ fIsZeroSuppressed=zs;}
78   
79   void  SetPedestalDatabase(AliTPCCalPad *pedestalTPC, AliTPCCalPad *padNoiseTPC) {fPedestalTPC = pedestalTPC; fPadNoiseTPC = padNoiseTPC;}
80   void  SetOutliers(AliTPCCalPad *outliers)  {fOutliers = outliers;}
81   
82   Bool_t GetIsZeroSupperssed() const { return fIsZeroSuppressed; }
83
84   Float_t GetPeakIntegralMinus() const {return fPeakIntMinus;}
85   Float_t GetPeakIntegralPlus() const {return fPeakIntPlus;}
86   
87   void Merge(AliTPCCalibPulser *sig);
88   //
89   // Test functions
90   TObjArray* TestBinning();
91   
92 private:
93     // reference histogram ranges
94   Int_t   fNbinsT0;                 //  Number of bins for T0 reference histogram
95   Float_t fXminT0;                  //  xmin   of T0 reference histogram
96   Float_t fXmaxT0;                  //  xmax   of T0 reference histogram
97   Int_t   fNbinsQ;                  //  Number of bins for T0 reference histogram
98   Float_t fXminQ;                   //  xmin   of T0 reference histogram
99   Float_t fXmaxQ;                   //  xmax   of T0 reference histogram
100   Int_t   fNbinsRMS;                //  Number of bins for T0 reference histogram
101   Float_t fXminRMS;                 //  xmin   of T0 reference histogram
102   Float_t fXmaxRMS;                 //  xmax   of T0 reference histogram
103   Int_t   fPeakIntMinus;            //  Peak integral range for COG determination. Bins used before max bin
104   Int_t   fPeakIntPlus;             //  Peak integral range for COG determination. Bins used after max bin
105   
106   Bool_t  fIsZeroSuppressed;        //  if data is zero suppressed
107   
108   Int_t     fLastSector;            //! Last sector processed
109
110   AliTPCParam *fParam;              //! TPC information
111   
112   AliTPCCalPad *fPedestalTPC;       //! Pedestal Information
113   AliTPCCalPad *fPadNoiseTPC;       //! Pad noise Information whole TPC
114   AliTPCCalPad *fOutliers;          //! Outlier information. Those will not be used for calculating the T0
115   AliTPCCalROC *fPedestalROC;       //! Pedestal Information for current ROC
116   AliTPCCalROC *fPadNoiseROC;       //! Pad noise Information for current ROC
117   
118   TObjArray fCalRocArrayT0;         //  Array of AliTPCCalROC class for Time0 calibration
119   TObjArray fCalRocArrayQ;          //  Array of AliTPCCalROC class for Charge calibration
120   TObjArray fCalRocArrayRMS;        //  Array of AliTPCCalROC class for signal width calibration
121   TObjArray fCalRocArrayOutliers;  //  Array of AliTPCCalROC class for signal outliers
122   
123   TObjArray fHistoQArray;           //  Calibration histograms for Charge distribution
124   TObjArray fHistoT0Array;          //  Calibration histograms for Time0  distribution
125   TObjArray fHistoRMSArray;         //  Calibration histograms for signal width distribution
126   
127   TH2F *fHMeanTimeSector;           //  Timing distribution per sector
128   TVectorF  fVMeanTimeSector;       //  Mean time per sector from analysis of fHMeanTimeSector
129   
130   TObjArray fPadTimesArrayEvent;    //! Pad Times for the event, before mean Time0 corrections
131   TObjArray fPadQArrayEvent;        //! Charge for the event, only needed for debugging streamer
132   TObjArray fPadRMSArrayEvent;      //! Signal width for the event, only needed for debugging streamer
133   TObjArray fPadPedestalArrayEvent; //! Signal width for the event, only needed for debugging streamer
134   
135   Int_t     fCurrentChannel;         //! current channel processed
136   Int_t     fCurrentSector;          //! current sector processed
137   Int_t     fCurrentRow;             //! current row processed
138   Int_t     fCurrentPad;             //! current pad processed
139   Float_t   fMaxPadSignal;           //! maximum bin of current pad
140   Int_t     fMaxTimeBin;             //! time bin with maximum value
141   TVectorF  fPadSignal;              //! signal of current Pad
142   Float_t   fPadPedestal;            //! Pedestal Value of current pad
143   Float_t   fPadNoise;               //! Noise Value of current pad
144   
145   TVectorF  fVTime0Offset;          //!  Time0 Offset from preprocessing for each sector;
146   TVectorF  fVTime0OffsetCounter;   //!  Time0 Offset from preprocessing for each sector;
147   
148   
149   void   FindPedestal(Float_t part=.6);
150   void FindPulserSignal(TVectorD &param, Float_t &qSum);
151   
152   TH2S* GetHisto(Int_t sector, TObjArray *arr,
153                  Int_t nbinsY, Float_t ymin, Float_t ymax,
154                  const Char_t *type, Bool_t force);
155   
156   
157   AliTPCCalROC* GetCalRoc(Int_t sector, TObjArray* arr, Bool_t force) const;
158   
159   TVectorF* GetPadTimesEvent(Int_t sector, Bool_t force=kFALSE);
160   
161   Bool_t IsEdgePad(Int_t sector, Int_t row, Int_t pad);
162   
163   void ResetPad();
164   void ProcessPad();
165   
166   
167   //debug
168   TVectorF* GetPadInfoEvent(Int_t sector, TObjArray *arr, Bool_t force=kFALSE);
169   TVectorF* GetPadQEvent(Int_t sector, Bool_t force=kFALSE);
170   TVectorF* GetPadRMSEvent(Int_t sector, Bool_t force=kFALSE);
171   TVectorF* GetPadPedestalEvent(Int_t sector, Bool_t force=kFALSE);
172
173 protected:
174   virtual void ResetEvent();
175   virtual void EndEvent();
176   
177   
178   ClassDef(AliTPCCalibPulser,5)           //Implementation of the TPC pulser calibration
179 };
180
181
182
183 #endif
184