AliPhysics  fffcdf3 (fffcdf3)
 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  task, 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  task, 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  void SavedNdeta(Bool_t asShellScript)
201  {
202  if (!fRailway) {
203  Warning("MakeAODTrain::SaveSetup",
204  "Cannot make dNdeta.C script without helper");
205  return;
206  }
207 
208  AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
209  Bool_t mc = mgr && (mgr->GetMCtruthEventHandler() != 0);
210  OptionList uopts(fRailway->Options());
211  OptionList opts(fOptions);
212  TString cls("MakedNdetaTrain");
213  TString name(fName);
214  Int_t sys = fOptions.AsInt("sys", 0);
215  if (name.Contains("aod")) name.ReplaceAll("aod", "dndeta");
216  else name.Append("_dndeta");
217  opts.Remove("run");
218  opts.Remove("sys");
219  opts.Remove("snn");
220  opts.Remove("field");
221  opts.Remove("tpc-ep");
222  opts.Remove("corr");
223  opts.Remove("max-strips");
224  opts.Remove("mc-tracks");
225  opts.Remove("secmap");
226  opts.Remove("dead");
227  opts.Add("abs-min-cent","PERCENT", "Absolute least centrality",-1.);
228  opts.Add("cent-bins", "BINS", "Centrality bins", "");
229  opts.Add("satellite", "Restrict analysis to satellite events", false);
230  opts.Add("trig", "TRIGGER", "Trigger type", "INEL");
231  opts.Add("filter", "FILTER", "Filter type", "OUTLIER|PILEUP-BIN");
232  opts.Add("ipz-bins", "BINS", "Lower bound on Ip Z", "u10");
233  opts.Add("scheme", "FLAGS", "Normalization scheme", "TRIGGER,EVENT");
234  opts.Add("trigEff", "EFFICIENCY","Trigger efficiency", 1.);
235  opts.Add("trigEff0", "EFFICIENCY","0-bin trigger efficiency", 1.);
236  opts.Add("mc", "Also analyse MC truth", fRailway->IsMC());
237  opts.Add("truth-config","FILE", "MC-Truth configuration", "");
238  opts.Add("mean-ipz", "MU", "Mean of IPz dist.", 0);
239  opts.Add("var-ipz", "SIGMA", "Variance of IPz dist.", -1);
240 
241  // Rewrite our URL
242  TString outString = fRailway->OutputLocation();
243  if (outString.IsNull()) outString = fEscapedName;
244  TUrl outUrl(outString);
245 
246  if (uopts.Find("pattern")) // && outString.EndsWith("AliAOD.root"))
247  uopts.Set("pattern", "*/AliAOD.root");
248  // if (uopts.Find("concat")) uopts.Set("concat", true);
249  if (uopts.Find("par")) uopts.Set("par", "task");
250 
251  std::stringstream s;
252  uopts.Store(s, "", "&", false, true);
253  outUrl.SetOptions(s.str().c_str());
254 
255  const char* defConfig="$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/dNdetaConfig.C";
256  opts.Set("url", outUrl.GetUrl());
257  opts.Set("type", "AOD");
258  opts.Set("forward-config",defConfig);
259  opts.Set("central-config",defConfig);
260  opts.Set("truth-config",defConfig);
261  if (!fDatimeString.IsNull()) opts.Set("date", fDatimeString);
262 
263  if (sys != 1) {
264  opts.Set("cent", "default");
265  opts.Set("trig", "V0AND");
266  opts.Set("scheme", "default");
267  opts.Set("centBins", "default");
268  SaveSetupROOT("dNdeta", cls, name, opts, &uopts);
269  if (asShellScript)
270  SaveSetupShell("dndeta", cls, name, opts, &uopts);
271  }
272  else {
273  name.ReplaceAll("dndeta", "dndeta_inel");
274  SaveSetupROOT("dNdetaINEL", cls, name, opts, &uopts);
275  if (asShellScript)
276  SaveSetupShell("dndeta_inel", cls, name, opts, &uopts);
277 
278  name.ReplaceAll("inel", "nsd");
279  opts.Set("trig", "V0AND");
280  SaveSetupROOT("dNdetaNSD", cls, name, opts, &uopts);
281  if (asShellScript)
282  SaveSetupShell("dndeta_nsd", cls, name, opts, &uopts);
283 
284  name.ReplaceAll("nsd", "inelgt0");
285  opts.Set("trig", "INELGT0");
286  SaveSetupROOT("dNdetaINELGt0", cls, name, opts, &uopts);
287  if (asShellScript)
288  SaveSetupShell("dndeta_inelgt0", cls, name, opts, &uopts);
289  }
290  }
296  {
297  std::ofstream f("Summarize.C");
298  if (!f) {
299  Error("SaveSummarize", "Failed to open Summarize.C script");
300  return;
301  }
302  f << "// Generated by " << ClassName() << "\n"
303  << "// WHAT is a bit mask of\n"
304  << "// 0x001 Event inspector\n"
305  << "// 0x002 Sharing filter\n"
306  << "// 0x004 Density calculator\n"
307  << "// 0x008 Corrector\n"
308  << "// 0x010 Histogram collector\n"
309  << "// 0x020 Analysis step cartoon\n"
310  << "// 0x040 Results\n"
311  << "// 0x080 Central\n"
312  << "// 0x100 Landscape\n"
313  << "// 0x200 Pause\n"
314  << "//\n"
315  << "void Summarize(const char* filename=\"forward.root\",\n"
316  << " UShort_t what=0x1FF)\n"
317  << "{\n"
318  << " const char* fwd=\"$ALICE_PHYSICS/PWGLF/FORWARD/analysis2\";\n"
319  << " gROOT->LoadMacro(Form(\"%s/DrawAODSummary.C\",fwd));\n"
320  << " DrawAODSummary(filename,what);\n"
321  << "}\n"
322  << "// EOF" << std::endl;
323  f.close();
324  }
325  void PostShellCode(std::ostream& f)
326  {
327  f << " echo \"=== Summarizing results ...\"\n"
328  << " aliroot -l -b -q ${prefix}Summarize.C\n"
329  << std::endl;
330  }
331 };
332 //
333 // EOF
334 //
Double_t AsDouble(const TString &name, Double_t def=0) const
Definition: Option.C:673
virtual void CreateCentralitySelection(Bool_t mc)
Definition: TrainSetup.C:760
double Double_t
Definition: External.C:58
TString fDatimeString
Definition: TrainSetup.C:1672
Railway * fRailway
Definition: TrainSetup.C:1674
TString fName
Definition: TrainSetup.C:1670
void SaveSetup(Bool_t asShellScript)
Definition: MakeAODTrain.C:194
TSystem * gSystem
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:1503
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
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:295
virtual void SaveSetup(Bool_t asShellScript)
Definition: TrainSetup.C:1479
virtual Bool_t LoadAux(const TString &name, Bool_t copy=false)
Definition: Railway.C:255
void SavedNdeta(Bool_t asShellScript)
Definition: MakeAODTrain.C:200
OptionList fOptions
Definition: TrainSetup.C:1673
unsigned short UShort_t
Definition: External.C:28
void PostShellCode(std::ostream &f)
Definition: MakeAODTrain.C:325
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:1671
virtual AliAnalysisTaskSE * CoupleSECar(const TString &macro, const TString &args, UInt_t mask=0)
Definition: TrainSetup.C:883
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:1544