candidate->SetTracks(static_cast<AliVTrack*>(arrTracks1.UncheckedAt(itrack1)), fPdgLeg1,
static_cast<AliVTrack*>(arrTracks2.UncheckedAt(itrack2)), fPdgLeg2);
candidate->SetType(pairIndex);
- candidate->SetLabel(AliDielectronMC::Instance()->GetLabelMotherWithPdg(candidate,fPdgMother));
+ Int_t label=AliDielectronMC::Instance()->GetLabelMotherWithPdg(candidate,fPdgMother);
+ candidate->SetLabel(label);
+ if (label>-1) candidate->SetPdgCode(fPdgMother);
//pair cuts
UInt_t cutMask=fPairFilter.IsSelected(candidate);
//apply cut
if (cutMask==selectedMask) {
if(fHistos) FillHistogramsPair(&candidate);
- if(fStoreRotatedPairs) PairArray(10)->Add(new AliDielectronPair(candidate));
+ if(fStoreRotatedPairs) PairArray(kEv1PMRot)->Add(new AliDielectronPair(candidate));
}
}
}
fkVertexAOD=0x0;
switch(fVtxType){
- case kVtxTracks:
- fkVertexAOD=0x0;
- break;
- case kVtxTPC: fkVertexAOD=GetPrimaryVertexTPC(ev);
- break;
+ case kVtxTracks: fkVertexAOD=0x0; break;
+ case kVtxTPC: fkVertexAOD=GetPrimaryVertexTPC(ev); break;
case kVtxSPD:
- case kVtxTracksOrSPD: fkVertexAOD=ev->GetPrimaryVertexSPD();
- break;
- case kVtxAny: fkVertexAOD=ev->GetPrimaryVertex();
- break;
+ case kVtxTracksOrSPD: fkVertexAOD=ev->GetPrimaryVertexSPD(); break;
+ case kVtxAny: fkVertexAOD=ev->GetPrimaryVertex(); break;
}
if ((fRequireVtx||fVtxZmin<fVtxZmax||fMinVtxContributors>0)&&!fkVertexAOD) return kFALSE;
// put a robust Nacc definition here
if (!ev) return -1;
-
+
AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
- varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0); // not filled in AODs?
+ varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
- varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany
varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, -0.5, 0.5); //noKinks
AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
+ trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD, AliDielectronTrackCuts::kAny);
trkCuts->SetRequireITSRefit(kTRUE);
trkCuts->SetRequireTPCRefit(kTRUE);
for (Int_t iTrack = 0; iTrack < nRecoTracks; iTrack++) {
AliVParticle* candidate = ev->GetTrack(iTrack);
+ if (!candidate) continue;
AliVTrack *track = static_cast<AliVTrack*>(candidate);
if (!track) continue;
if (varCuts->IsSelected(track) && trkCuts->IsSelected(track))
delete varCuts;
delete trkCuts;
- // if(nRecoTracks==nAcc) printf(" all (%d) reco tracks are accepted tracks? \n",nAcc);
-
return nAcc;
}
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
Int_t nbinsX, Double_t xmin, Double_t xmax,
- UInt_t valTypeX, Bool_t logBinX)
+ UInt_t valTypeX, Bool_t logBinX, TString option)
{
//
// Default histogram creation 1D case
} else {
binLimX=AliDielectronHelper::MakeLinBinning(nbinsX, xmin, xmax);
}
- UserProfile(histClass,name,title,valTypeP,binLimX,valTypeX);
+ UserProfile(histClass,name,title,valTypeP,binLimX,valTypeX,option);
}
//_____________________________________________________________________________
Int_t nbinsX, Double_t xmin, Double_t xmax,
Int_t nbinsY, Double_t ymin, Double_t ymax,
UInt_t valTypeX, UInt_t valTypeY,
- Bool_t logBinX, Bool_t logBinY)
+ Bool_t logBinX, Bool_t logBinY, TString option)
{
//
// Default histogram creation 2D case
} else {
binLimY=AliDielectronHelper::MakeLinBinning(nbinsY, ymin, ymax);
}
- UserProfile(histClass,name,title,valTypeP,binLimX,binLimY,valTypeX,valTypeY);
+ UserProfile(histClass,name,title,valTypeP,binLimX,binLimY,valTypeX,valTypeY,option);
}
Int_t nbinsY, Double_t ymin, Double_t ymax,
Int_t nbinsZ, Double_t zmin, Double_t zmax,
UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ,
- Bool_t logBinX, Bool_t logBinY, Bool_t logBinZ)
+ Bool_t logBinX, Bool_t logBinY, Bool_t logBinZ, TString option)
{
//
// Default histogram creation 3D case
binLimZ=AliDielectronHelper::MakeLinBinning(nbinsZ, zmin, zmax);
}
- UserProfile(histClass,name,title,valTypeP,binLimX,binLimY,binLimZ,valTypeX,valTypeY,valTypeZ);
+ UserProfile(histClass,name,title,valTypeP,binLimX,binLimY,binLimZ,valTypeX,valTypeY,valTypeZ,option);
}
//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
const char* binning,
- UInt_t valTypeX)
+ UInt_t valTypeX, TString option)
{
//
// Histogram creation 1D case with arbitraty binning
//
TVectorD *binLimX=AliDielectronHelper::MakeArbitraryBinning(binning);
- UserProfile(histClass,name,title,valTypeP,binLimX,valTypeX);
+ UserProfile(histClass,name,title,valTypeP,binLimX,valTypeX,option);
}
//_____________________________________________________________________________
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
const TVectorD * const binsX,
- UInt_t valTypeX/*=kNoAutoFill*/)
+ UInt_t valTypeX/*=kNoAutoFill*/, TString option)
{
//
// Histogram creation 1D case with arbitraty binning X
if(valTypeP==999)
hist=new TH1F(name,title,binsX->GetNrows()-1,binsX->GetMatrixArray());
else {
+ TString opt=""; Double_t pmin=0., pmax=0.;
+ if(!option.IsNull()) {
+ TObjArray *arr=option.Tokenize(";");
+ arr->SetOwner();
+ opt=((TObjString*)arr->At(0))->GetString();
+ if(arr->GetEntriesFast()>1) pmin=(((TObjString*)arr->At(1))->GetString()).Atof();
+ if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
+ delete arr;
+ }
hist=new TProfile(name,title,binsX->GetNrows()-1,binsX->GetMatrixArray());
+ ((TProfile*)hist)->BuildOptions(pmin,pmax,opt.Data());
+ // printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
}
// store var for profile in fBits
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
const TVectorD * const binsX, const TVectorD * const binsY,
- UInt_t valTypeX/*=kNoAutoFill*/, UInt_t valTypeY/*=0*/)
+ UInt_t valTypeX/*=kNoAutoFill*/, UInt_t valTypeY/*=0*/, TString option)
{
//
// Histogram creation 2D case with arbitraty binning X
binsX->GetNrows()-1,binsX->GetMatrixArray(),
binsY->GetNrows()-1,binsY->GetMatrixArray());
}
- else
+ else {
+ TString opt=""; Double_t pmin=0., pmax=0.;
+ if(!option.IsNull()) {
+ TObjArray *arr=option.Tokenize(";");
+ arr->SetOwner();
+ opt=((TObjString*)arr->At(0))->GetString();
+ if(arr->GetEntriesFast()>1) pmin=(((TObjString*)arr->At(1))->GetString()).Atof();
+ if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
+ delete arr;
+ }
hist=new TProfile2D(name,title,
binsX->GetNrows()-1,binsX->GetMatrixArray(),
binsY->GetNrows()-1,binsY->GetMatrixArray());
-
+ ((TProfile2D*)hist)->BuildOptions(pmin,pmax,opt.Data());
+ // printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
+ }
+
// store var for profile in fBits
StoreVarForProfile(hist,valTypeP);
void AliDielectronHistos::UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
- UInt_t valTypeX/*=kNoAutoFill*/, UInt_t valTypeY/*=0*/, UInt_t valTypeZ/*=0*/)
+ UInt_t valTypeX/*=kNoAutoFill*/, UInt_t valTypeY/*=0*/, UInt_t valTypeZ/*=0*/, TString option)
{
//
// Histogram creation 3D case with arbitraty binning X
binsX->GetNrows()-1,binsX->GetMatrixArray(),
binsY->GetNrows()-1,binsY->GetMatrixArray(),
binsZ->GetNrows()-1,binsZ->GetMatrixArray());
- else
+ else {
+ TString opt=""; Double_t pmin=0., pmax=0.;
+ if(!option.IsNull()) {
+ TObjArray *arr=option.Tokenize(";");
+ arr->SetOwner();
+ opt=((TObjString*)arr->At(0))->GetString();
+ if(arr->GetEntriesFast()>1) pmin=(((TObjString*)arr->At(1))->GetString()).Atof();
+ if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
+ delete arr;
+ }
hist=new TProfile3D(name,title,
binsX->GetNrows()-1,binsX->GetMatrixArray(),
binsY->GetNrows()-1,binsY->GetMatrixArray(),
binsZ->GetNrows()-1,binsZ->GetMatrixArray());
-
+ ((TProfile3D*)hist)->BuildOptions(pmin,pmax,opt.Data());
+ // printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
+ }
+
// store var for profile in fBits
StoreVarForProfile(hist,valTypeP);
}
if (!IsHistogramOk(histClass,hist->GetName())) return;
-
THashList *classTable=(THashList*)fHistoList.FindObject(histClass);
hist->SetDirectory(0);
hist->SetUniqueID(valTypes);
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
Int_t nbinsX, Double_t xmin, Double_t xmax,
- UInt_t valTypeX=kNoAutoFill, Bool_t logBinX=kFALSE);
+ UInt_t valTypeX=kNoAutoFill, Bool_t logBinX=kFALSE, TString option="");
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
Int_t nbinsX, Double_t xmin, Double_t xmax,
Int_t nbinsY, Double_t ymin, Double_t ymax,
UInt_t valTypeX=kNoAutoFill, UInt_t valTypeY=0,
- Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE);
+ Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE, TString option="");
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
Int_t nbinsY, Double_t ymin, Double_t ymax,
Int_t nbinsZ, Double_t zmin, Double_t zmax,
UInt_t valTypeX=kNoAutoFill, UInt_t valTypeY=0, UInt_t valTypeZ=0,
- Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE, Bool_t logBinZ=kFALSE);
+ Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE, Bool_t logBinZ=kFALSE, TString option="");
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
- const char* binning, UInt_t valTypeX=kNoAutoFill);
+ const char* binning, UInt_t valTypeX=kNoAutoFill, TString option="");
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
- const TVectorD * const binsX, UInt_t valTypeX=kNoAutoFill);
+ const TVectorD * const binsX, UInt_t valTypeX=kNoAutoFill, TString option="");
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
const TVectorD * const binsX, const TVectorD * const binsY,
- UInt_t valTypeX=kNoAutoFill, UInt_t valTypeY=0);
+ UInt_t valTypeX=kNoAutoFill, UInt_t valTypeY=0, TString option="");
void UserProfile(const char* histClass,const char *name, const char* title,
UInt_t valTypeP,
const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
- UInt_t valTypeX=kNoAutoFill, UInt_t valTypeY=0, UInt_t valTypeZ=0);
+ UInt_t valTypeX=kNoAutoFill, UInt_t valTypeY=0, UInt_t valTypeZ=0, TString option="");
void UserHistogram(const char* histClass,const char *name, const char* title,
AliDielectronPair::AliDielectronPair() :
fType(-1),
fLabel(-1),
+ fPdgCode(0),
fPair(),
fD1(),
fD2(),
AliVTrack * const particle2, Int_t pid2, Char_t type) :
fType(type),
fLabel(-1),
+ fPdgCode(0),
fPair(),
fD1(),
fD2(),
AliVTrack * const refParticle2, Char_t type) :
fType(type),
fLabel(-1),
+ fPdgCode(0),
fPair(),
fD1(),
fD2(),
virtual Int_t GetLabel() const { return fLabel; }
// PID
virtual const Double_t *PID() const { return 0;} //TODO: check
- // Dummy
- Int_t PdgCode() const {return 0;}
+
//
// Double_t GetLXY(const AliVVertex * const vtx) const;
// Double_t GetPseudoProperTime(const AliVVertex * const vtx) const;
UChar_t GetType() const { return fType; }
void SetType(Char_t type) { fType=type; }
+ // MC information
void SetLabel(Int_t label) {fLabel=label;}
+ void SetPdgCode(Int_t pdgCode) { fPdgCode=pdgCode; }
+ Int_t PdgCode() const {return fPdgCode;}
void SetProductionVertex(const AliKFParticle &Vtx) { fPair.SetProductionVertex(Vtx); }
private:
Char_t fType; // type of the pair e.g. like sign SE, unlike sign SE, ... see AliDielectron
Int_t fLabel; // MC label
+ Int_t fPdgCode; // pdg code in case it is a MC particle
AliKFParticle fPair; // KF particle internally used for pair calculation
AliKFParticle fD1; // KF particle first daughter
TRef fRefD1; // Reference to first daughter
TRef fRefD2; // Reference to second daughter
- ClassDef(AliDielectronPair,3)
+ ClassDef(AliDielectronPair,4)
};
#endif
fErrors(3) = fValues(3)*TMath::Sqrt(epsSig*epsSig + epsBknd*epsBknd);
// Significance
fValues(2) = ((fValues(0)+fValues(1))>0 ? fValues(0)/TMath::Sqrt(fValues(0)+fValues(1)) : 0);
- Float_t s = fValues(0); Float_t b = fValues(1);
+ Float_t s = (fValues(0)>0?fValues(0):0); Float_t b = fValues(1);
fErrors(2) = ((s+b)>0 ? TMath::Sqrt((s*(s+2*b)*(s+2*b)+b*s*s)/(4*TMath::Power(s+b,3))) : 0);
}
"DCA",
"PairType",
"PseudoProperTime",
+ "PseudoProperTimeErr",
"PseudoProperTimeResolution",
"PseudoProperTimePull",
"TRDpidEffPair",
"v0ATPCDiffH2",
"v0CTPCDiffH2",
"v0Av0CDiffH2",
+ "v0ArpH2FlowV2",
+ "v0CrpH2FlowV2",
+ "v0ACrpH2FlowV2",
"MultV0A",
"MultV0C",
kDCA, // distance of closest approach TODO: not implemented yet
kPairType, // type of the pair, like like sign ++ unlikesign ...
kPseudoProperTime, // pseudo proper time
+ kPseudoProperTimeErr, // pseudo proper time error
kPseudoProperTimeResolution, // resolution for pseudo proper decay time (reconstructed - MC truth)
kPseudoProperTimePull, // normalizd resolution for pseudo proper time = (reco - MC truth)/dReco
kTRDpidEffPair, // TRD pid efficieny from conversion electrons
kYRes, // primary vertex y-resolution
kZRes, // primary vertex z-resolution
- // v0 reaction plane quantities from AliEPSelectionTaks
+ //// 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
kv0ATPCDiffH2, // V0A-TPC reaction plane difference for 2nd harmonic
kv0CTPCDiffH2, // V0C-TPC reaction plane difference for 2nd harmonic
kv0Av0CDiffH2, // V0A-V0C reaction plane difference for 2nd harmonic
+ kv0ArpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A
+ kv0CrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-C
+ kv0ACrpH2FlowV2, // v2 coefficient with respect to the 2nd order reaction plane from V0-A + V0-C
kMultV0A, // VZERO multiplicity and ADC amplitudes
kMultV0C,
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->GetTRDpidQuality();
+ values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
values[AliDielectronVarManager::kTPCclsDiff] = tpcSignalN-tpcNcls;
values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
values[AliDielectronVarManager::kNclsITS] = particle->GetITSNcls();
values[AliDielectronVarManager::kITSchi2Cl] = -1;
values[AliDielectronVarManager::kNclsTPC] = tpcNcls;
- values[AliDielectronVarManager::kNclsSTPC] = tpcNclsS;
- values[AliDielectronVarManager::kNclsSFracTPC] = tpcNcls>0?tpcNclsS/tpcNcls:0;
+ 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::kTRDntracklets] = 0;
values[AliDielectronVarManager::kTRDpidQuality] = 0;
- values[AliDielectronVarManager::kTPCchi2Cl] = -1;
+ values[AliDielectronVarManager::kTPCchi2Cl] = particle->Chi2perNDF()*(tpcNcls-5)/tpcNcls; // it is stored as normalized to tpcNcls-5 (see AliAnalysisTaskESDfilter)
values[AliDielectronVarManager::kTrackStatus] = (Double_t)particle->GetStatus();
//TRD pidProbs
// Fill AliAODTrack interface information
//
-
values[AliDielectronVarManager::kKinkIndex0] = particle->GetProdVertex()->GetType()==AliAODVertex::kKink ? 1 : 0;
Double_t d0z0[2];
values[AliDielectronVarManager::kTPCnSigmaPro]=0;
values[AliDielectronVarManager::kITSclusterMap] = particle->GetITSClusterMap();
-
+ values[AliDielectronVarManager::kITSLayerFirstCls] = -1.;
+ for (Int_t iC=0; iC<6; iC++) {
+ if (((particle->GetITSClusterMap()) & (1<<(iC))) > 0) {
+ values[AliDielectronVarManager::kITSLayerFirstCls] = iC;
+ break;
+ }
+ }
+
AliAODPid *pid=particle->GetDetPid();
if (pid){
Double_t mom =pid->GetTPCmomentum();
values[AliDielectronVarManager::kTPCnSigmaPro]=tpcNsigmaPro;
values[AliDielectronVarManager::kTRDntracklets] = 0;
- values[AliDielectronVarManager::kTRDpidQuality] = 0;
+ values[AliDielectronVarManager::kTRDpidQuality] = particle->GetTRDntrackletsPID();
+ Double_t prob[AliPID::kSPECIES];
+ fgPIDResponse->ComputeTRDProbability(particle,AliPID::kSPECIES,prob);
+ values[AliDielectronVarManager::kTRDprobEle] = prob[AliPID::kElectron];
+ values[AliDielectronVarManager::kTRDprobPio] = prob[AliPID::kPion];
+
+ values[AliDielectronVarManager::kTOFsignal]=pid->GetTOFsignal();
+ values[AliDielectronVarManager::kTOFbeta] =0;
Double_t tofNsigmaEle=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kElectron);
Double_t tofNsigmaPio=fgPIDResponse->NumberOfSigmasTOF(particle,AliPID::kPion);
Double_t errPseudoProperTime2 = -1;
values[AliDielectronVarManager::kPsiPair] = fgEvent ? pair->PsiPair(fgEvent->GetMagneticField()) : -5;
- values[AliDielectronVarManager::kPseudoProperTime] = fgEvent ? pair->GetKFParticle().GetPseudoProperDecayTime(*(fgEvent->GetPrimaryVertex()), TDatabasePDG::Instance()->GetParticle(443)->Mass(), &errPseudoProperTime2 ) : -1e10;
+ 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
Double_t delta=0.0;
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));
+ 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]) );
// ESD VZERO information
AliVVZERO* vzeroData = event->GetVZEROData();