]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
2010 filter but schema restored
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 17 Apr 2013 13:06:18 +0000 (13:06 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 17 Apr 2013 13:06:18 +0000 (13:06 +0000)
Francesco Prino <prino@to.infn.it>
Christian Klein-Boesing <Christian.Klein-Boesing@cern.ch>

ANALYSIS/macros/AddTaskESDFilter.C

index dab2e267a19132efbe4f30f2be744ff0b66babbd..631c40dd6f3a81ee8bba0b8542aad3c59cd143be 100644 (file)
-
-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 = 2)
-{
-  // 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; // 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
-   // 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){
-     AddTrackCutsLHC10h(esdfilter);
-   }
-   else {
-     // default 11h
-     AddTrackCutsLHC11h(esdfilter);
-   }
-
-   // Filter with cuts on V0s
-   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 LH10h",(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);
-  
-  // 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);
-
-
-  // throw out tracks with too low number of clusters in
-  // the first pass (be consistent with TPC only tracks)
-  // N.B. the number off crossed rows still acts on the tracks after
-  // all iterations if we require tpc standalone, number of clusters
-  // and chi2 TPC cuts act on track after the first iteration
-  //   esdTrackCutsH0->SetRequireTPCStandAlone(kTRUE);
-  //   esdTrackCutsH0->SetMinNClustersTPC(80); // <--- first pass
-  
-  
-  // the complement to the one with SPD requirement
-  //  AliESDtrackCuts* esdTrackCutsHG1 = CreateTrackCutsPWGJE(10011006);
-  AliESDtrackCuts* esdTrackCutsHG1 = jetCuts1006->Clone("JetCuts10011006");
-  esdTrackCutsHG1->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
-
-  // the tracks that must not be taken pass this cut and
-  // non HGC1 and HG
-  //  AliESDtrackCuts* esdTrackCutsHG2 = CreateTrackCutsPWGJE(10021006);
-  AliESDtrackCuts* esdTrackCutsHG2 = jetCuts1006->Clone("JetCuts10021006");
-  esdTrackCutsHG2->SetMaxChi2PerClusterITS(1E10);
-
-
-  // standard cuts also used in R_AA analysis
-  //   "Global track RAA analysis QM2011 + Chi2ITS<36";
-  //  AliESDtrackCuts* esdTrackCutsH2 = CreateTrackCutsPWGJE(1000);
-  AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
-  esdTrackCutsH2->SetMinNCrossedRowsTPC(120);
-  esdTrackCutsH2->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
-  esdTrackCutsH2->SetMaxChi2PerClusterITS(36);
-  esdTrackCutsH2->SetMaxFractionSharedTPCClusters(0.4);
-  esdTrackCutsH2->SetMaxChi2TPCConstrainedGlobal(36);
-
-  esdTrackCutsH2->SetEtaRange(-0.9,0.9);
-  esdTrackCutsH2->SetPtRange(0.15, 1e10);
-
-
-  //  AliESDtrackCuts* esdTrackCutsGCOnly = CreateTrackCutsPWGJE(10041006);
-  AliESDtrackCuts* esdTrackCutsGCOnly = jetCuts1006->Clone("JetCuts10041006");
-  esdTrackCutsGCOnly->SetRequireITSRefit(kFALSE);
-
-
-
-  // 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(esdTrackCutsHG0);
-  // 32 1<<5
-  trackFilter->AddCuts(esdTrackCutsHG1);
-  // 64 1<<6
-  trackFilter->AddCuts(esdTrackCutsHG2);
-  // 128 1<<7
-  trackFilter->AddCuts(esdTrackCutsTPCCOnly); // add QM TPC only track cuts
-  if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
-  // 256 1<<8
-  trackFilter->AddCuts(esdTrackCutsGCOnly);
-  // 512 1<<9                         
-  AliESDtrackCuts* esdTrackCutsHG1_tmp = new AliESDtrackCuts(*esdTrackCutsHG1); // avoid double delete
-  trackFilter->AddCuts(esdTrackCutsHG1_tmp); // add once more for tpc only tracks
-  // 1024 1<<10                        
-  trackFilter->AddCuts(esdTrackCutsH2); // add r_aa cuts
-
-  
-  
-  esdfilter->SetGlobalConstrainedFilterMask(1<<8|1<<9); // these tracks are written out as global constrained tracks
-  esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<4)); // these normal global tracks will be marked as hybrid
-  esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
-  //     esdfilter->SetTPCConstrainedFilterMask(1<<11); // these tracks are written out as tpc constrained tracks
-
-  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;
-
-}
+\r
+Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdFilter);\r
+Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdFilter);\r
+Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdFilter);\r
+Bool_t enableTPCOnlyAODTracksLocalFlag=kFALSE;\r
+\r
+\r
+AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE, \r
+                                           Bool_t writeMuonAOD=kFALSE,\r
+                                           Bool_t writeDimuonAOD=kFALSE,\r
+                                           Bool_t usePhysicsSelection=kFALSE,\r
+                                           Bool_t useCentralityTask=kFALSE, /*obsolete*/\r
+                                           Bool_t enableTPCOnlyAODTracks=kFALSE,\r
+                                           Bool_t disableCascades=kFALSE,\r
+                                           Bool_t disableKinks=kFALSE, Int_t runFlag = 1100,\r
+                                          Int_t  muonMCMode = 2)\r
+{\r
+  // Creates a filter task and adds it to the analysis manager.\r
+   // Get the pointer to the existing analysis manager via the static access method.\r
+   //==============================================================================\r
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
+   if (!mgr) {\r
+      ::Error("AddTaskESDFilter", "No analysis manager to connect to.");\r
+     return NULL;\r
+   }   \r
+   \r
+   // This task requires an ESD input handler and an AOD output handler.\r
+   // Check this using the analysis manager.\r
+   //===============================================================================\r
+   TString type = mgr->GetInputEventHandler()->GetDataType();\r
+   if (!type.Contains("ESD")) {\r
+      ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an ESD input handler.");\r
+      return NULL;\r
+   }   \r
+   // Check if AOD output handler exist.\r
+   AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler();\r
+   if (!aod_h) {\r
+      ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler.");\r
+      return NULL;\r
+   }\r
+   // Check if MC handler is connected in case kine filter requested\r
+   AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();\r
+   if (!mcH && useKineFilter) {\r
+      ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested");\r
+      return NULL;\r
+   }   \r
+   \r
+   // Create the task, add it to the manager and configure it.\r
+   //===========================================================================   \r
+   // Barrel tracks filter\r
+   AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");\r
+   if (disableCascades) esdfilter->DisableCascades();\r
+   if  (disableKinks) esdfilter->DisableKinks();\r
+  \r
+   mgr->AddTask(esdfilter);\r
+  \r
+   // Muons\r
+   Bool_t onlyMuon=kTRUE;\r
+   Bool_t keepAllEvents=kTRUE;\r
+   Int_t mcMode= useKineFilter ? muonMCMode : 0; // use 1 instead of 2 to get all MC information instead of just ancestors of mu tracks\r
+   AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter",onlyMuon,keepAllEvents,mcMode);\r
+   mgr->AddTask(esdmuonfilter);\r
+   if(usePhysicsSelection){\r
+     esdfilter->SelectCollisionCandidates(AliVEvent::kAny);\r
+     esdmuonfilter->SelectCollisionCandidates(AliVEvent::kAny);\r
+   }  \r
+\r
+   // Filtering of MC particles (decays conversions etc)\r
+   // this task has to go AFTER all other filter tasks\r
+   // since it fills the AODMC array with all\r
+   // selected MC Particles, only this way we have the \r
+   // AODMCparticle information available for following tasks\r
+   AliAnalysisTaskMCParticleFilter *kinefilter = 0;\r
+   if (useKineFilter) {\r
+      kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");\r
+      mgr->AddTask(kinefilter);\r
+   }   \r
+\r
+   enableTPCOnlyAODTracksLocalFlag = enableTPCOnlyAODTracks;\r
+   if((runFlag/100)==10){\r
+     if((runFlag%100)==0) AddTrackCutsLHC10bcde(esdfilter);\r
+     else AddTrackCutsLHC10h(esdfilter);\r
+   }\r
+   else {\r
+     // default 11h\r
+     AddTrackCutsLHC11h(esdfilter);\r
+   }\r
+\r
+   // Filter with cuts on V0s\r
+   AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");\r
+   esdV0Cuts->SetMinRadius(0.2);\r
+   esdV0Cuts->SetMaxRadius(200);\r
+   esdV0Cuts->SetMinDcaPosToVertex(0.05);\r
+   esdV0Cuts->SetMinDcaNegToVertex(0.05);\r
+   esdV0Cuts->SetMaxDcaV0Daughters(1.5);\r
+   esdV0Cuts->SetMinCosinePointingAngle(0.99);\r
+   AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");\r
+   v0Filter->AddCuts(esdV0Cuts);\r
+\r
+   esdfilter->SetV0Filter(v0Filter);\r
+\r
+   // Enable writing of Muon AODs\r
+   esdmuonfilter->SetWriteMuonAOD(writeMuonAOD);\r
+   \r
+   // Enable writing of Dimuon AODs\r
+   esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD);\r
\r
+   // Create ONLY the output containers for the data produced by the task.\r
+   // Get and connect other common input/output containers via the manager as below\r
+   //==============================================================================\r
+   mgr->ConnectInput  (esdfilter,  0, mgr->GetCommonInputContainer());\r
+   mgr->ConnectOutput (esdfilter,  0, mgr->GetCommonOutputContainer());\r
+   mgr->ConnectInput  (esdmuonfilter, 0, mgr->GetCommonInputContainer());\r
+   if (useKineFilter) {\r
+      mgr->ConnectInput  (kinefilter,  0, mgr->GetCommonInputContainer());\r
+      mgr->ConnectOutput (kinefilter,  0, mgr->GetCommonOutputContainer());\r
+      AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(),\r
+                                                                  AliAnalysisManager::kOutputContainer,"pyxsec_hists.root");\r
+      mgr->ConnectOutput (kinefilter,  1,coutputEx);\r
+   }   \r
+   return esdfilter;\r
+}\r
\r
+\r
+\r
+\r
+Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdfilter){\r
+\r
+  Printf("%s%d: Creating Track Cuts for LHC10h",(char*)__FILE__,__LINE__);\r
+\r
+  // Cuts on primary tracks\r
+  AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();\r
+  \r
+  // ITS stand-alone tracks\r
+  AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");\r
+  esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);\r
+  \r
+  // Pixel OR necessary for the electrons\r
+  AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");\r
+  itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);\r
+  \r
+  \r
+  // PID for the electrons\r
+  AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");\r
+  electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);\r
+  \r
+  // tighter cuts on primary particles for high pT tracks\r
+  // take the standard cuts, which include already \r
+  // ITSrefit and use only primaries...\r
+  \r
+  // ITS cuts for new jet analysis \r
+  //  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");\r
+  //  AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);\r
+\r
+  AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts"); \r
+\r
+  TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");\r
+  jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);\r
+  jetCuts1006->SetMinNClustersTPC(70);\r
+  jetCuts1006->SetMaxChi2PerClusterTPC(4);\r
+  jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1\r
+  jetCuts1006->SetAcceptKinkDaughters(kFALSE);\r
+  jetCuts1006->SetRequireTPCRefit(kTRUE);\r
+  jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);\r
+  // ITS\r
+  jetCuts1006->SetRequireITSRefit(kTRUE);\r
+  //accept secondaries\r
+  jetCuts1006->SetMaxDCAToVertexXY(2.4);\r
+  jetCuts1006->SetMaxDCAToVertexZ(3.2);\r
+  jetCuts1006->SetDCAToVertex2D(kTRUE);\r
+  //reject fakes\r
+  jetCuts1006->SetMaxChi2PerClusterITS(36);\r
+  jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);\r
+\r
+  jetCuts1006->SetRequireSigmaToVertex(kFALSE);\r
+\r
+  jetCuts1006->SetEtaRange(-0.9,0.9);\r
+  jetCuts1006->SetPtRange(0.15, 1E+15.);\r
+\r
+  AliESDtrackCuts* esdTrackCutsHG0 = jetCuts1006->Clone("JetCuts10001006");\r
+  esdTrackCutsHG0->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);\r
+\r
+\r
+  // throw out tracks with too low number of clusters in\r
+  // the first pass (be consistent with TPC only tracks)\r
+  // N.B. the number off crossed rows still acts on the tracks after\r
+  // all iterations if we require tpc standalone, number of clusters\r
+  // and chi2 TPC cuts act on track after the first iteration\r
+  //   esdTrackCutsH0->SetRequireTPCStandAlone(kTRUE);\r
+  //   esdTrackCutsH0->SetMinNClustersTPC(80); // <--- first pass\r
+  \r
+  \r
+  // the complement to the one with SPD requirement\r
+  //  AliESDtrackCuts* esdTrackCutsHG1 = CreateTrackCutsPWGJE(10011006);\r
+  AliESDtrackCuts* esdTrackCutsHG1 = jetCuts1006->Clone("JetCuts10011006");\r
+  esdTrackCutsHG1->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);\r
+\r
+  // the tracks that must not be taken pass this cut and\r
+  // non HGC1 and HG\r
+  //  AliESDtrackCuts* esdTrackCutsHG2 = CreateTrackCutsPWGJE(10021006);\r
+  AliESDtrackCuts* esdTrackCutsHG2 = jetCuts1006->Clone("JetCuts10021006");\r
+  esdTrackCutsHG2->SetMaxChi2PerClusterITS(1E10);\r
+\r
+\r
+  // standard cuts also used in R_AA analysis\r
+  //   "Global track RAA analysis QM2011 + Chi2ITS<36";\r
+  //  AliESDtrackCuts* esdTrackCutsH2 = CreateTrackCutsPWGJE(1000);\r
+  AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);\r
+  esdTrackCutsH2->SetMinNCrossedRowsTPC(120);\r
+  esdTrackCutsH2->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);\r
+  esdTrackCutsH2->SetMaxChi2PerClusterITS(36);\r
+  esdTrackCutsH2->SetMaxFractionSharedTPCClusters(0.4);\r
+  esdTrackCutsH2->SetMaxChi2TPCConstrainedGlobal(36);\r
+\r
+  esdTrackCutsH2->SetEtaRange(-0.9,0.9);\r
+  esdTrackCutsH2->SetPtRange(0.15, 1e10);\r
+\r
+\r
+  //  AliESDtrackCuts* esdTrackCutsGCOnly = CreateTrackCutsPWGJE(10041006);\r
+  AliESDtrackCuts* esdTrackCutsGCOnly = jetCuts1006->Clone("JetCuts10041006");\r
+  esdTrackCutsGCOnly->SetRequireITSRefit(kFALSE);\r
+\r
+  // TPC only tracks\r
+  AliESDtrackCuts* esdTrackCutsTPCCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();\r
+  esdTrackCutsTPCCOnly->SetMinNClustersTPC(70);\r
+  \r
+  // Compose the filter\r
+  AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r
+  // 1, 1<<0\r
+  trackFilter->AddCuts(esdTrackCutsL);\r
+  // 2 1<<1\r
+  trackFilter->AddCuts(esdTrackCutsITSsa);\r
+  // 4 1<<2\r
+  trackFilter->AddCuts(itsStrong);\r
+  itsStrong->SetFilterMask(1);        // AND with Standard track cuts \r
+  // 8 1<<3\r
+  trackFilter->AddCuts(electronID);\r
+  electronID->SetFilterMask(4);       // AND with Pixel Cuts\r
+  // 16 1<<4\r
+  trackFilter->AddCuts(esdTrackCutsHG0);\r
+  // 32 1<<5\r
+  trackFilter->AddCuts(esdTrackCutsHG1);\r
+  // 64 1<<6\r
+  trackFilter->AddCuts(esdTrackCutsHG2);\r
+  // 128 1<<7\r
+  trackFilter->AddCuts(esdTrackCutsTPCCOnly); // add QM TPC only track cuts\r
+  if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);\r
+  // 256 1<<8\r
+  trackFilter->AddCuts(esdTrackCutsGCOnly);\r
+  // 512 1<<9                         \r
+  AliESDtrackCuts* esdTrackCutsHG1_tmp = new AliESDtrackCuts(*esdTrackCutsHG1); // avoid double delete\r
+  trackFilter->AddCuts(esdTrackCutsHG1_tmp); // add once more for tpc only tracks\r
+  // 1024 1<<10                        \r
+  trackFilter->AddCuts(esdTrackCutsH2); // add r_aa cuts\r
+\r
+  \r
+  \r
+  esdfilter->SetGlobalConstrainedFilterMask(1<<8|1<<9); // these tracks are written out as global constrained tracks\r
+  esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<4)); // these normal global tracks will be marked as hybrid\r
+  esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement\r
+  //     esdfilter->SetTPCConstrainedFilterMask(1<<11); // these tracks are written out as tpc constrained tracks\r
+\r
+  esdfilter->SetTrackFilter(trackFilter);\r
+  return kTRUE;\r
+  \r
+}\r
+\r
+\r
+Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdfilter){\r
+\r
+\r
+  Printf("%s%d: Creating Track Cuts LHC11h",(char*)__FILE__,__LINE__);\r
+\r
+  // Cuts on primary tracks\r
+   AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();\r
+\r
+   // ITS stand-alone tracks\r
+   AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");\r
+   esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);\r
+\r
+   // Pixel OR necessary for the electrons\r
+   AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");\r
+   itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);\r
+\r
+\r
+   // PID for the electrons\r
+   AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");\r
+   electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);\r
+\r
+   // standard cuts with very loose DCA\r
+   AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); \r
+   esdTrackCutsH->SetMaxDCAToVertexXY(2.4);\r
+   esdTrackCutsH->SetMaxDCAToVertexZ(3.2);\r
+   esdTrackCutsH->SetDCAToVertex2D(kTRUE);\r
+\r
+   // standard cuts with tight DCA cut\r
+   AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();\r
+\r
+   // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster\r
+   // tracks selected by this cut are exclusive to those selected by the previous cut\r
+   AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(); \r
+   esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);\r
+   esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);\r
\r
+   // TPC only tracks: Optionally enable the writing of TPConly information\r
+   // constrained to SPD vertex in the filter below\r
+   AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();\r
+   // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb\r
+   //esdTrackCutsTPCOnly->SetMinNClustersTPC(70);\r
+\r
+   // Extra cuts for hybrids\r
+   // first the global tracks we want to take\r
+   AliESDtrackCuts* esdTrackCutsHTG = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); \r
+   esdTrackCutsHTG->SetName("Global Hybrid tracks, loose DCA");\r
+   esdTrackCutsHTG->SetMaxDCAToVertexXY(2.4);\r
+   esdTrackCutsHTG->SetMaxDCAToVertexZ(3.2);\r
+   esdTrackCutsHTG->SetDCAToVertex2D(kTRUE);\r
+   esdTrackCutsHTG->SetMaxChi2TPCConstrainedGlobal(36);\r
+   esdTrackCutsHTG->SetMaxFractionSharedTPCClusters(0.4);\r
+   \r
+\r
+   // Than the complementary tracks which will be stored as global\r
+   // constraint, complement is done in the ESDFilter task\r
+   AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG);\r
+   esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no it requirement");\r
+   esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);\r
+   esdTrackCutsHTGC->SetRequireITSRefit(kTRUE);\r
+\r
+   // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)\r
+   AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);\r
+\r
+   // Compose the filter\r
+   AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r
+   // 1, 1<<0\r
+   trackFilter->AddCuts(esdTrackCutsL);\r
+   // 2, 1<<1\r
+   trackFilter->AddCuts(esdTrackCutsITSsa);\r
+   // 4, 1<<2\r
+   trackFilter->AddCuts(itsStrong);\r
+   itsStrong->SetFilterMask(1);        // AND with Standard track cuts \r
+   // 8, 1<<3\r
+   trackFilter->AddCuts(electronID);\r
+   electronID->SetFilterMask(4);       // AND with Pixel Cuts\r
+   // 16, 1<<4\r
+   trackFilter->AddCuts(esdTrackCutsH);\r
+   // 32, 1<<5\r
+   trackFilter->AddCuts(esdTrackCutsH2);\r
+   // 64, 1<<6\r
+   trackFilter->AddCuts(esdTrackCutsH3);\r
+   // 128 , 1 << 7\r
+   trackFilter->AddCuts(esdTrackCutsTPCOnly);\r
+   if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);\r
+   // 256, 1 << 8 Global Hybrids\r
+   trackFilter->AddCuts(esdTrackCutsHTG);\r
+   esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid    \r
+   // 512, 1<< 9 GlobalConstraint Hybrids\r
+   trackFilter->AddCuts(esdTrackCutsHTGC);\r
+   esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks \r
+   esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement\r
+   // 1024, 1<< 10 // tight DCA cuts\r
+   trackFilter->AddCuts(esdTrackCutsH2Cluster);\r
+   esdfilter->SetTrackFilter(trackFilter);\r
+\r
+   return kTRUE;\r
+\r
+}\r
+\r
+Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdfilter){\r
+\r
+\r
+  Printf("%s%d: Creating Track Cuts LHC10bcde",(char*)__FILE__,__LINE__);\r
+\r
+  // Cuts on primary tracks\r
+   AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();\r
+\r
+   // ITS stand-alone tracks\r
+   AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");\r
+   esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);\r
+\r
+   // Pixel OR necessary for the electrons\r
+   AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");\r
+   itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);\r
+\r
+\r
+   // PID for the electrons\r
+   AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");\r
+   electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);\r
+\r
+   // standard cuts with very loose DCA\r
+   AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE); \r
+   esdTrackCutsH->SetMaxDCAToVertexXY(2.4);\r
+   esdTrackCutsH->SetMaxDCAToVertexZ(3.2);\r
+   esdTrackCutsH->SetDCAToVertex2D(kTRUE);\r
+\r
+   // standard cuts with tight DCA cut\r
+   AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();\r
+\r
+   // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster\r
+   // tracks selected by this cut are exclusive to those selected by the previous cut\r
+   AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(); \r
+   esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);\r
+   esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);\r
\r
+   // TPC only tracks: Optionally enable the writing of TPConly information\r
+   // constrained to SPD vertex in the filter below\r
+   AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();\r
+   // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb\r
+   esdTrackCutsTPCOnly->SetMinNClustersTPC(70);\r
+\r
+   // Extra cuts for hybrids\r
+   // first the global tracks we want to take\r
+   // take the HTGs from 10h\r
+\r
+   //  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");\r
+   //  AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);\r
+\r
+   AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts"); \r
+\r
+   TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");\r
+   jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);\r
+   jetCuts1006->SetMinNClustersTPC(70);\r
+   jetCuts1006->SetMaxChi2PerClusterTPC(4);\r
+   jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1\r
+   jetCuts1006->SetAcceptKinkDaughters(kFALSE);\r
+   jetCuts1006->SetRequireTPCRefit(kTRUE);\r
+   jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);\r
+   // ITS\r
+   jetCuts1006->SetRequireITSRefit(kTRUE);\r
+   //accept secondaries\r
+   jetCuts1006->SetMaxDCAToVertexXY(2.4);\r
+   jetCuts1006->SetMaxDCAToVertexZ(3.2);\r
+   jetCuts1006->SetDCAToVertex2D(kTRUE);\r
+   //reject fakes\r
+   jetCuts1006->SetMaxChi2PerClusterITS(36);\r
+   jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);\r
+\r
+   jetCuts1006->SetRequireSigmaToVertex(kFALSE);\r
+   \r
+   jetCuts1006->SetEtaRange(-0.9,0.9);\r
+   jetCuts1006->SetPtRange(0.15, 1E+15.);\r
+   \r
+   AliESDtrackCuts* esdTrackCutsHTG = jetCuts1006->Clone("JetCuts10001006");\r
+   esdTrackCutsHTG->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);\r
+\r
+   // Than the complementary tracks which will be stored as global\r
+   // constraint, complement is done in the ESDFilter task\r
+   // HGC from 10h\r
+\r
+   AliESDtrackCuts* esdTrackCutsHTGC = jetCuts1006->Clone("JetCuts10041006");\r
+   esdTrackCutsHTGC->SetRequireITSRefit(kFALSE);\r
+\r
+   // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)\r
+   AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE, 0);\r
+\r
+   // Compose the filter\r
+   AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r
+   // 1, 1<<0\r
+   trackFilter->AddCuts(esdTrackCutsL);\r
+   // 2, 1<<1\r
+   trackFilter->AddCuts(esdTrackCutsITSsa);\r
+   // 4, 1<<2\r
+   trackFilter->AddCuts(itsStrong);\r
+   itsStrong->SetFilterMask(1);        // AND with Standard track cuts \r
+   // 8, 1<<3\r
+   trackFilter->AddCuts(electronID);\r
+   electronID->SetFilterMask(4);       // AND with Pixel Cuts\r
+   // 16, 1<<4\r
+   trackFilter->AddCuts(esdTrackCutsH);\r
+   // 32, 1<<5\r
+   trackFilter->AddCuts(esdTrackCutsH2);\r
+   // 64, 1<<6\r
+   trackFilter->AddCuts(esdTrackCutsH3);\r
+   // 128 , 1 << 7\r
+   trackFilter->AddCuts(esdTrackCutsTPCOnly);\r
+   if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);\r
+   // 256, 1 << 8 Global Hybrids\r
+   trackFilter->AddCuts(esdTrackCutsHTG);\r
+   esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid    \r
+   // 512, 1<< 9 GlobalConstraint Hybrids\r
+   trackFilter->AddCuts(esdTrackCutsHTGC);\r
+   esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks \r
+   esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement\r
+   // 1024, 1<< 10 // tight DCA cuts\r
+   trackFilter->AddCuts(esdTrackCutsH2Cluster);\r
+   esdfilter->SetTrackFilter(trackFilter);\r
+\r
+   return kTRUE;\r
+\r
+}\r