]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Moved Zvtx-histo position + possibility to run on the same train with different Zvtx...
authordelia <delia@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jan 2013 13:15:48 +0000 (13:15 +0000)
committerdelia <delia@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jan 2013 13:15:48 +0000 (13:15 +0000)
PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascadepp276.cxx
PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascadepp276.h
PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckPerformanceCascadepp276.cxx
PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckPerformanceCascadepp276.h
PWGLF/STRANGENESS/Cascades/macros/AddTaskCheckCascadepp276.C
PWGLF/STRANGENESS/Cascades/macros/AddTaskCheckPerformanceCascadepp276.C

index 799189a0740178059debe7b016140b6df965885b..f4e2447376c85f6ffad186dcef3b7a2af6ebc3cb 100644 (file)
@@ -130,16 +130,16 @@ AliAnalysisTaskCheckCascadepp276::AliAnalysisTaskCheckCascadepp276()
       fHistCascadeMultiplicityBeforeAnySel(0),
       fHistCascadeMultiplicityAfterSDDSel(0),
       fHistCascadeMultiplicityAfterPhysicsSel(0),
-      fHistCascadeMultiplicityAfterVertexCutSel(0),
       fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
       fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistCascadeMultiplicityAfterVertexCutSel(0),
       // Tracks multiplicity plots
       fHistTrackMultiplicityBeforeAnySel(0),
       fHistTrackMultiplicityAfterSDDSel(0),
       fHistTrackMultiplicityAfterPhysicsSel(0),
-      fHistTrackMultiplicityAfterVertexCutSel(0),
       fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
       fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistTrackMultiplicityAfterVertexCutSel(0),
       // Vertex position plots (BestVertex)
       fHistPVx(0), fHistPVy(0), fHistPVz(0),
       fHistPVxAnalysis(0), fHistPVyAnalysis(0), fHistPVzAnalysis(0),    
@@ -225,16 +225,16 @@ AliAnalysisTaskCheckCascadepp276::AliAnalysisTaskCheckCascadepp276(const char *n
       fHistCascadeMultiplicityBeforeAnySel(0),
       fHistCascadeMultiplicityAfterSDDSel(0),
       fHistCascadeMultiplicityAfterPhysicsSel(0),
-      fHistCascadeMultiplicityAfterVertexCutSel(0),
       fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
       fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistCascadeMultiplicityAfterVertexCutSel(0),
       // Tracks multiplicity plots
       fHistTrackMultiplicityBeforeAnySel(0),
       fHistTrackMultiplicityAfterSDDSel(0),
       fHistTrackMultiplicityAfterPhysicsSel(0),
-      fHistTrackMultiplicityAfterVertexCutSel(0),
       fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
       fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+      fHistTrackMultiplicityAfterVertexCutSel(0),
       // Vertex position plots (BestVertex)
       fHistPVx(0), fHistPVy(0), fHistPVz(0),
       fHistPVxAnalysis(0), fHistPVyAnalysis(0), fHistPVzAnalysis(0),
@@ -398,12 +398,6 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
                         50, 0, 50);
         fListHistCascade->Add(fHistCascadeMultiplicityAfterPhysicsSel);
  }
- if(! fHistCascadeMultiplicityAfterVertexCutSel) {
-        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",
-                        "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events",
-                        50, 0, 50);
-        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);
- }
  if(! fHistCascadeMultiplicityForSelEvtNoTPCOnly) {
         fHistCascadeMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnly",
                         "Cascades per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events",
@@ -416,6 +410,12 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
                         50, 0, 50);
         fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup);
  }
+ if(! fHistCascadeMultiplicityAfterVertexCutSel) {
+        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",
+                                                             "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events",
+                                                             50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);
+ }
  // - Tracks multiplicity plots 
  if(! fHistTrackMultiplicityBeforeAnySel) {
        fHistTrackMultiplicityBeforeAnySel = new TH1F("fHistTrackMultiplicityBeforeAnySel", 
@@ -435,12 +435,6 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
                         200, 0, 200);
         fListHistCascade->Add(fHistTrackMultiplicityAfterPhysicsSel);
  }
- if(! fHistTrackMultiplicityAfterVertexCutSel) {
-        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",
-                        "Tracks per event (after vertex cut selection);Nbr of Cascades/Evt;Events",
-                        200, 0, 200);
-        fListHistCascade->Add(fHistTrackMultiplicityAfterVertexCutSel);
- }
  if(! fHistTrackMultiplicityForSelEvtNoTPCOnly) {
         fHistTrackMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnly",
                         "Tracks per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events",
@@ -453,6 +447,12 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
                         200, 0, 200);
         fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
  }
+ if(! fHistTrackMultiplicityAfterVertexCutSel) {
+        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",
+                                                           "Tracks per event (after vertex cut selection);Nbr of Cascades/Evt;Events",
+                                                           200, 0, 200);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterVertexCutSel);
+ }
  // - Vertex position plots
  if(! fHistPVx ){
        fHistPVx = new TH1F("fHistPVx", "Best PV position in x; x (cm); Events", 2000, -0.5, 0.5);
@@ -691,7 +691,10 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
    lNbBinsPerVar[0] = 100;
    lNbBinsPerVar[1] = 800;
    lNbBinsPerVar[2] = 22;
-   fCFContCascadePIDXiMinus = new AliCFContainer("fCFContCascadePIDXiMinus","Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   if (fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar ); 
+   } else if (fkSDDSelectionOn) fCFContCascadePIDXiMinus = new AliCFContainer(Form("fCFContCascadePIDXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
      //Setting the bin limits 
    fCFContCascadePIDXiMinus->SetBinLimits(0,   0.0  ,  10.0 ); // Pt(Cascade)
    fCFContCascadePIDXiMinus->SetBinLimits(1,   1.2  ,   2.0 ); // Xi Effective mass
@@ -719,7 +722,10 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
    lNbBinsPerVar[0] = 100;
    lNbBinsPerVar[1] = 800;
    lNbBinsPerVar[2] = 22;
-   fCFContCascadePIDXiPlus = new AliCFContainer("fCFContCascadePIDXiPlus","Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   if (fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fkSDDSelectionOn) fCFContCascadePIDXiPlus = new AliCFContainer(Form("fCFContCascadePIDXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
      //Setting the bin limits 
    fCFContCascadePIDXiPlus->SetBinLimits(0,   0.0  ,  10.0 );  // Pt(Cascade)
    fCFContCascadePIDXiPlus->SetBinLimits(1,   1.2  ,   2.0 );  // Xi Effective mass
@@ -747,7 +753,10 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
    lNbBinsPerVar[0] = 100;
    lNbBinsPerVar[1] = 1000;
    lNbBinsPerVar[2] = 22;
-   fCFContCascadePIDOmegaMinus = new AliCFContainer("fCFContCascadePIDOmegaMinus","Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   if (fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fkSDDSelectionOn) fCFContCascadePIDOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
      //Setting the bin limits 
    fCFContCascadePIDOmegaMinus->SetBinLimits(0,   0.0  ,  10.0 );      // Pt(Cascade)
    fCFContCascadePIDOmegaMinus->SetBinLimits(1,   1.5  ,   2.5 );      // Omega Effective mass
@@ -775,7 +784,10 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
    lNbBinsPerVar[0] = 100;
    lNbBinsPerVar[1] = 1000;
    lNbBinsPerVar[2] = 22; 
-   fCFContCascadePIDOmegaPlus = new AliCFContainer("fCFContCascadePIDOmegaPlus","Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   if (fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+        else if (!fwithSDD) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+   } else if (fkSDDSelectionOn) fCFContCascadePIDOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
      //Setting the bin limits 
    fCFContCascadePIDOmegaPlus->SetBinLimits(0,   0.0  ,  10.0 );       // Pt(Cascade)
    fCFContCascadePIDOmegaPlus->SetBinLimits(1,   1.5  ,   2.5 );       // Omega Effective mass
@@ -821,7 +833,10 @@ void AliAnalysisTaskCheckCascadepp276::UserCreateOutputObjects() {
    lNbBinsPerVar[16] = 112;    //Proper lenght of cascade       
    lNbBinsPerVar[17] = 112;    //Proper lenght of V0
    lNbBinsPerVar[18] = 112;    //Distance V0-Xi in transverse plane
-   fCFContCascadeCuts = new AliCFContainer("fCFContCascadeCuts","Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+   if (fkSDDSelectionOn) {
+        if (fwithSDD) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDon",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+        else if (!fwithSDD) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_wSDDoff",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
+   } else if (fkSDDSelectionOn) fCFContCascadeCuts = new AliCFContainer(Form("fCFContCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f_woSDD",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar);
      //Setting the bin limits 
      //0 -  DcaXiDaughters
    Double_t *lBinLim0  = new Double_t[ lNbBinsPerVar[0] + 1 ];
@@ -950,8 +965,14 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
 
   ///////////////////
   // EVENT SELECTIONS
-  ///////////////////  
-               
+  ///////////////////
+  // In order:
+  // 1) SDD selection
+  // 2) Physics selection
+  // 3) Select only looking at events with well-established PV
+  // 4) Pileup selection
+  // 5) |Z| < 10 cm
+
   //----------------------
   // Before any selections
   //----------------------
@@ -1120,7 +1141,102 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
   // - Fill the plots
   fHistCascadeMultiplicityAfterPhysicsSel->Fill(ncascadesAfterPhysicsSel);
   fHistTrackMultiplicityAfterPhysicsSel->Fill(nTrackMultiplicityAfterPhysicsSel);
-  
+
+  //------------------------------
+  // Well-established PV selection
+  //------------------------------
+  // - Define variables
+  Int_t ncascadesForSelEvtNoTPCOnly = 0;
+  Int_t nTrackMultiplicityForSelEvtNoTPCOnly = 0;
+  // - Selection for ESD and AOD
+  if (fAnalysisType == "ESD") {
+      // - Vertex coordinates: get the PVs stored in the ESD found with tracks and SPD
+      const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
+      const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
+      // - Select only looking at events with well-established PV
+      if (fkQualityCutNoTPConlyPrimVtx) {
+          if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
+              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after TPConly selection
+      ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();
+      nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+  } else if (fAnalysisType == "AOD") {
+      // - Vertex coordinates: get the PVs stored in the AOD found with tracks and SPD
+      const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();
+      const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();
+      // - Select only looking at events with well-established PV
+      if (fkQualityCutNoTPConlyPrimVtx) {
+          if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {
+              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after TPConly selection
+      ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
+      nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME: I can't find the equivalent method for the AOD
+  }
+  // - Fill the plots
+  fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);
+  fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);
+    
+  //----------------
+  // Pilup selection
+  //----------------
+  // - Define variables
+  Int_t ncascadesForSelEvtNoTPCOnlyNoPileup = 0;
+  Int_t nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = 0;
+  // - Selection for ESD and AOD
+  if (fAnalysisType == "ESD") {
+      if (fkQualityCutPileup) {
+          if(lESDevent->IsPileupFromSPD()){
+              AliWarning("Pb / Pile-up event ... return!");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after Pileup selection
+      ncascadesForSelEvtNoTPCOnlyNoPileup = lESDevent->GetNumberOfCascades();
+      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+  } else if (fAnalysisType == "AOD") {
+      if (fkQualityCutPileup) {
+          if(lAODevent->IsPileupFromSPD()){
+              AliWarning("Pb / Pile-up event ... return!");
+              PostData(1, fListHistCascade);
+              PostData(2, fCFContCascadePIDXiMinus);
+              PostData(3, fCFContCascadePIDXiPlus);
+              PostData(4, fCFContCascadePIDOmegaMinus);
+              PostData(5, fCFContCascadePIDOmegaPlus);
+              PostData(6, fCFContCascadeCuts);
+              return;
+          }
+      }
+      // - Take the number of cascades and tracks after Pileup selection
+      ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();
+      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;   //FIXME: I can't find the equivalent method for the AOD
+  }
+  fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);
+  fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
+    
   //----------------------------------------------------
   // Vertex Z position selection (+ magnetic field info)
   //----------------------------------------------------
@@ -1218,117 +1334,25 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
   fHistCascadeMultiplicityAfterVertexCutSel->Fill(ncascadesAfterVertexSel);
   fHistTrackMultiplicityAfterVertexCutSel->Fill(nTrackMultiplicityAfterVertexSel);
 
-  //------------------------------
-  // Well-established PV selection
-  //------------------------------
-  // - Define variables
-  Int_t ncascadesForSelEvtNoTPCOnly = 0;
-  Int_t nTrackMultiplicityForSelEvtNoTPCOnly = 0;
-  // - Selection for ESD and AOD
-  if (fAnalysisType == "ESD") {
-      // - Vertex coordinates: get the PVs stored in the ESD found with tracks and SPD
-      const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
-      const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
-      // - Select only looking at events with well-established PV
-      if (fkQualityCutNoTPConlyPrimVtx) {
-          if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
-              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
-              PostData(1, fListHistCascade);
-              PostData(2, fCFContCascadePIDXiMinus);
-              PostData(3, fCFContCascadePIDXiPlus);
-              PostData(4, fCFContCascadePIDOmegaMinus);
-              PostData(5, fCFContCascadePIDOmegaPlus);
-              PostData(6, fCFContCascadeCuts);
-              return;
-          }
-      }
-      // - Take the number of cascades and tracks after TPConly selection
-      ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();
-      nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
-  } else if (fAnalysisType == "AOD") {
-      // - Vertex coordinates: get the PVs stored in the AOD found with tracks and SPD
-      const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();
-      const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();
-      // - Select only looking at events with well-established PV
-      if (fkQualityCutNoTPConlyPrimVtx) {
-          if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {
-              AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
-              PostData(1, fListHistCascade);
-              PostData(2, fCFContCascadePIDXiMinus);
-              PostData(3, fCFContCascadePIDXiPlus);
-              PostData(4, fCFContCascadePIDOmegaMinus);
-              PostData(5, fCFContCascadePIDOmegaPlus);
-              PostData(6, fCFContCascadeCuts);
-              return;
-          }
-      }
-      // - Take the number of cascades and tracks after TPConly selection
-      ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
-      nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME: I can't find the equivalent method for the AOD
-  }
-  // - Fill the plots
-  fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);
-  fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);
-
-  //----------------
-  // Pilup selection
-  //----------------
-  // - Define variables
-  Int_t ncascadesForSelEvtNoTPCOnlyNoPileup = 0;
-  Int_t nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = 0;
+  // - Vertex position plots: after any event selections
   tPrimaryVtxPosition[0] = -100.0;
   tPrimaryVtxPosition[1] = -100.0;
   tPrimaryVtxPosition[2] = -100.0;
-  // - Selection for ESD and AOD
   if (fAnalysisType == "ESD") {
-      if (fkQualityCutPileup) {
-          if(lESDevent->IsPileupFromSPD()){
-              AliWarning("Pb / Pile-up event ... return!");
-              PostData(1, fListHistCascade);
-              PostData(2, fCFContCascadePIDXiMinus);
-              PostData(3, fCFContCascadePIDXiPlus);
-              PostData(4, fCFContCascadePIDOmegaMinus);
-              PostData(5, fCFContCascadePIDOmegaPlus);
-              PostData(6, fCFContCascadeCuts);
-              return;
-           }
-      }
-      // - Take the number of cascades and tracks after Pileup selection
-      ncascadesForSelEvtNoTPCOnlyNoPileup = lESDevent->GetNumberOfCascades();
-      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
-      // - Take the vertex position after all selections
-      const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
-      tPrimaryVtxPosition[0] = primaryVtx->GetX();  
-      tPrimaryVtxPosition[1] = primaryVtx->GetY();
-      tPrimaryVtxPosition[2] = primaryVtx->GetZ();
+       const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
+       tPrimaryVtxPosition[0] = primaryVtx->GetX();
+       tPrimaryVtxPosition[1] = primaryVtx->GetY();
+       tPrimaryVtxPosition[2] = primaryVtx->GetZ();
   } else if (fAnalysisType == "AOD") {
-      if (fkQualityCutPileup) {
-          if(lAODevent->IsPileupFromSPD()){
-              AliWarning("Pb / Pile-up event ... return!");
-              PostData(1, fListHistCascade);
-              PostData(2, fCFContCascadePIDXiMinus);
-              PostData(3, fCFContCascadePIDXiPlus);
-              PostData(4, fCFContCascadePIDOmegaMinus);
-              PostData(5, fCFContCascadePIDOmegaPlus);
-              PostData(6, fCFContCascadeCuts);
-              return;
-           }
-      }
-      // - Take the number of cascades and tracks after Pileup selection
-      ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();
-      nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;   //FIXME: I can't find the equivalent method for the AOD
-      // - Take the vertex position after all selections
-      const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();
-      tPrimaryVtxPosition[0] = primaryVtx->GetX();
-      tPrimaryVtxPosition[1] = primaryVtx->GetY();
-      tPrimaryVtxPosition[2] = primaryVtx->GetZ();
+       const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();
+       tPrimaryVtxPosition[0] = primaryVtx->GetX();
+       tPrimaryVtxPosition[1] = primaryVtx->GetY();
+       tPrimaryVtxPosition[2] = primaryVtx->GetZ();
   }
-  // - Fill the plots
   fHistPVxAnalysis->Fill( tPrimaryVtxPosition[0] );
   fHistPVyAnalysis->Fill( tPrimaryVtxPosition[1] );
   fHistPVzAnalysis->Fill( tPrimaryVtxPosition[2] );
-  fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);
-  fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);  
+  
 
 
   //////////////////////////////
@@ -1411,6 +1435,8 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
       Double_t lBachMomZ       = 0.;
       Double_t lBachTransvMom  = 0.;
       Double_t lBachTotMom     = 0.;
+      Double_t lpTrackTransvMom  = 0.;
+      Double_t lnTrackTransvMom  = 0.;
       Short_t  lChargeXi       = -2;
       Double_t lV0toXiCosineOfPointingAngle = 0.;
       Double_t lRapXi   = -20.0, lRapOmega = -20.0, lEta = -20.0, lTheta = 360., lPhi = 720.;
@@ -1605,6 +1631,8 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
            xi->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );
            lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
            lBachTotMom     = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
+           lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );
+           lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );
            lChargeXi       = xi->Charge();
            lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
            lRapXi    = xi->RapXi();
@@ -1748,6 +1776,12 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
            lBachMomZ = xi->MomBachZ();         
            lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
            lBachTotMom    = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
+           lV0NMomX = xi->MomNegX();
+           lV0NMomY = xi->MomNegY();
+           lV0PMomX = xi->MomPosX();
+           lV0PMomY = xi->MomPosY();
+           lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );
+           lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );
            lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
            lRapXi    = xi->RapXi();
            lRapOmega = xi->RapOmega();
@@ -1759,6 +1793,17 @@ void AliAnalysisTaskCheckCascadepp276::UserExec(Option_t *) {
 
     } // end of AOD treatment
 
+    // Cut on pt of the three daughter tracks
+    if (lBachTransvMom<fMinPtCutOnDaughterTracks) continue;
+    if (lpTrackTransvMom<fMinPtCutOnDaughterTracks) continue;
+    if (lnTrackTransvMom<fMinPtCutOnDaughterTracks) continue;
+      
+    // Cut on pseudorapidity of the three daughter tracks
+    if (TMath::Abs(etaBach)>fEtaCutOnDaughterTracks) continue;
+    if (TMath::Abs(etaPos)>fEtaCutOnDaughterTracks) continue;
+    if (TMath::Abs(etaNeg)>fEtaCutOnDaughterTracks) continue;
+      
+      
     //----------------------------------
     // Calculate proper lenght for cascade
     Double_t cascadeMass = 0.;
index e1ce31ecf0173793ab89d56239d312a1bac3131e..ad6650f6f38812279d272d327d1909e66d7e28e0 100644 (file)
 //                   Origin:  AliAnalysisTaskESDCheckV0 by Boris Hippolyte Nov2007, hippolyt@in2p3.fr
 //                2. Prepare the plots which stand as raw material for yield extraction (wi/wo PID)
 //                3. Supply an AliCFContainer meant to define the optimised topological selections
-//                4. Rough azimuthal correlation study (Eta, Phi)
 //                Adapted to Cascade : A.Maire Mar2008, antonin.maire@ires.in2p3.fr
 //                Modified :           A.Maire Mar2010, antonin.maire@ires.in2p3.fr
 //                Modified for PbPb analysis: M. Nicassio Feb 2011, maria.nicassio@ba.infn.it
-//                Modified for pp2.76 analysis: D. Colella Feb2012, domenico.colella@ba.infn.it
+//                Modified for pp@2.76 analysis: D. Colella Feb2012, domenico.colella@ba.infn.it
 //-----------------------------------------------------------------
 
 class TList;
@@ -42,11 +41,6 @@ class AliAnalysisTaskCheckCascadepp276 : public AliAnalysisTaskSE {
   
   virtual void   UserCreateOutputObjects();
   virtual void   UserExec(Option_t *option);
-  /*void   DoAngularCorrelation(const Char_t   *lCascType, 
-                                           Double_t  lInvMassCascade, 
-                                           const Int_t    *lArrTrackID,
-                                           TVector3 &lTVect3MomXi, 
-                                           Double_t  lEtaXi);*/
   virtual Int_t  DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent);
          //virtual Int_t  Tracks2V0vertices(AliESDEvent *event);  
          //virtual Int_t  V0sTracks2CascadeVertices(AliESDEvent *event); 
@@ -58,21 +52,21 @@ class AliAnalysisTaskCheckCascadepp276 : public AliAnalysisTaskSE {
          //virtual Double_t PropagateToDCA(AliESDv0 *vtx,AliExternalTrackParam *trk,Double_t b);
   virtual void   Terminate(Option_t *);
   
-  void SetAnalysisType               (const char* analysisType          = "ESD") { fAnalysisType                = analysisType;               }
-  void SetRelaunchV0CascVertexers    (Bool_t rerunV0CascVertexers       = 0    ) { fkRerunV0CascVertexers       = rerunV0CascVertexers;       }
-  void SetSDDSelection               (Bool_t sddOnSelection             = kTRUE) { fkSDDSelectionOn             = sddOnSelection;             }
-  void SetQualityCutZprimVtxPos      (Bool_t qualityCutZprimVtxPos      = kTRUE) { fkQualityCutZprimVtxPos      = qualityCutZprimVtxPos;      }
-  void SetQualityCutNoTPConlyPrimVtx (Bool_t qualityCutNoTPConlyPrimVtx = kTRUE) { fkQualityCutNoTPConlyPrimVtx = qualityCutNoTPConlyPrimVtx; }
-  void SetQualityCutTPCrefit         (Bool_t qualityCutTPCrefit         = kTRUE) { fkQualityCutTPCrefit         = qualityCutTPCrefit;         }
-  void SetQualityCutnTPCcls          (Bool_t qualityCutnTPCcls          = kTRUE) { fkQualityCutnTPCcls          = qualityCutnTPCcls;          }
-  void SetQualityCutPileup           (Bool_t qualityCutPileup           = kTRUE) { fkQualityCutPileup           = qualityCutPileup;           }
-  void SetWithSDDOn                  (Bool_t withsddOn                  = kTRUE) { fwithSDD                     = withsddOn;                  }
-  void SetQualityCutMinnTPCcls       (Int_t  minnTPCcls                 = 70   ) { fMinnTPCcls                  = minnTPCcls;                 }
-  void SetExtraSelections            (Bool_t extraSelections            = 0    ) { fkExtraSelections            = extraSelections;            }
-  void SetVertexRange                (Float_t vtxrange                  = 0.   ) { fVtxRange                    = vtxrange;                   }
-  void SetVertexRangeMin             (Float_t vtxrangemin               = 0.   ) { fVtxRangeMin                 = vtxrangemin;                }
-  void SetMinptCutOnDaughterTracks   (Float_t minptdaughtrks            = 0.   ) { fMinPtCutOnDaughterTracks    = minptdaughtrks;             }
-  void SetEtaCutOnDaughterTracks     (Float_t etadaughtrks              = 0.   ) { fEtaCutOnDaughterTracks      = etadaughtrks;               }
+  void SetAnalysisType               (const char* analysisType          = "ESD"  ) { fAnalysisType                = analysisType;               }
+  void SetRelaunchV0CascVertexers    (Bool_t rerunV0CascVertexers       = kFALSE ) { fkRerunV0CascVertexers       = rerunV0CascVertexers;       }
+  void SetSDDSelection               (Bool_t sddOnSelection             = kTRUE  ) { fkSDDSelectionOn             = sddOnSelection;             }
+  void SetQualityCutZprimVtxPos      (Bool_t qualityCutZprimVtxPos      = kTRUE  ) { fkQualityCutZprimVtxPos      = qualityCutZprimVtxPos;      }
+  void SetQualityCutNoTPConlyPrimVtx (Bool_t qualityCutNoTPConlyPrimVtx = kTRUE  ) { fkQualityCutNoTPConlyPrimVtx = qualityCutNoTPConlyPrimVtx; }
+  void SetQualityCutTPCrefit         (Bool_t qualityCutTPCrefit         = kTRUE  ) { fkQualityCutTPCrefit         = qualityCutTPCrefit;         }
+  void SetQualityCutnTPCcls          (Bool_t qualityCutnTPCcls          = kTRUE  ) { fkQualityCutnTPCcls          = qualityCutnTPCcls;          }
+  void SetQualityCutPileup           (Bool_t qualityCutPileup           = kTRUE  ) { fkQualityCutPileup           = qualityCutPileup;           }
+  void SetWithSDDOn                  (Bool_t withsddOn                  = kTRUE  ) { fwithSDD                     = withsddOn;                  }
+  void SetQualityCutMinnTPCcls       (Int_t  minnTPCcls                 = 70     ) { fMinnTPCcls                  = minnTPCcls;                 }
+  void SetExtraSelections            (Bool_t extraSelections            = kFALSE ) { fkExtraSelections            = extraSelections;            }
+  void SetVertexRange                (Float_t vtxrange                  = 10.0   ) { fVtxRange                    = vtxrange;                   }
+  void SetVertexRangeMin             (Float_t vtxrangemin               = 0.   ) { fVtxRangeMin                 = vtxrangemin;                }
+  void SetMinptCutOnDaughterTracks   (Float_t minptdaughtrks            = 0.   ) { fMinPtCutOnDaughterTracks    = minptdaughtrks;             }
+  void SetEtaCutOnDaughterTracks     (Float_t etadaughtrks              = 0.   ) { fEtaCutOnDaughterTracks      = etadaughtrks;               }
 
  private:
         // Note : In ROOT, "//!" means "do not stream the data from Master node to Worker node" ...
@@ -108,16 +102,16 @@ class AliAnalysisTaskCheckCascadepp276 : public AliAnalysisTaskSE {
         TH1F   *fHistCascadeMultiplicityBeforeAnySel;                 //! Cascade multiplicity distribution before any evnt selection 
         TH1F   *fHistCascadeMultiplicityAfterSDDSel;                  //! Cascade multiplicity distribution after evnt selection on the SDD
         TH1F   *fHistCascadeMultiplicityAfterPhysicsSel;              //! Cascade multiplicity distribution after evnt Physics Selection  
-        TH1F   *fHistCascadeMultiplicityAfterVertexCutSel;            //! Cascade multiplicity distribution after evnt selection on the Z vertex position cut
         TH1F   *fHistCascadeMultiplicityForSelEvtNoTPCOnly;           //! Cascade multiplicity distribution after evnt noTPCOnly selection
         TH1F   *fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup;   //! Cascade multiplicity distribution after evnt PileUp selection
+        TH1F   *fHistCascadeMultiplicityAfterVertexCutSel;            //! Cascade multiplicity distribution after evnt selection on the Z vertex position cut
         // Tracks multiplicity plots
         TH1F   *fHistTrackMultiplicityBeforeAnySel;                   //! Track multiplicity distribution before any evnt selection  
         TH1F   *fHistTrackMultiplicityAfterSDDSel;                    //! Track multiplicity distribution after evnt selection on the SDD
         TH1F   *fHistTrackMultiplicityAfterPhysicsSel;                //! Track multiplicity distribution after evnt Physics Selection
-        TH1F   *fHistTrackMultiplicityAfterVertexCutSel;              //! Track multiplicity distribution after evnt selection on the Z vertex position cut
         TH1F   *fHistTrackMultiplicityForSelEvtNoTPCOnly;             //! Track multiplicity distribution after evnt noTPCOnly selection
         TH1F   *fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup;     //! Track multiplicity distributionafter evnt PileUp selection
+        TH1F   *fHistTrackMultiplicityAfterVertexCutSel;              //! Track multiplicity distribution after evnt selection on the Z vertex position cut
         // Vertex position plots (BestVertex)
         TH1F   *fHistPVx;                                             //! Best primary vertex X position distribution after all evnt selection
         TH1F   *fHistPVy;                                             //! Best primary vertex Y position distribution after all evnt selection
@@ -180,11 +174,11 @@ class AliAnalysisTaskCheckCascadepp276 : public AliAnalysisTaskSE {
         TH2F   *f2dHistDcaV0DaughtersXivsInvMass;                     //! cut variables vs inv. mass 
         TH2F   *f2dHistDcaV0ToPrimVertexXivsInvMass;                  //! cut variables vs inv. mass 
         // Containers for cuts study 
-       AliCFContainer  *fCFContCascadePIDXiMinus;                       //! for Xi-   : Container to store any 3D histos with the different PID flavours
-       AliCFContainer  *fCFContCascadePIDXiPlus;                        //! for Xi+   : Container to store any 3D histos with the different PID flavours
-       AliCFContainer  *fCFContCascadePIDOmegaMinus;                    //! for Omega-: Container to store any 3D histos with the different PID flavours
-       AliCFContainer  *fCFContCascadePIDOmegaPlus;                     //! for Omega+: Container to store any 3D histos with the different PID flavours
-       AliCFContainer  *fCFContCascadeCuts;                             //! Container meant to store all the relevant distributions corresponding to the cut variables
+        AliCFContainer  *fCFContCascadePIDXiMinus;                       //! for Xi-   : Container to store any 3D histos with the different PID flavours
+        AliCFContainer  *fCFContCascadePIDXiPlus;                        //! for Xi+   : Container to store any 3D histos with the different PID flavours
+        AliCFContainer  *fCFContCascadePIDOmegaMinus;                    //! for Omega-: Container to store any 3D histos with the different PID flavours
+        AliCFContainer  *fCFContCascadePIDOmegaPlus;                     //! for Omega+: Container to store any 3D histos with the different PID flavours
+        AliCFContainer  *fCFContCascadeCuts;                             //! Container meant to store all the relevant distributions corresponding to the cut variables
 
 
   AliAnalysisTaskCheckCascadepp276(const AliAnalysisTaskCheckCascadepp276&);            // not implemented
index b228863fde8e84f0c96be55a99169406adc0cad6..be45ef3f54959818ca4c736e6104fa7d8c7faaf6 100644 (file)
@@ -121,9 +121,9 @@ AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCasc
     fHistCascadeMultiplicityBeforeAnySel(0),
     fHistCascadeMultiplicityAfterSDDSel(0),
     fHistCascadeMultiplicityAfterPhysicsSel(0),
-    fHistCascadeMultiplicityAfterVertexCutSel(0),
     fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
     fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistCascadeMultiplicityAfterVertexCutSel(0),
     fHistnXiPlusPerEvTot(0),                  // After any event selections, in all the eta and pt range
     fHistnXiMinusPerEvTot(0),                 // After any event selections, in all the eta and pt range
     fHistnOmegaPlusPerEvTot(0),               // After any event selections, in all the eta and pt range
@@ -140,14 +140,14 @@ AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCasc
     fHistTrackMultiplicityBeforeAnySel(0),
     fHistTrackMultiplicityAfterSDDSel(0),
     fHistTrackMultiplicityAfterPhysicsSel(0),
-    fHistTrackMultiplicityAfterVertexCutSel(0),
     fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
     fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistTrackMultiplicityAfterVertexCutSel(0),
     // Vertex position plots (BestVertex)
-    fHistPVx(0),                              // After SDD and Physics event selectione but before any other event selections
-    fHistPVy(0),                              // After SDD and Physics event selectione but before any other event selections
-    fHistPVz(0),                              // After SDD and Physics event selectione but before any other event selections
-    fHistPVxAnalysis(0),                      // After any event selections 
+    fHistPVx(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVy(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVz(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVxAnalysis(0),                      // After any event selections
     fHistPVyAnalysis(0),                      // After any event selections
     fHistPVzAnalysis(0),                      // After any event selections
     // - Plots before Physics Selection
@@ -319,9 +319,9 @@ AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCasc
     fHistCascadeMultiplicityBeforeAnySel(0),
     fHistCascadeMultiplicityAfterSDDSel(0),
     fHistCascadeMultiplicityAfterPhysicsSel(0),
-    fHistCascadeMultiplicityAfterVertexCutSel(0),
     fHistCascadeMultiplicityForSelEvtNoTPCOnly(0),
     fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistCascadeMultiplicityAfterVertexCutSel(0),
     fHistnXiPlusPerEvTot(0),                  // After any event selections, in all the eta and pt range
     fHistnXiMinusPerEvTot(0),                 // After any event selections, in all the eta and pt range
     fHistnOmegaPlusPerEvTot(0),               // After any event selections, in all the eta and pt range
@@ -338,25 +338,25 @@ AliAnalysisTaskCheckPerformanceCascadepp276::AliAnalysisTaskCheckPerformanceCasc
     fHistTrackMultiplicityBeforeAnySel(0),
     fHistTrackMultiplicityAfterSDDSel(0),
     fHistTrackMultiplicityAfterPhysicsSel(0),
-    fHistTrackMultiplicityAfterVertexCutSel(0),
     fHistTrackMultiplicityForSelEvtNoTPCOnly(0),
     fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+    fHistTrackMultiplicityAfterVertexCutSel(0),
     // Vertex position plots (BestVertex)
-    fHistPVx(0),                              // After SDD and Physics event selectione but before any other event selections
-    fHistPVy(0),                              // After SDD and Physics event selectione but before any other event selections
-    fHistPVz(0),                              // After SDD and Physics event selectione but before any other event selections
-    fHistPVxAnalysis(0),                      // After any event selections 
+    fHistPVx(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVy(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVz(0),                              // After any selections but before |Z| < 10 cm
+    fHistPVxAnalysis(0),                      // After any event selections
     fHistPVyAnalysis(0),                      // After any event selections
     fHistPVzAnalysis(0),                      // After any event selections
     // - Plots before Physics Selection
-    f3dHistGenPtVsGenYvsNtracksXiMinus(0),    // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenctauvsYXiMinus(0),       // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenYvsNtracksXiPlus(0),     // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenctauvsYXiPlus(0),        // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenYvsNtracksOmegaMinus(0), // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenctauvsYOmegaMinus(0),    // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenYvsNtracksOmegaPlus(0),  // After the SDD event selection (For efficinecy calculation)
-    f3dHistGenPtVsGenctauvsYOmegaPlus(0),     // After the SDD event selection (For efficinecy calculation)
+    f3dHistGenPtVsGenYvsNtracksXiMinus(0),    // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYXiMinus(0),       // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenYvsNtracksXiPlus(0),     // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYXiPlus(0),        // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenYvsNtracksOmegaMinus(0), // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYOmegaMinus(0),    // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenYvsNtracksOmegaPlus(0),  // After the SDD event selection (For efficiency calculation)
+    f3dHistGenPtVsGenctauvsYOmegaPlus(0),     // After the SDD event selection (For efficiency calculation)
     // - Generated cascade plots
     // After all the event selections 
     //Xi-
@@ -581,11 +581,6 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
                         "Cascades per event (after physics selection);Nbr of Cascades/Evt;Events", 50, 0, 50);
         fListHistCascade->Add(fHistCascadeMultiplicityAfterPhysicsSel);
    }
-   if(! fHistCascadeMultiplicityAfterVertexCutSel) {
-        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",
-                        "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events", 50, 0, 50);
-        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);
-   }
    if(! fHistCascadeMultiplicityForSelEvtNoTPCOnly) {
         fHistCascadeMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistCascadeMultiplicityForSelEvtNoTPCOnly",
                         "Cascades per event (for selected events with well-established PV);Nbr of Cascades/Evt;Events", 50, 0, 50);
@@ -596,6 +591,11 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
                         "Cascades per event (for selected events with well-establisched PV and no pile-up);Nbr of Cascades/Evt;Events", 50, 0, 50);
         fListHistCascade->Add(fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup);
    }
+   if(! fHistCascadeMultiplicityAfterVertexCutSel) {
+        fHistCascadeMultiplicityAfterVertexCutSel = new TH1F("fHistCascadeMultiplicityAfterVertexCutSel",
+                                                             "Cascades per event (after vertex cut selection);Nbr of Cascades/Evt;Events", 50, 0, 50);
+        fListHistCascade->Add(fHistCascadeMultiplicityAfterVertexCutSel);
+   }
    // - Tracks multiplicity plots 
    if(! fHistTrackMultiplicityBeforeAnySel) {
         fHistTrackMultiplicityBeforeAnySel = new TH1F("fHistTrackMultiplicityBeforeAnySel",
@@ -612,11 +612,6 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
                         "Tracks per event (after physics selection);Nbr of Tracks/Evt;Events", 200, 0, 200);
         fListHistCascade->Add(fHistTrackMultiplicityAfterPhysicsSel);
    }
-   if(! fHistTrackMultiplicityAfterVertexCutSel) {
-        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",
-                        "Tracks per event (after vertex cut selection);Nbr of Tracks/Evt;Events", 200, 0, 200);
-        fListHistCascade->Add(fHistTrackMultiplicityAfterVertexCutSel);
-   }
    if(! fHistTrackMultiplicityForSelEvtNoTPCOnly) {
         fHistTrackMultiplicityForSelEvtNoTPCOnly = new TH1F("fHistTrackMultiplicityForSelEvtNoTPCOnly",
                         "Tracks per event (for selected events with well-established PV);Nbr of Tracks/Evt;Events", 200, 0, 200);
@@ -627,6 +622,11 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
                         "Tracks per event (for selected events with well-establisched PV and no pile-up);Nbr of Tracks/Evt;Events", 200, 0, 200);
         fListHistCascade->Add(fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
    }
+   if(! fHistTrackMultiplicityAfterVertexCutSel) {
+        fHistTrackMultiplicityAfterVertexCutSel = new TH1F("fHistTrackMultiplicityAfterVertexCutSel",
+                                                           "Tracks per event (after vertex cut selection);Nbr of Tracks/Evt;Events", 200, 0, 200);
+        fListHistCascade->Add(fHistTrackMultiplicityAfterVertexCutSel);
+   }
    // - Vertex position plots
    if(! fHistPVx ){
         fHistPVx = new TH1F("fHistPVx", "Best PV position in x; x (cm); Events", 2000, -0.5, 0.5);
@@ -1159,7 +1159,7 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
      lNbBinsPerVar[0] = 100;
      lNbBinsPerVar[1] = 800;
      lNbBinsPerVar[2] = 22;
-     fCFContCascadePIDAsXiMinus = new AliCFContainer("fCFContCascadePIDAsXiMinus","Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+     fCFContCascadePIDAsXiMinus = new AliCFContainer(Form("fCFContCascadePIDAsXiMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
        //Setting the bin limits 
      fCFContCascadePIDAsXiMinus->SetBinLimits(0,   0.0  ,  10.0 );     // Pt(Cascade)
      fCFContCascadePIDAsXiMinus->SetBinLimits(1,   1.2  ,   2.0 );     // Xi Effective mass
@@ -1187,7 +1187,7 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
      lNbBinsPerVar[0] = 100;
      lNbBinsPerVar[1] = 800;
      lNbBinsPerVar[2] = 22;
-     fCFContCascadePIDAsXiPlus = new AliCFContainer("fCFContCascadePIDAsXiPlus","Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
+     fCFContCascadePIDAsXiPlus = new AliCFContainer(Form("fCFContCascadePIDAsXiPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
        //Setting the bin limits (valid  for v4-18-10-AN)
      fCFContCascadePIDAsXiPlus->SetBinLimits(0,   0.0  ,  10.0 );      // Pt(Cascade)
      fCFContCascadePIDAsXiPlus->SetBinLimits(1,   1.2  ,   2.0 );      // Xi Effective mass
@@ -1215,7 +1215,7 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
      lNbBinsPerVar[0] = 100;
      lNbBinsPerVar[1] = 1000;
      lNbBinsPerVar[2] = 22;
-     fCFContCascadePIDAsOmegaMinus = new AliCFContainer("fCFContCascadePIDAsOmegaMinus","Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+     fCFContCascadePIDAsOmegaMinus = new AliCFContainer(Form("fCFContCascadePIDAsOmegaMinus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
        //Setting the bin limits 
      fCFContCascadePIDAsOmegaMinus->SetBinLimits(0,   0.0  ,  10.0 );  // Pt(Cascade)
      fCFContCascadePIDAsOmegaMinus->SetBinLimits(1,   1.5  ,   2.5 );  // Omega Effective mass
@@ -1243,7 +1243,7 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
      lNbBinsPerVar[0] = 100;
      lNbBinsPerVar[1] = 1000;
      lNbBinsPerVar[2] = 22;  
-     fCFContCascadePIDAsOmegaPlus = new AliCFContainer("fCFContCascadePIDAsOmegaPlus","Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
+     fCFContCascadePIDAsOmegaPlus = new AliCFContainer(Form("fCFContCascadePIDAsOmegaPlus_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
        //Setting the bin limits 
      fCFContCascadePIDAsOmegaPlus->SetBinLimits(0,   0.0  ,  10.0 );   // Pt(Cascade)
      fCFContCascadePIDAsOmegaPlus->SetBinLimits(1,   1.5  ,   2.5 );   // Omega Effective mass
@@ -1289,7 +1289,7 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserCreateOutputObjects() {
      lNbBinsPerVar[16] = 112;  //Proper lenght of cascade
      lNbBinsPerVar[17] = 112;  //Proper lenght of V0 
      lNbBinsPerVar[18] = 112;  //Distance V0-Xi in the transverse plane  
-     fCFContAsCascadeCuts = new AliCFContainer("fCFContAsCascadeCuts","Cut Container for Asso. Cascades", lNbSteps, lNbVariables, lNbBinsPerVar );
+     fCFContAsCascadeCuts = new AliCFContainer(Form("fCFContAsCascadeCuts_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",fMinnTPCcls,fVtxRange,fVtxRangeMin,fMinPtCutOnDaughterTracks,fEtaCutOnDaughterTracks),"Cut Container for Asso. Cascades", lNbSteps, lNbVariables, lNbBinsPerVar );
        //Setting the bin limits 
        //0 - DcaCascDaughters
      Double_t *lBinLim0 = new Double_t[ lNbBinsPerVar[0]+1 ];
@@ -1424,8 +1424,14 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
 
   //////////////////   
   // Event selection   
-  ////////////////// 
-               
+  //////////////////
+  // In order:
+  // 1) SDD selection
+  // 2) Physics selection
+  // 3) Select only looking at events with well-established PV
+  // 4) Pileup selection
+  // 5) |Z| < 10 cm
+    
    //---------------------------------------------------------
    // Load the InputEvent and check it (for the ESD and AOD)
    if (fAnalysisType == "ESD") {
@@ -1473,7 +1479,6 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
        return;
    }
 
-
    //------------------------------
    // - Plots Before any selections
    //------------------------------
@@ -1698,6 +1703,96 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
    fHistCascadeMultiplicityAfterPhysicsSel->Fill(ncascadesAfterPhysicsSel);
    fHistTrackMultiplicityAfterPhysicsSel->Fill(nTrackMultiplicityAfterPhysicsSel);
 
+   //-------------------------------------------------------
+   // Select only looking at events with well-established PV
+   //-------------------------------------------------------
+   Int_t    ncascadesForSelEvtNoTPCOnly                  = -1; //number of cascades after the TPConly selection
+   Int_t    nTrackMultiplicityForSelEvtNoTPCOnly         = -1; //number of tracks after the TPConly selection
+   if (fAnalysisType == "ESD" ) {
+       // - Select only looking at events with well-established PV
+       if (fkQualityCutNoTPConlyPrimVtx) {
+           const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
+           const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks();
+           if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingVtx->GetStatus() ){
+               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               return;
+           }
+       }
+       // - Take the number of cascades and tracks after TPConly selection
+       ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();
+       nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+   } else if (fAnalysisType == "AOD") {
+       // - Select only looking at events with well-established PV
+       if (fkQualityCutNoTPConlyPrimVtx) {
+           const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();
+           const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();
+           if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {
+               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               return;
+           }
+       }
+       // - Take the number of cascades and tracks after TPConly selection
+       ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME
+   }
+   fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);
+   fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);
+    
+   //-----------------
+   // Pileup selection
+   //-----------------
+   Int_t    ncascadesForSelEvtNoTPCOnlyNoPileup          = -1; //number of cascades after the NoPileup selection
+   Int_t    nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -1; //number of tracks after the Pileup selection
+   if (fAnalysisType == "ESD" ) {
+       // - Selection for pile up
+       if (fkRejectEventPileUp) {
+           if(lESDevent->IsPileupFromSPD()){
+               AliWarning("Pb / Pile-up event ... return!");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               return;
+           }
+       }
+       // - Take the number of cascades and tracks after Pileup selection
+       ncascadesForSelEvtNoTPCOnlyNoPileup = lESDevent->GetNumberOfCascades();
+       nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
+   } else if (fAnalysisType == "AOD") {
+       // - Selection for pile up
+       if (fkRejectEventPileUp) {
+           if(lAODevent->IsPileupFromSPD()){
+               AliWarning("Pb / Pile-up event ... return!");
+               PostData(1, fListHistCascade);
+               PostData(2, fCFContCascadePIDAsXiMinus);
+               PostData(3, fCFContCascadePIDAsXiPlus);
+               PostData(4, fCFContCascadePIDAsOmegaMinus);
+               PostData(5, fCFContCascadePIDAsOmegaPlus);
+               PostData(6, fCFContAsCascadeCuts);
+               return;
+           }
+       }
+       // - Take the number of cascades and tracks after Pileup selection
+       ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();
+       nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;
+   }
+   fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);
+   fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
+    
    //-------------------
    // - Vertex selection 
    //-------------------
@@ -1791,113 +1886,25 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
    fHistCascadeMultiplicityAfterVertexCutSel->Fill(ncascadesAfterVertexSel);
    fHistTrackMultiplicityAfterVertexCutSel->Fill(nTrackMultiplicityAfterVertexSel);
 
-   //-------------------------------------------------------
-   // Select only looking at events with well-established PV
-   //-------------------------------------------------------
-   Int_t    ncascadesForSelEvtNoTPCOnly                  = -1; //number of cascades after the TPConly selection
-   Int_t    nTrackMultiplicityForSelEvtNoTPCOnly         = -1; //number of tracks after the TPConly selection
-   if (fAnalysisType == "ESD" ) {
-       // - Select only looking at events with well-established PV
-       if (fkQualityCutNoTPConlyPrimVtx) {
-       const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
-       const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks(); 
-           if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingVtx->GetStatus() ){
-               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
-               PostData(1, fListHistCascade);
-               PostData(2, fCFContCascadePIDAsXiMinus);
-               PostData(3, fCFContCascadePIDAsXiPlus);
-               PostData(4, fCFContCascadePIDAsOmegaMinus);
-               PostData(5, fCFContCascadePIDAsOmegaPlus);
-               PostData(6, fCFContAsCascadeCuts);
-               return;
-           }
-       }
-       // - Take the number of cascades and tracks after TPConly selection
-       ncascadesForSelEvtNoTPCOnly = lESDevent->GetNumberOfCascades();
-       nTrackMultiplicityForSelEvtNoTPCOnly = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
-   } else if (fAnalysisType == "AOD") {
-       // - Select only looking at events with well-established PV
-       if (fkQualityCutNoTPConlyPrimVtx) {
-           const AliAODVertex *lPrimarySPDVtx = lAODevent->GetPrimaryVertexSPD();
-           const AliAODVertex *lPrimaryTrackingAODVtx = lAODevent->GetPrimaryVertex();
-           if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtx) {
-               AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
-               PostData(1, fListHistCascade);
-               PostData(2, fCFContCascadePIDAsXiMinus);
-               PostData(3, fCFContCascadePIDAsXiPlus);
-               PostData(4, fCFContCascadePIDAsOmegaMinus);
-               PostData(5, fCFContCascadePIDAsOmegaPlus);
-               PostData(6, fCFContAsCascadeCuts);
-               return;
-           }
-       }
-       // - Take the number of cascades and tracks after TPConly selection
-       ncascadesForSelEvtNoTPCOnly = lAODevent->GetNumberOfCascades();
-       nTrackMultiplicityForSelEvtNoTPCOnly = -100;  //FIXME
-   }
-   fHistCascadeMultiplicityForSelEvtNoTPCOnly->Fill(ncascadesForSelEvtNoTPCOnly);
-   fHistTrackMultiplicityForSelEvtNoTPCOnly->Fill(nTrackMultiplicityForSelEvtNoTPCOnly);
-
-   //-----------------
-   // Pileup selection
-   //-----------------
-   Int_t    ncascadesForSelEvtNoTPCOnlyNoPileup          = -1; //number of cascades after the NoPileup selection
-   Int_t    nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -1; //number of tracks after the Pileup selection
+   // - Vertex position plots: after any event selections
    tPrimaryVtxPosition[0] = 0;
    tPrimaryVtxPosition[1] = 0;
    tPrimaryVtxPosition[2] = 0;
    if (fAnalysisType == "ESD" ) {
-       // - Selection for pile up
-       if (fkRejectEventPileUp) {
-           if(lESDevent->IsPileupFromSPD()){
-               AliWarning("Pb / Pile-up event ... return!");
-               PostData(1, fListHistCascade);
-               PostData(2, fCFContCascadePIDAsXiMinus);
-               PostData(3, fCFContCascadePIDAsXiPlus);
-               PostData(4, fCFContCascadePIDAsOmegaMinus);
-               PostData(5, fCFContCascadePIDAsOmegaPlus);
-               PostData(6, fCFContAsCascadeCuts);
-               return;
-           }
-       }
-       // - Take the number of cascades and tracks after Pileup selection
-       ncascadesForSelEvtNoTPCOnlyNoPileup = lESDevent->GetNumberOfCascades();
-       nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = fESDtrackCuts->GetReferenceMultiplicity(lESDevent,AliESDtrackCuts::kTrackletsITSTPC,0.5);
-       // - Take the vertex position before any event selection on vertex position
        const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
-       tPrimaryVtxPosition[0] = primaryVtx->GetX();  
+       tPrimaryVtxPosition[0] = primaryVtx->GetX();
        tPrimaryVtxPosition[1] = primaryVtx->GetY();
        tPrimaryVtxPosition[2] = primaryVtx->GetZ();
    } else if (fAnalysisType == "AOD") {
-       // - Selection for pile up
-       if (fkRejectEventPileUp) {
-            if(lAODevent->IsPileupFromSPD()){
-               AliWarning("Pb / Pile-up event ... return!");
-               PostData(1, fListHistCascade);
-               PostData(2, fCFContCascadePIDAsXiMinus);
-               PostData(3, fCFContCascadePIDAsXiPlus);
-               PostData(4, fCFContCascadePIDAsOmegaMinus);
-               PostData(5, fCFContCascadePIDAsOmegaPlus);
-               PostData(6, fCFContAsCascadeCuts);
-               return;
-            }
-       }
-       // - Take the number of cascades and tracks after Pileup selection
-       ncascadesForSelEvtNoTPCOnlyNoPileup = lAODevent->GetNumberOfCascades();
-       nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup = -100;
-       // - Take the vertex position before any event selection on vertex position
        const AliVVertex *primaryVtx = lAODevent->GetPrimaryVertex();
        tPrimaryVtxPosition[0] = primaryVtx->GetX();
        tPrimaryVtxPosition[1] = primaryVtx->GetY();
        tPrimaryVtxPosition[2] = primaryVtx->GetZ();
    }
-   // - Take the vertex position and fill the plot after the cut on z position
    fHistPVxAnalysis->Fill( tPrimaryVtxPosition[0] );
    fHistPVyAnalysis->Fill( tPrimaryVtxPosition[1] );
    fHistPVzAnalysis->Fill( tPrimaryVtxPosition[2] );
-   fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(ncascadesForSelEvtNoTPCOnlyNoPileup);
-   fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup->Fill(nTrackMultiplicityForSelEvtNoTPCOnlyNoPileup);
-
+    
 
    //----------------------------------------------------------------------    
    // - Loop over the different types of GENERATED cascades (Xi-+, Omega-+)    
@@ -2337,6 +2344,9 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
    Double_t lrecoPt                    = -100.;     
    Double_t lrecoTransvRadius          = -1000.; 
    Double_t lDeltaPhiMcReco            = -1.;
+   Double_t lBachTransvMom             = 0.;
+   Double_t lpTrackTransvMom           = 0.;
+   Double_t lnTrackTransvMom           = 0.;
    Double_t lmcPtPosV0Dghter           = -100.;
    Double_t lmcPtNegV0Dghter           = -100.;
    Double_t lrecoP                     = -100.;
@@ -2386,6 +2396,10 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
         Bool_t lAssoXiPlus     = kFALSE;
         Bool_t lAssoOmegaMinus = kFALSE;
         Bool_t lAssoOmegaPlus  = kFALSE;
+       
+        Float_t  etaBach = 0.;
+        Float_t  etaPos  = 0.;
+        Float_t  etaNeg  = 0.;
 
         if ( fAnalysisType == "ESD" ) {                
 
@@ -2711,8 +2725,13 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
              Double_t pV0mom[3] = {0. ,0. ,0. };
              xiESD->GetNPxPyPz(nV0mom[0],nV0mom[1],nV0mom[2]);    
              xiESD->GetPPxPyPz(pV0mom[0],pV0mom[1],pV0mom[2]);
-             lV0mom = TMath::Sqrt(TMath::Power(nV0mom[0]+pV0mom[0],2)+TMath::Power(nV0mom[1]+pV0mom[1],2)+TMath::Power(nV0mom[2]+pV0mom[2],2)); 
-
+             lV0mom = TMath::Sqrt(TMath::Power(nV0mom[0]+pV0mom[0],2)+TMath::Power(nV0mom[1]+pV0mom[1],2)+TMath::Power(nV0mom[2]+pV0mom[2],2));
+             Double_t lBachMomX = 0.; Double_t lBachMomY = 0.; Double_t lBachMomZ = 0.;
+             xiESD->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );
+             lBachTransvMom   = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );
+             lnTrackTransvMom = TMath::Sqrt( nV0mom[0]*nV0mom[0] + nV0mom[1]*nV0mom[1] );
+             lpTrackTransvMom = TMath::Sqrt( pV0mom[0]*pV0mom[0] + pV0mom[1]*pV0mom[1] );
+            
         } else if ( fAnalysisType == "AOD" ) {
 
              // - Load the cascade
@@ -2931,12 +2950,31 @@ void AliAnalysisTaskCheckPerformanceCascadepp276::UserExec(Option_t *) {
              Double_t lV0momY   = xiAOD->MomV0Y();
              Double_t lV0momZ   = xiAOD->MomV0Z();
              lV0mom             = TMath::Sqrt(TMath::Power(lV0momX,2)+TMath::Power(lV0momY,2)+TMath::Power(lV0momZ,2));
-
+             Double_t lBachMomX = xiAOD->MomBachX();
+             Double_t lBachMomY = xiAOD->MomBachY();
+             lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );
+             Double_t lV0NMomX = xiAOD->MomNegX();
+             Double_t lV0NMomY = xiAOD->MomNegY();
+             Double_t lV0PMomX = xiAOD->MomPosX();
+             Double_t lV0PMomY = xiAOD->MomPosY();
+             lnTrackTransvMom = TMath::Sqrt( lV0NMomX*lV0NMomX   + lV0NMomY*lV0NMomY );
+             lpTrackTransvMom = TMath::Sqrt( lV0PMomX*lV0PMomX   + lV0PMomY*lV0PMomY );
+            
         }
 
         lXiRadius   = TMath::Sqrt( lPosXi[0]*lPosXi[0]  +  lPosXi[1]*lPosXi[1] );
         lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0]  +  lPosV0Xi[1]*lPosV0Xi[1] ); 
 
+        // - Cut on pt of the three daughter tracks
+        if (lBachTransvMom<fMinPtCutOnDaughterTracks) continue;
+        if (lpTrackTransvMom<fMinPtCutOnDaughterTracks) continue;
+        if (lnTrackTransvMom<fMinPtCutOnDaughterTracks) continue;
+       
+        // - Cut on pseudorapidity of the three daughter tracks
+        if (TMath::Abs(etaBach)>fEtaCutOnDaughterTracks) continue;
+        if (TMath::Abs(etaPos)>fEtaCutOnDaughterTracks) continue;
+        if (TMath::Abs(etaNeg)>fEtaCutOnDaughterTracks) continue;
+       
         // - Extra-selection for cascade candidates
         if (fkExtraSelections) {
                 if (lDcaXiDaughters > 0.3) continue;              // in AliCascadeVertexer
index 86bc02ec854de72dfb2cb9aef7adfa6e827dc2bc..ffc0348b473f443b386384516622c17fcb3c50f2 100644 (file)
@@ -7,9 +7,9 @@
 // //        AliAnalysisTaskCheckPerformanceCascadePbPb class
 // //            This task is for a performance study of cascade identification.
 // //            It works with MC info and ESD and AOD tree 
-// //            Origin   : A.Maire Jan2010, antonin.maire@ires.in2p3.fr
+// //            Origin   : A.Maire    Jan2010, antonin.maire@ires.in2p3.fr
 // //            Modified : M.Nicassio Feb2011, maria.nicassio@ba.infn.it
-// //            Modified : D. Colella Feb2012, domenico.colella@ba.infn.it
+// //            Modified : D.Colella  Feb2012, domenico.colella@ba.infn.it
 // //-----------------------------------------------------------------
 
 class TList;
@@ -89,9 +89,9 @@ class AliAnalysisTaskCheckPerformanceCascadepp276 : public AliAnalysisTaskSE {
          TH1F *fHistCascadeMultiplicityBeforeAnySel;
          TH1F *fHistCascadeMultiplicityAfterSDDSel;
          TH1F *fHistCascadeMultiplicityAfterPhysicsSel;
-         TH1F *fHistCascadeMultiplicityAfterVertexCutSel;
          TH1F *fHistCascadeMultiplicityForSelEvtNoTPCOnly;
          TH1F *fHistCascadeMultiplicityForSelEvtNoTPCOnlyNoPileup;
+         TH1F *fHistCascadeMultiplicityAfterVertexCutSel;
          TH1F *fHistnXiPlusPerEvTot;                  // After any event selections, in all the eta and pt range
          TH1F *fHistnXiMinusPerEvTot;                 // After any event selections, in all the eta and pt range
          TH1F *fHistnOmegaPlusPerEvTot;               // After any event selections, in all the eta and pt range
@@ -107,14 +107,14 @@ class AliAnalysisTaskCheckPerformanceCascadepp276 : public AliAnalysisTaskSE {
          // Tracks multiplicity plots
          TH1F *fHistTrackMultiplicityBeforeAnySel;
          TH1F *fHistTrackMultiplicityAfterSDDSel;
-         TH1F * fHistTrackMultiplicityAfterPhysicsSel;
-         TH1F *fHistTrackMultiplicityAfterVertexCutSel;
+         TH1F *fHistTrackMultiplicityAfterPhysicsSel;
          TH1F *fHistTrackMultiplicityForSelEvtNoTPCOnly;
          TH1F *fHistTrackMultiplicityForSelEvtNoTPCOnlyNoPileup;
+         TH1F *fHistTrackMultiplicityAfterVertexCutSel;
          // Vertex position plots (BestVertex)
-         TH1F *fHistPVx;                              // After SDD and Physics event selectione but before any other event selections
-         TH1F *fHistPVy;                              // After SDD and Physics event selectione but before any other event selections
-         TH1F *fHistPVz;                              // After SDD and Physics event selectione but before any other event selections
+         TH1F *fHistPVx;                              // After any selections but before |Z| < 10 cm
+         TH1F *fHistPVy;                              // After any selections but before |Z| < 10 cm
+         TH1F *fHistPVz;                              // After any selections but before |Z| < 10 cm
          TH1F *fHistPVxAnalysis;                      // After any event selections 
          TH1F *fHistPVyAnalysis;                      // After any event selections
          TH1F *fHistPVzAnalysis;                      // After any event selections
index ebc9d8cb16582df3dfa2aacda8da22f0789919ca..56f3b9daecf99d78e3585a67ee0b6fabf8c5f602 100644 (file)
@@ -1,20 +1,19 @@
 AliAnalysisTaskCheckCascadepp276 *AddTaskCheckCascadepp276( Int_t    minnTPCcls             = 70,
-                                                            Float_t  vtxlim                 = 10.,
-                                                            Float_t  vtxlimmin              = 0.,
+                                                            Float_t  vtxlim                 = 10.0,
+                                                            Float_t  vtxlimmin              = 0.0,
                                                             Bool_t   fwithsdd               = kFALSE,
                                                             Bool_t   kextrasel              = kFALSE,
                                                             Bool_t   krelaunchvertexers     = kFALSE,
                                                             Bool_t   ksddonselection        = kTRUE,
-                                                            Float_t  minptondaughtertracks  = 0.,
-                                                            Float_t  etacutondaughtertracks = .8,
-                                                            Bool_t   standardAnalysis       = kTRUE ) {
+                                                            Float_t  minptondaughtertracks  = 0.0,
+                                                            Float_t  etacutondaughtertracks = 0.8) {
 
    // Creates, configures and attaches to the train a cascades check task.
    // Get the pointer to the existing analysis manager via the static access method.
    //==============================================================================
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
    if (!mgr) {
-      ::Error("AddTaskCheckCascadeipp276", "No analysis manager to connect to.");
+      ::Error("AddTaskCheckCascadepp276", "No analysis manager to connect to.");
       return NULL;
    }   
 
@@ -27,69 +26,69 @@ AliAnalysisTaskCheckCascadepp276 *AddTaskCheckCascadepp276( Int_t    minnTPCcls
    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
 
    // Create and configure the task
-   AliAnalysisTaskCheckCascadepp276 *taskcheckcascadepp276 = new AliAnalysisTaskCheckCascadepp276(Form("TaskCheckCascadepp276_vtxlim%2.1f-%2.1f",vtxlim,vtxlimmin));
-
-   taskcheckcascadepp276->SetAnalysisType               (type);
-   taskcheckcascadepp276->SetRelaunchV0CascVertexers    (krelaunchvertexers);
-   taskcheckcascadepp276->SetSDDSelection               (fwithsdd);          // if TRUE apply the sdd selection
-   taskcheckcascadepp276->SetQualityCutZprimVtxPos      (kTRUE);             // selects vertices in +-10cm
-   taskcheckcascadepp276->SetQualityCutNoTPConlyPrimVtx (kTRUE);             // retains only events with tracking + SPD vertex
-   taskcheckcascadepp276->SetQualityCutTPCrefit         (kTRUE);             // requires TPC refit flag to be true to select a track
-   taskcheckcascadepp276->SetQualityCutnTPCcls          (kTRUE);             // rejects tracks that have less than n clusters in the TPC
-   taskcheckcascadepp276->SetQualityCutPileup           (kTRUE);
-   taskcheckcascadepp276->SetWithSDDOn                  (ksddonselection);   // selects events with SDD on
-   taskcheckcascadepp276->SetQualityCutMinnTPCcls       (minnTPCcls);        // minimum number of TPC clusters to accept daughter tracks
-   taskcheckcascadepp276->SetExtraSelections            (kextrasel);         // used to add other selection cuts
-   taskcheckcascadepp276->SetVertexRange                (vtxlim);
-   taskcheckcascadepp276->SetVertexRangeMin             (vtxlimmin);
-   taskcheckcascadepp276->SetMinptCutOnDaughterTracks   (minptondaughtertracks);  
-   taskcheckcascadepp276->SetEtaCutOnDaughterTracks     (etacutondaughtertracks);
+   //==============================================================================
+   TString taskname = Form("TaskCheckCascadepp276_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",minnTPCcls,vtxlim,vtxlimmin,minptondaughtertracks,etacutondaughtertracks);
+     if(fwithsdd) {
+          if (ksddonselection)       taskname += "_wSDDon";
+          else if (!ksddonselection) taskname += "_wSDDoff";
+     } else if (!fwithsdd)           taskname += "_woSDD";
+   AliAnalysisTaskCheckCascadepp276 *taskcheckcascadepp276 = new AliAnalysisTaskCheckCascadepp276(taskname);
+     taskcheckcascadepp276->SetAnalysisType               (type);                   // "ESD" or "AOD"
+     taskcheckcascadepp276->SetRelaunchV0CascVertexers    (krelaunchvertexers);     // choose if reconstruct the vertex of V0 in the cascades
+     taskcheckcascadepp276->SetSDDSelection               (fwithsdd);               // choose if apply SDD event selection
+     taskcheckcascadepp276->SetQualityCutZprimVtxPos      (kTRUE);                  // choose if apply Z vtx PV position event selection
+     taskcheckcascadepp276->SetQualityCutNoTPConlyPrimVtx (kTRUE);                  // choose if apply no TPC only event selection
+     taskcheckcascadepp276->SetQualityCutTPCrefit         (kTRUE);                  // choose if apply TPC refit on daughter tracks
+     taskcheckcascadepp276->SetQualityCutnTPCcls          (kTRUE);                  // choose if apply n TPC cluster selection on daughter tracks
+     taskcheckcascadepp276->SetQualityCutPileup           (kTRUE);                  // choose if apply no Pileup event selection
+     taskcheckcascadepp276->SetWithSDDOn                  (ksddonselection);        // which SDD selection do you want apply? [if kTRUE select SDDon events]
+     taskcheckcascadepp276->SetQualityCutMinnTPCcls       (minnTPCcls);             // which value do you want apply for the minTPCcls cut?
+     taskcheckcascadepp276->SetExtraSelections            (kextrasel);              // choose if apply the extra selection of cascade reco.
+     taskcheckcascadepp276->SetVertexRange                (vtxlim);                 // which higher value do you want apply for vtx Z cut?
+     taskcheckcascadepp276->SetVertexRangeMin             (vtxlimmin);              // which lower value do you want apply for vtx Z cut?
+     taskcheckcascadepp276->SetMinptCutOnDaughterTracks   (minptondaughtertracks);  // which value do you want apply for cut on min pt daughter track?
+     taskcheckcascadepp276->SetEtaCutOnDaughterTracks     (etacutondaughtertracks); // which value do you want apply for cut on eta daughter track?
 
    mgr->AddTask(taskcheckcascadepp276);
 
    // Create ONLY the output containers for the data produced by the task.
    // Get and connect other common input/output containers via the manager as below
    //==============================================================================
+   // Directory name
+   TString outputFileName = Form("%s:PWGLFStrangeness.outputCheckCascadepp276", AliAnalysisManager::GetCommonFileName());
+   // Objects name
+   TString outputlistname = Form("clistCasc_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",minnTPCcls,vtxlim,vtxlimmin,minptondaughtertracks,etacutondaughtertracks);
+     if(fwithsdd) {
+           if (ksddonselection)       outputlistname += "_wSDDon";
+           else if (!ksddonselection) outputlistname += "_wSDDoff";
+     } else if (!fwithsdd)            outputlistname += "_woSDD";
 
-   // User file name (if need be)
-   
-   TString outputFileName = AliAnalysisManager::GetCommonFileName();
-   if (standardAnalysis) outputFileName += ":PWGLFStrangeness.outputCheckCascadepp276";
-   else                  outputFileName += Form(":PWGLFStrangeness.outputCheckCascadepp276_vtxlim%2.1f-%2.1f",vtxlim,vtxlimmin);
-
-   Printf("AddTaskCheckCascade - Set OutputFileName : \n %s\n", outputFileName.Data() );
-
-   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clistCasc",
+   //Save objects into the train common file
+   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(outputlistname,
                                                             TList::Class(),
                                                             AliAnalysisManager::kOutputContainer,
                                                             outputFileName );
-   
-   AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontPIDXiM",
+   AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontPIDAsXiM",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
-
-   AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cfcontPIDXiP",
+   AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cfcontPIDAsXiP",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
-
-   AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("cfcontPIDOmegaM",
+   AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("cfcontPIDAsOmegaM",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
-
-   AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("cfcontPIDOmegaP",
+   AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("cfcontPIDAsOmegaP",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
-
-   AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("cfcontCuts",
+   AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("cfcontAsCuts",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
 
-   
    mgr->ConnectInput( taskcheckcascadepp276, 0, mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskcheckcascadepp276, 1, coutput1);
    mgr->ConnectOutput(taskcheckcascadepp276, 2, coutput2);
index 6681668b6ad511d07b3bcf4006aecc4c7db27064..0e9646c0004622c3be6978b1a45084b808ed49e7 100644 (file)
@@ -6,10 +6,10 @@ AliAnalysisTaskCheckPerformanceCascadepp276 *AddTaskCheckPerformanceCascadepp276
                                                                                   Bool_t   kacccut                = kFALSE,
                                                                                   Bool_t   krelaunchvertexers     = kFALSE,
                                                                                   Bool_t   ksddonselection        = kFALSE,
-                                                                                  Float_t  minptondaughtertracks  = 0.,
-                                                                                  Float_t  etacutondaughtertracks = .8,
-                                                                                  Bool_t   standardAnalysis       = kTRUE ) {
-// Creates, configures and attaches to the train a cascades check task.
+                                                                                  Float_t  minptondaughtertracks  = 0.0,
+                                                                                  Float_t  etacutondaughtertracks = 0.8) {
+    
+   // Creates, configures and attaches to the train a cascades check task.
    // Get the pointer to the existing analysis manager via the static access method.
    //==============================================================================
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
@@ -27,77 +27,70 @@ AliAnalysisTaskCheckPerformanceCascadepp276 *AddTaskCheckPerformanceCascadepp276
    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
 
    // Create and configure the task
-   AliAnalysisTaskCheckPerformanceCascadepp276 *taskCheckPerfCascadepp276 = new AliAnalysisTaskCheckPerformanceCascadepp276(Form("TaskCheckPerformanceCascadepp276_vtxlim%2.1f-%2.1f",vtxlim,vtxlimmin));
-
-   taskCheckPerfCascadepp276->SetAnalysisType               (type);
-   taskCheckPerfCascadepp276->SetRelaunchV0CascVertexers    (krelaunchvertexers);     
-   taskCheckPerfCascadepp276->SetSDDSelection               (fwithsdd);
-   taskCheckPerfCascadepp276->SetQualityCutZprimVtxPos      (kTRUE);
-   taskCheckPerfCascadepp276->SetRejectEventPileUp          (kFALSE);
-   taskCheckPerfCascadepp276->SetQualityCutNoTPConlyPrimVtx (kTRUE);
-   taskCheckPerfCascadepp276->SetQualityCutTPCrefit         (kTRUE);
-   taskCheckPerfCascadepp276->SetQualityCutnTPCcls          (kTRUE);             
-   taskCheckPerfCascadepp276->SetWithSDDOn                  (ksddonselection);
-   taskCheckPerfCascadepp276->SetQualityCutMinnTPCcls       (minnTPCcls);    
-   taskCheckPerfCascadepp276->SetExtraSelections            (kextrasel);
-   taskCheckPerfCascadepp276->SetApplyAccCut                (kacccut);
-   taskCheckPerfCascadepp276->SetVertexRange                (vtxlim);
-   taskCheckPerfCascadepp276->SetVertexRangeMin             (vtxlimmin);
-   taskCheckPerfCascadepp276->SetMinptCutOnDaughterTracks   (minptondaughtertracks); 
-   taskCheckPerfCascadepp276->SetEtaCutOnDaughterTracks     (etacutondaughtertracks);
+   //==============================================================================
+   TString tasknameperf = "TaskCheckPerformanceCascadepp276";
+     tasknameperf += Form("_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",minnTPCcls,vtxlim,vtxlimmin,minptondaughtertracks,etacutondaughtertracks);
+   AliAnalysisTaskCheckPerformanceCascadepp276 *taskCheckPerfCascadepp276 = new AliAnalysisTaskCheckPerformanceCascadepp276(tasknameperf);
+     taskCheckPerfCascadepp276->SetAnalysisType               (type);                   // "ESD" or "AOD"
+     taskCheckPerfCascadepp276->SetRelaunchV0CascVertexers    (krelaunchvertexers);     // choose if reconstruct the vertex of V0 in the cascades
+     taskCheckPerfCascadepp276->SetSDDSelection               (fwithsdd);               // choose if apply SDD event selection
+     taskCheckPerfCascadepp276->SetQualityCutZprimVtxPos      (kTRUE);                  // choose if apply Z vtx PV position event selection
+     taskCheckPerfCascadepp276->SetRejectEventPileUp          (kFALSE);                 // choose if apply no Pileup event selection
+     taskCheckPerfCascadepp276->SetQualityCutNoTPConlyPrimVtx (kTRUE);                  // choose if apply no TPC only event selection
+     taskCheckPerfCascadepp276->SetQualityCutTPCrefit         (kTRUE);                  // choose if apply TPC refit on daughter tracks
+     taskCheckPerfCascadepp276->SetQualityCutnTPCcls          (kTRUE);                  // choose if apply n TPC cluster selection on daughter tracks
+     taskCheckPerfCascadepp276->SetWithSDDOn                  (ksddonselection);        // which SDD selection do you want apply? [if kTRUE select SDDon events]
+     taskCheckPerfCascadepp276->SetQualityCutMinnTPCcls       (minnTPCcls);             // which value do you want apply for the minTPCcls cut?
+     taskCheckPerfCascadepp276->SetExtraSelections            (kextrasel);              // choose if apply the extra selection of cascade reco.
+     taskCheckPerfCascadepp276->SetApplyAccCut                (kacccut);                // choose if apply acceptance cut
+     taskCheckPerfCascadepp276->SetVertexRange                (vtxlim);                 // which higher value do you want apply for vtx Z cut?
+     taskCheckPerfCascadepp276->SetVertexRangeMin             (vtxlimmin);              // which lower value do you want apply for vtx Z cut?
+     taskCheckPerfCascadepp276->SetMinptCutOnDaughterTracks   (minptondaughtertracks);  // which value do you want apply for cut on min pt daughter track?
+     taskCheckPerfCascadepp276->SetEtaCutOnDaughterTracks     (etacutondaughtertracks); // which value do you want apply for cut on eta daughter track?
+    
    mgr->AddTask(taskCheckPerfCascadepp276);
 
    // Create ONLY the output containers for the data produced by the task.
    // Get and connect other common input/output containers via the manager as below
    //==============================================================================
+   // Directory name
+   TString outputFileNamePerf = Form("%s:PWGLFStrangeness.outputCheckPerformanceCascadepp276", AliAnalysisManager::GetCommonFileName());
+   // Objects name
+   TString outputnameperf1 = Form("clistCascPerf_minnTPCcls%i_vtxlim%.1f-%.1f_minptdghtrk%.1f_etacutdghtrk%.1f",minnTPCcls,vtxlim,vtxlimmin,minptondaughtertracks,etacutondaughtertracks);
 
-   // User file name (if need be)
-
-   TString outputFileName = AliAnalysisManager::GetCommonFileName();
-   if (standardAnalysis) outputFileName += ":PWGLFStrangeness.outputCheckPerformanceCascadepp276";
-   else                  outputFileName += Form(":PWGLFStrangeness.outputCheckPerformanceCascadepp276_vtxlim%2.1f-%2.1f",vtxlim,vtxlimmin); 
-   Printf("AddTaskCheckPerformanceCascadepp276 - Set OutputFileName : \n %s\n", outputFileName.Data() );
-   
-   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clistCascPerf",
-                                                            TList::Class(),
-                                                            AliAnalysisManager::kOutputContainer,
-                                                            outputFileName );
-
-   AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontPIDAsXiM",
-                                                             AliCFContainer::Class(),
-                                                             AliAnalysisManager::kOutputContainer,
-                                                             outputFileName );
-
-   AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cfcontPIDAsXiP",
-                                                             AliCFContainer::Class(),
-                                                             AliAnalysisManager::kOutputContainer,
-                                                             outputFileName );
-
-   AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("cfcontPIDAsOmegaM",
-                                                             AliCFContainer::Class(),
-                                                             AliAnalysisManager::kOutputContainer,
-                                                             outputFileName );
-
-   AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("cfcontPIDAsOmegaP",
-                                                             AliCFContainer::Class(),
-                                                             AliAnalysisManager::kOutputContainer,
-                                                             outputFileName );
-
-   AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("cfcontAsCuts",
-                                                             AliCFContainer::Class(),
-                                                             AliAnalysisManager::kOutputContainer,
-                                                             outputFileName );
-
-
+   //Save objects into the train common file
+   AliAnalysisDataContainer *coutputperf1 = mgr->CreateContainer(outputnameperf1,
+                                                                                            TList::Class(),
+                                                                 AliAnalysisManager::kOutputContainer,
+                                                                                            outputFileNamePerf );
+   AliAnalysisDataContainer *coutputperf2 = mgr->CreateContainer("cfcontPIDAsXiM",
+                                                                 AliCFContainer::Class(),
+                                                                 AliAnalysisManager::kOutputContainer,
+                                                                 outputFileNamePerf );
+   AliAnalysisDataContainer *coutputperf3 = mgr->CreateContainer("cfcontPIDAsXiP",
+                                                                 AliCFContainer::Class(),
+                                                                 AliAnalysisManager::kOutputContainer,
+                                                                 outputFileNamePerf );
+   AliAnalysisDataContainer *coutputperf4 = mgr->CreateContainer("cfcontPIDAsOmegaM",
+                                                                 AliCFContainer::Class(),
+                                                                 AliAnalysisManager::kOutputContainer,
+                                                                 outputFileNamePerf );
+   AliAnalysisDataContainer *coutputperf5 = mgr->CreateContainer("cfcontPIDAsOmegaP",
+                                                                 AliCFContainer::Class(),
+                                                                 AliAnalysisManager::kOutputContainer,
+                                                                 outputFileNamePerf );
+   AliAnalysisDataContainer *coutputperf6 = mgr->CreateContainer("cfcontAsCuts",
+                                                                 AliCFContainer::Class(),
+                                                                 AliAnalysisManager::kOutputContainer,
+                                                                 outputFileNamePerf );
 
    mgr->ConnectInput( taskCheckPerfCascadepp276, 0, mgr->GetCommonInputContainer());
-   mgr->ConnectOutput(taskCheckPerfCascadepp276, 1, coutput1);
-   mgr->ConnectOutput(taskCheckPerfCascadepp276, 2, coutput2);
-   mgr->ConnectOutput(taskCheckPerfCascadepp276, 3, coutput3);
-   mgr->ConnectOutput(taskCheckPerfCascadepp276, 4, coutput4);
-   mgr->ConnectOutput(taskCheckPerfCascadepp276, 5, coutput5);
-   mgr->ConnectOutput(taskCheckPerfCascadepp276, 6, coutput6);
+   mgr->ConnectOutput(taskCheckPerfCascadepp276, 1, coutputperf1);
+   mgr->ConnectOutput(taskCheckPerfCascadepp276, 2, coutputperf2);
+   mgr->ConnectOutput(taskCheckPerfCascadepp276, 3, coutputperf3);
+   mgr->ConnectOutput(taskCheckPerfCascadepp276, 4, coutputperf4);
+   mgr->ConnectOutput(taskCheckPerfCascadepp276, 5, coutputperf5);
+   mgr->ConnectOutput(taskCheckPerfCascadepp276, 6, coutputperf6);
    
    return taskCheckPerfCascadepp276;
 }