]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/EMCAL/macros/AddTaskEmcalAodTrackFilter.C
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[u/mrichter/AliRoot.git] / PWG / EMCAL / macros / AddTaskEmcalAodTrackFilter.C
1 AliEmcalAodTrackFilterTask* AddTaskEmcalAodTrackFilter(
2   const char *name         = "FilterTracks",
3   const char *inname       = "tracks",
4   const char *runperiod    = "",
5   const char *taskName     = "AliEmcalAodTrackFilterTask"
6 )
7 {  
8   // Get the pointer to the existing analysis manager via the static access method.
9   //==============================================================================
10   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
11   if (!mgr)
12   {
13     ::Error("AddTaskAodTrackFilter", "No analysis manager to connect to.");
14     return NULL;
15   }  
16   
17   // Check the analysis type using the event handlers connected to the analysis manager.
18   //==============================================================================
19   if (!mgr->GetInputEventHandler())
20   {
21     ::Error("AddTaskAodTrackFilter", "This task requires an input event handler");
22     return NULL;
23   }
24
25   TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
26   if (inputDataType != "AOD")) {
27     ::Info("AddTaskEmcalAodTpcTrack", "This task is only needed for AOD analysis. No task added.");
28     return NULL;
29   }
30   
31   //-------------------------------------------------------
32   // Init the task and do settings
33   //-------------------------------------------------------
34
35   AliEmcalAodTrackFilterTask *aodTask = new AliEmcalAodTrackFilterTask(taskName);
36   aodTask->SetTracksOutName(name);
37   aodTask->SetTracksInName(inname);
38   aodTask->SetMC(kFALSE);
39
40   Bool_t includeNoITS = kFALSE;
41   Bool_t doProp = kFALSE;
42   TString runPeriod(runperiod);
43   runPeriod.ToLower();
44   if (runPeriod == "lhc10d" || runPeriod == "lhc10e" || runPeriod == "lhc10h" || 
45       runPeriod == "lhc11h" || runPeriod == "lhc12a" || runPeriod == "lhc12b" ||
46       runPeriod == "lhc12c" || runPeriod == "lhc12d" || runPeriod == "lhc12e" ||
47       runPeriod == "lhc12f" || runPeriod == "lhc12g" || runPeriod == "lhc12h" ||
48       runPeriod == "lhc12i" || runPeriod == "lhc13b" || runPeriod == "lhc13c" ||
49       runPeriod == "lhc13d" || runPeriod == "lhc13e" || runPeriod == "lhc13f" ||
50       runPeriod == "lhc13g"
51       ) {
52     aodTask->SetAODfilterBits(256,512); // hybrid tracks
53     if (runPeriod == "lhc10d" || runPeriod == "lhc10e" || runPeriod == "lhc10h")
54       includeNoITS = kTRUE;
55     else if (runPeriod == "lhc11h") // fix cascade bug in LHC11h AOD145
56       aodTask->SetAttemptProp(kTRUE);
57   } else if (runPeriod == "lhc12a15e"   || runPeriod.Contains("lhc12a17") || runPeriod == "lhc13b4" ||
58              runPeriod == "lhc13b4_fix" || runPeriod == "lhc13b4_plus"    || runPeriod.Contains("lhc14a1") || runPeriod.Contains("lhc13b2_efix")
59              ) {
60     aodTask->SetAODfilterBits(256,512); // hybrid tracks
61     aodTask->SetMC(kTRUE);
62   } else if (runPeriod == "lhc11a" || runPeriod == "lhc10hold") {
63     aodTask->SetAODfilterBits(256,16); // hybrid tracks
64     includeNoITS = kTRUE;
65   } else if(runPeriod == "lhc11d") {
66     aodTask->SetAODfilterBits(256,16); // hybrid tracks (MV: not 100% sure)
67     includeNoITS = kFALSE;
68   } else if (runPeriod.Contains("lhc12a15a") || runPeriod == "lhc12a15f" || runPeriod == "lhc12a15g") {
69     aodTask->SetAODfilterBits(256,16); // hybrid tracks
70     aodTask->SetMC(kTRUE);
71     includeNoITS = kTRUE;
72   } else if (runPeriod.Contains(":")) {
73     TObjArray *arr = runPeriod.Tokenize(":");
74     TString arg1(arr->At(0)->GetName());
75     TString arg2("-1");
76     if (arr->GetEntries()>1)
77       arg2 = arr->At(1)->GetName();
78     if (arr->GetEntries()>2) {
79       TString arg3 = arr->At(2)->GetName();
80       if (arg3.Contains("includeNoITS=kTRUE"))
81         includeNoITS=kTRUE;
82       if (arg3.Contains("doProp=kTRUE"))
83         doProp=kTRUE;
84     }
85     aodTask->SetAODfilterBits(arg1.Atoi(),arg2.Atoi());
86     delete arr;
87   } else {
88     if (!runPeriod.IsNull())
89       ::Warning("Run period %s not known. It will use IsHybridGlobalConstrainedGlobal.", runPeriod.Data());
90   }
91   aodTask->SetIncludeNoITS(includeNoITS);
92   aodTask->SetDoPropagation(doProp);
93
94   //-------------------------------------------------------
95   // Final settings, pass to manager and set the containers
96   //-------------------------------------------------------
97   mgr->AddTask(aodTask);
98   
99   // Create containers for input/output
100   AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
101   mgr->ConnectInput(aodTask, 0,  cinput1 );
102   
103   return aodTask;
104 }