/** * Script to draw the energy loss fits * * @ingroup pwglf_forward_scripts_corr */ #ifndef __CINT__ #include #include #include #include "AliFMDCorrELossFit.h" #include "AliForwardCorrectionManager.h" #endif //____________________________________________________________________ /** * Extract the energy loss correction object from file and rename it * according to the settings * * @param fname File to extract from * @param sys Collision system (pp, PbPb) * @param sNN Center of mass energy (in GeV) per nucleon * @param field L3 magnetic field (-5,0,5) in kGaus * @param mc Whether this is from MC data or not * * @ingroup pwglf_forward_scripts_corr */ void ExtractELoss(const char* fname="forward_eloss.root", Bool_t mc=false, UShort_t sys=1, UShort_t sNN=900, Short_t field=5) { #ifdef __CINT__ gROOT->Macro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C"); #endif TFile* file = TFile::Open(fname, "READ"); if (!file) { Error("ExtractELoss", "Couldn't open %s", fname); return; } if (sys <= 0 || sys > 3 || sNN <= 0) { TList* base = static_cast(file->Get("Forward")); if (!base) { Error("ExtractELoss", "Couldn't get forward list from %s", fname); return; } TList* insp = static_cast(base->FindObject("fmdEventInspector")); if (!insp) { Error("ExtractELoss", "Couldn't get event inspector list from %s",fname); return; } TObject* oSys = insp->FindObject("sys"); TObject* oSNN = insp->FindObject("sNN"); TObject* oFld = insp->FindObject("field"); if (oSys) sys = oSys->GetUniqueID(); if (oSNN) sNN = oSNN->GetUniqueID(); if (oFld) field = oFld->GetUniqueID(); } if (sys <= 0 || sys > 3) { Error("ExtractELoss", "Couldn't get system type (%d), " "collision energy (%d), " "and/or field strength (%d)", sys, sNN, field); return; } TList* forward = static_cast(file->Get("ForwardResults")); // static_cast(file->Get("PWGLFforwardDnDeta/Forward")); if (!forward) { Error("ExtractELoss", "Couldn't get forward list from %s", fname); return; } TList* fitter = static_cast(forward->FindObject("fmdEnergyFitter")); if (!fitter) { Error("ExtractELoss", "Couldn't get fitter folder"); return; } TString cName(AliFMDCorrELossFit::Class()->GetName()); AliFMDCorrELossFit* obj = static_cast(fitter->FindObject(cName)); if (!obj) { Error("ExtractELoss", "Couldn't get %s correction object", cName.Data()); return; } AliForwardCorrectionManager& mgr = AliForwardCorrectionManager::Instance(); mgr.WriteFile(AliForwardCorrectionManager::kELossFits, sys, sNN, field, mc, obj, false); std::ofstream f("Upload.C"); if (!f) { Error("ExtractELoss", "Failed to open Upload.C"); return; } f << "// Generated by ExtractELoss.C\n" << "void Upload(const TUrl& url)\n" << "{\n" << " if (TString(\"alien\").EqualTo(url.GetProtocol())) {\n" << " if (!TGrid::Connect(\"alien://\")) {\n" << " Error(\"Upload\", \"Failed to connect to AliEn\");\n" << " return;\n" << " }\n" << " }\n\n"; mgr.SetPrefix(""); TString fef(mgr.GetFileName(AliForwardCorrectionManager::kELossFits, sys, sNN, field, mc)); TString fep(mgr.GetFilePath(AliForwardCorrectionManager::kELossFits, sys, sNN, field, mc)); f << " TString src = \"" << fef << "\";\n" << " TString dest = \"" << fep << "\";\n" << " TString out; out.Form(\"%s%s\",url.GetUrl(),dest.Data());\n\n" << " TString dir(gSystem->DirName(out));\n" << " if (gSystem->AccessPathName(dir)) {\n" << " if (gSystem->mkdir(dir, true) < 0) {\n" << " Warning(\"Upload\",\"Failed to make directory %s\"," << " dir.Data());\n" << " return;\n" << " }\n" << " }\n" << " if (!TFile::Cp(src,out)) \n" << " Warning(\"Upload\",\"Failed to upload %s -> %s\",\n" << " src.Data(), out.Data());\n" << "}\n" << "// EOF" << std::endl; f.close(); Info("ExtracELoss", "Run generated Upload.C(DEST) script to copy files in place"); } //____________________________________________________________________ /** * Extract the energy loss correction object from file and rename it * according to the settings * * @param fname File to extract from * @param sys Collision system (pp, PbPb) * @param sNN Center of mass energy (in GeV) per nucleon * @param field L3 magnetic field (-5,0,5) in kGaus * @param mc Whether this is from MC data or not * * @ingroup pwglf_forward_scripts_corr */ void ExtractELoss(const char* fname="energyFits.root", const char* sys="p-p", Float_t sNN=900, Float_t field=5, Bool_t mc=false) { UShort_t uSys = AliForwardUtil::ParseCollisionSystem(sys); UShort_t usNN = AliForwardUtil::ParseCenterOfMassEnergy(uSys,sNN); Short_t sField = AliForwardUtil::ParseMagneticField(field); ExtractELoss(fname, mc, uSys, usNN, sField); } //____________________________________________________________________ // // EOF //