]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/macros/AddTaskESDFilter.C
changing number of cluster cut to 50 (Jacek's suggestion for 2011 PbPb data)
[u/mrichter/AliRoot.git] / ANALYSIS / macros / AddTaskESDFilter.C
index 886273279bebda7105d591ed2a7d00438f208ce8..5229bd799e196ae74529bdabf968292770958c27 100644 (file)
@@ -1,4 +1,12 @@
-AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE)
+AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE, 
+                                           Bool_t writeMuonAOD=kFALSE,
+                                           Bool_t writeDimuonAOD=kFALSE,
+                                           Bool_t usePhysicsSelection=kFALSE,
+                                           Bool_t useCentralityTask=kFALSE, /*obsolete*/
+                                           Int_t  tofTimeZeroType=AliESDpid::kTOF_T0,
+                                           Bool_t enableTPCOnlyAODTracks=kFALSE,
+                                           Bool_t disableCascades=kFALSE,
+                                           Bool_t disableKinks=kFALSE)
 {
 // Creates a filter task and adds it to the analysis manager.
 
@@ -35,10 +43,22 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE)
    //===========================================================================   
    // Barrel tracks filter
    AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
+   esdfilter->SetTimeZeroType(tofTimeZeroType);
+   if (disableCascades) esdfilter->DisableCascades();
+   if  (disableKinks) 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);
+     esdmuonfilter->SelectCollisionCandidates(AliVEvent::kAny);
+   }  
 
    // Filtering of MC particles (decays conversions etc)
    // this task has to go AFTER all other filter tasks
@@ -51,18 +71,8 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE)
       mgr->AddTask(kinefilter);
    }   
 
-
-
    // Cuts on primary tracks
-   AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("Standard Track Cuts", "ESD Track Cuts");
-   esdTrackCutsL->SetMinNClustersTPC(50);
-   esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
-   esdTrackCutsL->SetRequireTPCRefit(kTRUE);
-   esdTrackCutsL->SetMaxDCAToVertexXY(2.4);
-   esdTrackCutsL->SetMaxDCAToVertexZ(3.2);
-   esdTrackCutsL->SetDCAToVertex2D(kTRUE);
-   esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);
-   esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);
+   AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
 
    // ITS stand-alone tracks
    AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
@@ -77,36 +87,77 @@ 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::GetStandardITSTPCTrackCuts2011(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::GetStandardITSTPCTrackCuts2011();
+
+   // 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::GetStandardITSTPCTrackCuts2011(); 
+   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();
+   // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb
+   //esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
+
+   // Extra cuts for hybrids
+   // first the global tracks we want to take
+   AliESDtrackCuts* esdTrackCutsHTG = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); 
+   esdTrackCutsHTG->SetName("Global Hybrid tracks, loose DCA");
+   esdTrackCutsHTG->SetMaxDCAToVertexXY(2.4);
+   esdTrackCutsHTG->SetMaxDCAToVertexZ(3.2);
+   esdTrackCutsHTG->SetDCAToVertex2D(kTRUE);
+   esdTrackCutsHTG->SetMaxChi2TPCConstrainedGlobal(36);
+   
+   // Than the complementary tracks which will be stored as global
+   // constraint, complement is done in the ESDFilter task
+   AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG);
+   esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no it requirement");
+   esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
+   //   esdTrackCutsHTGC->SetRequireITSRefit(kFALSE)
+
+   // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
+   AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
 
    // Compose the filter
    AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
-   // 1
+   // 1, 1<<0
    trackFilter->AddCuts(esdTrackCutsL);
-   // 2
+   // 2, 1<<1
    trackFilter->AddCuts(esdTrackCutsITSsa);
-   // 4
+   // 4, 1<<2
    trackFilter->AddCuts(itsStrong);
    itsStrong->SetFilterMask(1);        // AND with Standard track cuts 
-   // 8
+   // 8, 1<<3
    trackFilter->AddCuts(electronID);
    electronID->SetFilterMask(4);       // AND with Pixel Cuts
-   // 16
+   // 16, 1<<4
    trackFilter->AddCuts(esdTrackCutsH);
+   // 32, 1<<5
+   trackFilter->AddCuts(esdTrackCutsH2);
+   // 64, 1<<6
+   trackFilter->AddCuts(esdTrackCutsH3);
+   // 128 , 1 << 7
+   trackFilter->AddCuts(esdTrackCutsTPCOnly);
+   if(enableTPCOnlyAODTracks)esdfilter->SetTPCOnlyFilterMask(128);
+   // 256, 1 << 8 Global Hybrids
+   trackFilter->AddCuts(esdTrackCutsHTG);
+   esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid    
+   // 512, 1<< 9 GlobalConstraint Hybrids
+   trackFilter->AddCuts(esdTrackCutsHTGC);
+   esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks 
+   esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
+   // 1024, 1<< 10
+   trackFilter->AddCuts(esdTrackCutsH2Cluster);
+
    // Filter with cuts on V0s
    AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
    esdV0Cuts->SetMinRadius(0.2);
@@ -121,6 +172,11 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE)
    esdfilter->SetTrackFilter(trackFilter);
    esdfilter->SetV0Filter(v0Filter);
 
+   // Enable writing of Muon AODs
+   esdmuonfilter->SetWriteMuonAOD(writeMuonAOD);
+   
+   // Enable writing of Dimuon AODs
+   esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD);
  
    // Create ONLY the output containers for the data produced by the task.
    // Get and connect other common input/output containers via the manager as below