#include <TProfile.h>
#include <TProfile2D.h>
#include <TH3D.h>
+#include <THnBase.h>
#include <TFile.h>
#include <TDatabasePDG.h>
#include <TKey.h>
#include <AliMCEvent.h>
#include <AliVVertex.h>
#include <AliESDVertex.h>
+#include <AliAODVertex.h>
#include <AliEventplane.h>
#include <AliESDVZERO.h>
#include "AliDielectronPID.h"
#include "AliDielectronHelper.h"
+#include "AliAnalysisManager.h"
+#include "AliVZEROEPSelectionTask.h"
+
class AliVEvent;
//________________________________________________________________
kTRDprob2DPio, // TRD electron pid probability 2D LQ
kTRDphi, // Phi angle of the track at the entrance of the TRD
kTRDpidEffLeg, // TRD pid efficiency from conversion electrons
+ kTRDsignal, // TRD signal
kImpactParXY, // Impact parameter in XY plane
kImpactParZ, // Impact parameter in Z
kTrackLength, // Track length
+
kPdgCode, // PDG code
kPdgCodeMother,
kPdgCodeGrandMother, // PDG code of the grandmother
kTOFsignal, // TOF signal
kTOFbeta, // TOF beta
- kTOFPIDBit, // TOF PID bit (1:set, 0:TOF not available)
+ kTOFPIDBit, // TOF PID bit (1:set, 0:TOF not available)a
+ kTOFmismProb, // and mismatchPorbability as explain in TOF-twiki
+ kTPCnSigmaEleRaw, // raw number of sigmas to the dE/dx electron line in the TPC
kTPCnSigmaEle, // number of sigmas to the dE/dx electron line in the TPC
kTPCnSigmaPio, // number of sigmas to the dE/dx pion line in the TPC
kTPCnSigmaMuo, // number of sigmas to the dE/dx muon line in the TPC
kEMCALM20, // M20 showershape parameter
kEMCALDispersion, // Dispersion paramter
+ kLegEff, // single electron efficiency
kV0Index0, // v0 index 0
kKinkIndex0, // kink index 0
kR, // distance to the origin
kOpeningAngle, // opening angle
kCosPointingAngle, // cosine of the pointing angle
+ kArmAlpha, // Armenteros-Podolanski alpha
+ kArmPt, // Armenteros-Podolanski pt
// helicity picture: Z-axis is considered the direction of the mother's 3-momentum vector
kThetaHE, // theta in mother's rest frame in the helicity picture
kPhiHE, // phi in mother's rest frame in the helicity picture
kPhiCS, // phi in mother's rest frame in Collins-Soper picture
kThetaSqCS, // squared value of kThetaCS
kPsiPair, // phi in mother's rest frame in Collins-Soper picture
- kPhivPair, // angle between ee plane and the magnetic field (can be useful for conversion rejection)
- kCos2PhiCS, // Cosine of 2*phi in mother's rest frame in the Collins-Soper picture
+ kPhivPair, // angle between ee plane and the magnetic field (can be useful for conversion rejection)
+ kPairPlaneAngle, // angle between ee plane and strong magnetic field
+ kRotPairx, //ee plane vector
+ kRotPairy, //ee plane vector
+ kRotPairz, //ee plane vector
+ kCos2PhiCS, // Cosine of 2*phi in mother's rest frame in the Collins-Soper picture
kCosTilPhiCS, // Shifted phi depending on kThetaCS
+ kCosPhiH2, // cosine of pair phi for 2nd harmonic
+ kSinPhiH2, // sinus of pair phi for 2nd harmonic
kDeltaPhiV0ArpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-A
kDeltaPhiV0CrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-C
kDeltaPhiV0ACrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-A + V0-C
kV0ArpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A
kV0CrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-C
kV0ACrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A + V0-C
+ kDeltaPhiv0ArpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-A (EPtask)
+ kDeltaPhiv0CrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-C
+ kDeltaPhiv0ACrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-AC
+ kDeltaPhiTPCrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from TPC
+ kv0ArpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A (EPtask)
+ kv0CrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-C
+ kv0ACrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A + V0-C
+ kTPCrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from TPC
+ kTPCrpH2FlowV2Sin, // sinus of v2 coefficient with respect to the 2nd order reaction plane from TPC
+
kLegDist, // distance of the legs
kLegDistXY, // distance of the legs in XY
kDeltaEta, // Absolute value of Delta Eta for the legs
kPseudoProperTimeResolution, // resolution for pseudo proper decay time (reconstructed - MC truth)
kPseudoProperTimePull, // normalizd resolution for pseudo proper time = (reco - MC truth)/dReco
kTRDpidEffPair, // TRD pid efficieny from conversion electrons
+ kMomAsymDau1, // momentum fraction of daughter1
+ kMomAsymDau2, // momentum fraction of daughter2
+ kPairEff, // pair efficiency
kPairMax, //
// Event specific variables
kXvPrim=kPairMax, // prim vertex
kPhiMaxPt, // phi angle of the track with maximum pt
kMaxPt, // track with maximum pt
- //// v0 reaction plane quantities from AliEPSelectionTaks
+ //// v0 reaction plane quantities from AliEPSelectionTaks, angles interval [-pi/2,+pi/2]
kv0ArpH2, // VZERO-A reaction plane of the Q vector for 2nd harmonic
kv0CrpH2, // reaction plane
kv0ACrpH2, // VZERO-AC reaction plane of the Q vector for 2nd harmonic
kv0A3rpH2, // VZERO-A last ring reaction plane of the Q vector for 2nd harmonic
kv0C0rpH2, // VZERO-C 1st ring reaction plane of the Q vector for 2nd harmonic
kv0C3rpH2, // VZERO-C last ring reaction plane of the Q vector for 2nd harmonic
- kDeltaPhiv0ArpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-A
- kDeltaPhiv0CrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-C
- kDeltaPhiv0ACrpH2, // Delta phi of the pair with respect to the 2nd order harmonic reaction plane from V0-AC
kv0ATPCDiffH2, // V0A-TPC reaction plane difference for 2nd harmonic
kv0CTPCDiffH2, // V0C-TPC reaction plane difference for 2nd harmonic
kv0Av0CDiffH2, // V0A-V0C reaction plane difference for 2nd harmonic
kv0Cv0A3DiffH2, // V0C-ring 3 ofV0A reaction plane difference for 2nd harmonic
kv0A0v0A3DiffH2, // V0C-ring 0 ofV0A reaction plane difference for 2nd harmonic
kv0C0v0C3DiffH2, // V0C-ring 0 ofV0A reaction plane difference for 2nd harmonic
- kv0ArpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A
- kv0CrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-C
- kv0ACrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A + V0-C
kMultV0A, // VZERO multiplicity and ADC amplitudes
kMultV0C,
kV0ATPCDiffH2, // V0A-TPC reaction plane difference for 2nd harmonic
kV0CTPCDiffH2, // V0C-TPC reaction plane difference for 2nd harmonic
kV0AV0CDiffH2, // V0A-V0C reaction plane difference for 2nd harmonic
- // TPC reaction plane quantities
+ // TPC reaction plane quantities, angle interval [-pi/2,+pi/2]
kTPCxH2, // TPC x-component of the Q vector for 2nd harmonic (corrected)
kTPCyH2, // TPC y-component of the Q vector for 2nd harmonic (corrected)
kTPCmagH2, // TPC reaction plane the Q vectors magnitude for 2nd harmonic (corrected)
kTPCrpH2, // TPC reaction plane angle of the Q vector for 2nd harmonic (corrected)
+ kCosTPCrpH2, // cosine of TPC reaction plane angle of the Q vector for 2nd harmonic (corrected)
+ kSinTPCrpH2, // sinus of TPC reaction plane angle of the Q vector for 2nd harmonic (corrected)
kTPCsub1xH2, // TPC x-component of the Q vector for 2nd harmonic (corrected, sub event 1)
kTPCsub1yH2, // TPC y-component of the Q vector for 2nd harmonic (corrected, sub event 1)
kTPCsub1rpH2, // TPC reaction plane of the Q vector for 2nd harmonic (corrected, sub event 1)
kNVtxContrib, // number of primary vertex contibutors
kNVtxContribTPC, // number of TPC vertex contibutors
kNacc, // Number of accepted tracks
+ kMatchEffITSTPC, // ruff estimate on the ITS-TPC matching efficiceny
kNaccTrcklts, // number of accepted SPD tracklets in |eta|<1.6
kNaccTrcklts0916, // number of accepted SPD tracklets in 0.9<|eta|<1.6
kNaccItsPureEsd05Corr, //
kNaccItsPureEsd10Corr, //
kNaccItsPureEsd16Corr, //
+ kRefMult, // reference multiplicity (only in AODs) should be Ntrk w/o double counts
+ kRefMultTPConly, // TPC only Reference Multiplicty (AliESDtrackCuts::GetReferenceMultiplicity(&esd, kTRUE))
kNch, // MC true number of charged particles in |eta|<1.6
kNch05, // MC true number of charged particles in |eta|<0.5
virtual ~AliDielectronVarManager();
static void Fill(const TObject* particle, Double_t * const values);
static void FillVarMCParticle2(const AliVParticle *p1, const AliVParticle *p2, Double_t * const values);
+ static void FillVarVParticle(const AliVParticle *particle, Double_t * const values);
static void InitESDpid(Int_t type=0);
static void InitAODpidUtil(Int_t type=0);
static void InitEstimatorAvg(const Char_t* filename);
static void InitTRDpidEffHistograms(const Char_t* filename);
+ static void InitEffMap(const Char_t* filename);
static void SetVZEROCalibrationFile(const Char_t* filename) {fgVZEROCalibrationFile = filename;}
static void SetVZERORecenteringFile(const Char_t* filename) {fgVZERORecenteringFile = filename;}
static Bool_t GetDCA(const AliAODTrack *track, Double_t d0z0[2]);
static void SetTPCEventPlane(AliEventplane *const evplane);
static void GetVzeroRP(const AliVEvent* event, Double_t* qvec, Int_t sideOption); // 0- V0A; 1- V0C; 2- V0A+V0C
+ static AliAODVertex* GetVertex(const AliAODEvent *event, AliAODVertex::AODVtx_t vtype);
static TProfile* GetEstimatorHistogram(Int_t period, Int_t type) {return fgMultEstimatorAvg[period][type];}
static Double_t GetTRDpidEfficiency(Int_t runNo, Double_t centrality, Double_t eta, Double_t trdPhi, Double_t pout, Double_t& effErr);
+ static Double_t GetSingleLegEff(Double_t * const values);
static const AliKFVertex* GetKFVertex() {return fgKFVertex;}
static const char* GetValueUnit(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i][2]:""; }
static UInt_t GetValueType(const char* valname);
static const Double_t* GetData() {return fgData;}
+ static AliVEvent* GetCurrentEvent() {return fgEvent;}
static Double_t GetValue(ValueTypes var) {return fgData[var];}
static void SetValue(ValueTypes var, Double_t val) { fgData[var]=val; }
static const char* fgkParticleNames[kNMaxValues][3]; //variable names
- static void FillVarVParticle(const AliVParticle *particle, Double_t * const values);
+
static void FillVarESDtrack(const AliESDtrack *particle, Double_t * const values);
static void FillVarAODTrack(const AliAODTrack *particle, Double_t * const values);
static void FillVarMCParticle(const AliMCParticle *particle, Double_t * const values);
static AliPIDResponse *fgPIDResponse; // PID response object
static AliVEvent *fgEvent; // current event pointer
- static AliEventplane *fgTPCEventPlane; // current event plane pointer
+ static AliEventplane *fgTPCEventPlane; // current event tpc plane pointer
static AliKFVertex *fgKFVertex; // kf vertex
static TProfile *fgMultEstimatorAvg[4][9]; // multiplicity estimator averages (4 periods x 9 estimators)
static Double_t fgTRDpidEffCentRanges[10][4]; // centrality ranges for the TRD pid efficiency histograms
static TH3D *fgTRDpidEff[10][4]; // TRD pid efficiencies from conversion electrons
+ static THnBase *fgEffMap; // single electron efficiencies
static TString fgVZEROCalibrationFile; // file with VZERO channel-by-channel calibrations
static TString fgVZERORecenteringFile; // file with VZERO Q-vector averages needed for event plane recentering
static TProfile2D *fgVZEROCalib[64]; // 1 histogram per VZERO channel
values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets?
values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
values[AliDielectronVarManager::kTRDchi2] = particle->GetTRDchi2();
+ values[AliDielectronVarManager::kTRDsignal] = particle->GetTRDsignal();
values[AliDielectronVarManager::kTPCclsDiff] = tpcSignalN-tpcNcls;
values[AliDielectronVarManager::kTPCclsSegments] = 0.0;
const UChar_t threshold = 5;
values[AliDielectronVarManager::kTOFbeta]=beta;
}
values[AliDielectronVarManager::kTOFPIDBit]=(particle->GetStatus()&AliESDtrack::kTOFpid? 1: 0);
+
+ values[AliDielectronVarManager::kTOFmismProb] = fgPIDResponse->GetTOFMismatchProbability(particle);
// nsigma to Electron band
// TODO: for the moment we set the bethe bloch parameters manually
// this should be changed in future!
-
- values[AliDielectronVarManager::kTPCnSigmaEle]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron)-AliDielectronPID::GetCorrVal();
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron);
+ values[AliDielectronVarManager::kTPCnSigmaEle]=(fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron)-AliDielectronPID::GetCorrVal()-AliDielectronPID::GetCntrdCorr(particle)) / AliDielectronPID::GetWdthCorr(particle);
+
values[AliDielectronVarManager::kTPCnSigmaPio]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion);
values[AliDielectronVarManager::kTPCnSigmaMuo]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon);
values[AliDielectronVarManager::kTPCnSigmaKao]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kKaon);
values[AliDielectronVarManager::kEMCALM02] = showershape[1];
values[AliDielectronVarManager::kEMCALM20] = showershape[2];
values[AliDielectronVarManager::kEMCALDispersion] = showershape[3];
-
-
+
+ values[AliDielectronVarManager::kLegEff] = GetSingleLegEff(values);
//restore TPC signal if it was changed
if (esdTrack) esdTrack->SetTPCsignal(origdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
}
values[AliDielectronVarManager::kTRDntracklets] = 0;
values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
values[AliDielectronVarManager::kTRDchi2] = (particle->GetTRDntrackletsPID()!=0.?particle->GetTRDchi2():-1);
+ values[AliDielectronVarManager::kTRDsignal] = particle->GetTRDsignal();
values[AliDielectronVarManager::kTPCclsSegments] = 0.0;
const UChar_t threshold = 5;
TBits tpcClusterMap = particle->GetTPCClusterMap();
values[AliDielectronVarManager::kTOFsignal]=0;
//values[AliDielectronVarManager::kTOFbeta]=0;
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw]=0;
values[AliDielectronVarManager::kTPCnSigmaEle]=0;
values[AliDielectronVarManager::kTPCnSigmaPio]=0;
values[AliDielectronVarManager::kTPCnSigmaMuo]=0;
values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN;
values[AliDielectronVarManager::kTPCsignalNfrac] = tpcNcls>0?tpcSignalN/tpcNcls:0;
values[AliDielectronVarManager::kTPCclsDiff] = tpcSignalN-tpcNcls;
- Double_t tpcNsigmaEle=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron);
+ Double_t tpcNsigmaEle=(fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron)-AliDielectronPID::GetCntrdCorr(particle))/AliDielectronPID::GetWdthCorr(particle);
Double_t tpcNsigmaPio=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion);
Double_t tpcNsigmaMuo=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon);
Double_t tpcNsigmaKao=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kKaon);
values[AliDielectronVarManager::kPIn]=mom;
values[AliDielectronVarManager::kTPCsignal]=pid->GetTPCsignal();
-
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw]=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kElectron);
values[AliDielectronVarManager::kTPCnSigmaEle]=tpcNsigmaEle;
values[AliDielectronVarManager::kTPCnSigmaPio]=tpcNsigmaPio;
values[AliDielectronVarManager::kTPCnSigmaMuo]=tpcNsigmaMuo;
Double_t prob[AliPID::kSPECIES];
fgPIDResponse->ComputeTRDProbability(particle,AliPID::kSPECIES,prob);
- values[AliDielectronVarManager::kTRDprobEle] = prob[AliPID::kElectron];
- values[AliDielectronVarManager::kTRDprobPio] = prob[AliPID::kPion];
- // fgPIDResponse->ComputeTRDProbability(particle,AliPID::kSPECIES,prob, AliTRDPIDResponse::kLQ2D);
- values[AliDielectronVarManager::kTRDprob2DEle] = 0.0;//prob[AliPID::kElectron];
- values[AliDielectronVarManager::kTRDprob2DPio] = 0.0;//prob[AliPID::kPion];
+ values[AliDielectronVarManager::kTRDprobEle] = prob[AliPID::kElectron];
+ values[AliDielectronVarManager::kTRDprobPio] = prob[AliPID::kPion];
+ // fgPIDResponse->ComputeTRDProbability(particle,AliPID::kSPECIES,prob, AliTRDPIDResponse::kLQ2D);
+ values[AliDielectronVarManager::kTRDprob2DEle] = prob[AliPID::kElectron];
+ values[AliDielectronVarManager::kTRDprob2DPio] = prob[AliPID::kPion];
values[AliDielectronVarManager::kTOFsignal]=pid->GetTOFsignal();
Double32_t expt[5];
values[AliDielectronVarManager::kTOFnSigmaMuo]=tofNsigmaMuo;
values[AliDielectronVarManager::kTOFnSigmaKao]=tofNsigmaKao;
values[AliDielectronVarManager::kTOFnSigmaPro]=tofNsigmaPro;
-
+
+ values[AliDielectronVarManager::kTOFmismProb] = fgPIDResponse->GetTOFMismatchProbability(particle);
+
pid->SetTPCsignal(origdEdx);
}
} //if(mc->HasMC())
values[AliDielectronVarManager::kTOFPIDBit]=(particle->GetStatus()&AliESDtrack::kTOFpid? 1: 0);
+ values[AliDielectronVarManager::kLegEff] = GetSingleLegEff(values);
}
inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *particle, Double_t * const values)
values[AliDielectronVarManager::kTPCsignal] = 0;
values[AliDielectronVarManager::kTOFsignal] = 0;
values[AliDielectronVarManager::kTOFbeta] = 0;
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw] = 0;
values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
values[AliDielectronVarManager::kPIn] = 0;
values[AliDielectronVarManager::kYsignedIn] = 0;
values[AliDielectronVarManager::kTPCsignal] = 0;
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw] = 0;
values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
values[AliDielectronVarManager::kPseudoProperTime] = -2e10;
if(mother) { // same mother
FillVarVParticle(mother, values);
- Double_t lxy = ((mother->Xv()- values[AliDielectronVarManager::kXvPrim]) * mother->Px() +
- (mother->Yv()- values[AliDielectronVarManager::kYvPrim]) * mother->Py() )/mother->Pt();
+ Double_t vtxX, vtxY, vtxZ;
+ mc->GetPrimaryVertex(vtxX,vtxY,vtxZ);
+ Double_t lxy = ((mother->Xv()- vtxX) * mother->Px() +
+ (mother->Yv()- vtxY) * mother->Py() )/mother->Pt();
values[AliDielectronVarManager::kPseudoProperTime] = lxy*(TDatabasePDG::Instance()->GetParticle(443)->Mass())/mother->Pt();
}
// AliVParticle part
values[AliDielectronVarManager::kPIn] = 0;
values[AliDielectronVarManager::kYsignedIn] = 0;
values[AliDielectronVarManager::kTPCsignal] = 0;
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw] = 0;
values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
values[AliDielectronVarManager::kDeltaPhi] = pair->DeltaPhi();
values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
values[AliDielectronVarManager::kPairType] = pair->GetType();
+ // Armenteros-Podolanski quantities
+ values[AliDielectronVarManager::kArmAlpha] = pair->GetArmAlpha();
+ values[AliDielectronVarManager::kArmPt] = pair->GetArmPt();
values[AliDielectronVarManager::kPsiPair] = fgEvent ? pair->PsiPair(fgEvent->GetMagneticField()) : -5;
values[AliDielectronVarManager::kPhivPair] = fgEvent ? pair->PhivPair(fgEvent->GetMagneticField()) : -5;
values[AliDielectronVarManager::kPsiPair] = 0.;
*/
-
-
}
//common, regardless of calculation method
- // Flow quantities
+
+ // Flow quantities
+ values[AliDielectronVarManager::kCosPhiH2] = TMath::Cos(2*values[AliDielectronVarManager::kPhi]);
+ values[AliDielectronVarManager::kSinPhiH2] = TMath::Sin(2*values[AliDielectronVarManager::kPhi]);
Double_t delta=0.0;
// v2 with respect to VZERO-A event plane
delta = values[AliDielectronVarManager::kPhi] - fgData[AliDielectronVarManager::kV0ArpH2];
// quantities using the values of AliEPSelectionTask
- values[AliDielectronVarManager::kDeltaPhiv0ArpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ArpH2];
- values[AliDielectronVarManager::kDeltaPhiv0CrpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0CrpH2];
+ values[AliDielectronVarManager::kDeltaPhiv0ArpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ArpH2];
+ values[AliDielectronVarManager::kDeltaPhiv0CrpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0CrpH2];
values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ACrpH2];
- // keep the interval [-pi,+pi]
+ values[AliDielectronVarManager::kDeltaPhiTPCrpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kTPCrpH2];
+ values[AliDielectronVarManager::kv0ACrpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ACrpH2]) );
+ values[AliDielectronVarManager::kv0ArpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ArpH2]) );
+ values[AliDielectronVarManager::kv0CrpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0CrpH2]) );
+ values[AliDielectronVarManager::kTPCrpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kTPCrpH2]) );
+ values[AliDielectronVarManager::kTPCrpH2FlowV2Sin] = TMath::Sin( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kTPCrpH2]) );
+
+
+ // keep the interval [-pi,+pi]
if ( values[AliDielectronVarManager::kDeltaPhiv0ArpH2] > TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0ArpH2] -= TMath::TwoPi();
if ( values[AliDielectronVarManager::kDeltaPhiv0CrpH2] > TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0CrpH2] -= TMath::TwoPi();
if ( values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] > TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] -= TMath::TwoPi();
+ if ( values[AliDielectronVarManager::kDeltaPhiTPCrpH2] > TMath::Pi() )
+ values[AliDielectronVarManager::kDeltaPhiTPCrpH2] -= TMath::TwoPi();
if ( values[AliDielectronVarManager::kDeltaPhiv0ArpH2] < -1.*TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0ArpH2] += TMath::TwoPi();
values[AliDielectronVarManager::kDeltaPhiv0CrpH2] += TMath::TwoPi();
if ( values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] < -1.*TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] += TMath::TwoPi();
+ if ( values[AliDielectronVarManager::kDeltaPhiTPCrpH2] < -1.*TMath::Pi() )
+ values[AliDielectronVarManager::kDeltaPhiTPCrpH2] += TMath::TwoPi();
+
+ //angle between ee plane and Mag/Reaction plane
+ values[AliDielectronVarManager::kPairPlaneAngle] = pair->PairPlaneAngle(values[AliDielectronVarManager::kv0CrpH2]);
+ //ee plane vector
+ Double_t RotPairx = 0;
+ Double_t RotPairy = 0;
+ Double_t RotPairz = 0;
+ pair->GetRotPair(RotPairx,RotPairy,RotPairz);
+ values[AliDielectronVarManager::kRotPairx]=RotPairx;
+ values[AliDielectronVarManager::kRotPairy]=RotPairy;
+ values[AliDielectronVarManager::kRotPairz]=RotPairz;
+
-
AliDielectronMC *mc=AliDielectronMC::Instance();
if (mc->HasMC()){
// values[AliDielectronVarManager::kPseudoProperTimePull] = -1e10;
if(samemother && fgEvent) {
if(pair->GetFirstDaughter()->GetLabel() > 0) {
- const AliVParticle* d1 = mc->GetMCTrackFromMCEvent(pair->GetFirstDaughter()->GetLabel());
- const AliVParticle* motherMC = mc->GetMCTrackFromMCEvent(((AliMCParticle*)d1)->GetMother());
- const AliMCEvent *mcevent = mc->GetMCEvent();
- const AliVVertex* mcVtx = mcevent ? mcevent->GetPrimaryVertex() : 0x0;
- if(motherMC && mcVtx) {
+ const AliVParticle *motherMC = 0x0;
+ if(fgEvent->IsA() == AliESDEvent::Class()) motherMC = (AliMCParticle*)mc->GetMCTrackMother((AliESDtrack*)pair->GetFirstDaughter());
+ else if(fgEvent->IsA() == AliAODEvent::Class()) motherMC = (AliAODMCParticle*)mc->GetMCTrackMother((AliAODTrack*)pair->GetFirstDaughter());
+ Double_t vtxX, vtxY, vtxZ;
+ if(motherMC && mc->GetPrimaryVertex(vtxX,vtxY,vtxZ)) {
Int_t motherLbl = motherMC->GetLabel();
values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect);
- const Double_t lxyMC = ( (motherMC->Xv() - mcVtx->GetX()) * motherMC->Px() +
- (motherMC->Yv() - mcVtx->GetY()) * motherMC->Py() ) / motherMC->Pt();
+ const Double_t lxyMC = ( (motherMC->Xv() - vtxX) * motherMC->Px() +
+ (motherMC->Yv() - vtxY) * motherMC->Py() ) / motherMC->Pt();
const Double_t pseudoMC = lxyMC * (TDatabasePDG::Instance()->GetParticle(443)->Mass())/motherMC->Pt();
values[AliDielectronVarManager::kPseudoProperTimeResolution] = values[AliDielectronVarManager::kPseudoProperTime] - pseudoMC;
if (errPseudoProperTime2 > 0)
}
}
- values[AliDielectronVarManager::kTRDpidEffPair] = 0.;
- if (fgTRDpidEff[0][0]){
- Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
- Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
- AliVParticle* leg1 = pair->GetFirstDaughter();
- AliVParticle* leg2 = pair->GetSecondDaughter();
- if (leg1 && leg2){
- Fill(leg1, valuesLeg1);
- Fill(leg2, valuesLeg2);
- values[AliDielectronVarManager::kTRDpidEffPair] = valuesLeg1[AliDielectronVarManager::kTRDpidEffLeg]*valuesLeg2[AliDielectronVarManager::kTRDpidEffLeg];
- }
- }
- }//if (mc->HasMC())
+ values[AliDielectronVarManager::kTRDpidEffPair] = 0.;
+ if (fgTRDpidEff[0][0]){
+ Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
+ Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
+ AliVParticle* leg1 = pair->GetFirstDaughter();
+ AliVParticle* leg2 = pair->GetSecondDaughter();
+ if (leg1 && leg2){
+ Fill(leg1, valuesLeg1);
+ Fill(leg2, valuesLeg2);
+ values[AliDielectronVarManager::kTRDpidEffPair] = valuesLeg1[AliDielectronVarManager::kTRDpidEffLeg]*valuesLeg2[AliDielectronVarManager::kTRDpidEffLeg];
+ }
+ }
+ }//if (mc->HasMC())
+
+ AliVParticle* leg1 = pair->GetFirstDaughter();
+ AliVParticle* leg2 = pair->GetSecondDaughter();
+ if (leg1)
+ values[AliDielectronVarManager::kMomAsymDau1] = (values[AliDielectronVarManager::kP] != 0)? leg1->P() / values[AliDielectronVarManager::kP]: 0;
+ else
+ values[AliDielectronVarManager::kMomAsymDau1] = -9999.;
+ if (leg2)
+ values[AliDielectronVarManager::kMomAsymDau2] = (values[AliDielectronVarManager::kP] != 0)? leg2->P() / values[AliDielectronVarManager::kP]: 0;
+ else
+ values[AliDielectronVarManager::kMomAsymDau2] = -9999.;
+
+ Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
+ Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
+ if (leg1 && leg2 && fgEffMap) {
+ Fill(leg1, valuesLeg1);
+ Fill(leg2, valuesLeg2);
+ values[AliDielectronVarManager::kPairEff] = valuesLeg1[AliDielectronVarManager::kLegEff] *valuesLeg2[AliDielectronVarManager::kLegEff];
+ }
}
inline void AliDielectronVarManager::FillVarKFParticle(const AliKFParticle *particle, Double_t * const values)
values[AliDielectronVarManager::kTPCsignal] = 0;
values[AliDielectronVarManager::kTOFsignal] = 0;
values[AliDielectronVarManager::kTOFbeta] = 0;
+ values[AliDielectronVarManager::kTPCnSigmaEleRaw] = 0;
values[AliDielectronVarManager::kTPCnSigmaEle] = 0;
values[AliDielectronVarManager::kTPCnSigmaPio] = 0;
values[AliDielectronVarManager::kTPCnSigmaMuo] = 0;
values[AliDielectronVarManager::kNaccTrcklts] = 0;
values[AliDielectronVarManager::kNaccTrcklts0916] = 0;
values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
+ values[AliDielectronVarManager::kRefMult] = 0;
+ values[AliDielectronVarManager::kRefMultTPConly] = 0;
if (primVtx){
values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
values[AliDielectronVarManager::kNVtxContrib] = primVtx->GetNContributors();
}
// values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); //this is the pair value
-
+
values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
values[AliDielectronVarManager::kNacc] = AliDielectronHelper::GetNacc(event);
+ values[AliDielectronVarManager::kMatchEffITSTPC] = AliDielectronHelper::GetITSTPCMatchEff(event);
values[AliDielectronVarManager::kNaccTrcklts] = AliDielectronHelper::GetNaccTrcklts(event); // etaRange = 1.6 (default)
values[AliDielectronVarManager::kNaccTrcklts0916] = AliDielectronHelper::GetNaccTrcklts(event,1.6)-AliDielectronHelper::GetNaccTrcklts(event,.9);
// values[AliDielectronVarManager::kNaccTrcklts05] = AliDielectronHelper::GetNaccTrcklts(event, 0.5);
// event plane quantities from the AliEPSelectionTask
- for(Int_t ivar=AliDielectronVarManager::kv0ArpH2; ivar<=kv0ACrpH2FlowV2; ivar++) values[ivar] = 0.0; // v0 variables
+ for(Int_t ivar=AliDielectronVarManager::kv0ArpH2; ivar<=kv0C0v0C3DiffH2; ivar++) values[ivar] = 0.0; // v0 variables
for(Int_t ivar=AliDielectronVarManager::kTPCxH2; ivar<=kTPCsub12DiffH2uc; ivar++) values[ivar] = 0.0; // tpc variables
- AliEventplane *ep = new AliEventplane();
- // VZERO
- Double_t qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0ACrpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event,10, 2, qx, qy));
- values[AliDielectronVarManager::kv0ACxH2] = qx;
- values[AliDielectronVarManager::kv0ACyH2] = qy;
- values[AliDielectronVarManager::kv0ACmagH2] = TMath::Sqrt(qx*qx+qy*qy);
- qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0ArpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event, 8, 2, qx, qy));
- values[AliDielectronVarManager::kv0AxH2] = qx;
- values[AliDielectronVarManager::kv0AyH2] = qy;
- values[AliDielectronVarManager::kv0AmagH2] = TMath::Sqrt(qx*qx+qy*qy);
- qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0CrpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event, 9, 2, qx, qy));
- values[AliDielectronVarManager::kv0CxH2] = qx;
- values[AliDielectronVarManager::kv0CyH2] = qy;
- values[AliDielectronVarManager::kv0CmagH2] = TMath::Sqrt(qx*qx+qy*qy);
- qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0C0rpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event, 0, 0, 2, qx, qy)); qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0C3rpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event, 3, 3, 2, qx, qy)); qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0A0rpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event, 4, 4, 2, qx, qy)); qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0A3rpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event, 7, 7, 2, qx, qy)); qx = 0, qy = 0;
- values[AliDielectronVarManager::kv0ACrpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ACrpH2]) );
- values[AliDielectronVarManager::kv0ArpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ArpH2]) );
- values[AliDielectronVarManager::kv0CrpH2FlowV2] = TMath::Cos( 2*(values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0CrpH2]) );
-
- // TPC event plane quantities (uncorrected)
- ep = const_cast<AliVEvent*>(event)->GetEventplane();
+
+ // ep angle interval [todo, fill]
+ AliEventplane *ep = const_cast<AliVEvent*>(event)->GetEventplane();
if(ep) {
+
+ // TPC event plane quantities (uncorrected)
TVector2 *qstd = ep->GetQVector(); // This is the "standard" Q-Vector for TPC
TVector2 *qsub1 = ep->GetQsub1(); // random subevent plane
TVector2 *qsub2 = ep->GetQsub2();
if(qstd && qsub1 && qsub2) {
- values[AliDielectronVarManager::kTPCxH2uc] = qstd->X();
- values[AliDielectronVarManager::kTPCyH2uc] = qstd->Y();
- values[AliDielectronVarManager::kTPCmagH2uc] = qstd->Mod();
- values[AliDielectronVarManager::kTPCrpH2uc] = ((TMath::Abs(qstd->X())>1.0e-10) ? TMath::ATan2(qstd->Y(),qstd->X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kTPCxH2uc] = qstd->X();
+ values[AliDielectronVarManager::kTPCyH2uc] = qstd->Y();
+ values[AliDielectronVarManager::kTPCmagH2uc] = qstd->Mod();
+ values[AliDielectronVarManager::kTPCrpH2uc] = ((TMath::Abs(qstd->X())>1.0e-10) ? TMath::ATan2(qstd->Y(),qstd->X())/2.0 : 0.0);
values[AliDielectronVarManager::kTPCsub1xH2uc] = qsub1->X();
values[AliDielectronVarManager::kTPCsub1yH2uc] = qsub1->Y();
values[AliDielectronVarManager::kTPCsub1rpH2uc] = ((TMath::Abs(qsub1->X())>1.0e-10) ? TMath::ATan2(qsub1->Y(),qsub1->X())/2.0 : 0.0);
values[AliDielectronVarManager::kTPCsub2rpH2uc]) );
}
- // TPC event plane quantities (corrected)
- if(fgTPCEventPlane)
- FillVarTPCEventPlane(fgTPCEventPlane, values);
+ // VZERO event plane
+ TVector2 qvec;
+ Double_t qx = 0, qy = 0;
+ ep->CalculateVZEROEventPlane(event,10, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0ACrpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kv0ACxH2] = qvec.X();
+ values[AliDielectronVarManager::kv0ACyH2] = qvec.Y();
+ values[AliDielectronVarManager::kv0ACmagH2] = qvec.Mod();
+ ep->CalculateVZEROEventPlane(event, 8, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0ArpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kv0AxH2] = qvec.X();
+ values[AliDielectronVarManager::kv0AyH2] = qvec.Y();
+ values[AliDielectronVarManager::kv0AmagH2] = qvec.Mod();
+ ep->CalculateVZEROEventPlane(event, 9, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0CrpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kv0CxH2] = qvec.X();
+ values[AliDielectronVarManager::kv0CyH2] = qvec.Y();
+ values[AliDielectronVarManager::kv0CmagH2] = qvec.Mod();
+ ep->CalculateVZEROEventPlane(event, 0, 0, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0C0rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ ep->CalculateVZEROEventPlane(event, 3, 3, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0C3rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ ep->CalculateVZEROEventPlane(event, 4, 4, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0A0rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ ep->CalculateVZEROEventPlane(event, 7, 7, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0A3rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
} //if: eventplane
// ESD VZERO information
values[AliDielectronVarManager::kv0ATPCDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0ArpH2] -
values[AliDielectronVarManager::kTPCrpH2]) );
-
+
values[AliDielectronVarManager::kv0CTPCDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0CrpH2] -
values[AliDielectronVarManager::kTPCrpH2]) );
AliDielectronHelper::GetNaccTrckltsCorrected(event,Double_t(nTrITSSA16),values[AliDielectronVarManager::kZvPrim],8);
}
-
+
inline void AliDielectronVarManager::FillVarAODEvent(const AliAODEvent *event, Double_t * const values)
{
//
values[AliDielectronVarManager::kCentrality] = centralityF;
values[AliDielectronVarManager::kCentralitySPD] = centralitySPD;
- // nanoAODs (w/o AliCentrality branch) should have the VOM centrality stored in the header
+ values[AliDielectronVarManager::kRefMult] = header->GetRefMultiplicity(); // similar to Ntrk
+ values[AliDielectronVarManager::kRefMultTPConly] = header->GetTPConlyRefMultiplicity(); // similar to Nacc
+
+ ///////////////////////////////////////////
+ //////////// NANO AODs ////////////////////
+ ///////////////////////////////////////////
+
+ // (w/o AliCentrality branch), VOM centrality should be stored in the header
if(!header->GetCentralityP())
values[AliDielectronVarManager::kCentrality] = header->GetCentrality();
- // nanoAODs (w/o AliEventPlane branch) should have the tpc event plane angle stored in the header
- if(!header->GetEventplaneP())
- values[AliDielectronVarManager::kTPCrpH2uc] = header->GetEventplane();
+ // (w/o AliEventPlane branch) tpc event plane stuff stored in the header
+ if(!header->GetEventplaneP()) {
+
+ // values[AliDielectronVarManager::kNTrk] = header->GetRefMultiplicity(); // overwritten datamembers in "our" nanoAODs
+ // values[AliDielectronVarManager::kNacc] = header->GetRefMultiplicityPos(); // overwritten datamembers in "our" nanoAODs
+
+ TVector2 qvec;
+ // TPC
+ qvec.Set(header->GetEventplaneQx(), header->GetEventplaneQy());
+ values[AliDielectronVarManager::kTPCxH2uc] = qvec.X();
+ values[AliDielectronVarManager::kTPCyH2uc] = qvec.Y();
+ values[AliDielectronVarManager::kTPCmagH2uc] = qvec.Mod();
+ values[AliDielectronVarManager::kTPCrpH2uc] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+
+ // VZERO
+ AliEventplane ep2;
+ // get event plane corrections from the VZERO EP selection task
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ AliVZEROEPSelectionTask *eptask = dynamic_cast<AliVZEROEPSelectionTask *>(man->GetTask("AliVZEROEPSelectionTask"));
+ if(eptask) eptask->SetEventplaneParams(&ep2,centralityF);
+ else printf("no VZERO event plane selection task added! \n");
+
+ Double_t qx = 0, qy = 0;
+ ep2.CalculateVZEROEventPlane(event,10, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0ACrpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kv0ACxH2] = qvec.X();
+ values[AliDielectronVarManager::kv0ACyH2] = qvec.Y();
+ values[AliDielectronVarManager::kv0ACmagH2] = qvec.Mod();
+ ep2.CalculateVZEROEventPlane(event, 8, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0ArpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kv0AxH2] = qvec.X();
+ values[AliDielectronVarManager::kv0AyH2] = qvec.Y();
+ values[AliDielectronVarManager::kv0AmagH2] = qvec.Mod();
+ ep2.CalculateVZEROEventPlane(event, 9, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0CrpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ values[AliDielectronVarManager::kv0CxH2] = qvec.X();
+ values[AliDielectronVarManager::kv0CyH2] = qvec.Y();
+ values[AliDielectronVarManager::kv0CmagH2] = qvec.Mod();
+ ep2.CalculateVZEROEventPlane(event, 0, 0, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0C0rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ ep2.CalculateVZEROEventPlane(event, 3, 3, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0C3rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ ep2.CalculateVZEROEventPlane(event, 4, 4, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0A0rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+ ep2.CalculateVZEROEventPlane(event, 7, 7, 2, qx, qy); qvec.Set(qx,qy);
+ values[AliDielectronVarManager::kv0A3rpH2] = ((TMath::Abs(qvec.X())>1.0e-10) ? TMath::ATan2(qvec.Y(),qvec.X())/2.0 : 0.0);
+
+ }
+
+ const AliAODVertex *vtxtpc = GetVertex(event, AliAODVertex::kMainTPC);
+ values[AliDielectronVarManager::kNVtxContribTPC] = (vtxtpc ? vtxtpc->GetNContributors() : 0);
- const AliAODVertex *vtxTPC = event->GetVertex(AliAODVertex::kMainTPC);
- values[AliDielectronVarManager::kNVtxContribTPC] = (vtxTPC ? vtxTPC->GetNContributors() : 0);
- //const AliAODVertex *primVtx = event->GetPrimaryVertex();
}
inline void AliDielectronVarManager::FillVarMCEvent(const AliMCEvent *event, Double_t * const values)
-{
+{
//
// Fill event information available for histogramming into an array
- //
-
+ //
+
// Fill common AliVEvent interface information
// FillVarVEvent(event, values);
const AliVVertex* vtx = event->GetPrimaryVertex();
TVector2 *qcorr = const_cast<AliEventplane *>(evplane)->GetQVector(); // This is the "corrected" Q-Vector
TVector2 *qcsub1 = const_cast<AliEventplane *>(evplane)->GetQsub1();
TVector2 *qcsub2 = const_cast<AliEventplane *>(evplane)->GetQsub2();
- if(qcorr && qcsub1 && qcsub2) {
-
+ if(qcorr) {
values[AliDielectronVarManager::kTPCxH2] = qcorr->X();
values[AliDielectronVarManager::kTPCyH2] = qcorr->Y();
values[AliDielectronVarManager::kTPCmagH2] = qcorr->Mod();
values[AliDielectronVarManager::kTPCrpH2] = ((TMath::Abs(qcorr->X())>1.0e-10) ? TMath::ATan2(qcorr->Y(),qcorr->X())/2.0 : 0.0);
-
+ // detector effects
+ values[AliDielectronVarManager::kCosTPCrpH2] = TMath::Cos( 2.* values[AliDielectronVarManager::kTPCrpH2] );
+ values[AliDielectronVarManager::kSinTPCrpH2] = TMath::Sin( 2.* values[AliDielectronVarManager::kTPCrpH2] );
+
+ // correlations for event plane resoultion
+ values[AliDielectronVarManager::kv0ATPCDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0ArpH2] -
+ values[AliDielectronVarManager::kTPCrpH2]) );
+ values[AliDielectronVarManager::kv0CTPCDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0CrpH2] -
+ values[AliDielectronVarManager::kTPCrpH2]) );
+ values[AliDielectronVarManager::kv0Av0CDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0ArpH2] -
+ values[AliDielectronVarManager::kv0CrpH2]) );
+ values[AliDielectronVarManager::kv0Av0C0DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0ArpH2] -
+ values[AliDielectronVarManager::kv0C0rpH2]) );
+ values[AliDielectronVarManager::kv0Av0C3DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0ArpH2] -
+ values[AliDielectronVarManager::kv0C3rpH2]) );
+ values[AliDielectronVarManager::kv0Cv0A0DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0CrpH2] -
+ values[AliDielectronVarManager::kv0A0rpH2]) );
+ values[AliDielectronVarManager::kv0Cv0A3DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0CrpH2] -
+ values[AliDielectronVarManager::kv0A3rpH2]) );
+ values[AliDielectronVarManager::kv0A0v0A3DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0A0rpH2] -
+ values[AliDielectronVarManager::kv0A3rpH2]) );
+ values[AliDielectronVarManager::kv0C0v0C3DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0C0rpH2] -
+ values[AliDielectronVarManager::kv0C3rpH2]) );
+ }
+ if(qcsub1 && qcsub2) {
values[AliDielectronVarManager::kTPCsub1xH2] = qcsub1->X();
values[AliDielectronVarManager::kTPCsub1yH2] = qcsub1->Y();
values[AliDielectronVarManager::kTPCsub1rpH2] = ((TMath::Abs(qcsub1->X())>1.0e-10) ? TMath::ATan2(qcsub1->Y(),qcsub1->X())/2.0 : 0.0);
TObjArray* arr = name.Tokenize("_");
Bool_t isBplus = kTRUE;
if(name.Contains("BMINUS")) isBplus = kFALSE;
- TString centMinStr = arr->At(2)->GetName();
+ TString centMinStr = arr->At(2)->GetName();
TString centMaxStr = arr->At(3)->GetName();
delete arr;
if(isBplus) {
}
}
+inline void AliDielectronVarManager::InitEffMap(const Char_t* filename) {
+ //
+ // init an efficiency object for on-the-fly correction calculations
+ //
+ fgEffMap=0x0;
+ TFile* file=TFile::Open(filename);
+ THnBase *hGen = (THnBase*) file->Get("hGenerated");
+ THnBase *hFnd = (THnBase*) file->Get("hFound");
+ if(!hFnd || !hGen) return;
+
+ fgEffMap = (THnBase*) hFnd->Clone("effMap");
+ fgEffMap->Divide(hFnd, hGen, 1, 1, ""); //assume uncorrelated err, otherwise give option "B"
+ if(fgEffMap) printf("[I] AliDielectronVarManager::InitEffMap eff map loaded! \n");
+}
+
+inline Double_t AliDielectronVarManager::GetSingleLegEff(Double_t * const values) {
+ //
+ // get the single leg efficiency for a given particle
+ //
+ if(!fgEffMap) return -1.;
+
+ Int_t dim=fgEffMap->GetNdimensions();
+ Int_t idx[dim];
+ for(Int_t idim=0; idim<dim; idim++) {
+ UInt_t var = GetValueType(fgEffMap->GetAxis(idim)->GetName());
+ idx[idim] = fgEffMap->GetAxis(idim)->FindBin(values[var]);
+ }
+ /* printf("bin content %f+-%f \n",fgEffMap->GetBinContent(idx), fgEffMap->GetBinError(idx)); */
+ return (fgEffMap->GetBinContent(idx));
+}
+
inline void AliDielectronVarManager::InitVZEROCalibrationHistograms(Int_t runNo) {
//
{
fgTPCEventPlane = evplane;
+ FillVarTPCEventPlane(evplane,fgData);
// for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues;++i) fgData[i]=0.;
// AliDielectronVarManager::Fill(fgEvent, fgData);
}
qvec[2] = TMath::ATan2(qvec[1],qvec[0])/2.0;
}
-
+//______________________________________________________________________________
+inline AliAODVertex* AliDielectronVarManager::GetVertex(const AliAODEvent* event, AliAODVertex::AODVtx_t vtype) {
+ // Get vertex
+ Int_t nVertices=event->GetNumberOfVertices();
+ for(Int_t iVert=0; iVert<nVertices; iVert++){
+ AliAODVertex *v=event->GetVertex(iVert);
+ // printf(" vtx %d contrib %d daughters %d \n ",v->GetType(),v->GetNContributors(), v->GetNDaughters());
+ if(v->GetType()==vtype) return v;
+ }
+ return 0;
+}
/*
inline void AliDielectronVarManager::FillValues(const TParticle *particle, Double_t *values)