]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/macros/AddTaskESDFilter.C
new version (M.Vala)
[u/mrichter/AliRoot.git] / ANALYSIS / macros / AddTaskESDFilter.C
index e11a8a5197e4ef6b6d0c47d440f83ac614d9b1c4..c185a7c1b8e112a8c62d10b16b48de7cb506923d 100644 (file)
@@ -1,7 +1,10 @@
 AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE, 
                                            Bool_t writeMuonAOD=kFALSE,
                                            Bool_t writeDimuonAOD=kFALSE,
-                                          Bool_t usePhysicsSelection=kFALSE)
+                                          Bool_t usePhysicsSelection=kFALSE,
+                                          Bool_t useCentralityTask=kFALSE, 
+                                           Int_t tofTimeZeroType=AliESDpid::kTOF_T0,
+                                          Bool_t enableTPCOnlyAODTracks=kFALSE)
 {
 // Creates a filter task and adds it to the analysis manager.
 
@@ -38,9 +41,17 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
    //===========================================================================   
    // Barrel tracks filter
    AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
+   esdfilter->SetTimeZeroType(tofTimeZeroType);
+   esdfilter->DisableCascades();
+   esdfilter->DisableKinks();
+  
    mgr->AddTask(esdfilter);
+  
    // Muons
-   AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
+   Bool_t onlyMuon=kTRUE;
+   Bool_t keepAllEvents=kTRUE;
+   Int_t mcMode=(useKineFilter ? 2 : 0); // use 1 instead of 2 to get all MC information instead of just ancestors of mu tracks
+   AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter",onlyMuon,keepAllEvents,mcMode);
    mgr->AddTask(esdmuonfilter);
    if(usePhysicsSelection){
      esdfilter->SelectCollisionCandidates(AliVEvent::kAny);
@@ -58,6 +69,14 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
       mgr->AddTask(kinefilter);
    }   
 
+   AliAnalysisTaskAODCentralityMaker* ctask = 0;
+   
+   if (useCentralityTask) {
+       ctask = new AliAnalysisTaskAODCentralityMaker("AODCentralityMaker");
+       ctask->SetDeltaAODFileName("AliAODCentrality.root");
+       mgr->AddTask(ctask);
+   }
+
    // Cuts on primary tracks
    AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
 
@@ -74,20 +93,25 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
    AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
    electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.);
 
-   // tighter cuts on primary particles for high pT tracks
-   // needed as input for jetfinder 
-   AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("Standard Track Cuts + ITSRefit", "High pT ESD Track Cuts");
-   esdTrackCutsH->SetMinNClustersTPC(50);
-   esdTrackCutsH->SetMaxChi2PerClusterTPC(3.5);
-   esdTrackCutsH->SetRequireTPCRefit(kTRUE);
+   // standard cuts with very loose DCA
+   AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE); 
    esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
    esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
    esdTrackCutsH->SetDCAToVertex2D(kTRUE);
-   esdTrackCutsH->SetRequireSigmaToVertex(kFALSE);
-   esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
-   esdTrackCutsH->SetRequireITSRefit(kTRUE); // additional cut 
 
+   // standard cuts with tight DCA cut
+   AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
+   // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
+   // tracks selected by this cut are exclusive to those selected by the previous cut
+   AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(); 
+   esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
+   esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
  
+   // TPC only tracks: Optionally enable the writing of TPConly information
+   // constrained to SPD vertex in the filter below
+   AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+   esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
 
    // Compose the filter
    AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
@@ -103,7 +127,14 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
    electronID->SetFilterMask(4);       // AND with Pixel Cuts
    // 16
    trackFilter->AddCuts(esdTrackCutsH);
+   // 32
+   trackFilter->AddCuts(esdTrackCutsH2);
+   // 64
+   trackFilter->AddCuts(esdTrackCutsH3);
+   // 128 , 1 << 7
+   trackFilter->AddCuts(esdTrackCutsTPCOnly);
+   if(enableTPCOnlyAODTracks)esdfilter->SetTPCOnlyFilterMask(128);
+
    // Filter with cuts on V0s
    AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
    esdV0Cuts->SetMinRadius(0.2);
@@ -137,6 +168,10 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
                                                                   AliAnalysisManager::kOutputContainer,"pyxsec_hists.root");
       mgr->ConnectOutput (kinefilter,  1,coutputEx);
    }   
+   if (useCentralityTask) {
+       mgr->ConnectInput (ctask, 0, mgr->GetCommonInputContainer());
+       mgr->ConnectOutput(ctask, 0, mgr->GetCommonOutputContainer());
+   }
    return esdfilter;
  }