]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskExtractCascade.cxx
AliCoverity warnings fixed. Removed unused variables and added null check for vertex.
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskExtractCascade.cxx
index 230ee862bd0c2daa6f146948fa9f03b9f03cd5c1..9567689a3fa51420c94934709de7ce601195cda7 100644 (file)
 // ROOT object to store the candidates, plus a couple of histograms filled on
 // a per-event basis for storing variables too numerous to put in a tree. 
 //
-// --- Adapted to look for lambdas as well, using code from 
-//        AliAnalysisTaskCheckPerformanceStrange.cxx
 //
 //  --- Algorithm Description 
 //   1. Loop over primaries in stack to acquire generated charged Xi
-//   2. Loop over stack to find V0s, fill TH3Fs "PrimRawPt"s for Efficiency
+//   2. Loop over stack to find Cascades, fill TH3Fs "PrimRawPt"s for Efficiency
 //   3. Perform Physics Selection
 //   4. Perform Primary Vertex |z|<10cm selection
-//   5. Perform Primary Vertex NoTPCOnly vertexing selection (>0 contrib.)
+//   5. Perform Primary Vertex NoTPCOnly vertexing selection
 //   6. Perform Pileup Rejection
 //   7. Analysis Loops: 
 //    7a. Fill TH3Fs "PrimAnalysisPt" for control purposes only
-//    7b. Fill TTree object with V0 information, candidates
 //
 //  Please Report Any Bugs! 
 //
@@ -80,6 +77,9 @@ class AliAODv0;
 #include "AliMCEvent.h"
 #include "AliStack.h"
 
+#include "AliV0vertexer.h"
+#include "AliCascadeVertexer.h"
+
 #include "AliCFContainer.h"
 #include "AliMultiplicity.h"
 #include "AliAODMCParticle.h"
@@ -87,6 +87,7 @@ class AliAODv0;
 #include "AliAODcascade.h"
 #include "AliESDUtils.h"
 #include "AliGenEventHeader.h"
+#include "AliAnalysisUtils.h"
 
 #include "AliAnalysisTaskExtractCascade.h"
 
@@ -96,9 +97,59 @@ using std::endl;
 ClassImp(AliAnalysisTaskExtractCascade)
 
 AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade() 
-  : AliAnalysisTaskSE(), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0),
+  : AliAnalysisTaskSE(), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
    fkIsNuclear   ( kFALSE ), 
-   fkLowEnergyPP ( kFALSE ),
+   fkSwitchINT7  ( kFALSE ),
+   fCentralityEstimator("V0M"),
+   fkpAVertexSelection( kFALSE ),
+   fEtaRefMult ( 0.5 ),
+//------------------------------------------------
+// Tree Variables
+//------------------------------------------------
+
+   fTreeCascVarCharge(0),
+   fTreeCascVarMassAsXi(0),
+   fTreeCascVarMassAsOmega(0),
+   fTreeCascVarPt(0),
+   fTreeCascVarPtMC(0),
+   fTreeCascVarRapMC(0),
+   fTreeCascVarRapXi(0),
+   fTreeCascVarRapOmega(0),
+   fTreeCascVarNegEta(0),
+   fTreeCascVarPosEta(0),
+   fTreeCascVarBachEta(0),
+   fTreeCascVarDCACascDaughters(0),
+   fTreeCascVarDCABachToPrimVtx(0),
+   fTreeCascVarDCAV0Daughters(0),
+   fTreeCascVarDCAV0ToPrimVtx(0),
+   fTreeCascVarDCAPosToPrimVtx(0),
+   fTreeCascVarDCANegToPrimVtx(0),
+   fTreeCascVarCascCosPointingAngle(0),
+   fTreeCascVarCascRadius(0),
+   fTreeCascVarV0Mass(0),
+   fTreeCascVarV0CosPointingAngle(0),
+   fTreeCascVarV0Radius(0),
+   fTreeCascVarLeastNbrClusters(0),
+   fTreeCascVarMultiplicity(0),
+   fTreeCascVarMultiplicityV0A(0),
+   fTreeCascVarMultiplicityZNA(0),
+   fTreeCascVarMultiplicityTRK(0),
+   fTreeCascVarMultiplicitySPD(0),
+   fTreeCascVarDistOverTotMom(0),
+   fTreeCascVarPID(0),
+   fTreeCascVarPIDBachelor(0),
+   fTreeCascVarPIDNegative(0),
+   fTreeCascVarPIDPositive(0),
+   fTreeCascVarPosTransMom(0),
+   fTreeCascVarNegTransMom(0),
+   fTreeCascVarPosTransMomMC(0),
+   fTreeCascVarNegTransMomMC(0),
+   fTreeCascVarNegNSigmaPion(0),
+   fTreeCascVarNegNSigmaProton(0),
+   fTreeCascVarPosNSigmaPion(0),
+   fTreeCascVarPosNSigmaProton(0),
+   fTreeCascVarBachNSigmaPion(0),
+   fTreeCascVarBachNSigmaKaon(0),
 
 //------------------------------------------------
 // HISTOGRAMS
@@ -114,6 +165,35 @@ AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade()
    fHistMultiplicity(0),
    fHistMultiplicityNoTPCOnly(0),
    fHistMultiplicityNoTPCOnlyNoPileup(0),
+
+//V0A Centrality
+fHistMultiplicityV0ABeforeTrigSel(0),
+fHistMultiplicityV0AForTrigEvt(0),
+fHistMultiplicityV0A(0),
+fHistMultiplicityV0ANoTPCOnly(0),
+fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
+
+//ZNA Centrality
+fHistMultiplicityZNABeforeTrigSel(0),
+fHistMultiplicityZNAForTrigEvt(0),
+fHistMultiplicityZNA(0),
+fHistMultiplicityZNANoTPCOnly(0),
+fHistMultiplicityZNANoTPCOnlyNoPileup(0),
+
+//TRK Centrality
+fHistMultiplicityTRKBeforeTrigSel(0),
+fHistMultiplicityTRKForTrigEvt(0),
+fHistMultiplicityTRK(0),
+fHistMultiplicityTRKNoTPCOnly(0),
+fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
+
+//SPD Centrality
+fHistMultiplicitySPDBeforeTrigSel(0),
+fHistMultiplicitySPDForTrigEvt(0),
+fHistMultiplicitySPD(0),
+fHistMultiplicitySPDNoTPCOnly(0),
+fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
+
    fHistPVx(0),
    fHistPVy(0),
    fHistPVz(0),
@@ -125,10 +205,60 @@ AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade()
 }
 
 AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade(const char *name) 
-  : AliAnalysisTaskSE(name), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0),
+  : AliAnalysisTaskSE(name), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
    fkIsNuclear   ( kFALSE ), 
-   fkLowEnergyPP ( kFALSE ),
-     
+   fkSwitchINT7  ( kFALSE ),
+   fCentralityEstimator("V0M"),
+   fkpAVertexSelection( kFALSE ),
+   fEtaRefMult ( 0.5 ),
+//------------------------------------------------
+// Tree Variables
+//------------------------------------------------
+
+   fTreeCascVarCharge(0),
+   fTreeCascVarMassAsXi(0),
+   fTreeCascVarMassAsOmega(0),
+   fTreeCascVarPt(0),
+   fTreeCascVarPtMC(0),
+   fTreeCascVarRapMC(0),
+   fTreeCascVarRapXi(0),
+   fTreeCascVarRapOmega(0),
+   fTreeCascVarNegEta(0),
+   fTreeCascVarPosEta(0),
+   fTreeCascVarBachEta(0),
+   fTreeCascVarDCACascDaughters(0),
+   fTreeCascVarDCABachToPrimVtx(0),
+   fTreeCascVarDCAV0Daughters(0),
+   fTreeCascVarDCAV0ToPrimVtx(0),
+   fTreeCascVarDCAPosToPrimVtx(0),
+   fTreeCascVarDCANegToPrimVtx(0),
+   fTreeCascVarCascCosPointingAngle(0),
+   fTreeCascVarCascRadius(0),
+   fTreeCascVarV0Mass(0),
+   fTreeCascVarV0CosPointingAngle(0),
+   fTreeCascVarV0Radius(0),
+   fTreeCascVarLeastNbrClusters(0),
+   fTreeCascVarMultiplicity(0),
+   fTreeCascVarMultiplicityV0A(0),
+   fTreeCascVarMultiplicityZNA(0),
+   fTreeCascVarMultiplicityTRK(0),
+   fTreeCascVarMultiplicitySPD(0),
+   fTreeCascVarDistOverTotMom(0),
+   fTreeCascVarPID(0),
+   fTreeCascVarPIDBachelor(0),
+   fTreeCascVarPIDNegative(0),
+   fTreeCascVarPIDPositive(0),
+   fTreeCascVarPosTransMom(0),
+   fTreeCascVarNegTransMom(0),
+   fTreeCascVarPosTransMomMC(0),
+   fTreeCascVarNegTransMomMC(0),
+   fTreeCascVarNegNSigmaPion(0),
+   fTreeCascVarNegNSigmaProton(0),
+   fTreeCascVarPosNSigmaPion(0),
+   fTreeCascVarPosNSigmaProton(0),
+   fTreeCascVarBachNSigmaPion(0),
+   fTreeCascVarBachNSigmaKaon(0),
+
 //------------------------------------------------
 // HISTOGRAMS
 // --- Filled on an Event-by-event basis
@@ -143,6 +273,35 @@ AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade(const char *name)
    fHistMultiplicity(0),
    fHistMultiplicityNoTPCOnly(0),
    fHistMultiplicityNoTPCOnlyNoPileup(0),
+
+//V0A Centrality
+fHistMultiplicityV0ABeforeTrigSel(0),
+fHistMultiplicityV0AForTrigEvt(0),
+fHistMultiplicityV0A(0),
+fHistMultiplicityV0ANoTPCOnly(0),
+fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
+
+//ZNA Centrality
+fHistMultiplicityZNABeforeTrigSel(0),
+fHistMultiplicityZNAForTrigEvt(0),
+fHistMultiplicityZNA(0),
+fHistMultiplicityZNANoTPCOnly(0),
+fHistMultiplicityZNANoTPCOnlyNoPileup(0),
+
+//TRK Centrality
+fHistMultiplicityTRKBeforeTrigSel(0),
+fHistMultiplicityTRKForTrigEvt(0),
+fHistMultiplicityTRK(0),
+fHistMultiplicityTRKNoTPCOnly(0),
+fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
+
+//SPD Centrality
+fHistMultiplicitySPDBeforeTrigSel(0),
+fHistMultiplicitySPDForTrigEvt(0),
+fHistMultiplicitySPD(0),
+fHistMultiplicitySPDNoTPCOnly(0),
+fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
+
    fHistPVx(0),
    fHistPVy(0),
    fHistPVz(0),
@@ -151,6 +310,28 @@ AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade(const char *name)
    fHistPVzAnalysis(0)
 {
    // Constructor
+
+   //Set Variables for re-running the cascade vertexers (as done for MS paper)
+        
+        // New Loose : 1st step for the 7 TeV pp analysis
+        /*
+        fV0Sels[0] =  33.  ;  // max allowed chi2
+        fV0Sels[1] =   0.02;  // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
+        fV0Sels[2] =   0.02;  // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
+        fV0Sels[3] =   2.0 ;  // max allowed DCA between the daughter tracks       (LHC09a4 : 0.5)
+        fV0Sels[4] =   0.95;  // min allowed cosine of V0's pointing angle         (LHC09a4 : 0.99)
+        fV0Sels[5] =   1.0 ;  // min radius of the fiducial volume                 (LHC09a4 : 0.2)
+        fV0Sels[6] = 100.  ;  // max radius of the fiducial volume                 (LHC09a4 : 100.0)
+        
+        fCascSels[0] =  33.   ;  // max allowed chi2 (same as PDC07)
+        fCascSels[1] =   0.05 ;  // min allowed V0 impact parameter                    (PDC07 : 0.05   / LHC09a4 : 0.025 )
+        fCascSels[2] =   0.010;  // "window" around the Lambda mass                    (PDC07 : 0.008  / LHC09a4 : 0.010 )
+        fCascSels[3] =   0.03 ;  // min allowed bachelor's impact parameter            (PDC07 : 0.035  / LHC09a4 : 0.025 )
+        fCascSels[4] =   2.0  ;  // max allowed DCA between the V0 and the bachelor    (PDC07 : 0.1    / LHC09a4 : 0.2   )
+        fCascSels[5] =   0.95 ;  // min allowed cosine of the cascade pointing angle   (PDC07 : 0.9985 / LHC09a4 : 0.998 )
+        fCascSels[6] =   0.4  ;  // min radius of the fiducial volume                  (PDC07 : 0.9    / LHC09a4 : 0.2   )
+        fCascSels[7] = 100.   ;  // max radius of the fiducial volume                  (PDC07 : 100    / LHC09a4 : 100   )
+        */
    // Output slot #0 writes into a TList container (Cascade)
    DefineOutput(1, TList::Class());
    DefineOutput(2, TTree::Class());
@@ -176,6 +357,10 @@ AliAnalysisTaskExtractCascade::~AliAnalysisTaskExtractCascade()
     delete fESDtrackCuts;
     fESDtrackCuts = 0x0; 
   }
+  if (fUtils){
+    delete fUtils;
+    fUtils = 0x0;
+  }
 
 }
 
@@ -222,6 +407,10 @@ void AliAnalysisTaskExtractCascade::UserCreateOutputObjects()
 /*21*/         fTreeCascade->Branch("fTreeCascVarLeastNbrClusters",&fTreeCascVarLeastNbrClusters,"fTreeCascVarLeastNbrClusters/I");
 //-----------MULTIPLICITY-INFO--------------------
 /*22*/         fTreeCascade->Branch("fTreeCascVarMultiplicity",&fTreeCascVarMultiplicity,"fTreeCascVarMultiplicity/I");
+/*22*/         fTreeCascade->Branch("fTreeCascVarMultiplicityV0A",&fTreeCascVarMultiplicityV0A,"fTreeCascVarMultiplicityV0A/I");
+/*22*/         fTreeCascade->Branch("fTreeCascVarMultiplicityZNA",&fTreeCascVarMultiplicityZNA,"fTreeCascVarMultiplicityZNA/I");
+/*22*/         fTreeCascade->Branch("fTreeCascVarMultiplicityTRK",&fTreeCascVarMultiplicityTRK,"fTreeCascVarMultiplicityTRK/I");
+/*22*/         fTreeCascade->Branch("fTreeCascVarMultiplicitySPD",&fTreeCascVarMultiplicitySPD,"fTreeCascVarMultiplicitySPD/I");
 //-----------DECAY-LENGTH-INFO--------------------
 /*23*/         fTreeCascade->Branch("fTreeCascVarDistOverTotMom",&fTreeCascVarDistOverTotMom,"fTreeCascVarDistOverTotMom/F");
 //------------------------------------------------
@@ -242,9 +431,12 @@ void AliAnalysisTaskExtractCascade::UserCreateOutputObjects()
 
 // Multiplicity 
 
-    if(! fESDtrackCuts ){
-          fESDtrackCuts = new AliESDtrackCuts();
-    }
+  if(! fESDtrackCuts ){
+    fESDtrackCuts = new AliESDtrackCuts();
+  }
+  if(! fUtils ){
+    fUtils = new AliAnalysisUtils();
+  }
 
 //------------------------------------------------
 // V0 Multiplicity Histograms
@@ -324,6 +516,136 @@ void AliAnalysisTaskExtractCascade::UserCreateOutputObjects()
          200, 0, 200);                 
       fListHist->Add(fHistMultiplicityNoTPCOnlyNoPileup);
    }
+  
+  
+  //V0A Centrality (if PbPb / pPb)
+  if(! fHistMultiplicityV0ABeforeTrigSel) {
+    fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
+                                                 "Centrality Distribution: V0A;V0A Centrality;Events",
+                                                 200, 0, 200);
+    fListHist->Add(fHistMultiplicityV0ABeforeTrigSel);
+  }
+  if(! fHistMultiplicityV0AForTrigEvt) {
+    fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
+                                              "Centrality Distribution: V0A;V0A Centrality;Events",
+                                              200, 0, 200);
+    fListHist->Add(fHistMultiplicityV0AForTrigEvt);
+  }
+  if(! fHistMultiplicityV0A) {
+    fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
+                                    "Centrality Distribution: V0A;V0A Centrality;Events",
+                                    200, 0, 200);
+    fListHist->Add(fHistMultiplicityV0A);
+  }
+  if(! fHistMultiplicityV0ANoTPCOnly) {
+    fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
+                                             "Centrality Distribution: V0A;V0A Centrality;Events",
+                                             200, 0, 200);
+    fListHist->Add(fHistMultiplicityV0ANoTPCOnly);
+  }
+  if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
+    fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: V0A;V0A Centrality;Events",
+                                                     200, 0, 200);
+    fListHist->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
+  }
+  
+  //ZNA Centrality (if PbPb / pPb)
+  if(! fHistMultiplicityZNABeforeTrigSel) {
+    fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
+                                                 "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                                 200, 0, 200);
+    fListHist->Add(fHistMultiplicityZNABeforeTrigSel);
+  }
+  if(! fHistMultiplicityZNAForTrigEvt) {
+    fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
+                                              "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                              200, 0, 200);
+    fListHist->Add(fHistMultiplicityZNAForTrigEvt);
+  }
+  if(! fHistMultiplicityZNA) {
+    fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
+                                    "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                    200, 0, 200);
+    fListHist->Add(fHistMultiplicityZNA);
+  }
+  if(! fHistMultiplicityZNANoTPCOnly) {
+    fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
+                                             "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                             200, 0, 200);
+    fListHist->Add(fHistMultiplicityZNANoTPCOnly);
+  }
+  if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
+    fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                                     200, 0, 200);
+    fListHist->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
+  }
+  
+  //TRK Centrality (if PbPb / pPb)
+  if(! fHistMultiplicityTRKBeforeTrigSel) {
+    fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
+                                                 "Centrality Distribution: TRK;TRK Centrality;Events",
+                                                 200, 0, 200);
+    fListHist->Add(fHistMultiplicityTRKBeforeTrigSel);
+  }
+  if(! fHistMultiplicityTRKForTrigEvt) {
+    fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
+                                              "Centrality Distribution: TRK;TRK Centrality;Events",
+                                              200, 0, 200);
+    fListHist->Add(fHistMultiplicityTRKForTrigEvt);
+  }
+  if(! fHistMultiplicityTRK) {
+    fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
+                                    "Centrality Distribution: TRK;TRK Centrality;Events",
+                                    200, 0, 200);
+    fListHist->Add(fHistMultiplicityTRK);
+  }
+  if(! fHistMultiplicityTRKNoTPCOnly) {
+    fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
+                                             "Centrality Distribution: TRK;TRK Centrality;Events",
+                                             200, 0, 200);
+    fListHist->Add(fHistMultiplicityTRKNoTPCOnly);
+  }
+  if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
+    fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: TRK;TRK Centrality;Events",
+                                                     200, 0, 200);
+    fListHist->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
+  }
+  
+  //SPD Centrality (if PbPb / pPb)
+  if(! fHistMultiplicitySPDBeforeTrigSel) {
+    fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
+                                                 "Centrality Distribution: SPD;SPD Centrality;Events",
+                                                 200, 0, 200);
+    fListHist->Add(fHistMultiplicitySPDBeforeTrigSel);
+  }
+  if(! fHistMultiplicitySPDForTrigEvt) {
+    fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
+                                              "Centrality Distribution: SPD;SPD Centrality;Events",
+                                              200, 0, 200);
+    fListHist->Add(fHistMultiplicitySPDForTrigEvt);
+  }
+  if(! fHistMultiplicitySPD) {
+    fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
+                                    "Centrality Distribution: SPD;SPD Centrality;Events",
+                                    200, 0, 200);
+    fListHist->Add(fHistMultiplicitySPD);
+  }
+  if(! fHistMultiplicitySPDNoTPCOnly) {
+    fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
+                                             "Centrality Distribution: SPD;SPD Centrality;Events",
+                                             200, 0, 200);
+    fListHist->Add(fHistMultiplicitySPDNoTPCOnly);
+  }
+  if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
+    fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: SPD;SPD Centrality;Events",
+                                                     200, 0, 200);
+    fListHist->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
+  }
+
 
 //----------------------------------
 // Primary Vertex Position Histos
@@ -414,17 +736,25 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
 //------------------------------------------------
   
    //REVISED multiplicity estimator after 'multiplicity day' (2011)
-   Int_t lMultiplicity = -100; 
+   Int_t lMultiplicity = -100;
+  Int_t lMultiplicityV0A = -100;
+  Int_t lMultiplicityZNA = -100;
+  Int_t lMultiplicityTRK = -100;
+  Int_t lMultiplicitySPD = -100;
 
    //testing purposes
-   if(fkIsNuclear == kFALSE) lMultiplicity =  fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
+   if(fkIsNuclear == kFALSE) lMultiplicity =  fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,  fEtaRefMult );
 
    //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
    //---> Warning: Experimental
    if(fkIsNuclear == kTRUE){ 
       AliCentrality* centrality;
       centrality = lESDevent->GetCentrality();
-      lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0M" ) ) );
+      lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
+      lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "V0A" ) ) );
+      lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "ZNA" ) ) );
+      lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "TRK" ) ) );
+      lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "CL1" ) ) );
       if (centrality->GetQuality()>1) {
         PostData(1, fListHist);
         PostData(2, fTreeCascade);
@@ -436,11 +766,19 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
    //---> pp case......: GetReferenceMultiplicity
    //---> Pb-Pb case...: Centrality by V0M
 
-   fTreeCascVarMultiplicity = lMultiplicity;
-
-   fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
-   fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
-        
+  fTreeCascVarMultiplicity = lMultiplicity;
+  fTreeCascVarMultiplicityV0A = lMultiplicityV0A;
+  fTreeCascVarMultiplicityZNA = lMultiplicityZNA;
+  fTreeCascVarMultiplicityTRK = lMultiplicityTRK;
+  fTreeCascVarMultiplicitySPD = lMultiplicitySPD;
+
+  fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
+  fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
+  fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
+  fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
+  fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
+  fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
+  
 //------------------------------------------------
 // Physics Selection
 //------------------------------------------------
@@ -449,12 +787,9 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
    Bool_t isSelected = 0;
    isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
 
-   //pp at 2.76TeV: special case, ignore FastOnly
-   if ( (fkLowEnergyPP == kTRUE) && (maskIsSelected& AliVEvent::kFastOnly) ){
-        PostData(1, fListHist);
-        PostData(2, fTreeCascade);
-      return;
-   } 
+   //pA triggering: CINT7
+   if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+
    //Standard Min-Bias Selection
    if ( ! isSelected ) { 
         PostData(1, fListHist);
@@ -462,6 +797,22 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
       return;
    }
 
+//------------------------------------------------
+// Rerun cascade vertexer! 
+//------------------------------------------------
+/*
+  lESDevent->ResetCascades();
+  lESDevent->ResetV0s();
+
+  AliV0vertexer lV0vtxer;
+  AliCascadeVertexer lCascVtxer;
+                
+  lV0vtxer.SetDefaultCuts(fV0Sels);
+  lCascVtxer.SetDefaultCuts(fCascSels);
+
+  lV0vtxer.Tracks2V0vertices(lESDevent);
+  lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
+*/
 //------------------------------------------------
 // After Trigger Selection
 //------------------------------------------------
@@ -471,6 +822,10 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
    //Set variable for filling tree afterwards!
    fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
    fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
+   fHistMultiplicityV0AForTrigEvt       ->Fill( lMultiplicityV0A  );
+   fHistMultiplicityZNAForTrigEvt       ->Fill( lMultiplicityZNA  );
+   fHistMultiplicityTRKForTrigEvt       ->Fill( lMultiplicityTRK  );
+   fHistMultiplicitySPDForTrigEvt       ->Fill( lMultiplicitySPD  );
 
 //------------------------------------------------
 // Getting: Primary Vertex + MagField Info
@@ -496,20 +851,62 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
    fHistPVy->Fill( lPrimaryVtxPosition[1] );
    fHistPVz->Fill( lPrimaryVtxPosition[2] );
 
-//------------------------------------------------
-// Primary Vertex Z position: SKIP
-//------------------------------------------------
-
-   if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 ) { 
-      AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !"); 
-        PostData(1, fListHist);
-        PostData(2, fTreeCascade);
-      return; 
-   }
-
-   lMagneticField = lESDevent->GetMagneticField( );
-   fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
-   fHistMultiplicity->Fill(lMultiplicity);
+  //------------------------------------------------
+  // Primary Vertex Requirements Section:
+  //  ---> pp and PbPb: Only requires |z|<10cm
+  //  ---> pPb: all requirements checked at this stage
+  //------------------------------------------------
+  
+  //Roberto's PV selection criteria, implemented 17th April 2013
+  
+  /* vertex selection */
+  Bool_t fHasVertex = kFALSE;
+  
+  const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
+  if (vertex->GetNContributors() < 1) {
+    vertex = lESDevent->GetPrimaryVertexSPD();
+    if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
+    else fHasVertex = kTRUE;
+    TString vtxTyp = vertex->GetTitle();
+    Double_t cov[6]={0};
+    vertex->GetCovarianceMatrix(cov);
+    Double_t zRes = TMath::Sqrt(cov[5]);
+    if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
+  }
+  else fHasVertex = kTRUE;
+  
+  //Is First event in chunk rejection: Still present!
+  if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
+    AliWarning("Pb / | PV does not satisfy selection criteria!");
+    PostData(1, fListHist);
+    PostData(2, fTreeCascade);
+    return;
+  }
+  
+  //Is First event in chunk rejection: Still present!
+  if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
+    AliWarning("Pb / | This is the first event in the chunk!");
+    PostData(1, fListHist);
+    PostData(2, fTreeCascade);
+    return;
+  }
+  
+  //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
+  if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
+    AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
+    PostData(1, fListHist);
+    PostData(2, fTreeCascade);
+    return;
+  }
+  
+  
+  lMagneticField = lESDevent->GetMagneticField( );
+  fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
+  fHistMultiplicity->Fill(lMultiplicity);
+  fHistMultiplicityV0A->Fill(lMultiplicityV0A);
+  fHistMultiplicityZNA->Fill(lMultiplicityZNA);
+  fHistMultiplicityTRK->Fill(lMultiplicityTRK);
+  fHistMultiplicitySPD->Fill(lMultiplicitySPD);
 
 //------------------------------------------------
 // SKIP: Events with well-established PVtx
@@ -517,7 +914,7 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
        
    const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
    const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
-   if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() ){
+   if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection==kFALSE ){
       AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
         PostData(1, fListHist);
         PostData(2, fTreeCascade);
@@ -525,6 +922,10 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
    }
    fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
    fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
+   fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
+   fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
+   fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
+   fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
 
 //------------------------------------------------
 // Pileup Rejection Studies
@@ -539,6 +940,10 @@ void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
    }
    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
    fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
+   fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
+   fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
+   fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
+   fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
 
    //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
    if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() )    ){