Useful for automating tasks done frequently.
<< " return;\n"
<< " }\n\n"
<< " Int_t n = r->GetEntries();\n"
+ << " Printf(\"=== Got a total of %d AOD files\",n);\n"
<< " for (Int_t i = 0; i < n; i++) {\n"
<< " TString path(r->GetKey(i, \"turl\"));\n"
- << " TString sub(gSystem->BaseName(gSystem->DirName(path)));\n"
- << " TString out = TString::Format(\"AliAOD_%s.root\",sub.Data());\n"
+ << " TString dir(gSystem->DirName(path));\n"
+ << " TString sub(gSystem->BaseName(dir));\n"
+ << " TString subsub(gSystem->BaseName(gSystem->DirName(dir)));\n"
+ << " TString out = TString::Format(\"AliAOD_%s_%s.root\",\n"
+ << " subsub.Data(),sub.Data());\n"
+ << " Printf(\"=== Getting %s %s (%3d/%3d)\",\n"
+ << " subsub.Data(),sub.Data(),i,n);\n"
<< " if (!TFile::Cp(path, out)) {\n"
<< " Warning(\"DownloadAODs\",\"Failed to copy %s -> %s\",\n"
<< " path.Data(), out.Data());\n"
<< std::endl;
f.close();
}
+ void PostShellCode(std::ostream& f)
+ {
+ f << " echo \"=== Summarizing results ...\"\n"
+ << " aliroot -l -b -q ${prefix}Summarize.C\n"
+ << std::endl;
+ }
};
//
// EOF
void SaveSetup(Bool_t asShellScript)
{
TrainSetup::SaveSetup(asShellScript);
-
+ SaveExtract();
+ SaveSummarize();
+ }
+ void SaveExtract()
+ {
std::ofstream f("Extract.C");
if (!f) {
Error("SaveSetup", "Failed to open Extract.C");
f << "// Generated by " << ClassName() << "\n"
<< "void Extract()\n"
<< "{\n"
- << " gROOT->LoadMacro(\"$ALICE_ROOT/PWGLF/FORWARD/analysis2/corrs/ExtractELoss.C\");\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/corrs/ExtractELoss.C\",fwd));\n"
<< " ExtractELoss(\"forward_eloss.root\","
<< fHelper->IsMC() << ");\n"
<< "}\n"
<< "// EOF" << std::endl;
f.close();
}
+ void SaveSummarize()
+ {
+ std::ofstream f("Summarize.C");
+ if (!f) {
+ Error("SaveSummarize", "Failed to open Summarize.C script");
+ return;
+ }
+ f << "// Generated by " << ClassName() << "\n"
+ << "//\n"
+ << "void Summarize(Bool_t mc=false,\n"
+ << " const char* filename=\"forward_eloss.root\")\n"
+ << "{\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/corrs/DrawCorrELoss.C\",fwd));\n"
+ << " DrawCorrELoss(mc,filename);\n"
+ << "}\n"
+ << "// EOF" << std::endl;
+ f.close();
+ }
+ void PostShellCode(std::ostream& f)
+ {
+ f << " echo \"=== Extracting Corrections ...\"\n"
+ << " aliroot -l -b -q ${prefix}Extract.C\n"
+ << " echo \"=== Summarizing results ...\"\n"
+ << " aliroot -l -b -q ${prefix}Summarize.C\n"
+ << " if test x$dest = x ; then return ; fi\n"
+ << " echo \"=== Uploading to ${dest} ...\"\n"
+ << " aliroot -l -b -q Upload.C\\(\\\"${dest}\\\"\\);\n"
+ << std::endl;
+ }
};
//
fOptions.Add("flow", "Add flow tasks");
fOptions.Add("cent", "Use centrality");
// ESD settings
+ fOptions.Add("run", "NUMBER", "Run number", 0);
fOptions.Add("sys", "SYSTEM", "1:pp, 2:PbPb, 3:pPb", "");
fOptions.Add("snn", "ENERGY", "Center of mass energy in GeV", "");
fOptions.Add("field", "STRENGTH","L3 field strength in kG", "");
fOptions.Add("cut-edges", "Cut acceptance edges");
// Flow AOD settings
fOptions.Add("mom", "Flow moments to analyse", "234", "234");
- fOptions.Add("eta-gap", "Whether to use an eta-gap", "[no,yes,both]", "both");
+ fOptions.Add("eta-gap", "Whether to use an eta-gap", "[no,yes,both]",
+ "both");
fOptions.Add("eg-value", "Set value in |eta| of the eta gap", "2.0");
- fOptions.Add("use-cent", "Whether to use the impact parameter for centrality");
+ fOptions.Add("b-cent","Whether to use the impact parameter for centrality");
fOptions.Add("afterburner", "What to afterburn", "[eta,phi,b,pid]", "");
fOptions.Add("ab-type", "Type of afterburner", "1|2|3|4", "");
fOptions.Add("ab-order", "Order of afterburner", "2|3|4|5|6", "");
gROOT->Macro("AddTaskCopyHeader.C");
// --- Get options -----------------------------------------------
+ ULong_t run = fOptions.AsInt("run", 0);
UShort_t sys = fOptions.AsInt("sys", 0);
UShort_t sNN = fOptions.AsInt("snn", 0);
UShort_t fld = fOptions.AsInt("field", 0);
// --- Add the task ----------------------------------------------
TString fwdConfig = fOptions.Get("forward-config");
- gROOT->Macro(Form("AddTaskForwardMult.C(%d,%d,%d,%d,\"%s\")",
- mc, sys, sNN, fld, fwdConfig.Data()));
+ gROOT->Macro(Form("AddTaskForwardMult.C(%d,%d,%d,%d,%d,\"%s\")",
+ mc, runNo, sys, sNN, fld, fwdConfig.Data()));
fHelper->LoadAux(gSystem->Which(gROOT->GetMacroPath(), fwdConfig));
// --- Add the task ----------------------------------------------
TString cenConfig = fOptions.Get("central-config");
- gROOT->Macro(Form("AddTaskCentralMult.C(%d,%d,%d,%d,\"%s\")",
- mc, sys, sNN, fld, cenConfig.Data()));
+ gROOT->Macro(Form("AddTaskCentralMult.C(%d,%d,%d,%d,%d,\"%s\")",
+ mc, runNo, sys, sNN, fld, cenConfig.Data()));
fHelper->LoadAux(gSystem->Which(gROOT->GetMacroPath(), cenConfig));
// --- Add MC particle task --------------------------------------
TString type = fOptions.Get("mom");
TString etaGap = fOptions.Get("eta-gap");
Double_t egValue = fOptions.AsDouble("eg-value");
- Bool_t useCent = fOptions.AsBool("use-cent");
+ Bool_t useCent = fOptions.AsBool("b-cent");
TString addFlow = fOptions.Get("afterburner");
Int_t abType = fOptions.AsInt("ab-type");
Int_t abOrder = fOptions.AsInt("ab-order");
Double_t spdCut = fOptions.AsDouble("outlier-spd");
// --- Add the task ----------------------------------------------
+ // Notice the '%%d' for second argument. We substitute that later
+ TString arg(Form("AddTaskForwardFlow.C(\"%s\",%%d,%d,%f,%f,%f,%d,%d,\"%s\",%d,%d)",
+ type.Data(),
+ mc,
+ fmdCut,
+ spdCut,
+ egValue,
+ useCent,
+ satVtx,
+ addFlow.Data(),
+ abType,
+ abOrder));
+
if (etaGap.Contains("no") || etaGap.Contains("false") ||
etaGap.Contains("both"))
- gROOT->Macro(Form("AddTaskForwardFlow.C(\"%s\",%d,%d,%f,%f,%f,%d,%d,\"%s\",%d,%d)",
- type.Data(),
- kFALSE,
- mc,
- fmdCut,
- spdCut,
- egValue,
- useCent,
- satVtx,
- addFlow.Data(),
- abType,
- abOrder));
+ gROOT->Macro(Form(arg.Data(), false));
if (etaGap.Contains("yes") || etaGap.Contains("true") ||
etaGap.Contains("both"))
- gROOT->Macro(Form("AddTaskForwardFlow.C(\"%s\",%d,%d,%f,%f,%f,%d,%d,\"%s\",%d,%d)",
- type.Data(),
- kTRUE,
- mc,
- fmdCut,
- spdCut,
- egValue,
- useCent,
- satVtx,
- addFlow.Data(),
- abType,
- abOrder));
+ gROOT->Macro(Form(arg.Data(), true));
}
}
//__________________________________________________________________
<< "// EOF" << std::endl;
f.close();
}
+ void PostShellCode(std::ostream& f)
+ {
+ f << " echo \"=== Extracting Corrections ...\"\n"
+ << " aliroot -l -b -q ${prefix}Extract.C\n"
+ << " echo \"=== Summarizing results ...\"\n"
+ << " aliroot -l -b -q ${prefix}Summarize.C\n"
+ << " if test x$dest = x ; then return ; fi\n"
+ << " echo \"=== Uploading to ${dest} ...\"\n"
+ << " aliroot -l -b -q Upload.C\\(\\\"${dest}\\\"\\);"
+ << std::endl;
+ }
};
//
fOptions.Add("vzMax", "CENTIMETER", "Max Ip Z", +4);
fOptions.Add("max-n", "NUMBER", "Maximum Nch", 150);
fOptions.Add("phi-acc", "Use stored phi acceptance", true);
- fOptions.Add("asymmetric", "Make asymmetric (+/-) bins", true);
+ fOptions.Add("asymmetric", "Make asymmetric (+/-) bins", false);
+ fOptions.Add("n-divisions","NUMBER", "Divisions per particle #", 1);
}
protected:
/**
Double_t vzMin = fOptions.AsDouble("vzmin", -4);
Double_t vzMax = fOptions.AsDouble("vzmax", +4);
Int_t maxN = fOptions.AsInt("max-n", 150);
+ Int_t nDiv = fOptions.AsInt("n-divisions", 1);
Bool_t phiAcc = fOptions.AsBool("phi-acc");
Bool_t aSymm = fOptions.AsBool("asymmetric");
// --- Form arguments --------------------------------------------
TString args;
- args.Form("\"%s\",%f,%f,%d,%d,%d",
- trig.Data(), vzMin, vzMax, maxN, phiAcc, aSymm);
+ args.Form("\"%s\",%f,%f,%d,%d,%d,%d",
+ trig.Data(), vzMin, vzMax, maxN, nDiv, phiAcc, aSymm);
// --- Add the task ----------------------------------------------
gROOT->Macro(Form("AddTaskForwardMultDists.C(%s);", args.Data()));
}
TrainSetup::SaveSetup(asShellScript);
SaveSummarize();
+ SaveUnfold();
+ }
+ void SaveUnfold()
+ {
+ std::ofstream f("Unfold.C");
+ if (!f) {
+ Error("SaveUnfold", "Failed to open Unfold.C script");
+ return;
+ }
+ f << "// Generated by " << ClassName() << "\n"
+ << "void Unfold(const char* other=\"\",\n"
+ << " const char* here=\"forward_multdists.root\")\n"
+ << "{\n"
+ << " const char* rooUnfold = gSystem->Getenv(\"ROOUNFOLD\");\n"
+ << " if (rooUnfold) {\n"
+ << " gSystem->AddIncludePath(Form(\"-I%s/src\",rooUnfold));\n"
+ << " gSystem->AddDynamicPath(Form(\"%s\", rooUnfold));\n"
+ << " }\n"
+ << " gSystem->Load(\"libRooUnfold\");\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/scripts/UnfoldMultDists.C++g\",fwd));\n"
+ << " UnfoldMultDists(\"bayes\",4,here,other);\n"
+ << "}\n"
+ << "// EOF" << std::endl;
+
+ f.close();
}
void SaveSummarize()
{
<< "void Summarize(const char* filename=\"forward_multdists.root\",\n"
<< " UShort_t what=0xF)\n"
<< "{\n"
- << " gROOT->LoadMacro(\"$ALICE_ROOT/PWGLF/FORWARD/analysis2/DrawMultDistsSummary.C\");\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/DrawMultDistsSummary.C\",fwd));\n"
<< " DrawMultDistsSummary(filename,what);\n"
<< "}\n"
<< "// EOF" << std::endl;
f.close();
}
+ void PostShellCode(std::ostream& f)
+ {
+ f << " echo \"=== Summarizing results ...\"\n"
+ << " aliroot -l -b -q ${prefix}Summarize.C\n"
+ << " echo \"=== Unfolding ...\"\n"
+ << " export ROOUNFOLD=${HOME}/tmp/RooUnfoldMyEdits\n"
+ << " aliroot -l -b -q ${prefix}Unfold.C\n"
+ << std::endl;
+ }
};
//
// EOF
<< "// 0x010 Only min-bias (no centrality)\n"
<< "// 0x020 Landscape\n"
<< "// 0x040 Pause\n"
+ << "// 0x100 Also draw single result canvas\n"
<< "//\n"
<< "void Summarize(const char* filename=\"forward_dndeta.root\",\n"
- << " UShort_t what=0xF)\n"
+ << " UShort_t what=0x0F)\n"
<< "{\n"
- << " gROOT->LoadMacro(\"$ALICE_ROOT/PWGLF/FORWARD/analysis2/DrawdNdetaSummary.C\");\n"
- << " DrawdNdetaSummary(filename,what);\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/DrawdNdetaSummary.C\",fwd));\n"
+ << " DrawdNdetaSummary(filename,what & 0xFF);\n"
+ << "\n"
+ << " if (!(what & 0x100)) return;\n"
+ << " gROOT->SetMacroPath(Form(\"../:%s\",gROOT->GetMacroPath()));\n"
+ << " gROOT->Macro(\"Draw.C\");\n"
<< "}\n"
<< "// EOF" << std::endl;
f.close();
<< " Float_t vzMin=999,\n"
<< " Float_t vzMax=-999)\n"
<< "{\n"
- << " gROOT->LoadMacro(\"$ALICE_ROOT/PWGLF/FORWARD/analysis2/"
- << "DrawdNdeta.C++\");\n\n"
+ << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
+ << " gROOT->LoadMacro(Form(\"%s/DrawdNdeta.C++\",fwd));\n"
<< " if (title.EqualTo(\"help\",TString::kIgnoreCase)) {\n"
<< " DrawdNdeta(\"help\"); // Get the help\n"
<< " return;\n"
<< "//" << std::endl;
o.close();
}
+ void PostShellCode(std::ostream& f)
+ {
+ f << " echo \"=== Summarizing results ...\"\n"
+ << " aliroot -l -b -q ${prefix}Summarize.C\n"
+ << " echo \"=== Draw results ...\"\n"
+ << " aliroot -l -b -q ${prefix}Draw.C\n"
+ << std::endl;
+ }
};
//
// EOF