]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- test comiit
authorjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 16 Sep 2013 11:29:04 +0000 (11:29 +0000)
committerjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 16 Sep 2013 11:29:04 +0000 (11:29 +0000)
PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C

index 0be98eb55c0cb527174b2b2e2bd291b2ebeebeab..04ed9bda637727421998563f101af2dfcdda9677 100644 (file)
@@ -10,13 +10,13 @@ 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);
-void SetEtaCorrection();
-TVectorD *GetRunNumbers();
+void AddMCSignals(AliDielectron *die,  Int_t cutDefinition);
+void SetEtaCorrection(AliDielectron *die);
+TVectorD *GetRunNumbers2011();
 TVectorD *GetDeltaPhiBins();
 
-TString names=("TPC;TOF;TRD;Ionut;NOPID");
-enum { kTPC=0, kTOF, kTRD, kIonut, kNoPID };
+TString names=("Event;Rec;TPC;TOF;TRD;Ionut;TPC-TOF-TRD;NOPID;NOPIDeta;avgPt;LegEff");
+enum { kEvent, kRec, kTPC, kTOF, kTRD, kIonut, kTPCTOFTRD, kNoPID, kNoPIDEta, kAvgPt, kLegEff };
 
 TObjArray *arrNames=names.Tokenize(";");
 const Int_t nDie=arrNames->GetEntries();
@@ -30,7 +30,6 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, ULon
   // Setup the instance of AliDielectron
   //
 
-
   // gsi train?
   TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
   Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE); 
@@ -47,19 +46,27 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, ULon
   // switch configurations ON and OFF
   if(hasMC) { // MONTE CARLO
     switch(cutDefinition) {
-    case kTPC:   /* */ break;
-    case kTOF:   /* */ break;
-    case kTRD:   /* */ break;
+    case kEvent:   /* */ break;
+      //    case kRec: /* */ break;
+      //    case kTPC:   /* */ break;
+      //    case kTOF:   /* */ break;
+      //    case kTRD:   /* */ break;
     case kIonut: /* */ break;
+    case kLegEff: /* */ break;
       //    case kNoPID: /* */ break;
     default:         return 0x0;
     }
   } else { // COLLISION DATA
     switch(cutDefinition) {
-    case kTPC:   /* */ break;
-    case kTOF:   /* */ break;
-    case kTRD:   /* */ break;
-    case kIonut: /* */ break;
+    case kEvent:   /* */ break;
+      //    case kNoPID: /* */ break;
+      //case kNoPIDEta: /* */ break;
+      //    case kTPC:   /* */ break;
+      //    case kTOF:   /* */ break;
+      //    case kTRD:   /* */ break;
+    case kIonut:       /* */ break;
+      //    case kTPCTOFTRD:   /* */ break;
+      //    case kAvgPt:       /* */ break;
     default:         return 0x0;
     }
   }
@@ -73,65 +80,44 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, ULon
   AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data()));
   die->SetHasMC(hasMC);
 
-  // cut setup
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   SetupEventCuts(die,triggers,cutDefinition);
   SetupTrackCuts(die,cutDefinition);
   SetupV0Cuts(die,cutDefinition);
   SetupPairCuts(die,cutDefinition);
 
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   // Monte Carlo Signals
-  if(hasMC) {
-    AddMCSignals(die);
-    printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
-  }
-
-  // TRD efficiencies tables
-  /*
-    if (hasMC && list.Contains("LHC11a") ) {
-     TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
-     if(!isGSItrain) 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());
-     }
-  */
-
-  // histogram setup
-  InitHistograms(die,cutDefinition);
-  printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
-
-  // HF array setup
-  if(!hasMC) InitHF(die,cutDefinition);
-
-  // CF container setup, switched off
-  InitCF(die,cutDefinition);
-  /*
-    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() );
-  */
-
+  if(hasMC)  AddMCSignals(die, cutDefinition);
+  // PID eta correction
+  if(cutDefinition!=kNoPID && cutDefinition!=kEvent) SetEtaCorrection(die);
   // bgrd estimators
   if(!hasMC) ConfigBgrd(die,cutDefinition);
-
   // tpc event plane configuration
   if(!hasMC) ConfigEvtPlane(die,cutDefinition);
-
   // prefilter settings
-  die->SetPreFilterUnlikeOnly();
-  //die->SetPreFilterAllSigns();
-  //die->SetNoPairing();
+  if(cutDefinition==kEvent || cutDefinition==kNoPID || cutDefinition==kNoPIDEta)
+    die->SetNoPairing();
+  else
+    die->SetPreFilterAllSigns();
+  //die->SetPreFilterUnlikeOnly();
+  // load single electron effieciency map ATTENTION
+  if(!hasMC && 0) AliDielectronVarManager::InitEffMap("/home/aliceexp/jbook/gsi-train-trunk/jbook_jpsi/effMap.root");
+  if(!hasMC && 1) AliDielectronVarManager::InitEffMap("/sw/alice/gsi-svn/testtrain/effMap.root");
 
-  // setup eta correction
-  // if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  // histogram setup
+  InitHistograms(die,cutDefinition);
+  // histogram grid setup
+  /*if(!hasMC)*/
+  if(cutDefinition!=kEvent && cutDefinition!=kNoPID && cutDefinition!=kNoPIDEta && cutDefinition!=kLegEff)
+    InitHF(die,cutDefinition);
+  // CF container setup
+  if(hasMC && cutDefinition!=kEvent && cutDefinition!=kLegEff)
+    InitCF(die,cutDefinition);
 
-  // VZERO calibration
-  if (isGSItrain && list.Contains("LHC10h")) {
-    die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
-    die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
-  }
+  // cut QA
+  die->SetCutQA();
 
   return die;
 }
@@ -147,10 +133,10 @@ void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
   Double_t minCent=0.0, maxCent=100.;
   if(!die->GetHasMC()) {
     switch(triggers) {
-    case AliVEvent::kCentral:     minCent= 0.; maxCent= 9.; break;
-    case AliVEvent::kSemiCentral: minCent=12.; maxCent=53.; break;
-    case AliVEvent::kMB:          minCent= 0.; maxCent=80.; break;
-    default:                      minCent= 0.; maxCent=80.; break;
+    // 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
@@ -179,10 +165,10 @@ 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);
-  die->GetTrackFilter().AddCuts(cuts);
+  //  die->GetTrackFilter().AddCuts(cuts);
 
   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FILTER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   // AOD track filter (needs to be first cut to speed up)
@@ -191,47 +177,61 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   //  trkFilter->SetMinNCrossedRowsOverFindable(0.6);
 
   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
-  AliDielectronVarCuts *varCuts   = new AliDielectronVarCuts("VarCuts","VarCuts");
-  AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
+  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 kEvent:
+  case kRec:
   case kIonut:
-    varCuts->AddCut(AliDielectronVarManager::kPt,0.85,1e30);
-    varCuts->AddCut(AliDielectronVarManager::kEta,         -0.8,   0.8);
-    varCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
-    trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
-    break;
+  case kTRD:
+  case kTPCTOFTRD:
+  case kAvgPt:
   case kNoPID:
-    varCuts->AddCut(AliDielectronVarManager::kPt,0.85,1e30);    //0.8
-    varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9); // -0.9, 0.9
-    varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
-    trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
+  case kNoPIDEta:
+    varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 20./*1e30*/); ///ATTENTION
+    varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.8,   0.8); ////ATTENTION
+  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 kTRD:
   case kTPC:
-    varCuts->AddCut(AliDielectronVarManager::kPt,0.95,1e30);    //0.8
-    varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9); // -0.9, 0.9
-    varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
-    trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
+    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;
   }
-  // standard cuts
-  varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
-  varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
-  varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
-  varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
-  //  varCuts->AddCut(AliDielectronVarManager::kV0Index0,     0.0);
-  trkCuts->SetRequireITSRefit(kTRUE);
-  trkCuts->SetRequireTPCRefit(kTRUE);
+
+  // 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);
+  trkRecCuts->SetRequireITSRefit(kTRUE);
+  trkRecCuts->SetRequireTPCRefit(kTRUE);
 
   /* 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 kTRD:
-    pidCuts->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5,6.,kFALSE,
-                   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
+  case kNoPIDEta:
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-10.,10.);
+    break;
   case kTOF:
     pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
     pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,
@@ -241,31 +241,86 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
     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 kIonut:
+  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);
+                   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);
+                   AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
     pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.4,3.0,-0.1,+0.1,kFALSE,
-               AliDielectronPID::kRequire,AliDielectronVarManager::kEta);
+                   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;
   }
 
+  // mc identification
+  if(cutDefinition==kLegEff && 0) {
+    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 );
+  }
+
+
   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   // exclude conversion electrons selected by the tender
   AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
 
   // activate the cut sets (order might be CPU timewise important)
-  if(!isESD) cuts->AddCut(trkFilter);
-  cuts->AddCut(varCuts);
-  cuts->AddCut(trkCuts);
-  if(cutDefinition!=kNoPID) cuts->AddCut(pidCuts);
-  if(cutDefinition!=kNoPID) cuts->AddCut(pidVarCuts);
-  //cuts->AddCut(noconv);
-  cuts->Print();
+  switch(cutDefinition) {
+  case kNoPID:
+  case kNoPIDEta:
+  case kRec:
+    die->GetTrackFilter().AddCuts(varAccCuts);
+    grpRecCuts->AddCut(trkRecCuts);
+    grpRecCuts->AddCut(varRecCuts);
+    die->GetTrackFilter().AddCuts(grpRecCuts);
+    break;
+  case kEvent:
+  case kIonut:
+  case kLegEff:
+  case kTRD:
+  case kTPCTOFTRD:
+  case kAvgPt:
+  case kTOF:
+  case kTPC:
+    die->GetTrackFilter().AddCuts(varAccCuts);
+    grpRecCuts->AddCut(trkRecCuts);
+    grpRecCuts->AddCut(varRecCuts);
+    die->GetTrackFilter().AddCuts(grpRecCuts);
+    grpPIDCuts->AddCut(pidCuts);
+    grpPIDCuts->AddCut(pidVarCuts);
+    grpPIDCuts->AddCut(pidMCCuts);
+    die->GetTrackFilter().AddCuts(grpPIDCuts);
+    //  if(!isESD) cuts->AddCut(trkFilter);
+    //cuts->AddCut(noconv);
+  }
+  //  cuts->Print();
 
 }
 
@@ -277,15 +332,15 @@ void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
   //
 
   // Quality cuts (add the gamma filter to the cut group)
-  TIter next(die->GetTrackFilter().GetCuts());
-  AliAnalysisCuts *cuts;
-  while((cuts = (AliAnalysisCuts*)next())) {
-    if(cuts->IsA() == AliDielectronCutGroup::Class())  break;
-  }
+  // TIter next(die->GetTrackFilter().GetCuts());
+  // AliAnalysisCuts *cuts;
+  // while((cuts = (AliAnalysisCuts*)next())) {
+  //   if(cuts->IsA() == AliDielectronCutGroup::Class())  break;
+  // }
 
-  AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma");
+  AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("V0","V0");
   gammaV0Cuts->SetPdgCodes(22,11,11);
-  gammaV0Cuts->SetDefaultPID(13); // TPC+-3.5 TOF+-4
+  gammaV0Cuts->SetDefaultPID(16);
   gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02),   1.0, kFALSE);
   gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF,                       0.0,  10.0, kFALSE);
   gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist,                       0.0,   0.25, kFALSE);
@@ -301,10 +356,10 @@ void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
  //  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);
+  // if(cuts)
+  //   ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
+  // else
+  die->GetTrackFilter().AddCuts(gammaV0Cuts);
 }
 
 //______________________________________________________________________________________
@@ -313,26 +368,38 @@ 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;
   switch(cutDefinition) {
-    //   case kTPC:    gCut=0.05;  break;
-    //   case kTOF:    gCut=0.05;  break;
-    //   case kTRD:    gCut=0.05;  break;
-    //   case kIonut:  gCut=0.05;  break;
-  default: gCut=0.05;       // default
+  case kEvent:      yCut=0.0;  break;
+  case kRec:        yCut=0.9;  break;
+  case kNoPID:      return;
+  case kNoPIDEta:   return;
+  case kTPC:        yCut=0.9;  break;
+  case kTOF:        yCut=0.9;  break;
+  case kTRD:        yCut=0.8;  break;
+  case kIonut:      yCut=0.8;  break;
+  case kLegEff:     return;
+  case kTPCTOFTRD:  yCut=0.8;  break;
+  case kAvgPt:      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::kM,            0.0,   gCut);
   die->GetPairPreFilter().AddCuts(gammaCuts);
 
-  // rapidity selection
-  //  AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
-  // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
-  // die->GetPairFilter().AddCuts(rapCut);
-
 }
 
 //______________________________________________________________________________________
@@ -342,6 +409,15 @@ void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
   // Configurate the background estimators
   //
 
+  // skip event QA
+  switch(cutDefinition) {
+  case kEvent:
+  case kNoPID:
+  case kNoPIDEta:
+  case kRec:
+    return;
+  }
+
   // add track rotations
   AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
   rot->SetIterations(10);
@@ -351,10 +427,20 @@ void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
 
   // add mixed events
   AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
-  mix->AddVariable(AliDielectronVarManager::kZvPrim,      "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
-  mix->AddVariable(AliDielectronVarManager::kCentrality,  8,  0.,80.);
-  mix->AddVariable(AliDielectronVarManager::kTPCrpH2,     8,  TMath::Pi()/-2., TMath::Pi()/2.);
-  mix->AddVariable(AliDielectronVarManager::kTPCmagH2,    "0.,20.,50.,80.,110.,150.,500.");
+  switch(cutDefinition) {
+  // case kIonut:
+  //   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);
@@ -368,6 +454,13 @@ void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
   // Configurate the TPC event plane 
   //
 
+  switch(cutDefinition) {
+  case kNoPID:
+  case kNoPIDEta:
+  case kRec:
+    return;
+  }
+
   //   Double_t gGap;
   //   switch(cutDefinition) {
   //   case kEtaGap01:   gGap=0.1;   break;
@@ -399,102 +492,150 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
   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, bHistPairME = kFALSE, bHistFlow = kFALSE, bHistFlowQA=kFALSE, bHistPID=kFALSE;
   switch (cutDefinition) {
-  case kTPC:   bHistEvts=kTRUE;
-  case kTOF:
-  case kTRD:
-  case kIonut: bHistFlow=kTRUE; bHistFlowQA=kTRUE; bHistPair=kTRUE; bHistPairME=kFALSE;
-
-    //   case kTOFTRD:
-    //   case kTOFTRD2D: bHistFlow=kTRUE; bHistPair=kTRUE; break;
-    //   case krec:      break;
-    //  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 kEvent: bHistEvts=kTRUE; break;
+  case kRec:
+  case kNoPID:
+  case kNoPIDEta:
+  case kTPC:
+  case kTOF:   //bHistEvts=kTRUE; //bHistFlow=kTRUE;
+  case kTRD:   ///bHistEvts=kTRUE; //bHistFlow=kTRUE;
+  case kIonut: ///*bHistEvts=kTRUE;*/ bHistPair=kTRUE; break; //bHistPairME=kTRUE;
+  case kTPCTOFTRD: bHistPair=kTRUE; bHistPID=kTRUE; break; //bHistPairME=kTRUE;
+  case kAvgPt: /* */ break;
+  }
+  if(hasMC) {
+    bHistPID=kFALSE;
   }
-  if(hasMC) { bHistFlow=kFALSE; bHistFlowQA=kFALSE; bHistPairME=kFALSE; }
 
   //Setup histogram Manager
   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
 
   //add histograms to event class
   histos->AddClass("Event");
+  Int_t maxMixBins = (die->GetMixingHandler() ? die->GetMixingHandler()->GetNumberOfBins() : 0);
   histos->UserHistogram("Event","","", 100, 0.0, 100.0,   AliDielectronVarManager::kCentrality);
+  if(!hasMC && die->GetMixingHandler() )
+    histos->UserHistogram("Event","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
 
   ////// EVENT HISTOS /////
   if(bHistEvts) {
-    histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronVarManager::kRunNumber);
+    histos->UserHistogram("Event","","", 100,0.,100.,    AliDielectronVarManager::kNTrk);
+    //    histos->UserHistogram("Event","","", 100,0.,100.,      AliDielectronVarManager::kNacc);
+    histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronVarManager::kRunNumber);
     histos->UserHistogram("Event","","", 300,-15.,15.,   AliDielectronVarManager::kZvPrim);
-    histos->UserProfile(  "Event","","", AliDielectronVarManager::kNacc,        80, 0., 80.,    AliDielectronVarManager::kCentrality);
-    histos->UserProfile(  "Event","","", AliDielectronVarManager::kNVtxContrib, 80, 0., 80.,   AliDielectronVarManager::kCentrality);
-  } //hist: event
+    histos->UserHistogram("Event","","", GetRunNumbers2011(), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
+                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kNacc);
+    histos->UserHistogram("Event","","", AliDielectronHelper::MakeLinBinning(90, 0., 90.), AliDielectronHelper::MakeLinBinning(3000, 0., 3000.),
+                         AliDielectronVarManager::kCentrality, AliDielectronVarManager::kNacc);
+    histos->UserProfile(  "Event","","", AliDielectronVarManager::kNacc,        90, 0., 90.,  AliDielectronVarManager::kCentrality);
+    histos->UserProfile(  "Event","","", AliDielectronVarManager::kNVtxContrib, 90, 0., 90.,  AliDielectronVarManager::kCentrality);
+
+    if(!hasMC) {
+      // 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[4]={AliDielectronVarManager::kCentrality,
+                    //            AliDielectronVarManager::kRunNumber,
+                    AliDielectronVarManager::kv0ATPCDiffH2,
+                    AliDielectronVarManager::kv0CTPCDiffH2,
+                    AliDielectronVarManager::kv0Av0CDiffH2 };
+      histos->UserSparse("Event", 4, limits, var);
+
+      // // event plane flattening
+      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[4]={AliDielectronVarManager::kCentrality,
+                     //                    AliDielectronVarManager::kRunNumber,
+                     AliDielectronVarManager::kv0ArpH2,
+                     AliDielectronVarManager::kv0CrpH2,
+                     AliDielectronVarManager::kTPCrpH2 };
+      //    histos->UserSparse("Event", 4, limits2, var2);
+    } //end: hasMC
 
+  } //hist: event
 
   ////// FLOW //////
   if(bHistFlow) {
-    // EP Qvector magnitudes // TODO move to QA
-    //     histos->UserHistogram("Event","","", 200,0.,200., AliDielectronVarManager::kTPCmagH2uc);
-    //     histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0ACmagH2);
-    //     histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0AmagH2);
-    //     histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0CmagH2);
-    // RP angles versus centrality
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A0rpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C0rpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A3rpH2);
-    histos->UserHistogram("Event","","", 16,0.,80.,100,-2.,2., AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C3rpH2);
+    histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCxH2);
+    histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCyH2);
+    histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kTPCrpH2);
+    histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0ArpH2);
+    histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0CrpH2);
+    histos->UserHistogram("Event","","", 100,-2.,2., AliDielectronVarManager::kv0ACrpH2);
+    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);
+    // EP resolution calculation centrality dependence
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0ATPCDiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0CTPCDiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0CDiffH2);
   } // hist: flow
 
+  // DEBUG
   if(bHistFlowQA) {
     // TPC event plane
-    histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCxH2);
-    histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCyH2);
-    histos->UserHistogram("Event","","", 100,   -2.,   2., AliDielectronVarManager::kTPCrpH2);
+    histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCxH2uc);
+    histos->UserHistogram("Event","","", 100,-1500.,1500., AliDielectronVarManager::kTPCyH2uc);
+    histos->UserHistogram("Event","","", 100,   -2.,   2., AliDielectronVarManager::kTPCrpH2uc);
     histos->UserHistogram("Event","","", 100,   -2.,   2., AliDielectronVarManager::kTPCsub1rpH2);
     histos->UserHistogram("Event","","", 100,   -2.,   2., AliDielectronVarManager::kTPCsub2rpH2);
     histos->UserHistogram("Event","","", 100,   -1.,   1., AliDielectronVarManager::kTPCsub12DiffH2);
-    // EP resolution calculation
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0ATPCDiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0CTPCDiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0CDiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCsub12DiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0C0DiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0C3DiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Cv0A0DiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Cv0A3DiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0A0v0A3DiffH2);
-    histos->UserHistogram("Event","","", 80,0.,80., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0C0v0C3DiffH2);
     // detector effects
     histos->UserHistogram("Event","","", 10,0.,100., 300,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCsub12DiffH2Sin);
     // recentering stuff
     histos->UserProfile("Event","","", AliDielectronVarManager::kTPCxH2,
-                       AliDielectronHelper::MakeLinBinning(8, 0.,80.), GetRunNumbers(),
+                       AliDielectronHelper::MakeLinBinning(8, 0.,80.), GetRunNumbers2011(),
                        AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
     histos->UserProfile("Event","","", AliDielectronVarManager::kTPCyH2,
-                       AliDielectronHelper::MakeLinBinning(8, 0.,80.), GetRunNumbers(),
-                       AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
+                       AliDielectronHelper::MakeLinBinning(8, 0.,80.), GetRunNumbers2011(),
+                       AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
+    // EP resolution calculation
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0ATPCDiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0CTPCDiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0Av0CDiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kTPCsub12DiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0Av0C0DiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0Av0C3DiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0Cv0A0DiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0Cv0A3DiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0A0v0A3DiffH2);
+    histos->UserHistogram("Event","","", 200,-1.0,1.0,  AliDielectronVarManager::kv0C0v0C3DiffH2);
+    // EP resolution calculation centrality dependence
+    histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0ATPCDiffH2);
+    histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0CTPCDiffH2);
+    histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0CDiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCsub12DiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0C0DiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Av0C3DiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Cv0A0DiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0Cv0A3DiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0A0v0A3DiffH2);
+    // histos->UserHistogram("Event","","", 18,0.,90., 100,-1.0,1.0, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kv0C0v0C3DiffH2);
+    // EP angle correlation
+    histos->UserHistogram("Event","","", 320,-3.2.,3.2, 320,-3.2.,3.2, 
+                         AliDielectronVarManager::kTPCrpH2uc,AliDielectronVarManager::kv0ACrpH2);
+    // EP Qvector magnitudes // TODO move to QA
+    histos->UserHistogram("Event","","", 200,0.,200., AliDielectronVarManager::kTPCmagH2uc);
+    histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0ACmagH2);
+    histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0AmagH2);
+    histos->UserHistogram("Event","","", 200,0.,800., AliDielectronVarManager::kv0CmagH2);
   } //hist: flowQA
 
+
+  ///// PAIR HISTOS /////
   if(bHistPair) {
     //Initialise histogram classes
     histos->SetReservedWords("Track;Pair");
@@ -504,7 +645,7 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
     for (Int_t i=0; i<(bHistPairME ? 8 : 3); ++i){
       histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
     }
-    //add MC signal histograms to track class
+    //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()));
@@ -512,35 +653,89 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
 
     //Track classes
     //legs from pair (fill SE)
-    for (Int_t i=0; i<3; ++i){
+    for (Int_t i=1; i<2; ++i){
       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
     }
     //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)));
     histos->AddClass(Form("Track_%s",     AliDielectron::PairClassName(AliDielectron::kEv1PM)));
 
+
+    ////// TRACK HISTOS /////
     // Vertex
-    histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
-    histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
+    // histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
+    // histos->UserHistogram("Track","","", 600,-3.,3., AliDielectronVarManager::kImpactParZ);
     // Kinematics
     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","","", 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);
+    // 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","","",   8,-0.5,  7.5, AliDielectronVarManager::kTRDpidQuality);
     // PID
-    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","","", 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.0,5.0,300,0.,1.2,  AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
+    //    histos->UserHistogram("Track","","", 100,-1.,+1.,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
+
+    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);
+    
+    if(!hasMC) histos->UserHistogram("Track","","", 150,0.0,1.5, AliDielectronVarManager::kLegEff);
+    if(!hasMC) histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 18,0.0,90.0, AliDielectronVarManager::kCentrality);
+    if(!hasMC) histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 100,0.0,20.0, AliDielectronVarManager::kPt);
+    if(!hasMC) histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,0.0,TMath::TwoPi(), AliDielectronVarManager::kPhi);
+    if(!hasMC) histos->UserProfile("Track","","", AliDielectronVarManager::kLegEff, 20,-1.,+1., AliDielectronVarManager::kEta);
+
+    // TPC PID (detailed) //
+    if(bHistPID) {
+      // arbitrary binning for variables
+      TVectorD *vcen = AliDielectronHelper::MakeLinBinning( 21,  0.,    52.5);
+      (*vcen)[21] = 90.;
+
+      TObjArray *limits  = new TObjArray();
+      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(100,  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(GetRunNumbers());
+      UInt_t var[6]={AliDielectronVarManager::kTPCnSigmaEle,
+                    AliDielectronVarManager::kTOFbeta,
+                    //              AliDielectronVarManager::kTPCsignal,
+                    AliDielectronVarManager::kRefMultTPConly,
+                    AliDielectronVarManager::kPIn,
+                    AliDielectronVarManager::kCentrality,
+                    AliDielectronVarManager::kEta
+                    //      AliDielectronVarManager::kRunNumber
+      };
+      histos->UserSparse(Form("Track_%s",     AliDielectron::PairClassName(AliDielectron::kEv1PM)), 6, limits, var);      
+    }
 
-    histos->UserHistogram("Pair","","", 210,-1.05,1.05, 100,0.,2.5, AliDielectronVarManager::kArmAlpha,AliDielectronVarManager::kArmPt);
-
-    ///// add histograms to Pair classes /////
-    histos->UserHistogram("Pair","","",  300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
+    ///// Pair classes /////
+    histos->UserHistogram("Pair","","",  125,.0,125*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","","",  100,0.,3.15,     AliDielectronVarManager::kOpeningAngle);
@@ -549,66 +744,71 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
     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","","", 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);
+    //    histos->UserHistogram("Pair","","", 210,-1.05,1.05, 100,0.,2.5, AliDielectronVarManager::kArmAlpha,AliDielectronVarManager::kArmPt);
+    if(!hasMC) histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 125,.0,125*0.04, AliDielectronVarManager::kM);
+    if(!hasMC) histos->UserProfile("Pair","","", AliDielectronVarManager::kPairEff, 100,.0,15.0,     AliDielectronVarManager::kPt);
+
+    if(!hasMC && die->GetMixingHandler() )
+      histos->UserHistogram("Pair","","", maxMixBins, 0, maxMixBins, AliDielectronVarManager::kMixingBin);
+
 
-    //// FLOW results use tprofiles
-    if(bHistFlow) {
-      // differential observed v2 (pt and centrality)
-      histos->UserProfile("Pair","","",
-                         AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 20,0.,10.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","","",
-                         AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 20,0.,10.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","","",
-                         AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 20,0.,10.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt,
-                         0, 0, 0, "S");
-      histos->UserProfile("Pair","","",
-                         AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 20,0.,10.,
-                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt,
-                         0, 0, 0, "S");
-
-      // pt dependence
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 20, 0.,10.,     AliDielectronVarManager::kM, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 20, 0.,10.,     AliDielectronVarManager::kM, AliDielectronVarManager::kPt, 0, 0, "S");
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 20, 0.,10.,     AliDielectronVarManager::kM, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 20, 0.,10.,     AliDielectronVarManager::kM, AliDielectronVarManager::kPt, 0, 0, "S");
-
-      // centrality dependence
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100.,    AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality);
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100.,    AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, 0, 0, "S");
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100.,    AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality);
-      histos->UserProfile("Pair","","",                          AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100.,    AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, 0, 0, "S");
-
-      // integrated inv mass dependence
-      histos->UserProfile("Pair","","",          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04,  AliDielectronVarManager::kM);
-      histos->UserProfile("Pair","","",          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04,  AliDielectronVarManager::kM , 0, "S");
-
-      // control histograms
-      histos->UserHistogram("Pair","","",
-                           125,0.,125*.04,  200,-1.,+1.,
-                           AliDielectronVarManager::kM,          AliDielectronVarManager::kv0ArpH2FlowV2);
-
-
-    } //hist: flow
   } //hist: pair
 
 
   ////// MONTE CARLO //////
+  if(hasMC && cutDefinition==kLegEff && 1) { ////////ATTENTION
+
+    //Initialise histogram classes
+    histos->SetReservedWords("Track");
+
+    //add MC signal histograms to track class
+    if(die->GetMCSignals()) {
+      TString className = Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),die->GetMCSignals()->Last()->GetName());
+      histos->AddClass(Form("%s_MCtruth",className.Data()));
+      histos->AddClass(className.Data());
+
+      //workaround for AN-09 dummy
+      for(Int_t isig=0; isig<die->GetMCSignals()->GetEntriesFast(); isig++) {
+       histos->AddClass(Form("Pair_%s",die->GetMCSignals()->At(isig)->GetName()));
+       histos->AddClass(Form("Pair_%s_MCtruth",die->GetMCSignals()->At(isig)->GetName()));
+       // histos->AddClass(Form("Track_Legs_%s",die->GetMCSignals()->At(isig)->GetName()));
+       // histos->AddClass(Form("Track_Legs_%s_MCtruth",die->GetMCSignals()->At(isig)->GetName()));
+       histos->AddClass(Form("Track_%s_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM),die->GetMCSignals()->At(isig)->GetName()));
+       histos->AddClass(Form("Track_%s_%s_MCtruth",AliDielectron::PairClassName(AliDielectron::kEv1PM),die->GetMCSignals()->At(isig)->GetName()));
+      }
+
+      // single leg efficiency //
+      // arbitrary binning for variables
+      // TVectorD *vpt = AliDielectronHelper::MakeLinBinning( 41,  0.0,    10.25);
+      // (*vpt)[41] = 20.;
+
+      TObjArray *limEpm  = new TObjArray();
+      //    limEpm->Add(AliDielectronHelper::MakeLinBinning( 75,-10.,     5.));
+      limEpm->Add(AliDielectronHelper::MakeLinBinning( 18,  0.,    90.));
+      limEpm->Add(AliDielectronHelper::MakeLinBinning( 80,  0.,    20.));
+      //      limEpm->Add(vpt);
+      limEpm->Add(AliDielectronHelper::MakeLinBinning( 20,  0.,   TMath::TwoPi()));
+      limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, -1.,    +1.));
+      //      limEpm->Add(AliDielectronHelper::MakeLinBinning( 20, -2.,    +2.));
+      //  limEpm->Add(GetRunNumbers());
+      UInt_t varEpm[]={//AliDielectronVarManager::kTPCnSigmaEle,
+       AliDielectronVarManager::kCentrality
+       ,AliDielectronVarManager::kPt
+       ,AliDielectronVarManager::kPhi
+       ,AliDielectronVarManager::kEta
+       //      ,AliDielectronVarManager::kY
+       //      ,AliDielectronVarManager::kRunNumber
+      };
+
+      histos->UserSparse("Track", limEpm->GetEntriesFast(), limEpm, varEpm);
+    }
+  } //end: hasMC
+
+
+
   /*
     if(cutDefinition == kTOFTRD && hasMC) {
     histos->AddClass("MCEvent");
@@ -618,10 +818,17 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
     }
   */
 
-  //  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());
+  }
+
+
 }
 
 void InitHF(AliDielectron* die, Int_t cutDefinition)
@@ -631,36 +838,105 @@ void InitHF(AliDielectron* die, Int_t cutDefinition)
   //
   Bool_t hasMC=die->GetHasMC();
 
-  AliDielectronHistos *histos=new AliDielectronHistos("abc","def");
-  //Initialise histogram classes
-  histos->SetReservedWords("Track;Pair");
-  // to fill also mixed event histograms loop until 7 or 10
-  for (Int_t i=0; i<1; ++i){
-      histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
+  // booleans for histo selection
+  Bool_t bHistFlow = kTRUE, bHistPt = kTRUE, bHistEff = kTRUE; //ATTENTION
+  switch (cutDefinition) {
+  case kAvgPt:  bHistFlow=kFALSE;; break;
+    //  default:      bHistPt=kTRUE; bHistFlow = kTRUE; bHistEff=kTRUE; break;
   }
 
   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);
-  
-  hf->SetPairTypes(AliDielectronHF::kOSonly);
-  TProfile *prf = new TProfile("","",125,0.,125*.04);
-  UInt_t vars[] = {AliDielectronVarManager::kM, AliDielectronVarManager::kv0CrpH2FlowV2};
-  hf->SetRefHist(prf,vars);
-
-  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());
-  //  hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, 8,-1.*TMath::Pi(),TMath::Pi());
+  // define pair types and sources
+  if(hasMC) hf->SetStepForMCGenerated();
+  //  else
+  if(hasMC)  hf->SetPairTypes(AliDielectronHF::kOSandMIX);
+    //  hf->SetPairTypes(AliDielectronHF::kOSonly);
+  if(!hasMC) hf->SetPairTypes(AliDielectronHF::kAll);
+
+  //// define output objects ////
+
+  // defaults
+  hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+  // for mixed event weighting
+  Int_t maxMixBins = (die->GetMixingHandler() ? die->GetMixingHandler()->GetNumberOfBins() : 0);
+  //  if(maxMixBins)  hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(maxMixBins,0,maxMixBins), AliDielectronVarManager::kMixingBin);
+
+  // mean pt analysis
+  if(bHistPt) {
+    hf->UserProfile("Pair", AliDielectronVarManager::kPt,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+  }
+
+  // on the fly efficienies
+  if(bHistEff && !hasMC) {
+    hf->UserProfile("Pair", AliDielectronVarManager::kPairEff, 
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM);
+    hf->UserProfile("Pair", AliDielectronVarManager::kPt,
+                   AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM, 
+                   "", AliDielectronVarManager::kOneOverPairEff);
+    hf->UserHistogram("Pair", AliDielectronHelper::MakeLinBinning(125,.0,125*0.04), AliDielectronVarManager::kM,
+                     AliDielectronVarManager::kOneOverPairEff);
+  }
+
+  // flow analysis
+  if(bHistFlow && !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);
+  }
+
+  //// 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);
 }
@@ -674,27 +950,49 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
 
   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,60.0,70.0,80.,90.");
+  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers2011() );
+
+  //pair variables
+  cf->AddVariable(AliDielectronVarManager::kPt,100,0.0,100*0.2);
+  
+  //  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,36,-0.9,+0.9);
+  cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
+  cf->AddVariable(AliDielectronVarManager::kPairType,1,1,1);
+  //  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);
+  //leg variables
+  cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.75, 0.80, 0.85, 1.0, 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);
+  /*
   // event variables
-  cf->AddVariable(AliDielectronVarManager::kCentrality,      "0.,5.,10.,20.,40.,50.,60.,80.");
-  if(hasMC)  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
-  //    if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
-  //    if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
+  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,  18, -0.9,  0.9);
+  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
-  cf->AddVariable(AliDielectronVarManager::kPt, 50,  0.0, 10.0);
-  if(!hasMC) cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
+  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
-  if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
-  if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
+  //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
+  //if(!hasMC) cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
 
   // leg variables
-  cf->AddVariable(AliDielectronVarManager::kPt,"0.85, 0.95, 1.1, 100.0",kTRUE);
-  if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,-0.8,0.8,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);
@@ -704,10 +1002,11 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
   //    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==kTPC) cf->SetStepForMCtruth();
+    //if(cutDefinition==kRec) 
+    cf->SetStepForMCtruth();
     //    cf->SetStepForNoCutsMCmotherPid();
     //    cf->SetStepForAfterAllCuts();
     //    cf->SetStepsForEachCut();
@@ -719,7 +1018,7 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
   die->SetCFManagerPair(cf);
 }
 
-void AddMCSignals(AliDielectron *die){
+void AddMCSignals(AliDielectron *die, Int_t cutDefinition){
   //Do we have an MC handler?
   if (!die->GetHasMC()) return;
 
@@ -730,7 +1029,6 @@ void AddMCSignals(AliDielectron *die){
   inclusiveJpsi->SetFillPureMCStep(kTRUE);
   inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
   inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
-  die->AddSignalMC(inclusiveJpsi);
 
   AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty");
   beautyJpsi->SetLegPDGs(11,-11);
@@ -741,7 +1039,6 @@ void AddMCSignals(AliDielectron *die){
   beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
   beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
   beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
-  die->AddSignalMC(beautyJpsi);
 
   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt");   // prompt J/psi (not from beauty decays)
   promptJpsi->SetLegPDGs(11,-11);
@@ -753,7 +1050,6 @@ void AddMCSignals(AliDielectron *die){
   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
-  die->AddSignalMC(promptJpsi);
 
   // prompt J/psi radiative channel
   AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","PromptRadiative");   // prompt J/psi (not from beauty decays)
@@ -767,7 +1063,6 @@ 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","PromptNonRadiative");   // prompt J/psi (not from beauty decays)
@@ -781,7 +1076,6 @@ void AddMCSignals(AliDielectron *die){
   promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
   promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
-  die->AddSignalMC(promptJpsiNonRad);
 
   AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct");   // embedded J/psi
   directJpsi->SetLegPDGs(11,-11);
@@ -792,7 +1086,6 @@ void AddMCSignals(AliDielectron *die){
   directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
   directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
   directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
-  die->AddSignalMC(directJpsi);
 
   AliDielectronSignalMC* gammaConversion = new AliDielectronSignalMC("gammaConversion","gamma conversions");
   gammaConversion->SetLegPDGs(11,-11);
@@ -800,79 +1093,123 @@ void AddMCSignals(AliDielectron *die){
   gammaConversion->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
   gammaConversion->SetMotherPDGs(22,22);
   gammaConversion->SetMothersRelation(AliDielectronSignalMC::kSame);
-  //  die->AddSignalMC(gammaConversion);
 
-}
 
-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());
-    return;
+  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->SetFillPureMCStep(kTRUE);
+  //  electrons->SetMothersRelation(AliDielectronSignalMC::kSame);
+
+  /*
+  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 kRec:
+    die->AddSignalMC(inclusiveJpsi);
+    die->AddSignalMC(directJpsi);
+    break;
+  case kIonut:
+    die->AddSignalMC(inclusiveJpsi);
+    //  die->AddSignalMC(beautyJpsi);
+    //die->AddSignalMC(promptJpsi);
+    //die->AddSignalMC(promptJpsiRad);
+    //die->AddSignalMC(promptJpsiNonRad);
+    die->AddSignalMC(directJpsi);
+    //  die->AddSignalMC(gammaConversion);
+    break;
+  case kLegEff:
+    die->AddSignalMC(directJpsi);
+    die->AddSignalMC(inclusiveJpsi);
+    die->AddSignalMC(electrons);
+    break;
+  default:         return;
   }
 
-  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 (AliDielectronPID::GetCentroidCorrFunction()) return;
+
+  TF2 *fCntrdCorr=0x0;
+  TF1 *fWdthCorr=0x0;
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv DATA vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  // either data or MC with tune on data option
+  if( !die->GetHasMC() || ((AliPIDResponse*)AliAnalysisManager::GetAnalysisManager()->GetTasks()->At(0))->IsTunedOnData()) {
+    // 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 dep.
+    
+    // 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
+    // AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
+    // AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
+    AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
+    AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
+    printf(" DATA PID correction loaded!!!\n");
   }
+  else  {
+    /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MONTE CARLO vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+    // 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
+    AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
+    AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
+    // AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
+    // AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);
+  }
+
+
 }
 
-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];
-    }
-    //   vec->Print("");
-    return vec;
-  }
-
-  TVectorD *vec = new TVectorD(2);
-  (*vec)[0] = 0;
-  (*vec)[1] = 1;
+  */  
+  Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
+  TVectorD *vec = new TVectorD(size,runLHC11h);
+  //vec->Print("");
   return vec;
-     
 }
 
 TVectorD *GetDeltaPhiBins() {