Added new filter cuts and MC particle filter. Muon filter activated by default as...
authoragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Apr 2009 06:19:58 +0000 (06:19 +0000)
committeragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Apr 2009 06:19:58 +0000 (06:19 +0000)
Macros AddTaskGammaHadronCorr.C and AddTaskPi0.C replaced with PWG4/macros/AddTaskPartCorr.C (M.Gheata)

ANALYSIS/macros/AddTaskESDFilter.C
ANALYSIS/macros/AddTaskGammaHadronCorr.C [deleted file]
ANALYSIS/macros/AddTaskPi0.C [deleted file]
ANALYSIS/macros/AnalysisTrainNew.C

index f303a4b..e9729b7 100644 (file)
@@ -1,4 +1,4 @@
-AliAnalysisTaskESDfilter *AddTaskESDFilter()
+AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE)
 {
 // Creates a filter task and adds it to the analysis manager.
 
@@ -23,28 +23,64 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter()
    if (!aod_h) {
       ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler.");
       return NULL;
+   }
+   // Check if MC handler is connected in case kine filter requested
+   AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
+   if (!mcH && useKineFilter) {
+      ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested");
+      return NULL;
    }   
    
+   // Filtering of MC particles (decays conversions etc)
+   // this task is also needed to set the MCEventHandler
+   // to the AODHandler, this will not be needed when
+   // AODHandler goes to ANALYSISalice
+   if (useKineFilter) {
+      AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
+      mgr->AddTask(kinefilter);
+   }   
+
    // Create the task, add it to the manager and configure it.
-   //===========================================================================
-   
-   // Set of cuts plugged into the ESD filter
+   //===========================================================================   
+   // Barrel tracks filter
    AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
    mgr->AddTask(esdfilter);
-   AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Loose");
-   esdTrackCutsL->SetMinNClustersTPC(50);   
+   // Muons
+   AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
+   mgr->AddTask(esdmuonfilter);
+   
+   // Cuts on primary tracks
+   AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard");
+   esdTrackCutsL->SetMinNClustersTPC(50);
    esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
-   esdTrackCutsL->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
+   esdTrackCutsL->SetMaxCovDiagonalElements(2, 2, 0.5, 0.5, 2);
    esdTrackCutsL->SetRequireTPCRefit(kTRUE);
-   esdTrackCutsL->SetMinNsigmaToVertex(3);
-   esdTrackCutsL->SetRequireSigmaToVertex(kTRUE);
-   esdTrackCutsL->SetAcceptKingDaughters(kFALSE);
-   //
+   esdTrackCutsL->SetMaxDCAToVertexXY(3.0);
+   esdTrackCutsL->SetMaxDCAToVertexZ(3.0);
+   esdTrackCutsL->SetDCAToVertex2D(kTRUE);
+   esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);
+   esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);
+   // ITS stand-alone tracks
+   AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("AliESDtrackCuts", "ITS stand-alone");
+   esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
+
    AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
    trackFilter->AddCuts(esdTrackCutsL);
-   //
+   trackFilter->AddCuts(esdTrackCutsITSsa);
+
+   // Cuts on V0s
+   AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("AliESDv0Cuts", "Standard pp");
+   esdV0Cuts->SetMinRadius(0.2);
+   esdV0Cuts->SetMaxRadius(100);
+   esdV0Cuts->SetMinDcaPosToVertex(0.05);
+   esdV0Cuts->SetMinDcaNegToVertex(0.05);
+   esdV0Cuts->SetMaxDcaV0Daughters(0.5);
+   esdV0Cuts->SetMinCosinePointingAngle(0.99);
+   AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
+   v0Filter->AddCuts(esdV0Cuts);
+
    esdfilter->SetTrackFilter(trackFilter);
-   esdfilter->SetDebugLevel(10);
+   esdfilter->SetV0Filter(v0Filter);
 
 
    // Create ONLY the output containers for the data produced by the task.
@@ -52,6 +88,10 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter()
    //==============================================================================
    mgr->ConnectInput  (esdfilter,  0, mgr->GetCommonInputContainer());
    mgr->ConnectOutput (esdfilter,  0, mgr->GetCommonOutputContainer());
+   mgr->ConnectInput  (esdmuonfilter, 0, mgr->GetCommonInputContainer());
+   if (useKineFilter) {
+      mgr->ConnectInput  (kinefilter,  0, mgr->GetCommonInputContainer());
+      mgr->ConnectOutput (kinefilter,  0, mgr->GetCommonOutputContainer());
+   }   
    return esdfilter;
 }   
-   
diff --git a/ANALYSIS/macros/AddTaskGammaHadronCorr.C b/ANALYSIS/macros/AddTaskGammaHadronCorr.C
deleted file mode 100644 (file)
index af19262..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-AliAnalysisTaskParticleCorrelation *AddTaskGammaHadronCorr()
-{
-// Creates a gamma-hadron correlations task and adds it to the analysis manager.
-
-   // Get the pointer to the existing analysis manager via the static access method.
-   //==============================================================================
-   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-   if (!mgr) {
-      ::Error("AddTaskGammaHadronCorr", "No analysis manager to connect to.");
-      return NULL;
-   }   
-
-   // This task requires an ESD input handler and an AOD output handler.
-   // Check this using the analysis manager.
-   //===============================================================================
-   TString type = mgr->GetInputEventHandler()->GetDataType();
-   if (!type.Contains("ESD")) {
-      ::Error("AddTaskGammaHadronCorr", "This task needs the manager to have an ESD input handler.");
-      return NULL;
-   }   
-   // Check if AOD output handler exist.
-   AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler();
-   if (!aod_h) {
-      ::Error("AddTaskGammaHadronCorr", "This task needs the manager to have an AOD output handler.");
-      return NULL;
-   }   
-   
-   // Create the task, add it to the manager and configure it.
-   //===========================================================================
-   AliAnalysisTaskParticleCorrelation * taskpartcorr = new AliAnalysisTaskParticleCorrelation ("ParticleCorrelations");
-   mgr->AddTask(taskpartcorr);
-   taskpartcorr->SetConfigFileName("ConfigAnalysisGammaHadronCorrelation");
-   // Output histograms list for particle correlation analysis                       
-   AliAnalysisDataContainer *cout_partcorr = mgr->CreateContainer("partcorrhist", TList::Class(),
-                             AliAnalysisManager::kOutputContainer, "partcorrhist.root");
-   
-   // Connect to data containers
-   mgr->ConnectInput  (taskpartcorr,  0, mgr->GetCommonInputContainer());
-   mgr->ConnectOutput (taskpartcorr,  1, cout_partcorr );
-   return taskpartcorr;
-}
-   
diff --git a/ANALYSIS/macros/AddTaskPi0.C b/ANALYSIS/macros/AddTaskPi0.C
deleted file mode 100644 (file)
index cc4e64d..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-AliAnalysisTaskParticleCorrelation *AddTaskPi0()
-{
-// Creates a Pi0->gg identification task and adds it to the analysis manager.
-
-   // Get the pointer to the existing analysis manager via the static access method.
-   //==============================================================================
-   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-   if (!mgr) {
-      Error("AddTaskGammaHadronCorr", "No analysis manager to connect to.");
-      return NULL;
-   }   
-
-   // This task requires an ESD input handler and an AOD output handler.
-   // Check this using the analysis manager.
-   //===============================================================================
-   TString type = mgr->GetInputEventHandler()->GetDataType();
-   if (!type.Contains("ESD")) {
-      Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an ESD input handler.");
-      return NULL;
-   }   
-   // Check if AOD output handler exist.
-   AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler();
-   if (!aod_h) {
-      Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler.");
-      return NULL;
-   }   
-   
-   // Create the task, add it to the manager and configure it.
-   //===========================================================================
-   AliAnalysisTaskParticleCorrelation * taskpartcorr = new AliAnalysisTaskParticleCorrelation ("PWG4-Pi0");
-   mgr->AddTask(taskpartcorr);
-   taskpartcorr->SetConfigFileName("ConfigAnalysisPi0");
-   // Output histograms list for particle correlation analysis                       
-   AliAnalysisDataContainer *cout_partcorr = mgr->CreateContainer("pi0histos", TList::Class(),
-                             AliAnalysisManager::kOutputContainer, "pi0histos.root");
-   
-   // Connect to data containers
-   mgr->ConnectInput  (taskpartcorr,  0, mgr->GetCommonInputContainer());
-   mgr->ConnectOutput (taskpartcorr,  1, cout_partcorr );
-   return taskpartcorr;
-}
-   
index e0d33bb..52d0df6 100644 (file)
@@ -22,20 +22,22 @@ const char *proof_dataset = "/COMMON/COMMON/LHC09a4_run8100X#/esdTree";
 // === ALIEN
 const char *dataset   = "";
 const char *alien_datadir = "/alice/sim/PDC_09/LHC09a4/";
-Int_t run_numbers[10] = {81071,     0,     0,     0,     0,
+Int_t run_numbers[10] = {81072,     0,     0,     0,     0,
                              0,     0,     0,     0,     0};
 
 Bool_t useDBG        = kTRUE;
-Bool_t useMC         = kFALSE;
-Bool_t usePAR        = kTRUE;
+Bool_t useMC         = kTRUE;
+Bool_t useTAGS       = kFALSE;
+Bool_t useKFILTER    = kTRUE;
+Bool_t usePAR        = kFALSE;
 Bool_t useTR         = kFALSE;
 Bool_t usePLUGIN     = kTRUE;
 Bool_t useCORRFW     = kFALSE; // do not change
+Bool_t useAODTAGS    = kTRUE;
     
 Int_t iAODanalysis   = 0;
 Int_t iAODhandler    = 1;
 Int_t iESDfilter     = 1;
-Int_t iMUONfilter    = 0;
 Int_t iMUONcopyAOD   = 0;
 Int_t iJETAN         = 1;
 Int_t iPWG4partcorr  = 1;
@@ -67,7 +69,6 @@ void AnalysisTrainNew(const char *analysis_mode="grid", const char *plugin_mode=
    if (iAODanalysis) printf("=  AOD analysis                                                  =\n");
    else              printf("=  ESD analysis                                                  =\n");
    if (iESDfilter)   printf("=  ESD filter                                                    =\n");
-   if (iMUONfilter)  printf("=  MUON filter                                                   =\n");
    if (iMUONcopyAOD) printf("=  MUON copy AOD                                                 =\n");
    if (iJETAN)       printf("=  Jet analysis                                                  =\n");
    if (iPWG2spectra) printf("=  PWG2 proton, checkCascade, checkV0, strange                   =\n");
@@ -79,7 +80,10 @@ void AnalysisTrainNew(const char *analysis_mode="grid", const char *plugin_mode=
    if (iPWG4pi0)     printf("=  PWG4 pi0 analysis                                             =\n");
    printf("==================================================================\n");
    printf(":: use MC truth      %d\n", (UInt_t)useMC);
+   printf(":: use KINE filter   %d\n", (UInt_t)useKFILTER);
    printf(":: use track refs    %d\n", (UInt_t)useTR);
+   printf(":: use tags          %d\n", (UInt_t)useTAGS);
+   printf(":: use AOD tags      %d\n", (UInt_t)useAODTAGS);
    printf(":: use debugging     %d\n", (UInt_t)useDBG);
    printf(":: use PAR files     %d\n", (UInt_t)usePAR);
    printf(":: use AliEn plugin  %d\n", (UInt_t)usePLUGIN);
@@ -115,6 +119,7 @@ void AnalysisTrainNew(const char *analysis_mode="grid", const char *plugin_mode=
    } else {   
    // ESD input handler
       AliESDInputHandler *esdHandler = new AliESDInputHandler();
+      if (useTAGS) esdHandler->SetReadTags();
       mgr->SetInputEventHandler(esdHandler);       
    }
    // Monte Carlo handler
@@ -150,16 +155,17 @@ void AnalysisTrainNew(const char *analysis_mode="grid", const char *plugin_mode=
    if (iESDfilter && !iAODanalysis) {
       //  ESD filter task configuration.
       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C");
-      AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter();
+      AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER);
    }   
 
-   // Muon filter
-   if (iMUONfilter && !iAODanalysis) {
-      // There is no configuration from outside for this task yet.
-      AliAnalysisTaskESDMuonFilter *taskesdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
-      mgr->AddTask(taskesdmuonfilter);
-      // Connect to data containers
-      mgr->ConnectInput  (taskesdmuonfilter,  0, mgr->GetCommonInputContainer());
+   // AOD tags
+   if (useAODTAGS) {
+      AliAnalysisTaskTagCreator* tagTask = new AliAnalysisTaskTagCreator("AOD Tag Creator");
+      mgr->AddTask(tagTask);
+      AliAnalysisDataContainer *coutTags = mgr->CreateContainer("cTag",  TTree::Class(), 
+                                           AliAnalysisManager::kOutputContainer, "AOD.tag.root");
+      mgr->ConnectInput (tagTask, 0, mgr->GetCommonInputContainer());
+      mgr->ConnectOutput(tagTask, 1, coutTags);
    }   
     
     // Jet analysis
@@ -186,14 +192,14 @@ void AnalysisTrainNew(const char *analysis_mode="grid", const char *plugin_mode=
    
    // PWG4 hadron correlations
    if (iPWG4partcorr) {
-      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskGammaHadronCorr.C");
-      AliAnalysisTaskParticleCorrelation *taskgammahadron = AddTaskGammaHadronCorr();  
+      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskPartCorr.C");
+      AliAnalysisTaskParticleCorrelation *taskgammahadron = AddTaskPartCorr("GammaHadron", "AOD", "PHOS");
    }   
        
    // PWG4 pi0
    if (iPWG4pi0) {
-      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPi0.C");
-      AliAnalysisTaskParticleCorrelation *taskpi0 = AddTaskPi0();  
+      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskPartCorr.C");
+      AliAnalysisTaskParticleCorrelation *taskpi0 = AddTaskPartCorr("Pi0", "AOD", "PHOS");
    }   
     
    //==========================================================================
@@ -262,20 +268,21 @@ void CheckModuleFlags(const char *mode) {
       useMC = kFALSE;
       useTR = kFALSE;
       iESDfilter   = 0;
-      iMUONfilter  = 0;
       // Disable tasks that do not work yet on AOD data
    } else {   
    // ESD analysis
       iMUONcopyAOD = 0;
       iPWG3vertexing = 0;
    }       
-   if (iMUONfilter || iJETAN) iESDfilter=1;
+   if (iJETAN) iESDfilter=1;
    if (iESDfilter) iAODhandler=1;
    if (iAODanalysis || !iAODhandler) {
       iPWG4partcorr=0;
       iPWG4pi0=0;
    }   
    if (iPWG2spectra || iPWG2flow) useCORRFW = kTRUE;
+   if (useKFILTER && !useMC) useKFILTER = kFALSE;
+   if (useAODTAGS && !iAODhandler) useAODTAGS = kFALSE;
 }
 
 //______________________________________________________________________________
@@ -398,7 +405,7 @@ Bool_t LoadAnalysisLibraries(const char *mode)
 {
 // Load common analysis libraries.
    Bool_t success = kTRUE;
-   if (iMUONfilter) {
+   if (iESDfilter) {
       if (!LoadLibrary("PWG3base", mode, kTRUE) ||
           !LoadLibrary("PWG3muon", mode, kTRUE)) return kFALSE;
    }   
@@ -530,9 +537,9 @@ TChain *CreateChain(const char *mode, const char *plugin_mode)
             if (!strlen(dataset)) {
                // Local ESD
                chain = new TChain("esdTree");
-               if (gSystem->AccessPathName("AliESDs.root")) 
+               if (gSystem->AccessPathName("data/AliESDs.root")) 
                   ::Error("CreateChain", "File: AliESDs.root not in current dir");
-               else chain->Add("AliESDs.root");
+               else chain->Add("data/AliESDs.root");
             } else {
                // Interactive ESD
                chain = CreateChainSingle(dataset, "esdTree");