AliPhysics  64a5cfc (64a5cfc)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MakeAODTrain.C
Go to the documentation of this file.
1 
10 #include "TrainSetup.C"
11 #include <sstream>
12 
13 //====================================================================
21 class MakeAODTrain : public TrainSetup
22 {
23 public:
29  MakeAODTrain(const TString& name)
30  : TrainSetup(name)
31  {
32  fOptions.Add("run", "NUMBER", "Run number for corrs", 0);
33  fOptions.Add("sys", "SYSTEM", "1:pp, 2:PbPb, 3:pPb", 0);
34  fOptions.Add("snn", "ENERGY", "Center of mass energy in GeV", 0);
35  fOptions.Add("field","STRENGTH","L3 field strength in kG", 0);
36  fOptions.Add("corr", "DIR", "Corrections dir", "");
37  fOptions.Add("dead", "FILE", "Additional dead-map script", "");
38  fOptions.Add("copy", "LIST", "',' separated list to copy","cent");
39  fOptions.Add("max-strips", "NUMBER",
40  "Maximum consequtive strips (MC)", 2);
41  fOptions.Add("forward-config", "FILE", "Forward configuration",
42  "ForwardAODConfig.C");
43  fOptions.Add("central-config", "FILE", "Central configuration",
44  "CentralAODConfig.C");
45  fOptions.Add("no-central","Do not at SPD cluster task",false);
46  fOptions.Add("cent", "Use centrality");
47  fOptions.Add("tpc-ep", "Use TPC event plane");
48  fOptions.Add("satelitte", "Use satelitte interactions");
49  fOptions.Add("secmap", "Use secondary maps to correct", false);
50  fOptions.Add("mc-tracks", "Enable MC track filter", false);
51  fOptions.Add("hit-threshold", "CUT", "Threshold for hits", 0.9);
52  fOptions.Set("type", "ESD");
53  }
54 protected:
63  const TString& call,
64  const TString& arg)
65  {
66  TString cmd;
67  cmd.Form("((AliForwardMultiplicityBase*)%p)->%s(%s)",
68  tsk, call.Data(), arg.Data())
69  gROOT->ProcessLine(cmd);
70  }
79  const TString& call,
80  const TString& arg)
81  {
82  TString cmd;
83  cmd.Form("((AliForwardMCMultiplicityTask*)%p)->%s(%s)",
84  tsk, call.Data(), arg.Data())
85  gROOT->ProcessLine(cmd);
86  }
93  {
94  // --- Output file name ------------------------------------------
95  AliAnalysisManager::SetCommonFileName("forward.root");
96 
97  // --- Load libraries/pars ---------------------------------------
98  fRailway->LoadLibrary("PWGLFforward2");
99 
100  // --- Set load path ---------------------------------------------
101  gROOT->SetMacroPath(Form("%s:$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2",
102  gROOT->GetMacroPath()));
103  gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/ANALYSIS/macros",
104  gROOT->GetMacroPath()));
105 
106  // --- Check if this is MC ---------------------------------------
107  Bool_t mc = mgr->GetMCtruthEventHandler() != 0;
108 
109  UInt_t mask = AliVEvent::kAny;
110  // --- Add TPC eventplane task
111  if (fOptions.Has("tpc-ep")) CoupleSECar("AddTaskEventplane.C","", mask);
112 
113  // --- Task to copy header information ---------------------------
114  TString cpy = fOptions.Get("copy");
115  Info("", "What to copy: %s", cpy.Data());
116  CoupleSECar("AddTaskCopyHeader.C", Form("\"%s\"", cpy.Data()), mask);
117 
118  // --- Get options -----------------------------------------------
119  ULong_t run = fOptions.AsInt("run", 0);
120  UShort_t sys = fOptions.AsInt("sys", 0);
121  UShort_t sNN = fOptions.AsInt("snn", 0);
122  UShort_t fld = fOptions.AsInt("field", 0);
123  UShort_t mSt = fOptions.AsInt("max-strips", 2);
124  Double_t thr = fOptions.AsDouble("hit-threshold". .9);
125  Bool_t sec = fOptions.Has("secmap");
126  TString corr = "";
127  TString dead = "";
128  if (fOptions.Has("corr")) corr = fOptions.Get("corr");
129  if (fOptions.Has("dead")) dead = fOptions.Get("dead");
130 
131  // --- Add the task ----------------------------------------------
132  TString fwdConfig = fOptions.Get("forward-config");
134  CoupleSECar("AddTaskForwardMult.C",
135  Form("%d,%ld,%d,%d,%d,\"%s\",\"%s\",\"%s\"",
136  mc, run, sys, sNN, fld,
137  fwdConfig.Data(), corr.Data(),
138  dead.Data()), mask);
139  if (!fwd)
140  Fatal("CoupleCars", "Failed to add forward task");
141  SetOnFwd(fwd, "GetCorrections().SetUseSecondaryMap", Form("%d",sec));
142  SetOnFwd(fwd, "GetDensityCalculator()->SetHitThreshold", Form("%f", thr));
143  if (mc)
144  SetOnMCFwd(fwd, "GetTrackDensity().SetMaxConsequtiveStrips",
145  Form("%d",mSt));
146  fRailway->LoadAux(gSystem->Which(gROOT->GetMacroPath(), fwdConfig), true);
147  if (!corr.IsNull())
148  fRailway->LoadAux(Form("%s/fmd_corrections.root",corr.Data()), true);
149  if (!dead.IsNull())
150  fRailway->LoadAux(Form("%s",dead.Data()), true);
151 
152  // --- Add the task ----------------------------------------------
153  Bool_t noCentral = fOptions.Has("no-central");
154  AliAnalysisTask* cen = 0;
155  TString cenConfig = "";
156  if (!noCentral) {
157  cenConfig = fOptions.Get("central-config");
158  cen = CoupleSECar("AddTaskCentralMult.C",
159  Form("%d,%ld,%d,%d,%d,\"%s\",\"%s\"",
160  mc, run, sys, sNN, fld,
161  cenConfig.Data(), corr.Data()), mask);
162  fRailway->LoadAux(gSystem->Which(gROOT->GetMacroPath(),cenConfig),true);
163  if (!corr.IsNull())
164  fRailway->LoadAux(Form("%s/spd_corrections.root",corr.Data()), true);
165  gROOT->ProcessLine(Form("((AliCentralMultiplicityTask*)%p)"
166  "->SetUseSecondary(%d)",
167  cen, sec));
168  }
169 
170  // --- Add MC particle task --------------------------------------
171  if (mc && fOptions.Has("mc-tracks"))
172  CoupleSECar("AddTaskMCParticleFilter.C","", mask);
173  }
174  //__________________________________________________________________
181  {
182  if (!fOptions.Has("cent")) return;
184  }
185  //__________________________________________________________________
186  const char* ClassName() const { return "MakeAODTrain"; }
187  //__________________________________________________________________
194  void SaveSetup(Bool_t asShellScript)
195  {
196  TrainSetup::SaveSetup(asShellScript);
197  SaveSummarize();
198  SavedNdeta(asShellScript);
199 
200  if (!fRailway || fRailway->Mode() != Railway::kGrid) return;
201 
203  SaveMakeIndex();
204  }
205  void SavedNdeta(Bool_t asShellScript)
206  {
207  if (!fRailway) {
208  Warning("MakeAODTrain::SaveSetup",
209  "Cannot make dNdeta.C script without helper");
210  return;
211  }
212 
213  AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
214  Bool_t mc = mgr && (mgr->GetMCtruthEventHandler() != 0);
215  OptionList uopts(fRailway->Options());
216  OptionList opts(fOptions);
217  TString cls("MakedNdetaTrain");
218  TString name(fName);
219  Int_t sys = fOptions.AsInt("sys", 0);
220  if (name.Contains("aod")) name.ReplaceAll("aod", "dndeta");
221  else name.Append("_dndeta");
222  opts.Remove("run");
223  opts.Remove("sys");
224  opts.Remove("snn");
225  opts.Remove("field");
226  opts.Remove("tpc-ep");
227  opts.Remove("corr");
228  opts.Remove("max-strips");
229  opts.Remove("mc-tracks");
230  opts.Remove("secmap");
231  opts.Remove("dead");
232  opts.Add("abs-min-cent","PERCENT", "Absolute least centrality",-1.);
233  opts.Add("cent-bins", "BINS", "Centrality bins", "");
234  opts.Add("satellite", "Restrict analysis to satellite events", false);
235  opts.Add("trig", "TRIGGER", "Trigger type", "INEL");
236  opts.Add("filter", "FILTER", "Filter type", "OUTLIER|PILEUP-BIN");
237  opts.Add("ipz-bins", "BINS", "Lower bound on Ip Z", "u10");
238  opts.Add("scheme", "FLAGS", "Normalization scheme", "TRIGGER,EVENT");
239  opts.Add("trigEff", "EFFICIENCY","Trigger efficiency", 1.);
240  opts.Add("trigEff0", "EFFICIENCY","0-bin trigger efficiency", 1.);
241  opts.Add("mc", "Also analyse MC truth", fRailway->IsMC());
242  opts.Add("truth-config","FILE", "MC-Truth configuration", "");
243  opts.Add("mean-ipz", "MU", "Mean of IPz dist.", 0);
244  opts.Add("var-ipz", "SIGMA", "Variance of IPz dist.", -1);
245 
246  // Rewrite our URL
247  TString outString = fRailway->OutputLocation();
248  if (outString.IsNull()) outString = fEscapedName;
249  TUrl outUrl(outString);
250 
251  if (uopts.Find("pattern")) // && outString.EndsWith("AliAOD.root"))
252  uopts.Set("pattern", "*/AliAOD.root");
253  // if (uopts.Find("concat")) uopts.Set("concat", true);
254  if (uopts.Find("par")) uopts.Set("par", "task");
255 
256  std::stringstream s;
257  uopts.Store(s, "", "&", false, true);
258  outUrl.SetOptions(s.str().c_str());
259 
260  const char* defConfig="$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/dNdetaConfig.C";
261  opts.Set("url", outUrl.GetUrl());
262  opts.Set("type", "AOD");
263  opts.Set("forward-config",defConfig);
264  opts.Set("central-config",defConfig);
265  opts.Set("truth-config",defConfig);
266  if (!fDatimeString.IsNull()) opts.Set("date", fDatimeString);
267 
268  if (sys != 1) {
269  opts.Set("cent", "default");
270  opts.Set("trig", "V0AND");
271  opts.Set("scheme", "default");
272  opts.Set("centBins", "default");
273  SaveSetupROOT("dNdeta", cls, name, opts, &uopts);
274  if (asShellScript)
275  SaveSetupShell("dndeta", cls, name, opts, &uopts);
276  }
277  else {
278  name.ReplaceAll("dndeta", "dndeta_inel");
279  SaveSetupROOT("dNdetaINEL", cls, name, opts, &uopts);
280  if (asShellScript)
281  SaveSetupShell("dndeta_inel", cls, name, opts, &uopts);
282 
283  name.ReplaceAll("inel", "nsd");
284  opts.Set("trig", "V0AND");
285  SaveSetupROOT("dNdetaNSD", cls, name, opts, &uopts);
286  if (asShellScript)
287  SaveSetupShell("dndeta_nsd", cls, name, opts, &uopts);
288 
289  name.ReplaceAll("nsd", "inelgt0");
290  opts.Set("trig", "INELGT0");
291  SaveSetupROOT("dNdetaINELGt0", cls, name, opts, &uopts);
292  if (asShellScript)
293  SaveSetupShell("dndeta_inelgt0", cls, name, opts, &uopts);
294  }
295  }
301  {
302  std::ofstream f("Summarize.C");
303  if (!f) {
304  Error("SaveSummarize", "Failed to open Summarize.C script");
305  return;
306  }
307  f << "// Generated by " << ClassName() << "\n"
308  << "// WHAT is a bit mask of\n"
309  << "// 0x001 Event inspector\n"
310  << "// 0x002 Sharing filter\n"
311  << "// 0x004 Density calculator\n"
312  << "// 0x008 Corrector\n"
313  << "// 0x010 Histogram collector\n"
314  << "// 0x020 Analysis step cartoon\n"
315  << "// 0x040 Results\n"
316  << "// 0x080 Central\n"
317  << "// 0x100 Landscape\n"
318  << "// 0x200 Pause\n"
319  << "//\n"
320  << "void Summarize(const char* filename=\"forward.root\",\n"
321  << " UShort_t what=0x1FF)\n"
322  << "{\n"
323  << " const char* fwd=\"$ALICE_PHYSICS/PWGLF/FORWARD/analysis2\";\n"
324  << " gROOT->LoadMacro(Form(\"%s/DrawAODSummary.C\",fwd));\n"
325  << " DrawAODSummary(filename,what);\n"
326  << "}\n"
327  << "// EOF" << std::endl;
328  f.close();
329  }
335  {
336  std::ofstream f("DownloadAODs.C");
337  if (!f) {
338  Error("SaveDownloadAODs", "Failed to open DownloadAODs.C");
339  return;
340  }
341  f << "// Generated by " << ClassName() << "\n"
342  << "void DownloadAODs(Bool_t force=false)\n"
343  << "{\n"
344  << " if (!TGrid::Connect(\"alien://\")) {\n"
345  << " Error(\"DownloadAODs\",\"Failed to connect to AliEn\");\n"
346  << " return;\n"
347  << " }\n\n"
348  << " TString dir(\"" << fRailway->OutputPath() << "\");\n"
349  << " TString pat(\"*/AliAOD.root\");\n"
350  << " TGridResult* r = gGrid->Query(dir,pat);\n"
351  << " if (!r) {\n"
352  << " Error(\"DownloadAODs\",\"No result from query\");\n"
353  << " return;\n"
354  << " }\n\n"
355  << " Int_t n = r->GetEntries();\n"
356  << " Printf(\"=== Got a total of %d AOD files\",n);\n"
357  << " for (Int_t i = 0; i < n; i++) {\n"
358  << " TString path(r->GetKey(i, \"turl\"));\n"
359  << " TString dir(gSystem->DirName(path));\n"
360  << " TString sub(gSystem->BaseName(dir));\n"
361  << " TString subsub(gSystem->BaseName(gSystem->DirName(dir)));\n"
362  << " TString out = TString::Format(\"AliAOD_%s_%s.root\",\n"
363  << " subsub.Data(),sub.Data());\n"
364  << " if (!gSystem->AccessPathName(out.Data()) && !force) {\n"
365  << " Printf(\"=== Already have %s\",out.Data());\n"
366  << " continue;\n"
367  << " }\n"
368  << " Printf(\"=== Getting %s %s (%3d/%3d)\",\n"
369  << " subsub.Data(),sub.Data(),i,n);\n"
370  << " if (!TFile::Cp(path, out)) {\n"
371  << " Warning(\"DownloadAODs\",\"Failed to copy %s -> %s\",\n"
372  << " path.Data(), out.Data());\n"
373  << " continue;\n"
374  << " }\n"
375  << " }\n"
376  << "}\n"
377  << "// EOF\n"
378  << std::endl;
379  f.close();
380  }
382  {
383  std::ofstream out("MakeIndex.C");
384  out << "// Made by " << ClassName() << "\n"
385  << "void MakeIndex() {\n"
386  << " gROOT->LoadMacro(\"$ALICE_PHYSICS/PWGLF/FORWARD/trains/CreateIndex.C\");\n"
387  << " CreateIndex(\".\",\"aodTree\");\n"
388  << "}\n"
389  << "// EOD" << std::endl;
390  out.close();
391  }
392  void PostShellCode(std::ostream& f)
393  {
394  f << " echo \"=== Summarizing results ...\"\n"
395  << " aliroot -l -b -q ${prefix}Summarize.C\n"
396  << std::endl;
397  }
398 };
399 //
400 // EOF
401 //
Double_t AsDouble(const TString &name, Double_t def=0) const
Definition: Option.C:673
virtual void CreateCentralitySelection(Bool_t mc)
Definition: TrainSetup.C:759
void SaveDownloadAODs()
Definition: MakeAODTrain.C:334
double Double_t
Definition: External.C:58
TString fDatimeString
Definition: TrainSetup.C:1664
Railway * fRailway
Definition: TrainSetup.C:1666
TString fName
Definition: TrainSetup.C:1662
void SaveSetup(Bool_t asShellScript)
Definition: MakeAODTrain.C:194
TSystem * gSystem
void SaveMakeIndex()
Definition: MakeAODTrain.C:381
const char * ClassName() const
Definition: MakeAODTrain.C:186
Int_t AsInt(const TString &name, Int_t def=0) const
Definition: Option.C:645
static void SaveSetupShell(const TString &out, const TString &cls, const TString &name, const OptionList &opts, const OptionList *uopts)
Definition: TrainSetup.C:1495
void SetOnMCFwd(AliAnalysisTask *task, const TString &call, const TString &arg)
Definition: MakeAODTrain.C:78
Definition: External.C:92
const TString & Get(const TString &name) const
Definition: Option.C:596
virtual UShort_t Mode() const =0
Bool_t Has(const TString &name) const
Definition: Option.C:584
int Int_t
Definition: External.C:63
unsigned int UInt_t
Definition: External.C:33
void CreateTasks(AliAnalysisManager *mgr)
Definition: MakeAODTrain.C:92
const OptionList & Options() const
Definition: Railway.C:454
MakeAODTrain(const TString &name)
Definition: MakeAODTrain.C:29
void Set(const TString &name, const TString &value)
Definition: Option.C:736
virtual Bool_t IsMC() const
Definition: Railway.C:354
unsigned long ULong_t
Definition: External.C:38
Base classs for train specifications.
Option * Add(const TString &name, const TString &arg, const TString &desc, const TString &val="")
Definition: Option.C:421
const char * fwd
virtual TString OutputLocation() const
Definition: Railway.C:369
void SaveSummarize()
Definition: MakeAODTrain.C:300
virtual void SaveSetup(Bool_t asShellScript)
Definition: TrainSetup.C:1471
virtual Bool_t LoadAux(const TString &name, Bool_t copy=false)
Definition: Railway.C:255
void SavedNdeta(Bool_t asShellScript)
Definition: MakeAODTrain.C:205
OptionList fOptions
Definition: TrainSetup.C:1665
virtual TString OutputPath() const
Definition: Railway.C:361
unsigned short UShort_t
Definition: External.C:28
void PostShellCode(std::ostream &f)
Definition: MakeAODTrain.C:392
void SetOnFwd(AliAnalysisTask *task, const TString &call, const TString &arg)
Definition: MakeAODTrain.C:62
bool Bool_t
Definition: External.C:53
TString fEscapedName
Definition: TrainSetup.C:1663
virtual AliAnalysisTaskSE * CoupleSECar(const TString &macro, const TString &args, UInt_t mask=0)
Definition: TrainSetup.C:875
virtual Bool_t LoadLibrary(const TString &name, Bool_t slave=true, Bool_t forcePar=false)=0
void CreateCentralitySelection(Bool_t mc)
Definition: MakeAODTrain.C:180
static void SaveSetupROOT(const TString &out, const TString &cls, const TString &name, const OptionList &opts, const OptionList *uopts)
Definition: TrainSetup.C:1536