]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronVarManager.h
- add trd and bit variables
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronVarManager.h
index ae5730f72fefe40af878ceab568d596779d28779..9e6e77285cda749930aca4f30d0fb3c39ad0c083 100644 (file)
@@ -96,19 +96,25 @@ public:
     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
       
@@ -117,7 +123,7 @@ public:
     kTrackLength,            // Track length
 
     kPdgCode,                // PDG code
-       kPdgCodeMother, 
+    kPdgCodeMother, 
     kPdgCodeGrandMother,     // PDG code of the grandmother
     kNumberOfDaughters,      // number of daughters
     kHaveSameMother,         // check that particles have the same mother (MC)
@@ -184,16 +190,16 @@ public:
     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)
+    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
@@ -222,9 +228,19 @@ public:
     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
@@ -356,7 +372,7 @@ public:
   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];}
@@ -483,14 +499,16 @@ inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle
   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
@@ -508,7 +526,7 @@ inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle
     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;
@@ -677,6 +695,8 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle
   //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;
@@ -684,16 +704,18 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle
   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;
@@ -762,6 +784,12 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle
     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();
     Double32_t expt[5];
@@ -813,7 +841,7 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle
   values[AliDielectronVarManager::kPdgCodeMother]=-1;
   values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
   
-  values[AliDielectronVarManager::kNumberOfDaughters]=-999;
+  values[AliDielectronVarManager::kNumberOfDaughters]=-1;
   
   AliDielectronMC *mc=AliDielectronMC::Instance();
   
@@ -844,8 +872,8 @@ inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *part
   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;
@@ -855,6 +883,7 @@ inline void AliDielectronVarManager::FillVarMCParticle(const AliMCParticle *part
   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;
@@ -917,6 +946,7 @@ inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1,
   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;
@@ -990,8 +1020,8 @@ inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1,
   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.));
 }
 
 
@@ -1013,6 +1043,7 @@ inline void AliDielectronVarManager::FillVarAODMCParticle(const AliAODMCParticle
   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;
@@ -1090,12 +1121,12 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
   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();
@@ -1338,6 +1369,7 @@ inline void AliDielectronVarManager::FillVarKFParticle(const AliKFParticle *part
   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;
@@ -1409,17 +1441,58 @@ inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Doubl
   //  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;
@@ -1463,29 +1536,8 @@ inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Doubl
   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]) ); 
   
@@ -1617,30 +1669,31 @@ inline void AliDielectronVarManager::FillVarTPCEventPlane(const AliEventplane *e
   //
   // 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)
 {