#include "AliDielectronSignalMC.h"
#include "AliDielectronMixingHandler.h"
#include "AliDielectronV0Cuts.h"
+#include "AliDielectronPID.h"
#include "AliDielectron.h"
TNamed("AliDielectron","AliDielectron"),
fCutQA(kFALSE),
fQAmonitor(0x0),
+ fPostPIDCntrdCorr(0x0),
+ fPostPIDWdthCorr(0x0),
fEventFilter("EventFilter"),
fTrackFilter("TrackFilter"),
fPairPreFilter("PairPreFilter"),
TNamed(name,title),
fCutQA(kFALSE),
fQAmonitor(0x0),
+ fPostPIDCntrdCorr(0x0),
+ fPostPIDWdthCorr(0x0),
fEventFilter("EventFilter"),
fTrackFilter("TrackFilter"),
fPairPreFilter("PairPreFilter"),
// Default destructor
//
if (fQAmonitor) delete fQAmonitor;
+ if (fPostPIDCntrdCorr) delete fPostPIDCntrdCorr;
+ if (fPostPIDWdthCorr) delete fPostPIDWdthCorr;
if (fHistos) delete fHistos;
if (fPairCandidates) delete fPairCandidates;
if (fDebugTree) delete fDebugTree;
fTrackRotator->SetPdgLegs(fPdgLeg1,fPdgLeg2);
}
if (fDebugTree) fDebugTree->SetDielectron(this);
- if(fEstimatorFilename.Contains(".root")) AliDielectronVarManager::InitEstimatorAvg(fEstimatorFilename.Data());
+
+ TString allfiles = fEstimatorFilename;
+ allfiles+=fTRDpidCorrectionFilename;
+ allfiles+=fVZEROCalibrationFilename;
+ allfiles+=fVZERORecenteringFilename;
+ allfiles+=fEffMapFilename;
+ if(allfiles.Contains("alien://")) TGrid::Connect("alien://",0,0,"t");
+
+ if(fEstimatorFilename.Contains(".root")) AliDielectronVarManager::InitEstimatorAvg(fEstimatorFilename.Data());
if(fTRDpidCorrectionFilename.Contains(".root")) AliDielectronVarManager::InitTRDpidEffHistograms(fTRDpidCorrectionFilename.Data());
if(fVZEROCalibrationFilename.Contains(".root")) AliDielectronVarManager::SetVZEROCalibrationFile(fVZEROCalibrationFilename.Data());
if(fVZERORecenteringFilename.Contains(".root")) AliDielectronVarManager::SetVZERORecenteringFile(fVZERORecenteringFilename.Data());
- if(fEffMapFilename.Contains(".root")) {
- if(fEffMapFilename.Contains("alien://")) TGrid::Connect("alien://",0,0,"t");
- AliDielectronVarManager::InitEffMap(fEffMapFilename.Data());
- }
+ if(fEffMapFilename.Contains(".root")) AliDielectronVarManager::InitEffMap(fEffMapFilename.Data());
+
if (fMixing) fMixing->Init(this);
if (fHistoArray) {
fHistoArray->Init();
}
+ if(fPostPIDCntrdCorr) AliDielectronPID::SetCentroidCorrFunction(fPostPIDCntrdCorr);
+ if(fPostPIDWdthCorr) AliDielectronPID::SetWidthCorrFunction(fPostPIDWdthCorr);
+
if (fCutQA) {
fQAmonitor = new AliDielectronCutQA(Form("QAcuts_%s",GetName()),"QAcuts");
fQAmonitor->AddTrackFilter(&fTrackFilter);
} //loop: MCsignals
}
+
+//______________________________________________
+void AliDielectron::SetCentroidCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary, UInt_t varz)
+{
+ fun->GetHistogram()->GetXaxis()->SetUniqueID(varx);
+ fun->GetHistogram()->GetYaxis()->SetUniqueID(vary);
+ fun->GetHistogram()->GetZaxis()->SetUniqueID(varz);
+ fPostPIDCntrdCorr=fun;
+}
+//______________________________________________
+void AliDielectron::SetWidthCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary, UInt_t varz)
+{
+ fun->GetHistogram()->GetXaxis()->SetUniqueID(varx);
+ fun->GetHistogram()->GetYaxis()->SetUniqueID(vary);
+ fun->GetHistogram()->GetZaxis()->SetUniqueID(varz);
+ fPostPIDWdthCorr=fun;
+}
void SetVZERORecenteringFilename(const Char_t* filename) {fVZERORecenteringFilename = filename;}
void SetEffMapFilename(const Char_t* filename) {fEffMapFilename = filename;}
+ void SetCentroidCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary=0, UInt_t varz=0);
+ void SetWidthCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary=0, UInt_t varz=0);
+
void SaveDebugTree();
private:
Bool_t fCutQA; // monitor cuts
AliDielectronCutQA *fQAmonitor; // monitoring of cuts
+ TF1 *fPostPIDCntrdCorr; // post pid correction object for centroids
+ TF1 *fPostPIDWdthCorr; // post pid correction object for widths
AliAnalysisFilter fEventFilter; // Event cuts
AliAnalysisFilter fTrackFilter; // leg cuts
AliAnalysisFilter fPairPreFilter; // pair prefilter cuts
AliDielectron(const AliDielectron &c);
AliDielectron &operator=(const AliDielectron &c);
- ClassDef(AliDielectron,6);
+ ClassDef(AliDielectron,7);
};
inline void AliDielectron::InitPairCandidateArrays()
ClassImp(AliDielectronPID)
-TGraph *AliDielectronPID::fgFitCorr=0x0;
+TGraph *AliDielectronPID::fgFitCorr=0x0;
Double_t AliDielectronPID::fgCorr=0.0;
Double_t AliDielectronPID::fgCorrdEdx=1.0;
-TF1 *AliDielectronPID::fgFunEtaCorr=0x0;
-TF1 *AliDielectronPID::fgFunCntrdCorr=0x0;
-TF1 *AliDielectronPID::fgFunWdthCorr=0x0;
-TGraph *AliDielectronPID::fgdEdxRunCorr=0x0;
+TF1 *AliDielectronPID::fgFunEtaCorr=0x0;
+TF1 *AliDielectronPID::fgFunCntrdCorr=0x0;
+TF1 *AliDielectronPID::fgFunWdthCorr=0x0;
+TGraph *AliDielectronPID::fgdEdxRunCorr=0x0;
AliDielectronPID::AliDielectronPID() :
AliAnalysisCuts(),
return fgFunEtaCorr->Eval(track->Eta());
}
-//______________________________________________
-void AliDielectronPID::SetCentroidCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary, UInt_t varz)
-{
- fun->GetHistogram()->GetXaxis()->SetUniqueID(varx);
- fun->GetHistogram()->GetYaxis()->SetUniqueID(vary);
- fun->GetHistogram()->GetZaxis()->SetUniqueID(varz);
- fgFunCntrdCorr=fun;
-}
-//______________________________________________
-void AliDielectronPID::SetWidthCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary, UInt_t varz)
-{
- fun->GetHistogram()->GetXaxis()->SetUniqueID(varx);
- fun->GetHistogram()->GetYaxis()->SetUniqueID(vary);
- fun->GetHistogram()->GetZaxis()->SetUniqueID(varz);
- fgFunWdthCorr=fun;
-}
-
//______________________________________________
Double_t AliDielectronPID::GetPIDCorr(const AliVTrack *track, TF1 *fun)
{
if(dim>1) var[1] = values[fun->GetHistogram()->GetYaxis()->GetUniqueID()];
if(dim>2) var[2] = values[fun->GetHistogram()->GetZaxis()->GetUniqueID()];
Double_t corr = fun->Eval(var[0],var[1],var[2]);
- // printf(" %d-dim CORR value: %f (track %p) \n",dim,corr,track);
+ // printf("%d-dim CORR value: %f (track %p) \n",dim,corr,track);
return corr;
}
static TGraph *GetCorrGraphdEdx() { return fgdEdxRunCorr; }
static void SetEtaCorrFunction(TF1 *fun) {fgFunEtaCorr=fun;}
- static void SetCentroidCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary=0, UInt_t varz=0);
- static void SetWidthCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary=0, UInt_t varz=0);
+ static void SetCentroidCorrFunction(TF1 *fun) { fgFunCntrdCorr=fun; }
+ static void SetWidthCorrFunction(TF1 *fun) { fgFunWdthCorr=fun; }
static TF1* GetEtaCorrFunction() { return fgFunEtaCorr; }
static TF1* GetCentroidCorrFunction() { return fgFunCntrdCorr; }
static TF1* GetWidthCorrFunction() { return fgFunWdthCorr; }
static Double_t fgCorrdEdx; //!dEdx correction value for current run. Set if fgFitCorr is set and SetCorrVal(run)
// was called
static TF1 *fgFunEtaCorr; //function for eta correction of electron sigma
- static TF1 *fgFunCntrdCorr; //!function for correction of electron sigma (centroid)
- static TF1 *fgFunWdthCorr; //!function for correction of electron sigma (width)
+ static TF1 *fgFunCntrdCorr; //function for correction of electron sigma (centroid)
+ static TF1 *fgFunWdthCorr; //function for correction of electron sigma (width)
static TGraph *fgdEdxRunCorr; //run by run correction for dEdx
static Double_t GetPIDCorr(const AliVTrack *track, TF1 *fun);