Added FF task from Swensy, to be merged with Bastian's
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskFragFuncBB.C
1 \r
2 AliAnalysisTaskFragFuncBB *AddTaskFragFuncBB(UInt_t filterMask=16, Int_t iPhysicsSelection=1){\r
3         AddTaskFragFuncBB("jets", "", filterMask, iPhysicsSelection);\r
4 }\r
5 \r
6 AliAnalysisTaskFragFuncBB *AddTaskFragFuncBB(UInt_t filterMask=16, Bool_t kUseAODMC=kFALSE, Int_t iPhysicsSelection=1, UInt_t iFlag){\r
7     AliAnalysisTaskFragFuncBB *ff=0;\r
8         if(kUseAODMC){\r
9             if(iFlag&(1<<0)) ff = AddTaskFragFuncBB("jets", "jetsAODMC2b_UA104", filterMask, iPhysicsSelection);\r
10                 if(iFlag&(1<<1)) ff = AddTaskFragFuncBB("jetsAOD_UA107", "jetsAODMC2b_UA107", filterMask, iPhysicsSelection);\r
11         }\r
12         if(iFlag&(1<<2)) ff = AddTaskFragFuncBB("jets", "", filterMask, iPhysicsSelection);\r
13         \r
14         return ff;\r
15 }\r
16 \r
17 // _______________________________________________________________________________________\r
18 \r
19 AliAnalysisTaskFragFuncBB *AddTaskFragFuncBB(\r
20         const char* bRecJets,\r
21         const char* bGenJets,\r
22         UInt_t filterMask,\r
23         Int_t iPhysicsSelection)\r
24 {\r
25    // Creates a fragmentation function task,\r
26    // configures it and adds it to the analysis manager.\r
27    \r
28    // Get the pointer to the existing analysis manager via the static access method.\r
29    //==============================================================================\r
30    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
31    if (!mgr) {\r
32           ::Error("AddTaskFragFuncBB", "No analysis manager to connect to.");\r
33           return NULL;\r
34    }\r
35    \r
36    // Check the analysis type using the event handlers connected to the analysis manager.\r
37    //==============================================================================\r
38    if (!mgr->GetInputEventHandler()) {\r
39          ::Error("AddTaskFragFunc", "This task requires an input event handler");\r
40           return NULL;\r
41    }\r
42 \r
43    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"\r
44    TString typeRec(bRecJets);\r
45    TString typeGen(bGenJets);\r
46    typeRec.ToUpper();\r
47    typeGen.ToUpper();\r
48    \r
49    // Create the task and configure it.\r
50    //===========================================================================\r
51 \r
52    AliAnalysisTaskFragFuncBB *fragfunc = new AliAnalysisTaskFragFuncBB(Form("Fragmenation Function %s %s", bRecJets, bGenJets));\r
53    \r
54    // pwg4fragfunc->SetAnalysisType(AliAnalysisTaskFragFunc::kAnaMC);\r
55    // if(iAODanalysis) pwg4fragfunc->SetAODInput(kTRUE);\r
56    // pwg4fragfunc->SetDebugLevel(11);\r
57    \r
58    Printf("Rec Jets %s", bRecJets);\r
59    Printf("Gen Jets %s", bGenJets);\r
60    \r
61    fragfunc->SetBranchGenJets(bGenJets);\r
62    fragfunc->SetBranchRecJets(bRecJets);\r
63    \r
64    fragfunc->SetFilterMask(filterMask);\r
65    //fragfunc->SetUseGlobalSelection(kTRUE);\r
66    \r
67    if(type == "AOD"){\r
68           // Assume all jets are produced already\r
69           fragfunc->SetAODJetInput(kTRUE);\r
70           fragfunc->SetAODTrackInput(kTRUE);\r
71           fragfunc->SetAODMCInput(kTRUE);\r
72    }\r
73         \r
74    if(typeRec.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD\r
75          fragfunc->SetTrackTypeRec(AliAnalysisTaskFragFunc::kTrackAODMCChargedAcceptance);\r
76    }\r
77    else if (typeRec.Contains("AODMC2")){\r
78          fragfunc->SetTrackTypeRec(AliAnalysisTaskFragFunc::kTrackAODMCCharged);\r
79    }\r
80    else if (typeRec.Contains("AODMC")){\r
81          fragfunc->SetTrackTypeRec(AliAnalysisTaskFragFunc::kTrackAODMCAll);\r
82    }\r
83    else { // catch akk use AOD\r
84          fragfunc->SetTrackTypeRec(AliAnalysisTaskFragFunc::kTrackAOD);\r
85    }\r
86 \r
87    if(typeGen.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD\r
88          fragfunc->SetTrackTypeGen(AliAnalysisTaskFragFunc::kTrackAODMCChargedAcceptance);\r
89    }\r
90    else if (typeGen.Contains("AODMC2")){\r
91          fragfunc->SetTrackTypeGen(AliAnalysisTaskFragFunc::kTrackAODMCCharged);\r
92    }\r
93    else if (typeGen.Contains("AODMC")){\r
94          fragfunc->SetTrackTypeGen(AliAnalysisTaskFragFunc::kTrackAODMCAll);\r
95    }\r
96    else if (typeGen.Length()>0){ // catch all use AOD\r
97          fragfunc->SetTrackTypeGen(AliAnalysisTaskFragFunc::kTrackAOD);\r
98    }\r
99    else {  //\r
100           fragfunc->SetTrackTypeGen(AliAnalysisTaskFragFunc::kTrackKineCharged);\r
101    }\r
102 \r
103    //if(iPhysicsSelection)fragfunc->SelectCollisionCandidates();\r
104 \r
105    mgr->AddTask(fragfunc);\r
106 \r
107    // Create ONLY the output containers for the data produced by the task.\r
108    // Get and connect other common input/output containers via the manager as below\r
109    //==============================================================================\r
110    AliAnalysisDataContainer *coutput1_FragFunc = mgr->CreateContainer(Form("fracfuncBB_%s_%s",bRecJets,bGenJets), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWG4_fragfuncBB_%s_%s",AliAnalysisManager::GetCommonFileName(),bRecJets,bGenJets));\r
111 \r
112    mgr->ConnectInput  (fragfunc, 0, mgr->GetCommonInputContainer());\r
113    mgr->ConnectOutput (fragfunc, 0, mgr->GetCommonOutputContainer());\r
114    mgr->ConnectOutput (fragfunc, 1, coutput1_FragFunc);\r
115    \r
116    return fragfunc;\r
117 }