]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Modified Multistrange QA tasks and macros (Domenico C.)
authorlramona <lramona@cern.ch>
Tue, 4 Nov 2014 11:10:23 +0000 (12:10 +0100)
committerlramona <lramona@cern.ch>
Tue, 4 Nov 2014 11:10:23 +0000 (12:10 +0100)
PWGLF/QATasks/AliAnalysisTaskQAMultistrange.cxx
PWGLF/QATasks/AliAnalysisTaskQAMultistrange.h
PWGLF/QATasks/macros/AddTaskQAMultistrange.C
PWGLF/QATasks/post/PostProcessQAMultistrange.C

index 4b7a1049cf054b3eeef838f3ec0eade6849d001f..453ffabe75092748f5b48e5168fb9c7e92808668 100644 (file)
@@ -76,13 +76,11 @@ AliAnalysisTaskQAMultistrange::AliAnalysisTaskQAMultistrange()
     fAnalysisType               ("ESD"), 
     fCollidingSystem            ("PbPb"),
     fPIDResponse                (0),
-    fkSDDSelectionOn            (kTRUE),
     fkQualityCutZprimVtxPos     (kTRUE),
     fkQualityCutNoTPConlyPrimVtx(kTRUE),
     fkQualityCutTPCrefit        (kTRUE),
     fkQualityCutnTPCcls         (kTRUE),
     fkQualityCutPileup          (kTRUE),
-    fwithSDD                    (kTRUE),
     fMinnTPCcls                 (0),  
     fCentrLowLim                (0),
     fCentrUpLim                 (0),
@@ -92,6 +90,10 @@ AliAnalysisTaskQAMultistrange::AliAnalysisTaskQAMultistrange()
     fMinPtCutOnDaughterTracks   (0),
     fEtaCutOnDaughterTracks     (0),
 
+
+    fListHistMultistrangeQA(0),
+    fHistEventSel(0),
+    fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
     fCFContCascadeCuts(0),
     fCFContCascadeMCgen(0)
 
@@ -107,13 +109,11 @@ AliAnalysisTaskQAMultistrange::AliAnalysisTaskQAMultistrange(const char *name)
     fAnalysisType               ("ESD"), 
     fCollidingSystem            ("PbPb"),
     fPIDResponse                (0),
-    fkSDDSelectionOn            (kTRUE),
     fkQualityCutZprimVtxPos     (kTRUE),
     fkQualityCutNoTPConlyPrimVtx(kTRUE),
     fkQualityCutTPCrefit        (kTRUE),
     fkQualityCutnTPCcls         (kTRUE),
     fkQualityCutPileup          (kTRUE),
-    fwithSDD                    (kTRUE),
     fMinnTPCcls                 (0),
     fCentrLowLim                (0),
     fCentrUpLim                 (0),
@@ -123,14 +123,19 @@ AliAnalysisTaskQAMultistrange::AliAnalysisTaskQAMultistrange(const char *name)
     fMinPtCutOnDaughterTracks   (0),
     fEtaCutOnDaughterTracks     (0),
 
+
+    fListHistMultistrangeQA(0),
+    fHistEventSel(0),
+    fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
     fCFContCascadeCuts(0),
     fCFContCascadeMCgen(0) 
 
 {
   // Constructor
   // Output slot #0 writes into a TList container (Cascade)
-  DefineOutput(1, AliCFContainer::Class());
+  DefineOutput(1, TList::Class());
   DefineOutput(2, AliCFContainer::Class());
+  DefineOutput(3, AliCFContainer::Class());
 
   AliLog::SetClassDebugLevel("AliAnalysisTaskQAMultistrange",1);
 }
@@ -143,8 +148,9 @@ AliAnalysisTaskQAMultistrange::~AliAnalysisTaskQAMultistrange() {
   // For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList.
   // They will be deleted when fListCascade is deleted by the TSelector dtor
   // Because of TList::SetOwner() ...
-  if (fCFContCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())  { delete fCFContCascadeCuts;     fCFContCascadeCuts = 0x0;  }
-  if (fCFContCascadeMCgen && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadeMCgen;     fCFContCascadeMCgen = 0x0;  }
+  if (fListHistMultistrangeQA && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fListHistMultistrangeQA; fListHistMultistrangeQA = 0x0; }
+  if (fCFContCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())      { delete fCFContCascadeCuts;      fCFContCascadeCuts = 0x0;  }
+  if (fCFContCascadeMCgen && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())     { delete fCFContCascadeMCgen;     fCFContCascadeMCgen = 0x0;  }
 }
 
 
@@ -166,6 +172,43 @@ void AliAnalysisTaskQAMultistrange::UserCreateOutputObjects() {
   AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
   fPIDResponse = inputHandler->GetPIDResponse();
 
+  //-----------------
+  // Define the TList
+  //-----------------
+  fListHistMultistrangeQA = new TList();
+  fListHistMultistrangeQA->SetOwner();
+
+  //------------------
+  // Define the Histos
+  //------------------
+  if(! fHistEventSel) {
+        fHistEventSel = new TH1F("fHistEventSel", "Event selection;Evt. Sel. Step;Count",6, 0, 6);
+        fHistEventSel->GetXaxis()->SetBinLabel(1, "Processed");
+        fHistEventSel->GetXaxis()->SetBinLabel(2, "PhysEvSel");
+        fHistEventSel->GetXaxis()->SetBinLabel(3, "Multiplicity");
+        fHistEventSel->GetXaxis()->SetBinLabel(4, "GoodPrVtx");
+        fHistEventSel->GetXaxis()->SetBinLabel(5, "PrVtxPosition");
+        fHistEventSel->GetXaxis()->SetBinLabel(6, "PileUpSel");
+        fListHistMultistrangeQA->Add(fHistEventSel);
+  }
+  if(! fHistMassXiMinus) {
+     fHistMassXiMinus = new TH1F("fHistMassXiMinus", "#Xi^{-} candidates;M(#Lambda,#pi^{-}) (GeV/c^{2}); Counts", 150, 1.25, 1.40);
+     fListHistMultistrangeQA->Add(fHistMassXiMinus);
+  } 
+  if(! fHistMassXiPlus) {
+     fHistMassXiPlus = new TH1F("fHistMassXiPlus", "#Xi^{+} candidates; M(#bar{#Lambda}^{0},#pi^{+}) (GeV/c^{2}); Counts", 150, 1.25, 1.40);
+     fListHistMultistrangeQA->Add(fHistMassXiPlus);
+  }
+  if(! fHistMassOmegaMinus) {
+     fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus", "#Omega^{-} candidates; M(#Lambda,K^{-}) (GeV/c^{2}); Counts", 120, 1.62, 1.74);
+     fListHistMultistrangeQA->Add(fHistMassOmegaMinus);
+  }
+  if(! fHistMassOmegaPlus) {
+     fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus", "#Omega^{+} candidates;M(#bar{#Lambda}^{0},K^{+}) (GeV/c^{2}); Counts", 120, 1.62, 1.74); 
+     fListHistMultistrangeQA->Add(fHistMassOmegaPlus);                                                                                                    
+  }
+
+
   //---------------------------------------------------
   // Define the container for the topological variables
   //---------------------------------------------------
@@ -360,9 +403,10 @@ void AliAnalysisTaskQAMultistrange::UserCreateOutputObjects() {
       fCFContCascadeMCgen->SetVarTitle(6,  "MC gen Centrality");
   }
  
+  PostData(1, fListHistMultistrangeQA);
+  PostData(2, fCFContCascadeCuts);
+  PostData(3, fCFContCascadeMCgen);
 
-  PostData(1, fCFContCascadeCuts);
-  PostData(2, fCFContCascadeMCgen);
 
 }// end UserCreateOutputObjects
 
@@ -434,11 +478,28 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
     return;
   }
 
+  fHistEventSel->Fill(0.5);
 
   //+++++++++++++++++
   // Event Selections
   //+++++++++++++++++
 
+  //------------------
+  // Physics selection 
+  //------------------
+  UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+  Bool_t isSelected = 0;
+  if      (fCollidingSystem == "pp" || fCollidingSystem == "PbPb") isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+  else if (fCollidingSystem == "pPb")                              isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+  if (!isSelected){ 
+       PostData(1, fListHistMultistrangeQA);
+       PostData(2, fCFContCascadeCuts); 
+       PostData(3, fCFContCascadeMCgen); 
+       return; 
+  }
+
+  fHistEventSel->Fill(1.5);
+
   //----------------------------------------------------------
   // Centrality/Multiplicity selection for PbPb/pPb collisions
   //----------------------------------------------------------
@@ -447,12 +508,14 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
   if      (fAnalysisType == "ESD" && (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb")) centrality = lESDevent->GetCentrality();
   else if (fAnalysisType == "AOD" && (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb")) centrality = lAODevent->GetCentrality();
   Float_t lcentrality = 0.;
-  if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") { 
+  if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") {
        if (fkUseCleaning) lcentrality = centrality->GetCentralityPercentile(fCentrEstimator.Data());
        else {
            lcentrality = centrality->GetCentralityPercentileUnchecked(fCentrEstimator.Data());
            if (centrality->GetQuality()>1) {
-               PostData(1, fCFContCascadeCuts);
+               PostData(1, fListHistMultistrangeQA);
+               PostData(2, fCFContCascadeCuts);
+               PostData(3, fCFContCascadeMCgen);
                return;
            }
        }
@@ -462,27 +525,7 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
        //}
   } else if (fCollidingSystem == "pp") lcentrality = 0.;
 
-  //---------------------
-  // SDD status selection 
-  //---------------------
-  if (fkSDDSelectionOn && fAnalysisType == "ESD") {
-       TString trcl = lESDevent->GetFiredTriggerClasses();
-       if      (fwithSDD) { if(!(trcl.Contains("ALLNOTRD"))) { PostData(1, fCFContCascadeCuts); return; } }
-       else if (!fwithSDD){ if((trcl.Contains("ALLNOTRD")))  { PostData(1, fCFContCascadeCuts); return; } }
-  } else if (fkSDDSelectionOn && fAnalysisType == "AOD") {
-       TString trcl = lAODevent->GetFiredTriggerClasses();
-       if      (fwithSDD)  { if(!(trcl.Contains("ALLNOTRD"))) { PostData(1, fCFContCascadeCuts); return; } }
-       else if (!fwithSDD) { if((trcl.Contains("ALLNOTRD")))  { PostData(1, fCFContCascadeCuts); return; } }
-  }
-
-  //------------------
-  // Physics selection 
-  //------------------
-  UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
-  Bool_t isSelected = 0;
-  if      (fCollidingSystem == "pp" || fCollidingSystem == "PbPb") isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
-  else if (fCollidingSystem == "pPb")                              isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
-  if (!isSelected){ PostData(1, fCFContCascadeCuts); return; }
+  fHistEventSel->Fill(2.5);
 
   //------------------------------
   // Well-established PV selection
@@ -497,7 +540,9 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
               const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
               if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
                   AliWarning(" No SPD prim. vertex nor prim. Tracking vertex ... return !");
-                  PostData(1, fCFContCascadeCuts);
+                  PostData(1, fListHistMultistrangeQA);
+                  PostData(2, fCFContCascadeCuts);
+                  PostData(3, fCFContCascadeMCgen);
                   return;
               }
           }
@@ -506,7 +551,9 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
           const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex();
           if (!lPrimaryBestAODVtx){
               AliWarning("No prim. vertex in AOD... return!");
-              PostData(1, fCFContCascadeCuts);
+              PostData(1, fListHistMultistrangeQA);
+              PostData(2, fCFContCascadeCuts);
+              PostData(3, fCFContCascadeMCgen);
               return;
           }
           lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );
@@ -528,7 +575,9 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
           else fHasVertex = kTRUE;
           if (fHasVertex == kFALSE) { //Is First event in chunk rejection: Still present!
               AliWarning("Pb / | PV does not satisfy selection criteria!");
-              PostData(1, fCFContCascadeCuts);
+              PostData(1, fListHistMultistrangeQA);
+              PostData(2, fCFContCascadeCuts);
+              PostData(3, fCFContCascadeMCgen);
               return;
           }
           vertex->GetXYZ( lBestPrimaryVtxPos );
@@ -548,7 +597,9 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
           else fHasVertex = kTRUE;
           if (fHasVertex == kFALSE) { //Is First event in chunk rejection: Still present!
               AliWarning("Pb / | PV does not satisfy selection criteria!");
-              PostData(1, fCFContCascadeCuts);
+              PostData(1, fListHistMultistrangeQA);
+              PostData(2, fCFContCascadeCuts);
+              PostData(3, fCFContCascadeMCgen);
               return;
           }   
           vertex->GetXYZ( lBestPrimaryVtxPos );
@@ -558,27 +609,46 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
   if      (fAnalysisType == "ESD") lMagneticField = lESDevent->GetMagneticField();
   else if (fAnalysisType == "AOD") lMagneticField = lAODevent->GetMagneticField();
 
+  fHistEventSel->Fill(3.5);
+
   //----------------------------
   // Vertex Z position selection
   //----------------------------
   if (fkQualityCutZprimVtxPos) {
       if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange ) {
-          PostData(1, fCFContCascadeCuts);
+          PostData(1, fListHistMultistrangeQA);
+          PostData(2, fCFContCascadeCuts);
+          PostData(3, fCFContCascadeMCgen);
           return;
       }
   }
 
+  fHistEventSel->Fill(4.5);
+
   //-----------------------
   // Pilup selection for pp
   //-----------------------
   if (fCollidingSystem == "pp") {
       if (fAnalysisType == "ESD") {
-          if (fkQualityCutPileup) { if(lESDevent->IsPileupFromSPD()){ PostData(1, fCFContCascadeCuts); return; } }
+          if (fkQualityCutPileup) { if(lESDevent->IsPileupFromSPD()){ 
+                                         PostData(1, fListHistMultistrangeQA);          
+                                         PostData(2, fCFContCascadeCuts); 
+                                         PostData(3, fCFContCascadeMCgen); 
+                                         return; 
+                                    } 
+                                  }
       } else if (fAnalysisType == "AOD") {
-          if (fkQualityCutPileup) { if(lAODevent->IsPileupFromSPD()){ PostData(1, fCFContCascadeCuts); return; } }
+          if (fkQualityCutPileup) { if(lAODevent->IsPileupFromSPD()){ 
+                                         PostData(1, fListHistMultistrangeQA);
+                                         PostData(2, fCFContCascadeCuts); 
+                                         PostData(3, fCFContCascadeMCgen); 
+                                         return; 
+                                    } 
+                                  }
       }
   }
 
+  fHistEventSel->Fill(5.5);
 
   ////////////////////////////               
   // MC GENERATED CASCADE PART
@@ -933,10 +1003,10 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
 
            // ---------------------------------------------------------------------------------------------------       
            // - Around effective masses. Change mass hypotheses to cover all the possibilities:  Xi-/+, Omega -/+
-           if ( lChargeXi < 0 )                lInvMassXiMinus         = xi->MassXi();
-           if ( lChargeXi > 0 )                lInvMassXiPlus          = xi->MassXi();
-           if ( lChargeXi < 0 )                lInvMassOmegaMinus      = xi->MassOmega();
-           if ( lChargeXi > 0 )                lInvMassOmegaPlus       = xi->MassOmega();
+           if ( lChargeXi < 0 )        lInvMassXiMinus    = xi->MassXi();
+           if ( lChargeXi > 0 )        lInvMassXiPlus     = xi->MassXi();
+           if ( lChargeXi < 0 )        lInvMassOmegaMinus = xi->MassOmega();
+           if ( lChargeXi > 0 )        lInvMassOmegaPlus  = xi->MassOmega();
 
            // ----------------------------------------------
            // - TPC PID : 3-sigma bands on Bethe-Bloch curve
@@ -1007,7 +1077,16 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
     Float_t lctauV0 = -1.;
     if (lV0TotMom!=0) lctauV0 = distV0Xi*lambdaMass/lV0TotMom;
 
-               
+    // Fill the TH1F without PID info
+    if        ( lChargeXi < 0 ) {
+         fHistMassXiMinus->Fill( lInvMassXiMinus );
+         fHistMassOmegaMinus->Fill( lInvMassOmegaMinus );
+    } else if ( lChargeXi > 0 ) {
+      fHistMassXiPlus->Fill( lInvMassXiPlus );
+      fHistMassOmegaPlus->Fill( lInvMassOmegaPlus );
+    }
+  
+       
     // Fill the AliCFContainer (optimisation of topological selections)
     Double_t lContainerCutVars[21] = {0.0};
     lContainerCutVars[0]  = lDcaXiDaughters;
@@ -1055,8 +1134,10 @@ void AliAnalysisTaskQAMultistrange::UserExec(Option_t *) {
     
   
   // Post output data.
-  PostData(1, fCFContCascadeCuts); 
-  PostData(2, fCFContCascadeMCgen);
+  PostData(1, fListHistMultistrangeQA);
+  PostData(2, fCFContCascadeCuts); 
+  PostData(3, fCFContCascadeMCgen);
+
 }
 
 //________________________________________________________________________
index 0f16e9ec733a03d8f5607837dcd1384f144533e9..2520f9536c3c4ae1ac43b90be9b0a9db8f6a0bfe 100644 (file)
@@ -48,14 +48,12 @@ class AliAnalysisTaskQAMultistrange : public AliAnalysisTaskSE {
   void SetIsMC                       (Bool_t isMC                       = kFALSE) { fisMC                        = isMC;                       } 
   void SetAnalysisType               (const char* analysisType          = "ESD" ) { fAnalysisType                = analysisType;               }
   void SetCollidingSystem            (const char* collidingSystem       = "PbPb") { fCollidingSystem             = collidingSystem;            }
-  void SetSDDselection               (Bool_t SDDSelection               = kFALSE) { fkSDDSelectionOn             = SDDSelection;               }
   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 SetQualityCutMinnTPCcls       (Int_t  minnTPCcls                 = 70    ) { fMinnTPCcls                  = minnTPCcls;                 }
   void SetQualityCutPileup           (Bool_t qualitycutPileup           = kFALSE) { fkQualityCutPileup           = qualitycutPileup;           }
-  void SetwithSDD                    (Bool_t withSDD                    = kTRUE ) { fwithSDD                     = withSDD;                    } 
   void SetCentralityLowLim           (Float_t centrlowlim               = 0.    ) { fCentrLowLim                 = centrlowlim;                }  
   void SetCentralityUpLim            (Float_t centruplim                = 100.  ) { fCentrUpLim                  = centruplim;                 }
   void SetCentralityEst              (TString   centrest                = "V0M" ) { fCentrEstimator              = centrest;                   }
@@ -73,14 +71,12 @@ class AliAnalysisTaskQAMultistrange : public AliAnalysisTaskSE {
         Bool_t          fisMC;                          // Boolean : kTRUE = is a MC production
         TString         fAnalysisType;                  // "ESD" or "AOD" analysis type        
         TString         fCollidingSystem;               // "PbPb", "pPb" or "pp" colliding system
-        AliPIDResponse *fPIDResponse;                   //! PID response object
-        Bool_t          fkSDDSelectionOn;               // Boolean : kTRUE = apply the selection on SDD status
+        AliPIDResponse *fPIDResponse;                   // PID response object
         Bool_t          fkQualityCutZprimVtxPos;        // Boolean : kTRUE = cut on the prim.vtx  z-position
         Bool_t          fkQualityCutNoTPConlyPrimVtx;   // Boolean : kTRUE = prim vtx should be SPD or Tracking vertex
         Bool_t          fkQualityCutTPCrefit;           // Boolean : kTRUE = ask for TPCrefit for the 3 daughter tracks
         Bool_t          fkQualityCutnTPCcls;            // Boolean : kTRUE = ask for at least n TPC clusters for each daughter track
         Bool_t          fkQualityCutPileup;             // Boolean : kTRUE = ask for no pileup events
-        Bool_t          fwithSDD;                       // Boolean : kTRUE = Select the events that has and use the info from the SDD
         Int_t           fMinnTPCcls;                    // minimum number of TPC cluster for daughter tracks
         Float_t         fCentrLowLim;                   // Lower limit for centrality percentile selection
         Float_t         fCentrUpLim;                    // Upper limit for centrality percentile selection
@@ -90,9 +86,14 @@ class AliAnalysisTaskQAMultistrange : public AliAnalysisTaskSE {
         Float_t         fMinPtCutOnDaughterTracks;      // minimum pt cut on daughter tracks
         Float_t         fEtaCutOnDaughterTracks;        // pseudorapidity cut on daughter tracks
        
-
-       AliCFContainer  *fCFContCascadeCuts;            //! Container meant to store all the relevant distributions corresponding to the cut variables
-        AliCFContainer  *fCFContCascadeMCgen;           //! Container meant to store general variables for MC generated particles 
+        TList      *fListHistMultistrangeQA;            //! List of Cascade histograms
+        TH1F *fHistEventSel;                            // Gives the number of the events after each event selection
+        TH1F *fHistMassXiMinus;                         // Gives the invariant mass distr. for the Xi minus without PID info on daughter tracks
+        TH1F *fHistMassXiPlus;                          // Gives the invariant mass distr. for the Xi plus without PID info on daughter tracks
+        TH1F *fHistMassOmegaMinus;                      // Gives the invariant mass distr. for the Omega minus without PID info on daughter tracks
+        TH1F *fHistMassOmegaPlus;                       // Gives the invariant mass distr. for the Omega plus without PID info on daughter tracks
+       AliCFContainer  *fCFContCascadeCuts;            // Container meant to store all the relevant distributions corresponding to the cut variables
+        AliCFContainer  *fCFContCascadeMCgen;           // Container meant to store general variables for MC generated particles 
        
 
   AliAnalysisTaskQAMultistrange(const AliAnalysisTaskQAMultistrange&);            // not implemented
index 621bb2ccf92b7d1857ad399ff5c72b62ae621241..847ced49df813fe9decdc0a5a1f3dacb87612127 100644 (file)
@@ -6,8 +6,6 @@ AliAnalysisTaskQAMultistrange *AddTaskQAMultistrange( Bool_t   isMC
                                                       Bool_t   kusecleaning           = kTRUE, 
                                                       Float_t  vtxlim                 = 10.,
                                                       TString  collidingSystem        = "PbPb",
-                                                      Bool_t   SDDSelection           = kFALSE,
-                                                      Bool_t   withSDD                = kFALSE,
                                                       Float_t  minptondaughtertracks  = 0.,
                                                       Float_t  etacutondaughtertracks = 0.8) {
 
@@ -34,14 +32,12 @@ AliAnalysisTaskQAMultistrange *AddTaskQAMultistrange( Bool_t   isMC
    taskcheckcascade->SetIsMC                       (isMC);
    taskcheckcascade->SetAnalysisType               (type);
    taskcheckcascade->SetCollidingSystem            (collidingSystem);
-   taskcheckcascade->SetSDDselection               (SDDSelection);
    taskcheckcascade->SetQualityCutZprimVtxPos      (kTRUE);             // selects vertices in +-10cm
    taskcheckcascade->SetQualityCutNoTPConlyPrimVtx (kTRUE);             // retains only events with tracking + SPD vertex
    taskcheckcascade->SetQualityCutTPCrefit         (kTRUE);             // requires TPC refit flag to be true to select a track
    taskcheckcascade->SetQualityCutnTPCcls          (kTRUE);             // rejects tracks that have less than n clusters in the TPC
    taskcheckcascade->SetQualityCutMinnTPCcls       (minnTPCcls);        // minimum number of TPC clusters to accept daughter tracks
    taskcheckcascade->SetQualityCutPileup           (kFALSE);
-   taskcheckcascade->SetwithSDD                    (withSDD);
    taskcheckcascade->SetCentralityLowLim           (centrlowlim);       // setting centrality selection vriables
    taskcheckcascade->SetCentralityUpLim            (centruplim);
    taskcheckcascade->SetCentralityEst              (centrest);
@@ -57,15 +53,18 @@ AliAnalysisTaskQAMultistrange *AddTaskQAMultistrange( Bool_t   isMC
    //==============================================================================
 
    // User file name (if need be)
-   
    TString outputFileName = AliAnalysisManager::GetCommonFileName();
    outputFileName += ":PWGLFStrangeness.outputCheckCascade";
 
-   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("cfcontCuts",
+   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("fListHistMultistrangeQA",
+                                                             TList::Class(),
+                                                             AliAnalysisManager::kOutputContainer,
+                                                             outputFileName );
+   AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontCuts",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
-   AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontMCgen",
+   AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cfcontMCgen",
                                                              AliCFContainer::Class(),
                                                              AliAnalysisManager::kOutputContainer,
                                                              outputFileName );
@@ -73,6 +72,7 @@ AliAnalysisTaskQAMultistrange *AddTaskQAMultistrange( Bool_t   isMC
    mgr->ConnectInput( taskcheckcascade, 0, mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskcheckcascade, 1, coutput1);
    mgr->ConnectOutput(taskcheckcascade, 2, coutput2);  
+   mgr->ConnectOutput(taskcheckcascade, 3, coutput3);  
  
    return taskcheckcascade;
 }   
index 5d2312940bdfc473a30e884b3107b524d45b1574..372fe1fd1addf287a73030d4e5144e2f203378a3 100644 (file)
@@ -1,7 +1,8 @@
 //////////////////////////////////////////////////
 //
 //  This macro was written by Domenico Colella (domenico.colella@cern.ch).
-//  12 November 2013
+//   -- first version    [12 November 2013]
+//   -- modified version [3 November 2013]: added inv. mass distr. without PID info
 //
 //   ------------------------
 //   ------ Arguments -------
 //                Rapidity,               Cascade proper length, 
 //                V0 proper length.
 //   -- [Page 4] Check on the invariant mass distribution fit.
-//   -- [Page 5] Only in case of PbPb or pPb collisions, the event centrality
+//   -- [Page 5] Check on the invariant mass distribution, without the PID info, fit. 
+//   -- [Page 6] Only in case of PbPb or pPb collisions, the event centrality
 //               distribution.
-//   -- [Page 6] Only in case of MC production, distributions for the MC generated
+//   -- [Page 7] Only in case of MC production, distributions for the MC generated
 //               particles, of the variables:
 //                Total momentum,         Transverse momentum,
 //                Rapidity,               Pseudo-rapidity,
 //                Theta angle,            Phi angle,
 //
+//
 //////////////////////////////////////////////////////
 
 
@@ -126,6 +129,7 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
      //SOURCE THE FILE AND THE CONTAINER
      TFile *f1 = new TFile(Form("%s/%s",fileDir,filein));
      AliCFContainer *cf = (AliCFContainer*) (f1->Get("PWGLFStrangeness.outputCheckCascade/fCFContCascadeCuts"));  
+     TList *hlist = (TList*) f1->Get("PWGLFStrangeness.outputCheckCascade/fListHistMultistrangeQA");
  
      //____________
      //DEEFINE TEXT
@@ -141,7 +145,7 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
      else if (icasType == 1) tcasc = new TLatex(0.8,0.7,"#color[1]{#Xi^{+}}");
      else if (icasType == 2) tcasc = new TLatex(0.8,0.7,"#color[1]{#Omega^{-}}");
      else if (icasType == 3) tcasc = new TLatex(0.8,0.7,"#color[1]{#Omega^{+}}");
-     tcasc->SetTextSize(0.2);
+     tcasc->SetTextSize(0.15);
      tcasc->SetNDC();
      tcasc->SetTextColor(2);
      TLatex* tpdgmass;
@@ -153,6 +157,7 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
      tpdgmass->SetNDC();
      tpdgmass->SetTextColor(2);
 
+     
      //________________________________ 
      //DEFINE 1st CANVAS AND DRAW PLOTS
      TCanvas *c1 = new TCanvas("c1","",1200,800);
@@ -285,6 +290,7 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
        Double_t max6 = hvar6->GetBinContent(hvar6->GetMaximumBin());
        hvar6->GetYaxis()->SetRangeUser(0.01,max6*1.5);
        hvar6->Draw("histo");
+       tcasc->Draw();
        //Pad 2: Min V0 Radius Fid. Vol.  
        c2->cd(2);
        gPad->SetLogy();
@@ -369,37 +375,24 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
      //________________________________
      //DEFINE 3rd CANVAS AND DRAW PLOTS
      TCanvas *c3 = new TCanvas("c3","",1200,800);
-     c3->Divide(2,3);
-       //Pad 1: InvMass
+     c3->Divide(2,2);
+       //Pad 1: Transverse momentum
        c3->cd(1);
-       TH1D *hvar12 = cf->ShowProjection(11+icasType/2,icasType);
-       hvar12->Draw("histo");
-       tpdgmass->Draw(); 
-       TLine *linemass;
-       if      (icasType == 0) linemass = new TLine(1.32171,0.,1.32171,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
-       else if (icasType == 1) linemass = new TLine(1.32171,0.,1.32171,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
-       else if (icasType == 2) linemass = new TLine(1.67245,0.,1.67245,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
-       else if (icasType == 3) linemass = new TLine(1.67245,0.,1.67245,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
-       linemass->SetLineColor(kRed);
-       linemass->SetLineStyle(1);
-       linemass->SetLineWidth(2.0);
-       linemass->Draw("same");
-       //Pad 2: Transverse momentum
-       c3->cd(2);
        TH1D *hvar13 = cf->ShowProjection(13,icasType);
        hvar13->Draw("histo");
-       //Pad 3: Y
-       c3->cd(3);
+       tcasc->Draw();
+       //Pad 2: Y
+       c3->cd(2);
        TH1D *hvar14 = cf->ShowProjection(14+icasType/2,icasType);
        hvar14->Draw("histo");
-       //Pad 4: Cascade proper length
-       c3->cd(4);
+       //Pad 3: Cascade proper length
+       c3->cd(3);
        TH1D *hvar18;
        hvar18 = cf->ShowProjection(16,icasType);
        hvar18->GetXaxis()->SetRangeUser(0.,90.);
        hvar18->Draw("histo");
-       //Pad 5: V0 proper length 
-       c3->cd(5);
+       //Pad 4: V0 proper length 
+       c3->cd(4);
        TH1D *hvar19;
        hvar19 = cf->ShowProjection(17,icasType);
        hvar19->GetXaxis()->SetRangeUser(0.,90.);
@@ -410,19 +403,17 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
 
      //________________________________ 
      //DEFINE 4th CANVAS AND DRAW PLOTS
-     TCanvas *c4 = new TCanvas("c4","",600,400);
-     c4->Divide(2,1);
+     TCanvas *c4 = new TCanvas("c4","",1200,800);
+     c4->Divide(2,2);
        //Pad1: invariant mass fit
        c4->cd(1);
-       TH1D *hvar18 = cf->ShowProjection(11+icasType/2,icasType);
-       hvar18->Draw("histo");
+       TH1D *hvar23 = cf->ShowProjection(11+icasType/2,icasType);
+       hvar23->Draw("histo");
+       tcasc->Draw();
         // - SOME PARAMETER VALUE
         Bool_t kfitgauss = kFALSE;
         Bool_t kfitleft  = kFALSE;
         Bool_t kfitright = kFALSE;
-        Int_t  ptbinNarrowY = 0;
-        if (icasType < 2) ptbinNarrowY = 10;   // 6;
-        else              ptbinNarrowY =  3;   // 2;
         // - SOME DEFINITIONS
         Float_t lowlimmass;
         Float_t uplimmass;
@@ -453,7 +444,7 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
             fitinvmass->SetParLimits(1, 1.664,1.68);
             fitinvmass->SetParLimits(2,0.0008,0.006);
         }
-        hvar18->Fit("fitinvmass","rimeN");
+        hvar23->Fit("fitinvmass","rimeN");
         fitinvmass->SetLineColor(kRed);
         fitinvmass->Draw("same");
         Float_t meanGauss   = fitinvmass->GetParameter(1);
@@ -464,30 +455,80 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
        c4->cd(2);
        Float_t refwidth = 0.002;
        if (icasType > 1) refwidth = 0.0025;
-       TPaveText *pave1 = new TPaveText(0.05,0.3,0.95,0.5);
+       TPaveText *pave1 = new TPaveText(0.05,0.3,0.95,0.7);
        pave1->SetFillColor(0);
        pave1->SetTextSize(0.04);
        pave1->SetTextAlign(12);
+       pave1->AddText("Invariant mass distribution #color[4]{WITH} PID on dauther tracks");
        if (icasType < 2) pave1->AddText("PDG mass: 1.32171 GeV/c^{2}");
        else              pave1->AddText("PDG mass: 1.67245 GeV/c^{2}");
-       pave1->AddText(Form("#color[1]{Mass form Fit: %.5f #pm %.5f GeV/c^{2}}",meanGauss,sigmaGauss));
+       pave1->AddText(Form("#color[1]{Mass from Fit: %.5f #pm %.5f GeV/c^{2}}",meanGauss,sigmaGauss));
        if (sigmaGauss > refwidth - 0.0003 && sigmaGauss < refwidth + 0.0003) pave1->AddText("#color[3]{OK!! The width is compatible with standard.}");
        else                                                                  pave1->AddText("#color[2]{NOT OK!! Problem.}");
        pave1->Draw();
        cout<<"   "<<refwidth - 0.0003<<"<"<<sigmaGauss<<"<"<<refwidth + 0.0003<<endl;
-     c4->SaveAs("fig_lf_Multistrange.pdf");   
+       //Pad3: invariant mass fit
+       c4->cd(3);
+       TH1D *hvar24;
+       if      (icasType == 0) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassXiMinus"));
+       else if (icasType == 1) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassXiPlus"));
+       else if (icasType == 2) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassOmegaMinus"));
+       else if (icasType == 3) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassOmegaPlus"));
+       hvar24->Draw("histo");
+        TF1*  fitinvmassnoPID = new TF1("fitinvmassnoPID","gaus(0)+pol2(3)",lowlimmass,uplimmass);
+        fitinvmassnoPID->SetParName(0, "cnstntG");
+        fitinvmassnoPID->SetParName(1, "meanG");
+        fitinvmassnoPID->SetParName(2, "sigmaG");
+        fitinvmassnoPID->SetParLimits(0,0.,500000.);
+        if (icasType==0||icasType==1) {
+            fitinvmassnoPID->SetParameter(1, 1.32171);
+            fitinvmassnoPID->SetParLimits(1, 1.31,1.33);
+            fitinvmassnoPID->SetParLimits(2,0.001,0.005);
+        } else {
+            fitinvmassnoPID->SetParameter(1, 1.67245);
+            fitinvmassnoPID->SetParLimits(1, 1.664,1.68);
+            fitinvmassnoPID->SetParLimits(2,0.0008,0.006);
+        }
+        hvar24->Fit("fitinvmassnoPID","rimeN");
+        fitinvmassnoPID->SetLineColor(kRed);
+        fitinvmassnoPID->Draw("same");
+        Float_t meanGaussnoPID   = fitinvmassnoPID->GetParameter(1);
+        Float_t sigmaGaussnoPID  = fitinvmassnoPID->GetParameter(2);
+       cout<<"Mean: "<<meanGaussnoPID<<endl;
+       cout<<"Sigma: "<<sigmaGaussnoPID<<endl;
+       //Pad4: Text
+       c4->cd(4);
+       Float_t refwidth = 0.002;
+       if (icasType > 1) refwidth = 0.0025;
+       TPaveText *pave2 = new TPaveText(0.05,0.3,0.95,0.7);
+       pave2->SetFillColor(0);
+       pave2->SetTextSize(0.04);
+       pave2->SetTextAlign(12);
+       pave2->AddText("Invariant mass distribution #color[4]{WITHOUT} PID on dauther tracks");
+       if (icasType < 2) pave2->AddText("PDG mass: 1.32171 GeV/c^{2}");
+       else              pave2->AddText("PDG mass: 1.67245 GeV/c^{2}");
+       pave2->AddText(Form("#color[1]{Mass from Fit: %.5f #pm %.5f GeV/c^{2}}",meanGaussnoPID,sigmaGaussnoPID));
+       if (sigmaGaussnoPID > refwidth - 0.0003 && sigmaGaussnoPID < refwidth + 0.0003) pave2->AddText("#color[3]{OK!! The width is compatible with standard.}");
+       else                                                                            pave2->AddText("#color[2]{NOT OK!! Problem.}");
+       pave2->Draw();
+       cout<<"   "<<refwidth - 0.0003<<"<"<<sigmaGaussnoPID<<"<"<<refwidth + 0.0003<<endl;
+     c4->SaveAs("fig_lf_Multistrange.pdf");
+
 
      //________________________________ 
-     //DEFINE 5th CANVAS AND DRAW PLOTS
-     if (collidingsystem == 0 || collidingsystem == 2) {
-         TCanvas *c5 = new TCanvas("c5","",600,720);//1200,270);
-         c5->cd(1);
-         TH1D *hvar16 = cf->ShowProjection(19,icasType);
-         hvar16->Draw("histo");
-         if      (!isMC) c5->SaveAs("fig_lf_Multistrange.pdf)");
-         else if (isMC) c5->SaveAs("fig_lf_Multistrange.pdf");
-     }
-    
+     //DEFINE 6th CANVAS AND DRAW PLOTS
+     TCanvas *c6 = new TCanvas("c6","",1200,400);//1200,270);
+     c6->Divide(2,1);
+       //Pad 1: Event Selection
+       c6->cd(1);
+       TH1D* hvar26 = hlist->FindObject(Form("fHistEventSel"));
+       hvar26->Draw("histo");
+       //Pad 2: Centrality/Multiplicity distribution
+       c6->cd(2);
+       TH1D *hvar16 = cf->ShowProjection(19,icasType);
+       hvar16->Draw("histo");
+     if      (!isMC) c6->SaveAs("fig_lf_Multistrange.pdf)");
+     else if (isMC) c6->SaveAs("fig_lf_Multistrange.pdf");
 
 
      //_______________________________
@@ -496,34 +537,34 @@ void PostProcessQAMultistrange(Int_t   icasType        = 0,
            
             AliCFContainer *cfMC = (AliCFContainer*) (f1->Get("PWGLFStrangeness.outputCheckCascade/fCFContCascadeMCgen"));
             //DEFINE 6th CANVAS AND DRAW PLOTS
-            TCanvas *c6 = new TCanvas("c6","",1200,800);
-            c6->Divide(2,3);
+            TCanvas *c7 = new TCanvas("c7","",1200,800);
+            c7->Divide(2,3);
             //Pad 1: Total Momentum
-            c6->cd(1);
+            c7->cd(1);
             TH1D *hvar17 = cfMC->ShowProjection(0,icasType);
             hvar17->Draw("histo");
             tcasc->Draw();
             //Pad 2: Transverse Momentum
-            c6->cd(2);
+            c7->cd(2);
             TH1D *hvar18 = cfMC->ShowProjection(1,icasType);
             hvar18->Draw("histo");
             //Pad 3: Rapidity (y)
-            c6->cd(3);
+            c7->cd(3);
             TH1D *hvar19 = cfMC->ShowProjection(2,icasType);
             hvar19->Draw("histo");
             //Pad 4: Pseudo-rapidity (eta)
-            c6->cd(4);
+            c7->cd(4);
             TH1D *hvar20 = cfMC->ShowProjection(3,icasType);
             hvar20->Draw("histo");
             //Pad 5: Theta
-            c6->cd(5);
+            c7->cd(5);
             TH1D *hvar21 = cfMC->ShowProjection(4,icasType);
             hvar21->Draw("histo");
             //Pad 6: Phi
-            c6->cd(6);
+            c7->cd(6);
             TH1D *hvar22 = cfMC->ShowProjection(5,icasType);
             hvar22->Draw("histo");
-            c6->SaveAs("fig_lf_Multistrange.pdf)");
+            c7->SaveAs("fig_lf_Multistrange.pdf)");
      }