]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
adding possibility to use true impact parameter for centrality slicing
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Nov 2013 14:03:59 +0000 (14:03 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Nov 2013 14:03:59 +0000 (14:03 +0000)
PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx
PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.h

index 6d12849e4d4b4ff25a3f5f418e549fdb377d6368..a5229c0ff0c3272c14080fd6d22663937cb278a7 100644 (file)
@@ -49,6 +49,7 @@
 #include "AliAODMCHeader.h"
 #include "AliGenCocktailEventHeader.h"
 #include "AliGenEventHeader.h"
+#include "AliCollisionGeometry.h"
 
 #include "AliEventPoolManager.h"
 
@@ -451,26 +452,50 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
   
   if (fCentralityMethod.Length() > 0)
   {
-    AliCentrality *centralityObj = 0;
-    if (fAOD)
-      centralityObj = fAOD->GetHeader()->GetCentralityP();
-    else if (fESD)
-      centralityObj = fESD->GetCentrality();
-    
-    if (centralityObj)
+    if (fCentralityMethod == "MC_b")
     {
-      if (fMCUseUncheckedCentrality)
-       centrality = centralityObj->GetCentralityPercentileUnchecked(fCentralityMethod);
-      else
-       centrality = centralityObj->GetCentralityPercentile(fCentralityMethod);
+      AliGenEventHeader* eventHeader = GetFirstHeader();
+      if (!eventHeader)
+      {
+       // We avoid AliFatal here, because the AOD productions sometimes have events where the MC header is missing 
+       // (due to unreadable Kinematics) and we don't want to loose the whole job because of a few events
+       AliError("Event header not found. Skipping this event.");
+       fHistos->FillEvent(0, AliUEHist::kCFStepAnaTopology);
+       return;
+      }
       
-      AliInfo(Form("Centrality is %f", centrality));
+      AliCollisionGeometry* collGeometry = dynamic_cast<AliCollisionGeometry*> (eventHeader);
+      if (!collGeometry)
+      {
+       eventHeader->Dump();
+       AliFatal("Asking for MC_b centrality, but event header has no collision geometry information");
+      }
+      
+      centrality = collGeometry->ImpactParameter();
     }
     else
     {
-      Printf("WARNING: Centrality object is 0");
-      centrality = -1;
-     }
+      AliCentrality *centralityObj = 0;
+      if (fAOD)
+       centralityObj = fAOD->GetHeader()->GetCentralityP();
+      else if (fESD)
+       centralityObj = fESD->GetCentrality();
+      
+      if (centralityObj)
+      {
+       if (fMCUseUncheckedCentrality)
+         centrality = centralityObj->GetCentralityPercentileUnchecked(fCentralityMethod);
+       else
+         centrality = centralityObj->GetCentralityPercentile(fCentralityMethod);
+      }
+      else
+      {
+       Printf("WARNING: Centrality object is 0");
+       centrality = -1;
+      }
+    }
+
+    AliInfo(Form("Centrality is %f", centrality));
   }
   
   // Support for ESD and AOD based analysis
@@ -881,6 +906,35 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
   delete tracksMC;
 }
 
+//____________________________________________________________________
+AliGenEventHeader* AliAnalysisTaskPhiCorrelations::GetFirstHeader()
+{
+  // get first MC header from either ESD/AOD (including cocktail header if available)
+  
+  if (fMcEvent)
+  {
+    // ESD
+    AliHeader* header = (AliHeader*) fMcEvent->Header();
+    if (!header)
+      return 0;
+      
+    AliGenCocktailEventHeader* cocktailHeader = dynamic_cast<AliGenCocktailEventHeader*> (header->GenEventHeader());
+    if (cocktailHeader)
+      return dynamic_cast<AliGenEventHeader*> (cocktailHeader->GetHeaders()->First());
+
+    return dynamic_cast<AliGenEventHeader*> (header);
+  }
+  else
+  {
+    // AOD
+    AliAODMCHeader* header = (AliAODMCHeader*) fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+    if (!header)
+      return 0;
+    
+    return header->GetCocktailHeader(0);
+  }
+}
+
 //____________________________________________________________________
 void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
 {
index 4e00bf54a6f1943f83827ad18522b6b956fd1f61..5e2308ce465c0b9bca9fe516c0017b2b3e9981a1 100644 (file)
@@ -48,6 +48,7 @@ class AliHelperPID;
 class AliAnalysisUtils;
 class TFormula;
 class TMap;
+class AliGenEventHeader;
 
 
 class  AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
@@ -139,6 +140,7 @@ class  AliAnalysisTaskPhiCorrelations : public AliAnalysisTask
     void RemoveDuplicates(TObjArray* tracks);
     void CleanUp(TObjArray* tracks, TObject* mcObj, Int_t maxLabel);
     void SelectCharge(TObjArray* tracks);
+    AliGenEventHeader* GetFirstHeader();
 
     // General configuration
     Int_t               fDebug;           //  Debug flag