]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibraFit.h
Procedures for half chamber status (Julian)
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibraFit.h
index 31cb3e843a26facaf9d8580dc81ea9b58ef058b9..2754f08a952b1856ccc6fbf6363dcd1c69932dcc 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef ROOT_TObject
-#  include <TObject.h>
+# include <TObject.h>
 #endif
+#ifndef ROOT_TVectorD
+# include <TVectorD.h>
+#endif 
 
 class TTree;
 class TProfile2D;
@@ -44,96 +47,97 @@ class AliTRDCalibraFit : public TObject {
   static AliTRDCalibraFit *Instance();
   static void Terminate();
   static void Destroy();
+  void DestroyDebugStreamer();
 
   AliTRDCalibraFit(const AliTRDCalibraFit &c);
   AliTRDCalibraFit &operator=(const AliTRDCalibraFit &) { return *this; }
 
-       // Function for integration range of the charge 
-       void     RangeChargeIntegration(Float_t vdrift, Float_t t0, Int_t &begin, Int_t &peak, Int_t &end);
+  // Function for integration range of the charge 
+  void     RangeChargeIntegration(Float_t vdrift, Float_t t0, Int_t &begin, Int_t &peak, Int_t &end) const;
   
-       // Functions fit for CH
-       Bool_t   AnalyseCH(TH2I *ch);
-       Bool_t   AnalyseCH(AliTRDCalibraVector *calvect);
-       
-       // Functions fit for PH       
-       Bool_t   AnalysePH(TProfile2D *ph);
-       Bool_t   AnalysePH(AliTRDCalibraVector *calvect);
-       
-       // Functions fit for PRF
-       Bool_t   AnalysePRF(TProfile2D *prf);
-       Bool_t   AnalysePRF(AliTRDCalibraVector *calvect);
-       
-       Bool_t   AnalysePRFMarianFit(TProfile2D *prf);
-       Bool_t   AnalysePRFMarianFit(AliTRDCalibraVector *calvect);
-       
-       // Functions fit for vdrift/lorentzangle
-       Bool_t   AnalyseLinearFitters(AliTRDCalibraVdriftLinearFit *calivdli);
-       
-       // Pad Calibration
-       Bool_t   SetModeCalibration(const char *name, Int_t i);
-       
-       //Reset Function
-       void     ResetVectorFit();
-       
-       // Some functions
-       Double_t *CalculPolynomeLagrange2(Double_t *x, Double_t *y) const;
-       Double_t *CalculPolynomeLagrange3(Double_t *x, Double_t *y) const;
-       Double_t *CalculPolynomeLagrange4(Double_t *x, Double_t *y) const;
-       
-       // Fill the database
-       AliTRDCalDet *CreateDetObjectVdrift(TObjArray *vectorFit, Bool_t perdetector = kFALSE);
-       AliTRDCalDet *CreateDetObjectGain(TObjArray *vectorFit, Double_t scaleFitFactor = 0.02431, Bool_t perdetector = kTRUE);
-       AliTRDCalDet *CreateDetObjectT0(TObjArray *vectorFit, Bool_t perdetector = kFALSE);
-       AliTRDCalDet *CreateDetObjectLorentzAngle(TObjArray *vectorFit);
-       
-       TObject      *CreatePadObjectGain(TObjArray *vectorFit = 0, Double_t scaleFitFactor = 1.0, AliTRDCalDet *detobject = 0);
-       TObject      *CreatePadObjectVdrift(TObjArray *vectorFit = 0, AliTRDCalDet *detobject = 0);
-       TObject      *CreatePadObjectT0(TObjArray *vectorFit = 0, AliTRDCalDet *detobject = 0);
-       TObject      *CreatePadObjectPRF(TObjArray *vectorFit);
-       
-       // Outliers stats
-       AliTRDCalDet *MakeOutliersStatDet(TObjArray *vectorFit, const char *name, Double_t &mean);
-       TObject      *MakeOutliersStatPad(TObjArray *vectorFit, const char *name, Double_t &mean);
-       
-       
-       // Correct the error
-       TH1F   *CorrectTheError(TGraphErrors *hist);
+  // Functions fit for CH
+  Bool_t   AnalyseCH(const TH2I *ch);
+  Bool_t   AnalyseCH(AliTRDCalibraVector *calvect);
+  
+  // Functions fit for PH       
+  Bool_t   AnalysePH(const TProfile2D *ph);
+  Bool_t   AnalysePH(AliTRDCalibraVector *calvect);
+  
+  // Functions fit for PRF
+  Bool_t   AnalysePRF(const TProfile2D *prf);
+  Bool_t   AnalysePRF(AliTRDCalibraVector *calvect);
+  
+  Bool_t   AnalysePRFMarianFit(const TProfile2D *prf);
+  Bool_t   AnalysePRFMarianFit(AliTRDCalibraVector *calvect);
+  
+  // Functions fit for vdrift/lorentzangle
+  Bool_t   AnalyseLinearFitters(AliTRDCalibraVdriftLinearFit *calivdli);
+  
+  // Pad Calibration
+  Bool_t   SetModeCalibration(const char *name, Int_t i);
+  
+  //Reset Function
+  void     ResetVectorFit();
+  
+  // Some functions
+  Double_t *CalculPolynomeLagrange2(const Double_t *x, const Double_t *y) const;
+  Double_t *CalculPolynomeLagrange3(const Double_t *x, const Double_t *y) const;
+  Double_t *CalculPolynomeLagrange4(const Double_t *x, const Double_t *y) const;
+  
+  // Fill the database
+  void         RemoveOutliers(Int_t type, Bool_t perdetector = kFALSE);
+  void         RemoveOutliers2(Bool_t perdetector = kFALSE);
+  void         PutMeanValueOtherVectorFit(Int_t ofwhat = 1, Bool_t perdetector = kFALSE);
+  void         PutMeanValueOtherVectorFit2(Int_t ofwhat = 1, Bool_t perdetector = kFALSE);
+  AliTRDCalDet *CreateDetObjectVdrift(const TObjArray *vectorFit, Bool_t perdetector = kFALSE);
+  AliTRDCalDet *CreateDetObjectGain(const TObjArray *vectorFit, Bool_t meanOtherBefore=kTRUE, Double_t scaleFitFactor = 0.02431, Bool_t perdetector = kTRUE);
+  AliTRDCalDet *CreateDetObjectT0(const TObjArray *vectorFit, Bool_t perdetector = kFALSE);
+  AliTRDCalDet *CreateDetObjectLorentzAngle(const TObjArray *vectorFit);
+  
+  TObject      *CreatePadObjectGain(const TObjArray *vectorFit = 0, Double_t scaleFitFactor = 1.0, const AliTRDCalDet *detobject = 0);
+  TObject      *CreatePadObjectVdrift(const TObjArray *vectorFit = 0, const AliTRDCalDet *detobject = 0);
+  TObject      *CreatePadObjectT0(const TObjArray *vectorFit = 0, const AliTRDCalDet *detobject = 0);
+  TObject      *CreatePadObjectPRF(const TObjArray *vectorFit);
+  
+  // Outliers stats
+  AliTRDCalDet *MakeOutliersStatDet(const TObjArray *vectorFit, const char *name, Double_t &mean);
+  TObject      *MakeOutliersStatPad(const TObjArray *vectorFit, const char *name, Double_t &mean);
        
-       //
-       // Set or Get the variables
-       //
+  //
+  // Set or Get the variables
+  //
+  
+  // Fit
+  void     ChooseMethod(Short_t method)                              { fMethod = method;               }
+  void     SetBeginFitCharge(Float_t beginFitCharge);   
+  void     SetPeriodeFitPH(Int_t periodeFitPH);   
+  void     SetTakeTheMaxPH()                                         { fTakeTheMaxPH   = kTRUE;        }
+  void     SetT0Shift0(Float_t t0Shift0); 
+  void     SetT0Shift1(Float_t t0Shift1); 
+  void     SetRangeFitPRF(Float_t rangeFitPRF);     
+  void     SetAccCDB()                                               { fAccCDB         = kTRUE;        }
+  void     SetMinEntries(Int_t minEntries);                    
+  void     SetRebin(Short_t rebin);
+  
+  Int_t    GetPeriodeFitPH() const                                   { return fFitPHPeriode;           }
+  Bool_t   GetTakeTheMaxPH() const                                   { return fTakeTheMaxPH;           }
+  Float_t  GetT0Shift0() const                                       { return fT0Shift0;               }
+  Float_t  GetT0Shift1() const                                       { return fT0Shift1;               }
+  Float_t  GetRangeFitPRF() const                                    { return fRangeFitPRF;            }
+  Bool_t   GetAccCDB() const                                         { return fAccCDB;                 }
+  Int_t    GetMinEntries() const                                     { return fMinEntries;             }
+  Short_t  GetRebin() const                                          { return fRebin;                  }
+  
+  // Statistics
+  Int_t    GetNumberFit() const                                      { return fNumberFit;              }
+  Int_t    GetNumberFitSuccess() const                               { return fNumberFitSuccess;       }
+  Int_t    GetNumberEnt() const                                      { return fNumberEnt;              }
+  Double_t GetStatisticMean() const                                  { return fStatisticMean;          }
+  
        
-       // Fit
-       void     ChooseMethod(Short_t method)                              { fMethod = method;               }
-       void     SetBeginFitCharge(Float_t beginFitCharge);   
-       void     SetPeriodeFitPH(Int_t periodeFitPH);   
-       void     SetTakeTheMaxPH()                                         { fTakeTheMaxPH   = kTRUE;        }
-       void     SetT0Shift0(Float_t t0Shift0); 
-       void     SetT0Shift1(Float_t t0Shift1); 
-       void     SetRangeFitPRF(Float_t rangeFitPRF);     
-       void     SetAccCDB()                                               { fAccCDB         = kTRUE;        }
-       void     SetMinEntries(Int_t minEntries);                    
-       void     SetRebin(Short_t rebin);
-       
-       Int_t    GetPeriodeFitPH() const                                   { return fFitPHPeriode;           }
-       Bool_t   GetTakeTheMaxPH() const                                   { return fTakeTheMaxPH;           }
-       Float_t  GetT0Shift0() const                                       { return fT0Shift0;               }
-       Float_t  GetT0Shift1() const                                       { return fT0Shift1;               }
-       Float_t  GetRangeFitPRF() const                                    { return fRangeFitPRF;            }
-       Bool_t   GetAccCDB() const                                         { return fAccCDB;                 }
-       Int_t    GetMinEntries() const                                     { return fMinEntries;             }
-       Short_t  GetRebin() const                                          { return fRebin;                  }
-       
-       // Statistics
-       Int_t    GetNumberFit() const                                      { return fNumberFit;              }
-       Int_t    GetNumberFitSuccess() const                               { return fNumberFitSuccess;       }
-       Int_t    GetNumberEnt() const                                      { return fNumberEnt;              }
-       Double_t GetStatisticMean() const                                  { return fStatisticMean;          }
-       
-       
-       // Debug
-       void     SetDebugLevel(Short_t level)                              { fDebugLevel = level;            }
-       void     SetDet(Int_t iLayer, Int_t iStack, Int_t iSector)         { fDet[0]  = iLayer; 
+  // Debug
+  void     SetDebugLevel(Short_t level)                              { fDebugLevel = level;            }
+  void     SetDet(Int_t iLayer, Int_t iStack, Int_t iSector)         { fDet[0]  = iLayer; 
                                                                             fDet[1]  = iStack; 
                                                                             fDet[2]  = iSector;             }
        void     SetFitVoir(Int_t fitVoir)                                 { fFitVoir = fitVoir;             }
@@ -148,12 +152,43 @@ class AliTRDCalibraFit : public TObject {
        TObjArray  GetVectorFit2() const                                   { return fVectorFit2;             }
        
        // AliTRDCalibraMode
-       AliTRDCalibraMode *GetCalibraMode()                                { return fCalibraMode;            }
+       AliTRDCalibraMode *GetCalibraMode() const                          { return fCalibraMode;            }
        
+       class AliTRDFitInfo : public TObject {
+        
+       public:
+        
+        AliTRDFitInfo()
+          :TObject()
+          ,fCoef(0x0)
+          ,fDetector(-1)                                   { }    
+        AliTRDFitInfo(const AliTRDFitInfo &i) 
+          :TObject(i)
+          ,fCoef(0x0)
+          ,fDetector(-1)                                   { }
+        AliTRDFitInfo &operator=(const AliTRDFitInfo&)     { return *this;            }
+        virtual ~AliTRDFitInfo()                           { if(fCoef) { delete [] fCoef;} }
+        
+        void      SetCoef(Float_t *coef)             { fCoef = coef;            }
+        void      SetDetector(Int_t detector)              { fDetector = detector;    }
+        
+        Float_t  *GetCoef() const                          { return fCoef;            }
+        Int_t     GetDetector() const                      { return fDetector;        }
+        
+       protected:
+        
+        Float_t  *fCoef;                        // Relative coefficient for each group of the detector
+        Int_t     fDetector;                    // Detector number
+        
+       };
+
+       // Fit function
+       void     FitLagrangePoly(TH1* projPH);
+
  protected:
        
        // Geometry
-       AliTRDgeometry  *fGeo;                    //! The TRD geometry
+       AliTRDgeometry  *fGeo;               //! The TRD geometry
        
        
        Int_t        fNumberOfBinsExpected;  // Number of bins expected  
@@ -200,8 +235,9 @@ class AliTRDCalibraFit : public TObject {
        Int_t    fDect2;                  // Last calibration group that will be called to be maybe fitted
        Double_t fScaleFitFactor;         // Scale factor of the fit results for the gain
        Int_t    fEntriesCurrent;         // Entries in the current histo
-       Int_t    fCountDet;               // Current detector
+       Int_t    fCountDet;               // Current detector (or first in the group)
        Int_t    fCount;                  // When the next detector comes
+       Int_t    fNbDet;                  // Number of detector in the group
        
        // Current calib object
        AliTRDCalDet *fCalDet;            // Current calib object
@@ -214,34 +250,6 @@ class AliTRDCalibraFit : public TObject {
        Float_t *fCurrentCoefDetector;     // Current values for the detector 
        Float_t *fCurrentCoefDetector2;    // Current values for the detector   
        
-       class AliTRDFitInfo : public TObject {
-        
-       public:
-        
-        AliTRDFitInfo()
-          :TObject()
-          ,fCoef(0x0)
-          ,fDetector(-1)                                   { }    
-        AliTRDFitInfo(const AliTRDFitInfo &i) 
-          :TObject(i)
-          ,fCoef(0x0)
-          ,fDetector(-1)                                   { }
-        AliTRDFitInfo &operator=(const AliTRDFitInfo&)     { return *this;            }
-        virtual ~AliTRDFitInfo()                           { if(fCoef) { delete [] fCoef;} }
-        
-        void      SetCoef(Float_t *coef)                   { fCoef = coef;            }
-        void      SetDetector(Int_t detector)              { fDetector = detector;    }
-        
-        Float_t  *GetCoef() const                          { return fCoef;            }
-        Int_t     GetDetector() const                      { return fDetector;        }
-        
-       protected:
-        
-        Float_t  *fCoef;                        // Relative coefficient for each group of the detector
-        Int_t     fDetector;                    // Detector number
-    
-       };
-       
        TObjArray       fVectorFit;            // Vectors to fit
        TObjArray       fVectorFit2;           // Vectors to fit
        
@@ -258,18 +266,18 @@ class AliTRDCalibraFit : public TObject {
        
        // Not enough Statistics
        Bool_t   NotEnoughStatisticCH(Int_t idect);
-       Bool_t   NotEnoughStatisticPH(Int_t idect);
+       Bool_t   NotEnoughStatisticPH(Int_t idect,Double_t nentries);
        Bool_t   NotEnoughStatisticPRF(Int_t idect);
        Bool_t   NotEnoughStatisticLinearFitter();
        
        // Fill Infos Fit
        Bool_t   FillInfosFitCH(Int_t idect);
-       Bool_t   FillInfosFitPH(Int_t idect);
+       Bool_t   FillInfosFitPH(Int_t idect,Double_t nentries);
        Bool_t   FillInfosFitPRF(Int_t idect);
        Bool_t   FillInfosFitLinearFitter();
        
        void     FillFillCH(Int_t idect);
-       void     FillFillPH(Int_t idect);
+       void     FillFillPH(Int_t idect,Double_t nentries);
        void     FillFillPRF(Int_t idect);
        void     FillFillLinearFitter();
        
@@ -309,10 +317,9 @@ class AliTRDCalibraFit : public TObject {
        Bool_t   FitPRFGausMI(Double_t *arraye,Double_t *arraym,Double_t *arrayme,Int_t nBins,Float_t xMin,Float_t xMax);
        Double_t FitGausMI(Double_t *arraye,Double_t *arraym,Double_t *arrayme,Int_t nBins, Float_t xMin,Float_t xMax,TVectorD *param, Bool_t kError= kTRUE);
        void     FitPente(TH1 *projPH);
-       void     FitLagrangePoly(TH1* projPH);
        void     FitTnpRange(Double_t *arraye,Double_t *arraym,Double_t *arrayme,Int_t nbg,Int_t nybins);
-       TH1I    *ReBin(TH1I *hist) const;
-       TH1F    *ReBin(TH1F *hist) const;
+       TH1I    *ReBin(const TH1I *hist) const;
+       TH1F    *ReBin(const TH1F *hist) const;
        
        // Some basic geometry function
        virtual Int_t    GetLayer(Int_t d) const;
@@ -326,15 +333,15 @@ class AliTRDCalibraFit : public TObject {
        
  private:
        
-       static  Double_t PH(Double_t *x, Double_t *par);
-       static  Double_t AsymmGauss(Double_t *x, Double_t *par);
-       static  Double_t FuncLandauGaus(Double_t *x, Double_t *par);
-       static  Double_t LanGauFun(Double_t *x, Double_t *par);
-       TF1     *LanGauFit(TH1 *his, Double_t *fitrange, Double_t *startvalues
-                         , Double_t *parlimitslo, Double_t *parlimitshi, Double_t *fitparams
+       static  Double_t PH(const Double_t *x, const Double_t *par);
+       static  Double_t AsymmGauss(const Double_t *x, const Double_t *par);
+       static  Double_t FuncLandauGaus(const Double_t *x, const Double_t *par);
+       static  Double_t LanGauFun(const Double_t *x, const Double_t *par);
+       TF1     *LanGauFit(TH1 *his, const Double_t *fitrange, const Double_t *startvalues
+                         , const Double_t *parlimitslo, const Double_t *parlimitshi, Double_t *fitparams
                          , Double_t *fiterrors, Double_t *chiSqr, Int_t *ndf) const;
-       Int_t    LanGauPro(Double_t *params, Double_t &maxx, Double_t &fwhm);
-       static  Double_t GausConstant(Double_t *x, Double_t *par); 
+       Int_t    LanGauPro(const Double_t *params, Double_t &maxx, Double_t &fwhm);
+       static  Double_t GausConstant(const Double_t *x, const Double_t *par); 
        
        // This is a singleton, contructor is private!
        AliTRDCalibraFit();
@@ -347,4 +354,3 @@ class AliTRDCalibraFit : public TObject {
   
 #endif
 
-