]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
new version of the LRC code (Christoph Mayer <Christoph.Mayer@cern.ch>)
authormiweber <miweber@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 6 Oct 2013 10:59:23 +0000 (10:59 +0000)
committermiweber <miweber@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 6 Oct 2013 10:59:23 +0000 (10:59 +0000)
PWGCF/Correlations/DPhi/AliAnalysisTaskLongRangeCorrelations.cxx
PWGCF/Correlations/DPhi/AliAnalysisTaskLongRangeCorrelations.h
PWGCF/Correlations/macros/AddTaskLongRangeCorrelations.C

index 696288875e4335e5a1d64c294f9416a39cb28adb..09328745ca5379055fd3fb2f8c351e0157f039c0 100644 (file)
@@ -13,7 +13,7 @@
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-// $Id: AliAnalysisTaskLongRangeCorrelations.cxx 313 2013-06-28 16:43:30Z cmayer $
+// $Id: AliAnalysisTaskLongRangeCorrelations.cxx 341 2013-09-30 15:59:19Z cmayer $
 
 #include <numeric>
 #include <functional>
@@ -36,6 +36,9 @@
 #include "AliLog.h"
 #include "AliTHn.h"
 
+#include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
 #include "AliAnalysisTaskLongRangeCorrelations.h"
 
 
@@ -54,6 +57,8 @@ AliAnalysisTaskLongRangeCorrelations::AliAnalysisTaskLongRangeCorrelations(const
   , fPtMin(0.2), fPtMax(1e10)
   , fPhiMin(0.), fPhiMax(TMath::TwoPi())
   , fMaxAbsVertexZ(10.)
+  , fSelectPrimaryMCParticles(0)
+  , fSelectPrimaryMCDataParticles(0)
   , fnBinsCent( 220), fnBinsPt(400), fnBinsPhi(4),              fnBinsEta(120)
   , fxMinCent( -5.0), fxMinPt( 0.0), fxMinPhi( 0.0),            fxMinEta(-1.5)
   , fxMaxCent(105.0), fxMaxPt( 4.0), fxMaxPhi( TMath::TwoPi()), fxMaxEta( 1.5) {
@@ -213,7 +218,7 @@ void AliAnalysisTaskLongRangeCorrelations::UserExec(Option_t* ) {
   // event is accepted
   // ------------------
 
-  TObjArray* tracksMain(GetAcceptedTracks(pAOD, centrality));
+  TObjArray* tracksMain(GetAcceptedTracks(pAOD, arrayMC, centrality));
   Fill("histQAMultiplicityBeforeCuts", pAOD->GetNumberOfTracks());
   Fill("histQAMultiplicityAfterCuts", tracksMain->GetEntriesFast());
   
@@ -273,6 +278,14 @@ TString AliAnalysisTaskLongRangeCorrelations::GetOutputListName() const {
   listName += TString::Format("_cent%.0fT%.0f", fCentMin, fCentMax);
   listName += TString::Format("_ptMin%.0fMeV",  1e3*fPtMin);
   listName += TString::Format("_phi%.0fT%.0f",  TMath::RadToDeg()*fPhiMin, TMath::RadToDeg()*fPhiMax);
+  if ( 1 == fSelectPrimaryMCParticles)
+    listName += "_selPrimMC";
+  if (-1 == fSelectPrimaryMCParticles)
+    listName += "_selNonPrimMC";
+  if ( 1 == fSelectPrimaryMCDataParticles)
+    listName += "_selPrimMCData";
+  if (-1 == fSelectPrimaryMCDataParticles)
+    listName += "_selNonPrimMCData";
   return listName;
 }
 
@@ -326,8 +339,9 @@ AliTHn* AliAnalysisTaskLongRangeCorrelations::MakeHistPhiEtaPhiEta(const char* n
   return h;
 }
 
-TObjArray* AliAnalysisTaskLongRangeCorrelations::GetAcceptedTracks(AliAODEvent* pAOD,
-                                                                  Double_t centrality) {
+TObjArray* AliAnalysisTaskLongRangeCorrelations::GetAcceptedTracks(AliAODEvent*  pAOD,
+                                                                  TClonesArray* arrayMC,
+                                                                  Double_t      centrality) {
   TObjArray* tracks= new TObjArray;
   tracks->SetOwner(kTRUE);
 
@@ -343,9 +357,34 @@ TObjArray* AliAnalysisTaskLongRangeCorrelations::GetAcceptedTracks(AliAODEvent*
     // select only primary tracks
     if (pAODTrack->GetType() != AliAODTrack::kPrimary) continue;
 
+    if (NULL != arrayMC) {
+      const Int_t label(pAODTrack->GetLabel());
+      AliAODMCParticle* mcParticle((label >= 0) 
+                                  ? static_cast<AliAODMCParticle*>(arrayMC->At(label))
+                                  : NULL);
+      if (label >=0 && NULL == mcParticle)
+       AliFatal("MC particle not found");
+
+      switch (fSelectPrimaryMCDataParticles) {
+      case -1:
+       if (label < 0) continue;
+       if (kTRUE  == mcParticle->IsPhysicalPrimary()) continue;
+       break;
+      case  0:
+       // NOP, take all tracks
+       break;
+      case  1:
+       if (label < 0) continue;
+       if (kFALSE == mcParticle->IsPhysicalPrimary()) continue;
+       break;
+      default:
+       AliFatal("fSelectPrimaryMCDataParticles != {-1,0,1}");
+      }            
+    }
+
     // select only charged tracks
     if (pAODTrack->Charge() == 0) continue;
-
+    
     Fill("histQACentPt", pAODTrack->Charge()>0, centrality,       pAODTrack->Pt());
     Fill("histQAPhiEta", pAODTrack->Charge()>0, pAODTrack->Phi(), pAODTrack->Eta());
     if (pAODTrack->Phi() < fPhiMin || pAODTrack->Phi() > fPhiMax) continue;
@@ -377,9 +416,20 @@ TObjArray* AliAnalysisTaskLongRangeCorrelations::GetAcceptedTracks(TClonesArray*
       continue;
     }
     labelSet.insert(pMCTrack->Label());    
-
-    // select only primary tracks
-    if (kFALSE == pMCTrack->IsPhysicalPrimary()) continue;
+    
+    switch (fSelectPrimaryMCParticles) {
+    case -1:
+      if (kTRUE == pMCTrack->IsPhysicalPrimary()) continue;
+      break;
+    case  0:
+      // NOP, take all MC tracks
+      break;
+    case  1:
+      if (kFALSE == pMCTrack->IsPhysicalPrimary()) continue;
+      break;
+    default:
+      AliFatal("fSelectPrimaryMCParticles != {-1,0,1}");
+    }
 
     // select only charged tracks
     if (pMCTrack->Charge() == 0) continue;
index d2c0216db8115e508111f58d29c8e4a5114f33f6..3dc809ad1a647253218b4439dc8c136697526777 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-// $Id: AliAnalysisTaskLongRangeCorrelations.h 313 2013-06-28 16:43:30Z cmayer $
+// $Id: AliAnalysisTaskLongRangeCorrelations.h 341 2013-09-30 15:59:19Z cmayer $
 #ifndef _AliAnalysisTaskLongRangeCorrelations_H_
 #define _AliAnalysisTaskLongRangeCorrelations_H_
 
@@ -59,6 +59,11 @@ public:
   }
   void SetMaxAbsVertexZ(Double_t maxAbsVertexZ) { fMaxAbsVertexZ = maxAbsVertexZ; }
 
+  void SetSelectPrimaryMCParticles(Int_t flagMC, Int_t flagMCData) {
+    fSelectPrimaryMCParticles     = flagMC;
+    fSelectPrimaryMCDataParticles = flagMCData;
+  }
+
   TString GetOutputListName() const;
 
 protected:
@@ -71,7 +76,7 @@ protected:
   THnSparse* ComputeNForThisEvent(TObjArray*, const char*, Double_t) const;
   void       FillNEtaHist(TString, THnSparse*, Double_t);
 
-  TObjArray* GetAcceptedTracks(AliAODEvent*, Double_t);
+  TObjArray* GetAcceptedTracks(AliAODEvent*, TClonesArray*, Double_t);
   TObjArray* GetAcceptedTracks(TClonesArray*, Double_t);
 
   // filling histograms by name
@@ -97,6 +102,8 @@ private:
   Double_t             fPtMin, fPtMax;      // P_{T} range
   Double_t             fPhiMin, fPhiMax;    // #phi range
   Double_t             fMaxAbsVertexZ;      // max abs(zvertex)
+  Int_t                fSelectPrimaryMCParticles;     // 0: no, 1: yes, -1: only non-primary particles
+  Int_t                fSelectPrimaryMCDataParticles; // 0: no, 1: yes, -1: only non-primary particles
   // histogram data
   Int_t    fnBinsCent, fnBinsPt, fnBinsPhi, fnBinsEta;
   Double_t fxMinCent,  fxMinPt,  fxMinPhi,  fxMinEta;
index 11628672934dc6b2396046c4f8a6f586dc37f5b7..52b2f7798c78bc078cc33ddd24f2d3aee35157be 100644 (file)
@@ -1,11 +1,14 @@
 // -*- c++ -*-
-// $Id: AddTaskLongRangeCorrelations.C 232 2012-11-28 17:27:59Z cmayer $
+// $Id: AddTaskLongRangeCorrelations.C 341 2013-09-30 15:59:19Z cmayer $
+
+const Double_t centMin[] = {  0,  0, 10, 20, 30, 40, 50, 60, 70,  80 };
+const Double_t centMax[] = {  5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
 
 AliAnalysisTaskLongRangeCorrelations*
 AddTaskLongRangeCorrelations(Int_t  trackFilter  = 128, // TPC only
                             Bool_t runMixing    = !kTRUE,
                             Int_t  mixingTracks = 50000,
-                            Double_t centMin = 0, Double_t centMax = 20,
+                            Int_t selPrimMC  = 0, Int_t selPrimMCData = 0,
                             Double_t ptMin   = 0.2, 
                             Double_t phiMin  = 0, Double_t phiMax  = TMath::TwoPi()) {
 
@@ -24,22 +27,29 @@ AddTaskLongRangeCorrelations(Int_t  trackFilter  = 128, // TPC only
     return NULL;
   }
 
-  AliAnalysisTaskLongRangeCorrelations *taskLRC = new AliAnalysisTaskLongRangeCorrelations("TaskLongRangeCorrelations");
-  taskLRC->SetRunMixing(runMixing);
-  taskLRC->SetMixingTracks(mixingTracks);
-  taskLRC->SetTrackFilter(trackFilter);
-  taskLRC->SetCentralityRange(centMin, centMax);
-  taskLRC->SetPtRange(ptMin, 1e20);
-  taskLRC->SetPhiRange(phiMin, phiMax);
-  taskLRC->SelectCollisionCandidates(AliVEvent::kMB);
-  mgr->AddTask(taskLRC);
-
+  AliAnalysisTaskLongRangeCorrelations *taskLRC = NULL;
+  AliAnalysisDataContainer             *listLRC = NULL;
   TString outputFileName = AliAnalysisManager::GetCommonFileName();
   outputFileName += ":PWGCFEbyE.outputLongRangeCorrelations.root";
-  AliAnalysisDataContainer *listLRC = mgr->CreateContainer(taskLRC->GetOutputListName(), TList::Class(),
-                                                          AliAnalysisManager::kOutputContainer,
-                                                          outputFileName.Data());
-  mgr->ConnectInput(taskLRC,  0, mgr->GetCommonInputContainer());
-  mgr->ConnectOutput(taskLRC, 1, listLRC);
+
+  for (Int_t i=0; i<sizeof(centMin)/sizeof(Double_t); ++i) {
+    taskLRC = new AliAnalysisTaskLongRangeCorrelations("TaskLongRangeCorrelations");
+    taskLRC->SetRunMixing(runMixing);
+    taskLRC->SetMixingTracks(mixingTracks);
+    taskLRC->SetTrackFilter(trackFilter);
+    taskLRC->SetCentralityRange(centMin[i], centMax[i]);
+    taskLRC->SetPtRange(ptMin, 1e20);
+    taskLRC->SetPhiRange(phiMin, phiMax);
+    taskLRC->SelectCollisionCandidates(AliVEvent::kMB);
+    taskLRC->SetSelectPrimaryMCParticles(selPrimMC, selPrimMCData);
+
+    listLRC = mgr->CreateContainer(taskLRC->GetOutputListName(), TList::Class(),
+                                  AliAnalysisManager::kOutputContainer,
+                                  outputFileName.Data());
+    mgr->AddTask(taskLRC);
+    mgr->ConnectInput(taskLRC,  0, mgr->GetCommonInputContainer());
+    mgr->ConnectOutput(taskLRC, 1, listLRC);
+  }
+
   return taskLRC;
 }