AliRsnReader:
authorpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Feb 2009 15:29:21 +0000 (15:29 +0000)
committerpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Feb 2009 15:29:21 +0000 (15:29 +0000)
- added a check on vertex status and number of contributors

AliRsnAnalysisSE:
- added a global histogram which tells how many events in the sample were used
  and how many were skipped (required for correction purposes)

Macros:
- added new multi-purpose example macros with configuration variables
  in the top part of the code, in the same style as the ConfigPPR.C macro

PWG2/RESONANCES/AliRsnAnalysisSE.cxx
PWG2/RESONANCES/AliRsnReader.cxx
PWG2/RESONANCES/AliRsnReader.h
PWG2/RESONANCES/macros/AddRsnAnalysisTask.C
PWG2/RESONANCES/macros/AliRsnAnalysis.C
PWG2/RESONANCES/macros/CreatePairsPhi.C

index 5af2966..12b8c7a 100644 (file)
@@ -99,6 +99,9 @@ void AliRsnAnalysisSE::UserCreateOutputObjects()
     fOutList->Add(listTmp);
   }
 
+  TH1I *hUsed = new TH1I("hRsnUsed", "skipped and used events in this analysis", 2, 0, 2);
+  fOutList->Add(hUsed);
+
   fBuffer = new AliRsnEventBuffer(fBufferSize);
 }
 
@@ -113,12 +116,18 @@ void AliRsnAnalysisSE::UserExec(Option_t *)
 
   if (fEntry++ % 100 == 0) cout << "[" << GetName() << "] : processing entry " << fEntry-1 << endl;
 
-  AliRsnEvent *curEvent = GetRsnEventFromInputType();
-  if (!curEvent) return;
-  curEvent->SetUniqueID(eventID++);
+  TH1I *h = (TH1I*)fOutList->FindObject("hRsnUsed");
 
-  ProcessEventAnalysis(curEvent);
-  PostEventProcess();
+  AliRsnEvent *curEvent = GetRsnEventFromInputType();
+  if (curEvent) {
+    curEvent->SetUniqueID(eventID++);
+    ProcessEventAnalysis(curEvent);
+    PostEventProcess();
+    h->Fill(1);
+  }
+  else {
+    h->Fill(0);
+  }
 
   PostData(1, fOutList);
 }
index 4868835..6583e65 100644 (file)
@@ -55,6 +55,8 @@ AliRsnReader::AliRsnReader() :
   fTPCOnly(kFALSE),
   fUseESDTrackCuts(kFALSE),
   fUseRsnTrackCuts(kFALSE),
+  fCheckVertexStatus(kFALSE),
+  fMinNContributors(0),
   fPIDDef(),
   fITSClusters(0),
   fTPCClusters(0),
@@ -345,6 +347,8 @@ Bool_t AliRsnReader::FillFromESD(AliRsnEvent *rsn, AliESDEvent *esd, AliMCEvent
     // This is known from the "Status" parameter of the vertex itself.
     const AliESDVertex *v = esd->GetPrimaryVertex();
     if (!v->GetStatus()) v = esd->GetPrimaryVertexSPD();
+    if (fCheckVertexStatus && v->GetStatus() == kFALSE) return kFALSE;
+    if (fMinNContributors > 0 && v->GetNContributors() < fMinNContributors) return kFALSE;
 
     // get primary vertex
     vertex[0] = (Double_t)v->GetXv();
@@ -353,6 +357,8 @@ Bool_t AliRsnReader::FillFromESD(AliRsnEvent *rsn, AliESDEvent *esd, AliMCEvent
   }
   else {
     const AliESDVertex *v = esd->GetPrimaryVertexTPC();
+    if (fCheckVertexStatus && v->GetStatus() == kFALSE) return kFALSE;
+    if (fMinNContributors > 0 && v->GetNContributors() < fMinNContributors) return kFALSE;
 
     // get primary vertex
     vertex[0] = (Double_t)v->GetXv();
@@ -431,8 +437,8 @@ Bool_t AliRsnReader::FillFromESD(AliRsnEvent *rsn, AliESDEvent *esd, AliMCEvent
   // compute total multiplicity
   rsn->MakeComputations();
   if (rsn->GetMultiplicity() <= 0) {
-      AliDebug(1, "Zero Multiplicity in this event");
-      return kFALSE;
+    AliDebug(1, "Zero Multiplicity in this event");
+    return kFALSE;
   }
 
   // sort tracks w.r. to Pt (from largest to smallest)
@@ -458,89 +464,89 @@ Bool_t AliRsnReader::FillFromAOD(AliRsnEvent *rsn, AliAODEvent *aod, AliMCEvent
 // AliRsnEvent object will be set to 'kAOD'.
 //
 
-    // retrieve stack (if possible)
-    AliStack *stack = 0x0;
-    if (mc) stack = mc->Stack();
+  // retrieve stack (if possible)
+  AliStack *stack = 0x0;
+  if (mc) stack = mc->Stack();
 
-    // get number of tracks
-    Int_t ntracks = aod->GetNTracks();
-    if (!ntracks) return kFALSE;
+  // get number of tracks
+  Int_t ntracks = aod->GetNTracks();
+  if (!ntracks) return kFALSE;
 
-    // get primary vertex
-    Double_t vertex[3];
-    vertex[0] = aod->GetPrimaryVertex()->GetX();
-    vertex[1] = aod->GetPrimaryVertex()->GetY();
-    vertex[2] = aod->GetPrimaryVertex()->GetZ();
-    rsn->SetPrimaryVertex(vertex[0], vertex[1], vertex[2]);
-
-    // set MC primary vertex if present
-    TArrayF fvertex(3);
-    Double_t mcvx = 0., mcvy = 0., mcvz = 0.;
-    if (mc) {
-      mc->GenEventHeader()->PrimaryVertex(fvertex);
-      mcvx = (Double_t)fvertex[0];
-      mcvy = (Double_t)fvertex[1];
-      mcvz = (Double_t)fvertex[2];
-      rsn->SetPrimaryVertexMC(mcvx, mcvy, mcvz);
-    }
+  // get primary vertex
+  Double_t vertex[3];
+  vertex[0] = aod->GetPrimaryVertex()->GetX();
+  vertex[1] = aod->GetPrimaryVertex()->GetY();
+  vertex[2] = aod->GetPrimaryVertex()->GetZ();
+  rsn->SetPrimaryVertex(vertex[0], vertex[1], vertex[2]);
 
-    // store tracks from ESD
-    Int_t  index, label, labmum;
-    Bool_t check;
-    AliAODTrack *aodTrack = 0;
-    AliRsnDaughter temp;
-    TObjArrayIter iter(aod->GetTracks());
-    while ((aodTrack = (AliAODTrack*)iter.Next()))
-    {
-        // retrieve index
-        index = aod->GetTracks()->IndexOf(aodTrack);
-        label = aodTrack->GetLabel();
-        if (fRejectFakes && (label < 0)) continue;
-        // copy ESD track data into RsnDaughter
-        // if unsuccessful, this track is skipped
-        check = ConvertTrack(&temp, aodTrack);
-        if (!check) continue;
-        // if stack is present, copy MC info
-        if (stack)
-        {
-            TParticle *part = stack->Particle(TMath::Abs(label));
-            if (part)
-            {
-                temp.InitMCInfo(part);
-                labmum = part->GetFirstMother();
-                if (labmum >= 0)
-                {
-                    TParticle *mum = stack->Particle(labmum);
-                    temp.GetMCInfo()->SetMotherPDG(mum->GetPdgCode());
-                }
-            }
-        }
-        // set index and label and add this object to the output container
-        temp.SetIndex(index);
-        temp.SetLabel(label);
+  // set MC primary vertex if present
+  TArrayF fvertex(3);
+  Double_t mcvx = 0., mcvy = 0., mcvz = 0.;
+  if (mc) {
+    mc->GenEventHeader()->PrimaryVertex(fvertex);
+    mcvx = (Double_t)fvertex[0];
+    mcvy = (Double_t)fvertex[1];
+    mcvz = (Double_t)fvertex[2];
+    rsn->SetPrimaryVertexMC(mcvx, mcvy, mcvz);
+  }
 
-        // check this object against the Rsn cuts (if required)
-        if (fUseRsnTrackCuts) {
-          if (!fRsnTrackCuts.IsSelected(AliRsnCut::kParticle, &temp)) continue;
-        }
+  // store tracks from ESD
+  Int_t  index, label, labmum;
+  Bool_t check;
+  AliAODTrack *aodTrack = 0;
+  AliRsnDaughter temp;
+  TObjArrayIter iter(aod->GetTracks());
+  while ((aodTrack = (AliAODTrack*)iter.Next()))
+  {
+      // retrieve index
+      index = aod->GetTracks()->IndexOf(aodTrack);
+      label = aodTrack->GetLabel();
+      if (fRejectFakes && (label < 0)) continue;
+      // copy ESD track data into RsnDaughter
+      // if unsuccessful, this track is skipped
+      check = ConvertTrack(&temp, aodTrack);
+      if (!check) continue;
+      // if stack is present, copy MC info
+      if (stack)
+      {
+          TParticle *part = stack->Particle(TMath::Abs(label));
+          if (part)
+          {
+              temp.InitMCInfo(part);
+              labmum = part->GetFirstMother();
+              if (labmum >= 0)
+              {
+                  TParticle *mum = stack->Particle(labmum);
+                  temp.GetMCInfo()->SetMotherPDG(mum->GetPdgCode());
+              }
+          }
+      }
+      // set index and label and add this object to the output container
+      temp.SetIndex(index);
+      temp.SetLabel(label);
 
-        AliRsnDaughter *ptr = rsn->AddTrack(temp);
-        // if problems occurred while storin, that pointer is NULL
-        if (!ptr) AliWarning(Form("Failed storing track#%d"));
-    }
+      // check this object against the Rsn cuts (if required)
+      if (fUseRsnTrackCuts) {
+        if (!fRsnTrackCuts.IsSelected(AliRsnCut::kParticle, &temp)) continue;
+      }
 
-    // compute total multiplicity
-    rsn->MakeComputations();
-    if (rsn->GetMultiplicity() <= 0)
-    {
-        AliDebug(1, "Zero multiplicity in this event");
-        return kFALSE;
-    }
+      AliRsnDaughter *ptr = rsn->AddTrack(temp);
+      // if problems occurred while storin, that pointer is NULL
+      if (!ptr) AliWarning(Form("Failed storing track#%d"));
+  }
 
-    // correct tracks for primary vertex
-    rsn->CorrectTracks();
+  // compute total multiplicity
+  rsn->MakeComputations();
+  if (rsn->GetMultiplicity() <= 0)
+  {
+      AliDebug(1, "Zero multiplicity in this event");
+      return kFALSE;
+  }
 
-    return kTRUE;
+  // correct tracks for primary vertex
+  rsn->CorrectTracks();
+
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
index ffc48e0..8c468d1 100644 (file)
@@ -52,6 +52,10 @@ class AliRsnReader : public TObject
     void    SetTPCOnly(Bool_t doit = kTRUE);
     Bool_t  DoesTPCOnly() {return fTPCOnly;}
 
+    void    SetCheckVertexStatus(Bool_t doit = kTRUE);
+    Bool_t  DoesCheckVertexStatus() {return fCheckVertexStatus;}
+    void    SetMinNContributors(Int_t n) {fMinNContributors = n;}
+
     void    SetUseESDTrackCuts(Bool_t doit = kTRUE) {fUseESDTrackCuts = doit;}
     Bool_t  DoesESDTrackCuts() {return fUseESDTrackCuts;}
     AliESDtrackCuts* GetESDTrackCuts() {return &fESDTrackCuts;}
@@ -84,29 +88,33 @@ class AliRsnReader : public TObject
 
     // dummy copy methods
     AliRsnReader(const AliRsnReader &copy) :
-      TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),fUseESDTrackCuts(0),fUseRsnTrackCuts(0),
-      fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0),
+      TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),
+      fUseESDTrackCuts(0),fUseRsnTrackCuts(0),fCheckVertexStatus(kFALSE),
+      fMinNContributors(0),fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0),
       fTrackRefs(0),fTrackRefsITS(0),fTrackRefsTPC(0),fESDTrackCuts(),fRsnTrackCuts("") { /*nothing*/ }
     AliRsnReader& operator=(const AliRsnReader&) {return (*this);}
 
-    Bool_t          fCheckSplit;       // flag to check and remove split tracks
-    Bool_t          fRejectFakes;      // flag to reject fake tracks (negative label)
-    Bool_t          fTPCOnly;          // flag to use only the TPC for reading data
-    Bool_t          fUseESDTrackCuts;  // flag to use ESD track cuts
-    Bool_t          fUseRsnTrackCuts;  // flag to use ESD track cuts
+    Bool_t          fCheckSplit;         // flag to check and remove split tracks
+    Bool_t          fRejectFakes;        // flag to reject fake tracks (negative label)
+    Bool_t          fTPCOnly;            // flag to use only the TPC for reading data
+    Bool_t          fUseESDTrackCuts;    // flag to use ESD track cuts
+    Bool_t          fUseRsnTrackCuts;    // flag to use ESD track cuts
+
+    Bool_t          fCheckVertexStatus;  // reject events with vertex status = kFALSE
+    Int_t           fMinNContributors;   // reject events whose primary vertex has too few contributors
 
-    AliRsnPIDDefESD fPIDDef;           // manager for alternative PID weights (ESD only)
+    AliRsnPIDDefESD fPIDDef;             // manager for alternative PID weights (ESD only)
 
-    Int_t           fITSClusters;      // minimum number of ITS clusters to accept a track
-    Int_t           fTPCClusters;      // minimum number of TPC clusters to accept a track
-    Int_t           fTRDClusters;      // minimum number of TRD clusters to accept a track
+    Int_t           fITSClusters;        // minimum number of ITS clusters to accept a track
+    Int_t           fTPCClusters;        // minimum number of TPC clusters to accept a track
+    Int_t           fTRDClusters;        // minimum number of TRD clusters to accept a track
 
-    Int_t           fTrackRefs;        // minimum required track references for MC reading
-    Int_t           fTrackRefsITS;     // minimum required track references for MC reading (ITS)
-    Int_t           fTrackRefsTPC;     // minimum required track references for MC reading (TPC)
+    Int_t           fTrackRefs;          // minimum required track references for MC reading
+    Int_t           fTrackRefsITS;       // minimum required track references for MC reading (ITS)
+    Int_t           fTrackRefsTPC;       // minimum required track references for MC reading (TPC)
 
-    AliESDtrackCuts fESDTrackCuts;     // object for ESD track cuts
-    AliRsnCutSet    fRsnTrackCuts;     // other local cuts used in preliminary track selection
+    AliESDtrackCuts fESDTrackCuts;       // object for ESD track cuts
+    AliRsnCutSet    fRsnTrackCuts;       // other local cuts used in preliminary track selection
 
     ClassDef(AliRsnReader, 1);
 };
index c3e7c7b..9eb9f3f 100644 (file)
 
 
 
-static AliRsnAnalysisTaskSEBase::EInputType inputType = AliRsnAnalysisTaskSEBase::kESDMC;
-
-static Bool_t useAutoHandler = kTRUE;
-static Int_t  bufferSize     = 3000;
-static Int_t  pidArraySize   = 2000;
-
-static const char*       outputFileName = "rsn.root";
-
-static Bool_t            useRsnTrackCuts = kFALSE;
-static Double_t          etaRange = 10.0;
-static Double_t          rsnImpactParam = 3.0;
-static Double_t          ptMin = 0.0;
-
-static Bool_t            useESDTrackCuts = kFALSE;
-static Double_t          cov11 = 2;
-static Double_t          cov22 = 2;
-static Double_t          cov33 = 0.5;
-static Double_t          cov44 = 0.5;
-static Double_t          cov55 = 2;
-static Double_t          nSigmaToVertex = 4;
-static Double_t          dcaToVertex = 3.0;
-static Double_t          maxChi2PerClusterTPC = 3.5;
-static Bool_t            requireTPCRefit = kTRUE;
-static Bool_t            requireSigmaToVertex = kTRUE;
-static Bool_t            acceptKinkDaughters = kFALSE;
-static Int_t             minNClustersTPC = 50;
-
-static Int_t             nMixedEvents = 5;
+static AliRsnAnalysisTaskSEBase::EInputType inputType      = AliRsnAnalysisTaskSEBase::kESDMC;
+static const char*                          outputFileName = "rsn.root";
+
+static Bool_t    useAutoHandler = kTRUE;
+static Int_t     bufferSize     = 3000;
+static Int_t     pidArraySize   = 2000;
+static Int_t     nMixedEvents   = 5;
+
+static Bool_t    useRsnTrackCuts = kFALSE;
+static Double_t  etaRange = 10.0;
+static Double_t  rsnImpactParam = 3.0;
+static Double_t  ptMin = 0.0;
+
+static Bool_t    useESDTrackCuts = kFALSE;
+static Double_t  cov11 = 2;
+static Double_t  cov22 = 2;
+static Double_t  cov33 = 0.5;
+static Double_t  cov44 = 0.5;
+static Double_t  cov55 = 2;
+static Double_t  nSigmaToVertex = 4;
+static Double_t  dcaToVertex = 3.0;
+static Double_t  maxChi2PerClusterTPC = 3.5;
+static Bool_t    requireTPCRefit = kTRUE;
+static Bool_t    requireSigmaToVertex = kTRUE;
+static Bool_t    acceptKinkDaughters = kFALSE;
+static Int_t     minNClustersTPC = 50;
 
 Int_t AddRsnAnalysisTask(AliAnalysisManager *mgr)
 {
@@ -104,7 +102,7 @@ Int_t AddRsnAnalysisTask(AliAnalysisManager *mgr)
   reader->SetUseRsnTrackCuts(useRsnTrackCuts);
 
   // add configs for all impact parameters
-  task->AddPairMgrFromMacro("CreatePairsPhi.C");
+  task->AddPairMgrFromConfig("CreatePairsPhi.C");
 
   // initialize containers
   AliAnalysisDataContainer *input = mgr->CreateContainer("in", TChain::Class(), AliAnalysisManager::kInputContainer);
index e642825..03b3bc6 100644 (file)
@@ -12,6 +12,7 @@
 //=============================================================================
 
 #include <TProof.h>
+#include <TGrid.h>
 
 enum Rsn_DataSource
 {
@@ -20,16 +21,27 @@ enum Rsn_DataSource
   kDataset          // CAF dataset
 };
 
-static Bool_t            cleanPars = kTRUE;
+static Bool_t            cleanPars = kFALSE;
 static Bool_t            cleanPWG2resonances = kFALSE;
 static const char*       listPar = "STEERBase:ESD:AOD:ANALYSIS:ANALYSISalice:PWG2resonances";
 static const char*       proofConnection = "pulvir@alicecaf.cern.ch";
 
+static Bool_t            isAlien = kTRUE;
 static Bool_t            isProof = kFALSE;
-static Rsn_DataSource    listType = kTextFile;
 
-static const char*       inputSource = "local.txt";
-static Int_t             nReadFiles = 2;
+// Uncomment these two lines for an example run with a local list of local files
+//static Rsn_DataSource    listType = kTextFile;
+//static const char*       inputSource = "local.txt";
+
+// Uncomment these two lines for an example run with PROOF
+//static const char*    inputSource = "/COMMON/COMMON/LHC08c11_10TeV_0.5T";
+//static Rsn_DataSource listType    = kDataset;
+
+// Uncomment these two lines for an example run with AliEn XML collection
+static const char*    inputSource = "wn.xml";
+static Rsn_DataSource listType    = kXMLCollection;
+
+static Int_t             nReadFiles = 0;
 static Int_t             nSkippedFiles = 0;
 static TString           treeName = "esdTree";
 
@@ -158,14 +170,18 @@ TChain* CreateChainFromTXT()
 }
 
 //_________________________________________________________________________________________________
-TChain* CreateChainFromXML
-(const char *fileName, Int_t nread = 0, Int_t nskip = 0, const char *treeName = "esdTree")
+TChain* CreateChainFromXML()
 {
 //
 // Create a TChain of files to be analyzed from a XML file.
 // Last argument specifies the TTree name.
 //
 
+  if (!gGrid) {
+    Error("CreateChainFromXML", "gGrid object not instantiated");
+    return 0;
+  }
+
   TChain *chain = new TChain(treeName.Data());
   TAlienCollection *myCollection = TAlienCollection::Open(inputSource);
   if (!myCollection)
@@ -202,7 +218,7 @@ TChain* CreateChainFromDataset()
 
   if (!gProof) {
     Error("CreateChainFromDataset", "gProof object not initialized");
-    return kFALSE;
+    return 0;
   }
 
   TFileCollection *fc = gProof->GetDataSet(inputSource)->GetStagedSubset();
@@ -247,6 +263,7 @@ Int_t AliRsnAnalysis(const char *addMacro = "AddRsnAnalysisTask.C")
 
   // connect to PROOF if required
   if (isProof) TProof::Open(proofConnection);
+  else if (isAlien) TGrid::Connect("alien://");
 
   //
   // *** SETUP PAR LIBRARIES **********************************************************************
index a66a152..7a09d77 100644 (file)
 AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
 {
   AliRsnPairMgr  *pairMgr  = new AliRsnPairMgr(name);
-  
+
   // ========== USER CUSTOMIZATION VARIABLES ==========
-  
+
   Int_t   iResPDG             = 333;
   Int_t   nMixEvents          = 10;
   Bool_t  boolUseNoPID        = kTRUE;
   Bool_t  boolUseRealisticPID = kTRUE;
   Bool_t  boolUsePerfectPID   = kTRUE;
-  
+
   // ======= END USER CUSTOMIZATION VARIABLES =========
 
   // =========== DEFINE PAIRS ==============
-  
-  // decay tree definitions 
+
+  // decay tree definitions
   // for a PHI resonance (PDG = 333) decaying into K+ K-
   // and for related like-sign pairs
   AliRsnPairDef *defUnlike = new AliRsnPairDef(AliRsnPID::kKaon, '+', AliRsnPID::kKaon, '-', iResPDG);
@@ -49,7 +49,7 @@ AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
   // No PID
   AliRsnPair *pairUnlike_NoPID_Signal = new AliRsnPair(AliRsnPair::kNoPID, defUnlike);
   AliRsnPair *pairUnlike_NoPID_True   = new AliRsnPair(AliRsnPair::kNoPID, defUnlike);
-  AliRsnPair *pairUnlike_NoPID_Mix    = new AliRsnPair(AliRsnPair::kNoPIDMix, defUnlike, nMixEvents);
+  AliRsnPair *pairUnlike_NoPID_Mix    = new AliRsnPair(AliRsnPair::kNoPIDMix, defUnlike);
   AliRsnPair *pairLikePP_NoPID        = new AliRsnPair(AliRsnPair::kNoPID, defLikePP);
   AliRsnPair *pairLikeMM_NoPID        = new AliRsnPair(AliRsnPair::kNoPID, defLikeMM);
   // end No PID
@@ -57,87 +57,44 @@ AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
   // Perfect PID
   AliRsnPair *pairUnlike_PerfectPID_Signal = new AliRsnPair(AliRsnPair::kPerfectPID, defUnlike);
   AliRsnPair *pairUnlike_PerfectPID_True   = new AliRsnPair(AliRsnPair::kPerfectPID, defUnlike);
-  AliRsnPair *pairUnlike_PerfectPID_Mix    = new AliRsnPair(AliRsnPair::kPerfectPIDMix, defUnlike, nMixEvents);
+  AliRsnPair *pairUnlike_PerfectPID_Mix    = new AliRsnPair(AliRsnPair::kPerfectPIDMix, defUnlike);
   AliRsnPair *pairLikePP_PerfectPID        = new AliRsnPair(AliRsnPair::kPerfectPID, defLikePP);
   AliRsnPair *pairLikeMM_PerfectPID        = new AliRsnPair(AliRsnPair::kPerfectPID, defLikeMM);
   // end Perfect PID
-  
+
   // Perfect PID
   AliRsnPair *pairUnlike_RealisticPID_Signal = new AliRsnPair(AliRsnPair::kRealisticPID, defUnlike);
   AliRsnPair *pairUnlike_RealisticPID_True   = new AliRsnPair(AliRsnPair::kRealisticPID, defUnlike);
-  AliRsnPair *pairUnlike_RealisticPID_Mix    = new AliRsnPair(AliRsnPair::kRealisticPIDMix, defUnlike, nMixEvents);
+  AliRsnPair *pairUnlike_RealisticPID_Mix    = new AliRsnPair(AliRsnPair::kRealisticPIDMix, defUnlike);
   AliRsnPair *pairLikePP_RealisticPID        = new AliRsnPair(AliRsnPair::kRealisticPID, defLikePP);
   AliRsnPair *pairLikeMM_RealisticPID        = new AliRsnPair(AliRsnPair::kRealisticPID, defLikeMM);
   // end Realistic PID
-  
+
   // =========== END DEFINE PAIRS ==============
 
   // =========== CUTS ==============
-  
-  // cuts on single tracks:
-  // - pt between 0.2 and 10000.0 GeV/c
-  // - eta between -0.9 and 0.9 (ALICE acceptance)
-  // - impact parameter
-  AliRsnCut *cutDr = new AliRsnCut("cutDr", "", AliRsnCut::kRadialImpactParam, 0.0, 1.0);
-  AliRsnCut *cutPtMCPart = new AliRsnCut("cutPtMCPart", "cutPtMCPart", AliRsnCut::kTransMomentumMC, 0.2, 10000.0);
-  AliRsnCut *cutEtaMCPart = new AliRsnCut("cutMcEta", "cutMcEta", AliRsnCut::kEtaMC, -0.9, 0.9);
-  
+
+  // cuts on tracks:
+  // - defined in 'AddRsnAnalysisTask.C' for single-step analysis
+
   // cuts on pairs:
   // - true daughters of a phi resonance (only for true pairs histogram)
   AliRsnCut *cutTruePair = new AliRsnCut("cutTrue", "cutTrue", AliRsnCut::kIsTruePair, iResPDG);
-  
-  // cut set definition for single particles
-  AliRsnCutSet *cutSetParticle = new AliRsnCutSet("partCut");
-  cutSetParticle->AddCut(cutPtMCPart);
-  cutSetParticle->AddCut(cutEtaMCPart);
-  cutSetParticle->AddCut(cutDr);
-  cutSetParticle->SetCutScheme("cutPtMCPart&cutMcEta&cutDr");
-  
+
   // cut set definition for true pairs
   AliRsnCutSet *cutSetPairTrue = new AliRsnCutSet("truePairs");
   cutSetPairTrue->AddCut(cutTruePair);
   cutSetPairTrue->SetCutScheme("cutTrue");
-  
-  // define cut manager for all histos but true pairs
-  AliRsnCutMgr *cutMgr = new AliRsnCutMgr("standard", "Standard cuts");
-  cutMgr->SetCutSet(AliRsnCut::kParticle, cutSetParticle);
-  
+
   // define cut manager for true pairs
   AliRsnCutMgr *cutMgrTrue = new AliRsnCutMgr("true", "True pairs");
-  cutMgrTrue->SetCutSet(AliRsnCut::kParticle, cutSetParticle);
   cutMgrTrue->SetCutSet(AliRsnCut::kPair, cutSetPairTrue);
-  
-  // define cut for mixing
-  AliRsnCut *cutMult = new AliRsnCut("cutM", "", AliRsnCut::kMultiplicityDifference, 0, 10);
-  AliRsnCut *cutVz = new AliRsnCut("cutV", "", AliRsnCut::kVzDifference, 0.0, 3.0);
-  AliRsnCutSet *cutMixing = new AliRsnCutSet("");
-  cutMixing->AddCut(cutMult);
-  cutMixing->AddCut(cutVz);
-  cutMixing->SetCutScheme("cutM&cutV");
-    
+
   // add cuts to pair analysis
-  pairUnlike_NoPID_Signal->SetCutMgr(cutMgr);
   pairUnlike_NoPID_True->SetCutMgr(cutMgrTrue);
-  pairUnlike_NoPID_Mix->SetCutMgr(cutMgr);
-  pairLikePP_NoPID->SetCutMgr(cutMgr);
-  pairLikeMM_NoPID->SetCutMgr(cutMgr);
-  
-  pairUnlike_PerfectPID_Signal->SetCutMgr(cutMgr);
   pairUnlike_PerfectPID_True->SetCutMgr(cutMgrTrue);
-  pairUnlike_PerfectPID_Mix->SetCutMgr(cutMgr);
-  pairLikePP_PerfectPID->SetCutMgr(cutMgr);
-  pairLikeMM_PerfectPID->SetCutMgr(cutMgr);
-  
-  pairUnlike_RealisticPID_Signal->SetCutMgr(cutMgr);
   pairUnlike_RealisticPID_True->SetCutMgr(cutMgrTrue);
-  pairUnlike_RealisticPID_Mix->SetCutMgr(cutMgr);
-  pairLikePP_RealisticPID->SetCutMgr(cutMgr);
-  pairLikeMM_RealisticPID->SetCutMgr(cutMgr);
-  
-  pairUnlike_NoPID_Mix->SetMixingCut(cutMixing);
-  pairUnlike_PerfectPID_Mix->SetMixingCut(cutMixing);
-  pairUnlike_RealisticPID_Mix->SetMixingCut(cutMixing);
-  
+
   // =========== END CUTS ==============
 
   // =========== FUNCTIONS ==============
@@ -145,45 +102,39 @@ AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
   // define histogram templates
   AliRsnHistoDef *hdIM  = new AliRsnHistoDef(800, 0.0, 2.0);     // invmass
   AliRsnHistoDef *hdRES = new AliRsnHistoDef(200, -10.0, 10.0);  // resolution
-  AliRsnHistoDef *hdPt  = new AliRsnHistoDef(10, 0.0, 10.0);     // pt distribution
-  
+
   // functions
   AliRsnFunction *fcnIM  = new AliRsnFunction(AliRsnFunction::kInvMass, hdIM);      // invmass
   AliRsnFunction *fcnRES = new AliRsnFunction(AliRsnFunction::kResolution, hdRES);    // IM resolution
-  AliRsnFunction *fcnPt  = new AliRsnFunction(AliRsnFunction::kPtSpectrum, hdPt);     // pt spectrum
-  
+
   // uncomment these lines when doing analysis in momentum bins
   // in this case, take care of the dimension and values in the template array
   Double_t mom[7] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0};
   fcnIM->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
   fcnRES->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
-  
+
   pairUnlike_NoPID_Signal->AddFunction(fcnIM);
   pairUnlike_NoPID_True->AddFunction(fcnIM);
   pairUnlike_NoPID_Mix->AddFunction(fcnIM);
   pairLikePP_NoPID->AddFunction(fcnIM);
   pairLikeMM_NoPID->AddFunction(fcnIM);
-  
+
   pairUnlike_PerfectPID_Signal->AddFunction(fcnIM);
   pairUnlike_PerfectPID_True->AddFunction(fcnIM);
   pairUnlike_PerfectPID_Mix->AddFunction(fcnIM);
   pairLikePP_PerfectPID->AddFunction(fcnIM);
   pairLikeMM_PerfectPID->AddFunction(fcnIM);
-  
+
   pairUnlike_RealisticPID_Signal->AddFunction(fcnIM);
   pairUnlike_RealisticPID_True->AddFunction(fcnIM);
   pairUnlike_RealisticPID_Mix->AddFunction(fcnIM);
   pairLikePP_RealisticPID->AddFunction(fcnIM);
   pairLikeMM_RealisticPID->AddFunction(fcnIM);
-  
+
   pairUnlike_NoPID_Signal->AddFunction(fcnRES);
   pairUnlike_PerfectPID_Signal->AddFunction(fcnRES);
   pairUnlike_RealisticPID_Signal->AddFunction(fcnRES);
-  
-  pairUnlike_NoPID_True->AddFunction(fcnPt);
-  pairUnlike_PerfectPID_True->AddFunction(fcnPt);
-  pairUnlike_RealisticPID_True->AddFunction(fcnPt);
-  
+
   // =========== END FUNCTIONS =============
 
   if (boolUseNoPID) {
@@ -193,7 +144,7 @@ AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
     pairMgr->AddPair(pairLikePP_NoPID);
     pairMgr->AddPair(pairLikeMM_NoPID);
   }
-  
+
   if (boolUsePerfectPID) {
     pairMgr->AddPair(pairUnlike_PerfectPID_Signal);
     pairMgr->AddPair(pairUnlike_PerfectPID_True);
@@ -201,7 +152,7 @@ AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
     pairMgr->AddPair(pairLikePP_PerfectPID);
     pairMgr->AddPair(pairLikeMM_PerfectPID);
   }
-  
+
   if (boolUseRealisticPID) {
     pairMgr->AddPair(pairUnlike_RealisticPID_Signal);
     pairMgr->AddPair(pairUnlike_RealisticPID_True);