]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/LambdaK0/AliAnalysisTaskExtractV0.cxx
Add modifications for kFastOnly specifically in the case of MC, in case it is needed...
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0 / AliAnalysisTaskExtractV0.cxx
index db63212e7cb44d65cab111704d5b56757eb47a07..9254ec5fbbca682944dbb473824a7c0f19323b76 100644 (file)
@@ -91,9 +91,68 @@ ClassImp(AliAnalysisTaskExtractV0)
 
 AliAnalysisTaskExtractV0::AliAnalysisTaskExtractV0() 
   : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0),fESDtrackCuts(0),
-   fkIsNuclear   ( kFALSE ), 
-   fkLowEnergyPP ( kFALSE ),
-   fkUseOnTheFly ( kFALSE ),
+   fkIsNuclear     ( kFALSE ), 
+   fkSwitchINT7    ( kFALSE ),
+   fkUseOnTheFly   ( kFALSE ),
+   fkTakeAllTracks ( kFALSE ),
+   fCentralityEstimator("V0M"),
+   fkLightWeight   ( kFALSE ),
+   fkFastOnly      ( "" ),
+//------------------------------------------------
+// Initialize 
+       fTreeVariableChi2V0(0),
+       fTreeVariableDcaV0Daughters(0),
+       fTreeVariableDcaV0ToPrimVertex(0),
+       fTreeVariableDcaPosToPrimVertex(0),
+       fTreeVariableDcaNegToPrimVertex(0),
+       fTreeVariableV0CosineOfPointingAngle(0),
+       fTreeVariableV0Radius(0),
+       fTreeVariablePt(0),
+       fTreeVariableRapK0Short(0),
+       fTreeVariableRapLambda(0),
+       fTreeVariableInvMassK0s(0),
+       fTreeVariableInvMassLambda(0),
+       fTreeVariableInvMassAntiLambda(0),
+       fTreeVariableAlphaV0(0),
+       fTreeVariablePtArmV0(0),
+       fTreeVariableNegTotMomentum(0),
+       fTreeVariablePosTotMomentum(0),
+       fTreeVariableNegdEdxSig(0),
+       fTreeVariablePosdEdxSig(0),
+       fTreeVariableNegEta(0),
+       fTreeVariablePosEta(0),
+
+       fTreeVariableNSigmasPosProton(0),
+       fTreeVariableNSigmasPosPion(0),
+       fTreeVariableNSigmasNegProton(0),
+       fTreeVariableNSigmasNegPion(0),
+       
+       fTreeVariableDistOverTotMom(0),
+       fTreeVariableLeastNbrCrossedRows(0),
+       fTreeVariableLeastRatioCrossedRowsOverFindable(0),
+       fTreeVariableMultiplicity(0),
+       fTreeVariableMultiplicityV0A(0),
+       fTreeVariableMultiplicityZNA(0),
+       fTreeVariableMultiplicityTRK(0),
+       fTreeVariableMultiplicitySPD(0),
+  
+  fTreeVariableRunNumber(0),
+  fTreeVariableEventNumber(0),
+  
+  fTreeVariableV0x(0),
+  fTreeVariableV0y(0),
+  fTreeVariableV0z(0),
+
+  fTreeVariableV0Px(0),
+  fTreeVariableV0Py(0),
+  fTreeVariableV0Pz(0),
+
+  fTreeVariablePVx(0),
+  fTreeVariablePVy(0),
+  fTreeVariablePVz(0),
+
+  fTreeVariableNegTrackStatus(0),
+  fTreeVariablePosTrackStatus(0),
 
 //------------------------------------------------
 // HISTOGRAMS
@@ -110,6 +169,34 @@ AliAnalysisTaskExtractV0::AliAnalysisTaskExtractV0()
    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),
+
   //Raw Data for Vertex Z position estimator change
        f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
        f2dHistMultiplicityVsVertexZForTrigEvt(0),
@@ -130,10 +217,69 @@ AliAnalysisTaskExtractV0::AliAnalysisTaskExtractV0()
 
 AliAnalysisTaskExtractV0::AliAnalysisTaskExtractV0(const char *name) 
   : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0),fESDtrackCuts(0),
-   fkIsNuclear   ( kFALSE ), 
-   fkLowEnergyPP ( kFALSE ),
-   fkUseOnTheFly ( kFALSE ),
-     
+   fkIsNuclear     ( kFALSE ), 
+   fkSwitchINT7    ( kFALSE ),
+   fkUseOnTheFly   ( kFALSE ),
+   fkTakeAllTracks ( kFALSE ),
+   fCentralityEstimator("V0M"),
+   fkLightWeight   ( kFALSE ),
+   fkFastOnly      ( "" ),
+//------------------------------------------------
+// Initialize 
+       fTreeVariableChi2V0(0),
+       fTreeVariableDcaV0Daughters(0),
+       fTreeVariableDcaV0ToPrimVertex(0),
+       fTreeVariableDcaPosToPrimVertex(0),
+       fTreeVariableDcaNegToPrimVertex(0),
+       fTreeVariableV0CosineOfPointingAngle(0),
+       fTreeVariableV0Radius(0),
+       fTreeVariablePt(0),
+       fTreeVariableRapK0Short(0),
+       fTreeVariableRapLambda(0),
+       fTreeVariableInvMassK0s(0),
+       fTreeVariableInvMassLambda(0),
+       fTreeVariableInvMassAntiLambda(0),
+       fTreeVariableAlphaV0(0),
+       fTreeVariablePtArmV0(0),
+       fTreeVariableNegTotMomentum(0),
+       fTreeVariablePosTotMomentum(0),
+       fTreeVariableNegdEdxSig(0),
+       fTreeVariablePosdEdxSig(0),
+       fTreeVariableNegEta(0),
+       fTreeVariablePosEta(0),
+
+       fTreeVariableNSigmasPosProton(0),
+       fTreeVariableNSigmasPosPion(0),
+       fTreeVariableNSigmasNegProton(0),
+       fTreeVariableNSigmasNegPion(0),
+       
+       fTreeVariableDistOverTotMom(0),
+       fTreeVariableLeastNbrCrossedRows(0),
+       fTreeVariableLeastRatioCrossedRowsOverFindable(0),
+       fTreeVariableMultiplicity(0),
+  fTreeVariableMultiplicityV0A(0),
+  fTreeVariableMultiplicityZNA(0),
+  fTreeVariableMultiplicityTRK(0),
+  fTreeVariableMultiplicitySPD(0),
+
+  fTreeVariableRunNumber(0),
+  fTreeVariableEventNumber(0),
+  
+  fTreeVariableV0x(0),
+  fTreeVariableV0y(0),
+  fTreeVariableV0z(0),
+
+  fTreeVariableV0Px(0),
+  fTreeVariableV0Py(0),
+  fTreeVariableV0Pz(0),
+
+  fTreeVariablePVx(0),
+  fTreeVariablePVy(0),
+  fTreeVariablePVz(0),
+
+  fTreeVariableNegTrackStatus(0),
+  fTreeVariablePosTrackStatus(0),
+
 //------------------------------------------------
 // HISTOGRAMS
 // --- Filled on an Event-by-event basis
@@ -149,6 +295,35 @@ AliAnalysisTaskExtractV0::AliAnalysisTaskExtractV0(const char *name)
    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),
+
   //Raw Data for Vertex Z position estimator change
        f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
        f2dHistMultiplicityVsVertexZForTrigEvt(0),
@@ -228,6 +403,10 @@ void AliAnalysisTaskExtractV0::UserCreateOutputObjects()
 /*16*/ fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
 //-----------MULTIPLICITY-INFO--------------------
 /*17*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
+  /*17*/       fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
+  /*17*/       fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
+  /*17*/       fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
+  /*17*/       fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
 //------------------------------------------------
 /*18*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
 /*19*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
@@ -238,7 +417,25 @@ void AliAnalysisTaskExtractV0::UserCreateOutputObjects()
 /*24*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
 /*25*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
 /*26*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
-
+  
+  if( fkLightWeight == kFALSE ){
+//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info 
+        fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
+        fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
+        fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
+
+        fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
+        fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
+        fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
+
+        fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
+        fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
+        fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
+  
+        fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
+        fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
+  }
+  
 //------------------------------------------------
 // Particle Identification Setup
 //------------------------------------------------
@@ -304,6 +501,7 @@ void AliAnalysisTaskExtractV0::UserCreateOutputObjects()
 // Track Multiplicity Histograms
 //------------------------------------------------
 
+  //Default V0M Centrality (if PbPb) 
    if(! fHistMultiplicityBeforeTrigSel) {
       fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel", 
          "Tracks per event;Nbr of Tracks;Events", 
@@ -334,9 +532,135 @@ void AliAnalysisTaskExtractV0::UserCreateOutputObjects()
          200, 0, 200);                 
       fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
    }
-
-
-
+  
+  //V0A Centrality (if PbPb / pPb)
+  if(! fHistMultiplicityV0ABeforeTrigSel) {
+    fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
+                                              "Centrality Distribution: V0A;V0A Centrality;Events",
+                                              200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
+  }
+  if(! fHistMultiplicityV0AForTrigEvt) {
+    fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
+                                              "Centrality Distribution: V0A;V0A Centrality;Events",
+                                           200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
+  }
+  if(! fHistMultiplicityV0A) {
+    fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
+                                              "Centrality Distribution: V0A;V0A Centrality;Events",
+                                 200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityV0A);
+  }
+  if(! fHistMultiplicityV0ANoTPCOnly) {
+    fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
+                                              "Centrality Distribution: V0A;V0A Centrality;Events",
+                                          200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
+  }
+  if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
+    fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
+                                              "Centrality Distribution: V0A;V0A Centrality;Events",
+                                                  200, 0, 200);                
+    fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
+  }
+  
+  //ZNA Centrality (if PbPb / pPb)
+  if(! fHistMultiplicityZNABeforeTrigSel) {
+    fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
+                                                 "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                                 200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
+  }
+  if(! fHistMultiplicityZNAForTrigEvt) {
+    fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
+                                              "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                              200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
+  }
+  if(! fHistMultiplicityZNA) {
+    fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
+                                    "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                    200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityZNA);
+  }
+  if(! fHistMultiplicityZNANoTPCOnly) {
+    fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
+                                             "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                             200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
+  }
+  if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
+    fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: ZNA;ZNA Centrality;Events",
+                                                     200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
+  }
+  
+  //TRK Centrality (if PbPb / pPb)
+  if(! fHistMultiplicityTRKBeforeTrigSel) {
+    fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
+                                                 "Centrality Distribution: TRK;TRK Centrality;Events",
+                                                 200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
+  }
+  if(! fHistMultiplicityTRKForTrigEvt) {
+    fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
+                                              "Centrality Distribution: TRK;TRK Centrality;Events",
+                                              200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
+  }
+  if(! fHistMultiplicityTRK) {
+    fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
+                                    "Centrality Distribution: TRK;TRK Centrality;Events",
+                                    200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityTRK);
+  }
+  if(! fHistMultiplicityTRKNoTPCOnly) {
+    fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
+                                             "Centrality Distribution: TRK;TRK Centrality;Events",
+                                             200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
+  }
+  if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
+    fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: TRK;TRK Centrality;Events",
+                                                     200, 0, 200);
+    fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
+  }
+  
+  //SPD Centrality (if PbPb / pPb)
+  if(! fHistMultiplicitySPDBeforeTrigSel) {
+    fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
+                                                 "Centrality Distribution: SPD;SPD Centrality;Events",
+                                                 200, 0, 200);
+    fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
+  }
+  if(! fHistMultiplicitySPDForTrigEvt) {
+    fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
+                                              "Centrality Distribution: SPD;SPD Centrality;Events",
+                                              200, 0, 200);
+    fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
+  }
+  if(! fHistMultiplicitySPD) {
+    fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
+                                    "Centrality Distribution: SPD;SPD Centrality;Events",
+                                    200, 0, 200);
+    fListHistV0->Add(fHistMultiplicitySPD);
+  }
+  if(! fHistMultiplicitySPDNoTPCOnly) {
+    fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
+                                             "Centrality Distribution: SPD;SPD Centrality;Events",
+                                             200, 0, 200);
+    fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
+  }
+  if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
+    fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
+                                                     "Centrality Distribution: SPD;SPD Centrality;Events",
+                                                     200, 0, 200);
+    fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
+  }
+  
   //Raw Data for Vertex Z position estimator change
        //TH2F    *f2dHistMultiplicityVsVertexZBeforeTrigSel;           //! multiplicity distribution    
        //TH2F    *f2dHistMultiplicityVsVertexZForTrigEvt;                      //! multiplicity distribution
@@ -455,7 +779,11 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
         ((ULong64_t)lESDevent->GetBunchCrossNumber() )  );
 
    //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;
 
    if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
 
@@ -464,7 +792,11 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
    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(   "SPD" ) ) );
       if (centrality->GetQuality()>1) {
         PostData(1, fListHistV0);
         PostData(2, fTree);
@@ -475,32 +807,60 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
    //Set variable for filling tree afterwards!
    //---> pp case......: GetReferenceMultiplicity
    //---> Pb-Pb case...: Centrality by V0M
-   fTreeVariableMultiplicity = lMultiplicity;
-   fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
-   fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
+  fTreeVariableMultiplicity = lMultiplicity;
+  fTreeVariableMultiplicityV0A = lMultiplicityV0A;
+  fTreeVariableMultiplicityZNA = lMultiplicityZNA;
+  fTreeVariableMultiplicityTRK = lMultiplicityTRK;
+  fTreeVariableMultiplicitySPD = lMultiplicitySPD;
+  
+  fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
+  fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
+  fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
+  fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
+  fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
+  
+  fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
 
 //------------------------------------------------
 // Physics Selection
 //------------------------------------------------
-
-// new method        
-   UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
-   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, fListHistV0);
-      PostData(2, fTree);
-      return;
-   } 
-   //Standard Min-Bias Selection
-   if ( ! isSelected ) { 
-      PostData(1, fListHistV0);
-      PostData(2, fTree);
-      return;
-   }
-
+  
+  // new method
+  UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+  Bool_t isSelected = 0;
+  Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
+  isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+  
+  //pA triggering: CINT7
+  if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+  
+  //Extra selection applies if with/without SDD is to be dealth with
+  if( fkFastOnly == "kFastOnly"){
+    //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
+    isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
+  }
+  if( fkFastOnly == "NotkFastOnly"){
+    //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
+    isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
+  }
+  
+  //Standard Min-Bias Selection
+  if ( !isSelected ) {
+    PostData(1, fListHistV0);
+    PostData(2, fTree);
+    return;
+  }
+  //Check if goes through extra selections
+  //isSelectedExtra will be true in case -> fkFastOnly==""
+  //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly"    && bit kFastOnly ON
+  //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
+  if ( !isSelectedExtra ) {
+    PostData(1, fListHistV0);
+    PostData(2, fTree);
+    return;
+  }
+  
+  
 //------------------------------------------------
 // After Trigger Selection
 //------------------------------------------------
@@ -509,7 +869,11 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
 
   fHistV0MultiplicityForTrigEvt     ->Fill( nV0s       );
   fHistMultiplicityForTrigEvt       ->Fill( lMultiplicity  );
-
+  fHistMultiplicityV0AForTrigEvt       ->Fill( lMultiplicityV0A  );
+  fHistMultiplicityZNAForTrigEvt       ->Fill( lMultiplicityZNA  );
+  fHistMultiplicityTRKForTrigEvt       ->Fill( lMultiplicityTRK  );
+  fHistMultiplicitySPDForTrigEvt       ->Fill( lMultiplicitySPD  );
+  
 //------------------------------------------------
 // Getting: Primary Vertex + MagField Info
 //------------------------------------------------
@@ -549,9 +913,13 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
 
    f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
 
-   lMagneticField = lESDevent->GetMagneticField( );
-   fHistV0MultiplicityForSelEvt ->Fill( nV0s );
-   fHistMultiplicity->Fill(lMultiplicity);
+  lMagneticField = lESDevent->GetMagneticField( );
+  fHistV0MultiplicityForSelEvt ->Fill( nV0s );
+  fHistMultiplicity->Fill(lMultiplicity);
+  fHistMultiplicityV0A->Fill(lMultiplicityV0A);
+  fHistMultiplicityZNA->Fill(lMultiplicityZNA);
+  fHistMultiplicityTRK->Fill(lMultiplicityTRK);
+  fHistMultiplicitySPD->Fill(lMultiplicitySPD);
 
 //------------------------------------------------
 // Only look at events with well-established PV
@@ -568,8 +936,12 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
 
 
    f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
-   fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( nV0s );
-   fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
+  fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( nV0s );
+  fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
+  fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
+  fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
+  fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
+  fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
 
 //------------------------------------------------
 // Pileup Rejection
@@ -582,9 +954,13 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
       return;
    }
 
-   f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
-   fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( nV0s );
-   fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
+  f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
+  fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( nV0s );
+  fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
+  fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
+  fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
+  fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
+  fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
   
 //------------------------------------------------
 // MAIN LAMBDA LOOP STARTS HERE
@@ -596,6 +972,10 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
       fHistPVzAnalysis->Fill( tPrimaryVtxPosition[2] );
    }
 
+  fTreeVariablePVx = tPrimaryVtxPosition[0];
+  fTreeVariablePVy = tPrimaryVtxPosition[1];
+  fTreeVariablePVz = tPrimaryVtxPosition[2];
+
 //Variable definition
    Int_t    lOnFlyStatus = 0;// nv0sOn = 0, nv0sOff = 0;
    Double_t lChi2V0 = 0;
@@ -628,12 +1008,24 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
       if ( fkUseOnTheFly ) CheckChargeV0(v0); 
 
       Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]); 
+
       Double_t tV0mom[3];
       v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] ); 
       Double_t lV0TotalMomentum = TMath::Sqrt(
       tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] );
 
       lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
+
+      //Set Variables for later filling
+      fTreeVariableV0x = tDecayVertexV0[0];
+      fTreeVariableV0y = tDecayVertexV0[1];
+      fTreeVariableV0z = tDecayVertexV0[2];
+
+      //Set Variables for later filling
+      fTreeVariableV0Px = tV0mom[0];
+      fTreeVariableV0Py = tV0mom[1];
+      fTreeVariableV0Pz = tV0mom[2];
+
       lPt = v0->Pt();
       lRapK0Short = v0->RapK0Short();
       lRapLambda  = v0->RapLambda();
@@ -672,8 +1064,12 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
       // TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
       if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
       if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
-
-      if ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) ) continue;
+     
+      //Get status flags
+      fTreeVariablePosTrackStatus = pTrack->GetStatus();
+      fTreeVariableNegTrackStatus = nTrack->GetStatus();
+     
+      if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
        
       //GetKinkIndex condition
       if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
@@ -691,7 +1087,7 @@ void AliAnalysisTaskExtractV0::UserExec(Option_t *)
          fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
 
       //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
-      if ( fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8 ) continue;
+      if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
 
       //End track Quality Cuts
       //________________________________________________________________________