LCOV - code coverage report
Current view: top level - ANALYSIS/ANALYSISalice - AliUnfolding.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 15 6.7 %
Date: 2016-06-14 17:26:59 Functions: 1 21 4.8 %

          Line data    Source code
       1             : /* $Id$ */
       2             : 
       3             : #ifndef ALIUNFOLDING_H
       4             : #define ALIUNFOLDING_H
       5             : 
       6             : //
       7             : // class that implements several unfolding methods
       8             : // I.e. chi2 minimization and bayesian unfolding
       9             : // The whole class is static and not thread-safe (due to the fact that MINUIT unfolding is not thread-safe)
      10             : //
      11             : 
      12             : // TMatrixD, TVectorD defined here, because it does not seem possible to predeclare these (or i do not know how)
      13             : // -->
      14             : // $ROOTSYS/include/TVectorDfwd.h:21: conflicting types for `typedef struct TVectorT<Double_t> TVectorD'
      15             : // PWG0/AliUnfolding.h:21: previous declaration as `struct TVectorD'
      16             : 
      17             : #include "TObject.h"
      18             : #include <TMatrixD.h>
      19             : #include <TVectorD.h>
      20             : 
      21             : class TH1;
      22             : class TH2;
      23             : class TF1;
      24             : class TCanvas;
      25             : class TVirtualPad;
      26             : class TAxis;
      27             : 
      28             : class AliUnfolding : public TObject
      29             : {
      30             :   public:
      31             :   enum RegularizationType { kNone = 0, kPol0, kPol1, kLog, kEntropy, kCurvature, kRatio, kPowerLaw, kLogLog };
      32             :     enum MethodType { kInvalid = -1, kChi2Minimization = 0, kBayesian = 1, kFunction = 2};
      33             : 
      34           0 :     virtual ~AliUnfolding() {};
      35             : 
      36             :     static void SetUnfoldingMethod(MethodType methodType);
      37             :     static void SetCreateOverflowBin(Float_t overflowBinLimit);
      38             :     static void SetSkipBinsBegin(Int_t nBins);
      39             :     static void SetNbins(Int_t nMeasured, Int_t nUnfolded);
      40             :     static void SetChi2Regularization(RegularizationType type, Float_t weight);
      41           0 :     static void SetMinuitStepSize(Float_t stepSize) { fgMinuitStepSize = stepSize; }
      42           0 :     static void SetMinuitPrecision(Float_t pres) {fgMinuitPrecision = pres;}
      43           0 :     static void SetMinuitMaxIterations(Int_t iter) {fgMinuitMaxIterations = iter;}
      44           0 :     static void SetMinuitStrategy(Double_t strat) {fgMinuitStrategy = strat;}
      45           0 :     static void SetMinimumInitialValue(Bool_t flag, Float_t value = -1) { fgMinimumInitialValue = flag; fgMinimumInitialValueFix = value; }
      46           0 :     static void SetNormalizeInput(Bool_t flag) { fgNormalizeInput = flag; }
      47           0 :     static void SetNotFoundEvents(Float_t notFoundEvents) { fgNotFoundEvents = notFoundEvents; }
      48           0 :     static void SetSkip0BinInChi2(Bool_t flag) { fgSkipBin0InChi2 = flag; }
      49             :     static void SetBayesianParameters(Float_t smoothing, Int_t nIterations);
      50             :     static void SetFunction(TF1* function);
      51           0 :     static void SetDebug(Bool_t flag) { fgDebug = flag; }
      52           0 :     static void SetPowern(Int_t n) {fgPowern = -1*n;}
      53             : 
      54             :     static Int_t Unfold(TH2* correlation, TH1* efficiency, TH1* measured, TH1* initialConditions, TH1* result, Bool_t check = kFALSE);
      55             :     static Int_t UnfoldGetBias(TH2* correlation, TH1* efficiency, TH1* measured, TH1* initialConditions, TH1* result);
      56             : 
      57             :     static TH1* GetPenaltyPlot(Double_t* params);
      58             :     static TH1* GetPenaltyPlot(TH1* corrected);
      59             : 
      60             :     static TH1* GetResidualsPlot(Double_t* params);
      61             :     static TH1* GetResidualsPlot(TH1* corrected);
      62             : 
      63           0 :     static Double_t GetChi2FromFit() {return fChi2FromFit;}
      64           0 :     static Double_t GetPenaltyVal()  {return fPenaltyVal;}
      65           0 :     static Double_t GetAvgResidual() {return fAvgResidual;}
      66             : 
      67             :     static void DrawResults(TH2* correlation, TH1* efficiency, TH1* measured, TH1* initialConditions, TCanvas *canvas = 0, Int_t reuseHists = kFALSE,TH1 *unfolded=0);
      68             :     static void InteractiveUnfold(TH2* correlation, TH1* efficiency, TH1* measured, TH1* initialConditions);
      69             :     static void RedrawInteractive();  
      70             : 
      71             :   protected:
      72             :     AliUnfolding() {};
      73             : 
      74             :     static Int_t UnfoldWithMinuit(TH2* correlation, TH1* efficiency, TH1* measured, TH1* initialConditions, TH1* result, Bool_t check);
      75             :     static Int_t UnfoldWithBayesian(TH2* correlation, TH1* aEfficiency, TH1* measured, TH1* initialConditions, TH1* aResult);
      76             :     static Int_t UnfoldWithFunction(TH2* correlation, TH1* efficiency, TH1* measured, TH1* /* initialConditions */, TH1* aResult);
      77             : 
      78             :     static void CreateOverflowBin(TH2* correlation, TH1* measured); 
      79             :     static void SetStaticVariables(TH2* correlation, TH1* measured, TH1* efficiency);
      80             : 
      81             :     static void MakePads();
      82             :     static void DrawGuess(Double_t *params, TVirtualPad *pfolded=0, TVirtualPad *pres=0, TVirtualPad *ppen=0, Int_t reuseHists = kFALSE, TH1* unfolded=0);
      83             : 
      84             :     static Double_t RegularizationPol0(TVectorD& params);
      85             :     static Double_t RegularizationPol1(TVectorD& params);
      86             :     static Double_t RegularizationTotalCurvature(TVectorD& params);
      87             :     static Double_t RegularizationEntropy(TVectorD& params);
      88             :     static Double_t RegularizationLog(TVectorD& params);
      89             :     static Double_t RegularizationRatio(TVectorD& params);
      90             :     static Double_t RegularizationPowerLaw(TVectorD& params);
      91             :     static Double_t RegularizationLogLog(TVectorD& params);
      92             : 
      93             :     static void Chi2Function(Int_t&, Double_t*, Double_t& chi2, Double_t *params, Int_t);
      94             :     static void TF1Function(Int_t& unused1, Double_t* unused2, Double_t& chi2, Double_t *params, Int_t unused3);
      95             : 
      96             :     // static variable to be accessed by MINUIT
      97             :     static TMatrixD* fgCorrelationMatrix;            // contains fCurrentCorrelation in matrix form
      98             :     static TMatrixD* fgCorrelationMatrixSquared;     // contains squared fCurrentCorrelation in matrix form
      99             :     static TMatrixD* fgCorrelationCovarianceMatrix;  // contains the errors of fCurrentESD
     100             :     static TVectorD* fgCurrentESDVector;             // contains fCurrentESD
     101             :     static TVectorD* fgEntropyAPriori;               // a-priori distribution for entropy regularization
     102             :     static TVectorD* fgEfficiency;                   // efficiency
     103             :     /*
     104             :     static TVectorD* fgBinWidths;                    // bin widths to be taken into account in regularization
     105             :     static TVectorD* fgBinPos;                       // bin positions of unfolded
     106             :     */
     107             :     static TAxis *fgUnfoldedAxis;                    // bin widths and positions for unfolded
     108             :     static TAxis *fgMeasuredAxis;                    // bin widths and positions for measured
     109             : 
     110             :     static TF1* fgFitFunction;                       // fit function
     111             : 
     112             :     // --- configuration params follow ---
     113             :     static MethodType fgMethodType;                  // unfolding method to be used
     114             :     static Int_t fgMaxParams;                        // bins in unfolded histogram = number of fit params
     115             :     static Int_t fgMaxInput;                         // bins in measured histogram
     116             :     static Float_t fgOverflowBinLimit;               // to fix fluctuations at high multiplicities, all entries above the limit are summarized in one bin
     117             : 
     118             :     static RegularizationType fgRegularizationType;  // regularization that is used during Chi2 method
     119             :     static Float_t fgRegularizationWeight;           // factor for regularization term
     120             :     static Int_t fgSkipBinsBegin;                    // (optional) skip the given number of bins in the regularization
     121             :     static Float_t fgMinuitStepSize;                 // (usually not needed to be changed) step size in minimization
     122             :     static Float_t fgMinuitPrecision;                // precision used by minuit. default = 1e-6
     123             :     static Int_t   fgMinuitMaxIterations;            // maximum number of iterations used by minuit. default = 5000
     124             :     static Double_t fgMinuitStrategy;                // minuit strategy: 0 (low), 1 (default), 2 (high)
     125             :     static Bool_t fgMinimumInitialValue;             // set all initial values at least to the smallest value among the initial values
     126             :     static Float_t fgMinimumInitialValueFix;         // use this as the minimum initial value instead of determining it automatically
     127             :     static Bool_t fgNormalizeInput;                  // normalize input spectrum
     128             :     static Float_t fgNotFoundEvents;                 // constraint on the total number of not found events sum(guess * (1/eff -1))
     129             :     static Bool_t fgSkipBin0InChi2;                  // skip bin 0 (= 0 measured) in chi2 function
     130             : 
     131             :     static Float_t fgBayesianSmoothing;              // smoothing parameter (0 = no smoothing)
     132             :     static Int_t   fgBayesianIterations;             // number of iterations in Bayesian method
     133             : 
     134             :     static Bool_t fgDebug;                           // debug flag
     135             :     // --- end of configuration ---
     136             :     
     137             :     static Int_t fgCallCount;                        // call count to chi2 function
     138             : 
     139             :     static Int_t fgPowern;                           // power of power law for regularization with power law
     140             : 
     141             :     static Double_t fChi2FromFit;                    // Chi2 from fit at current iteration
     142             :     static Double_t fPenaltyVal;                     // Penalty value at current iteration (\beta * PU)
     143             :     static Double_t fAvgResidual;                    // Sum residuals / nbins
     144             : 
     145             :     static Int_t fgPrintChi2Details;                 // debug for chi2 calc
     146             : 
     147             :     // Pointers for interactive unfolder
     148             :     static TCanvas *fgCanvas;                        // Canvas for interactive unfolder
     149             :     static TH1 *fghUnfolded;                         // Unfolding result for interactive unfolder
     150             :     static TH2 *fghCorrelation;                      // Response matrix for interactive unfolder
     151             :     static TH1 *fghEfficiency;                       // Efficiency histo for interactive unfolder
     152             :     static TH1 *fghMeasured;                         // Measured distribution for interactive unfolder
     153             : 
     154             : private:
     155             :     AliUnfolding(const AliUnfolding&);
     156             :     AliUnfolding& operator=(const AliUnfolding&);
     157             : 
     158         170 :   ClassDef(AliUnfolding, 0);
     159             : };
     160             : 
     161             : #endif
     162             : 

Generated by: LCOV version 1.11