]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsi_jb_PbPb.C
index c6fa8f39a3c65ea3cb13348b5f6789cfa4412cb3..4e3cff72576d077e8157afa235ad15af5bde820b 100644 (file)
 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
+void AddQAHistsPID(AliDielectron *die);
+void AddQAHistsEP(AliDielectron *die);
+void AddQAHistsEff(AliDielectron *die);
+void AddHistsEleEff(AliDielectron *die);
+
 void InitCF(AliDielectron* die, Int_t cutDefinition);
 void InitHF(AliDielectron* die, Int_t cutDefinition);
 
-void SetupEventCuts(AliDielectron *die);
+void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition);
 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
-void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
-
-void AddMCSignals(AliDielectron *die);
-void SetEtaCorrection();
-TVectorD *GetRunNumbers();
-
-TString names=("TPC;TOF;TRD;TOFTRD;TOFTRD2D;rec;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
-enum { kTPC=0, kTOF, kTRD, kTOFTRD, kTOFTRD2D, krec,kGam0, kGam01, kGam05, kGam10, kGam15, kGam20, kEtaGap01, kEtaGap02, kEtaGap03, kEtaGap04, kEtaGap05, kSubLS, kSubRndm };
+void SetupV0Cuts( AliDielectron *die,  Int_t cutDefinition);
+void SetupPairCuts( AliDielectron *die,  Int_t cutDefinition);
+
+void ConfigEvtPlane(AliDielectron *die,  Int_t cutDefinition);
+void ConfigBgrd(    AliDielectron *die,  Int_t cutDefinition);
+
+void AddMCSignals(AliDielectron *die,  Int_t cutDefinition);
+void SetEtaCorrection(AliDielectron *die);
+TVectorD *GetRunNumbers2011();
+TVectorD *GetPDGcodes();
+TVectorD *GetDeltaPhiBins();
+
+TString names=("Event;NoCut;PIDqa;LegEff;Std;SysMC;Flow;avgPt;Rec;TPC;TOF;TRD;TPC-TOF-TRD;NOPID;SysPt;SysEta;SysEle;SysPro;SysSPD;SysMCele");
+enum { kEvent,              // event quantities (mult, ep, trigger, ...)
+       kNoCut,              // pure event quantities (mult, ep, trigger, ...)
+       kPIDqa,              // post calibration and validation of TPC PID
+       kLegEff,             // single electron efficiency calculation
+       kStd,                // standard Raa analysis
+       kSysMC,
+       kFlow,               // flow calculation
+       kAvgPt,              // mean pt and pt^2 analysis
+       kRec,                // to calculate partial efficiencies, in particular the geom. acceptance
+       kTPC,
+       kTOF,
+       kTRD,
+       kTPCTOFTRD,
+       kNoPID,
+       kSysPt,
+       kSysEta,
+       kSysEle,
+       kSysPro,
+       kSysSPD,
+       kSysMCele,
+       kPIDQA
+ };
 
 TObjArray *arrNames=names.Tokenize(";");
 const Int_t nDie=arrNames->GetEntries();
 
 Bool_t  isESD = kTRUE;
-Bool_t  hasMC = kFALSE;
 TString list  = gSystem->Getenv("LIST");
 
-
-AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="")
+AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
 {
   //
   // Setup the instance of AliDielectron
   //
 
-  // find mc or not?
-  if( list.IsNull()) list=prod;
-  if( list.Contains("LHC10h")   || list.Contains("LHC11h")   ) hasMC=kFALSE;
-  if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
+  // gsi train?
+  TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
+  Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE); 
+  if(isGSItrain) {
+    // find mc or not?
+    if( list.IsNull()) list=prod;
+    if( list.Contains("LHC10h")   || list.Contains("LHC11h")   ) hasMC=kFALSE;
+    if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ||  list.Contains("LHC13c7")) hasMC=kTRUE;
+  }
 
   //ESD handler?
   isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
 
-  // switch off some configurations
-  if(hasMC) { // MONTE CARLO
-    switch(cutDefinition) {
-    case kTPC:       return 0x0;
-    case kTOF:       return 0x0;
-    case kTRD:       return 0x0;
-    case kTOFTRD:    return 0x0;
-    case kTOFTRD2D:  return 0x0;
-    case krec:       return 0x0;
-    case kGam0:      return 0x0;
-    case kGam01:     return 0x0;
-    case kGam05:     return 0x0;
-    case kGam10:     return 0x0;
-    case kGam15:     return 0x0;
-    case kGam20:     return 0x0;
-    case kEtaGap01:  return 0x0;
-    case kEtaGap02:  return 0x0;
-    case kEtaGap03:  return 0x0;
-    case kEtaGap04:  return 0x0;
-    case kEtaGap05:  return 0x0;
-    case kSubLS:     return 0x0;
-    case kSubRndm:   return 0x0;
-    }
-  } else { // COLLISION DATA
-    switch(cutDefinition) {
-    case kTPC:       return 0x0;
-      //            case kTOF:       return 0x0;
-    case kTRD:       return 0x0;
-      //            case kTOFTRD:    return 0x0;
-    case kTOFTRD2D:  return 0x0;
-    case krec:       return 0x0;
-    case kGam0:      return 0x0;
-    case kGam01:     return 0x0;
-    case kGam05:     return 0x0;
-    case kGam10:     return 0x0;
-    case kGam15:     return 0x0;
-    case kGam20:     return 0x0;
-    case kEtaGap01:  return 0x0;
-    case kEtaGap02:  return 0x0;
-    case kEtaGap03:  return 0x0;
-    case kEtaGap04:  return 0x0;
-    case kEtaGap05:  return 0x0;
-    case kSubLS:     return 0x0;
-    case kSubRndm:   return 0x0;
-    }
-  }
-
-  // create the actual framework object
+  // task name
   TString name=Form("%02d",cutDefinition);
-  if (cutDefinition<arrNames->GetEntriesFast()){
-    name=arrNames->At(cutDefinition)->GetName();
-  }
-  printf(" Adding %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
-  AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
+  if (cutDefinition<arrNames->GetEntriesFast())  name=arrNames->At(cutDefinition)->GetName();
+  printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
+
+  // init AliDielectron
+  AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data()));
   die->SetHasMC(hasMC);
 
-  // cut setup
-  SetupEventCuts(die);
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  SetupEventCuts(die,triggers,cutDefinition);
   SetupTrackCuts(die,cutDefinition);
+  SetupV0Cuts(die,cutDefinition);
   SetupPairCuts(die,cutDefinition);
 
-  // Monte Carlo Signals and TRD efficiency tables
-  if(hasMC) {
-    AddMCSignals(die);
-    printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
-
-    // trd tables
-    /* if (list.Contains("LHC11a") ) {
-      TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
-      TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
-      if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
-
-      if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
-       Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
-      else
-       die->SetTRDcorrectionFilename(pidTab.Data());
-       }*/
-  }
-
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  // Monte Carlo Signals
+  AddMCSignals(die, cutDefinition);
+  // PID post calibartion
+  //  if(cutDefinition!=kEvent && cutDefinition!=kLegEff) SetEtaCorrection(die);
+  // bgrd estimators
+  //ConfigBgrd(die,cutDefinition);
+  // tpc event plane configuration
+  //ConfigEvtPlane(die,cutDefinition);
+  // prefilter settings NEW
+  //  if(cutDefinition==kNoCut ||cutDefinition==kEvent || cutDefinition==kNoPID || cutDefinition==kPIDqa || cutDefinition==kLegEff)
+    die->SetNoPairing();
+  // else
+  //   die->SetPreFilterAllSigns();
+  //die->SetPreFilterUnlikeOnly();
+  // load single electron effieciency map ATTENTION
+  if(cutDefinition==kAvgPt) die->InitLegEffMap("alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/files/effMap.root");
+
+
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   // histogram setup
   InitHistograms(die,cutDefinition);
-  printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
-
-
-
-  // CF container setup, switched off
-  if(cutDefinition <  kEtaGap01 ||
-     cutDefinition == kSubRndm  ) {
-    if(0) InitCF(die,cutDefinition);
-    if(0) printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
-                die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
-                die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
-  }
-
-  // HF arrays setup
+  // histogram grid setup
   InitHF(die,cutDefinition);
+  // CF container setup
+  InitCF(die,cutDefinition);
 
-  // bgrd estimators
-  if(!hasMC) {
-      printf(" Activate bgrd estimators: ME and ROT \n");
-
-      // rotations
-      AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
-      rot->SetIterations(10);
-      rot->SetConeAnglePhi(TMath::Pi());
-      rot->SetStartAnglePhi(TMath::Pi());
-      //      die->SetTrackRotator(rot);
-
-      // mixing
-      AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
-      //       mix->AddVariable(AliDielectronVarManager::kZvPrim,     20,-10.,10.);
-      //       mix->AddVariable(AliDielectronVarManager::kCentrality,  8,  0.,80.);
-      //       mix->AddVariable(AliDielectronVarManager::kv0ACrpH2,    8,  TMath::Pi()/-2., TMath::Pi()/2.);
-      mix->SetMixType(AliDielectronMixingHandler::kAll);
-      mix->SetDepth(120);
-      die->SetMixingHandler(mix);
-
-      // TPC event plane configurations
-      Double_t gGap;
-      switch(cutDefinition) {
-      case kEtaGap01:   gGap=0.1;   break;
-      case kEtaGap02:   gGap=0.2;   break;
-      case kEtaGap03:   gGap=0.3;   break;
-      case kEtaGap04:   gGap=0.4;   break;
-      case kEtaGap05:   gGap=0.5;   break;
-      default: gGap=0.0;
-      }
-
-    AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
-    poi->AddCut(AliDielectronVarManager::kM,2.92,3.20);     // particles of interest, jpsi mass window
-    die->GetEventPlanePOIPreFilter().AddCuts(poi);
-
-    if(cutDefinition >= kEtaGap01 &&
-       cutDefinition <  kSubLS     ) {
-      AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
-      etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
-      die->GetEventPlanePreFilter().AddCuts(etaGap);
-    }
-
-    if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
-    die->SetPreFilterEventPlane();
-  }
-
-  // prefilter settings
-  die->SetPreFilterUnlikeOnly();
-  //die->SetPreFilterAllSigns();
-  //die->SetNoPairing();
-
-  // setup eta correction
-  //  if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
-
-  // VZERO calibration
-  TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
-  if (!trainRoot.IsNull()) {
-    die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
-    die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
-  }
+  // cut QA
+  die->SetCutQA();
 
   return die;
 }
 
 //______________________________________________________________________________________
-void SetupEventCuts(AliDielectron *die)
+void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
 {
   //
   // Setup the event cuts
   //
 
-  AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts");
+  // trigger specific centrality cuts (reject trigger inefficiencies)
+  Double_t minCent=0.0, maxCent=100.;
+  if(!die->GetHasMC()) {
+    switch(triggers) {
+    // case AliVEvent::kCentral:     minCent= 0.; maxCent=10.; break; //0-9
+    // case AliVEvent::kSemiCentral: minCent=10.; maxCent=50.; break; //12-53
+    // case AliVEvent::kMB:          minCent=10.; maxCent=90.; break;
+    default:                      minCent= 0.; maxCent=90.; break;
+    }
+  }
+  //  if(cutDefinition >= kEtaGap01) {minCent=20.; maxCent=50.;} // v2 analysis
+  if(cutDefinition == kSysMC) {minCent=0.; maxCent=50.;}
+  if(cutDefinition == kSysMCele) {minCent=0.; maxCent=50.;}
+
+  // VZERO multiplicity vs. number ob global tracks cut
+  TF1 *fMean  = new TF1("fMean", "pol1",               0,25e+3);
+  fMean->SetParameters(691.633, 1.4892);
+  TF1 *fSigma = new TF1("fSigma","[0]+sqrt([1]*x+[2])",0,25e+3);
+  fSigma->SetParameters(-83.6599, 36.7677, 69530.7);
+
+  AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("vertex","vertex");
   if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
   eventCuts->SetRequireVertex();
   eventCuts->SetMinVtxContributors(1);
-  eventCuts->SetVertexZ(-10.,+10.);
-  eventCuts->SetCentralityRange(0.0,80.0);
+  if(cutDefinition!=kNoCut) eventCuts->SetVertexZ(-10.,+10.);
+  eventCuts->SetCentralityRange(minCent,maxCent);
+  //  eventCuts->SetCutOnV0MultipicityNTrks(fMean, fSigma, 4.0);
+  //  eventCuts->SetRunRejection(AliDielectronHelper::MakeArbitraryBinning("170592,170593,170594"));
   eventCuts->Print();
   die->GetEventFilter().AddCuts(eventCuts);
 
@@ -220,167 +164,313 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   //
   // Setup the track cuts
   //
+  Bool_t hasMC=die->GetHasMC();
 
   // Quality cuts
-  AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
-  //  cuts->AddDielectron(die);
-  die->GetTrackFilter().AddCuts(cuts);
+  //  die->GetTrackFilter().AddCuts(cuts);
 
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FILTER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   // AOD track filter (needs to be first cut to speed up)
-  AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
-  //  trkFilter->AddCutQA(die->GetHistoManager());
-  trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
+  AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("filter","filter");
+  // config specific cuts
+  switch(cutDefinition) {
+  case kPIDqa:   trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual); break;
+  default:       trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDany);
+  }
   //  trkFilter->SetMinNCrossedRowsOverFindable(0.6);
-  if(!isESD) cuts->AddCut(trkFilter);
-
-  //Pt cut, should make execution a bit faster
-  AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
-  //  pt->AddCutQA(die->GetHistoManager());
-  pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);    //0.8
-  cuts->AddCut(pt);
-
-  // track cuts ESD and AOD
-  AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
-  //  varCuts->AddCutQA(die->GetHistoManager());
-  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);
-  varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
-  varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
-  if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
-    varCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
-  cuts->AddCut(varCuts);
-  varCuts->Print();
-
-  AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
-  //  trkCuts->AddCutQA(die->GetHistoManager());
-  // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
-  // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
-  trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
-  // trkCuts->SetMaxWaivedITSNcls(1);
-  trkCuts->SetRequireITSRefit(kTRUE);
-  trkCuts->SetRequireTPCRefit(kTRUE);
-  cuts->AddCut(trkCuts);
 
-  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
-  AliDielectronPID *pid = new AliDielectronPID("PID","PID");
-  //  pid->AddCutQA(die->GetHistoManager());
-  ////////////////////////////////// DATA
-  if(!hasMC) {
-    pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
-    pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
-
-    if(cutDefinition==kTRD || cutDefinition==kTOFTRD)
-      pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
-                  AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
-
-    if(cutDefinition==kTOFTRD2D)
-      pid->AddCut(AliDielectronPID::kTRDeleEff2D,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
-                  AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  AliDielectronVarCuts *varAccCuts   = new AliDielectronVarCuts("acc","acc");
+  AliDielectronCutGroup  *grpRecCuts = new AliDielectronCutGroup("rec","rec",AliDielectronCutGroup::kCompAND);
+  AliDielectronVarCuts   *varRecCuts = new AliDielectronVarCuts("VarRecCuts","VarRecCuts");
+  AliDielectronTrackCuts *trkRecCuts = new AliDielectronTrackCuts("TrkRecCuts","TrkRecCuts");
+
+  // config specific cuts
+  switch(cutDefinition) {
+  case kPIDqa:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.5, 1e30);  // 0.85 ATTENTION
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    break;
+  case kEvent:
+  case kNoCut:
+  case kFlow:
+  case kRec:
+  case kStd:
+  case kTRD:
+  case kTPCTOFTRD:
+  case kAvgPt:
+  case kNoPID:
+  case kSysMCele:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 1e30);
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.8,   0.8);
+  case kLegEff:
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
+    //if(hasMC)  varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
+    //else
+    ///
+    break;
+  case kTOF:
+  case kTPC:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.95, 1e30);    //0.8
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
+    varRecCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
+    break;
+    ///////////////////////////////////////////////////////////////////////////////////////////// systematics
+  case kSysPt:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           1.1, 20./*1e30*/); ///ATTENTION
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.8,   0.8);
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
+    break;
+  case kSysEta:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 20./*1e30*/);
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9); ////ATTENTION
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
+    break;
+  case kSysEle:
+  case kSysPro:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 20./*1e30*/);
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.8,   0.8);
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
+    break;
+  case kSysSPD:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 20./*1e30*/);
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.8,   0.8);
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 1); // SPD any
+    break;
+  case kSysMC:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 1e30);
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9); ////ATTENTION
+    varRecCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+    trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
+    break;
   }
 
-  ////////////////////////////////// MC
-  if(hasMC) {
+  // standrad reconstruction cuts
+  varRecCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
+  varRecCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
+  varRecCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
+  varRecCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
+  //  varRecCuts->AddCut(AliDielectronVarManager::kV0Index0,     0.0);
+  if(cutDefinition!=kPIDqa) trkRecCuts->SetRequireITSRefit(kTRUE);
+  trkRecCuts->SetRequireTPCRefit(kTRUE);
 
-    // electron
-    Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
-    Double_t resolution=0.0549;
-    Double_t BBpro[5] = {0};
-    Double_t BBpio[5] = {0};
-
-    for(Int_t icent=0; icent<8; icent++) {
-
-      switch (icent) {
-        case 0:  // 0-10%
-          BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
-          BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11;   BBpio[3] = 5.27988; BBpio[4] = 4.3108;
-          break;
-        case 1:  // 10-20%
-          BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
-          BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
-          break;
-        case 2:  // 20-30%
-          BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
-          BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11;  BBpio[3] = 5.74458; BBpio[4] = 4.32459;
-          break;
-        case 3:  // 30-40%
-          BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
-          BBpio[0] = 0.026294;  BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11;  BBpio[3] = 5.28808; BBpio[4] = 4.31301;
-          break;
-        case 4:  // 40-50%
-          BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
-          BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
-          break;
-        case 5:  // 50-60%
-          BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
-          BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
-          break;
-        case 6:  // 60-70%
-          BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
-          BBpio[0] = 0.026302;  BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11;  BBpio[3] = 5.2465;  BBpio[4] = 4.31094;
-          break;
-        case 7:  // 70-80%
-          BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
-          BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
-          break;
-        case 8:  // 80-90%
-          BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11;   BBpro[3] = 2.07912; BBpro[4] = 5.99986;
-          BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
-          break;
-        case 9:  // 90-100%
-          BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11;   BBpro[3] = 3.2431;  BBpro[4] = 5.93388;
-          BBpio[0] = 0.027079;  BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11;  BBpio[3] = 9.61382; BBpio[4] = 5.99372;
-          break;
-      }
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  AliDielectronCutGroup *grpPIDCuts = new AliDielectronCutGroup("PID","PID",AliDielectronCutGroup::kCompAND);
+  AliDielectronVarCuts  *pidSelCuts = new AliDielectronVarCuts("selPIDCuts","selPIDCuts");
+  pidSelCuts->AddCut(AliDielectronVarManager::kTRDpidQuality,      4.0,   6.0);
+  pidSelCuts->AddCut(AliDielectronVarManager::kTRDchi2,            0.0,   2.0);
+  AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts");
+  AliDielectronVarCuts *pidMCCuts  = new AliDielectronVarCuts("mcPIDCuts","mcPIDCuts");
+  AliDielectronPID *pidCuts        = new AliDielectronPID("PIDCuts","PIDCuts");
 
+  switch(cutDefinition) {
+  case kPIDqa:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-10.,10.);
+    pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
+                   kFALSE, AliDielectronPID::kIfAvailable);
+    break;
+  case kTOF:
+    pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
+    pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
+                   AliDielectronPID::kIfAvailable);
+  case kTPC:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,4.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
+    break;
+  case kTRD:
+    pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
+                   kFALSE, AliDielectronPID::kIfAvailable);
+  case kEvent:
+  case kNoCut:
+  case kFlow:
+  case kStd:
+  case kLegEff:
+  case kAvgPt:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.65,3.0,-0.3,+0.3,kFALSE,
+    //                 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
+    //                 AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
+    // tof heavy particle exclusion
+    //    pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.3,   0.7, kTRUE);
+    //pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
+     //                    AliDielectronPID::kIfAvailable);
+    break;
+  case kTPCTOFTRD:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.3.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.65,3.0,-0.3,+0.3,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
+    pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
+    pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
+                   AliDielectronPID::kIfAvailable);
+    pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.95,1.,pidSelCuts,
+                   kFALSE, AliDielectronPID::kIfAvailable);
+    break;
+    ///////////////////////////////////////////////////////////////////////////////////////////// systematics
+  case kSysPt:
+  case kSysEta:
+  case kSysSPD:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
+    break;
+  case kSysEle:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,+0.7.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
+    break;
+  case kSysPro:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
+    break;
+  case kSysMC:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
+    break;
+  case kSysMCele:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5.,3.);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.9,3.0,-0.5,+0.5,kFALSE,
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,4.0,0.,0.,kTRUE);
+    break;
+  }
 
-      TF1 *ffPro=new TF1(Form("fBethe%d_c%d",AliPID::kProton,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaP,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
+  // mc identification
+  if(cutDefinition==kPIDqa && hasMC) {
+    pidMCCuts->SetCutType(AliDielectronVarCuts::kAny);//only apply any of the two cuts
+    pidMCCuts->AddCut(AliDielectronVarManager::kPdgCode,-11.5,-10.5 );
+    pidMCCuts->AddCut(AliDielectronVarManager::kPdgCode,10.5,11.5 );
+  }
 
-      TF1 *ffPio=new TF1(Form("fBethe%d_c%d",AliPID::kPion,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaPi,resolution, AliPID::ParticleMass(AliPID::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID POST CORRECTION vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  //  if(cutDefinition!=kEvent) SetEtaCorrection(pidCuts,hasMC);
 
-      //LHC11a10b
-      if (list.Contains("LHC11a10b")) {
-        printf(" LHC11a10b parameters\n");
-        ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
-        ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
 
-        // proton cut
-        pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
-                    kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
-        // pion cut
-        pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
-                    kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
-      }
-    }
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  // exclude conversion electrons selected by the tender
+  AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
+  noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
 
-    // shifts for the nSigma electrons
-    TGraph* nSigmaCorrection = new TGraph();
-    // LHC11a10b
-    if (list.Contains("LHC11a10b")) {
-      nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
-      nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
-      pid->SetCorrGraph(nSigmaCorrection);
-    }
+  // activate the cut sets (order might be CPU timewise important)
+  switch(cutDefinition) {
+  case kNoPID:
+  case kPIDqa:
+    if(!isESD) die->GetTrackFilter().AddCuts(trkFilter);
+    die->           GetTrackFilter().AddCuts(varAccCuts);
+    grpRecCuts->AddCut(trkRecCuts);
+    grpRecCuts->AddCut(varRecCuts);
+    die->           GetTrackFilter().AddCuts(grpRecCuts);
+    if(hasMC) grpPIDCuts->AddCut(pidMCCuts);
+    else      grpPIDCuts->AddCut(pidCuts);
+    die->           GetTrackFilter().AddCuts(grpPIDCuts);
+    break;
+  case kRec:
+    die->GetTrackFilter().AddCuts(varAccCuts);
+    grpRecCuts->AddCut(trkRecCuts);
+    grpRecCuts->AddCut(varRecCuts);
+    die->GetTrackFilter().AddCuts(grpRecCuts);
+    break;
+  case kEvent:
+  case kNoCut:
+  case kFlow:
+  case kStd:
+  case kLegEff:
+  case kTRD:
+  case kTPCTOFTRD:
+  case kAvgPt:
+  case kTOF:
+  case kTPC:
+  case kSysPt:
+  case kSysEta:
+  case kSysEle:
+  case kSysPro:
+  case kSysSPD:
+  case kSysMC:
+  case kSysMCele:
+    if(!isESD) die->GetTrackFilter().AddCuts(trkFilter);
+    die->           GetTrackFilter().AddCuts(varAccCuts);
+    grpRecCuts->AddCut(trkRecCuts);
+    grpRecCuts->AddCut(varRecCuts);
+    die->           GetTrackFilter().AddCuts(grpRecCuts);
+    grpPIDCuts->AddCut(pidCuts);
+    //    grpPIDCuts->AddCut(pidVarCuts);
+    die->           GetTrackFilter().AddCuts(grpPIDCuts);
+    //cuts->AddCut(noconv);
+    // debug
+    trkFilter->Print();
+    varAccCuts->Print();
+    grpRecCuts->Print();
+    grpPIDCuts->Print();
+  }
 
-  } //hasMC
+}
 
-  ////////////////////////////////// DATA + MC
-  // pid cuts TPC + TOF & TRD
-  pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
+//______________________________________________________________________________________
+void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
+{
+  //
+  // Setup the V0 cuts
+  //
 
-  if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
-    pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
+  switch(cutDefinition) {
+  case kEvent:  return;
+  case kNoCut:  return;
+    //  case kLegEff: return;
+  }
 
-  if(cutDefinition!=krec) cuts->AddCut(pid);
-  /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
+  Bool_t bRej  = kTRUE;
+  Int_t defPID = 16;
+  if(cutDefinition==kPIDqa) {
+    bRej   = kFALSE;
+    defPID = 13;//13
+  }
 
+  AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("V0","V0");
+  gammaV0Cuts->SetV0finder(AliDielectronV0Cuts::kOnTheFly);
+  gammaV0Cuts->SetPdgCodes(22,11,11);
+  gammaV0Cuts->SetDefaultPID(defPID);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.05),   1.0,  kFALSE); //0.02 -- 0.05
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt,                         0.0,   0.05, kFALSE);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha,                     -0.35,  0.35, kFALSE);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kM,                             0.0,   0.1,  kFALSE); //0.05 -- 0.1
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF,                       0.0,  10.0,  kFALSE);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist,                       0.0,   0.25, kFALSE);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kR,                             3.0,  90.0,  kFALSE);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair,                       0.0,   0.2,  kFALSE); //0.05 -- 0.2
+  if(cutDefinition==kPIDqa && 0) {
+    gammaV0Cuts->AddCut(AliDielectronVarManager::kImpactParXY,                   0.0,   1.0,  kFALSE);
+    gammaV0Cuts->AddCut(AliDielectronVarManager::kImpactParZ,                    0.0,   1.0,  kFALSE);
+  }
+  //  gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle,              0.0,   0.1,  kFALSE);
+  gammaV0Cuts->SetExcludeTracks(bRej);
+  gammaV0Cuts->Print();
 
-  // exclude conversion electrons selected by the tender
-  AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
-  noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
-  cuts->AddCut(noconv);
+ //  const Double_t |cutAlphaG| < 0.35; &&  const Double_t cutQTG < 0.05;
+ //  const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; &&  const Double_t cutQTG2 < 0.04;
 
+  // if(cuts)
+  //   ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
+  // else
+  die->GetTrackFilter().AddCuts(gammaV0Cuts);
 }
 
 //______________________________________________________________________________________
@@ -389,36 +479,168 @@ void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
   //
   // Setup the pair cuts
   //
+  Bool_t hasMC=die->GetHasMC();
 
-  // conversion rejection
-  Double_t gCut;
+  // rap and mass rejection
+  Double_t gCut=0.05, yCut=0.9, eCut=0.01;
   switch(cutDefinition) {
-    case kTPC:    gCut=0.05;  break;
-    case krec:    gCut=0.05;  break;
-    case kGam10:  gCut=0.1;   break;
-    case kGam15:  gCut=0.15;  break;
-    case kGam20:  gCut=0.2;   break;
-    case kGam05:  gCut=0.05;  break;
-    case kGam01:  gCut=0.01;  break;
-    case kGam0:   gCut=0.0;   break;
-    default: gCut=0.05;             // default
+  case kNoCut:
+  case kEvent:      yCut=0.0;  break;
+  case kPIDqa:      return;
+  case kFlow:       yCut=0.8;  break;
+  case kRec:        yCut=0.9;  break;
+  case kNoPID:      return;
+  case kTPC:        yCut=0.9;  break;
+  case kTOF:        yCut=0.9;  break;
+  case kTRD:        yCut=0.8;  break;
+  case kStd:      yCut=0.8;  break;
+  case kLegEff:     return;
+  case kTPCTOFTRD:  yCut=0.8;  break;
+  case kAvgPt:      yCut=0.8;  break;
+  case kSysMC:      yCut=0.9;  break;
+  case kSysMCele:   yCut=0.8;  break;
+  case kSysEta:     yCut=0.9;  break;
+  case kSysPt:
+  case kSysEle:
+  case kSysPro:
+  case kSysSPD:
+    yCut=0.8;                  break;
+    //  default: gCut=0.05;       // default
   }
 
+  // MC
+  //if(hasMC) yCut=0.9;
+
+  // rapidity selection
+  AliDielectronVarCuts *rapCut=new AliDielectronVarCuts(Form("|Y|<%.1f",yCut),Form("|Y|<%.1f",yCut));
+  rapCut->AddCut(AliDielectronVarManager::kY,-1.*yCut,yCut);
+  die->GetPairFilter().AddCuts(rapCut);
+
+  // gamma rejection
   AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
-//  gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0,   0.1,  kTRUE);
-//  gammaCuts->AddCut(AliDielectronVarManager::kLegDist,      0.0,   0.25, kTRUE);
-//  gammaCuts->AddCut(AliDielectronVarManager::kR,            3.0,   90.0, kTRUE);
-//  gammaCuts->AddCut(AliDielectronVarManager::kPsiPair,      0.0,   0.05, kTRUE);
-//  gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF,      0.0,   10.0, kTRUE);
   gammaCuts->AddCut(AliDielectronVarManager::kM,            0.0,   gCut);
   die->GetPairPreFilter().AddCuts(gammaCuts);
 
+  // pair efficiency cut
+  // if(cutDefinition==kAvgPt && !hasMC) {
+  //   AliDielectronVarCuts *effCut=new AliDielectronVarCuts(Form("(Axe)>%.2f",eCut),Form("(Axe)>%.2f",eCut));
+  //   effCut->AddCut(AliDielectronVarManager::kPairEff,0.0,eCut,kTRUE);
+  //   die->GetPairFilter().AddCuts(effCut);
+  // }
+
+  // random signal rejection
+  AliDielectronCutGroup *grpRNDMCuts = new AliDielectronCutGroup("RNDM","RNDM",AliDielectronCutGroup::kCompOR);
+  AliDielectronVarCuts *exclCutCEN=new AliDielectronVarCuts("exclCEN","exclCEN");
+  exclCutCEN->SetCutType(AliDielectronVarCuts::kAll); // all criteria need to be fullfilled
+  exclCutCEN->AddCut(AliDielectronVarManager::kRndmPair,0.0,1./40);
+  exclCutCEN->AddCut(AliDielectronVarManager::kPdgCode,443);
+  exclCutCEN->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
+  AliDielectronVarCuts *exclCutSEMI=new AliDielectronVarCuts("exclSEMI","exclSEMI");
+  exclCutSEMI->SetCutType(AliDielectronVarCuts::kAll); // all criteria need to be fullfilled
+  exclCutSEMI->AddCut(AliDielectronVarManager::kRndmPair,0.0,1./20);
+  exclCutSEMI->AddCut(AliDielectronVarManager::kPdgCode,443);
+  exclCutSEMI->AddCut(AliDielectronVarManager::kCentrality,10.,90.);
+  AliDielectronVarCuts *inclCut=new AliDielectronVarCuts("incl","incl");
+  inclCut->AddCut(AliDielectronVarManager::kPdgCode,443,443,kTRUE);
+  grpRNDMCuts->AddCut(exclCutCEN);
+  grpRNDMCuts->AddCut(exclCutSEMI);
+  grpRNDMCuts->AddCut(inclCut);
+  if(hasMC && cutDefinition==kStd && 0) die->GetPairFilter().AddCuts(grpRNDMCuts); //ATTENTION
 
-  // rapidity selection
-  //  AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
-  // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
-  // die->GetPairFilter().AddCuts(rapCut);
+}
+
+//______________________________________________________________________________________
+void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
+{
+  //
+  // Configurate the background estimators
+  //
+
+  // default no processing of LS
+  //  die->SetProcessLS(kFALSE);
+
+  // skip config
+  switch(cutDefinition) {
+  case kEvent:
+  case kNoCut:
+  case kNoPID:
+  case kPIDqa:
+  case kRec:
+  case kLegEff:
+    return;
+  }
+
+  Bool_t hasMC=die->GetHasMC();
+  if(hasMC && cutDefinition!=kAvgPt) return;
+
+  // add track rotations
+  AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
+  rot->SetIterations(10);
+  rot->SetConeAnglePhi(TMath::Pi());
+  rot->SetStartAnglePhi(TMath::Pi());
+  //      die->SetTrackRotator(rot);
+
+  // add mixed events
+  AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
+  switch(cutDefinition) {
+  // case kStd:
+  //   mix->AddVariable(AliDielectronVarManager::kZvPrim,      20, -10., 10.);
+  //   mix->AddVariable(AliDielectronVarManager::kCentrality,  36,   0., 90.);
+  //   mix->AddVariable(AliDielectronVarManager::kv0ACrpH2,    10,   0., TMath::Pi());
+  //   break;
+  default: 
+    mix->AddVariable(AliDielectronVarManager::kZvPrim,      "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+    mix->AddVariable(AliDielectronVarManager::kCentrality,  9,  0.,90.);
+    mix->AddVariable(AliDielectronVarManager::kTPCrpH2,     10, TMath::Pi()/-2, TMath::Pi()/2); // max res: 10%->10bins // 8bins
+    //    mix->AddVariable(AliDielectronVarManager::kTPCmagH2,    "0.,20.,50.,80.,110.,150.,500.");
+    break;
+  }
+  mix->SetSkipFirstEvent(kTRUE); // needed for flow analysis
+  mix->SetMixType(AliDielectronMixingHandler::kAll);
+  mix->SetDepth(150);
+  die->SetMixingHandler(mix);
+
+}
+
+//______________________________________________________________________________________
+void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
+{
+  //
+  // Configurate the TPC event plane 
+  //
+
+  switch(cutDefinition) {
+    //  case kEvent:
+  case kNoPID:
+  case kPIDqa:
+    //  case kRec:   // TOTHINK: might be needed when checking efficiencies versus dPhi
+  case kLegEff:
+    return;
+  }
 
+  Bool_t hasMC=die->GetHasMC();
+  if(hasMC && cutDefinition!=kAvgPt) return;
+
+  //   Double_t gGap;
+  //   switch(cutDefinition) {
+  //   case kEtaGap01:   gGap=0.1;   break;
+  //   case kEtaGap02:   gGap=0.2;   break;
+  //   case kEtaGap03:   gGap=0.3;   break;
+  //   case kEtaGap04:   gGap=0.4;   break;
+  //   case kEtaGap05:   gGap=0.5;   break;
+  //   default: gGap=0.0;
+  //   }
+  // eta gap in tpc event plane
+  //   AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
+  //   etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
+  //   die->GetEventPlanePreFilter().AddCuts(etaGap);
+
+  AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
+  poi->AddCut(AliDielectronVarManager::kM,2.92,3.20);     // particles of interest, jpsi mass window
+  die->GetEventPlanePOIPreFilter().AddCuts(poi);
+
+  // die->SetLikeSignSubEvents();
+  die->SetPreFilterEventPlane();
 }
 
 //______________________________________________________________________________________
@@ -427,427 +649,706 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
   //
   // Initialise the histograms
   //
+  Bool_t hasMC=die->GetHasMC();
 
   // booleans for histo selection
-  Bool_t bHistTrackQA=kFALSE, bHistEvts = kFALSE, bHistPair = kFALSE, bHistPairME = kFALSE, bHistFlow = kFALSE, bHistFlowQA=kFALSE;
+  Bool_t bHistTrackQA=kFALSE, bHistEvts=kFALSE, bHistPair=kFALSE, bHistTrk=kFALSE, bHistPairME=kFALSE, bHistFlow=kFALSE, bHistFlowQA=kFALSE, bHistPID=kFALSE;
   switch (cutDefinition) {
+  case kNoCut:
+  case kEvent: bHistEvts=kTRUE; break;
+  case kPIDqa: bHistTrk=kTRUE; break;
+  case kNoPID: bHistTrk=kTRUE; break;
+  case kRec:   /* */ break;
   case kTPC:
-  case kTOF:      bHistEvts=kTRUE; bHistFlow=kTRUE; bHistPair=kTRUE; bHistPairME=kTRUE; break;
-  case kTRD:
-  case kTOFTRD:
-  case kTOFTRD2D: bHistFlow=kTRUE; bHistPair=kTRUE; break;
-  case krec:
-  case kITScls:
-  case kITSamy:
-  case kDCA:
-  case kChi:      break;
-  case kEtaGap01:
-  case kEtaGap02:
-  case kEtaGap03:
-  case kEtaGap04:
-  case kEtaGap05:
-  case kSubRndm:  bHistFlow=kTRUE; bHistFlowQA=kTRUE; break;
-  case kSubLS:    bHistFlow=kTRUE; bHistFlowQA=kTRUE; bHistEvts=kTRUE; break;
-  case kGam0:
-  case kGam01:
-  case kGam05:
-  case kGam10:
-  case kGam15:
-  case kGam20:    break;
+  case kTOF:   //bHistEvts=kTRUE; //bHistFlow=kTRUE;
+  case kTRD:   ///bHistEvts=kTRUE; //bHistFlow=kTRUE;
+  case kAvgPt: 
+  case kSysMC:
+  case kStd: ///*bHistEvts=kTRUE;*/ bHistPair=kTRUE; break; //bHistPairME=kTRUE;
+  case kTPCTOFTRD: bHistPair=kTRUE; bHistTrk=kTRUE; bHistPID=kTRUE; break; //bHistPairME=kTRUE;
+  case kSysMCele: bHistPair=kTRUE; bHistPID=kFALSE; break; //bHistPairME=kTRUE;
+  case kLegEff: bHistTrk=kTRUE; break;
+  }
+  if(hasMC) {
+    bHistPID=kFALSE;
   }
-
 
   //Setup histogram Manager
   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
+  die->SetHistogramManager(histos);
+
+  //Initialise histogram classes
+  histos->SetReservedWords("Track;Pair");
 
   //add histograms to event class
   histos->AddClass("Event");
-  histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
-                        100, 0.0, 100.0,
-                        AliDielectronVarManager::kCentrality);
+  Int_t maxMixBins = (die->GetMixingHandler() ? die->GetMixingHandler()->GetNumberOfBins() : 0);
+  histos->UserHistogram("Event","","", 100, 0.0, 100.0,   AliDielectronVarManager::kCentrality);
+  if(die->GetMixingHandler() && maxMixBins)
+    histos->UserHistogram("Event","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
+  // candidates monitoring
+  histos->UserProfile("Event","","", AliDielectronVarManager::kTracks, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kPairs, GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
+
+
+  //event plane histograms
+  if(cutDefinition==kFlow) {
+    if(!hasMC) AddQAHistsEP(die);
+    histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiv0ArpH2);
+    histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiv0CrpH2);
+    histos->UserHistogram("Pair","","", 100,-1*TMath::Pi(),+1*TMath::Pi(), AliDielectronVarManager::kDeltaPhiTPCrpH2);
+  }
 
   ////// EVENT HISTOS /////
   if(bHistEvts) {
-    histos->UserHistogram("Event","RunNumber","Events per run;run;events",
-                         GetRunNumbers(),
-                         AliDielectronVarManager::kRunNumber);
-    histos->UserHistogram("Event","RunNumber_VtxZ",";run;z_{vtx} (cm)",
-                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(150,-15.,15.),
-                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kZvPrim);
-    histos->UserHistogram("Event","RunNumber_Multiplicity",";run;multiplicity V0",
-                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(250,0.,25000.),
-                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kMultV0);
-    histos->UserHistogram("Event","RunNumber_v0ArpH2",";run;#Psi_{2}^{V0A} (rad.)",
-                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
-                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
-    histos->UserHistogram("Event","RunNumber_v0CrpH2",";run;#Psi_{2}^{V0C} (rad.)",
-                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
-                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
-    histos->UserHistogram("Event","RunNumber_TPCrpH2",";run;#Psi_{2}^{TPC} (rad.)",
-                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
-                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2);
-
-    histos->UserHistogram("Event","VtxZ","Vertex Z;z_{vtx} (cm)", 300,-15.,15.,
-                         AliDielectronVarManager::kZvPrim);
-    histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
-                         AliDielectronVarManager::kMultV0);
-    histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
-                         100,0.,100., 250,0.,25000.,
-                         AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
-    histos->UserProfile("Event","Cent_Nacc", "accepted tracks;centrality (%)",
-                       AliDielectronVarManager::kNacc,
-                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
-                       AliDielectronVarManager::kCentrality);
-    histos->UserProfile("Event","Cent_NVtxContrib", "number of vertex contributors;centrality (%)",
-                       AliDielectronVarManager::kNVtxContrib,
-                       100,0.,100.,
-                       AliDielectronVarManager::kCentrality);
-  } //hist: event
-
-
-  ////// FLOW //////
-  if(bHistFlow) {
-
-    // RP angles versus centrality
-    histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
-                          10,0.,100.,100,-2.,2.,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
-    histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
-                          10,0.,100.,100,-2.,2.,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
-    histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
-                          10,0.,100.,100,-2.,2.,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
-
-    histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
-    histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
-    histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
-
-    histos->UserHistogram("Event","Cent_v0A0rpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A0} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A0rpH2);
-    histos->UserHistogram("Event","Cent_v0A3rpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A3} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A3rpH2);
-    histos->UserHistogram("Event","Cent_v0C0rpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C0} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C0rpH2);
-    histos->UserHistogram("Event","Cent_v0C3rpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C3} (rad.)",
-                          10,0.,100.,100,-2.0,2.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C3rpH2);
-  } // hist: flow
-
-  if(bHistFlowQA) {
-    // TPC event plane
-    histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
-                          100,-1500.,1500.,
-                          AliDielectronVarManager::kTPCxH2);
-    histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
-                          100,-1500.,1500.,
-                          AliDielectronVarManager::kTPCyH2);
-    histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
-                          100,-2.,2.,
-                          AliDielectronVarManager::kTPCrpH2);
-    histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
-                          100,-2.,2.,
-                          AliDielectronVarManager::kTPCsub1rpH2);
-    histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
-                          100,-2.,2.,
-                          AliDielectronVarManager::kTPCsub2rpH2);
-    histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
-                          100,-1.,1.,
-                          AliDielectronVarManager::kTPCsub12DiffH2);
-    /* // uncorrected eventplane
-     histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
-     100,-1500.,1500.,
-     AliDielectronVarManager::kTPCxH2uc);
-     histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
-     100,-1500.,1500.,
-     AliDielectronVarManager::kTPCyH2uc);
-     histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
-     100,-2.,2.,
-     AliDielectronVarManager::kTPCrpH2uc);
-     histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
-     100,-1500.,1500.,
-     AliDielectronVarManager::kTPCsub1xH2uc);
-     histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
-     100,-1500.,1500.,
-     AliDielectronVarManager::kTPCsub1yH2uc);
-     histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
-     100,-2.,2.,
-     AliDielectronVarManager::kTPCsub1rpH2uc);
-     histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
-     100,-1500.,1500.,
-     AliDielectronVarManager::kTPCsub2xH2uc);
-     histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
-     100,-1500.,1500.,
-     AliDielectronVarManager::kTPCsub2yH2uc);
-     histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
-     100,-2.,2.,
-     AliDielectronVarManager::kTPCsub2rpH2uc);
-     histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
-     100,-1.,1.,
-     AliDielectronVarManager::kTPCsub12DiffH2uc);
-    */
-
-    // EP resolution calculation
-    histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
-                          10,0.,100.,300,-1.0,1.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
-    histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
-                          10,0.,100.,300,-1.0,1.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
-    histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
-                          10,0.,100.,300,-1.0,1.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
-    histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
-                          10,0.,100.,300,-1.0,1.0,
-                          AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
-    // detector effects
-    histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
-                          10,0.,100.,300,-1.0,1.0,
-                         AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
-    // recentering stuff
-    histos->UserProfile("Pair","TPCxH2-Cent-RunNumber", ";centrality (%);run;#LTQ_{x}#GT",
-                       AliDielectronVarManager::kTPCxH2,
-                       AliDielectronHelper::MakeLinBinning(10, 0.,100.), GetRunNumbers(),
-                       AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Pair","TPCyH2-Cent-RunNumber", ";centrality (%);run;#LTQ_{x}#GT",
-                       AliDielectronVarManager::kTPCyH2,
-                       AliDielectronHelper::MakeLinBinning(10, 0.,100.), GetRunNumbers(),
-                       AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
-
-  } //hist: flowQA
-
-
-  // RUN QA
-  if(bHistTrackQA) {
-
-    // Event QA
-    histos->UserHistogram("Event","RunNumber","Events per run;run;#events",
-                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Event","RunNumber-Centrality",";run;#LTcentrality#GT (%)", AliDielectronVarManager::kCentrality,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Event","RunNumber-CentralitySPD",";run;#LTcentrality_{SPD}#GT (%)", AliDielectronVarManager::kCentralitySPD,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Event","RunNumber-VtxZ",";run;#LTz_{vtx}#GT (cm)", AliDielectronVarManager::kZvPrim,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Event","RunNumber-sigVtxZ",";run;#LTRMS(z_{vtx})#GT (cm)", AliDielectronVarManager::kZvPrim,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber, "s;-10;10");
-
-    //Track classes
-    histos->SetReservedWords("Track");
-    for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
-
-    histos->UserProfile("Track","RunNumber-Pt",";run;#LTp_{T}#GT (GeV/c)", AliDielectronVarManager::kPt,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber-Eta",";run;#LT#eta#GT", AliDielectronVarManager::kEta,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber-Phi",";run;#LT#varphi#GT", AliDielectronVarManager::kPhi,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber-ImpactParXY",";run;#LTdXY#GT (cm)", AliDielectronVarManager::kImpactParXY,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber-ImpactParZ",";run;#LTdZ#GT (cm)", AliDielectronVarManager::kImpactParZ,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    // TPC
-    histos->UserProfile("Track","RunNumber-NclsTPC",";run;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber_Cent-NclsTPC",";run;centrality (%);#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
-    histos->UserProfile("Track","RunNumber_Eta-NclsTPC",";run;#eta;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
-    histos->UserProfile("Track","RunNumber_Phi-NclsTPC",";run;#varphi;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
-
-    // ITS
-    histos->UserProfile("Track","RunNumber-NclsITS",";run;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber_Cent-NclsITS",";run;centrality (%);#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
-    histos->UserProfile("Track","RunNumber_Eta-NclsITS",";run;#eta;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
-    histos->UserProfile("Track","RunNumber_Phi-NclsITS",";run;#varphi;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
-
-    // TPC PID
-    histos->UserProfile("Track","RunNumber-TPCnSigmaEle",";run;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber_Cent-TPCnSigmaEle",";run;centrality (%);#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
-    histos->UserProfile("Track","RunNumber_Eta-TPCnSigmaEle",";run;#eta;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
-    histos->UserProfile("Track","RunNumber_Phi-TPCnSigmaEle",";run;#varphi;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
-    // TOF PID
-    histos->UserProfile("Track","RunNumber-TOFnSigmaEle",";run;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
-                       GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Track","RunNumber_Cent-TOFnSigmaEle",";run;centrality (%);#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
-    histos->UserProfile("Track","RunNumber_Eta-TOFnSigmaEle",";run;#eta;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
-    histos->UserProfile("Track","RunNumber_Phi-TOFnSigmaEle",";run;#varphi;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
-                       GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
-                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
-  }
+    histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
+    histos->UserHistogram("Event","","", 300,-15.,15.,   AliDielectronVarManager::kZvPrim);
+    //    histos->UserHistogram("Event","","", 300,0.,15000.,    AliDielectronVarManager::kRefMult);
+    histos->UserHistogram("Event","","", 300,0.,3000.,   AliDielectronVarManager::kRefMultTPConly);
+
+    //    histos->UserHistogram("Event","","", 100,0.,100.,      AliDielectronVarManager::kRefMultTPConly);
+    histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
+                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kRefMultTPConly);
+    histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(90, 0., 90.), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
+                         AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRefMultTPConly);
+    histos->UserProfile(  "Event","","", AliDielectronVarManager::kRefMultTPConly,        90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    histos->UserProfile(  "Event","","", AliDielectronVarManager::kMultV0A,               90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    histos->UserProfile(  "Event","","", AliDielectronVarManager::kMultV0C,               90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    // histos->UserProfile(  "Event","","", AliDielectronVarManager::kEqMultV0A,               90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    // histos->UserProfile(  "Event","","", AliDielectronVarManager::kEqMultV0C,               90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    histos->UserProfile(  "Event","","", AliDielectronVarManager::kNVtxContrib, 90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    histos->UserHistogram("Event","","", 100, 0., 4000.,  AliDielectronVarManager::kNVtxContribTPC);
+
+    // event plane histograms
+    if(!hasMC) AddQAHistsEP(die);
+    // trigger histograms
+    if(!hasMC) {
+      histos->UserHistogram("Event","","", 29,0.,29.,    AliDielectronVarManager::kTriggerInclONL);
+      histos->UserHistogram("Event","","", 29,0.,29.,    AliDielectronVarManager::kTriggerInclOFF);
+      histos->UserHistogram("Event","","", 29,0.,29.,    AliDielectronVarManager::kTriggerExclOFF);
+      histos->UserHistogram("Event","","", 100,0.,100.,29,0.,29., 
+                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTriggerInclONL);
+      histos->UserHistogram("Event","","", 100,0.,100.,29,0.,29., 
+                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTriggerExclOFF);
+      histos->UserHistogram("Event","","", 300,0.,3000.,29,0.,29., 
+                           AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTriggerExclOFF);
+      histos->UserHistogram("Event","","", 300,0.,3000.,29,0.,29., 
+                           AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTriggerInclOFF);
+    }
 
+  } //hist: event
 
+  ///// PAIR HISTOS /////
   if(bHistPair) {
-    //Initialise histogram classes
-    histos->SetReservedWords("Track;Pair");
 
     //Pair classes
     // to fill also mixed event histograms loop until 7 or 10
-    for (Int_t i=0; i<(bHistPairME ? 8 : 3); ++i){
+    for (Int_t i=1; i<(bHistPairME ? 8 : 2); ++i){
       histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
     }
-    //legs from pair (fill SE)
-    for (Int_t i=0; i<3; ++i){
-      histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
+
+    //add MC signal histograms to pair class
+    if(die->GetMCSignals()) {
+      for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i) {
+       histos->AddClass(Form("Pair_%s",die->GetMCSignals()->At(i)->GetName()));
+       histos->AddClass(Form("Pair_%s_MCtruth",die->GetMCSignals()->At(i)->GetName()));
+      }
     }
+
+    ///// Pair classes /////
+    histos->UserHistogram("Pair","","",  375,.0,375*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
+    histos->UserHistogram("Pair","","",  100,-1.,1.,      AliDielectronVarManager::kY);
+    histos->UserHistogram("Pair","","",  400,0,20.,       AliDielectronVarManager::kPt);
+    histos->UserHistogram("Pair","","",  125,.0,125*0.04, 400,0,20., AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
+    histos->UserHistogram("Pair","","",  100,0.,3.15,     AliDielectronVarManager::kOpeningAngle);
+    histos->UserHistogram("Pair","","",  100,0.,20,       AliDielectronVarManager::kChi2NDF);
+    histos->UserHistogram("Pair","","",  100,0.,3.15,     AliDielectronVarManager::kPsiPair);
+    histos->UserHistogram("Pair","","",  200,0.,100.,     AliDielectronVarManager::kR);
+    histos->UserHistogram("Pair","","",   50,0.,5.,       AliDielectronVarManager::kLegDist);
+    histos->UserHistogram("Pair","","",   50,0.,5.,       AliDielectronVarManager::kLegDistXY);
+    // histos->UserHistogram("Pair","","", 210,-1.05,1.05, 100,0.,2.5, 
+    //                           AliDielectronVarManager::kArmAlpha,AliDielectronVarManager::kArmPt);
+    histos->UserHistogram("Pair","","", 500,-2.5,2.5, AliDielectronVarManager::kImpactParXY);
+    histos->UserHistogram("Pair","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
+
+    if(!hasMC && die->GetMixingHandler() && maxMisBins)
+      histos->UserHistogram("Pair","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
+
+    histos->UserHistogram("Pair","","",  100,.0,1., AliDielectronVarManager::kRndmPair);
+    // histos->UserHistogram("Pair","","",  GetPDGcodes(), AliDielectronVarManager::kPdgCode);
+    // histos->UserHistogram("Pair","","",  GetPDGcodes(), AliDielectronVarManager::kPdgCodeMother);
+    // histos->UserHistogram("Pair","","",  GetPDGcodes(), AliDielectronVarManager::kPdgCodeGrandMother);
+
+  } //hist: pairs
+
+
+  ///// TRACK HISTOS /////
+  if(bHistTrk) {
     //Track classes
-    //to fill also track info from 2nd event loop until 2
-    for (Int_t i=0; i<2; ++i){
-      histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
+    //legs from pair (fill SE)
+    for (Int_t i=1; i<2; ++i){
+      if(bHistPair) histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
     }
-    //track rotation
-    //   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
-    //   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
+    //to fill also track info from 2nd event loop until 2
+    //    for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
+    if(cutDefinition!=kLegEff)
+    histos->AddClass(Form("Track_%s",     AliDielectron::PairClassName(AliDielectron::kEv1PM)));
 
-    // Vertex
-    histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
-                          AliDielectronVarManager::kImpactParXY);
-    histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
-                          AliDielectronVarManager::kImpactParZ);
+    // PID post calibration
+    if(cutDefinition==kPIDqa) AddQAHistsPID(die);
 
+    // Vertex
+    // histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
+    // histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
     // Kinematics
-    histos->UserHistogram("Track","pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
-                          AliDielectronVarManager::kPt);
-    histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
-                          AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
-
+    histos->UserHistogram("Track","","", 400,0,20.,  AliDielectronVarManager::kPt);
+    histos->UserHistogram("Track","","", 200,-1,1, 200,0,6.285, AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
     // TPC
-    histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
-                          AliDielectronVarManager::kNclsTPC);
-    histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
-                          AliDielectronVarManager::kTPCsignalN);
-    histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
-                          AliDielectronVarManager::kNFclsTPCr);
-    histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
-                          160,-0.5,159.5,160,-0.5,159.5,
-                          AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
-
+    // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kNclsTPC);
+    // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kTPCsignalN);
+    // histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kNFclsTPCr);
+    // histos->UserHistogram("Track","","", 160,-0.5,159.5, 160,-0.5,159.5, AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
     // TRD
-    histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
-                          8,-0.5,7.5,
-                          AliDielectronVarManager::kTRDpidQuality);
-
+    histos->UserHistogram("Track","","",   8,-0.5,  7.5, AliDielectronVarManager::kTRDpidQuality);
+    histos->UserHistogram("Track","","",   101,-0.5, 100.5, AliDielectronVarManager::kTRDsignal);
+    histos->UserHistogram("Track","","",   101,-0.5, 100.5, AliDielectronVarManager::kTRDchi2);
     // PID
-    histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
-                          400,0.2,20.,200,0.,200.,
-                          AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
-    histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
-                          400,0.2,20.,200,-10.,10.,
-                          AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
-    histos->UserHistogram("Track","TOFbeta_P",";p (GeV/c);#beta;#tracks",
-                          250,0.0,5.0,300,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
-
-    ///// add histograms to Pair classes /////
-    histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
-                          300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
-    histos->UserHistogram("Pair","Rapidity",";y;#pairs",
-                          100,-1.,1., AliDielectronVarManager::kY);
-    histos->UserHistogram("Pair","Pt",";p_{T} (GeV/c);#pairs",
-                         400,0,20., AliDielectronVarManager::kPt);
-    histos->UserHistogram("Pair","OpeningAngle",";opening angle (rad.);#pairs",
-                          100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
-    histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
-                          100,0.,20, AliDielectronVarManager::kChi2NDF);
-    histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
-                          100,0.,3.15, AliDielectronVarManager::kPsiPair);
-    histos->UserHistogram("Pair","R",";r (cm)",
-                          200,0.,100., AliDielectronVarManager::kR);
-    histos->UserHistogram("Pair","LegDist",";dca (cm)",
-                          50,0.,5., AliDielectronVarManager::kLegDist);
-    histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
-                          50,0.,5., AliDielectronVarManager::kLegDistXY);
-
-    //// FLOW results use tprofiles
-    if(bHistFlow) {
-      histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
-                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
-                         AliDielectronVarManager::kv0ACrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
-                         "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
-                         AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
-                         "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
-                         AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
-    } //hist: flow
-  } //hist: pair
-
+    histos->UserHistogram("Track","","", 400,0.2,20.,200,0.,200., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
+    histos->UserHistogram("Track","","", 400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
+    histos->UserHistogram("Track","","", 250,0.2,5.0,300,0.,1.2,  AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
+    // histos->UserHistogram("Track","","", 100,-1.,+1.,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
+
+    // histos->UserHistogram("Track","","", 100,0.2,10.,100,0.,200.,
+    //                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
+    // histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
+    //                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
+    histos->UserHistogram("Track","","", 100,0.,4000.,100,0.,200.,
+                         AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTPCsignal);
+    histos->UserHistogram("Track","","", 100,0.,4000.,100,-5.,+5.,
+                         AliDielectronVarManager::kRefMultTPConly,AliDielectronVarManager::kTPCnSigmaEle);
+    histos->UserHistogram("Track","","", 100,0.,100.,100,0.,200.,
+                         AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsignal);
+    histos->UserHistogram("Track","","", 100,0.,100.,100,-5.,+5.,
+                         AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCnSigmaEle);
+    histos->UserHistogram("Track","","", 100,-1.,+1.,100,0.,200.,
+                         AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal);
+    histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
+                         AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
+    histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
+                         AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEleRaw);
+    histos->UserHistogram("Track","","", 100,-1.,+1.,100,-5.,+5.,
+                         AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaPio);
+  } //hist: tracks
+
+
+  if(cutDefinition==kAvgPt) {
+    // add single electron efficiency histograms
+    AddQAHistsEff(die);
+  }
 
   ////// MONTE CARLO //////
-  /*
-    if(cutDefinition == kTOFTRD && hasMC) {
-    histos->AddClass("MCEvent");
-    histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
-    10,0.,100., 21,-0.5,20.5,
-    AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
-    }
-  */
+  if(cutDefinition==kLegEff) {
+
+    //add MC signal histograms to track class
+    if(die->GetMCSignals()) {
+
+      TString className="";
+      for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i) {
+       TString sigMCname = die->GetMCSignals()->At(i)->GetName();
+
+       // mc truth
+       //      histos->AddClass(Form("Pair_%s_MCtruth",      sigMCname.Data()));
+       // histos->AddClass(Form("Track_Legs_%s_MCtruth",sigMCname.Data()));
+       // mc reconstructed
+       // histos->AddClass(Form("Pair_%s",              sigMCname.Data()));
+       // histos->AddClass(Form("Track_Legs_%s",        sigMCname.Data()));
+       // tracks
+       histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
+       histos->AddClass(Form("Track_%s_%s_MCtruth",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
+      } //end: loop signals
+    } //end: has signals
+
+    // add single electron histograms
+    AddHistsEleEff(die);
+    // pdg codes
+    //    histos->UserHistogram("Track","","",  GetPDGcodes(), AliDielectronVarManager::kPdgCode);
+    //    histos->UserHistogram("Track","","",  GetPDGcodes(), AliDielectronVarManager::kPdgCodeMother);
+    //    histos->UserHistogram("Track","","",  GetPDGcodes(), AliDielectronVarManager::kPdgCodeGrandMother);
+    //    histos->UserHistogram("Track","","",  GetPDGcodes(), GetPDGcodes(),
+    //                           AliDielectronVarManager::kPdgCodeMother, AliDielectronVarManager::kPdgCodeGrandMother);
+  }
+
+
 
-  //  histos->UserHistogram("Track","TRDprobEle",";P_{ele}^{TRD};#tracks", 
-  //                   100,0.,1.,            AliDielectronVarManager::kTRDprobEle);
-  
   die->SetHistogramManager(histos);
+
+
+  ////// LOG //////
+  TIter nextClass(histos->GetHistogramList());
+  THashList *l=0;
+  while ( (l=static_cast<THashList*>(nextClass())) ) {
+    //printf(" [D] HistogramManger: Class %s: Histograms: %04d \n", l->GetName(), l->GetEntries());
+  }
+
+} //end: init histograms
+
+void AddQAHistsPID(AliDielectron *die) {
+  //
+  // add histograms for PID validation, comparison, post calibration aso.
+  //
+
+  Bool_t hasMC=die->GetHasMC();
+  AliDielectronHistos *histos = die->GetHistoManager();
+
+  // add MC signal tracks
+  if(hasMC && die->GetMCSignals()) {
+    TString sigMCname = die->GetMCSignals()->Last()->GetName();
+    histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),sigMCname.Data()));
+  }
+
+
+  // for TPC post calibration
+
+  // arbitrary binning for variables
+  TVectorD *vcen = AliDielectronHelper::MakeLinBinning( 11,  0.,    55.);
+  (*vcen)[21] = 90.;
+
+  // array of bin limits
+  TObjArray *limits  = new TObjArray();
+  limits->Add(AliDielectronHelper::MakeLinBinning( 75,-10.,     5.));
+  limits->Add(AliDielectronHelper::MakeLinBinning( 75,-10.,     5.));
+  //  limits->Add(AliDielectronHelper::MakeLinBinning(100,  0.,   200.));
+  //  limits->Add(AliDielectronHelper::MakeLinBinning(60,   0.,    1.2));
+  limits->Add(AliDielectronHelper::MakeLinBinning( 50,  0.,  4000.));
+  limits->Add(AliDielectronHelper::MakeLinBinning( 50,  0.,    10.));
+  //  limits->Add(vcen);
+  //    limits->Add(AliDielectronHelper::MakeLinBinning( 36,  0.,    90.));
+  limits->Add(AliDielectronHelper::MakeLinBinning( 20, -1.,     1.));
+  limits->Add(GetRunNumbers2011());
+  UInt_t var[]={AliDielectronVarManager::kTPCnSigmaEleRaw,  // NOTE: raw nsigma w/o corr
+               AliDielectronVarManager::kTPCnSigmaEle,
+               //              AliDielectronVarManager::kTOFbeta,
+               // AliDielectronVarManager::kTPCsignal,
+               AliDielectronVarManager::kRefMultTPConly,
+               AliDielectronVarManager::kPIn,
+               // AliDielectronVarManager::kCentrality,
+               AliDielectronVarManager::kEta,
+               AliDielectronVarManager::kRunNumber
+  };
+  // add merged track histogram
+  histos->UserSparse("Track", limits->GetEntriesFast(), limits, var);
+
+  // run dependence of nisgma electron
+  histos->UserHistogram("Track","","", GetRunNumbers2011(),AliDielectronHelper::MakeLinBinning(100,-5.,+5.),
+                       AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEleRaw);
+  histos->UserHistogram("Track","","", GetRunNumbers2011(),AliDielectronHelper::MakeLinBinning(100,-5.,+5.),
+                       AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEle);
+
+  // post calibration check
+  histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
+                       AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEleRaw,kTRUE);
+  histos->UserHistogram("Track","","", 100,0.2,10.,100,-5.,+5.,
+                       AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
+
+  // TPC number of points used for nsigma calculation
+  histos->UserHistogram("Track","","", 160,-0.5,159.5, AliDielectronVarManager::kTPCsignalN);
 }
 
+void AddQAHistsEP(AliDielectron *die) {
+  //
+  // add histograms for event plane flattening aso.
+  //
+
+  Bool_t hasMC=die->GetHasMC();
+  AliDielectronHistos *histos = die->GetHistoManager();
+
+  histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(100,-1.6,1.6), AliDielectronVarManager::kTPCrpH2);
+  histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(100,-1.6,1.6), AliDielectronVarManager::kTPCrpH2uc);
+
+  // event plane resolutions
+  TObjArray *limits  = new TObjArray();
+  limits->Add(AliDielectronHelper::MakeLinBinning( 18,  0.,    90.));
+  //    limits->Add(GetRunNumbers2011());
+  limits->Add(AliDielectronHelper::MakeLinBinning(100,  -1.,    1.));
+  limits->Add(AliDielectronHelper::MakeLinBinning(100,  -1.,    1.));
+  limits->Add(AliDielectronHelper::MakeLinBinning(100,  -1.,    1.));
+
+  UInt_t var[]={AliDielectronVarManager::kCentrality,
+               //                 AliDielectronVarManager::kRunNumber,
+               AliDielectronVarManager::kv0ATPCDiffH2,
+               AliDielectronVarManager::kv0CTPCDiffH2,
+               AliDielectronVarManager::kv0Av0CDiffH2 };
+  //  histos->UserSparse("Event", 4, limits, var);
+
+  // event plane angles
+  TObjArray *limits2  = new TObjArray();
+  limits2->Add(AliDielectronHelper::MakeLinBinning( 18,   0.,    90.));
+  //  limits2->Add(GetRunNumbers2011());
+  limits2->Add(AliDielectronHelper::MakeLinBinning(100,  -1.6,   1.6));
+  limits2->Add(AliDielectronHelper::MakeLinBinning(100,  -1.6,   1.6));
+  limits2->Add(AliDielectronHelper::MakeLinBinning(100,  -1.6.,  1.6));
+
+  UInt_t var2[]={AliDielectronVarManager::kCentrality,
+                //              AliDielectronVarManager::kRunNumber,
+                AliDielectronVarManager::kv0ArpH2,
+                AliDielectronVarManager::kv0CrpH2,
+                AliDielectronVarManager::kTPCrpH2 };
+  histos->UserSparse("Event", limits2->GetEntriesFast(), limits2, var2);
+
+  // VZERO event plane angles (sub rings)
+  histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0A0rpH2);
+  histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0C0rpH2);
+  histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0A3rpH2);
+  histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0C3rpH2);
+  histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0ACrpH2); // combined A+C
+
+  // run dependence of the angles
+  histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
+                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
+  histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
+                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
+  histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(100,-1.6,1.6),
+                       AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2);
+
+
+  // TPC q vector components
+  histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCxH2);
+  histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCyH2);
+  // histos->UserHistogram("Event","","", 100,   -2.,   2., AliDielectronVarManager::kTPCsub1rpH2);
+  // histos->UserHistogram("Event","","", 100,   -2.,   2., AliDielectronVarManager::kTPCsub2rpH2);
+  // histos->UserHistogram("Event","","", 100,   -1.,   1., AliDielectronVarManager::kTPCsub12DiffH2);
+
+  // further event plane resolutions (used in 3 sub event method)
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0ATPCDiffH2,   18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0CTPCDiffH2,   18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0CDiffH2,   18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kTPCsub12DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0C0DiffH2,  18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0Av0C3DiffH2,  18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0Cv0A0DiffH2,  18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0Cv0A3DiffH2,  18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0A0v0A3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Event","","", AliDielectronVarManager::kv0C0v0C3DiffH2, 18, 0.,90., AliDielectronVarManager::kCentrality);
+
+  // EP angle correlation (range of phi angle)
+  // histos->UserHistogram("Event","","", 320,-3.2.,3.2, 320,-3.2.,3.2,
+  //                   AliDielectronVarManager::kTPCrpH2,AliDielectronVarManager::kv0ACrpH2);
+
+  // EP Qvector magnitudes
+  histos->UserHistogram("Event","","", 200,0.,200., AliDielectronVarManager::kTPCmagH2);
+  histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0ACmagH2);
+  histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0AmagH2);
+  histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0CmagH2);
+
+  // detector effects checks
+  histos->UserHistogram("Event","","", 10,0.,100., 300,-1.0,1.0,
+                       AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCsub12DiffH2Sin);
+
+  // TPC recentering
+  // histos->UserProfile("Event","","", AliDielectronVarManager::kTPCxH2,
+  //                 AliDielectronHelper::MakeLinBinning(9, 0.,90.), GetRunNumbers2011(),
+  //                 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
+  // histos->UserProfile("Event","","", AliDielectronVarManager::kTPCyH2,
+  //                 AliDielectronHelper::MakeLinBinning(9, 0.,90.), GetRunNumbers2011(),
+  //                 AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
+
+}
+
+void AddHistsEleEff(AliDielectron *die) {
+  //
+  // adding histograms for single electron efficiencies
+  //
+
+  Bool_t hasMC=die->GetHasMC();
+  AliDielectronHistos *histos = die->GetHistoManager();
+
+  // single electron efficiecy
+
+  // arbitrary binning for variables
+  // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41,  0.0,    10.25);
+  // (*vpt)[41] = 20.;
+  TVectorD *vpt1 = AliDielectronHelper::MakeLinBinning( (int)(( 3. - 0.)/0.10),    0.,     3.); //steps of 100MeV
+  TVectorD *vpt2 = AliDielectronHelper::MakeLinBinning( (int)(( 10.- 3.25)/0.25),  3.25,  10.); //steps of 250MeV
+  TVectorD *vpt3 = AliDielectronHelper::MakeLinBinning( (int)((100.-20.)/10.0),   20.,   100.); //steps of 10GeV
+  TVectorD *vpt  = new TVectorD(vpt1->GetNrows()+vpt2->GetNrows()+vpt3->GetNrows());
+  for(Int_t i=0; i<vpt1->GetNrows(); i++) (*vpt)[i]                                   = (*vpt1)[i];
+  for(Int_t i=0; i<vpt2->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+i]                  = (*vpt2)[i];
+  for(Int_t i=0; i<vpt3->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+vpt2->GetNrows()+i] = (*vpt3)[i];
+  delete vpt1;  delete vpt2;  delete vpt3;  //vpt->Print();
+
+  // array of bin limits
+  TObjArray *limEpm  = new TObjArray();
+  //    limEpm->Add(AliDielectronHelper::MakeLinBinning( 75,-10.,     5.));
+  limEpm->Add(AliDielectronHelper::MakeLinBinning( 18,  0.,    90.));
+  limEpm->Add(vpt);
+  limEpm->Add(AliDielectronHelper::MakeLinBinning( 20,  0.,   TMath::TwoPi()));
+  limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, -1.,    +1.));
+  //  limEpm->Add(AliDielectronHelper::MakeLinBinning(  1, -1.,    +1.));
+  //  limEpm->Add(AliDielectronHelper::MakeLinBinning(  1, -1.,    +1.));
+  limEpm->Add(GetRunNumbers2011());
+  limEpm->Add(GetPDGcodes());
+  limEpm->Add(GetPDGcodes());
+  UInt_t varEpm[]={//AliDielectronVarManager::kTPCnSigmaEle,
+    AliDielectronVarManager::kCentrality
+    ,AliDielectronVarManager::kPt
+    ,AliDielectronVarManager::kPhi
+    ,AliDielectronVarManager::kEta
+    //    ,AliDielectronVarManager::kImpactParXY
+    //    ,AliDielectronVarManager::kImpactParZ
+    ,AliDielectronVarManager::kRunNumber
+    ,AliDielectronVarManager::kPdgCodeMother
+    ,AliDielectronVarManager::kPdgCodeGrandMother
+  };
+  // adding histogram
+  if(hasMC) histos->UserSparse("Track", limEpm->GetEntriesFast(), limEpm, varEpm);
+  delete limEpm;
+
+  histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
+  histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
+
+  // polarisation //
+  // array of bin limits
+  TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21,  0.0,    10.5);
+  (*vpt)[21] = 100.;
+  TObjArray *limPair  = new TObjArray();
+  limPair->Add(AliDielectronHelper::MakeLinBinning( 18,  0.,    90.));
+  limPair->Add(AliDielectronHelper::MakeLinBinning( 20, -1.,    +1.));
+  limPair->Add(vpt);
+  //  limPair->Add(GetPDGcodes());
+  UInt_t varPair[]={
+    AliDielectronVarManager::kCentrality
+    ,AliDielectronVarManager::kThetaCS
+    ,AliDielectronVarManager::kPt
+    //    ,AliDielectronVarManager::kPdgCodeMother
+  };
+  //  if(hasMC) histos->UserSparse("Pair", limPair->GetEntriesFast(), limPair, varPair); // TAKES 4ever
+  delete limPair;
+
+}
+
+void AddQAHistsEff(AliDielectron *die) {
+  //
+  // adding histograms for single electron efficiencies
+  //
+
+  Bool_t hasMC=die->GetHasMC();
+  AliDielectronHistos *histos = die->GetHistoManager();
+
+  // arbitrary binning for variables
+  TVectorD *vpt1 = AliDielectronHelper::MakeLinBinning( (int)(( 3. - 0.)/0.10),    0.,     3.);
+  TVectorD *vpt2 = AliDielectronHelper::MakeLinBinning( (int)(( 10.- 3.25)/0.25),  3.25,  10.);
+  TVectorD *vpt3 = AliDielectronHelper::MakeLinBinning( (int)((100.-20.)/10.0),   20.,   100.);
+  TVectorD *vpt  = new TVectorD(vpt1->GetNrows()+vpt2->GetNrows()+vpt3->GetNrows());
+  for(Int_t i=0; i<vpt1->GetNrows(); i++) (*vpt)[i]                                   = (*vpt1)[i];
+  for(Int_t i=0; i<vpt2->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+i]                  = (*vpt2)[i];
+  for(Int_t i=0; i<vpt3->GetNrows(); i++) (*vpt)[vpt1->GetNrows()+vpt2->GetNrows()+i] = (*vpt3)[i];
+  delete vpt1;  delete vpt2;  delete vpt3;
+
+  // single electron efficiecy
+  // applied efficiencies in collision data
+  histos->UserHistogram("Track","","", 101,-0.01,1.0, AliDielectronVarManager::kLegEff);
+  histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, GetRunNumbers2011(),  AliDielectronVarManager::kRunNumber);
+  histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 18,0.0,90.0,  AliDielectronVarManager::kCentrality);
+  histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, vpt, AliDielectronVarManager::kPt);
+  histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,0.0,TMath::TwoPi(), AliDielectronVarManager::kPhi);
+  histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,-1.,+1.,   AliDielectronVarManager::kEta);
+  // histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff,
+  //                 vpt, AliDielectronHelper::MakeLinBinning(20,0.0,TMath::TwoPi()),
+  //                 AliDielectronVarManager::kPt,AliDielectronVarManager::kPhi);
+
+  histos->UserHistogram("Pair","","", 101,-0.01,1.0, AliDielectronVarManager::kPairEff);
+  histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 125,.0,125*0.04, AliDielectronVarManager::kM);
+  histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 100,.0,10.0,     AliDielectronVarManager::kPt);
+  histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 18,0.0,90.0,     AliDielectronVarManager::kCentrality);
+
+  histos->UserHistogram("Pair","","", 125,.0,125*0.04, 101,-0.01,1.0,
+                       AliDielectronVarManager::kM, AliDielectronVarManager::kPairEff);
+  histos->UserHistogram("Pair","","", 200,0,10., 101,-0.01,1.0,
+                       AliDielectronVarManager::kPt, AliDielectronVarManager::kPairEff);
+
+  // array of bin limits
+  TObjArray *limEpm  = new TObjArray();
+  limEpm->Add(AliDielectronHelper::MakeLinBinning( 125,  0., 125*0.04));
+  limEpm->Add(AliDielectronHelper::MakeLinBinning( 40,   0.,      10.));
+  limEpm->Add(AliDielectronHelper::MakeLinBinning( 101, -0.01,   +1.0));
+  UInt_t varEpm[]={
+    AliDielectronVarManager::kM
+    ,AliDielectronVarManager::kPt
+    ,AliDielectronVarManager::kPairEff
+  };
+  //  histos->UserSparse("Pair", limEpm->GetEntriesFast(), limEpm, varEpm);
+  delete limEpm;
+
+  histos->UserProfile("Pair","","", AliDielectronVarManager::kPt,125,.0,125*0.04, AliDielectronVarManager::kM);
+  //weighted
+  histos->UserHistogram("Pair","","", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
+                       AliDielectronVarManager::kM, AliDielectronVarManager::kOneOverPairEff);
+  histos->UserProfile("Pair", "","", AliDielectronVarManager::kPt,AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
+                     AliDielectronVarManager::kM, "", AliDielectronVarManager::kOneOverPairEff);
+}
+
+
 void InitHF(AliDielectron* die, Int_t cutDefinition)
 {
   //
   // Setup the HF arrays
   //
+  // do not fill
+  switch(cutDefinition) {
+  case kNoCut:
+  case kEvent:
+  case kPIDqa:
+  case kLegEff:
+  case kNoPID:
+  case kRec:
+  case kSysMC:
+    return;
+  }
+
+  // has mc
+  Bool_t hasMC=die->GetHasMC();
+  // booleans for histo selection
+  Bool_t bHistEff = kFALSE; //ATTENTION
+  // mixing
+  AliDielectronMixingHandler *mixH=die->GetMixingHandler();
+  Int_t maxMixBins = (mixH ? mixH->GetNumberOfBins() : 0);
 
+  // container
   AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
-  //  if(hasMC) hf->SetStepForMCGenerated();
-  hf->SetPairTypes(AliDielectronHF::kAll);
-  hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
+  // define pair types and sources
+  if(hasMC) hf->SetStepForMCGenerated();
+  hf->SetPairTypes(AliDielectronHF::kOSandMIX);
+  if(hasMC && cutDefinition!=kAvgPt)  hf->SetPairTypes(AliDielectronHF::kMConly); // only mc truth
+  //  hf->SetPairTypes(AliDielectronHF::kAll);    // all pair types
+
+  //// define the grid size and granularity /////
+  hf->AddCutVariable(AliDielectronVarManager::kCentrality, AliDielectronHelper::MakeArbitraryBinning("0.,10.,40.,50.,90."));
+  hf->AddCutVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0.,1.5,2.,2.5,3.,5.,6.,7.,8.,10.,100."));
+  hf->AddCutVariable(AliDielectronVarManager::kY,  AliDielectronHelper::MakeArbitraryBinning("-0.9,-0.8,0.8,0.9"));
+
+  // hf->AddCutVariable(AliDielectronVarManager::kCentrality,               9, 0., 90.);
+  // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21,  0.0,    10.5);
+  // (*vpt)[21] = 100.;
+  // hf->AddCutVariable(AliDielectronVarManager::kPt, vpt);
+  // hf->AddCutVariable(AliDielectronVarManager::kY,  1, -0.8,  0.8);
+  if(cutDefinition==kAvgPt ) //NEW
+  hf->AddCutVariable(AliDielectronVarManager::kPairEff,  AliDielectronHelper::MakeArbitraryBinning(".0,.01,.02,.03,.04,.05,.1,1."));
+
+  // defaults
+  hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+  // for mixed event weighting
+  // if(mixH) hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins), AliDielectronVarManager::kMixingBin);
+
+  // mean pt analysis
+  if(cutDefinition==kAvgPt) {
+    hf->UserProfile("Pair", AliDielectronVarManager::kPt,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    // hf->UserProfile("Pair", AliDielectronVarManager::kPtSq,
+    //                     AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    // ME binning
+    // hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
+    //                       AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
+    //                       AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin);
+    // hf->UserProfile("Pair", AliDielectronVarManager::kPt,
+    //                     AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
+    //                     AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
+    //                     AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin);
+  }
 
-  hf->AddCutVariable(AliDielectronVarManager::kCentrality,  "0.,5.,10.,20.,40.,50.,60.,80."  );
-  hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.,2.5,5.,100."                 );
-  hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
+  // flow analysis
+  if(cutDefinition==kFlow && !hasMC) {
+    // flow versus minv
+    hf->UserProfile("Pair", AliDielectronVarManager::kv0ArpH2FlowV2,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kv0CrpH2FlowV2,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kTPCrpH2FlowV2,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    // detector effects
+    hf->UserProfile("Pair", AliDielectronVarManager::kCosTPCrpH2,
+                   AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kSinTPCrpH2,
+                   AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kCosPhiH2,
+                   AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kSinPhiH2,
+                   AliDielectronHelper::MakeLinBinning(1,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kTPCrpH2FlowV2Sin,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+
+    // variables
+    hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
+    hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
+    hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2, GetDeltaPhiBins());
+  }
+
+  // on the fly efficienies
+  if(cutDefinition==kAvgPt/* && (!hasMC || 0)*/) {
+    hf->UserProfile("Pair", AliDielectronVarManager::kPairEff, 
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
+                     AliDielectronVarManager::kOneOverPairEff);
+    hf->UserProfile("Pair", AliDielectronVarManager::kPt,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM, 
+                   "", AliDielectronVarManager::kOneOverPairEff);
+    // hf->UserProfile("Pair", AliDielectronVarManager::kPtSq,
+    //                     AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM, 
+    //                     "", AliDielectronVarManager::kOneOverPairEff);
+
+    // ME binning
+    if(maxMixBins) {
+      hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
+                       AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
+                       AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin,
+                       AliDielectronVarManager::kOneOverPairEff);
+      hf->UserProfile("Pair", AliDielectronVarManager::kPt,
+                     AliDielectronHelper::MakeLinBinning(125,.0,125*0.04),
+                     AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins),
+                     AliDielectronVarManager::kM, AliDielectronVarManager::kMixingBin,"",
+                     AliDielectronVarManager::kOneOverPairEff);
+    }
+  }
+
+
+  /*
+//// define the grid size and granularity /////
+// event variables //
+//  hf->AddCutVariable(AliDielectronVarManager::kCentrality, AliDielectronHelper::MakeArbitraryBinning("0,10,50,90")); // flow only
+if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kCentrality,               18, 0., 90.);
+else      hf->AddCutVariable(AliDielectronVarManager::kCentrality,               9, 0., 90.);
+//  if(hasMC)  hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
+//  if(hasMC)  hf->AddCutVariable(AliDielectronVarManager::kNacc,        3000,0.,3000.);
+//  if(hasMC)  hf->AddCutVariable(AliDielectronVarManager::kNVtxContrib,   20,0.,4000.);
+
+  // pair variables //ATTENTION
+  if(hasMC && 0) hf->AddCutVariable(AliDielectronVarManager::kY,  18, -0.9,  0.9);
+  //  hf->AddCutVariable(AliDielectronVarManager::kPt, 10,  0.0, 10.0);
+  if(!hasMC)
+     hf->AddCutVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0,1,2,3,4,5,6,7,8,9,10,100"));
+  //  hf->AddCutVariable(AliDielectronVarManager::kPt, 20,  0.0, 10.0);
+  else
+    hf->AddCutVariable(AliDielectronVarManager::kPt, 50,  0.0, 10.0);
+
+  //    if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
+  //    if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
+
+  // flow variables //
+  //  if(!hasMC) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
+  //  if(!hasMC) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
+  if(!hasMC && bHistFlow) hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2, GetDeltaPhiBins());
+
+  // leg variables // NOTE: switched off in HF??
+  //  if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kPt, "0.85, 0.95, 1.1, 100.0", kTRUE, AliDielectronHF::kBinToMax);
+  // if(hasMC) hf->AddCutVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,0.8,0.9",      kTRUE, AliDielectronHF::kSymBin);
   //  hf->AddCutVariable(AliDielectronVarManager::kY,           1, -0.9, 0.9                     );
   //  hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
-  // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC,     "70,90,100,120,160",              kTRUE, AliDielectronHF::kBinToMax);
+  //  hf->AddCutVariable(AliDielectronVarManager::kNclsTPC,     "70,90,100,120,160",              kTRUE, AliDielectronHF::kBinToMax);
   //  hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4",        kTRUE, AliDielectronHF::kSymBin);
   //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.",                 kTRUE, AliDielectronHF::kBinToMax);
   //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4.,              kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
   //hf->AddCutVariable(AliDielectronVarManager::kNclsITS,         5,2.,7.,              kFALSE, kTRUE, AliDielectronHF::kBinToMax);
-  //hf->AddCutVariable(AliDielectronVarManager::kRunNumber,  GetRunNumbers());
-
+  //hf->AddCutVariable(AliDielectronVarManager::kRunNumber,  GetRunNumbers2011());
+  */
   die->SetHistogramArray(hf);
 }
 
@@ -856,65 +1357,144 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
   //
   // Setup the CF Manager if needed
   //
+  // do not fill
+  switch(cutDefinition) {
+  case kNoCut:
+  case kEvent:
+  case kPIDqa:
+  case kLegEff:
+  case kNoPID:
+  case kAvgPt: //////////////////NEW
+    return;
+  }
 
- AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
+  // has mc
+  Bool_t hasMC=die->GetHasMC();
+
+  // mixing
+  AliDielectronMixingHandler *mixH=die->GetMixingHandler();
+  Int_t maxMixBins = (mixH ? mixH->GetNumberOfBins() : 0);
+
+  // container
+  AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
+
+  //event variables
+  //cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.0,10.0,15.0,20.0,25.0,30.0,35.0,40.0,50.0");
+  cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.0,10.0,15.0,20.0,25.0,30.0,35.0,40.0,50.0,60.0,70.0,80.,90.");
+  //  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
+  if(mixH && maxMixBins)  cf->AddVariable(AliDielectronVarManager::kMixingBin, AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins));
+
+  //pair variables
+  TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 21,  0.0,    10.5);
+  (*vpt)[21] = 100.;
+  cf->AddVariable(AliDielectronVarManager::kPt, vpt);
+  // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41,  0.0,    10.25);
+  // (*vpt)[41] = 100.;
+  //  cf->AddVariable(AliDielectronVarManager::kPt,vpt);
+  //  cf->AddVariable(AliDielectronVarManager::kPt,80,0.0,100*0.25);
+
+  //  cf->AddVariable(AliDielectronVarManager::kY,"-5,-1,-0.9,-0.8,-0.5,0.5,0.8,0.9,1.0,5");
+  cf->AddVariable(AliDielectronVarManager::kY,"-0.9,-0.8,-0.7,+0.7,+0.8,+0.9");
+  //  cf->AddVariable(AliDielectronVarManager::kY,18,-0.9,+0.9);
+  cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
+  //  cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
+  cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
+  //  cf->AddVariable(AliDielectronVarManager::kThetaCS,20,-1.,+1.);
+  //  cf->AddVariable(AliDielectronVarManager::kThetaHE,20,-1.,+1.);
+  //  cf->AddVariable(AliDielectronVarManager::kPhiCS,20,-3.2,+3.2);
+  //  cf->AddVariable(AliDielectronVarManager::kPhiHE,20,-3.2,+3.2);
+  ///  cf->AddVariable(AliDielectronVarManager::kDeltaPhiTPCrpH2,GetDeltaPhiBins());
+
+  if(cutDefinition==kAvgPt && 0) { //ATTENTION
+    cf->AddVariable(AliDielectronVarManager::kPairEff,  AliDielectronHelper::MakeArbitraryBinning(".0,.01,.02,.03,.04,.05,.1,1."));
+  }
 
+  //leg variables
+  if(cutDefinition==kSysMC) { //ATTENTION
+    //  if(cutDefinition!=kSysMCele && 0) { //ATTENTION
+    cf->AddVariable(AliDielectronVarManager::kPt,"0.85, 1.1, 100.0",kTRUE);
+    //  cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 80, 90, 100, 120, 160",kTRUE);
+    cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,-0.85,-0.8,-0.75,-0.70,0.70,0.75,0.8,0.85,0.9",kTRUE);
+    cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,3,-1.5,1.5,kTRUE);
+    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,100",kTRUE);
+    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-1.5,-1.0,-0.6,3.0",kTRUE);
+  }
+  else if(0){
+    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3.0,-1.5,-1.0,-0.6,3.0",kTRUE);
+  }
+  /*
   // event variables
-  cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
-  //    if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
-  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
-  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
-  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
+  cf->AddVariable(AliDielectronVarManager::kCentrality,               18,0.,  90.);
+  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
+  //  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNacc,        3000,0.,3000.);
+  //  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNVtxContrib,   20,0.,4000.);
 
   // pair variables
-  //    cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
-  cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
-  cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
-  cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
-  if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
+  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
+  else       cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
+  cf->AddVariable(AliDielectronVarManager::kM, 125,  0.0,  5.0); //40Mev Steps
+  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kY,  18, -0.9,  0.9);
+  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kPt, 100,  0.0, 20.0);
+  else       cf->AddVariable(AliDielectronVarManager::kPt, AliDielectronHelper::MakeArbitraryBinning("0,1,2,3,4,5,6,7,8,9,10,20"));
+  //    if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
   //    if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
 
   // flow variables
-  cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
-  cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
+  //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
+  //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
 
   // leg variables
-  cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
-  if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
+  if(hasMC) cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.85, 0.95, 1.0, 1.1, 100.0",kTRUE);
+  if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,-0.7, 0.7, 0.8, 0.9",  kTRUE);
   //    cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
   //    cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
-  cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
-  cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
-  cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
+  //    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
+  //    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
+  //    cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
   //    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
   //    cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
   //    cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
   //    if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
-
+  */
   // mc steps
   if(hasMC) {
-    if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
-    cf->SetStepsForMCtruthOnly();
-    // cf->SetStepsForBackground();
+    cf->SetStepForMCtruth();
+    //    cf->SetStepForNoCutsMCmotherPid();
+    //    cf->SetStepForAfterAllCuts();
+    //    cf->SetStepsForEachCut();
+    //    cf->SetStepsForSignal();
+    //    cf->SetStepsForBackground();
+    if(cutDefinition!=kAvgPt) cf->SetStepsForMCtruthOnly();
   }
+  else
+    cf->SetStepsForSignal();
 
   die->SetCFManagerPair(cf);
 }
 
-void AddMCSignals(AliDielectron *die){
+void AddMCSignals(AliDielectron *die, Int_t cutDefinition){
   //Do we have an MC handler?
-  if (!hasMC) return;
-  
-  AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
+  if (!die->GetHasMC()) return;
+
+  AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive");
   inclusiveJpsi->SetLegPDGs(11,-11);
   inclusiveJpsi->SetMotherPDGs(443,443);
   inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
   inclusiveJpsi->SetFillPureMCStep(kTRUE);
   inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
   inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
-  die->AddSignalMC(inclusiveJpsi);
-  
-  AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
+
+  AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty");
+  beautyJpsi->SetLegPDGs(11,-11);
+  beautyJpsi->SetMotherPDGs(443,443);
+  beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
+  beautyJpsi->SetGrandMotherPDGs(500,500);
+  beautyJpsi->SetFillPureMCStep(kTRUE);
+  beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
+  beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
+
+  AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt");   // prompt J/psi (not from beauty decays)
   promptJpsi->SetLegPDGs(11,-11);
   promptJpsi->SetMotherPDGs(443,443);
   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
@@ -924,39 +1504,9 @@ void AddMCSignals(AliDielectron *die){
   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
-  die->AddSignalMC(promptJpsi);
-  
-  AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
-  beautyJpsi->SetLegPDGs(11,-11);
-  beautyJpsi->SetMotherPDGs(443,443);
-  beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
-  beautyJpsi->SetGrandMotherPDGs(500,500);
-  beautyJpsi->SetFillPureMCStep(kTRUE);
-  beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
-  beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
-  beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
-  die->AddSignalMC(beautyJpsi);
-  
-  AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi");   // embedded J/psi
-  directJpsi->SetLegPDGs(11,-11);
-  directJpsi->SetMotherPDGs(443,443);
-  directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
-  directJpsi->SetFillPureMCStep(kTRUE);
-  directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
-  directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
-  directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
-  directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
-  die->AddSignalMC(directJpsi);
-  
-  AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");  // pairs made from conversion (may be also from 2 different conversions)
-  conversionElePairs->SetLegPDGs(11,-11);
-  conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
-  conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
-  conversionElePairs->SetMotherPDGs(22,22);
-  die->AddSignalMC(conversionElePairs);
 
   // prompt J/psi radiative channel
-  AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","Prompt J/psi Radiative");   // prompt J/psi (not from beauty decays)
+  AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","PromptRadiative");   // prompt J/psi (not from beauty decays)
   promptJpsiRad->SetLegPDGs(11,-11);
   promptJpsiRad->SetMotherPDGs(443,443);
   promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
@@ -967,10 +1517,9 @@ void AddMCSignals(AliDielectron *die){
   promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
   promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
-  //  die->AddSignalMC(promptJpsiRad);
 
   // prompt J/psi Non radiative channel
-  AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","Prompt J/psi non-Radiative");   // prompt J/psi (not from beauty decays)
+  AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","PromptNonRadiative");   // prompt J/psi (not from beauty decays)
   promptJpsiNonRad->SetLegPDGs(11,-11);
   promptJpsiNonRad->SetMotherPDGs(443,443);
   promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
@@ -981,76 +1530,286 @@ void AddMCSignals(AliDielectron *die){
   promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
   promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
-  //  die->AddSignalMC(promptJpsiNonRad);
-}
 
-void SetEtaCorrection()
-{
-  if (AliDielectronPID::GetEtaCorrFunction()) return;
-  
-  TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
-  TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
-  if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
-  if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
-    Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
+  AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct");   // embedded J/psi
+  directJpsi->SetLegPDGs(11,-11);
+  directJpsi->SetMotherPDGs(443,443);
+  directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
+  directJpsi->SetFillPureMCStep(kTRUE);
+  directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+  directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
+  directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
+
+  AliDielectronSignalMC* gammaConversion = new AliDielectronSignalMC("gammaConversion","gamma conversions");
+  gammaConversion->SetLegPDGs(11,-11);
+  gammaConversion->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  gammaConversion->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
+  gammaConversion->SetMotherPDGs(22,22);
+  gammaConversion->SetMothersRelation(AliDielectronSignalMC::kSame);
+
+
+  AliDielectronSignalMC* electrons = new AliDielectronSignalMC("electrons","electrons");
+  electrons->SetLegPDGs(11,1);  //dummy second leg (never MCtrue)
+  electrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  electrons->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+  //  electrons->SetGrandMotherPDGs(500,500,kTRUE,kTRUE); // exclude non-prompt jpsi eletrons
+  electrons->SetFillPureMCStep(kTRUE);
+  //  electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
+
+  AliDielectronSignalMC* directElec = new AliDielectronSignalMC("directElec","directElec");
+  directElec->SetLegPDGs(11,1); //NEW
+  //  directElec->SetMothersRelation(AliDielectronSignalMC::kSame);
+  //  directElec->SetGrandMotherPDGs(-1103,-1103);
+  directElec->SetFillPureMCStep(kTRUE);
+  directElec->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+  directElec->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
+  directElec->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  // new
+  directElec->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
+  directElec->SetGrandMotherPDGs(902,902,kTRUE,kTRUE); // exclude open charm,beauty hadrons
+
+
+  AliDielectronSignalMC* elecPrim = new AliDielectronSignalMC("elecPrim","elecPrim");
+  elecPrim->SetLegPDGs(11,1);  //dummy second leg (never MCtrue)
+  elecPrim->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  elecPrim->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+  elecPrim->SetCheckBothChargesMothers(kTRUE,kTRUE);
+  elecPrim->SetMotherPDGs(902,902,kTRUE,kTRUE); // exclude open charm,beauty hadrons
+  elecPrim->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
+  elecPrim->SetGrandMotherPDGs(902,902,kTRUE,kTRUE); // exclude open charm,beauty hadrons
+  elecPrim->SetFillPureMCStep(kTRUE);
+
+  // add direct di lepton resonances
+  /*
+  AliDielectronSignalMC* directP[7];
+  TParticlePDG *ap;
+  Int_t pdg[] = {111, 113, 221, 223, 331, 333, 443};
+  for(Int_t i=0; i<7; i++) {
+    ap = TDatabasePDG::Instance()->GetParticle(pdg[i]);
+    directP[i] = new AliDielectronSignalMC(Form("direct%s",ap->GetName()),Form("direct%s",ap->GetName()));
+    directP[i]->SetLegPDGs(11,-11);
+    directP[i]->SetMotherPDGs(pdg[i],pdg[i]);
+    directP[i]->SetMothersRelation(AliDielectronSignalMC::kSame);
+    directP[i]->SetFillPureMCStep(kTRUE);
+    directP[i]->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+    directP[i]->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
+    // directP[i]->SetCheckBothChargesLegs(kTRUE,kTRUE);
+    // directP[i]->SetCheckBothChargesMothers(kTRUE,kTRUE);
+  }
+  */
+
+  /*
+  AliDielectronSignalMC* eleHijing = new AliDielectronSignalMC("eleHijing","eleHijing");
+  eleHijing->SetLegPDGs(11,1);  //dummy second leg (never MCtrue)
+  eleHijing->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  eleHijing->SetLegSources(AliDielectronSignalMC::kNoCocktail, AliDielectronSignalMC::kNoCocktail);
+  eleHijing->SetFillPureMCStep(kTRUE);
+  */
+  /*
+  AliDielectronSignalMC* electrons = new AliDielectronSignalMC("electrons","electrons");
+  electrons->SetLegPDGs(11,-11);  //dummy second leg (never MCtrue)
+  electrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
+  electrons->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+  //  electrons->SetMotherPDGs(111,111,kTRUE,kTRUE);   // not from pi0
+  //  electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
+  electrons->SetFillPureMCStep(kTRUE);
+  */
+
+  // selection
+  switch(cutDefinition) {
+  case kPIDqa:
     return;
+    //die->AddSignalMC(directElec);
+    break;
+  case kRec:
+    die->AddSignalMC(inclusiveJpsi);
+    die->AddSignalMC(directJpsi);
+    break;
+  case kStd:
+    die->AddSignalMC(inclusiveJpsi);
+    //  die->AddSignalMC(beautyJpsi);
+    //die->AddSignalMC(promptJpsi);
+    //die->AddSignalMC(promptJpsiRad);
+    //die->AddSignalMC(promptJpsiNonRad);
+    die->AddSignalMC(directJpsi);
+    //  die->AddSignalMC(gammaConversion);
+    break;
+  case kAvgPt:
+    die->AddSignalMC(inclusiveJpsi);
+    //    die->AddSignalMC(directJpsi);
+    break;
+  case kLegEff:
+    // die->AddSignalMC(directJpsi);
+    // die->AddSignalMC(inclusiveJpsi);
+    // die->AddSignalMC(electrons);
+    // die->AddSignalMC(elecPrim);
+    die->AddSignalMC(directElec);
+    //for(Int_t i=0; i<7; i++) die->AddSignalMC(directP[i]);
+    break;
+  default:
+    die->AddSignalMC(directJpsi);
+    break;
   }
 
-  TFile f(etaMap.Data());
-  if (!f.IsOpen()) return;
-  TList *keys=f.GetListOfKeys();
 
-  for (Int_t i=0; i<keys->GetEntries(); ++i){
-    TString kName=keys->At(i)->GetName();
-    TPRegexp reg(kName);
-    if (reg.MatchB(list)){
-      printf(" Using Eta Correction Function: %s\n",kName.Data());
-      AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
-    }
+}
+
+void SetEtaCorrection(AliDielectron *die) {
+
+
+  //  if(cutDefinition==kLegEff) return;
+  //  if (pid->GetCentroidCorrFunction()) return;
+  Bool_t hasMC=die->GetHasMC();
+  Bool_t hasTuneOnData=kFALSE;
+  //    ((AliAnalysisTaskPIDResponse*)AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0))->GetTuneOnData();
+  printf("tune on data switched: %d \n",hasTuneOnData);
+  // printf("name task at 0: %s \n",AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0)->GetName());
+  // printf("input event %p \n", AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  // printf("pid response %p \n",((AliInputEventHandler*)AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())->GetPIDResponse());
+  // printf("pid response task %p \n",AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0));
+  // AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0)->Dump();;
+
+  // AliAnalysisManager* man = AliAnalysisManager::GetAnalysisManager();
+  // AliInputEventHandler* inputHandler = dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
+  // AliPIDResponse* pidResponse = inputHandler->GetPIDResponse();
+  // if(pidResponse) hasTuneOnData = pidResponse->IsTunedOnData();
+  // printf("man %p inp %p pid %p ====> %d \n",man,inputHandler,pidResponse,hasTuneOnData);
+
+  TF2 *fCntrdCorr=0x0;
+  TF1 *fWdthCorr=0x0;
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv DATA vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  // either data or MC with tune on data option
+  if( !hasMC /*|| hasTuneOnData*/ ) {
+    // 2-dimensional eta correction for the centroid of electron sigmas
+    fCntrdCorr = new TF2("fCntrdCorr", 
+                        "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
+                        //                           0.0, 3000.0, -0.9, +0.9);
+                        0.0, 90.0, -0.9, +0.9);
+    // fCntrdCorr->SetParameters(0.723106, 0.23958, -6.31221, -0.687976, 15.912, 0.579609, -11.6901, -0.000354381); //Nacc dep.
+    fCntrdCorr->SetParameters(+0.149002, +0.214644 , -6.034930, -0.529588, +14.97902, +0.402640, -10.890027, +0.011248); //Cent
+    
+    // 1-dimensional eta correction for the width of electron sigmas
+    fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 90.0);
+    //    fWdthCorr->SetParameters(1.06108, 0.000217804,-5.80291e-08); //Nacc dep.
+    fWdthCorr->SetParameters(+1.290755, -0.005261, +0.000021); //Cent dep.
+
+    // apply corrections
+    // die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
+    // die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
+    die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
+    die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
+    printf(" DATA PID correction loaded!!!\n");
+  }
+  else  {
+    /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MONTE CARLO vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+    // 2-dimensional eta correction for the centroid and width  of electron sigmas
+    fCntrdCorr = new TF2("fCntrdCorr", 
+                        "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
+                        0.0, 3000.0, -0.9, +0.9);
+    fCntrdCorr->SetParameters(+0.293718,
+                             +0.010037,
+                             -2.632949,
+                             -0.241412,
+                             +8.304244,
+                             +0.525481,
+                             -4.874357,
+                             -0.000103);  //TPCrefMult dep.
+    fWdthCorr = new TF2("fWdthCorr", 
+                        "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
+                        0.0, 3000.0, -0.9, +0.9);
+    fWdthCorr->SetParameters(+0.917840,
+                             -0.021500,
+                             -0.628371,
+                             +0.230847,
+                             +1.434907,
+                             -0.330751,
+                             -0.458941,
+                             +0.000036);  //TPCrefMult dep.
+
+    // apply corrections
+    die->SetCentroidCorrFunction(fCntrdCorr,
+                                AliDielectronVarManager::kRefMultTPConly,
+                                AliDielectronVarManager::kEta);
+    die->SetWidthCorrFunction(fWdthCorr,
+                             AliDielectronVarManager::kRefMultTPConly,
+                             AliDielectronVarManager::kEta);
+    /*
+    // 2-dimensional eta correction for the centroid of electron sigmas
+    fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
+                             0.0, 3000.0, -0.9, +0.9);
+    fCntrdCorr->SetParameters(+0.378611, -0.070831, -3.076778, +0.121977, +8.576097, +0.113009, -5.001368, -0.000181);
+    // 1-dimensional eta correction for the width of electron sigmas
+    fWdthCorr = new TF1("fWdthCorr", "pol1", 0.0, 3000.0);
+    fWdthCorr->SetParameters(+0.881894, +0.000053);
+
+    // apply corrections
+    die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
+    die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
+    // die->SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
+    // die->SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
+    */
+    printf(" MC PID correction loaded!!!\n");
   }
+
+
 }
 
-TVectorD *GetRunNumbers() {
+TVectorD *GetRunNumbers2011() {
   
   Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
     139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137230, 137162, 137161, 137135
   };
-  
   Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
-    170593, 170572, 170388, 170387, 170315, 170313, 170312, 170311, 170309, 170308, 170306, 170270, 170269, 170268, 170230, 170228, 170207, 170204, 170203, 170193, 170163, 170159, 170155, 170091, 170089, 170088, 170085, 170084, 170083, 170081, 170040, 170027, 169965, 169923, 169859, 169858, 169855, 169846, 169838, 169837, 169835, 169591, 169590, 169588, 169587, 169586, 169557, 169555, 169554, 169553, 169550, 169515, 169512, 169506, 169504, 169498, 169475, 169420, 169419, 169418, 169417, 169415, 169411, 169238, 169167, 169160, 169156, 169148, 169145, 169144, 169138, 169099, 169094, 169091, 169045, 169044, 169040, 169035, 168992, 168988, 168826, 168777, 168514, 168512, 168511, 168467, 168464, 168460, 168458, 168362, 168361, 168342, 168341, 168325, 168322, 168311, 168310, 168115, 168108, 168107, 168105, 168076, 168069, 167988, 167987, 167985, 167920, 167915
+    167915, 167920, 167985, 167987, 167988, 168069, 168076, 168105, 168107, 168108, 168115, 168310, 168311, 168322, 168325, 168341, 168342, 168361, 168362, 168458, 168460, 168464, 168467, 168511, 168512, 168514, 168777, 168826, 168988, 168992, 169035, 169040, 169044, 169045, 169091, 169094, 169099, 169138, 169144, 169145, 169148, 169156, 169160, 169167, 169238, 169411, 169415, 169417, 169418, 169419, 169420, 169475, 169498, 169504, 169506, 169512, 169515, 169550, 169553, 169554, 169555, 169557, 169586, 169587, 169588, 169590, 169591, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169965, 170027, 170040, 170081, 170083, 170084, 170085, 170088, 170089, 170091, 170155, 170159, 170163, 170193, 170203, 170204, 170207, 170228, 170230, 170268, 170269, 170270, 170306, 170308, 170309, 170311, 170312, 170313, 170315, 170387, 170388, 170572, 170593, 
+    170593+1
   };
-  
-  // selection via environement variable (works only for gsi trains)
-
-  
+  /*
   if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
-    Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
-    TVectorD *vec = new TVectorD(size+1);
-    
-    (*vec)[size] = runLHC10h[0] + 1;
-    for (int i = 0; i < size; i++) {
-      (*vec)[i] = runLHC10h[size-1-i];
-    }
-    //    vec->Print("");
-    return vec;
-  }
-
   if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
-    
-    Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
-    TVectorD *vec = new TVectorD(size+1);
-    
-    (*vec)[size] = runLHC11h[0] + 1;
-    for (int i = 0; i < size; i++) {
-      (*vec)[i] = runLHC11h[size-1-i];
+  */  
+  Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
+  TVectorD *vec = new TVectorD(size,runLHC11h);
+  //vec->Print("");
+  return vec;
+}
+
+TVectorD *GetPDGcodes() {
+  //
+  // array of pdgcodes stored in TDatabasePDG
+  //
+  TDatabasePDG *pdg = new TDatabasePDG();
+  pdg->ReadPDGTable();
+  TGraph *gr = new TGraph();
+  TIter next(pdg->ParticleList());
+  TParticlePDG *p;
+  Int_t i=0;
+  while ((p = (TParticlePDG *)next())) {
+    if(TMath::Abs(p->PdgCode()) < 1e+6) {
+      //      printf("%s -> %d \n",p->GetName(),p->PdgCode());
+      gr->SetPoint(i++, p->PdgCode(),1.);
     }
-    //   vec->Print("");
-    return vec;
   }
-
-  TVectorD *vec = new TVectorD(2);
-  (*vec)[0] = 0;
-  (*vec)[1] = 1;
+  gr->Sort();
+  TVectorD *vec = new TVectorD(gr->GetN(), gr->GetX());
+  //  vec->Print();
+  delete pdg;
+  delete gr;
   return vec;
-     
+
+}
+
+TVectorD *GetDeltaPhiBins() {
+  //
+  // for in and out of event plane bins
+  //
+  Double_t pi = TMath::Pi();
+  TVectorD *deltaPhi = new TVectorD(6);
+  (*deltaPhi)[0] = -1.    *pi;
+  (*deltaPhi)[1] = -3./4. *pi;
+  (*deltaPhi)[2] = -1./4. *pi;
+  (*deltaPhi)[3] = +1./4. *pi;
+  (*deltaPhi)[4] = +3./4. *pi;
+  (*deltaPhi)[5] = +1.    *pi;
+  return deltaPhi;
 }