]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/macros/AddTaskESDFilter.C
Added new filter cuts and MC particle filter. Muon filter activated by default as...
[u/mrichter/AliRoot.git] / ANALYSIS / macros / AddTaskESDFilter.C
index f303a4b26fe20493aae95315efb97fa04e6d0512..e9729b767dbc0dfaecc281dbf2dfee1c70b8f446 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;
 }   
-