]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibraFit.h
Coverity fix (Diego)
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibraFit.h
index 2754f08a952b1856ccc6fbf6363dcd1c69932dcc..eb91f40acc79c63384177c5d39b0fd0bfbcf56b9 100644 (file)
@@ -18,6 +18,7 @@
 # include <TVectorD.h>
 #endif 
 
+class TString;
 class TTree;
 class TProfile2D;
 class TGraphErrors;
@@ -30,11 +31,13 @@ class TH2F;
 class TF1;
 class TTreeSRedirector;
 
+
 class AliLog;
 
 class AliTRDCalibraMode;
 class AliTRDCalibraVector;
 class AliTRDCalibraVdriftLinearFit;
+class AliTRDCalibraExbAltFit;
 class AliTRDCalDet;
 class AliTRDCalROC;
 class AliTRDgeometry;
@@ -52,16 +55,18 @@ class AliTRDCalibraFit : public TObject {
   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) const;
+  // ExB calibration
+  void     SetCalDetVdriftExB(AliTRDCalDet *calDetVdriftUsed,AliTRDCalDet *calDetExBUsed) {fCalDetVdriftUsed = calDetVdriftUsed; fCalDetExBUsed = calDetExBUsed;};
   
   // Functions fit for CH
   Bool_t   AnalyseCH(const TH2I *ch);
   Bool_t   AnalyseCH(AliTRDCalibraVector *calvect);
+  Double_t AnalyseCHAllTogether(const TH2I *ch);
   
   // Functions fit for PH       
   Bool_t   AnalysePH(const TProfile2D *ph);
   Bool_t   AnalysePH(AliTRDCalibraVector *calvect);
+  Double_t AnalysePHAllTogether(const TProfile2D *ph);
   
   // Functions fit for PRF
   Bool_t   AnalysePRF(const TProfile2D *prf);
@@ -72,17 +77,19 @@ class AliTRDCalibraFit : public TObject {
   
   // Functions fit for vdrift/lorentzangle
   Bool_t   AnalyseLinearFitters(AliTRDCalibraVdriftLinearFit *calivdli);
+  void     AnalyseLinearFittersAllTogether(AliTRDCalibraVdriftLinearFit *calivdli, Double_t &vdriftoverall, Double_t &exboverall);
+  Bool_t   AnalyseExbAltFit(AliTRDCalibraExbAltFit *calivdli);
   
   // Pad Calibration
-  Bool_t   SetModeCalibration(const char *name, Int_t i);
+  Bool_t   SetModeCalibration(TString 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;
+  void CalculPolynomeLagrange2(const Double_t *x, const Double_t *y, Double_t &c0, Double_t &c1, Double_t &c2, Double_t &c3, Double_t &c4) const;
+  void CalculPolynomeLagrange3(const Double_t *x, const Double_t *y, Double_t &c0, Double_t &c1, Double_t &c2, Double_t &c3, Double_t &c4) const;
+  void CalculPolynomeLagrange4(const Double_t *x, const Double_t *y, Double_t &c0, Double_t &c1, Double_t &c2, Double_t &c3, Double_t &c4) const;
   
   // Fill the database
   void         RemoveOutliers(Int_t type, Bool_t perdetector = kFALSE);
@@ -93,6 +100,7 @@ class AliTRDCalibraFit : public TObject {
   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);
+  AliTRDCalDet *CreateDetObjectExbAlt(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);
@@ -110,6 +118,8 @@ class AliTRDCalibraFit : public TObject {
   // Fit
   void     ChooseMethod(Short_t method)                              { fMethod = method;               }
   void     SetBeginFitCharge(Float_t beginFitCharge);   
+  void     SetFitOutliersChargeLow(Float_t fitOutliersChargeLow)     { fOutliersFitChargeLow = fitOutliersChargeLow; }
+  void     SetFitOutliersChargeHigh(Float_t fitOutliersChargeHigh)   { fOutliersFitChargeHigh = fitOutliersChargeHigh; }
   void     SetPeriodeFitPH(Int_t periodeFitPH);   
   void     SetTakeTheMaxPH()                                         { fTakeTheMaxPH   = kTRUE;        }
   void     SetT0Shift0(Float_t t0Shift0); 
@@ -120,6 +130,8 @@ class AliTRDCalibraFit : public TObject {
   void     SetRebin(Short_t rebin);
   
   Int_t    GetPeriodeFitPH() const                                   { return fFitPHPeriode;           }
+  Float_t  GetFitOutliersChargeLow() const                           { return fOutliersFitChargeLow;   }
+  Float_t  GetFitOutliersChargeHigh() const                          { return fOutliersFitChargeHigh;  }
   Bool_t   GetTakeTheMaxPH() const                                   { return fTakeTheMaxPH;           }
   Float_t  GetT0Shift0() const                                       { return fT0Shift0;               }
   Float_t  GetT0Shift1() const                                       { return fT0Shift1;               }
@@ -127,6 +139,7 @@ class AliTRDCalibraFit : public TObject {
   Bool_t   GetAccCDB() const                                         { return fAccCDB;                 }
   Int_t    GetMinEntries() const                                     { return fMinEntries;             }
   Short_t  GetRebin() const                                          { return fRebin;                  }
+  Float_t  GetScaleFactorGain() const                                { return fScaleGain;              }
   
   // Statistics
   Int_t    GetNumberFit() const                                      { return fNumberFit;              }
@@ -169,7 +182,7 @@ class AliTRDCalibraFit : public TObject {
         AliTRDFitInfo &operator=(const AliTRDFitInfo&)     { return *this;            }
         virtual ~AliTRDFitInfo()                           { if(fCoef) { delete [] fCoef;} }
         
-        void      SetCoef(Float_t *coef)             { fCoef = coef;            }
+        void      SetCoef(Float_t *coef)                   { fCoef = coef;            }
         void      SetDetector(Int_t detector)              { fDetector = detector;    }
         
         Float_t  *GetCoef() const                          { return fCoef;            }
@@ -196,6 +209,8 @@ class AliTRDCalibraFit : public TObject {
        // Fit
        Short_t      fMethod;                // Method
        Float_t      fBeginFitCharge;        // The fit begins at mean/fBeginFitCharge for the gain calibration
+       Float_t      fOutliersFitChargeLow;  // The fit ends at fOutliersFitCharge procent number of entries
+       Float_t      fOutliersFitChargeHigh; // The fit ends at fOutliersFitCharge procent number of entries
        Int_t        fFitPHPeriode;          // Periode of the fit PH
        Bool_t       fTakeTheMaxPH;          // Take the Max for the T0 determination
        Float_t      fT0Shift0;              // T0 Shift with the maximum positive slope
@@ -204,6 +219,7 @@ class AliTRDCalibraFit : public TObject {
        Bool_t       fAccCDB;                // If there is a calibration database to be compared with....
        Int_t        fMinEntries;            // Min Entries to fit the histo
        Short_t      fRebin;                 // If you want to rebin the histo for the gain calibration 
+       Float_t      fScaleGain;            // Scale Factor used to scale the gain
        
        // Statistics      
        Int_t        fNumberFit;             // To know how many pad groups have been fitted
@@ -244,6 +260,9 @@ class AliTRDCalibraFit : public TObject {
        AliTRDCalROC *fCalROC;            // Current calib object
        AliTRDCalDet *fCalDet2;           // Current calib object
        AliTRDCalROC *fCalROC2;           // Current calib object
+
+       AliTRDCalDet *fCalDetVdriftUsed;  // ExB calibration
+       AliTRDCalDet *fCalDetExBUsed;     // ExB calibration
        
        // Current values detector
        
@@ -263,23 +282,27 @@ class AliTRDCalibraFit : public TObject {
        Bool_t   InitFitPH();
        Bool_t   InitFitPRF();
        Bool_t   InitFitLinearFitter();
+       Bool_t   InitFitExbAlt();
        
        // Not enough Statistics
        Bool_t   NotEnoughStatisticCH(Int_t idect);
        Bool_t   NotEnoughStatisticPH(Int_t idect,Double_t nentries);
        Bool_t   NotEnoughStatisticPRF(Int_t idect);
        Bool_t   NotEnoughStatisticLinearFitter();
+       Bool_t   NotEnoughStatisticExbAlt();
        
        // Fill Infos Fit
        Bool_t   FillInfosFitCH(Int_t idect);
        Bool_t   FillInfosFitPH(Int_t idect,Double_t nentries);
        Bool_t   FillInfosFitPRF(Int_t idect);
        Bool_t   FillInfosFitLinearFitter();
+       Bool_t   FillInfosFitExbAlt();
        
        void     FillFillCH(Int_t idect);
        void     FillFillPH(Int_t idect,Double_t nentries);
        void     FillFillPRF(Int_t idect);
        void     FillFillLinearFitter();
+       void     FillFillExbAlt();
        
        Bool_t   FillVectorFit();
        Bool_t   FillVectorFit2();
@@ -292,9 +315,9 @@ class AliTRDCalibraFit : public TObject {
        void     ReconstructFitRowMinRowMax(Int_t idect, Int_t i);
        Bool_t   CheckFitVoir();
        void     NormierungCharge();
-       Bool_t   SetNrphiFromTObject(const char *name, Int_t i);
-       Bool_t   SetNzFromTObject(const char *name, Int_t i);
-       Int_t    GetNumberOfGroupsPRF(const char* nametitle);
+       Bool_t   SetNrphiFromTObject(TString name, Int_t i);
+       Bool_t   SetNzFromTObject(TString name, Int_t i);
+       Int_t    GetNumberOfGroupsPRF(TString nametitle);
        
        // Calculate the mean coefs from the database
        Bool_t   CalculVdriftCoefMean();
@@ -306,8 +329,10 @@ class AliTRDCalibraFit : public TObject {
        void     SetCalROC(Int_t i);
        
        // Fit methods
-       void     FitBisCH(TH1 *projch, Double_t mean);
-       void     FitCH(TH1 *projch, Double_t mean);
+       void     FitBisCHEx(TH1 *projch, Double_t mean, Double_t nentries);
+       void     FitBisCH(TH1 *projch, Double_t mean, Double_t nentries);
+       void     FitCH(TH1 *projch, Double_t mean, Double_t nentries);
+       void     FitLandau(TH1 *projch, Double_t mean, Double_t nentries);
        void     FitMeanW(TH1 *projch, Double_t nentries);
        void     FitMeanWSm(TH1 *projch, Float_t sumAll);
        void     FitMean(TH1 *projch, Double_t nentries, Double_t mean);
@@ -337,20 +362,26 @@ class AliTRDCalibraFit : public TObject {
        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);
+       static  Double_t LanGauFunEx(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(const Double_t *params, Double_t &maxx, Double_t &fwhm);
-       static  Double_t GausConstant(const Double_t *x, const Double_t *par); 
+       TF1     *LanGauFitEx(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;
+     
        
        // This is a singleton, contructor is private!
        AliTRDCalibraFit();
        virtual ~AliTRDCalibraFit();
        
        
-  ClassDef(AliTRDCalibraFit,2)                 // TRD Calibration class
+  ClassDef(AliTRDCalibraFit,3)                 // TRD Calibration class
         
 };
   
 #endif
 
+
+