-
-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