20#include <fairlogger/Logger.h>
30 if (mOutputDir.compare(
"/dev/null")) {
33 if (mMetaFileDir.compare(
"/dev/null")) {
39 mCalibrator->setUpdateAtTheEndOfRunOnly();
47 if (mRunStartTime == 0 || crTime < mRunStartTime) {
48 mRunStartTime = crTime;
49 if (mWriteRootOutput) {
50 mHistoFileMetaData = std::make_unique<o2::dataformats::FileMetaData>();
54 auto tfcounter = o2::header::get<o2::header::DataHeader*>(pc.
inputs().
get(
"clusters").header)->tfCounter;
56 auto cluTR = pc.
inputs().
get<gsl::span<TriggerRecord>>(
"cluTR");
57 LOG(detail) <<
"Processing TF with " <<
clusters.size() <<
" clusters and " << cluTR.size() <<
" TriggerRecords";
58 mCalibrator->process(tfcounter,
clusters, cluTR);
64 if (mWriteRootOutput) {
65 std::string runNumber = mHistoFileMetaData->run;
66 std::string histoFileName = mOutputDir + fmt::format(
"PHOS_RunByRunCalib_{}.root", runNumber);
67 TFile histoFileOut(histoFileName.c_str(),
"recreate");
68 mCalibrator->writeHistos();
72 if (mMetaFileDir.compare(
"/dev/null")) {
73 mHistoFileMetaData->fillFileData(histoFileName);
74 mHistoFileMetaData->type =
"calib";
75 mHistoFileMetaData->priority =
"high";
77 std::string metaFileNameTmp = mMetaFileDir + fmt::format(
"PHOS_RunByRunCalib_{}.tmp", runNumber);
78 std::string metaFileName = mMetaFileDir + fmt::format(
"PHOS_RunByRunCalib_{}.done", runNumber);
80 std::ofstream metaFileOut(metaFileNameTmp);
81 metaFileOut << *mHistoFileMetaData.get();
83 std::filesystem::rename(metaFileNameTmp, metaFileName);
84 }
catch (std::exception
const& e) {
85 LOG(error) <<
"Failed to store PHOS meta data file " << metaFileName <<
", reason: " << e.what();
87 LOG(info) <<
"Stored metadate file " << metaFileName <<
".done";
89 LOG(info) <<
"Did not store metafile as meta-dir=" << mMetaFileDir;
92 mRunByRun = mCalibrator->getCalibration();
94 LOG(info) <<
"End of stream reached, sending output to CCDB";
97 std::map<std::string, std::string> md;
103 <<
" of size " <<
image->size()
110 LOG(alarm) <<
"Incorrect fit results: " << mRunByRun[0] <<
"+-" << mRunByRun[1] <<
", "
111 << mRunByRun[2] <<
"+-" << mRunByRun[3] <<
", "
112 << mRunByRun[4] <<
"+-" << mRunByRun[5] <<
", "
113 << mRunByRun[6] <<
"+-" << mRunByRun[7];
119 mCalibrator->initOutput();
124 const float massmin = 0.125;
125 const float massmax = 0.155;
126 for (
int mod = 0; mod < 4; mod++) {
127 res &= mRunByRun[2 * mod] < massmax && mRunByRun[2 * mod] > massmin;
135 std::vector<OutputSpec> outputs;
139 std::vector<InputSpec> inputs;
140 inputs.emplace_back(
"clusters",
"PHS",
"CLUSTERS");
141 inputs.emplace_back(
"cluTR",
"PHS",
"CLUSTERTRIGREC");
142 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
150 "calib-phos-runbyrun",
153 AlgorithmSpec{adaptFromTask<PHOSRunbyrunCalibDevice>(ccdbRequest, outputDir, metaFileDir, writeRootOutput)},
Utils and constants for calibration and related workflows.
Device to calculate PHOS time shift (L1phase)
void checkUpdates(o2::framework::ProcessingContext &pc)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
static std::string generateFileName(const std::string &inp)
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
long getEndValidityTimestamp() const
const std::string & getPath() const
void setMetaData(const std::map< std::string, std::string > &md)
long getStartValidityTimestamp() const
const std::string & getFileName() const
static constexpr long YEAR
static constexpr long MINUTE
void snapshot(const Output &spec, T const &object)
DataAllocator & outputs()
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
void run(o2::framework::ProcessingContext &pc)
void endOfStream(o2::framework::EndOfStreamContext &ec)
void init(o2::framework::InitContext &ic)
constexpr TFType INFINITE_TF
std::vector< ConfigParamSpec > Options
o2::framework::DataProcessorSpec getPHOSRunbyrunCalibDeviceSpec(bool useCCDB, const std::string &outputDir, const std::string &metaFileDir, bool writeRootOutput)
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
static std::string rectifyDirectory(const std::string_view p)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
std::vector< Cluster > clusters