]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
-user task updates
authorjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Mar 2013 14:32:11 +0000 (14:32 +0000)
committerjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Mar 2013 14:32:11 +0000 (14:32 +0000)
PWGDQ/dielectron/macrosJPSI/AddTask_jbook_JPsi.C
PWGDQ/dielectron/macrosJPSI/ConfigJpsiME_jpsi_PbPb.C
PWGDQ/dielectron/macrosJPSI/ConfigJpsiQA_jpsi_PbPb.C
PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C

index 04b9abe4ad13dd4d897bbb5bbe573f0f7c6e2d4d..9343a027965f38822e21d4495a11b6a06ea22079 100644 (file)
@@ -1,5 +1,5 @@
-AliAnalysisTask *AddTask_jbook_JPsi(TString prod="",
-                                   Bool_t gridconf=kFALSE,
+AliAnalysisTask *AddTask_jbook_JPsi(Bool_t gridconf=kFALSE,
+                                   Bool_t hasMC=kFALSE,
                                    ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB) {
 
   //get the current analysis manager
@@ -10,11 +10,11 @@ AliAnalysisTask *AddTask_jbook_JPsi(TString prod="",
   }
 
   //Do we have an MC handler?
-  Bool_t hasMC = kFALSE;
   TString list = gSystem->Getenv("LIST");
-  if( list.IsNull()) list=prod;
-  if( list.Contains("LHC10h")   || list.Contains("LHC11h")   ) hasMC=kFALSE;
-  if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
+  if(!list.IsNull()) {
+    if( list.Contains("LHC10h")   || list.Contains("LHC11h")   ) hasMC=kFALSE;
+    if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
+  }
 
   //Do we have an AOD handler?
   Bool_t isAOD=(mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class() ? kTRUE : kFALSE);
@@ -80,8 +80,8 @@ AliAnalysisTask *AddTask_jbook_JPsi(TString prod="",
     gROOT->LoadMacro(configFile.Data());
 
   //add dielectron analysis with different cuts to the task
-  for (Int_t i=0; i<6; ++i) { //nDie defined in config file
-    AliDielectron *jpsi=ConfigJpsi_jb_PbPb(i,list,triggers);
+  for (Int_t i=0; i<nDie; ++i) { //nDie defined in config file
+    AliDielectron *jpsi=ConfigJpsi_jb_PbPb(i,hasMC,triggers);
     if (jpsi ) task->AddDielectron(jpsi);
     if (jpsi ) printf(" %s added\n",jpsi->GetName());
   }
index b1baa6756d851bc04819ab40ad386230f96955c9..6ed2a3523947c1cd623b009739859e0348e61001 100644 (file)
@@ -1,4 +1,5 @@
 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
+void InitHF(AliDielectron* die, Int_t cutDefinition);
 
 void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition);
 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
@@ -7,8 +8,8 @@ void SetupPairCuts( AliDielectron *die,  Int_t cutDefinition);
 void ConfigEvtPlane(AliDielectron *die,  Int_t cutDefinition);
 void ConfigBgrd(    AliDielectron *die,  Int_t cutDefinition);
 
-TString names=("NoBins;Zvtx;ZvtxNoKF;ZvtxCent;ZvtxNcontr;ZvtxNcontrPE;ZvtxNcontrPEepTPC;ZvtxNcontrPEepTPCmag");
-enum { kNoBins=0, kZvtx, kZvtxNoKF, kZvtxCent, kZvtxNcontr, kZvtxNcontrPE, kZvtxNcontrPEepTPC, kZvtxNcontrPEepTPCmag};
+TString names=("NoBins;Zvtx;ZvtxNoKF;ZvtxCent;ZvtxNcontr;ZvtxNcontrPE;ZvtxNcontrPEepTPC;ZvtxNcontrPEepTPCmag;ZvtxepTPC");
+enum { kNoBins=0, kZvtx, kZvtxNoKF, kZvtxCent, kZvtxNcontr, kZvtxNcontrPE, kZvtxNcontrPEepTPC, kZvtxNcontrPEepTPCmag, kZvtxepTPC};
 
 TObjArray *arrNames=names.Tokenize(";");
 const Int_t nDie=arrNames->GetEntries();
@@ -35,6 +36,28 @@ AliDielectron* ConfigJpsiME_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULon
   //ESD handler?
   isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
 
+  // switch off some configurations
+  if(hasMC) { // MONTE CARLO
+    switch(cutDefinition) {
+      //case kQA:        return 0x0;
+    }
+  } else { // COLLISION DATA
+    switch(cutDefinition) {
+      //    case kNoBins:               return 0x0;
+      //    case kZvtx:                 return 0x0;
+    case kZvtxNoKF:             return 0x0;
+      //    case kZvtxCent:             return 0x0;
+      //    case kZvtxNcontr:           return 0x0;
+    case kZvtxNcontrPE:         return 0x0;
+    case kZvtxNcontrPEepTPC:    return 0x0;
+    case kZvtxNcontrPEepTPCmag: return 0x0;
+      //    case kZvtxepTPC:            return 0x0;
+      //    case kQA:  return 0x0;
+      //    case kGammas:  return 0x0;
+    }
+  }
+
+
   // task name
   TString name=Form("%02d",cutDefinition);
   if (cutDefinition<arrNames->GetEntriesFast())  name=arrNames->At(cutDefinition)->GetName();
@@ -49,10 +72,6 @@ AliDielectron* ConfigJpsiME_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULon
   SetupTrackCuts(die,cutDefinition);
   SetupPairCuts(die,cutDefinition);
 
-  // histogram setup
-  InitHistograms(die,cutDefinition);
-  printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
-
   // bgrd estimators
   ConfigBgrd(die,cutDefinition);
 
@@ -67,6 +86,14 @@ AliDielectron* ConfigJpsiME_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULon
   // KF usgae
   if(cutDefinition==kZvtxNoKF) die->SetUseKF(kFALSE);
 
+  // histogram setup
+  InitHistograms(die,cutDefinition);
+  printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
+
+  // HF array setup
+  InitHF(die,cutDefinition);
+
+
   return die;
 }
 
@@ -139,7 +166,7 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
 
   //Pt cut, should make execution a bit faster
   AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
-  pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);    //0.8
+  pt->AddCut(AliDielectronVarManager::kPt,0.85,1e30);    //0.8
   cuts->AddCut(pt);
 
   // track cuts ESD and AOD
@@ -223,13 +250,25 @@ void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
     mix->AddVariable(AliDielectronVarManager::kCentrality,  8,  0.,80.);
     break;
   case kZvtxNcontrPEepTPCmag:
+    mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+    mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
+    mix->AddVariable(AliDielectronVarManager::kTPCrpH2,     8,  TMath::Pi()/-2., TMath::Pi()/2.);
     mix->AddVariable(AliDielectronVarManager::kTPCmagH2,    "0.,20.,50.,80.,110.,150.,500.");
+    break;
   case kZvtxNcontrPEepTPC:
+    mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+    mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
     mix->AddVariable(AliDielectronVarManager::kTPCrpH2,     8,  TMath::Pi()/-2., TMath::Pi()/2.);
+    break;
   case kZvtxNcontrPE:
   case kZvtxNcontr:
+    mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
     mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
+    break;
+  case kZvtxepTPC:
     mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+    mix->AddVariable(AliDielectronVarManager::kTPCrpH2,     8,  TMath::Pi()/-2., TMath::Pi()/2.);
+    mix->AddVariable(AliDielectronVarManager::kTPCmagH2,    "0.,20.,50.,80.,110.,150.,500.");
     break;
   }
   mix->SetMixType(AliDielectronMixingHandler::kOSonly);
@@ -246,7 +285,7 @@ void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
   // Configurate the TPC event plane 
   //
 
-  if(cutDefinition!=kZvtxNcontrPEepTPC && cutDefinition!=kZvtxNcontrPEepTPCmag) return;
+  if(cutDefinition!=kZvtxNcontrPEepTPC && cutDefinition!=kZvtxNcontrPEepTPCmag && cutDefinition!=kZvtxepTPC ) return;
 
   Double_t gGap = 0.0;
   AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
@@ -293,6 +332,11 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
   case kZvtxNoKF:
     histos->UserHistogram("Event","","", 200,-10.,   10.,    AliDielectronVarManager::kZvPrim);
     break;
+  case kZvtxepTPC:
+    histos->UserHistogram("Event","","", 200,-10.,   10.,    AliDielectronVarManager::kZvPrim);
+    histos->UserHistogram("Event","","", 250,  0.,  500.,    AliDielectronVarManager::kTPCmagH2);
+    histos->UserHistogram("Event","","", 16, TMath::Pi()/-2., TMath::Pi()/2.,    AliDielectronVarManager::kTPCrpH2);
+    break;
   }
 
   //Initialise histogram classes
@@ -311,6 +355,21 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
 
   histos->UserHistogram("Pair","","",  100,-1.,1.,      AliDielectronVarManager::kY);
   histos->UserHistogram("Pair","","",  400,0,20.,       AliDielectronVarManager::kPt);
+  histos->UserHistogram("Pair","","",  125,0,0.04*125,  AliDielectronVarManager::kM);
+
+  Int_t maxMixBins = die->GetMixingHandler()->GetNumberOfBins();
+  TObjArray *limits  = new TObjArray();
+  limits->Add(AliDielectronHelper::MakeLinBinning(125,         0.,          5.));
+  limits->Add(AliDielectronHelper::MakeLinBinning( 32,         0.,         80.));
+  limits->Add(AliDielectronHelper::MakeLinBinning( 20,         0.,         20.));
+  limits->Add(AliDielectronHelper::MakeLinBinning(maxMixBins,  0.,  maxMixBins));
+
+  UInt_t vars[4]={AliDielectronVarManager::kM,
+                 AliDielectronVarManager::kCentrality,
+                 AliDielectronVarManager::kPt,
+                 AliDielectronVarManager::kMixingBin      };
+  histos->UserSparse("Pair", 4, limits, vars);
+
 
 
   //legs from pair (fill SE)
@@ -326,3 +385,18 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
 
   die->SetHistogramManager(histos);
 }
+void InitHF(AliDielectron* die, Int_t cutDefinition)
+{
+  //
+  // Setup the HF arrays
+  //
+
+
+  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->AddCutVariable(AliDielectronVarManager::kCentrality, "0.,80.");
+  die->SetHistogramArray(hf);
+}
+
index b0de3e3e208c4ffb260fb32d3c9d7624b343da22..edb34ddcdaa6d17eb1a4c8c7157056e4aa333fed 100644 (file)
@@ -4,14 +4,17 @@ void InitCF(AliDielectron* die, Int_t cutDefinition);
 void SetupEventCuts(AliDielectron *die, ULong64_t triggers);
 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
 void SetupPairCuts(AliDielectron *die,  Int_t cutDefinition);
+void SetupV0Cuts( AliDielectron *die,  Int_t cutDefinition);
+
+void ConfigEvtPlane(AliDielectron *die,  Int_t cutDefinition);
 
 void AddMCSignals(AliDielectron *die);
 
 void SetEtaCorrection();
 TVectorD *GetRunNumbers();
 
-TString names=("QA");
-enum { kQA=0 };
+TString names=("QA;PIDQA");
+enum { kQA=0, kQApid };
 
 TObjArray *arrNames=names.Tokenize(";");
 const Int_t nDie=arrNames->GetEntries();
@@ -20,7 +23,8 @@ Bool_t  isESD      = kTRUE;
 Bool_t  hasMC      = kFALSE;
 TString list       = gSystem->Getenv("LIST");
 
-AliDielectron* ConfigJpsiQA_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
+AliDielectron* ConfigJpsiQA_jpsi_PbPb(Int_t cutDefinition, TString prod="",
+                                     ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
 {
   //
   // Setup the instance of AliDielectron
@@ -37,27 +41,29 @@ AliDielectron* ConfigJpsiQA_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULon
   // switch off some configurations
   if(hasMC) { // MONTE CARLO
     switch(cutDefinition) {
-      //    case kQA:        return 0x0;
+      //case kQApid:        return 0x0;
     }
   } else { // COLLISION DATA
     switch(cutDefinition) {
-      //    case kQA:  return 0x0;
+      //    case kQA:     return 0x0;
+      //    case kQApid:  return 0x0;
     }
   }
 
   // create the actual framework object
   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("QA config: %s",name.Data()));
   die->SetHasMC(hasMC);
 
   // cut setup
   SetupEventCuts(die,triggers);
   SetupTrackCuts(die,cutDefinition);
-  SetupPairCuts(die,cutDefinition);
+  if(cutDefinition!=kQApid) SetupPairCuts(die,cutDefinition);
+  SetupV0Cuts(die,cutDefinition);
 
   // MC signals
   if(hasMC) {
@@ -66,35 +72,17 @@ AliDielectron* ConfigJpsiQA_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULon
   }
   // histogram setup
   InitHistograms(die,cutDefinition);
-  printf(" Add %d classes to the manager \n",die->GetHistogramList()->GetEntries());
+  //printf(" Add %d classes to the manager \n",die->GetHistogramList()->GetEntries());
 
   // CF container setup
-  InitCF(die,cutDefinition);
-
-  /*
-  // tpc event plane
-  if(!hasMC) {
-    // TPC event plane configurations
-    Double_t gGap;
-    switch(cutDefinition) {
-    default: gGap=0.0;
-    }
+  //InitCF(die,cutDefinition);
 
-    AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
-    poi->AddCut(AliDielectronVarManager::kM,2.92,3.20);     // particles of interest, jpsi mass window
-    die->GetEventPlanePOIPreFilter().AddCuts(poi);
-
-    AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
-    etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
-    die->GetEventPlanePreFilter().AddCuts(etaGap);
-    // die->SetLikeSignSubEvents();
-
-    die->SetPreFilterEventPlane();
-  }
-  */
+  // tpc event plane configuration
+  // ConfigEvtPlane(die,cutDefinition);
 
   // prefilter settings
-  //  die->SetNoPairing();
+  //  if(cutDefinition==kQA) die->SetNoPairing();
+  //  else 
   die->SetPreFilterUnlikeOnly();
   //die->SetPreFilterAllSigns();
 
@@ -134,7 +122,7 @@ void SetupEventCuts(AliDielectron *die, ULong64_t triggers)
   eventCuts->SetRequireVertex();
   eventCuts->SetMinVtxContributors(1);
   eventCuts->SetVertexZ(-10.,+10.);
-  //eventCuts->SetCentralityRange(minCent,maxCent);
+  eventCuts->SetCentralityRange(minCent,maxCent);
 
   /*
   TF1 *fMean  = new TF1("fMean", "pol1",               0,25e+3);
@@ -173,32 +161,25 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   // AOD track filter (needs to be first cut to speed up)
   AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
   trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
-  //  trkFilter->SetMinNCrossedRowsOverFindable(0.6);
   //if(!isESD) cuts->AddCut(trkFilter);
 
   AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
-  trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
-  trkCuts->SetRequireITSRefit(kTRUE);
+  if(cutDefinition==kQA) trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
+  if(cutDefinition==kQA) trkCuts->SetRequireITSRefit(kTRUE);
+  if(cutDefinition!=kQA) trkCuts->SetMinNCrossedRowsOverFindable(0.6);
   trkCuts->SetRequireTPCRefit(kTRUE);
   cuts->AddCut(trkCuts);
 
-  //Pt cut, should make execution a bit faster
-  AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
-  pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);    //1.1
-  cuts->AddCut(pt);
-  pt->Print();
-
   // track cuts ESD and AOD
   AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
-  varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
-  varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
+  if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kPt,0.8,1e30);    //1.1
+  if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
+  if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
+  if(cutDefinition==kQA) varCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
   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::kNclsTPC,     50.0, 160.0);
   varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
-  //varCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
-  varCuts->Print();
   cuts->AddCut(varCuts);
 
   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
@@ -206,13 +187,13 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   ////////////////////////////////// DATA
   if(!hasMC) {
     // TPC
-    pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,   -4.,4.0);
-    pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -100.,4.0,0.,0.,kTRUE);
-    pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,   -100.,3.5,0.,0.,kTRUE);
+    pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,   -3.,3.0);
+    if(cutDefinition==kQA) pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -100.,4.0,0.,0.,kTRUE);
+    //    pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,   -100.,3.5,0.,0.,kTRUE);
 
     // TOF
-    pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-5,5.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
-    //    pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
+    //pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-5,5.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
+    pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,5.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
 
     // TRD 1- or 2-dimensonal
     /*    pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
@@ -235,7 +216,7 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
 
   } //hasMC
 
-  //  cuts->AddCut(pid);
+  cuts->AddCut(pid);
   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
 
 
@@ -244,6 +225,10 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
   //cuts->AddCut(noconv);
 
+  // Print
+  //  cuts->Print();
+
+  die->GetTrackFilter().GetCuts()->ls();
 }
 
 //______________________________________________________________________________________
@@ -256,15 +241,11 @@ void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
   // conversion rejection
   Double_t gCut;
   switch(cutDefinition) {
-  case kQA:    gCut = 0.05;  break;
-  default:     gCut = 0.05;
+  case kQA:     gCut = 0.05;  break;
+  case kQApid:  gCut = 0.00;  return;
+  default:      gCut = 0.05;
   }
   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);
   gammaCuts->Print();
   die->GetPairPreFilter().AddCuts(gammaCuts);
@@ -281,6 +262,110 @@ void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
     //    minvCut->Print();
     //    die->GetPairFilter().AddCuts(minvCut);
   }
+
+  // gamma selection
+  AliDielectronVarCuts *gamma = new AliDielectronVarCuts("Gamma","Gamma");
+  gamma->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0,   0.035); // 0.1
+  gamma->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02),   1.0);
+  gamma->AddCut(AliDielectronVarManager::kLegDist,      0.0,   0.25);
+  gamma->AddCut(AliDielectronVarManager::kR,            3.0,   90.0);
+  gamma->AddCut(AliDielectronVarManager::kPsiPair,      0.0,   0.05);
+  gamma->AddCut(AliDielectronVarManager::kChi2NDF,      0.0,   10.0);
+  gamma->AddCut(AliDielectronVarManager::kM,            0.0,   0.05);
+  if(cutDefinition==kQApid) {
+    //    gamma->Print();
+    //    die->GetPairFilter().AddCuts(gamma);
+  }
+
+}
+
+//______________________________________________________________________________________
+void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
+{
+  //
+  // Setup the V0 cuts
+  //
+
+  if(cutDefinition!=kQApid) return;
+
+  // add to cut group
+  TIter next(die->GetTrackFilter().GetCuts());
+  AliAnalysisCuts *cuts;
+  while((cuts = (AliAnalysisCuts*)next())) {
+    if(cuts->IsA() == AliDielectronCutGroup::Class())  break;
+  }
+
+  AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma");
+  gammaV0Cuts->SetPdgCodes(22,11,11);
+  //gammaV0Cuts->SetDefaultPID(13); // TPC+-3.5 TOF+-4
+  gammaV0Cuts->SetDefaultPID(7); // TPC+-10 TOF+-3 required
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02),   1.0 );
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF,                       0.0,  10.0 );
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist,                       0.0,   0.25);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kR,                             3.0,  90.0 );
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair,                       0.0,   0.05);
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kM,                             0.0,   0.05);
+  //  gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle,              0.0,   0.1 );
+  gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt,                         0.0,   0.05);
+  //  gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha,                     -0.35,  0.35); // not sure if this works fine
+  gammaV0Cuts->SetExcludeTracks(kFALSE); // inclusion
+  gammaV0Cuts->Print();
+
+  // efficiency
+  // const Double_t cutQTG < 0.05;
+  // purity
+  // 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; // high pt gammas
+
+  //////////
+  /*   // Hans configuration
+  fMaxEta(1.4),
+  fMinR(10.),
+  fMaxR(180.),
+  fMaxChi2NDF(5.),  //100
+  fMaxPsi(.05),     //2
+  fMinCosP(0.9997), //0.97
+  fMinDaughterPt(.05),
+  fMinTPCNcls(70),  //40
+  fMaxAsym(.06),
+  fMaxNSigEleTPC(4.),    
+  fMaxNSigEleTPCLowP(3.), //4.
+  fMinNSigPioTPC(1.),
+  fMinNSigKaoTPC(1.),
+  fMinNSigProTPC(1.),
+  fMaxNSigEleTOF(3.),
+  */
+
+
+
+
+
+
+  if(cuts)
+    ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
+  else
+    die->GetTrackFilter().AddCuts(gammaV0Cuts);
+}
+
+//______________________________________________________________________________________
+void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
+{
+  //
+  // Configurate the TPC event plane 
+  //
+
+  Double_t 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);
+
+  // 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);
+  //if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
+
+  die->SetPreFilterEventPlane();
 }
 
 //______________________________________________________________________________________
@@ -291,26 +376,35 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
   //
 
   // booleans for histo selection
-  Bool_t bHistEvtQA=kFALSE, bHistTrackQA=kFALSE, bHistPairQA = kFALSE;
+  Bool_t bHistEvtQA=kFALSE, bHistTrackQA=kFALSE, bHistPairQA = kFALSE, bHistPidQA=kFALSE;
   switch (cutDefinition) {
-  case kQA:       bHistEvtQA=kTRUE; bHistTrackQA=kTRUE; bHistPairQA=kTRUE; break;
+  case kQA:       bHistEvtQA=kTRUE;  bHistTrackQA=kTRUE;  bHistPairQA=kTRUE;  bHistPidQA=kFALSE; break;
+  case kQApid:    bHistEvtQA=kFALSE; bHistTrackQA=kFALSE; bHistPairQA=kFALSE; bHistPidQA=kTRUE;  break;
   }
 
-
   //Setup histogram Manager
   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
 
-
   ////// EVENT HISTOS /////
   if(bHistEvtQA) {
 
     //add histograms to event class
     histos->AddClass("Event");
-    Int_t bins[]={125,100,100,55}; Double_t min[]={0.,0.,0.,0.}; Double_t max[]={25000.,20000.,4000.,1.1}; 
-    UInt_t var[]={AliDielectronVarManager::kMultV0,AliDielectronVarManager::kNTrk,AliDielectronVarManager::kNacc,AliDielectronVarManager::kMatchEffITSTPC};
-    histos->UserSparse("Event", 4, bins, min, max, var);
-    //histos->UserHistogram("Event", 3, bins, min, max, var);
+
+    Int_t binsev[]   ={  125,   100,   100,  100,  100,   100,  55  };
+    Double_t minev[] ={    0.,    0.,    0.,   0.,   0.,    0.,  0. };
+    Double_t maxev[] ={25000.,20000.,20000.,4000.,4000., 4000.,  1.1};
+    UInt_t varev[]   ={AliDielectronVarManager::kMultV0,
+                      AliDielectronVarManager::kNTrk,
+                      AliDielectronVarManager::kRefMult,
+                      AliDielectronVarManager::kNacc,
+                      AliDielectronVarManager::kRefMultTPConly,
+                      AliDielectronVarManager::kNVtxContrib,
+                      AliDielectronVarManager::kMatchEffITSTPC };
+    histos->UserSparse("Event", 7, binsev, minev, maxev, varev);
+
     histos->UserHistogram("Event","","", 80,0.,80., AliDielectronVarManager::kCentrality);
+
     histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronVarManager::kRunNumber);
     histos->UserHistogram("Event","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(80,0.,80.),
                          AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
@@ -379,7 +473,6 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
                          AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCrpH2uc);
     histos->UserHistogram("Event","","", 80,0.,80., 100,0.,250.,
                          AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCmagH2uc);
-
   }
 
   ////// PAIR HISTOS /////
@@ -405,13 +498,13 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
     histos->UserHistogram("Pair","","", 200, 0.,20.,           AliDielectronVarManager::kR);
     histos->UserHistogram("Pair","","", 100,-1.,+1.,           AliDielectronVarManager::kThetaCS);
 
+    histos->UserHistogram("Pair","","", 200,-10.,+10., 125, 0.0, 2.5, AliDielectronVarManager::kArmAlpha, AliDielectronVarManager::kArmPt);
+
     if(hasMC) histos->UserHistogram("Pair","","",10000,-5000.5,4999.5, 300, 0.,300*0.04, AliDielectronVarManager::kPdgCode, AliDielectronVarManager::kM);
 
     histos->UserProfile("Pair","","",  AliDielectronVarManager::kPt,  GetRunNumbers(), AliDielectronVarManager::kRunNumber);
     histos->UserProfile("Pair","","",  AliDielectronVarManager::kEta, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
     histos->UserProfile("Pair","","",  AliDielectronVarManager::kPhi, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Pair","","",  AliDielectronVarManager::kOpeningAngle, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
-    histos->UserProfile("Pair","","",  AliDielectronVarManager::kM,   GetRunNumbers(), AliDielectronVarManager::kRunNumber);
   }
 
   ////// TRACK HISTOS /////
@@ -419,10 +512,11 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
 
     //add histograms to track class
     histos->SetReservedWords("Track");
-    for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
-    //legs from pair (fill SE PM)
-    for (Int_t i=1; i<2; ++i) histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
-    
+    // all tracks after all cuts
+    histos->AddClass(Form("Track_%s",     AliDielectron::PairClassName(AliDielectron::kEv1PM)));
+    // fill legs from OS pairs
+    histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PM)));
+
     //add MC signal histograms to track class
     if(die->GetMCSignals()) {
       for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i)
@@ -485,9 +579,16 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
     // TRD
     histos->UserHistogram("Track","", "",   7, 0., 7., AliDielectronVarManager::kTRDpidQuality);
     histos->UserHistogram("Track","", "", 105,-1.,20., AliDielectronVarManager::kTRDchi2);
+    // TRD PID
+    //    histos->UserHistogram("Track","", "", 100,0.0,5., 100,0.,6., AliDielectronVarManager::kPIn, AliDielectronVarManager::kTRDsignal);
+    histos->UserHistogram("Track","","",  100,0.,1.,  AliDielectronVarManager::kTRDprobEle);
+    histos->UserHistogram("Track","","",  100,0.,1.,  AliDielectronVarManager::kTRDprobPio);
+//     histos->UserHistogram("Track","","",  100,0.,1.,  AliDielectronVarManager::kTRDprob2DEle);
+//     histos->UserHistogram("Track","","",  100,0.,1.,  AliDielectronVarManager::kTRDprob2DPio);
 
     // TPC PID
     histos->UserProfile("Track","","", AliDielectronVarManager::kTPCnSigmaEle, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
+    //    histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(200, 0.,200.), AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCSignal);
     histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(16, 0.,80.), AliDielectronHelper::MakeLinBinning(100, -5.,+5),
                          AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kTPCnSigmaEle);
     histos->UserHistogram("Track","","", GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,1.), AliDielectronHelper::MakeLinBinning(100, -5.,+5),
@@ -512,9 +613,36 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
       histos->UserHistogram("Track","","",10000,-5000.5,4999.5, AliDielectronVarManager::kPdgCodeMother);
       histos->UserHistogram("Track","","",10000,-5000.5,4999.5, AliDielectronVarManager::kPdgCode);
     }
-
   }
 
+    // TPC PID
+  if(bHistPidQA) {
+    //add histograms to track class
+    histos->SetReservedWords("Track");
+    //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)));
+
+    TObjArray *limits  = new TObjArray();
+      limits->Add(AliDielectronHelper::MakeLinBinning(100,-10.,     5.));
+      limits->Add(AliDielectronHelper::MakeLinBinning(100,  0.,   200.));
+      limits->Add(AliDielectronHelper::MakeLinBinning(100,  0.,  4000.));
+      limits->Add(AliDielectronHelper::MakeLinBinning( 50,  0.,    10.));
+      limits->Add(AliDielectronHelper::MakeLinBinning( 32,  0.,    80.));
+      limits->Add(AliDielectronHelper::MakeLinBinning( 20, -1.,     1.));
+      limits->Add(GetRunNumbers());
+
+      UInt_t var[7]={AliDielectronVarManager::kTPCnSigmaEle,
+                    AliDielectronVarManager::kTPCsignal,
+                    AliDielectronVarManager::kNacc,
+                    AliDielectronVarManager::kPIn,
+                    AliDielectronVarManager::kCentrality,
+                    AliDielectronVarManager::kEta,
+                    AliDielectronVarManager::kRunNumber};
+      histos->UserSparse("Track", 7, limits, var);
+
+    }
+
+
   die->SetHistogramManager(histos);
 }
 
index 5e491b2a2c3662e0ab2550dc6731bb6370f4290d..03d2d56aab08ba02fcf57705ce9c7f8dacc1d7cb 100644 (file)
@@ -15,17 +15,16 @@ void SetEtaCorrection();
 TVectorD *GetRunNumbers();
 TVectorD *GetDeltaPhiBins();
 
-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 };
+TString names=("TPC;TOF;TRD;Ionut;NOPID");
+enum { kTPC=0, kTOF, kTRD, kIonut, kNoPID };
 
 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="", ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
+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
@@ -34,11 +33,12 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="", ULong64_
   // gsi train?
   TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
   Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE); 
-
-  // 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;
+  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") ) hasMC=kTRUE;
+  }
 
   //ESD handler?
   isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
@@ -46,12 +46,19 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="", ULong64_
   // switch configurations ON and OFF
   if(hasMC) { // MONTE CARLO
     switch(cutDefinition) {
-    case kTOF: /* */ break;
+    case kTPC:   /* */ break;
+    case kTOF:   /* */ break;
+    case kTRD:   /* */ break;
+    case kIonut: /* */ break;
+      //    case kNoPID: /* */ break;
     default:         return 0x0;
     }
   } else { // COLLISION DATA
     switch(cutDefinition) {
-    case kTOF: /* */ break;
+    case kTPC:   /* */ break;
+    case kTOF:   /* */ break;
+    case kTRD:   /* */ break;
+    case kIonut: /* */ break;
     default:         return 0x0;
     }
   }
@@ -62,14 +69,14 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="", ULong64_
   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("Track cuts: %s",name.Data()));
+  AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data()));
   die->SetHasMC(hasMC);
 
   // cut setup
   SetupEventCuts(die,triggers,cutDefinition);
   SetupTrackCuts(die,cutDefinition);
   SetupV0Cuts(die,cutDefinition);
-  //  SetupPairCuts(die,cutDefinition);
+  SetupPairCuts(die,cutDefinition);
 
   // Monte Carlo Signals
   if(hasMC) {
@@ -95,20 +102,21 @@ AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="", ULong64_
   printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
 
   // HF array setup
-  InitHF(die,cutDefinition);
+  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() );
+  /*
+    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() );
   */
 
   // bgrd estimators
   if(!hasMC) ConfigBgrd(die,cutDefinition);
 
   // tpc event plane configuration
-  ConfigEvtPlane(die,cutDefinition);
+  if(!hasMC) ConfigEvtPlane(die,cutDefinition);
 
   // prefilter settings
   die->SetPreFilterUnlikeOnly();
@@ -136,7 +144,7 @@ void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
 
   // trigger specific centrality cuts (reject trigger inefficiencies)
   Double_t minCent=0.0, maxCent=100.;
-  if(!hasMC) {
+  if(!die->GetHasMC()) {
     switch(triggers) {
     case AliVEvent::kCentral:     minCent= 0.; maxCent= 9.; break;
     case AliVEvent::kSemiCentral: minCent=12.; maxCent=53.; break;
@@ -175,154 +183,88 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
   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->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
   //  trkFilter->SetMinNCrossedRowsOverFindable(0.6);
-  if(!isESD) cuts->AddCut(trkFilter);
 
-  //Pt cut, should make execution a bit faster
-  AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
-  pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);    //0.8
-  cuts->AddCut(pt);
-
-  // track cuts ESD and AOD
-  AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+  AliDielectronVarCuts *varCuts   = new AliDielectronVarCuts("VarCuts","VarCuts");
+  AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
+  // config specific cuts
+  switch(cutDefinition) {
+  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 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
+    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
+    break;
+  }
+  // standard cuts
   varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
   varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
-  varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9); // -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);
   //  varCuts->AddCut(AliDielectronVarManager::kV0Index0,     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->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");
-  ////////////////////////////////// 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);
+  AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts");
+  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 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 kIonut:
+    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);
+    break;
   }
 
-  ////////////////////////////////// MC
-  if(hasMC) {
-
-    // 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;
-      }
-
-
-      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.);
-
-      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.);
-
-      //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);
-      }
-    }
-
-    // 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);
-    }
-
-  } //hasMC
-
-  ////////////////////////////////// DATA + MC
-  // pid cuts TPC + TOF & TRD
-  pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
-
-  if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
-    pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
-
-  if(cutDefinition!=krec) cuts->AddCut(pid);
-  /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
-
-
+  /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
   // exclude conversion electrons selected by the tender
   AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
-  //  cuts->AddCut(noconv);
+
+  // 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();
 
 }
 
@@ -333,7 +275,7 @@ void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
   // Setup the V0 cuts
   //
 
-  // Quality cuts
+  // Quality cuts (add the gamma filter to the cut group)
   TIter next(die->GetTrackFilter().GetCuts());
   AliAnalysisCuts *cuts;
   while((cuts = (AliAnalysisCuts*)next())) {
@@ -342,6 +284,7 @@ void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
 
   AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma");
   gammaV0Cuts->SetPdgCodes(22,11,11);
+  gammaV0Cuts->SetDefaultPID(13); // TPC+-3.5 TOF+-4
   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);
@@ -350,12 +293,12 @@ void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
   gammaV0Cuts->AddCut(AliDielectronVarManager::kM,                             0.0,   0.05, kFALSE);
   //  gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle,              0.0,   0.1, kFALSE);
   gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt,                         0.0,   0.05, kFALSE);
-  gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha,                     -0.35,  0.35, kFALSE);
+  //  gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha,                     -0.35,  0.35, kFALSE); // not sure if it works as expected
   gammaV0Cuts->SetExcludeTracks(kTRUE);
   gammaV0Cuts->Print();
 
- //  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;  
+ //  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);
@@ -373,27 +316,17 @@ void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
   // conversion rejection
   Double_t gCut;
   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 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
   }
 
   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);
 
-
   // rapidity selection
   //  AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
   // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
@@ -418,7 +351,7 @@ 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::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.");
   mix->SetMixType(AliDielectronMixingHandler::kAll);
@@ -434,29 +367,25 @@ void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
   // Configurate the TPC event plane 
   //
 
-  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;
-  }
+  //   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);
 
-  // eta gap in tpc event plane
-  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->SetLikeSignSubEvents();
   die->SetPreFilterEventPlane();
 }
 
@@ -466,35 +395,38 @@ 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;
   switch (cutDefinition) {
-  case kTPC:
-  case kTOF:      bHistEvts=kTRUE; bHistFlow=kTRUE; bHistPair=kTRUE; bHistPairME=kFALSE; break;
+  case kTPC:   bHistEvts=kTRUE;
+  case kTOF:
   case kTRD:
-  case kTOFTRD:
-  case kTOFTRD2D: bHistFlow=kTRUE; bHistPair=kTRUE; break;
-  case krec:      break;
+  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 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;
   }
-
+  if(hasMC) { bHistFlow=kFALSE; bHistFlowQA=kFALSE; bHistPairME=kFALSE; }
 
   //Setup histogram Manager
   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
@@ -515,10 +447,10 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
   ////// 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);
+    //     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);
@@ -571,18 +503,20 @@ 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
+    if(die->GetMCSignals()) {
+      for (Int_t i=0; i<die->GetMCSignals()->GetEntriesFast(); ++i)
+       histos->AddClass(Form("Pair_%s",die->GetMCSignals()->At(i)->GetName()));
+    }
+
+    //Track classes
     //legs from pair (fill SE)
     for (Int_t i=0; i<3; ++i){
       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
     }
-    //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)));
-    }
-    //track rotation
-    //   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
-    //   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
+    //    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)));
 
     // Vertex
     histos->UserHistogram("Track","","", 500,-1.,1., AliDielectronVarManager::kImpactParXY);
@@ -617,24 +551,57 @@ void InitHistograms(AliDielectron *die, Int_t cutDefinition)
 
     //// FLOW results use tprofiles
     if(bHistFlow) {
-      histos->UserProfile("Pair","",
-                         "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","",
-                         "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
+      // differential observed v2 (pt and centrality)
+      histos->UserProfile("Pair","","",
                          AliDielectronVarManager::kv0ArpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
+                         125,0.,125*.04, 10, 0.,100., 20,0.,10.,
                          AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
-      histos->UserProfile("Pair","",
-                         "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
+      histos->UserProfile("Pair","","",
                          AliDielectronVarManager::kv0CrpH2FlowV2,
-                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
+                         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
@@ -661,17 +628,30 @@ void InitHF(AliDielectron* die, Int_t cutDefinition)
   //
   // Setup the HF arrays
   //
+  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)));
+  }
 
   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::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());
+  //  hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
+  //  hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, 8,-1.*TMath::Pi(),TMath::Pi());
   //  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);
@@ -689,57 +669,50 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
   //
   // Setup the CF Manager if needed
   //
-
-  // switch off ep systematics
-  if(cutDefinition >  kEtaGap01 && cutDefinition != kSubRndm  ) continue;
+  Bool_t hasMC=die->GetHasMC();
 
   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
 
   // event variables
   cf->AddVariable(AliDielectronVarManager::kCentrality,      "0.,5.,10.,20.,40.,50.,60.,80.");
-  // pair variables
-  cf->AddVariable(AliDielectronVarManager::kPairType,        11,    0, 11);
-  cf->AddVariable(AliDielectronVarManager::kM,               125, 0.0, 0.04*125); // 40MeV bins
-  cf->AddVariable(AliDielectronVarManager::kPt,              "0., 1., 2.5, 5., 100.0");
-  cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, GetDeltaPhiBins());
-  cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2, GetDeltaPhiBins());
-
-  /*
-  //    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() );
+  //    if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
+  //    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);
+  cf->AddVariable(AliDielectronVarManager::kY,  18, -0.9,  0.9);
+  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::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);
+  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);
   //    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();
+    if(cutDefinition==kTPC) cf->SetStepForMCtruth();
+    //    cf->SetStepForNoCutsMCmotherPid();
+    //    cf->SetStepForAfterAllCuts();
+    //    cf->SetStepsForEachCut();
+    //    cf->SetStepsForSignal();
+    //    cf->SetStepsForBackground(); 
     cf->SetStepsForMCtruthOnly();
-    // cf->SetStepsForBackground();
   }
 
   die->SetCFManagerPair(cf);
@@ -747,9 +720,9 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
 
 void AddMCSignals(AliDielectron *die){
   //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);
@@ -757,8 +730,19 @@ void AddMCSignals(AliDielectron *die){
   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);
+  die->AddSignalMC(beautyJpsi);
+
+  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
@@ -769,38 +753,9 @@ void AddMCSignals(AliDielectron *die){
   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
@@ -811,10 +766,10 @@ void AddMCSignals(AliDielectron *die){
   promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
   promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
-  //  die->AddSignalMC(promptJpsiRad);
+  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
@@ -825,7 +780,27 @@ void AddMCSignals(AliDielectron *die){
   promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
   promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
   promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
-  //  die->AddSignalMC(promptJpsiNonRad);
+  die->AddSignalMC(promptJpsiNonRad);
+
+  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);
+  die->AddSignalMC(directJpsi);
+
+  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);
+  //  die->AddSignalMC(gammaConversion);
+
 }
 
 void SetEtaCorrection()