#ifndef ALIDIELECTRONSIGNALBASE_H
#define ALIDIELECTRONSIGNALBASE_H
#include <TNamed.h>
#include <TVectorT.h>
#include <TMath.h>
#include <TH1F.h>
#include <TF1.h>
class TObjArray;
class TPaveText;
class AliDielectronSignalBase : public TNamed {
public:
enum EBackgroundMethod {
kFittedMC = 0,
kFitted,
kLikeSign,
kLikeSignArithm,
kLikeSignRcorr,
kLikeSignArithmRcorr,
kLikeSignFit,
kEventMixing,
kEventMixingFit,
kRotation
};
enum ESignalExtractionMethod {
kBinCounting = 0,
kMCScaledMax,
kMCScaledInt,
kMCFitted,
kCrystalBall,
kGaus
};
AliDielectronSignalBase();
AliDielectronSignalBase(const char*name, const char* title);
virtual ~AliDielectronSignalBase();
void SetMCSignalShape(TH1F* hist) { fgHistSimPM=hist; }
void SetParticleOfInterest(Int_t pdgcode) { fPOIpdg=pdgcode; }
void SetIntegralRange(Double_t min, Double_t max) {fIntMin=min;fIntMax=max;}
void SetFitRange(Double_t min, Double_t max) {fFitMin=min; fFitMax=max;}
void SetRebin(Int_t factor) {fRebin = factor;}
void SetMethod(EBackgroundMethod method) {fMethod = method;}
Int_t GetMethod() const { return (Int_t)fMethod; }
void SetExtractionMethod(ESignalExtractionMethod method) {fPeakMethod = method;}
Int_t GetExtractionMethod() const { return (Int_t)fPeakMethod; }
const TVectorD& GetValues() const {return fValues;}
const TVectorD& GetErrors() const {return fErrors;}
Double_t GetIntegralMin() const { return fIntMin; }
Double_t GetIntegralMax() const { return fIntMax; }
Double_t GetSignal() const { return fValues(0);}
Double_t GetSignalError() const { return fErrors(0);}
Double_t GetBackground() const { return fValues(1);}
Double_t GetBackgroundError() const { return fErrors(1);}
Double_t GetSignificance() const { return fValues(2);}
Double_t GetSignificanceError() const { return fErrors(2);}
Double_t GetSB() const { return fValues(3);}
Double_t GetSBError() const { return fErrors(3);}
Double_t GetMass() const { return fValues(4);}
Double_t GetMassError() const { return fErrors(4);}
Double_t GetMassWidth() const { return fValues(5);}
Double_t GetMassWidthError() const { return fErrors(5);}
static const char* GetValueName(Int_t i) { return (i>=0&&i<6)?fgkValueNames[i]:""; }
TH1* GetSignalHistogram() const {return fHistSignal;}
TH1* GetBackgroundHistogram() const {return fHistBackground;}
TH1* GetUnlikeSignHistogram() const {return fHistDataPM;}
TH1* GetRfactorHistogram() const {return fHistRfactor;}
TObject* GetPeakShape() const {return fgPeakShape;}
void SetScaleRawToBackground(Double_t intMin, Double_t intMax) { fScaleMin=intMin; fScaleMax=intMax; }
void SetScaleRawToBackground(Double_t intMin, Double_t intMax, Double_t intMin2, Double_t intMax2) { fScaleMin=intMin; fScaleMax=intMax; fScaleMin2=intMin2; fScaleMax2=intMax2; }
Double_t GetScaleMin() const { return fScaleMin; }
Double_t GetScaleMax() const { return fScaleMax; }
Double_t GetScaleMin2() const { return fScaleMin2; }
Double_t GetScaleMax2() const { return fScaleMax2; }
Double_t GetScaleFactor() const { return fScaleFactor; }
Int_t GetParticleOfInterest() const { return fPOIpdg; }
void SetMixingCorrection(Bool_t mixcorr=kTRUE) { fMixingCorr=mixcorr; }
static Double_t ScaleHistograms(TH1* histRaw, TH1* histBackground, Double_t intMin, Double_t intMax);
static Double_t ScaleHistograms(TH1* histRaw, TH1* histBackground, Double_t intMin, Double_t intMax, Double_t intMin2, Double_t intMax2);
virtual void Print(Option_t *option="") const;
virtual void Process(TObjArray * const ) = 0;
TObject* DescribePeakShape(ESignalExtractionMethod method, Bool_t replaceValErr=kFALSE, TH1F *mcShape=0x0);
protected:
TH1 *fHistSignal;
TH1 *fHistBackground;
TH1 *fHistDataPM;
TH1 *fHistDataPP;
TH1 *fHistDataMM;
TH1 *fHistDataME;
TH1 *fHistRfactor;
TVectorD fValues;
TVectorD fErrors;
Double_t fIntMin;
Double_t fIntMax;
Double_t fFitMin;
Double_t fFitMax;
Int_t fRebin;
EBackgroundMethod fMethod;
Double_t fScaleMin;
Double_t fScaleMax;
Double_t fScaleMin2;
Double_t fScaleMax2;
Double_t fScaleFactor;
Bool_t fMixingCorr;
ESignalExtractionMethod fPeakMethod;
static TObject *fgPeakShape;
Bool_t fProcessed;
Int_t fPOIpdg;
static TH1F* fgHistSimPM;
void SetSignificanceAndSOB();
void SetFWHM();
static const char* fgkValueNames[6];
TPaveText* DrawStats(Double_t x1=0., Double_t y1=0., Double_t x2=0., Double_t y2=0.);
AliDielectronSignalBase(const AliDielectronSignalBase &c);
AliDielectronSignalBase &operator=(const AliDielectronSignalBase &c);
ClassDef(AliDielectronSignalBase,4)
};
inline void AliDielectronSignalBase::SetSignificanceAndSOB()
{
fValues(3) = (fValues(1)>0 ? fValues(0)/fValues(1) : 0);
Float_t epsSig = (fValues(0)>0 ? fErrors(0)/fValues(0) : 0);
Float_t epsBknd = (fValues(1)>0 ? fErrors(1)/fValues(1) : 0);
fErrors(3) = fValues(3)*TMath::Sqrt(epsSig*epsSig + epsBknd*epsBknd);
fValues(2) = ((fValues(0)+fValues(1))>0 ? fValues(0)/TMath::Sqrt(fValues(0)+fValues(1)) : 0);
Float_t s = (fValues(0)>0?fValues(0):0); Float_t b = fValues(1);
Float_t se = fErrors(0); Float_t be = fErrors(1);
fErrors(2) = ((s+b)>0 ? fValues(2)*TMath::Sqrt(be*be + TMath::Power(se*(s+2*b)/s, 2)) / 2 / (s+b) : 0);
}
inline void AliDielectronSignalBase::SetFWHM()
{
if(!fgPeakShape) return;
if(fgPeakShape->IsA() == TF1::Class()) {
TF1* fit = (TF1*) fgPeakShape->Clone("fit");
TF1* pfit = (TF1*) fit->Clone("pfit");
TF1* mfit = (TF1*) fit->Clone("mfit");
for (Int_t i=0; i<fit->GetNpar(); i++) {
pfit->SetParameter(i,fit->GetParameter(i) + fit->GetParError(i));
mfit->SetParameter(i,fit->GetParameter(i) - fit->GetParError(i));
}
Double_t maxX = fit->GetMaximumX();
Double_t maxY = fit->GetHistogram()->GetMaximum();
Double_t xAxMin = fit->GetXmin();
Double_t xAxMax = fit->GetXmax();
Double_t fwhmMin = fit->GetX(.5*maxY, xAxMin, maxX);
Double_t fwhmMax = fit->GetX(.5*maxY, maxX, xAxMax);
Double_t pfwhmMin = pfit->GetX(.5*maxY, xAxMin, maxX);
Double_t pfwhmMax = pfit->GetX(.5*maxY, maxX, xAxMax);
Double_t mfwhmMin = mfit->GetX(.5*maxY, xAxMin, maxX);
Double_t mfwhmMax = mfit->GetX(.5*maxY, maxX, xAxMax);
Double_t pError = TMath::Abs( (fwhmMax-fwhmMin) - (pfwhmMax-pfwhmMin) );
Double_t mError = TMath::Abs( (fwhmMax-fwhmMin) - (mfwhmMax-mfwhmMin) );
fValues(5) = (fwhmMax-fwhmMin);
fErrors(5) = (pError>=mError ? pError : mError);
delete fit;
delete pfit;
delete mfit;
}
else if(fgPeakShape->IsA() == TH1F::Class()) {
TH1F *hist = (TH1F*) fgPeakShape->Clone("hist");
Int_t bin1 = hist->FindFirstBinAbove(hist->GetMaximum()/2);
Int_t bin2 = hist->FindLastBinAbove(hist->GetMaximum()/2);
fValues(5) = hist->GetBinCenter(bin2) - hist->GetBinCenter(bin1);
fErrors(5) = 0.0;
delete hist;
}
}
#endif
AliDielectronSignalBase.h:1 AliDielectronSignalBase.h:2 AliDielectronSignalBase.h:3 AliDielectronSignalBase.h:4 AliDielectronSignalBase.h:5 AliDielectronSignalBase.h:6 AliDielectronSignalBase.h:7 AliDielectronSignalBase.h:8 AliDielectronSignalBase.h:9 AliDielectronSignalBase.h:10 AliDielectronSignalBase.h:11 AliDielectronSignalBase.h:12 AliDielectronSignalBase.h:13 AliDielectronSignalBase.h:14 AliDielectronSignalBase.h:15 AliDielectronSignalBase.h:16 AliDielectronSignalBase.h:17 AliDielectronSignalBase.h:18 AliDielectronSignalBase.h:19 AliDielectronSignalBase.h:20 AliDielectronSignalBase.h:21 AliDielectronSignalBase.h:22 AliDielectronSignalBase.h:23 AliDielectronSignalBase.h:24 AliDielectronSignalBase.h:25 AliDielectronSignalBase.h:26 AliDielectronSignalBase.h:27 AliDielectronSignalBase.h:28 AliDielectronSignalBase.h:29 AliDielectronSignalBase.h:30 AliDielectronSignalBase.h:31 AliDielectronSignalBase.h:32 AliDielectronSignalBase.h:33 AliDielectronSignalBase.h:34 AliDielectronSignalBase.h:35 AliDielectronSignalBase.h:36 AliDielectronSignalBase.h:37 AliDielectronSignalBase.h:38 AliDielectronSignalBase.h:39 AliDielectronSignalBase.h:40 AliDielectronSignalBase.h:41 AliDielectronSignalBase.h:42 AliDielectronSignalBase.h:43 AliDielectronSignalBase.h:44 AliDielectronSignalBase.h:45 AliDielectronSignalBase.h:46 AliDielectronSignalBase.h:47 AliDielectronSignalBase.h:48 AliDielectronSignalBase.h:49 AliDielectronSignalBase.h:50 AliDielectronSignalBase.h:51 AliDielectronSignalBase.h:52 AliDielectronSignalBase.h:53 AliDielectronSignalBase.h:54 AliDielectronSignalBase.h:55 AliDielectronSignalBase.h:56 AliDielectronSignalBase.h:57 AliDielectronSignalBase.h:58 AliDielectronSignalBase.h:59 AliDielectronSignalBase.h:60 AliDielectronSignalBase.h:61 AliDielectronSignalBase.h:62 AliDielectronSignalBase.h:63 AliDielectronSignalBase.h:64 AliDielectronSignalBase.h:65 AliDielectronSignalBase.h:66 AliDielectronSignalBase.h:67 AliDielectronSignalBase.h:68 AliDielectronSignalBase.h:69 AliDielectronSignalBase.h:70 AliDielectronSignalBase.h:71 AliDielectronSignalBase.h:72 AliDielectronSignalBase.h:73 AliDielectronSignalBase.h:74 AliDielectronSignalBase.h:75 AliDielectronSignalBase.h:76 AliDielectronSignalBase.h:77 AliDielectronSignalBase.h:78 AliDielectronSignalBase.h:79 AliDielectronSignalBase.h:80 AliDielectronSignalBase.h:81 AliDielectronSignalBase.h:82 AliDielectronSignalBase.h:83 AliDielectronSignalBase.h:84 AliDielectronSignalBase.h:85 AliDielectronSignalBase.h:86 AliDielectronSignalBase.h:87 AliDielectronSignalBase.h:88 AliDielectronSignalBase.h:89 AliDielectronSignalBase.h:90 AliDielectronSignalBase.h:91 AliDielectronSignalBase.h:92 AliDielectronSignalBase.h:93 AliDielectronSignalBase.h:94 AliDielectronSignalBase.h:95 AliDielectronSignalBase.h:96 AliDielectronSignalBase.h:97 AliDielectronSignalBase.h:98 AliDielectronSignalBase.h:99 AliDielectronSignalBase.h:100 AliDielectronSignalBase.h:101 AliDielectronSignalBase.h:102 AliDielectronSignalBase.h:103 AliDielectronSignalBase.h:104 AliDielectronSignalBase.h:105 AliDielectronSignalBase.h:106 AliDielectronSignalBase.h:107 AliDielectronSignalBase.h:108 AliDielectronSignalBase.h:109 AliDielectronSignalBase.h:110 AliDielectronSignalBase.h:111 AliDielectronSignalBase.h:112 AliDielectronSignalBase.h:113 AliDielectronSignalBase.h:114 AliDielectronSignalBase.h:115 AliDielectronSignalBase.h:116 AliDielectronSignalBase.h:117 AliDielectronSignalBase.h:118 AliDielectronSignalBase.h:119 AliDielectronSignalBase.h:120 AliDielectronSignalBase.h:121 AliDielectronSignalBase.h:122 AliDielectronSignalBase.h:123 AliDielectronSignalBase.h:124 AliDielectronSignalBase.h:125 AliDielectronSignalBase.h:126 AliDielectronSignalBase.h:127 AliDielectronSignalBase.h:128 AliDielectronSignalBase.h:129 AliDielectronSignalBase.h:130 AliDielectronSignalBase.h:131 AliDielectronSignalBase.h:132 AliDielectronSignalBase.h:133 AliDielectronSignalBase.h:134 AliDielectronSignalBase.h:135 AliDielectronSignalBase.h:136 AliDielectronSignalBase.h:137 AliDielectronSignalBase.h:138 AliDielectronSignalBase.h:139 AliDielectronSignalBase.h:140 AliDielectronSignalBase.h:141 AliDielectronSignalBase.h:142 AliDielectronSignalBase.h:143 AliDielectronSignalBase.h:144 AliDielectronSignalBase.h:145 AliDielectronSignalBase.h:146 AliDielectronSignalBase.h:147 AliDielectronSignalBase.h:148 AliDielectronSignalBase.h:149 AliDielectronSignalBase.h:150 AliDielectronSignalBase.h:151 AliDielectronSignalBase.h:152 AliDielectronSignalBase.h:153 AliDielectronSignalBase.h:154 AliDielectronSignalBase.h:155 AliDielectronSignalBase.h:156 AliDielectronSignalBase.h:157 AliDielectronSignalBase.h:158 AliDielectronSignalBase.h:159 AliDielectronSignalBase.h:160 AliDielectronSignalBase.h:161 AliDielectronSignalBase.h:162 AliDielectronSignalBase.h:163 AliDielectronSignalBase.h:164 AliDielectronSignalBase.h:165 AliDielectronSignalBase.h:166 AliDielectronSignalBase.h:167 AliDielectronSignalBase.h:168 AliDielectronSignalBase.h:169 AliDielectronSignalBase.h:170 AliDielectronSignalBase.h:171 AliDielectronSignalBase.h:172 AliDielectronSignalBase.h:173 AliDielectronSignalBase.h:174 AliDielectronSignalBase.h:175 AliDielectronSignalBase.h:176 AliDielectronSignalBase.h:177 AliDielectronSignalBase.h:178 AliDielectronSignalBase.h:179 AliDielectronSignalBase.h:180 AliDielectronSignalBase.h:181 AliDielectronSignalBase.h:182 AliDielectronSignalBase.h:183 AliDielectronSignalBase.h:184 AliDielectronSignalBase.h:185 AliDielectronSignalBase.h:186 AliDielectronSignalBase.h:187 AliDielectronSignalBase.h:188 AliDielectronSignalBase.h:189 AliDielectronSignalBase.h:190 AliDielectronSignalBase.h:191 AliDielectronSignalBase.h:192 AliDielectronSignalBase.h:193 AliDielectronSignalBase.h:194 AliDielectronSignalBase.h:195 AliDielectronSignalBase.h:196 AliDielectronSignalBase.h:197 AliDielectronSignalBase.h:198 AliDielectronSignalBase.h:199 AliDielectronSignalBase.h:200 AliDielectronSignalBase.h:201 AliDielectronSignalBase.h:202 AliDielectronSignalBase.h:203 AliDielectronSignalBase.h:204 AliDielectronSignalBase.h:205 AliDielectronSignalBase.h:206 AliDielectronSignalBase.h:207 AliDielectronSignalBase.h:208 AliDielectronSignalBase.h:209 AliDielectronSignalBase.h:210 AliDielectronSignalBase.h:211 AliDielectronSignalBase.h:212 AliDielectronSignalBase.h:213 AliDielectronSignalBase.h:214 AliDielectronSignalBase.h:215 AliDielectronSignalBase.h:216 AliDielectronSignalBase.h:217 AliDielectronSignalBase.h:218 AliDielectronSignalBase.h:219 AliDielectronSignalBase.h:220 AliDielectronSignalBase.h:221 AliDielectronSignalBase.h:222 AliDielectronSignalBase.h:223 AliDielectronSignalBase.h:224 AliDielectronSignalBase.h:225 AliDielectronSignalBase.h:226 AliDielectronSignalBase.h:227 AliDielectronSignalBase.h:228 AliDielectronSignalBase.h:229 AliDielectronSignalBase.h:230 AliDielectronSignalBase.h:231 AliDielectronSignalBase.h:232 AliDielectronSignalBase.h:233