#include <TFile.h>
#include <TDatabasePDG.h>
#include <TKey.h>
+#include <TBits.h>
#include <AliVEvent.h>
#include <AliESDEvent.h>
kNFclsTPC, // number of findable clusters in the TPC
kNFclsTPCr, // number of findable clusters 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
kTPCsignalNfrac, // fraction of points used for dEdx / cluster used for tracking
kTPCchi2Cl, // chi2/cl in TPC
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
+ kTRDprob1DEle, // TRD electron pid probability 1D LQ
+ kTRDprob1DPio, // TRD electron pid probability 1D LQ
+ 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
kTrackLength, // Track length
kPdgCode, // PDG code
- kPdgCodeMother, // PDG code of the mother
+ kPdgCodeMother,
kPdgCodeGrandMother, // PDG code of the grandmother
kNumberOfDaughters, // number of daughters
kHaveSameMother, // check that particles have the same mother (MC)
kEMCALnSigmaEle, // number of sigmas to the proton line in the TOF
kEMCALEoverP, // E over P from EMCAL
+ kEMCALE, // E from EMCAL
kEMCALNCells, // NCells from EMCAL
kEMCALM02, // M02 showershape parameter
kEMCALM20, // M20 showershape parameter
kEMCALDispersion, // Dispersion paramter
+ kV0Index0, // v0 index 0
kKinkIndex0, // kink index 0
kParticleMax, //
kPhiHE, // phi in mother's rest frame in the helicity picture
kThetaSqHE, // squared value of kThetaHE
kCos2PhiHE, // Cosine of 2*phi in mother's rest frame in the helicity picture
- kCosTilPhiHE, // Sin(phi) +/- Cos(phi) in mother's rest frame in the helicity picture; Sign is sign(Cos(phi))
+ kCosTilPhiHE, // Shifted phi depending on kThetaHE
// Collins-Soper picture: Z-axis is considered the direction of the vectorial difference between
// the 3-mom vectors of target and projectile beams
kThetaCS, // theta in mother's rest frame in Collins-Soper 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
- kCosTilPhiCS, // Sin(phi) +/- Cos(phi) in mother's rest frame in Collins-Soper picture; Sign is sign(Cos(phi))
+ kCosTilPhiCS, // Shifted phi depending on kThetaCS
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
kZRes, // primary vertex z-resolution
//// v0 reaction plane quantities from AliEPSelectionTaks
- 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
+ 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
+ kv0AxH2, // VZERO-A x-component of the Q vector for 2nd harmonic
+ kv0AyH2, // VZERO-A y-component of the Q vector for 2nd harmonic
+ kv0CxH2, // VZERO-C x-component 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
+ 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
static const AliKFVertex* GetKFVertex() {return fgKFVertex;}
static const char* GetValueName(Int_t i) { return (i>=0&&i<kNMaxValues)?fgkParticleNames[i]:""; }
-
+ static UInt_t GetValueType(const char* valname);
static const Double_t* GetData() {return fgData;}
static Double_t GetValue(ValueTypes var) {return fgData[var];}
Double_t tpcNclsS = particle->GetTPCnclsS();
Double_t itsNcls=particle->GetNcls(0);
Double_t tpcSignalN=particle->GetTPCsignalN();
+ Double_t tpcClusFindable=particle->GetTPCNclsF();
values[AliDielectronVarManager::kNclsITS] = itsNcls; // TODO: get rid of the plain numbers
values[AliDielectronVarManager::kNclsTPC] = tpcNcls; // TODO: get rid of the plain numbers
values[AliDielectronVarManager::kNclsSTPC] = tpcNclsS;
values[AliDielectronVarManager::kNclsSFracTPC] = tpcNcls>0?tpcNclsS/tpcNcls:0;
values[AliDielectronVarManager::kNclsTPCiter1] = particle->GetTPCNclsIter1(); // TODO: get rid of the plain numbers
- values[AliDielectronVarManager::kNFclsTPC] = particle->GetTPCNclsF();
- values[AliDielectronVarManager::kNFclsTPCr] = particle->GetTPCClusterInfo(2,1);
- values[AliDielectronVarManager::kNFclsTPCrFrac] = particle->GetTPCClusterInfo(2);
+ values[AliDielectronVarManager::kNFclsTPC] = tpcClusFindable;
+ values[AliDielectronVarManager::kNFclsTPCr] = particle->GetTPCClusterInfo(2,1);
+ values[AliDielectronVarManager::kNFclsTPCrFrac] = particle->GetTPCClusterInfo(2);
+ values[AliDielectronVarManager::kNFclsTPCfCross]= (tpcClusFindable>0)?(particle->GetTPCClusterInfo(2,1)/tpcClusFindable):0;
values[AliDielectronVarManager::kTPCsignalN] = tpcSignalN;
values[AliDielectronVarManager::kTPCsignalNfrac]= tpcNcls>0?tpcSignalN/tpcNcls:0;
values[AliDielectronVarManager::kNclsTRD] = particle->GetNcls(2); // TODO: get rid of the plain numbers
values[AliDielectronVarManager::kTRDntracklets] = particle->GetTRDntracklets(); // TODO: GetTRDtracklets/GetTRDntracklets?
values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
+ values[AliDielectronVarManager::kTRDchi2] = particle->GetTRDchi2();
values[AliDielectronVarManager::kTPCclsDiff] = tpcSignalN-tpcNcls;
+ 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::kTrackStatus] = (Double_t)particle->GetStatus();
-
+ values[AliDielectronVarManager::kFilterBit] = 0;
values[AliDielectronVarManager::kTPCchi2Cl] = -1;
if (tpcNcls>0) values[AliDielectronVarManager::kTPCchi2Cl] = particle->GetTPCchi2() / tpcNcls;
values[AliDielectronVarManager::kTRDprobEle] = pidProbs[AliPID::kElectron];
values[AliDielectronVarManager::kTRDprobPio] = pidProbs[AliPID::kPion];
+ values[AliDielectronVarManager::kV0Index0] = particle->GetV0Index(0);
values[AliDielectronVarManager::kKinkIndex0] = particle->GetKinkIndex(0);
Float_t impactParXY, impactParZ;
// values[AliDielectronVarManager::kEMCALnSigmaEle] = fgPIDResponse->NumberOfSigmasEMCAL(particle,AliPID::kElectron);
values[AliDielectronVarManager::kEMCALnSigmaEle] = fgPIDResponse->NumberOfSigmasEMCAL(particle,AliPID::kElectron,eop,showershape);
values[AliDielectronVarManager::kEMCALEoverP] = eop;
+ values[AliDielectronVarManager::kEMCALE] = eop*values[AliDielectronVarManager::kP];
values[AliDielectronVarManager::kEMCALNCells] = showershape[0];
values[AliDielectronVarManager::kEMCALM02] = showershape[1];
values[AliDielectronVarManager::kEMCALM20] = showershape[2];
//Replace with method as soon as available
TBits tpcSharedMap = particle->GetTPCSharedMap();
Double_t tpcNclsS= tpcSharedMap.CountBits(0)-tpcSharedMap.CountBits(159);
+ Double_t tpcClusFindable=particle->GetTPCNclsF();
+
// Reset AliESDtrack interface specific information
values[AliDielectronVarManager::kNclsITS] = particle->GetITSNcls();
values[AliDielectronVarManager::kITSchi2Cl] = -1;
values[AliDielectronVarManager::kNclsSTPC] = tpcNclsS;
values[AliDielectronVarManager::kNclsSFracTPC] = tpcNcls>0?tpcNclsS/tpcNcls:0;
values[AliDielectronVarManager::kNclsTPCiter1] = tpcNcls; // not really available in AOD
- values[AliDielectronVarManager::kNFclsTPC] = 0;
- values[AliDielectronVarManager::kNFclsTPCr] = 0;
- values[AliDielectronVarManager::kNFclsTPCrFrac] = 0;
+ values[AliDielectronVarManager::kNFclsTPC] = tpcClusFindable;
+ values[AliDielectronVarManager::kNFclsTPCr] = particle->GetTPCClusterInfo(2,1);
+ values[AliDielectronVarManager::kNFclsTPCrFrac] = particle->GetTPCClusterInfo(2);
+ 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::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;
Double_t d0z0[2];
values[AliDielectronVarManager::kTPCsignal]=0;
values[AliDielectronVarManager::kTOFsignal]=0;
- values[AliDielectronVarManager::kTOFbeta]=0;
+ //values[AliDielectronVarManager::kTOFbeta]=0;
values[AliDielectronVarManager::kTPCnSigmaEle]=0;
values[AliDielectronVarManager::kTPCnSigmaPio]=0;
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::kLQ1D);
+ values[AliDielectronVarManager::kTRDprob1DEle] = prob[AliPID::kElectron];
+ values[AliDielectronVarManager::kTRDprob1DPio] = 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();
- values[AliDielectronVarManager::kTOFbeta] =0;
+ Double32_t expt[5];
+ particle->GetIntegratedTimes(expt); // ps
+ Double_t l = TMath::C()* expt[0]*1e-12; // m
+ Double_t t = pid->GetTOFsignal(); // ps start time subtracted (until v5-02-Rev09)
+ AliTOFHeader* tofH=0x0; // from v5-02-Rev10 on subtract the start time
+ if(fgEvent) tofH = (AliTOFHeader*)fgEvent->GetTOFHeader();
+ if(tofH) t -= fgPIDResponse->GetTOFResponse().GetStartTime(particle->P()); // ps
+
+ if( (l < 360.e-2 || l > 800.e-2) || (t <= 0.) ) {
+ values[AliDielectronVarManager::kTOFbeta] =0;
+ }
+ else {
+ t *= 1e-12; //ps -> s
+
+ Double_t v = l / t;
+ Float_t beta = v / TMath::C();
+ values[AliDielectronVarManager::kTOFbeta]=beta;
+ }
Double_t tofNsigmaEle=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kElectron);
Double_t tofNsigmaPio=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kPion);
// values[AliDielectronVarManager::kEMCALnSigmaEle] = fgPIDResponse->NumberOfSigmasEMCAL(particle,AliPID::kElectron);
values[AliDielectronVarManager::kEMCALnSigmaEle] = fgPIDResponse->NumberOfSigmasEMCAL(particle,AliPID::kElectron,eop,showershape);
values[AliDielectronVarManager::kEMCALEoverP] = eop;
+ values[AliDielectronVarManager::kEMCALE] = eop*values[AliDielectronVarManager::kP];
values[AliDielectronVarManager::kEMCALNCells] = showershape[0];
values[AliDielectronVarManager::kEMCALM02] = showershape[1];
values[AliDielectronVarManager::kEMCALM20] = showershape[2];
values[AliDielectronVarManager::kPdgCodeMother]=-1;
values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
- values[AliDielectronVarManager::kNumberOfDaughters]=-999;
+ values[AliDielectronVarManager::kNumberOfDaughters]=-1;
AliDielectronMC *mc=AliDielectronMC::Instance();
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::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;
(mother->Yv()- values[AliDielectronVarManager::kYvPrim]) * mother->Py() )/mother->Pt();
values[AliDielectronVarManager::kPseudoProperTime] = lxy*(TDatabasePDG::Instance()->GetParticle(443)->Mass())/mother->Pt();
}
- else { // the 2 particles come from different mothers so 2-particles quantities are calculated here
- // AliVParticle part
- values[AliDielectronVarManager::kPx] = p1->Px()+p2->Px();
- values[AliDielectronVarManager::kPy] = p1->Py()+p2->Py();
- values[AliDielectronVarManager::kPz] = p1->Pz()+p2->Pz();
- values[AliDielectronVarManager::kPt] = TMath::Sqrt(values[AliDielectronVarManager::kPx]*
- values[AliDielectronVarManager::kPx]+
- values[AliDielectronVarManager::kPy]*
- values[AliDielectronVarManager::kPy]);
- values[AliDielectronVarManager::kP] = TMath::Sqrt(values[AliDielectronVarManager::kPt]*
- values[AliDielectronVarManager::kPt]+
- values[AliDielectronVarManager::kPz]*
- values[AliDielectronVarManager::kPz]);
+ // AliVParticle part
+ values[AliDielectronVarManager::kPx] = p1->Px()+p2->Px();
+ values[AliDielectronVarManager::kPy] = p1->Py()+p2->Py();
+ values[AliDielectronVarManager::kPz] = p1->Pz()+p2->Pz();
+ values[AliDielectronVarManager::kPt] = TMath::Sqrt(values[AliDielectronVarManager::kPx]*
+ values[AliDielectronVarManager::kPx]+
+ values[AliDielectronVarManager::kPy]*
+ values[AliDielectronVarManager::kPy]);
+ values[AliDielectronVarManager::kP] = TMath::Sqrt(values[AliDielectronVarManager::kPt]*
+ values[AliDielectronVarManager::kPt]+
+ values[AliDielectronVarManager::kPz]*
+ values[AliDielectronVarManager::kPz]);
- values[AliDielectronVarManager::kXv] = 0;
- values[AliDielectronVarManager::kYv] = 0;
- values[AliDielectronVarManager::kZv] = 0;
+ values[AliDielectronVarManager::kXv] = 0;
+ values[AliDielectronVarManager::kYv] = 0;
+ values[AliDielectronVarManager::kZv] = 0;
- values[AliDielectronVarManager::kOneOverPt] = (values[AliDielectronVarManager::kPt]>1.0e-6 ? 1.0/values[AliDielectronVarManager::kPt] : 0.0);
- values[AliDielectronVarManager::kPhi] = TMath::ATan2(values[AliDielectronVarManager::kPy],values[AliDielectronVarManager::kPx]);
- values[AliDielectronVarManager::kTheta] = TMath::ATan2(values[AliDielectronVarManager::kPt],values[AliDielectronVarManager::kPz]);
- values[AliDielectronVarManager::kEta] = ((values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])) : -9999.);
- values[AliDielectronVarManager::kE] = p1->E()+p2->E();
- values[AliDielectronVarManager::kY] = ((values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])) : -9999.);
- values[AliDielectronVarManager::kCharge] = p1->Charge()+p2->Charge();
-
- values[AliDielectronVarManager::kM] = TMath::Sqrt(p1->M()*p1->M()+p2->M()*p2->M()+
- 2.0*(p1->E()*p2->E()-p1->Px()*p2->Px()-p1->Py()*p2->Py()-p1->Pz()*p2->Pz()));
-
- if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
- }
+ values[AliDielectronVarManager::kOneOverPt] = (values[AliDielectronVarManager::kPt]>1.0e-6 ? 1.0/values[AliDielectronVarManager::kPt] : 0.0);
+ values[AliDielectronVarManager::kPhi] = TMath::ATan2(values[AliDielectronVarManager::kPy],values[AliDielectronVarManager::kPx]);
+ values[AliDielectronVarManager::kTheta] = TMath::ATan2(values[AliDielectronVarManager::kPt],values[AliDielectronVarManager::kPz]);
+ values[AliDielectronVarManager::kEta] = ((values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kP]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kP]-values[AliDielectronVarManager::kPz])) : -9999.);
+ values[AliDielectronVarManager::kE] = p1->E()+p2->E();
+ values[AliDielectronVarManager::kY] = ((values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])>1.0e-6 && (values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])>1.0e-6 ? 0.5*TMath::Log((values[AliDielectronVarManager::kE]+values[AliDielectronVarManager::kPz])/(values[AliDielectronVarManager::kE]-values[AliDielectronVarManager::kPz])) : -9999.);
+ values[AliDielectronVarManager::kCharge] = p1->Charge()+p2->Charge();
+
+ values[AliDielectronVarManager::kM] = p1->M()*p1->M()+p2->M()*p2->M()+
+ 2.0*(p1->E()*p2->E()-p1->Px()*p2->Px()-p1->Py()*p2->Py()-p1->Pz()*p2->Pz());
+ values[AliDielectronVarManager::kM] = (values[AliDielectronVarManager::kM]>1.0e-8 ? TMath::Sqrt(values[AliDielectronVarManager::kM]) : -1.0);
+
+ if ( fgEvent ) AliDielectronVarManager::Fill(fgEvent, values);
values[AliDielectronVarManager::kThetaHE] = AliDielectronPair::ThetaPhiCM(p1,p2,kTRUE, kTRUE);
values[AliDielectronVarManager::kPhiHE] = AliDielectronPair::ThetaPhiCM(p1,p2,kTRUE, kFALSE);
values[AliDielectronVarManager::kPhiCS] = AliDielectronPair::ThetaPhiCM(p1,p2,kFALSE, kFALSE);
values[AliDielectronVarManager::kThetaSqCS] = values[AliDielectronVarManager::kThetaCS] * values[AliDielectronVarManager::kThetaCS];
values[AliDielectronVarManager::kCos2PhiCS] = TMath::Cos(2*values[AliDielectronVarManager::kPhiCS]);
- values[AliDielectronVarManager::kCosTilPhiHE] = (TMath::Cos(values[AliDielectronVarManager::kPhiHE])>0)?(TMath::Cos(values[AliDielectronVarManager::kPhiHE]-TMath::Pi()/4.)):(TMath::Cos(values[AliDielectronVarManager::kPhiHE]-3*TMath::Pi()/4.));
- values[AliDielectronVarManager::kCosTilPhiCS] = (TMath::Cos(values[AliDielectronVarManager::kPhiCS])>0)?(TMath::Cos(values[AliDielectronVarManager::kPhiCS]-TMath::Pi()/4.)):(TMath::Cos(values[AliDielectronVarManager::kPhiCS]-3*TMath::Pi()/4.));
+ values[AliDielectronVarManager::kCosTilPhiHE] = (values[AliDielectronVarManager::kThetaHE]>0)?(TMath::Cos(values[AliDielectronVarManager::kPhiHE]-TMath::Pi()/4.)):(TMath::Cos(values[AliDielectronVarManager::kPhiHE]-3*TMath::Pi()/4.));
+ values[AliDielectronVarManager::kCosTilPhiCS] = (values[AliDielectronVarManager::kThetaCS]>0)?(TMath::Cos(values[AliDielectronVarManager::kPhiCS]-TMath::Pi()/4.)):(TMath::Cos(values[AliDielectronVarManager::kPhiCS]-3*TMath::Pi()/4.));
}
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::kPdgCodeMother]=-1;
values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
+
+ Double_t errPseudoProperTime2 = -1;
// Fill common AliVParticle interface information
FillVarVParticle(pair, values);
values[AliDielectronVarManager::kPhiHE] = phiHE;
values[AliDielectronVarManager::kThetaSqHE] = thetaHE * thetaHE;
values[AliDielectronVarManager::kCos2PhiHE] = TMath::Cos(2.0*phiHE);
- values[AliDielectronVarManager::kCosTilPhiHE] = (TMath::Cos(phiHE)>0)?(TMath::Cos(phiHE-TMath::Pi()/4.)):(TMath::Cos(phiHE-3*TMath::Pi()/4.));
+ values[AliDielectronVarManager::kCosTilPhiHE] = (thetaHE>0)?(TMath::Cos(phiHE-TMath::Pi()/4.)):(TMath::Cos(phiHE-3*TMath::Pi()/4.));
values[AliDielectronVarManager::kThetaCS] = thetaCS;
values[AliDielectronVarManager::kPhiCS] = phiCS;
values[AliDielectronVarManager::kThetaSqCS] = thetaCS * thetaCS;
values[AliDielectronVarManager::kCos2PhiCS] = TMath::Cos(2.0*phiCS);
- values[AliDielectronVarManager::kCosTilPhiCS] = (TMath::Cos(phiCS)>0)?(TMath::Cos(phiCS-TMath::Pi()/4.)):(TMath::Cos(phiCS-3*TMath::Pi()/4.));
+ values[AliDielectronVarManager::kCosTilPhiCS] = (thetaCS>0)?(TMath::Cos(phiCS-TMath::Pi()/4.)):(TMath::Cos(phiCS-3*TMath::Pi()/4.));
values[AliDielectronVarManager::kLegDist] = pair->DistanceDaughters();
values[AliDielectronVarManager::kLegDistXY] = pair->DistanceDaughtersXY();
values[AliDielectronVarManager::kDeltaEta] = pair->DeltaEta();
values[AliDielectronVarManager::kMerr] = kfPair.GetErrMass()>1e-30&&kfPair.GetMass()>1e-30?kfPair.GetErrMass()/kfPair.GetMass():1000000;
values[AliDielectronVarManager::kPairType] = pair->GetType();
- Double_t errPseudoProperTime2 = -1;
values[AliDielectronVarManager::kPsiPair] = fgEvent ? pair->PsiPair(fgEvent->GetMagneticField()) : -5;
+ values[AliDielectronVarManager::kPhivPair] = fgEvent ? pair->PhivPair(fgEvent->GetMagneticField()) : -5;
values[AliDielectronVarManager::kPseudoProperTime] = fgEvent ? kfPair.GetPseudoProperDecayTime(*(fgEvent->GetPrimaryVertex()), TDatabasePDG::Instance()->GetParticle(443)->Mass(), &errPseudoProperTime2 ) : -1e10;
// values[AliDielectronVarManager::kPseudoProperTime] = fgEvent ? pair->GetPseudoProperTime(fgEvent->GetPrimaryVertex()): -1e10;
values[AliDielectronVarManager::kPseudoProperTimeErr] = (errPseudoProperTime2 > 0) ? TMath::Sqrt(errPseudoProperTime2) : -1e10;
- // Flow quantities
+
+ if (!(pair->GetKFUsage())) {
+ //if KF Pairing is not enabled, overwrite values that can be easily derived from legs
+ //use the INDIVIDUAL KF particles as source, which should be a copy of the corresponding properties
+ //the ESDtrack, the reference to the ESDtrack is not (always) accessible in Mixing, while KF
+ //particles are copied in the Pair-Object
+ static const Double_t mElectron = AliPID::ParticleMass(AliPID::kElectron); // MeV
+
+ const AliKFParticle& fD1 = pair->GetKFFirstDaughter();
+ const AliKFParticle& fD2 = pair->GetKFSecondDaughter();
+
+ //Define local buffer variables for leg properties
+ 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.;
+
+ px1 = fD1.GetPx();
+ py1 = fD1.GetPy();
+ pz1 = fD1.GetPz();
+ feta1 = fD1.GetEta();
+ fphi1 = fD1.GetPhi();
+
+ px2 = fD2.GetPx();
+ py2 = fD2.GetPy();
+ pz2 = fD2.GetPz();
+ feta2 = fD2.GetEta();
+ fphi2 = fD2.GetPhi();
+
+ //Calculate Energy per particle by hand
+ e1 = TMath::Sqrt(mElectron*mElectron+px1*px1+py1*py1+pz1*pz1);
+ e2 = TMath::Sqrt(mElectron*mElectron+px2*px2+py2*py2+pz2*pz2);
+
+ //Now Create TLorentzVector:
+ TLorentzVector lv1,lv2;
+ lv1.SetPxPyPzE(px1,py1,pz1,e1);
+ lv2.SetPxPyPzE(px2,py2,pz2,e2);
+
+ values[AliDielectronVarManager::kPx] = (lv1+lv2).Px();
+ values[AliDielectronVarManager::kPy] = (lv1+lv2).Py();
+ values[AliDielectronVarManager::kPz] = (lv1+lv2).Pz();
+
+ values[AliDielectronVarManager::kPt] = (lv1+lv2).Pt();
+
+ values[AliDielectronVarManager::kP] = (lv1+lv2).P();
+
+ //Not overwritten, could take event vertex in next iteration
+ values[AliDielectronVarManager::kXv] = (lv1+lv2).X();
+ values[AliDielectronVarManager::kYv] = (lv1+lv2).Y();
+ values[AliDielectronVarManager::kZv] = (lv1+lv2).Z();
+
+ values[AliDielectronVarManager::kE] = (lv1+lv2).E();
+
+
+ values[AliDielectronVarManager::kM] = (lv1+lv2).M();
+
+ values[AliDielectronVarManager::kOpeningAngle] = lv1.Angle(lv2.Vect());
+
+ values[AliDielectronVarManager::kOneOverPt] = (values[AliDielectronVarManager::kPt]>0. ? 1./values[AliDielectronVarManager::kPt] : -9999.);
+ values[AliDielectronVarManager::kPhi] = (lv1+lv2).Phi();
+ values[AliDielectronVarManager::kEta] = (lv1+lv2).Eta();
+
+ values[AliDielectronVarManager::kY] = (lv1+lv2).Rapidity();
+
+ for (Int_t i=AliDielectronVarManager::kPairMax; i<AliDielectronVarManager::kNMaxValues; ++i)
+ values[i]=fgData[i];
+
+ // Fill AliDielectronPair specific information
+ values[AliDielectronVarManager::kDeltaEta] = TMath::Abs(feta1 -feta2 );
+ values[AliDielectronVarManager::kDeltaPhi] = lv1.DeltaPhi(lv2);
+ values[AliDielectronVarManager::kPairType] = pair->GetType();
+
+ /*
+ //Also not overwritten, still coming from KF particle
+ //where needed to be replaced by independent determination
+ values[AliDielectronVarManager::kCharge] = 0.;
+ values[AliDielectronVarManager::kPdgCode] = 0.;
+ values[AliDielectronVarManager::kChi2NDF] = 0.;
+ values[AliDielectronVarManager::kDecayLength] = 0.;
+ values[AliDielectronVarManager::kR] = 0.;
+ values[AliDielectronVarManager::kCosPointingAngle] = 0.;
+ values[AliDielectronVarManager::kThetaHE] = 0.;
+ values[AliDielectronVarManager::kPhiHE] = 0.;
+ values[AliDielectronVarManager::kThetaSqHE] = 0.;
+ values[AliDielectronVarManager::kCos2PhiHE] = 0.;
+ values[AliDielectronVarManager::kCosTilPhiHE] = 0.;
+ values[AliDielectronVarManager::kThetaCS] = 0.;
+ values[AliDielectronVarManager::kPhiCS] = 0.;
+ values[AliDielectronVarManager::kThetaSqCS] = 0.;
+ values[AliDielectronVarManager::kCos2PhiCS] = 0.;
+ values[AliDielectronVarManager::kCosTilPhiCS] = 0.;
+ values[AliDielectronVarManager::kLegDist] = 0.;
+ values[AliDielectronVarManager::kLegDistXY] = 0.;
+ values[AliDielectronVarManager::kMerr] = 0.;
+ values[AliDielectronVarManager::kPseudoProperTime] = 0.;
+ values[AliDielectronVarManager::kPseudoProperTimeErr] = 0.;
+ //Fill in Taku's PhiV?
+ values[AliDielectronVarManager::kPsiPair] = 0.;
+
+ */
+
+
+ }
+ //common, regardless of calculation method
+ // Flow quantities
Double_t delta=0.0;
// v2 with respect to VZERO-A event plane
delta = values[AliDielectronVarManager::kPhi] - fgData[AliDielectronVarManager::kV0ArpH2];
values[AliDielectronVarManager::kV0ACrpH2FlowV2] = TMath::Cos(2.0*delta); // 2nd harmonic flow coefficient
values[AliDielectronVarManager::kDeltaPhiV0ACrpH2] = delta;
+
+ // 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::kDeltaPhiv0ACrpH2] = values[AliDielectronVarManager::kPhi] - values[AliDielectronVarManager::kv0ACrpH2];
+ // 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::kDeltaPhiv0ArpH2] < -1.*TMath::Pi() )
+ values[AliDielectronVarManager::kDeltaPhiv0ArpH2] += TMath::TwoPi();
+ if ( values[AliDielectronVarManager::kDeltaPhiv0CrpH2] < -1.*TMath::Pi() )
+ values[AliDielectronVarManager::kDeltaPhiv0CrpH2] += TMath::TwoPi();
+ if ( values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] < -1.*TMath::Pi() )
+ values[AliDielectronVarManager::kDeltaPhiv0ACrpH2] += TMath::TwoPi();
+
AliDielectronMC *mc=AliDielectronMC::Instance();
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::kNaccTrcklts10] = AliDielectronHelper::GetNaccTrcklts(event, 1.0);
// values[AliDielectronVarManager::kNaccTrckltsCorr] = AliDielectronHelper::GetNaccTrckltsCorrected(event, values[AliDielectronVarManager::kNaccTrcklts], values[AliDielectronVarManager::kZvPrim]);
- // TPC event plane (corrected)
- // VZERO event plane quantities from the AliEPSelectionTask
- AliEventplane *ep = const_cast<AliVEvent*>(event)->GetEventplane();
- values[AliDielectronVarManager::kv0ACrpH2] = TVector2::Phi_mpi_pi(ep->GetEventplane("V0", event, 2));
- values[AliDielectronVarManager::kv0ArpH2] = TVector2::Phi_mpi_pi(ep->GetEventplane("V0A",event, 2));
- values[AliDielectronVarManager::kv0CrpH2] = TVector2::Phi_mpi_pi(ep->GetEventplane("V0C",event, 2));
+ // 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 *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;
+ 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;
+ 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;
+ 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();
+ 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::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::kMultV0A] = 0.0;
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]) );
-
- // using corrected tpc quantities
+
+ // event plane differences used for EP resolution calculation
values[AliDielectronVarManager::kV0ATPCDiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kV0ArpH2] -
values[AliDielectronVarManager::kTPCrpH2]) );
//
// 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::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)
{
return kTRUE;
}
- Double_t covd0z0[3];
- AliAODTrack copy(*track);
- AliAODVertex *vtx =(AliAODVertex*)(fgEvent->GetPrimaryVertex());
- Double_t fBzkG = fgEvent->GetMagneticField(); // z componenent of field in kG
- Bool_t ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
+ Bool_t ok=kFALSE;
+ if(fgEvent) {
+ Double_t covd0z0[3];
+ AliAODTrack copy(*track);
+ AliAODVertex *vtx =(AliAODVertex*)(fgEvent->GetPrimaryVertex());
+ Double_t fBzkG = fgEvent->GetMagneticField(); // z componenent of field in kG
+ ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
+ }
if(!ok){
d0z0[0]=-999.;
d0z0[1]=-999.;