ROOT logo

Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdFilter);
Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdFilter);
Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdFilter);
Bool_t enableTPCOnlyAODTracksLocalFlag=kFALSE;

AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE, 
                                           Bool_t writeMuonAOD=kFALSE,
                                           Bool_t writeDimuonAOD=kFALSE,
                                           Bool_t usePhysicsSelection=kFALSE,
                                           Bool_t useCentralityTask=kFALSE, /*obsolete*/
                                           Bool_t enableTPCOnlyAODTracks=kFALSE,
                                           Bool_t disableCascades=kFALSE,
                                           Bool_t disableKinks=kFALSE, 
                                           Int_t runFlag = 1100,
                                           Int_t  muonMCMode = 3  ,
                                           Bool_t useV0Filter=kTRUE,
                                           Bool_t muonWithSPDTracklets=kTRUE)
{
  // Creates a filter 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("AddTaskESDFilter", "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;
   }
   // 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;
   }   
   
   // Create the task, add it to the manager and configure it.
   //===========================================================================   
   // Barrel tracks filter
   AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
   if (disableCascades) esdfilter->DisableCascades();
   if  (disableKinks) esdfilter->DisableKinks();
  
   mgr->AddTask(esdfilter);
  
   // Muons
   Bool_t onlyMuon=kTRUE;
   Bool_t keepAllEvents=kTRUE;
   Int_t mcMode= useKineFilter ? muonMCMode : 0;
   AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter",onlyMuon,keepAllEvents,mcMode,muonWithSPDTracklets);
   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
   // since it fills the AODMC array with all
   // selected MC Particles, only this way we have the 
   // AODMCparticle information available for following tasks
   AliAnalysisTaskMCParticleFilter *kinefilter = 0;
   if (useKineFilter) {
      kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
      mgr->AddTask(kinefilter);
   }   

   enableTPCOnlyAODTracksLocalFlag = enableTPCOnlyAODTracks;
   if((runFlag/100)==10){
     if((runFlag%100)==0) AddTrackCutsLHC10bcde(esdfilter);
     else AddTrackCutsLHC10h(esdfilter);
   }
   else {
     // default 11h
     AddTrackCutsLHC11h(esdfilter);
   }

   // Filter with cuts on V0s
   if (useV0Filter) {
     AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
     esdV0Cuts->SetMinRadius(0.2);
     esdV0Cuts->SetMaxRadius(200);
     esdV0Cuts->SetMinDcaPosToVertex(0.05);
     esdV0Cuts->SetMinDcaNegToVertex(0.05);
     esdV0Cuts->SetMaxDcaV0Daughters(1.5);
     esdV0Cuts->SetMinCosinePointingAngle(0.99);
     AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
     v0Filter->AddCuts(esdV0Cuts);

     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
   //==============================================================================
   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());
      AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(),
								   AliAnalysisManager::kOutputContainer,"pyxsec_hists.root");
      mgr->ConnectOutput (kinefilter,  1,coutputEx);
   }   
   return esdfilter;
}
 
Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdfilter){

  Printf("%s%d: Creating Track Cuts for LHC10h",(char*)__FILE__,__LINE__);

  // Cuts on primary tracks
  AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
  
  // ITS stand-alone tracks
  AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
  esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
  
  // Pixel OR necessary for the electrons
  AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
  itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
  
  
  // PID for the electrons
  AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
  electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);


   // standard cuts with very loose DCA
   AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE); 
   esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
   esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
   esdTrackCutsH->SetDCAToVertex2D(kTRUE);

   // 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);

  
  // tighter cuts on primary particles for high pT tracks
  // take the standard cuts, which include already 
  // ITSrefit and use only primaries...
  
  // ITS cuts for new jet analysis 
  //  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
  //  AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);

  AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts"); 

  TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");
  jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);
  jetCuts1006->SetMinNClustersTPC(70);
  jetCuts1006->SetMaxChi2PerClusterTPC(4);
  jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1
  jetCuts1006->SetAcceptKinkDaughters(kFALSE);
  jetCuts1006->SetRequireTPCRefit(kTRUE);
  jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);
  // ITS
  jetCuts1006->SetRequireITSRefit(kTRUE);
  //accept secondaries
  jetCuts1006->SetMaxDCAToVertexXY(2.4);
  jetCuts1006->SetMaxDCAToVertexZ(3.2);
  jetCuts1006->SetDCAToVertex2D(kTRUE);
  //reject fakes
  jetCuts1006->SetMaxChi2PerClusterITS(36);
  jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);

  jetCuts1006->SetRequireSigmaToVertex(kFALSE);

  jetCuts1006->SetEtaRange(-0.9,0.9);
  jetCuts1006->SetPtRange(0.15, 1E+15.);

  AliESDtrackCuts* esdTrackCutsHG0 = jetCuts1006->Clone("JetCuts10001006");
  esdTrackCutsHG0->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);

  // the complement to the one with SPD requirement: tracks with ITS refit but no SPD hit
  //  AliESDtrackCuts* esdTrackCutsHG1 = CreateTrackCutsPWGJE(10011006);
  AliESDtrackCuts* esdTrackCutsHG1 = jetCuts1006->Clone("JetCuts10011006");
  esdTrackCutsHG1->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);

  AliESDtrackCuts* esdTrackCutsHG2 = jetCuts1006->Clone("JetCuts10021006");
  esdTrackCutsHG2->SetMaxChi2PerClusterITS(1E10);

  // all complementary hybrid tracks: no SPD requirement, no ITS refit requirement
  //  AliESDtrackCuts* esdTrackCutsGCOnly = CreateTrackCutsPWGJE(10041006);
  AliESDtrackCuts* esdTrackCutsGCOnly = jetCuts1006->Clone("JetCuts10041006");
  esdTrackCutsGCOnly->SetRequireITSRefit(kFALSE);

  // standard cuts also used in R_AA analysis
  //   "Global track RAA analysis QM2011 + Chi2ITS<36";
  //  AliESDtrackCuts* esdTrackCutsH2 = CreateTrackCutsPWGJE(1000);
  AliESDtrackCuts* esdTrackCutsRAA = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
  esdTrackCutsRAA->SetMinNCrossedRowsTPC(120);
  esdTrackCutsRAA->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
  esdTrackCutsRAA->SetMaxChi2PerClusterITS(36);
  esdTrackCutsRAA->SetMaxFractionSharedTPCClusters(0.4);
  esdTrackCutsRAA->SetMaxChi2TPCConstrainedGlobal(36);

  esdTrackCutsRAA->SetEtaRange(-0.9,0.9);
  esdTrackCutsRAA->SetPtRange(0.15, 1e10);

  // TPC only tracks
  AliESDtrackCuts* esdTrackCutsTPCCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
  esdTrackCutsTPCCOnly->SetMinNClustersTPC(70);
  
  // Compose the filter
  AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
  // 1, 1<<0
  trackFilter->AddCuts(esdTrackCutsL);
  // 2 1<<1
  trackFilter->AddCuts(esdTrackCutsITSsa);
  // 4 1<<2
  trackFilter->AddCuts(itsStrong);
  itsStrong->SetFilterMask(1);        // AND with Standard track cuts 
  // 8 1<<3
  trackFilter->AddCuts(electronID);
  electronID->SetFilterMask(4);       // AND with Pixel Cuts
  // 16 1<<4
  trackFilter->AddCuts(esdTrackCutsH);
  // 32 1<<5
  trackFilter->AddCuts(esdTrackCutsH2);
  // 64 1<<6
  trackFilter->AddCuts(esdTrackCutsH3);
  // 128 1<<7
  trackFilter->AddCuts(esdTrackCutsTPCCOnly); // add TPC only track cuts for TPC constrained tracks
  if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
  // 256 1<<8
  trackFilter->AddCuts(esdTrackCutsHG0);
  esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
  // 512 1<<9                         
  trackFilter->AddCuts(esdTrackCutsGCOnly);                      // all complementary hybrids (no SPD req && no ITS refit req && !(1<<8))
  // 1024 1<<10                        
  trackFilter->AddCuts(esdTrackCutsHG1);                         // complementary tracks with ITSrefit & SPD none
  esdfilter->SetGlobalConstrainedFilterMask(1<<9|1<<10);         // these tracks are written out as global constrained tracks
  esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE);         // write only the complementary tracks
  // 2048 1<<11
  trackFilter->AddCuts(esdTrackCutsRAA);
  // 4096 1<<12 
  AliESDtrackCuts* esdTrackCutsHG1_tmp = new AliESDtrackCuts(*esdTrackCutsHG1); // avoid double delete
  trackFilter->AddCuts(esdTrackCutsHG1_tmp);
  // 8192 1<<13
  trackFilter->AddCuts(esdTrackCutsHG2);

  esdfilter->SetTrackFilter(trackFilter);
  return kTRUE;
}


Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdfilter){


  Printf("%s%d: Creating Track Cuts LHC11h",(char*)__FILE__,__LINE__);

  // Cuts on primary tracks
   AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();

   // ITS stand-alone tracks
   AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
   esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);

   // Pixel OR necessary for the electrons
   AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
   itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);


   // PID for the electrons
   AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
   electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);

   // standard cuts with very loose DCA
   AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); 
   esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
   esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
   esdTrackCutsH->SetDCAToVertex2D(kTRUE);

   // 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);
   esdTrackCutsHTG->SetMaxFractionSharedTPCClusters(0.4);
   

   // 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(kTRUE);

   // 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<<0
   trackFilter->AddCuts(esdTrackCutsL);
   // 2, 1<<1
   trackFilter->AddCuts(esdTrackCutsITSsa);
   // 4, 1<<2
   trackFilter->AddCuts(itsStrong);
   itsStrong->SetFilterMask(1);        // AND with Standard track cuts 
   // 8, 1<<3
   trackFilter->AddCuts(electronID);
   electronID->SetFilterMask(4);       // AND with Pixel Cuts
   // 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(enableTPCOnlyAODTracksLocalFlag)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 // tight DCA cuts
   trackFilter->AddCuts(esdTrackCutsH2Cluster);
   esdfilter->SetTrackFilter(trackFilter);

   return kTRUE;

}

Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdfilter){


  Printf("%s%d: Creating Track Cuts LHC10bcde",(char*)__FILE__,__LINE__);

  // Cuts on primary tracks
   AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();

   // ITS stand-alone tracks
   AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
   esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);

   // Pixel OR necessary for the electrons
   AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
   itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);


   // PID for the electrons
   AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
   electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);

   // standard cuts with very loose DCA
   AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE); 
   esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
   esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
   esdTrackCutsH->SetDCAToVertex2D(kTRUE);

   // 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();
   // 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
   // take the HTGs from 10h

   //  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
   //  AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);

   AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts"); 

   TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");
   jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);
   jetCuts1006->SetMinNClustersTPC(70);
   jetCuts1006->SetMaxChi2PerClusterTPC(4);
   jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1
   jetCuts1006->SetAcceptKinkDaughters(kFALSE);
   jetCuts1006->SetRequireTPCRefit(kTRUE);
   jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);
   // ITS
   jetCuts1006->SetRequireITSRefit(kTRUE);
   //accept secondaries
   jetCuts1006->SetMaxDCAToVertexXY(2.4);
   jetCuts1006->SetMaxDCAToVertexZ(3.2);
   jetCuts1006->SetDCAToVertex2D(kTRUE);
   //reject fakes
   jetCuts1006->SetMaxChi2PerClusterITS(36);
   jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);

   jetCuts1006->SetRequireSigmaToVertex(kFALSE);
   
   jetCuts1006->SetEtaRange(-0.9,0.9);
   jetCuts1006->SetPtRange(0.15, 1E+15.);
   
   AliESDtrackCuts* esdTrackCutsHTG = jetCuts1006->Clone("JetCuts10001006");
   esdTrackCutsHTG->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);

   // Than the complementary tracks which will be stored as global
   // constraint, complement is done in the ESDFilter task
   // HGC from 10h

   AliESDtrackCuts* esdTrackCutsHTGC = jetCuts1006->Clone("JetCuts10041006");
   esdTrackCutsHTGC->SetRequireITSRefit(kFALSE);

   // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
   AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE, 0);

   // Compose the filter
   AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
   // 1, 1<<0
   trackFilter->AddCuts(esdTrackCutsL);
   // 2, 1<<1
   trackFilter->AddCuts(esdTrackCutsITSsa);
   // 4, 1<<2
   trackFilter->AddCuts(itsStrong);
   itsStrong->SetFilterMask(1);        // AND with Standard track cuts 
   // 8, 1<<3
   trackFilter->AddCuts(electronID);
   electronID->SetFilterMask(4);       // AND with Pixel Cuts
   // 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(enableTPCOnlyAODTracksLocalFlag)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 // tight DCA cuts
   trackFilter->AddCuts(esdTrackCutsH2Cluster);
   esdfilter->SetTrackFilter(trackFilter);

   return kTRUE;

}
 AddTaskESDFilter.C:1
 AddTaskESDFilter.C:2
 AddTaskESDFilter.C:3
 AddTaskESDFilter.C:4
 AddTaskESDFilter.C:5
 AddTaskESDFilter.C:6
 AddTaskESDFilter.C:7
 AddTaskESDFilter.C:8
 AddTaskESDFilter.C:9
 AddTaskESDFilter.C:10
 AddTaskESDFilter.C:11
 AddTaskESDFilter.C:12
 AddTaskESDFilter.C:13
 AddTaskESDFilter.C:14
 AddTaskESDFilter.C:15
 AddTaskESDFilter.C:16
 AddTaskESDFilter.C:17
 AddTaskESDFilter.C:18
 AddTaskESDFilter.C:19
 AddTaskESDFilter.C:20
 AddTaskESDFilter.C:21
 AddTaskESDFilter.C:22
 AddTaskESDFilter.C:23
 AddTaskESDFilter.C:24
 AddTaskESDFilter.C:25
 AddTaskESDFilter.C:26
 AddTaskESDFilter.C:27
 AddTaskESDFilter.C:28
 AddTaskESDFilter.C:29
 AddTaskESDFilter.C:30
 AddTaskESDFilter.C:31
 AddTaskESDFilter.C:32
 AddTaskESDFilter.C:33
 AddTaskESDFilter.C:34
 AddTaskESDFilter.C:35
 AddTaskESDFilter.C:36
 AddTaskESDFilter.C:37
 AddTaskESDFilter.C:38
 AddTaskESDFilter.C:39
 AddTaskESDFilter.C:40
 AddTaskESDFilter.C:41
 AddTaskESDFilter.C:42
 AddTaskESDFilter.C:43
 AddTaskESDFilter.C:44
 AddTaskESDFilter.C:45
 AddTaskESDFilter.C:46
 AddTaskESDFilter.C:47
 AddTaskESDFilter.C:48
 AddTaskESDFilter.C:49
 AddTaskESDFilter.C:50
 AddTaskESDFilter.C:51
 AddTaskESDFilter.C:52
 AddTaskESDFilter.C:53
 AddTaskESDFilter.C:54
 AddTaskESDFilter.C:55
 AddTaskESDFilter.C:56
 AddTaskESDFilter.C:57
 AddTaskESDFilter.C:58
 AddTaskESDFilter.C:59
 AddTaskESDFilter.C:60
 AddTaskESDFilter.C:61
 AddTaskESDFilter.C:62
 AddTaskESDFilter.C:63
 AddTaskESDFilter.C:64
 AddTaskESDFilter.C:65
 AddTaskESDFilter.C:66
 AddTaskESDFilter.C:67
 AddTaskESDFilter.C:68
 AddTaskESDFilter.C:69
 AddTaskESDFilter.C:70
 AddTaskESDFilter.C:71
 AddTaskESDFilter.C:72
 AddTaskESDFilter.C:73
 AddTaskESDFilter.C:74
 AddTaskESDFilter.C:75
 AddTaskESDFilter.C:76
 AddTaskESDFilter.C:77
 AddTaskESDFilter.C:78
 AddTaskESDFilter.C:79
 AddTaskESDFilter.C:80
 AddTaskESDFilter.C:81
 AddTaskESDFilter.C:82
 AddTaskESDFilter.C:83
 AddTaskESDFilter.C:84
 AddTaskESDFilter.C:85
 AddTaskESDFilter.C:86
 AddTaskESDFilter.C:87
 AddTaskESDFilter.C:88
 AddTaskESDFilter.C:89
 AddTaskESDFilter.C:90
 AddTaskESDFilter.C:91
 AddTaskESDFilter.C:92
 AddTaskESDFilter.C:93
 AddTaskESDFilter.C:94
 AddTaskESDFilter.C:95
 AddTaskESDFilter.C:96
 AddTaskESDFilter.C:97
 AddTaskESDFilter.C:98
 AddTaskESDFilter.C:99
 AddTaskESDFilter.C:100
 AddTaskESDFilter.C:101
 AddTaskESDFilter.C:102
 AddTaskESDFilter.C:103
 AddTaskESDFilter.C:104
 AddTaskESDFilter.C:105
 AddTaskESDFilter.C:106
 AddTaskESDFilter.C:107
 AddTaskESDFilter.C:108
 AddTaskESDFilter.C:109
 AddTaskESDFilter.C:110
 AddTaskESDFilter.C:111
 AddTaskESDFilter.C:112
 AddTaskESDFilter.C:113
 AddTaskESDFilter.C:114
 AddTaskESDFilter.C:115
 AddTaskESDFilter.C:116
 AddTaskESDFilter.C:117
 AddTaskESDFilter.C:118
 AddTaskESDFilter.C:119
 AddTaskESDFilter.C:120
 AddTaskESDFilter.C:121
 AddTaskESDFilter.C:122
 AddTaskESDFilter.C:123
 AddTaskESDFilter.C:124
 AddTaskESDFilter.C:125
 AddTaskESDFilter.C:126
 AddTaskESDFilter.C:127
 AddTaskESDFilter.C:128
 AddTaskESDFilter.C:129
 AddTaskESDFilter.C:130
 AddTaskESDFilter.C:131
 AddTaskESDFilter.C:132
 AddTaskESDFilter.C:133
 AddTaskESDFilter.C:134
 AddTaskESDFilter.C:135
 AddTaskESDFilter.C:136
 AddTaskESDFilter.C:137
 AddTaskESDFilter.C:138
 AddTaskESDFilter.C:139
 AddTaskESDFilter.C:140
 AddTaskESDFilter.C:141
 AddTaskESDFilter.C:142
 AddTaskESDFilter.C:143
 AddTaskESDFilter.C:144
 AddTaskESDFilter.C:145
 AddTaskESDFilter.C:146
 AddTaskESDFilter.C:147
 AddTaskESDFilter.C:148
 AddTaskESDFilter.C:149
 AddTaskESDFilter.C:150
 AddTaskESDFilter.C:151
 AddTaskESDFilter.C:152
 AddTaskESDFilter.C:153
 AddTaskESDFilter.C:154
 AddTaskESDFilter.C:155
 AddTaskESDFilter.C:156
 AddTaskESDFilter.C:157
 AddTaskESDFilter.C:158
 AddTaskESDFilter.C:159
 AddTaskESDFilter.C:160
 AddTaskESDFilter.C:161
 AddTaskESDFilter.C:162
 AddTaskESDFilter.C:163
 AddTaskESDFilter.C:164
 AddTaskESDFilter.C:165
 AddTaskESDFilter.C:166
 AddTaskESDFilter.C:167
 AddTaskESDFilter.C:168
 AddTaskESDFilter.C:169
 AddTaskESDFilter.C:170
 AddTaskESDFilter.C:171
 AddTaskESDFilter.C:172
 AddTaskESDFilter.C:173
 AddTaskESDFilter.C:174
 AddTaskESDFilter.C:175
 AddTaskESDFilter.C:176
 AddTaskESDFilter.C:177
 AddTaskESDFilter.C:178
 AddTaskESDFilter.C:179
 AddTaskESDFilter.C:180
 AddTaskESDFilter.C:181
 AddTaskESDFilter.C:182
 AddTaskESDFilter.C:183
 AddTaskESDFilter.C:184
 AddTaskESDFilter.C:185
 AddTaskESDFilter.C:186
 AddTaskESDFilter.C:187
 AddTaskESDFilter.C:188
 AddTaskESDFilter.C:189
 AddTaskESDFilter.C:190
 AddTaskESDFilter.C:191
 AddTaskESDFilter.C:192
 AddTaskESDFilter.C:193
 AddTaskESDFilter.C:194
 AddTaskESDFilter.C:195
 AddTaskESDFilter.C:196
 AddTaskESDFilter.C:197
 AddTaskESDFilter.C:198
 AddTaskESDFilter.C:199
 AddTaskESDFilter.C:200
 AddTaskESDFilter.C:201
 AddTaskESDFilter.C:202
 AddTaskESDFilter.C:203
 AddTaskESDFilter.C:204
 AddTaskESDFilter.C:205
 AddTaskESDFilter.C:206
 AddTaskESDFilter.C:207
 AddTaskESDFilter.C:208
 AddTaskESDFilter.C:209
 AddTaskESDFilter.C:210
 AddTaskESDFilter.C:211
 AddTaskESDFilter.C:212
 AddTaskESDFilter.C:213
 AddTaskESDFilter.C:214
 AddTaskESDFilter.C:215
 AddTaskESDFilter.C:216
 AddTaskESDFilter.C:217
 AddTaskESDFilter.C:218
 AddTaskESDFilter.C:219
 AddTaskESDFilter.C:220
 AddTaskESDFilter.C:221
 AddTaskESDFilter.C:222
 AddTaskESDFilter.C:223
 AddTaskESDFilter.C:224
 AddTaskESDFilter.C:225
 AddTaskESDFilter.C:226
 AddTaskESDFilter.C:227
 AddTaskESDFilter.C:228
 AddTaskESDFilter.C:229
 AddTaskESDFilter.C:230
 AddTaskESDFilter.C:231
 AddTaskESDFilter.C:232
 AddTaskESDFilter.C:233
 AddTaskESDFilter.C:234
 AddTaskESDFilter.C:235
 AddTaskESDFilter.C:236
 AddTaskESDFilter.C:237
 AddTaskESDFilter.C:238
 AddTaskESDFilter.C:239
 AddTaskESDFilter.C:240
 AddTaskESDFilter.C:241
 AddTaskESDFilter.C:242
 AddTaskESDFilter.C:243
 AddTaskESDFilter.C:244
 AddTaskESDFilter.C:245
 AddTaskESDFilter.C:246
 AddTaskESDFilter.C:247
 AddTaskESDFilter.C:248
 AddTaskESDFilter.C:249
 AddTaskESDFilter.C:250
 AddTaskESDFilter.C:251
 AddTaskESDFilter.C:252
 AddTaskESDFilter.C:253
 AddTaskESDFilter.C:254
 AddTaskESDFilter.C:255
 AddTaskESDFilter.C:256
 AddTaskESDFilter.C:257
 AddTaskESDFilter.C:258
 AddTaskESDFilter.C:259
 AddTaskESDFilter.C:260
 AddTaskESDFilter.C:261
 AddTaskESDFilter.C:262
 AddTaskESDFilter.C:263
 AddTaskESDFilter.C:264
 AddTaskESDFilter.C:265
 AddTaskESDFilter.C:266
 AddTaskESDFilter.C:267
 AddTaskESDFilter.C:268
 AddTaskESDFilter.C:269
 AddTaskESDFilter.C:270
 AddTaskESDFilter.C:271
 AddTaskESDFilter.C:272
 AddTaskESDFilter.C:273
 AddTaskESDFilter.C:274
 AddTaskESDFilter.C:275
 AddTaskESDFilter.C:276
 AddTaskESDFilter.C:277
 AddTaskESDFilter.C:278
 AddTaskESDFilter.C:279
 AddTaskESDFilter.C:280
 AddTaskESDFilter.C:281
 AddTaskESDFilter.C:282
 AddTaskESDFilter.C:283
 AddTaskESDFilter.C:284
 AddTaskESDFilter.C:285
 AddTaskESDFilter.C:286
 AddTaskESDFilter.C:287
 AddTaskESDFilter.C:288
 AddTaskESDFilter.C:289
 AddTaskESDFilter.C:290
 AddTaskESDFilter.C:291
 AddTaskESDFilter.C:292
 AddTaskESDFilter.C:293
 AddTaskESDFilter.C:294
 AddTaskESDFilter.C:295
 AddTaskESDFilter.C:296
 AddTaskESDFilter.C:297
 AddTaskESDFilter.C:298
 AddTaskESDFilter.C:299
 AddTaskESDFilter.C:300
 AddTaskESDFilter.C:301
 AddTaskESDFilter.C:302
 AddTaskESDFilter.C:303
 AddTaskESDFilter.C:304
 AddTaskESDFilter.C:305
 AddTaskESDFilter.C:306
 AddTaskESDFilter.C:307
 AddTaskESDFilter.C:308
 AddTaskESDFilter.C:309
 AddTaskESDFilter.C:310
 AddTaskESDFilter.C:311
 AddTaskESDFilter.C:312
 AddTaskESDFilter.C:313
 AddTaskESDFilter.C:314
 AddTaskESDFilter.C:315
 AddTaskESDFilter.C:316
 AddTaskESDFilter.C:317
 AddTaskESDFilter.C:318
 AddTaskESDFilter.C:319
 AddTaskESDFilter.C:320
 AddTaskESDFilter.C:321
 AddTaskESDFilter.C:322
 AddTaskESDFilter.C:323
 AddTaskESDFilter.C:324
 AddTaskESDFilter.C:325
 AddTaskESDFilter.C:326
 AddTaskESDFilter.C:327
 AddTaskESDFilter.C:328
 AddTaskESDFilter.C:329
 AddTaskESDFilter.C:330
 AddTaskESDFilter.C:331
 AddTaskESDFilter.C:332
 AddTaskESDFilter.C:333
 AddTaskESDFilter.C:334
 AddTaskESDFilter.C:335
 AddTaskESDFilter.C:336
 AddTaskESDFilter.C:337
 AddTaskESDFilter.C:338
 AddTaskESDFilter.C:339
 AddTaskESDFilter.C:340
 AddTaskESDFilter.C:341
 AddTaskESDFilter.C:342
 AddTaskESDFilter.C:343
 AddTaskESDFilter.C:344
 AddTaskESDFilter.C:345
 AddTaskESDFilter.C:346
 AddTaskESDFilter.C:347
 AddTaskESDFilter.C:348
 AddTaskESDFilter.C:349
 AddTaskESDFilter.C:350
 AddTaskESDFilter.C:351
 AddTaskESDFilter.C:352
 AddTaskESDFilter.C:353
 AddTaskESDFilter.C:354
 AddTaskESDFilter.C:355
 AddTaskESDFilter.C:356
 AddTaskESDFilter.C:357
 AddTaskESDFilter.C:358
 AddTaskESDFilter.C:359
 AddTaskESDFilter.C:360
 AddTaskESDFilter.C:361
 AddTaskESDFilter.C:362
 AddTaskESDFilter.C:363
 AddTaskESDFilter.C:364
 AddTaskESDFilter.C:365
 AddTaskESDFilter.C:366
 AddTaskESDFilter.C:367
 AddTaskESDFilter.C:368
 AddTaskESDFilter.C:369
 AddTaskESDFilter.C:370
 AddTaskESDFilter.C:371
 AddTaskESDFilter.C:372
 AddTaskESDFilter.C:373
 AddTaskESDFilter.C:374
 AddTaskESDFilter.C:375
 AddTaskESDFilter.C:376
 AddTaskESDFilter.C:377
 AddTaskESDFilter.C:378
 AddTaskESDFilter.C:379
 AddTaskESDFilter.C:380
 AddTaskESDFilter.C:381
 AddTaskESDFilter.C:382
 AddTaskESDFilter.C:383
 AddTaskESDFilter.C:384
 AddTaskESDFilter.C:385
 AddTaskESDFilter.C:386
 AddTaskESDFilter.C:387
 AddTaskESDFilter.C:388
 AddTaskESDFilter.C:389
 AddTaskESDFilter.C:390
 AddTaskESDFilter.C:391
 AddTaskESDFilter.C:392
 AddTaskESDFilter.C:393
 AddTaskESDFilter.C:394
 AddTaskESDFilter.C:395
 AddTaskESDFilter.C:396
 AddTaskESDFilter.C:397
 AddTaskESDFilter.C:398
 AddTaskESDFilter.C:399
 AddTaskESDFilter.C:400
 AddTaskESDFilter.C:401
 AddTaskESDFilter.C:402
 AddTaskESDFilter.C:403
 AddTaskESDFilter.C:404
 AddTaskESDFilter.C:405
 AddTaskESDFilter.C:406
 AddTaskESDFilter.C:407
 AddTaskESDFilter.C:408
 AddTaskESDFilter.C:409
 AddTaskESDFilter.C:410
 AddTaskESDFilter.C:411
 AddTaskESDFilter.C:412
 AddTaskESDFilter.C:413
 AddTaskESDFilter.C:414
 AddTaskESDFilter.C:415
 AddTaskESDFilter.C:416
 AddTaskESDFilter.C:417
 AddTaskESDFilter.C:418
 AddTaskESDFilter.C:419
 AddTaskESDFilter.C:420
 AddTaskESDFilter.C:421
 AddTaskESDFilter.C:422
 AddTaskESDFilter.C:423
 AddTaskESDFilter.C:424
 AddTaskESDFilter.C:425
 AddTaskESDFilter.C:426
 AddTaskESDFilter.C:427
 AddTaskESDFilter.C:428
 AddTaskESDFilter.C:429
 AddTaskESDFilter.C:430
 AddTaskESDFilter.C:431
 AddTaskESDFilter.C:432
 AddTaskESDFilter.C:433
 AddTaskESDFilter.C:434
 AddTaskESDFilter.C:435
 AddTaskESDFilter.C:436
 AddTaskESDFilter.C:437
 AddTaskESDFilter.C:438
 AddTaskESDFilter.C:439
 AddTaskESDFilter.C:440
 AddTaskESDFilter.C:441
 AddTaskESDFilter.C:442
 AddTaskESDFilter.C:443
 AddTaskESDFilter.C:444
 AddTaskESDFilter.C:445
 AddTaskESDFilter.C:446
 AddTaskESDFilter.C:447
 AddTaskESDFilter.C:448
 AddTaskESDFilter.C:449
 AddTaskESDFilter.C:450
 AddTaskESDFilter.C:451
 AddTaskESDFilter.C:452
 AddTaskESDFilter.C:453
 AddTaskESDFilter.C:454
 AddTaskESDFilter.C:455
 AddTaskESDFilter.C:456
 AddTaskESDFilter.C:457
 AddTaskESDFilter.C:458
 AddTaskESDFilter.C:459
 AddTaskESDFilter.C:460
 AddTaskESDFilter.C:461
 AddTaskESDFilter.C:462
 AddTaskESDFilter.C:463
 AddTaskESDFilter.C:464
 AddTaskESDFilter.C:465
 AddTaskESDFilter.C:466
 AddTaskESDFilter.C:467
 AddTaskESDFilter.C:468
 AddTaskESDFilter.C:469
 AddTaskESDFilter.C:470
 AddTaskESDFilter.C:471
 AddTaskESDFilter.C:472
 AddTaskESDFilter.C:473
 AddTaskESDFilter.C:474
 AddTaskESDFilter.C:475
 AddTaskESDFilter.C:476
 AddTaskESDFilter.C:477
 AddTaskESDFilter.C:478
 AddTaskESDFilter.C:479
 AddTaskESDFilter.C:480
 AddTaskESDFilter.C:481
 AddTaskESDFilter.C:482
 AddTaskESDFilter.C:483
 AddTaskESDFilter.C:484
 AddTaskESDFilter.C:485
 AddTaskESDFilter.C:486
 AddTaskESDFilter.C:487
 AddTaskESDFilter.C:488
 AddTaskESDFilter.C:489
 AddTaskESDFilter.C:490
 AddTaskESDFilter.C:491
 AddTaskESDFilter.C:492
 AddTaskESDFilter.C:493
 AddTaskESDFilter.C:494
 AddTaskESDFilter.C:495
 AddTaskESDFilter.C:496