/** * @file MakeFMDELossTrain.C * @author Christian Holm Christensen * @date Fri Jun 1 13:53:02 2012 * * @brief * * * @ingroup pwglf_forward_trains_specific */ #include "TrainSetup.C" //==================================================================== /** * Analysis train to do energy loss fits * * @ingroup pwglf_forward_trains_specific * @ingroup pwglf_forward_eloss */ class MakeFMDELossTrain : public TrainSetup { public: /** * Constructor. * * @param name Name of train */ MakeFMDELossTrain(const char* name = "FMD Energy Loss") : TrainSetup(name) { fOptions.Add("only-mb", "Only collect statistics from MB events"); fOptions.Add("config", "FILE", "Configuration", "elossFitConfig.C"); fOptions.Add("corr", "DIR", "Corrections dir", ""); fOptions.Set("type", "ESD"); } protected: //------------------------------------------------------------------ /** * Create the analysis manager * * @param name Name of the analysis * * @return Created analysis manager */ virtual AliAnalysisManager* CreateAnalysisManager(const char* name) { AliAnalysisManager* mgr = TrainSetup::CreateAnalysisManager(name); // mgr->SetAutoBranchLoading(false); return mgr; } //__________________________________________________________________ /** * Create the tasks * * @param mgr Analysis manager */ void CreateTasks(AliAnalysisManager* mgr) { // --- Output file name ------------------------------------------ AliAnalysisManager::SetCommonFileName("forward_eloss.root"); // --- Load libraries/pars --------------------------------------- fHelper->LoadLibrary("PWGLFforward2"); // --- Set load path --------------------------------------------- gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2", gROOT->GetMacroPath())); // --- Check if this is MC --------------------------------------- Bool_t mc = HasMCHandler(); Bool_t onlyMB = fOptions.AsBool("only-mb"); TString config = fOptions.Get("config"); TString corrs = ""; if (fOptions.Has("corr")) corrs = fOptions.Get("corr"); // --- Add the task ---------------------------------------------- AddTask("AddTaskFMDELoss.C", Form("%d,%d,\"%s\",\"%s\"", mc, onlyMB, config.Data(), corrs.Data())); fHelper->LoadAux(gSystem->Which(gROOT->GetMacroPath(), config), true); if (!corrs.IsNull()) fHelper->LoadAux(Form("%s/fmd_corrections.root",corrs.Data()), true); } /** * Create entrality selection if enabled * * @param mc Whether this is MC or not * @param mgr Analysis manager */ virtual void CreateCentralitySelection(Bool_t mc, AliAnalysisManager* mgr) { if (!fOptions.Has("cent")) return; const char* name = "CentralitySelection"; gROOT->Macro("AddTaskCentrality.C"); AliCentralitySelectionTask* ctask = dynamic_cast(mgr->GetTask(name)); if (!ctask) return; // ctask->SetPass(fESDPass); if (mc) ctask->SetMCInput(); } /** * Crete output handler - we don't want one here. * * @return 0 */ AliVEventHandler* CreateOutputHandler(UShort_t) { return 0; } //__________________________________________________________________ const char* ClassName() const { return "MakeFMDELossTrain"; } //__________________________________________________________________ /** * Overloaded to create new Extract.C in the output * directory * * @param asShellScript */ void SaveSetup(Bool_t asShellScript) { TrainSetup::SaveSetup(asShellScript); SaveExtract(); SaveSummarize(); SaveReFit(); } void SaveExtract() { std::ofstream f("Extract.C"); if (!f) { Error("SaveSetup", "Failed to open Extract.C"); return; } f << "// Generated by " << ClassName() << "\n" << "void Extract(Bool_t mc=" << HasMCHandler() << ",\n" << " const char* file=\"forward_eloss.root\")\n" << "{\n" << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n" << " gROOT->LoadMacro(Form(\"%s/corrs/ExtractELoss.C\",fwd));\n" << " ExtractELoss(file,mc);\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 << std::boolalpha << "// Generated by " << ClassName() << "\n" << "//\n" << "void Summarize(Bool_t mc=" << HasMCHandler() << ",\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 SaveReFit() { std::ofstream f("ReFit.C"); if (!f) { Error("SaveRerun", "Failed to open ReFit.C script"); return; } f << std::boolalpha << "// Generated by " << ClassName() << "\n" << "// If force=true, then force set parameters\n" << "// If shift=true, enable extra shift in Delta from sigma/xi\n" << "//\n" << "void ReFit(Bool_t force=false,\n" << " Bool_t shift=true,\n" << " const char* filename=\"forward_eloss.root\")\n" << "{\n" << " const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n" << " gROOT->LoadMacro(Form(\"%s/corrs/RerunELossFits.C\",fwd));\n" << " RerunELossFits(force,filename);\n" << "}\n" << "// EOF" << std::endl; f.close(); } void PostShellCode(std::ostream& f) { f << " mc=" << std::boolalpha << HasMCHandler() << "\n" << " echo \"=== Extracting Corrections ...\"\n" << " aliroot -l -b -q ${prefix}Extract.C\\($mc\\)\n" << " echo \"=== Summarizing results ...\"\n" << " aliroot -l -b -q ${prefix}Summarize.C\\($mc\\)\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; } }; // // EOF //