]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskExtractPerformanceCascade.cxx
Implementation to reduce output size in Pb-Pb central collisions
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskExtractPerformanceCascade.cxx
index 977a08bc53b301e2b5805bf083c4e7b80930e923..48e4dcbc033a32ba52b6381f31619de0f946e6ee 100644 (file)
@@ -105,6 +105,10 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fEtaRefMult ( 0.5 ),
    fkRunVertexers ( kFALSE ),
    fkCheckSwapping( kFALSE ),
+fkSelectCentrality (kFALSE),
+fCentSel_Low(0.0),
+fCentSel_High(0.0),
+fLowPtCutoff(0.0),
 //------------------------------------------------
 // Tree Variables
 //------------------------------------------------
@@ -162,6 +166,13 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarkITSRefitNegative(0),
    fTreeCascVarkITSRefitPositive(0),
 
+    fTreeCascVarNegClusters(0),
+    fTreeCascVarPosClusters(0),
+    fTreeCascVarBachClusters(0),
+    fTreeCascVarNegSharedClusters(0),
+    fTreeCascVarPosSharedClusters(0),
+    fTreeCascVarBachSharedClusters(0),
+
    fTreeCascVarEvHasXiMinus(0),
    fTreeCascVarEvHasXiPlus(0),
    fTreeCascVarEvHasOmegaMinus(0),
@@ -183,6 +194,9 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarEvHasVeryLowPtLambda(0),
    fTreeCascVarEvHasVeryLowPtAntiLambda(0),
 
+    fTreeCascVarBadCascadeJai(0),
+    fTreeCascVarDeltaDCA(0),
+
 //------------------------------------------------
 // HISTOGRAMS
 // --- Filled on an Event-by-event basis
@@ -285,6 +299,10 @@ f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus(0),
 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus(0),
 
 //ZNA
 
@@ -364,6 +382,10 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fEtaRefMult ( 0.5 ),
    fkRunVertexers ( kFALSE ),
    fkCheckSwapping( kFALSE ),
+fkSelectCentrality (kFALSE),
+fCentSel_Low(0.0),
+fCentSel_High(0.0),
+fLowPtCutoff(0.0),
 //------------------------------------------------
 // Tree Variables
 //------------------------------------------------
@@ -420,6 +442,13 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarkITSRefitBachelor(0),
    fTreeCascVarkITSRefitNegative(0),
    fTreeCascVarkITSRefitPositive(0),
+   
+    fTreeCascVarNegClusters(0),
+    fTreeCascVarPosClusters(0),
+    fTreeCascVarBachClusters(0),
+    fTreeCascVarNegSharedClusters(0),
+    fTreeCascVarPosSharedClusters(0),
+    fTreeCascVarBachSharedClusters(0),
 
    fTreeCascVarEvHasXiMinus(0),
    fTreeCascVarEvHasXiPlus(0),
@@ -441,6 +470,9 @@ AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCasca
    fTreeCascVarEvHasVeryLowPtOmegaPlus(0),
    fTreeCascVarEvHasVeryLowPtLambda(0),
    fTreeCascVarEvHasVeryLowPtAntiLambda(0),
+   
+    fTreeCascVarBadCascadeJai(0),
+    fTreeCascVarDeltaDCA(0),
 
 //------------------------------------------------
 // HISTOGRAMS
@@ -543,6 +575,10 @@ f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus(0),
 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus(0),
+f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus(0),
 
 //ZNA
 
@@ -708,6 +744,13 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
 /*21*/         fTreeCascade->Branch("fTreeCascVarV0CosPointingAngleSpecial",&fTreeCascVarV0CosPointingAngleSpecial,"fTreeCascVarV0CosPointingAngleSpecial/F");
 /*22*/         fTreeCascade->Branch("fTreeCascVarV0Radius",&fTreeCascVarV0Radius,"fTreeCascVarV0Radius/F");
 /*23*/         fTreeCascade->Branch("fTreeCascVarLeastNbrClusters",&fTreeCascVarLeastNbrClusters,"fTreeCascVarLeastNbrClusters/I");
+
+/*23*/         fTreeCascade->Branch("fTreeCascVarNegClusters",&fTreeCascVarNegClusters,"fTreeCascVarNegClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarPosClusters",&fTreeCascVarPosClusters,"fTreeCascVarPosClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarBachClusters",&fTreeCascVarBachClusters,"fTreeCascVarBachClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarNegSharedClusters",&fTreeCascVarNegSharedClusters,"fTreeCascVarNegSharedClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarPosSharedClusters",&fTreeCascVarPosSharedClusters,"fTreeCascVarPosSharedClusters/I");
+/*23*/         fTreeCascade->Branch("fTreeCascVarBachSharedClusters",&fTreeCascVarBachSharedClusters,"fTreeCascVarBachSharedClusters/I");
 //-----------MULTIPLICITY-INFO--------------------
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicity",&fTreeCascVarMultiplicity,"fTreeCascVarMultiplicity/I");
 /*24*/         fTreeCascade->Branch("fTreeCascVarMultiplicityV0A",&fTreeCascVarMultiplicityV0A,"fTreeCascVarMultiplicityV0A/I");
@@ -741,6 +784,13 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
 /*29*/         fTreeCascade->Branch("fTreeCascVarkITSRefitNegative",&fTreeCascVarkITSRefitNegative,"fTreeCascVarkITSRefitNegative/O");
 /*29*/         fTreeCascade->Branch("fTreeCascVarkITSRefitPositive",&fTreeCascVarkITSRefitPositive,"fTreeCascVarkITSRefitPositive/O");
 
+      fTreeCascade->Branch("fTreeCascVarNegClusters",&fTreeCascVarNegClusters,"fTreeCascVarNegClusters/I");
+      fTreeCascade->Branch("fTreeCascVarPosClusters",&fTreeCascVarPosClusters,"fTreeCascVarPosClusters/I");
+      fTreeCascade->Branch("fTreeCascVarBachClusters",&fTreeCascVarBachClusters,"fTreeCascVarBachClusters/I");
+      fTreeCascade->Branch("fTreeCascVarNegSharedClusters",&fTreeCascVarNegSharedClusters,"fTreeCascVarNegSharedClusters/I");
+      fTreeCascade->Branch("fTreeCascVarPosSharedClusters",&fTreeCascVarPosSharedClusters,"fTreeCascVarPosSharedClusters/I");
+      fTreeCascade->Branch("fTreeCascVarBachSharedClusters",&fTreeCascVarBachSharedClusters,"fTreeCascVarBachSharedClusters/I");
+
 /*39*/         fTreeCascade->Branch("fTreeCascVarEvHasXiMinus",   &fTreeCascVarEvHasXiMinus,   "fTreeCascVarEvHasXiMinus/O");
 /*39*/         fTreeCascade->Branch("fTreeCascVarEvHasXiPlus",    &fTreeCascVarEvHasXiPlus,    "fTreeCascVarEvHasXiPlus/O");
 /*39*/         fTreeCascade->Branch("fTreeCascVarEvHasOmegaMinus",&fTreeCascVarEvHasOmegaMinus,"fTreeCascVarEvHasOmegaMinus/O");
@@ -762,6 +812,9 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
 /*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtLambda",    &fTreeCascVarEvHasVeryLowPtLambda,    "fTreeCascVarEvHasVeryLowPtLambda/O");
 /*39*/         fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtAntiLambda",&fTreeCascVarEvHasVeryLowPtAntiLambda,"fTreeCascVarEvHasVeryLowPtAntiLambda/O");
 
+      fTreeCascade->Branch("fTreeCascVarBadCascadeJai",&fTreeCascVarBadCascadeJai,"fTreeCascVarBadCascadeJai/O");
+      fTreeCascade->Branch("fTreeCascVarDeltaDCA",&fTreeCascVarDeltaDCA,"fTreeCascVarDeltaDCA/F");
+
 //------------------------------------------------
 // Particle Identification Setup
 //------------------------------------------------
@@ -1276,6 +1329,27 @@ void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus);
   }
   
+    //Cross-check primary selection criteria
+    //Should not impact much but inspired by rumors of DPMJet issues with primary selection (?)
+    
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus);
+    }
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus);
+    }
+    //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+    
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus);
+    }
+    if(! f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus) {
+        f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus = new TH3F( "f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+        if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus);
+    }
   
   //======================================================================================
   //--------------------------------------------------------------------------------------
@@ -1714,6 +1788,16 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
         return;
       }
    }
+    
+    if( fkSelectCentrality ){
+        if( lMultiplicity < fCentSel_Low || lMultiplicity >= fCentSel_High ){
+            //Event is outside desired centrality centrality in V0M!
+            PostData(1, fListHist);
+            PostData(2, fTreeCascade);
+            return;
+        }
+    }
+    
   
    //Set variable for filling tree afterwards!
    //---> pp case......: GetReferenceMultiplicity
@@ -2197,6 +2281,52 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
    }
 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
 
+    
+    //----- Loop on primary Xi, Omega --------------------------------------------------------------
+    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
+    {// This is the begining of the loop on primaries
+        
+        TParticle* lCurrentParticlePrimary = 0x0;
+        lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
+        if(!lCurrentParticlePrimary){
+            Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+            continue;
+        }
+        if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
+            Double_t lRapXiMCPrimary = -100;
+            if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
+                if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
+                    lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
+                }
+            }
+            //IsPhysicalPrimary: Cross-check with old index test
+            // (cascades -> negligible difference ?... )
+            if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
+            
+            //=================================================================================
+            // Xi Histograms
+            if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+            if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+            // Omega Histograms
+            if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+            if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
+                lPtCurrentPart    = lCurrentParticlePrimary->Pt();
+                f3dHistGenSelectedPrimPtVsYCMSVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
+            }
+        }
+    }
+    //----- End Loop on primary Xi, Omega ----------------------------------------------------------
+
+    
 //------------------------------------------------
 // MAIN CASCADE LOOP STARTS HERE
 //------------------------------------------------
@@ -2334,6 +2464,11 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
       fTreeCascVarNegEta = nTrackXi->Eta();
       fTreeCascVarBachEta = bachTrackXi->Eta();
       
+            //Save shared clusters information
+      fTreeCascVarNegSharedClusters = nTrackXi->GetTPCnclsS(0,159);
+      fTreeCascVarPosSharedClusters = pTrackXi->GetTPCnclsS(0,159);
+      fTreeCascVarBachSharedClusters = bachTrackXi->GetTPCnclsS(0,159);
+      
       Double_t lBMom[3], lNMom[3], lPMom[3];
       xi->GetBPxPyPz( lBMom[0], lBMom[1], lBMom[2] );
       xi->GetPPxPyPz( lPMom[0], lPMom[1], lPMom[2] );
@@ -2363,6 +2498,10 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
          lNegTPCClusters   = nTrackXi->GetTPCNcls();
          lBachTPCClusters  = bachTrackXi->GetTPCNcls(); 
 
+      fTreeCascVarNegClusters = lNegTPCClusters;
+      fTreeCascVarPosClusters = lPosTPCClusters;
+      fTreeCascVarBachClusters = lBachTPCClusters;
+
     fTreeCascVarkITSRefitBachelor = kTRUE; 
     fTreeCascVarkITSRefitNegative = kTRUE; 
     fTreeCascVarkITSRefitPositive = kTRUE; 
@@ -2676,6 +2815,27 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
 // Swapped MC ASSOCIATION ENDS HERE
 //----------------------------------------
 
+  //------------------------------------------------
+  // Jai Salzwedel's femto-cut: better V0 exists
+  //------------------------------------------------                     
+
+  fTreeCascVarBadCascadeJai = kFALSE; 
+  fTreeCascVarDeltaDCA = -100;
+  Float_t DCAV0DaughtersDiff = -100; 
+  for (Int_t iv0=0; iv0<lESDevent->GetNumberOfV0s(); iv0++) {
+    AliESDv0 *v0 = lESDevent->GetV0(iv0);
+    UInt_t posV0TrackIdx = (UInt_t) v0->GetPindex();
+    UInt_t negV0TrackIdx = (UInt_t) v0->GetNindex();
+    if ((posV0TrackIdx == lIdxPosXi) && (negV0TrackIdx == lIdxNegXi)) continue;
+      // if both tracks are the same ones as the cascades V0 daughter tracks, then the V0 belongs to the cascade being analysed; so avoid it
+    if ((posV0TrackIdx == lIdxPosXi) || (negV0TrackIdx == lIdxNegXi)) {
+    DCAV0DaughtersDiff = lDcaV0DaughtersXi - v0->GetDcaV0Daughters();
+    if( fTreeCascVarDeltaDCA < DCAV0DaughtersDiff ) fTreeCascVarDeltaDCA = DCAV0DaughtersDiff;
+      if ( lDcaV0DaughtersXi > v0->GetDcaV0Daughters() )  {    // DCA comparison criterion
+        fTreeCascVarBadCascadeJai = kTRUE;
+      } //end DCA comparison 
+    } // end shares a daughter check 
+  } //end V0 loop 
 
   //------------------------------------------------
   // Set Variables for adding to tree
@@ -2726,10 +2886,20 @@ void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *)
   //Xi    Mass window: 150MeV wide
   //Omega mass window: 150MeV wide
 
-  if( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
-      (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ){
-      fTreeCascade->Fill();
-  }
+      if( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
+         (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ){
+          
+          if( !fkIsNuclear ) fTreeCascade->Fill();
+          if( fkIsNuclear  ){
+              //Extra selections in case this is a nuclear collision...
+              if (TMath::Abs(fTreeCascVarNegEta) < 0.8 &&
+                  TMath::Abs(fTreeCascVarPosEta) < 0.8 &&
+                  TMath::Abs(fTreeCascVarBachEta) < 0.8 &&
+                  fTreeCascVarPt > fLowPtCutoff){ //beware ptMC and ptreco differences
+                  fTreeCascade->Fill();
+              }
+          }
+      }
 
 //------------------------------------------------
 // Fill tree over.