#include <AliMCEvent.h>
#include <AliVVertex.h>
#include <AliESDVertex.h>
+#include <AliAODVertex.h>
#include <AliEventplane.h>
#include <AliESDVZERO.h>
kNclsSFracTPC, // fraction of shared clusters assigned in the TPC
kNclsTPCiter1, // number of clusters assigned in the TPC after first iteration
kNFclsTPC, // number of findable clusters in the TPC
- kNFclsTPCr, // number of findable clusters in the TPC with more robust definition
+ kNFclsTPCr, // number of findable clusters(crossed rows) in the TPC with more robust definition
kNFclsTPCrFrac, // number of found/findable clusters in the TPC with more robust definition
kNFclsTPCfCross, // fraction crossed rows/findable clusters in the TPC, as done in AliESDtrackCuts
kTPCsignalN, // number of points used for dEdx
kTPCclsDiff, // TPC cluster difference
kTPCclsSegments, // TPC cluster segments
kTrackStatus, // track status bits
-
+ kFilterBit, // AOD filter bits
+
kNclsTRD, // number of clusters assigned in the TRD
kTRDntracklets, // number of TRD tracklets used for tracking/PID TODO: correct getter
kTRDpidQuality, // number of TRD tracklets used for PID
kTRDchi2, // chi2 in TRD
kTRDprobEle, // TRD electron pid probability
kTRDprobPio, // TRD electron pid probability
+ kTRDprob2DEle, // TRD electron pid probability 2D LQ
+ 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
kPdgCode, // PDG code
kPdgCodeMother,
kPdgCodeGrandMother, // PDG code of the grandmother
+ kHasCocktailMother, // true if particle is added via MC generator cocktail (AliDielectronSignal::kDirect)
+ kHasCocktailGrandMother, // true if particle is added via MC generator cocktail (AliDielectronSignal::kDirect)
kNumberOfDaughters, // number of daughters
kHaveSameMother, // check that particles have the same mother (MC)
kIsJpsiPrimary, // check if the particle is primary (MC)
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
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
+ 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
+
kLegDist, // distance of the legs
kLegDistXY, // distance of the legs in XY
kDeltaEta, // Absolute value of Delta Eta for the legs
kXRes, // primary vertex x-resolution
kYRes, // primary vertex y-resolution
kZRes, // primary vertex z-resolution
+ kPhiMaxPt, // phi angle of the track with maximum pt
+ kMaxPt, // track with maximum pt
//// v0 reaction plane quantities from AliEPSelectionTaks
kv0ArpH2, // VZERO-A reaction plane of the Q vector for 2nd harmonic
kv0CyH2, // VZERO-C y-component of the Q vector for 2nd harmonic
kv0ACxH2, // VZERO-AC x-component of the Q vector for 2nd harmonic
kv0ACyH2, // VZERO-AC y-component of the Q vector for 2nd harmonic
+ kv0AmagH2, // VZERO-A the Q vectors magnitude for 2nd harmonic
+ kv0CmagH2, // VZERO-A the Q vectors magnitude for 2nd harmonic
+ kv0ACmagH2, // VZERO-A the Q vectors magnitude for 2nd harmonic
kv0A0rpH2, // VZERO-A 1st ring 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
- 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
+ kv0Av0C0DiffH2, // V0A-ring 0 ofV0C reaction plane difference for 2nd harmonic
+ kv0Av0C3DiffH2, // V0A-ring 3 ofV0C reaction plane difference for 2nd harmonic
+ kv0Cv0A0DiffH2, // V0C-ring 0 ofV0A 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
kMultV0A, // VZERO multiplicity and ADC amplitudes
kMultV0C,
// TPC reaction plane quantities
kTPCxH2, // TPC x-component of the Q vector for 2nd harmonic (corrected)
kTPCyH2, // TPC y-component of the Q vector for 2nd harmonic (corrected)
- kTPCrpH2, // TPC reaction plane 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)
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)
kTPCxH2uc, // TPC x-component of the Q vector for 2nd harmonic (uncorrected)
kTPCyH2uc, // TPC y-component of the Q vector for 2nd harmonic (uncorrected)
- kTPCrpH2uc, // TPC reaction plane of the Q vector for 2nd harmonic (uncorrected)
+ kTPCmagH2uc, // TPC reaction plane the Q vectors magnitude for 2nd harmonic (uncorrected)
+ kTPCrpH2uc, // TPC reaction plane angle of the Q vector for 2nd harmonic (uncorrected)
kTPCsub1xH2uc, // TPC x-component of the Q vector for 2nd harmonic (uncorrected, sub event 1)
kTPCsub1yH2uc, // TPC y-component of the Q vector for 2nd harmonic (uncorrected, sub event 1)
kTPCsub1rpH2uc, // TPC reaction plane of the Q vector for 2nd harmonic (uncorrected, sub event 1)
kNTrk, // number of tracks (or tracklets) TODO: ambiguous
kTracks, // ESD tracks TODO: ambiguous
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
kNevents, // event counter
kRunNumber, // run number
kMixingBin,
+
kNMaxValues //
// TODO: (for A+A) ZDCEnergy, impact parameter, Iflag??
};
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 const AliKFVertex* GetKFVertex() {return fgKFVertex;}
- static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
-
+ static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i][0]:""; }
+ static const char* GetValueLabel(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i][1]:""; }
+ 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; }
private:
- static const char* fgkParticleNames[kNMaxValues]; //variable names
+ 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);
if(n>=threshold) values[AliDielectronVarManager::kTPCclsSegments] += 1.0;
}
values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
-
+ values[AliDielectronVarManager::kFilterBit] = 0;
values[AliDielectronVarManager::kTPCchi2Cl] = -1;
if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
values[AliDielectronVarManager::kPdgCode]=-1;
values[AliDielectronVarManager::kPdgCodeMother]=-1;
values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=0;
values[AliDielectronVarManager::kNumberOfDaughters]=-999;
AliDielectronMC *mc=AliDielectronMC::Instance();
if (mc->HasMC()){
- if (mc->GetMCTrack(particle))
+ if (mc->GetMCTrack(particle)) {
values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode();
-
+ Int_t trkLbl = mc->GetMCTrack(particle)->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect);
+ }
AliMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother
if (motherMC){
values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
+ Int_t motherLbl = motherMC->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect);
motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC
if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
values[AliDielectronVarManager::kNFclsTPCfCross]= (tpcClusFindable>0)?(particle->GetTPCClusterInfo(2,1)/tpcClusFindable):0;
values[AliDielectronVarManager::kNclsTRD] = 0;
values[AliDielectronVarManager::kTRDntracklets] = 0;
- values[AliDielectronVarManager::kTRDpidQuality] = 0;
-
- values[AliDielectronVarManager::kTPCchi2Cl] = (tpcNcls>0)?particle->Chi2perNDF()*(tpcNcls-5)/tpcNcls:999.; // it is stored as normalized to tpcNcls-5 (see AliAnalysisTaskESDfilter)
+ values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
+ values[AliDielectronVarManager::kTRDchi2] = (particle->GetTRDntrackletsPID()!=0.?particle->GetTRDchi2():-1);
+ values[AliDielectronVarManager::kTPCclsSegments] = 0.0;
+ const UChar_t threshold = 5;
+ TBits tpcClusterMap = particle->GetTPCClusterMap();
+ UChar_t n=0; UChar_t j=0;
+ for(UChar_t i=0; i<8; ++i) {
+ n=0;
+ for(j=i*20; j<(i+1)*20 && j<159; ++j) n+=tpcClusterMap.TestBitNumber(j);
+ if(n>=threshold) values[AliDielectronVarManager::kTPCclsSegments] += 1.0;
+ }
+
+ values[AliDielectronVarManager::kTPCchi2Cl] = (tpcNcls>0)?particle->Chi2perNDF()*(tpcNcls-5)/tpcNcls:-1.; // it is stored as normalized to tpcNcls-5 (see AliAnalysisTaskESDfilter)
values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
-
+ values[AliDielectronVarManager::kFilterBit] = (Double_t)particle->GetFilterMap();
+
//TRD pidProbs
//TODO: set correctly
values[AliDielectronVarManager::kTRDprobEle] = 0;
values[AliDielectronVarManager::kTRDprobPio] = 0;
- values[AliDielectronVarManager::kTRDchi2] = -1;
values[AliDielectronVarManager::kTPCsignalN] = 0;
values[AliDielectronVarManager::kTPCsignalNfrac]= 0;
-
+
// Fill AliAODTrack interface information
//
- values[AliDielectronVarManager::kV0Index0] = particle->GetProdVertex()->GetType()==AliAODVertex::kV0 ? 1 : 0;
- values[AliDielectronVarManager::kKinkIndex0] = particle->GetProdVertex()->GetType()==AliAODVertex::kKink ? 1 : 0;
+ Int_t v0Index=-1;
+ Int_t kinkIndex=-1;
+ if (particle->GetProdVertex()) {
+ v0Index = particle->GetProdVertex()->GetType()==AliAODVertex::kV0 ? 1 : 0;
+ kinkIndex = particle->GetProdVertex()->GetType()==AliAODVertex::kKink ? 1 : 0;
+ }
+ values[AliDielectronVarManager::kV0Index0] = v0Index;
+ values[AliDielectronVarManager::kKinkIndex0] = kinkIndex;
Double_t d0z0[2];
GetDCA(particle, d0z0);
values[AliDielectronVarManager::kImpactParXY] = d0z0[0];
values[AliDielectronVarManager::kImpactParZ] = d0z0[1];
- values[AliDielectronVarManager::kPIn]=0;
- values[AliDielectronVarManager::kTPCsignal]=0;
+ values[AliDielectronVarManager::kPIn] = 0.;
+ values[AliDielectronVarManager::kTPCsignal] = 0.;
+ values[AliDielectronVarManager::kTPCsignalN] = -1.;
+ values[AliDielectronVarManager::kTPCsignalNfrac] = -1.;
+ values[AliDielectronVarManager::kTPCclsDiff] = -999.;
values[AliDielectronVarManager::kTOFsignal]=0;
//values[AliDielectronVarManager::kTOFbeta]=0;
values[AliDielectronVarManager::kTPCnSigmaKao]=0;
values[AliDielectronVarManager::kTPCnSigmaPro]=0;
+ values[AliDielectronVarManager::kTOFnSigmaEle]=0;
+ values[AliDielectronVarManager::kTOFnSigmaPio]=0;
+ values[AliDielectronVarManager::kTOFnSigmaMuo]=0;
+ values[AliDielectronVarManager::kTOFnSigmaKao]=0;
+ values[AliDielectronVarManager::kTOFnSigmaPro]=0;
+
values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
values[AliDielectronVarManager::kITSLayerFirstCls] = -1.;
for (Int_t iC=0; iC<6; iC++) {
}
}
- AliAODPid *pid=particle->GetDetPid();
- if (pid){
+ AliAODPid *pid=const_cast<AliAODPid*>(particle->GetDetPid());
+ if (pid) {
+ Double_t origdEdx=pid->GetTPCsignal();
+ //overwrite signal
+ pid->SetTPCsignal(origdEdx/AliDielectronPID::GetEtaCorr(particle)/AliDielectronPID::GetCorrValdEdx());
+
Double_t mom =pid->GetTPCmomentum();
Double_t tpcSignalN=pid->GetTPCsignalN();
- values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN;
- values[AliDielectronVarManager::kTPCsignalN] = tpcNcls>0?tpcSignalN/tpcNcls:0;
- values[AliDielectronVarManager::kTPCclsDiff] = tpcSignalN-tpcNcls;
+ 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 tpcNsigmaPio=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kPion);
Double_t tpcNsigmaMuo=fgPIDResponse->NumberOfSigmasTPC(particle,AliPID::kMuon);
values[AliDielectronVarManager::kTPCnSigmaKao]=tpcNsigmaKao;
values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro;
- values[AliDielectronVarManager::kTRDntracklets] = 0;
- values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
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::kTOFsignal]=pid->GetTOFsignal();
Double32_t expt[5];
values[AliDielectronVarManager::kTOFnSigmaKao]=tofNsigmaKao;
values[AliDielectronVarManager::kTOFnSigmaPro]=tofNsigmaPro;
+ pid->SetTPCsignal(origdEdx);
}
//EMCAL PID information
values[AliDielectronVarManager::kPdgCode]=-1;
values[AliDielectronVarManager::kPdgCodeMother]=-1;
values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
-
- values[AliDielectronVarManager::kNumberOfDaughters]=-999;
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=0;
+
+ values[AliDielectronVarManager::kNumberOfDaughters]=-1;
AliDielectronMC *mc=AliDielectronMC::Instance();
if (mc->HasMC()){
- if (mc->GetMCTrack(particle))
+ if (mc->GetMCTrack(particle)) {
values[AliDielectronVarManager::kPdgCode]=mc->GetMCTrack(particle)->PdgCode();
-
+ Int_t trkLbl = mc->GetMCTrack(particle)->GetLabel();
+ // printf("trklbl %d for %p->%p \n",trkLbl,particle,mc->GetMCTrack(particle));
+ values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect);
+ }
AliAODMCParticle *motherMC=mc->GetMCTrackMother(particle); //mother
if (motherMC){
values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
-
+ Int_t motherLbl = motherMC->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect);
+
motherMC=mc->GetMCTrackMother(motherMC); //grand motherMC
if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
}
values[AliDielectronVarManager::kNclsITS] = 0;
values[AliDielectronVarManager::kITSchi2Cl] = 0;
values[AliDielectronVarManager::kNclsTPC] = 0;
- values[AliDielectronVarManager::kNclsSTPC] = 0;
- values[AliDielectronVarManager::kNclsSFracTPC] = 0;
+ values[AliDielectronVarManager::kNclsSTPC] = 0;
+ values[AliDielectronVarManager::kNclsSFracTPC] = 0;
values[AliDielectronVarManager::kNclsTPCiter1] = 0;
values[AliDielectronVarManager::kNFclsTPC] = 0;
values[AliDielectronVarManager::kNFclsTPCr] = 0;
values[AliDielectronVarManager::kTRDpidQuality] = 0;
values[AliDielectronVarManager::kTPCchi2Cl] = 0;
values[AliDielectronVarManager::kTrackStatus] = 0;
+ values[AliDielectronVarManager::kFilterBit] = 0;
values[AliDielectronVarManager::kTRDprobEle] = 0;
values[AliDielectronVarManager::kTRDprobPio] = 0;
values[AliDielectronVarManager::kTPCsignalN] = 0;
values[AliDielectronVarManager::kPdgCode] = -1;
values[AliDielectronVarManager::kPdgCodeMother] = -1;
values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
-
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=0;
+
// Fill common AliVParticle interface information
FillVarVParticle(particle, values);
// Fill AliMCParticle interface specific information
values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
+ Int_t trkLbl = particle->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect);
AliMCParticle *motherMC = mc->GetMCTrackMother(particle);
if (motherMC){
values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
+ Int_t motherLbl = motherMC->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect);
+
motherMC=mc->GetMCTrackMother(motherMC); //grand mother
if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
}
values[AliDielectronVarManager::kTRDpidQuality] = 0;
values[AliDielectronVarManager::kTPCchi2Cl] = 0;
values[AliDielectronVarManager::kTrackStatus] = 0;
+ values[AliDielectronVarManager::kFilterBit] = 0;
values[AliDielectronVarManager::kTRDprobEle] = 0;
values[AliDielectronVarManager::kTRDprobPio] = 0;
values[AliDielectronVarManager::kTPCsignalN] = 0;
values[AliDielectronVarManager::kPdgCode] = 0;
values[AliDielectronVarManager::kPdgCodeMother] = 0;
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
AliDielectronMC *mc=AliDielectronMC::Instance();
AliVParticle* mother=0x0;
values[AliDielectronVarManager::kTRDpidQuality] = 0;
values[AliDielectronVarManager::kTPCchi2Cl] = 0;
values[AliDielectronVarManager::kTrackStatus] = 0;
+ values[AliDielectronVarManager::kFilterBit] = 0;
values[AliDielectronVarManager::kTRDprobEle] = 0;
values[AliDielectronVarManager::kTRDprobPio] = 0;
values[AliDielectronVarManager::kTPCsignalN] = 0;
values[AliDielectronVarManager::kPdgCode] = -1;
values[AliDielectronVarManager::kPdgCodeMother] = -1;
values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
-
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=0;
+
// Fill common AliVParticle interface information
FillVarVParticle(particle, values);
// Fill AliAODMCParticle interface specific information
values[AliDielectronVarManager::kPdgCode] = particle->PdgCode();
+ Int_t trkLbl = particle->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailMother]=mc->CheckParticleSource(trkLbl, AliDielectronSignalMC::kDirect);
AliAODMCParticle *motherMC = mc->GetMCTrackMother(particle);
if (motherMC){
values[AliDielectronVarManager::kPdgCodeMother]=motherMC->PdgCode();
+ Int_t motherLbl = motherMC->GetLabel();
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=mc->CheckParticleSource(motherLbl, AliDielectronSignalMC::kDirect);
+
motherMC=mc->GetMCTrackMother(motherMC); //grand mother
if (motherMC) values[AliDielectronVarManager::kPdgCodeGrandMother]=motherMC->PdgCode();;
}
values[AliDielectronVarManager::kPdgCode]=-1;
values[AliDielectronVarManager::kPdgCodeMother]=-1;
values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
-
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=0;
Double_t errPseudoProperTime2 = -1;
// Fill common AliVParticle interface information
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;
Double_t px1=-9999.,py1=-9999.,pz1=-9999.;
Double_t px2=-9999.,py2=-9999.,pz2=-9999.;
Double_t e1 =-9999.,e2 =-9999.;
- Double_t feta1=-9999.,fphi1=-9999.;
- Double_t feta2=-9999.,fphi2=-9999.;
+ Double_t feta1=-9999.;//,fphi1=-9999.;
+ Double_t feta2=-9999.;//,fphi2=-9999.;
px1 = fD1.GetPx();
py1 = fD1.GetPy();
pz1 = fD1.GetPz();
feta1 = fD1.GetEta();
- fphi1 = fD1.GetPhi();
+ // fphi1 = fD1.GetPhi();
px2 = fD2.GetPx();
py2 = fD2.GetPy();
pz2 = fD2.GetPz();
feta2 = fD2.GetEta();
- fphi2 = fD2.GetPhi();
+ // fphi2 = fD2.GetPhi();
//Calculate Energy per particle by hand
e1 = TMath::Sqrt(mElectron*mElectron+px1*px1+py1*py1+pz1*pz1);
// 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::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]) );
+
+ // keep the interval [-pi,+pi]
if ( values[AliDielectronVarManager::kDeltaPhiv0ArpH2] > TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0ArpH2] -= TMath::TwoPi();
if ( values[AliDielectronVarManager::kDeltaPhiv0CrpH2] > TMath::Pi() )
if ( values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] < -1.*TMath::Pi() )
values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] += TMath::TwoPi();
-
+
AliDielectronMC *mc=AliDielectronMC::Instance();
if (mc->HasMC()){
values[AliDielectronVarManager::kIsJpsiPrimary] = mc->IsJpsiPrimary(pair);
values[AliDielectronVarManager::kHaveSameMother] = samemother ;
- // fill kPseudoProperTimeResolution
+ // fill kPseudoProperTimeResolution
values[AliDielectronVarManager::kPseudoProperTimeResolution] = -1e10;
// values[AliDielectronVarManager::kPseudoProperTimePull] = -1e10;
if(samemother && fgEvent) {
const AliMCEvent *mcevent = mc->GetMCEvent();
const AliVVertex* mcVtx = mcevent ? mcevent->GetPrimaryVertex() : 0x0;
if(motherMC && mcVtx) {
- const Double_t lxyMC = ( (motherMC->Xv() - mcVtx->GetX()) * motherMC->Px() +
+ 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 pseudoMC = lxyMC * (TDatabasePDG::Instance()->GetParticle(443)->Mass())/motherMC->Pt();
values[AliDielectronVarManager::kPseudoProperTimeResolution] = values[AliDielectronVarManager::kPseudoProperTime] - pseudoMC;
if (errPseudoProperTime2 > 0)
values[AliDielectronVarManager::kPseudoProperTimePull] = values[AliDielectronVarManager::kPseudoProperTimeResolution]/sqrt(errPseudoProperTime2);
- }
+ }
}
}
values[AliDielectronVarManager::kTRDpidQuality] = 0;
values[AliDielectronVarManager::kTPCchi2Cl] = 0;
values[AliDielectronVarManager::kTrackStatus] = 0;
+ values[AliDielectronVarManager::kFilterBit] = 0;
values[AliDielectronVarManager::kTRDprobEle] = 0;
values[AliDielectronVarManager::kTRDprobPio] = 0;
values[AliDielectronVarManager::kTPCsignalN] = 0;
values[AliDielectronVarManager::kPdgCode] = -1;
values[AliDielectronVarManager::kPdgCodeMother] = -1;
values[AliDielectronVarManager::kPdgCodeGrandMother] = -1;
-
+ values[AliDielectronVarManager::kHasCocktailMother]=0;
+ values[AliDielectronVarManager::kHasCocktailGrandMother]=0;
// if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
for (Int_t i=AliDielectronVarManager::kPairMax; i<AliDielectronVarManager::kNMaxValues; ++i)
if(fgVZERORecenteringFile.Contains(".root")) InitVZERORecenteringHistograms(event->GetRunNumber());
fgCurrentRun=event->GetRunNumber();
}
+ values[AliDielectronVarManager::kMixingBin]=0;
+
const AliVVertex *primVtx = event->GetPrimaryVertex();
values[AliDielectronVarManager::kXvPrim] = 0;
values[AliDielectronVarManager::kYvPrim] = 0;
values[AliDielectronVarManager::kZvPrim] = 0;
+ values[AliDielectronVarManager::kNVtxContrib] = 0;
// values[AliDielectronVarManager::kChi2NDF] = 0; //This is the pair value!!!
- values[AliDielectronVarManager::kNTrk] = 0;
- values[AliDielectronVarManager::kNVtxContrib] = 0;
- values[AliDielectronVarManager::kNacc] = 0;
- values[AliDielectronVarManager::kNaccTrcklts] = 0;
+ values[AliDielectronVarManager::kNTrk] = 0;
+ values[AliDielectronVarManager::kNVtxContrib] = 0;
+ values[AliDielectronVarManager::kNacc] = 0;
+ values[AliDielectronVarManager::kNaccTrcklts] = 0;
values[AliDielectronVarManager::kNaccTrcklts0916] = 0;
- values[AliDielectronVarManager::kNevents] = 0; //always fill bin 0;
-
- if (!primVtx) return;
+ 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::kYvPrim] = primVtx->GetY();
+ values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
+ values[AliDielectronVarManager::kNVtxContrib] = primVtx->GetNContributors();
+ }
+ // values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); //this is the pair value
- values[AliDielectronVarManager::kXvPrim] = primVtx->GetX();
- values[AliDielectronVarManager::kYvPrim] = primVtx->GetY();
- values[AliDielectronVarManager::kZvPrim] = primVtx->GetZ();
-// values[AliDielectronVarManager::kChi2NDF] = primVtx->GetChi2perNDF(); //this is the pair value
-
values[AliDielectronVarManager::kNTrk] = event->GetNumberOfTracks();
- values[AliDielectronVarManager::kNVtxContrib] = primVtx->GetNContributors();
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);
// values[AliDielectronVarManager::kNaccTrcklts10] = AliDielectronHelper::GetNaccTrcklts(event, 1.0);
// values[AliDielectronVarManager::kNaccTrckltsCorr] = AliDielectronHelper::GetNaccTrckltsCorrected(event, values[AliDielectronVarManager::kNaccTrcklts], values[AliDielectronVarManager::kZvPrim]);
- // TPC event plane (corrected)
+ values[AliDielectronVarManager::kPhiMaxPt] = 0;
+ values[AliDielectronVarManager::kMaxPt] = 0;
+ Double_t ptMaxEv = -1., phiptMaxEv= -1.;
+ for(Int_t itrk=0; itrk<event->GetNumberOfTracks(); itrk++) {
+ AliVParticle *part= event->GetTrack(itrk);
+ if(part->Pt() > ptMaxEv) {
+ ptMaxEv = part->Pt();
+ phiptMaxEv = part->Phi();
+ }
+ }
+ values[AliDielectronVarManager::kPhiMaxPt] = phiptMaxEv;
+ values[AliDielectronVarManager::kMaxPt] = ptMaxEv;
- // VZERO event plane quantities from the AliEPSelectionTask
+
+ // 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::kTPCxH2; ivar<=kTPCsub12DiffH2uc; ivar++) values[ivar] = 0.0; // tpc variables
+ AliEventplane ep2;
+ // VZERO
Double_t qx = 0, qy = 0;
- AliEventplane *ep = const_cast<AliVEvent*>(event)->GetEventplane();
- values[AliDielectronVarManager::kv0ACrpH2] = TVector2::Phi_mpi_pi(ep->CalculateVZEROEventPlane(event,10, 2, qx, qy));
+ values[AliDielectronVarManager::kv0ACrpH2] = TVector2::Phi_mpi_pi(ep2.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::kv0ArpH2] = TVector2::Phi_mpi_pi(ep2.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::kv0CrpH2] = TVector2::Phi_mpi_pi(ep2.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]) );
+ values[AliDielectronVarManager::kv0C0rpH2] = TVector2::Phi_mpi_pi(ep2.CalculateVZEROEventPlane(event, 0, 0, 2, qx, qy)); qx = 0, qy = 0;
+ values[AliDielectronVarManager::kv0C3rpH2] = TVector2::Phi_mpi_pi(ep2.CalculateVZEROEventPlane(event, 3, 3, 2, qx, qy)); qx = 0, qy = 0;
+ values[AliDielectronVarManager::kv0A0rpH2] = TVector2::Phi_mpi_pi(ep2.CalculateVZEROEventPlane(event, 4, 4, 2, qx, qy)); qx = 0, qy = 0;
+ values[AliDielectronVarManager::kv0A3rpH2] = TVector2::Phi_mpi_pi(ep2.CalculateVZEROEventPlane(event, 7, 7, 2, qx, qy)); qx = 0, qy = 0;
+
+ // TPC event plane quantities (uncorrected)
+ AliEventplane *ep = const_cast<AliVEvent*>(event)->GetEventplane();
+ if(ep) {
+ 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::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::kTPCsub2xH2uc] = qsub2->X();
+ values[AliDielectronVarManager::kTPCsub2yH2uc] = qsub2->Y();
+ values[AliDielectronVarManager::kTPCsub2rpH2uc] = ((TMath::Abs(qsub2->X())>1.0e-10) ? TMath::ATan2(qsub2->Y(),qsub2->X())/2.0 : 0.0);
+
+ values[AliDielectronVarManager::kTPCsub12DiffH2uc] = TMath::Cos( 2.*(values[AliDielectronVarManager::kTPCsub1rpH2uc] -
+ values[AliDielectronVarManager::kTPCsub2rpH2uc]) );
+ }
+
+ // TPC event plane quantities (corrected)
+ if(fgTPCEventPlane)
+ FillVarTPCEventPlane(fgTPCEventPlane, values);
+ } //if: eventplane
// ESD VZERO information
AliVVZERO* vzeroData = event->GetVZEROData();
values[AliDielectronVarManager::kV0YaYcH2] = values[AliDielectronVarManager::kV0AyH2]*values[AliDielectronVarManager::kV0CyH2];
values[AliDielectronVarManager::kV0XcYcH2] = values[AliDielectronVarManager::kV0CxH2]*values[AliDielectronVarManager::kV0CyH2];
- // TPC event plane quantities (uncorrected)
- AliEventplane *evplane = const_cast<AliVEvent*>(event)->GetEventplane();
- TVector2 *qstd = evplane->GetQVector(); // This is the "standard" Q-Vector
- TVector2 *qsub1 = evplane->GetQsub1();
- TVector2 *qsub2 = evplane->GetQsub2();
- if(!qstd || !qsub1 || !qsub2) return;
-
- values[AliDielectronVarManager::kTPCxH2uc] = qstd->X();
- values[AliDielectronVarManager::kTPCyH2uc] = qstd->Y();
- 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::kTPCsub2xH2uc] = qsub2->X();
- values[AliDielectronVarManager::kTPCsub2yH2uc] = qsub2->Y();
- values[AliDielectronVarManager::kTPCsub2rpH2uc] = ((TMath::Abs(qsub2->X())>1.0e-10) ? TMath::ATan2(qsub2->Y(),qsub2->X())/2.0 : 0.0);
-
- values[AliDielectronVarManager::kTPCsub12DiffH2uc] = TMath::Cos( 2.*(values[AliDielectronVarManager::kTPCsub1rpH2uc] -
- values[AliDielectronVarManager::kTPCsub2rpH2uc]) );
-
- // TPC event plane quantities (corrected)
- if(fgTPCEventPlane)
- FillVarTPCEventPlane(fgTPCEventPlane, values);
-
- // using corrected tpc quantities
+ // event plane differences used for EP resolution calculation
values[AliDielectronVarManager::kV0ATPCDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kV0ArpH2] -
values[AliDielectronVarManager::kTPCrpH2]) );
values[AliDielectronVarManager::kv0Av0CDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0ArpH2] -
values[AliDielectronVarManager::kv0CrpH2]) );
- values[AliDielectronVarManager::kMixingBin]=0;
+ 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]) );
+
+
}
inline void AliDielectronVarManager::FillVarESDEvent(const AliESDEvent *event, Double_t * const values)
values[AliDielectronVarManager::kZRes] = primVtx->GetZRes();
values[AliDielectronVarManager::kCentrality] = centralityF;
values[AliDielectronVarManager::kCentralitySPD] = centralitySPD;
-
+
+ const AliESDVertex *vtxTPC = event->GetPrimaryVertexTPC();
+ values[AliDielectronVarManager::kNVtxContribTPC] = (vtxTPC ? vtxTPC->GetNContributors() : 0);
+
// Event multiplicity estimators
Int_t nTrSPD05=0; Int_t nTrITSTPC05=0; Int_t nTrITSSA05=0;
event->EstimateMultiplicity(nTrSPD05, nTrITSTPC05, nTrITSSA05, 0.5);
{
//
// Fill event information available for histogramming into an array
- //
+ //
// Fill common AliVEvent interface information
FillVarVEvent(event, values);
// Fill AliAODEvent interface specific information
AliAODHeader *header = event->GetHeader();
-
+
Double_t centralityF=-1; Double_t centralitySPD=-1;
AliCentrality *aodCentrality = header->GetCentralityP();
if (aodCentrality) centralityF = aodCentrality->GetCentralityPercentile("V0M");
if (aodCentrality) centralitySPD = aodCentrality->GetCentralityPercentile("CL1");
values[AliDielectronVarManager::kCentrality] = centralityF;
values[AliDielectronVarManager::kCentralitySPD] = centralitySPD;
-
+
+ values[AliDielectronVarManager::kRefMult] = header->GetRefMultiplicity(); // similar to Ntrk
+ values[AliDielectronVarManager::kRefMultTPConly] = header->GetTPConlyRefMultiplicity(); // similar to Nacc
+
+ // nanoAODs (w/o AliCentrality branch) should have the VOM centrality 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();
+ //TODO: activate after new nano production
+ /*
+ values[AliDielectronVarManager::kTPCmagH2uc] = header->GetEventplaneMag();
+ values[AliDielectronVarManager::kTPCxH2uc] = TMath::Cos(header->GetEventplane())*header->GetEventplaneMag();
+ values[AliDielectronVarManager::kTPCyH2uc] = TMath::Sin(header->GetEventplane())*header->GetEventplaneMag();
+ */
+ }
+
+ const AliAODVertex *vtxtpc = GetVertex(event, AliAODVertex::kMainTPC);
+ values[AliDielectronVarManager::kNVtxContribTPC] = (vtxtpc ? vtxtpc->GetNContributors() : 0);
//const AliAODVertex *primVtx = event->GetPrimaryVertex();
}
//
// Fill TPC event plane information after correction
//
- if(!evplane) return;
- 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) return;
-
- values[AliDielectronVarManager::kTPCxH2] = qcorr->X();
- values[AliDielectronVarManager::kTPCyH2] = qcorr->Y();
- values[AliDielectronVarManager::kTPCrpH2] = ((TMath::Abs(qcorr->X())>1.0e-10) ? TMath::ATan2(qcorr->Y(),qcorr->X())/2.0 : 0.0);
-
- 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);
-
- values[AliDielectronVarManager::kTPCsub2xH2] = qcsub2->X();
- values[AliDielectronVarManager::kTPCsub2yH2] = qcsub2->Y();
- values[AliDielectronVarManager::kTPCsub2rpH2] = ((TMath::Abs(qcsub2->X())>1.0e-10) ? TMath::ATan2(qcsub2->Y(),qcsub2->X())/2.0 : 0.0);
-
- values[AliDielectronVarManager::kTPCsub12DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kTPCsub1rpH2] -
- values[AliDielectronVarManager::kTPCsub2rpH2]) );
- values[AliDielectronVarManager::kTPCsub12DiffH2Sin] = TMath::Sin( 2.*(values[AliDielectronVarManager::kTPCsub1rpH2] -
- values[AliDielectronVarManager::kTPCsub2rpH2]) );
+ if(evplane) {
+ 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) {
+
+ 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);
+
+ 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);
+
+ values[AliDielectronVarManager::kTPCsub2xH2] = qcsub2->X();
+ values[AliDielectronVarManager::kTPCsub2yH2] = qcsub2->Y();
+ values[AliDielectronVarManager::kTPCsub2rpH2] = ((TMath::Abs(qcsub2->X())>1.0e-10) ? TMath::ATan2(qcsub2->Y(),qcsub2->X())/2.0 : 0.0);
+
+ values[AliDielectronVarManager::kTPCsub12DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kTPCsub1rpH2] -
+ values[AliDielectronVarManager::kTPCsub2rpH2]) );
+ values[AliDielectronVarManager::kTPCsub12DiffH2Sin] = TMath::Sin( 2.*(values[AliDielectronVarManager::kTPCsub1rpH2] -
+ values[AliDielectronVarManager::kTPCsub2rpH2]) );
+
+ }
+ }
}
inline void AliDielectronVarManager::InitESDpid(Int_t type)
TObjArray* arr = name.Tokenize("_");
Bool_t isBplus = kTRUE;
if(name.Contains("BMINUS")) isBplus = kFALSE;
- TString centMinStr = arr->At(2)->GetName(); TString centMaxStr = arr->At(3)->GetName();
+ TString centMinStr = arr->At(2)->GetName();
+ TString centMaxStr = arr->At(3)->GetName();
+ delete arr;
if(isBplus) {
fgTRDpidEffCentRanges[idxp][2] = centMinStr.Atof();
fgTRDpidEffCentRanges[idxp][3] = centMaxStr.Atof();
Bool_t ok=kFALSE;
if(fgEvent) {
Double_t covd0z0[3];
- AliAODTrack copy(*track);
+ //AliAODTrack copy(*track);
+ AliExternalTrackParam etp; etp.CopyFromVTrack(track);
+
+ Float_t xstart = etp.GetX();
+ if(xstart>3.) {
+ d0z0[0]=-999.;
+ d0z0[1]=-999.;
+ //printf("This method can be used only for propagation inside the beam pipe \n");
+ return kFALSE;
+ }
+
+
AliAODVertex *vtx =(AliAODVertex*)(fgEvent->GetPrimaryVertex());
Double_t fBzkG = fgEvent->GetMagneticField(); // z componenent of field in kG
- ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
+ ok = etp.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
+ //ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
}
if(!ok){
d0z0[0]=-999.;
{
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)