#ifndef ALIMULTIPLICITYCORRECTION_H
#define ALIMULTIPLICITYCORRECTION_H
#include "TNamed.h"
class TH1;
class TH2;
class TH1F;
class TH2F;
class TH3F;
class TF1;
class TCollection;
#include <TMatrixD.h>
#include <TVectorD.h>
#include <AliPWG0Helper.h>
#include <AliUnfolding.h>
class AliMultiplicityCorrection : public TNamed {
public:
enum EventType { kTrVtx = 0, kMB, kINEL, kNSD };
enum { kESDHists = 3, kMCHists = 4, kCorrHists = 6, kQualityRegions = 3 };
AliMultiplicityCorrection();
AliMultiplicityCorrection(const Char_t* name, const Char_t* title);
virtual ~AliMultiplicityCorrection();
static AliMultiplicityCorrection* Open(const char* fileName, const char* folderName = "Multiplicity");
virtual Long64_t Merge(const TCollection* list);
void FillMeasured(Float_t vtx, Int_t measured05, Int_t measured10, Int_t measured14);
void FillTriggeredEvent(Int_t measured05, Int_t measured10, Int_t measured14);
void FillGenerated(Float_t vtx, Bool_t triggered, Bool_t vertex, AliPWG0Helper::MCProcessType processType, Int_t generated05, Int_t generated10, Int_t generated14, Int_t generatedAll);
void FillCorrection(Float_t vtx, Int_t generated05, Int_t generated10, Int_t generated14, Int_t generatedAll, Int_t measured05, Int_t measured10, Int_t measured14);
void FillNoVertexEvent(Float_t vtx, Bool_t vertexReconstructed, Int_t generated05, Int_t generated10, Int_t generated14, Int_t measured05, Int_t measured10, Int_t measured14);
Bool_t LoadHistograms(const Char_t* dir = 0);
void SaveHistograms(const char* dir = 0);
void DrawHistograms();
void Rebin2DY(TH2F*& hist, Int_t nBins, Double_t* newBins) const;
void Rebin3DY(TH3F*& hist, Int_t nBins, Double_t* newBins) const;
void RebinGenerated(Int_t nBins05, Double_t* newBins05, Int_t nBins10, Double_t* newBins10, Int_t nBins13, Double_t* newBins13);
void DrawComparison(const char* name, Int_t inputRange, Bool_t fullPhaseSpace, Bool_t normalizeESD, TH1* mcHist, Bool_t simple = kFALSE, EventType eventType = kTrVtx);
Int_t ApplyMinuitFit(Int_t inputRange, Bool_t fullPhaseSpace, EventType eventType, Int_t zeroBinEvents, Bool_t check = kFALSE, TH1* initialConditions = 0, Bool_t errorAsBias = kFALSE);
void ApplyBayesianMethod(Int_t inputRange, Bool_t fullPhaseSpace, EventType eventType, Float_t regPar = 1, Int_t nIterations = 100, TH1* initialConditions = 0, Int_t determineError = 1);
static TH1* CalculateStdDev(TH1** results, Int_t max);
TH1* StatisticalUncertainty(AliUnfolding::MethodType methodType, Int_t inputRange, Bool_t fullPhaseSpace, EventType eventType, Int_t zeroBinEvents, Bool_t randomizeMeasured, Bool_t randomizeResponse, const TH1* compareTo = 0);
Int_t ApplyNBDFit(Int_t inputRange, Bool_t fullPhaseSpace, EventType eventType);
void ApplyGaussianMethod(Int_t inputRange, Bool_t fullPhaseSpace);
void ApplyLaszloMethod(Int_t inputRange, Bool_t fullPhaseSpace, EventType eventType);
void Calculate0Bin(Int_t inputRange, EventType eventType, Int_t zeroBinEvents);
Float_t GetFraction0Generated(Int_t inputRange);
TH2F* GetMultiplicityESD(Int_t i) const { return fMultiplicityESD[i]; }
TH1F* GetTriggeredEvents(Int_t i) const { return fTriggeredEvents[i]; }
TH2F* GetMultiplicityVtx(Int_t i) const { return fMultiplicityVtx[i]; }
TH2F* GetMultiplicityMB(Int_t i) const { return fMultiplicityMB[i]; }
TH2F* GetMultiplicityINEL(Int_t i) const { return fMultiplicityINEL[i]; }
TH2F* GetMultiplicityNSD(Int_t i) const { return fMultiplicityNSD[i]; }
TH2F* GetMultiplicityMC(Int_t i, EventType eventType) const;
TH3F* GetCorrelation(Int_t i) const { return fCorrelation[i]; }
TH1F* GetNoVertexEvents(Int_t i) const { return fNoVertexEvents[i]; }
TH1F* GetMultiplicityESDCorrected(Int_t i) const { return fMultiplicityESDCorrected[i]; }
void SetMultiplicityESD(Int_t i, TH2F* const hist) { fMultiplicityESD[i] = hist; }
void SetTriggeredEvents(Int_t i, TH1F* hist) { fTriggeredEvents[i] = hist; }
void SetMultiplicityVtx(Int_t i, TH2F* const hist) { fMultiplicityVtx[i] = hist; }
void SetMultiplicityMB(Int_t i, TH2F* const hist) { fMultiplicityMB[i] = hist; }
void SetMultiplicityINEL(Int_t i, TH2F* const hist) { fMultiplicityINEL[i] = hist; }
void SetMultiplicityNSD(Int_t i, TH2F* const hist) { fMultiplicityNSD[i] = hist; }
void SetMultiplicityMC(Int_t i, EventType eventType, TH2F* const hist);
void SetCorrelation(Int_t i, TH3F* const hist) { fCorrelation[i] = hist; }
void SetNoVertexEvents(Int_t i, TH1F* hist) { fNoVertexEvents[i] = hist; }
void SetMultiplicityESDCorrected(Int_t i, TH1F* const hist) { fMultiplicityESDCorrected[i] = hist; }
void SetGenMeasFromFunc(const TF1* inputMC, Int_t id);
TH2F* CalculateMultiplicityESD(TH1* inputMC, Int_t correlationMap);
void FixTriggerEfficiencies(Int_t start);
TH1* GetConvoluted(Int_t i, EventType eventType);
TH1* GetResiduals(Int_t i, EventType eventType, Float_t& residualSum);
void GetComparisonResults(Float_t* const mc = 0, Int_t* const mcLimit = 0, Float_t* const residuals = 0, Float_t* const ratioAverage = 0) const;
TH1* GetEfficiency(Int_t inputRange, EventType eventType);
TH1* GetTriggerEfficiency(Int_t inputRange, EventType eventType);
static void SetQualityRegions(Bool_t SPDStudy);
Float_t GetQuality(Int_t region) const { return fQuality[region]; }
void FFT(Int_t dir, Int_t m, Double_t *x, Double_t *y) const;
Float_t GetVertexBegin(Int_t i) { return fgVtxRangeBegin[i]; }
Float_t GetVertexEnd(Int_t i) { return fgVtxRangeEnd[i]; }
void SetVertexRange(Int_t begin, Int_t end) { fVtxBegin = begin; fVtxEnd = end; }
protected:
void SetupCurrentHists(Int_t inputRange, Bool_t fullPhaseSpace, EventType eventType);
Float_t BayesCovarianceDerivate(Float_t matrixM[251][251], const TH2* hResponse, Int_t k, Int_t i, Int_t r, Int_t u);
TH1* fCurrentESD;
TH2* fCurrentCorrelation;
TH1* fCurrentEfficiency;
TH2F* fMultiplicityESD[kESDHists];
TH1F* fTriggeredEvents[kESDHists];
TH1F* fNoVertexEvents[kESDHists];
TH2F* fMultiplicityVtx[kMCHists];
TH2F* fMultiplicityMB[kMCHists];
TH2F* fMultiplicityINEL[kMCHists];
TH2F* fMultiplicityNSD[kMCHists];
TH3F* fCorrelation[kCorrHists];
TH1F* fMultiplicityESDCorrected[kCorrHists];
Int_t fLastBinLimit;
Float_t fLastChi2MC;
Int_t fLastChi2MCLimit;
Float_t fLastChi2Residuals;
Float_t fRatioAverage;
Int_t fVtxBegin;
Int_t fVtxEnd;
static Double_t fgVtxRangeBegin[kESDHists];
static Double_t fgVtxRangeEnd[kESDHists];
static Int_t fgQualityRegionsB[kQualityRegions];
static Int_t fgQualityRegionsE[kQualityRegions];
Float_t fQuality[kQualityRegions];
private:
AliMultiplicityCorrection(const AliMultiplicityCorrection&);
AliMultiplicityCorrection& operator=(const AliMultiplicityCorrection&);
ClassDef(AliMultiplicityCorrection, 7);
};
#endif
AliMultiplicityCorrection.h:1 AliMultiplicityCorrection.h:2 AliMultiplicityCorrection.h:3 AliMultiplicityCorrection.h:4 AliMultiplicityCorrection.h:5 AliMultiplicityCorrection.h:6 AliMultiplicityCorrection.h:7 AliMultiplicityCorrection.h:8 AliMultiplicityCorrection.h:9 AliMultiplicityCorrection.h:10 AliMultiplicityCorrection.h:11 AliMultiplicityCorrection.h:12 AliMultiplicityCorrection.h:13 AliMultiplicityCorrection.h:14 AliMultiplicityCorrection.h:15 AliMultiplicityCorrection.h:16 AliMultiplicityCorrection.h:17 AliMultiplicityCorrection.h:18 AliMultiplicityCorrection.h:19 AliMultiplicityCorrection.h:20 AliMultiplicityCorrection.h:21 AliMultiplicityCorrection.h:22 AliMultiplicityCorrection.h:23 AliMultiplicityCorrection.h:24 AliMultiplicityCorrection.h:25 AliMultiplicityCorrection.h:26 AliMultiplicityCorrection.h:27 AliMultiplicityCorrection.h:28 AliMultiplicityCorrection.h:29 AliMultiplicityCorrection.h:30 AliMultiplicityCorrection.h:31 AliMultiplicityCorrection.h:32 AliMultiplicityCorrection.h:33 AliMultiplicityCorrection.h:34 AliMultiplicityCorrection.h:35 AliMultiplicityCorrection.h:36 AliMultiplicityCorrection.h:37 AliMultiplicityCorrection.h:38 AliMultiplicityCorrection.h:39 AliMultiplicityCorrection.h:40 AliMultiplicityCorrection.h:41 AliMultiplicityCorrection.h:42 AliMultiplicityCorrection.h:43 AliMultiplicityCorrection.h:44 AliMultiplicityCorrection.h:45 AliMultiplicityCorrection.h:46 AliMultiplicityCorrection.h:47 AliMultiplicityCorrection.h:48 AliMultiplicityCorrection.h:49 AliMultiplicityCorrection.h:50 AliMultiplicityCorrection.h:51 AliMultiplicityCorrection.h:52 AliMultiplicityCorrection.h:53 AliMultiplicityCorrection.h:54 AliMultiplicityCorrection.h:55 AliMultiplicityCorrection.h:56 AliMultiplicityCorrection.h:57 AliMultiplicityCorrection.h:58 AliMultiplicityCorrection.h:59 AliMultiplicityCorrection.h:60 AliMultiplicityCorrection.h:61 AliMultiplicityCorrection.h:62 AliMultiplicityCorrection.h:63 AliMultiplicityCorrection.h:64 AliMultiplicityCorrection.h:65 AliMultiplicityCorrection.h:66 AliMultiplicityCorrection.h:67 AliMultiplicityCorrection.h:68 AliMultiplicityCorrection.h:69 AliMultiplicityCorrection.h:70 AliMultiplicityCorrection.h:71 AliMultiplicityCorrection.h:72 AliMultiplicityCorrection.h:73 AliMultiplicityCorrection.h:74 AliMultiplicityCorrection.h:75 AliMultiplicityCorrection.h:76 AliMultiplicityCorrection.h:77 AliMultiplicityCorrection.h:78 AliMultiplicityCorrection.h:79 AliMultiplicityCorrection.h:80 AliMultiplicityCorrection.h:81 AliMultiplicityCorrection.h:82 AliMultiplicityCorrection.h:83 AliMultiplicityCorrection.h:84 AliMultiplicityCorrection.h:85 AliMultiplicityCorrection.h:86 AliMultiplicityCorrection.h:87 AliMultiplicityCorrection.h:88 AliMultiplicityCorrection.h:89 AliMultiplicityCorrection.h:90 AliMultiplicityCorrection.h:91 AliMultiplicityCorrection.h:92 AliMultiplicityCorrection.h:93 AliMultiplicityCorrection.h:94 AliMultiplicityCorrection.h:95 AliMultiplicityCorrection.h:96 AliMultiplicityCorrection.h:97 AliMultiplicityCorrection.h:98 AliMultiplicityCorrection.h:99 AliMultiplicityCorrection.h:100 AliMultiplicityCorrection.h:101 AliMultiplicityCorrection.h:102 AliMultiplicityCorrection.h:103 AliMultiplicityCorrection.h:104 AliMultiplicityCorrection.h:105 AliMultiplicityCorrection.h:106 AliMultiplicityCorrection.h:107 AliMultiplicityCorrection.h:108 AliMultiplicityCorrection.h:109 AliMultiplicityCorrection.h:110 AliMultiplicityCorrection.h:111 AliMultiplicityCorrection.h:112 AliMultiplicityCorrection.h:113 AliMultiplicityCorrection.h:114 AliMultiplicityCorrection.h:115 AliMultiplicityCorrection.h:116 AliMultiplicityCorrection.h:117 AliMultiplicityCorrection.h:118 AliMultiplicityCorrection.h:119 AliMultiplicityCorrection.h:120 AliMultiplicityCorrection.h:121 AliMultiplicityCorrection.h:122 AliMultiplicityCorrection.h:123 AliMultiplicityCorrection.h:124 AliMultiplicityCorrection.h:125 AliMultiplicityCorrection.h:126 AliMultiplicityCorrection.h:127 AliMultiplicityCorrection.h:128 AliMultiplicityCorrection.h:129 AliMultiplicityCorrection.h:130 AliMultiplicityCorrection.h:131 AliMultiplicityCorrection.h:132 AliMultiplicityCorrection.h:133 AliMultiplicityCorrection.h:134 AliMultiplicityCorrection.h:135 AliMultiplicityCorrection.h:136 AliMultiplicityCorrection.h:137 AliMultiplicityCorrection.h:138 AliMultiplicityCorrection.h:139 AliMultiplicityCorrection.h:140 AliMultiplicityCorrection.h:141 AliMultiplicityCorrection.h:142 AliMultiplicityCorrection.h:143 AliMultiplicityCorrection.h:144 AliMultiplicityCorrection.h:145 AliMultiplicityCorrection.h:146 AliMultiplicityCorrection.h:147 AliMultiplicityCorrection.h:148 AliMultiplicityCorrection.h:149 AliMultiplicityCorrection.h:150 AliMultiplicityCorrection.h:151 AliMultiplicityCorrection.h:152 AliMultiplicityCorrection.h:153 AliMultiplicityCorrection.h:154 AliMultiplicityCorrection.h:155 AliMultiplicityCorrection.h:156 AliMultiplicityCorrection.h:157 AliMultiplicityCorrection.h:158 AliMultiplicityCorrection.h:159 AliMultiplicityCorrection.h:160 AliMultiplicityCorrection.h:161 AliMultiplicityCorrection.h:162 AliMultiplicityCorrection.h:163 AliMultiplicityCorrection.h:164 AliMultiplicityCorrection.h:165 AliMultiplicityCorrection.h:166