]> 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 6e8eb6230f431528977363ec50f31574e30f0c4b..9e6e77285cda749930aca4f30d0fb3c39ad0c083 100644 (file)
@@ -27,6 +27,7 @@
 #include <TFile.h>
 #include <TDatabasePDG.h>
 #include <TKey.h>
+#include <TBits.h>
 
 #include <AliVEvent.h>
 #include <AliESDEvent.h>
@@ -95,17 +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
       
@@ -114,7 +123,7 @@ public:
     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)
@@ -159,11 +168,13 @@ public:
 
     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,             //
@@ -179,15 +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)
     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
@@ -216,9 +228,22 @@ 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
     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
@@ -347,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];}
@@ -474,22 +499,34 @@ 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
   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;
@@ -500,6 +537,7 @@ inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle
   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;
@@ -632,6 +670,7 @@ inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle
 //   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];
@@ -656,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;
@@ -663,26 +704,30 @@ 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;
   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];
@@ -694,7 +739,7 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle
   values[AliDielectronVarManager::kTPCsignal]=0;
   
   values[AliDielectronVarManager::kTOFsignal]=0;
-  values[AliDielectronVarManager::kTOFbeta]=0;
+  //values[AliDielectronVarManager::kTOFbeta]=0;
 
   values[AliDielectronVarManager::kTPCnSigmaEle]=0;
   values[AliDielectronVarManager::kTPCnSigmaPio]=0;
@@ -739,9 +784,32 @@ 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();
-    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);
@@ -763,6 +831,7 @@ inline void AliDielectronVarManager::FillVarAODTrack(const AliAODTrack *particle
 //   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];
@@ -772,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();
   
@@ -803,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;
@@ -814,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;
@@ -876,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;
@@ -910,37 +981,36 @@ inline void AliDielectronVarManager::FillVarMCParticle2(const AliVParticle *p1,
                    (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);
@@ -950,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.));
 }
 
 
@@ -973,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;
@@ -1026,6 +1097,8 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
   values[AliDielectronVarManager::kPdgCodeMother]=-1;
   values[AliDielectronVarManager::kPdgCodeGrandMother]=-1;
   
+  
+  Double_t errPseudoProperTime2 = -1;
   // Fill common AliVParticle interface information
   FillVarVParticle(pair, values);
 
@@ -1048,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();
@@ -1061,13 +1134,118 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
   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];
@@ -1088,6 +1266,26 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
   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();
   
@@ -1171,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;
@@ -1242,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;
@@ -1296,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]) ); 
   
@@ -1450,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)
 {
@@ -1744,11 +1964,14 @@ inline Bool_t AliDielectronVarManager::GetDCA(const AliAODTrack *track, Double_t
     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.;