3 * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
4 * @date Wed Feb 6 23:10:29 2013
6 * @brief Setup of train like the `official' AODtrain.C script
9 * @ingroup pwglf_forward_trains_examples
12 # include <AliAnalysisManager.h>
14 class AliAnalysisManager;
16 #include "TrainSetup.C"
19 * Setup of train like the `official' AODtrain.C script
21 * @ingroup pwglf_forward_trains_examples
23 class AODTrain : public TrainSetup
26 //------------------------------------------------------------------
30 * @param name Name of job
32 AODTrain(const char* name="myTest") : TrainSetup(name)
34 fOptions.Set("type", "ESD");
36 fOptions.Add("collision", "TYPE", "Collision system", 0);
37 fOptions.Add("year", "YEAR", "Year", 2011);
38 fOptions.Add("cdb", "Connect to CDB", true);
39 fOptions.Add("physics-selection", "Use PhysicsSelection", true);
40 fOptions.Add("tender", "Use of Tenders", false);
41 fOptions.Add("centrality", "Use centrality", false);
42 fOptions.Add("v0-tender", "Use of V0 tender", false);
43 fOptions.Add("track-refs", "Also read track references");
44 fOptions.Add("kinematics-filter", "Use kinematics fitler");
45 fOptions.Add("sys-info", "Use sys info");
46 fOptions.Add("run", "RUNNUMBER", "Set initial run number", 0);
49 fOptions.Add("esd-filter", "Use ESD fitler", true);
50 fOptions.Add("muon-copy", "Make additional MUON specific AOD", true);
51 fOptions.Add("jetan", "Use Jet analysis", true);
52 fOptions.Add("jetan-delta", "Make Jet analysis delta AOD", true);
53 fOptions.Add("vertexing", "Use PWGHF vertexing", true);
54 fOptions.Add("jpsi-filter", "Use PWGDQ J/Psi filter", false);
55 fOptions.Add("d0-decay", "Use PWGHF D0->h+h", true);
56 fOptions.Add("high-pt", "Use high pt", true);
57 fOptions.Add("forward-nch", "Forward charged particle", true);
59 fOptions.Add("pid-response", "Use PID response", true);
60 fOptions.Add("pid-qa", "Do PID QA", true);
62 //------------------------------------------------------------------
68 void CreateTasks(AliAnalysisManager* mgr)
71 fRailway->LoadLibrary("libCORRFW");
73 Bool_t cdb = fOptions.Has("cdb");
74 Bool_t tender = fOptions.Has("tender");
75 Bool_t physicsSelection = fOptions.Has("physics-selection");
78 fRailway->LoadLibrary("libCDB");
79 fRailway->LoadLibrary("libProof");
80 fRailway->LoadLibrary("libRAWDatabase");
81 fRailway->LoadLibrary("libSTEER");
82 fRailway->LoadLibrary("libSTAT");
83 fRailway->LoadLibrary("libTRDbase");
84 fRailway->LoadLibrary("libVZERObase");
85 fRailway->LoadLibrary("libTPCbase");
86 fRailway->LoadLibrary("libITSbase");
87 fRailway->LoadLibrary("libHMPIDbase");
88 fRailway->LoadLibrary("libTENDER");
89 fRailway->LoadLibrary("libTENDERSupplies");
92 if (fOptions.Has("sys-info")) mgr->SetNSysInfo(100);
94 // AliAnalysisTask* task = 0;
95 AliAnalysisTaskSE* seTask = 0;
97 AliAnalysisManager::SetCommonFileName("AODQA.root");
99 CoupleCar("$ALICE_ROOT/ANALYSIS/TenderSupplies/AddTaskTender.C",
100 Form("%d", fOptions.Has("v0-tender")));
102 if (fOptions.Has("pid-response"))
103 CoupleCar("AddTaskPIDResponse.C");
105 if (fOptions.Has("pid-qa")) {
106 seTask = CoupleSECar("AddTaskPIDqa.C");
107 seTask->SelectCollisionCandidates(AliVEvent::kAny);
110 if (cdb && !tender) {
111 fRailway->LoadLibrary("libRAWDatarec");
112 fRailway->LoadLibrary("libTRDrec");
113 fRailway->LoadLibrary("libVZEROrec");
114 fRailway->LoadLibrary("libTPCrec");
115 fRailway->LoadLibrary("libITSrec");
116 fRailway->LoadLibrary("libPWGPP");
118 // CoupleCar("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
119 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
120 gROOT->ProcessLine(Form("AddTaskCDBconnect(%d)", fOptions.AsInt("run")));
121 gROOT->ProcessLine("AliCDBManager* cdb = AliCDBManager::Instance();"
122 "cdb->SetDefaultStorage(\"raw://\");");
125 if (fOptions.Has("high-pt"))
126 CoupleCar("AddTaskFilteredTree.C");
128 if (fOptions.Has("esd-filter")) {
129 fRailway->LoadLibrary("PWGmuon");
130 if (fOptions.Has("muon-copy")) {
131 mgr->RegisterExtraFile("AliAOD.Muons.root");
132 mgr->RegisterExtraFile("AliAOD.Dimuons.root");
134 Int_t runFlag = (fOptions.AsInt("year") % 100) * 100;
136 TString::Format("%d,%d,false,false,false,false,true,false,false,%d",
137 fOptions.Has("kinematics-filter"),
138 fOptions.Has("muon-copy"), runFlag);
139 CoupleCar("AddTaskESDFilter.C", args);
142 Bool_t vertexing = fOptions.Has("vertexing");
143 Bool_t d0Decay = fOptions.Has("d0-decay");
144 if (vertexing || d0Decay) {
145 TString src = "$ALICE_ROOT/PWGHF/vertexingHF/ConfigVertexingHF.C";
146 if (fOptions.AsInt("collision") == 1)
147 src.ReplaceAll(".C", "highmult.C");
148 TFile::Cp(src, "ConfigVertexingHF.C");
149 fRailway->LoadAux("ConfigVertexingHF.C");
153 fRailway->LoadLibrary("PWGflowBase");
154 fRailway->LoadLibrary("PWGflowTasks");
155 fRailway->LoadLibrary("PWGHFvertexingHF");
157 CoupleSECar("$ALICE_ROOT/PWGHF/vertexingHF/macros/AddTaskVertexingHF.C");
158 seTask->SelectCollisionCandidates(0);
159 mgr->RegisterExtraFile("AliAOD.VertexingHF.root");
162 if (fOptions.Has("jpsi-filtering")) {
163 fRailway->LoadLibrary("PWGDQdielectron");
165 CoupleSECar("$ALICE_ROOT/PWGDQ/dielectron/macros/AddTaskJPSIFilter.C");
166 seTask->SelectCollisionCandidates(0);
167 mgr->RegisterExtraFile("AliAOD.Dielectron.root");
171 CoupleCar("$ALICE_ROOT/PWGHF/vertexingHF/AddD2HTrain.C",
172 "kFALSE, 1,0,0,0,0,0,0,0,0,0,0");
174 if (fOptions.Has("jetan")) {
175 fRailway->LoadLibrary("JETAN");
177 Bool_t jetanDelta = fOptions.Has("jetan-delta");
179 fRailway->LoadLibrary("CGAL");
180 fRailway->LoadLibrary("fastjet");
181 fRailway->LoadLibrary("siscone");
182 fRailway->LoadLibrary("SISConePlugin");
183 fRailway->LoadLibrary("FASTJETAN");
184 // --- For newer fastjet ---
185 // fRailway->LoadLibrary("CGAL");
186 // fRailway->LoadLibrary("fastjet");
187 // fRailway->LoadLibrary("fastjettools");
188 // fRailway->LoadLibrary("siscone");
189 // fRailway->LoadLibrary("siscone_spherical");
190 // fRailway->LoadLibrary("fastjetplugins");
191 // fRailway->LoadLibrary("FASTJETAN");
194 // Write script to do this - avoid useless links against loadable
196 std::ofstream o("AddJets.C");
197 o << "void AddJets(AliAnalysisManager* mgr,\n"
198 << " UInt_t highPt,\n"
199 << " const char* deltaAOD,\n"
200 << " Bool_t useDelta,\n"
201 << " Bool_t usePS,\n"
203 << " Float_t etaCut,\n"
204 << " Float_t centLow,\n"
205 << " Float_t centHigh)\n"
207 << " gROOT->SetMacroPath(Form(\"%s:$ALICE_ROOT/PWGJE/macros\",\n"
208 << " gROOT->GetMacroPath()));\n"
210 << " gROOT->LoadMacro(\"AddTaskJets.C\");\n"
211 << " AliAnalysisTaskJets *jTask = 0;\n"
212 << " jTask = AddTaskJets(\"AOD\",\"UA1\",0.4,highPt,1.,0);\n"
213 << " jTask->SetNonStdOutputFile(deltaAOD);\n"
215 << " if (useDelta) {\n"
216 << " mgr->RegisterExtraFile(deltaAOD);\n"
218 << " jTask = AddTaskJets(\"AOD\",\"UA1\",0.4,highPt,1.,2);\n"
219 << " jTask->SetNonStdOutputFile(deltaAOD);\n"
223 o << " jTask =AddTaskJets(\"AOD\",\"SISCONE\",0.4,highPt,0.15,0);\n"
224 << " jTask->SetNonStdOutputFile(deltaAOD);\n"
225 << " TString subBranches = jTask->GetNonStdBranch();\n"
227 o << " gROOT->LoadMacro(\"AddTaskJetCluster.C\");\n"
228 << " AliAnalysisTaskJetCluster* cTask = 0;\n"
229 << " cTask = AddTaskJetCluster(\"AOD\",\"\",highPt,usePS,\n"
230 << " \"KT\",0.4,0,1,deltaAOD,0.15,etaCut,0);\n"
231 << " cTask->SetBackgroundCalc(kTRUE);\n"
232 << " cTask->SetNRandomCones(10);\n"
233 << " cTask->SetCentralityCut(centLow,centHigh);\n"
234 << " cTask->SetGhostEtamax(etaCut);\n"
235 << " TString bgBranch = Form(\"%s_%s\",\n"
236 << " AliAODJetEventBackground::StdBranchName(),\n"
237 << " cTask->GetJetOutputBranch());\n"
239 o << " cTask = AddTaskJetCluster(\"AOD\",\"\",highPt,usePS,\n"
240 << " \"ANTIKT\",0.4,2,1,deltaAOD,0.15);\n"
241 << " cTask->SetNRandomCones(10);\n"
242 << " cTask->SetCentralityCut(centLow,centHigh);\n"
243 << " if (pbpb) cTask->SetBackgroundBranch(bgBranch);\n"
244 << " subBranches += Form(\" %s\",cTask->GetJetOutputBranch());\n"
246 o << " cTask = AddTaskJetCluster(\"AOD\",\"\",highPt,usePS,\n"
247 << "\"ANTIKT\",0.2,0,1,deltaAOD,0.15);\n"
248 << " cTask->SetCentralityCut(centLow,centHigh);\n"
249 << " if (pbpb) cTask->SetBackgroundBranch(bgBranch);\n"
250 << " subBranches += Form(\" %s\",cTask->GetJetOutputBranch());\n"
252 o << " if (pbpb) {\n"
253 << " gROOT->LoadMacro(\"AddTaskJetBackgroundSubtract.C\");\n"
254 << " AliAnalysisTaskJetBackgroundSubtract* sTask = 0;\n"
255 << " sTask = AddTaskJetBackgroundSubtract(subBranches,1,\"B0\",\n"
257 << " sTask->SetBackgroundBranch(bgBranch);\n"
258 << " sTask->SetNonStdOutputFile(deltaAOD);\n"
264 UInt_t highPtFilterMask = 272;
265 TString deltaAODJetName = "AliAOD.Jets.root";
266 Float_t trackEtaWindow = 0.9;
268 Float_t centHigh = 0;
269 gROOT->Macro(Form("./AddJets.C((AliAnalysisManager*)%p,"
270 "%d,\"%s\",%d,%d,%d,%f,%f,%f);",
271 mgr, highPtFilterMask, deltaAODJetName.Data(),
272 jetanDelta, physicsSelection,
273 fOptions.AsInt("collision") == 1, // pbpb
274 trackEtaWindow, centLow, centHigh));
276 if (fOptions.Has("forward-nch") && physicsSelection) {
277 Bool_t fwdMC = (mgr->GetMCtruthEventHandler() != 0 &&
278 fOptions.Has("track-refs"));
280 CoupleCar("$ALICE_ROOT/PWGLF/FORWARD/analysis2/AddTaskForwardMult.C",
284 //------------------------------------------------------------------
286 * Create physics selection, and add to manager
288 * @param mc Whether this is for MC
291 virtual void CreatePhysicsSelection(Bool_t mc, AliAnalysisManager* mgr)
293 if (fOptions.Has("physics-selection"))
294 TrainSetup::CreatePhysicsSelection(mc, mgr);
296 //------------------------------------------------------------------
298 * Create centrality selection, and add to manager
300 * @param mc Whether this is for MC
303 virtual void CreateCentralitySelection(Bool_t mc, AliAnalysisManager* mgr)
305 if (fOptions.Has("centrality"))
306 TrainSetup::CreateCentralitySelection(mc, mgr);
308 //------------------------------------------------------------------
310 * Create MC input handler
312 * @param mc Assume monte-carlo input
316 virtual AliVEventHandler* CreateMCHandler(UShort_t /*type*/, bool mc)
319 AliMCEventHandler* mcHandler = new AliMCEventHandler();
320 mcHandler->SetReadTR(fOptions.Has("track-refs"));
323 //------------------------------------------------------------------
325 * Get the name of this set-up
327 * @return Name of this setup
329 const char* ClassName() const { return "AODTrain"; }