46 mCalibrator = std::make_unique<o2::calibration::IntegratedClusterCalibrator<DataTStruct>>();
47 const auto slotLength = ic.options().get<uint32_t>(
"tf-per-slot");
48 const auto maxDelay = ic.options().get<uint32_t>(
"max-delay");
49 const auto debug = ic.options().get<
bool>(
"debug");
50 mCalibrator->setSlotLength(slotLength);
51 mCalibrator->setMaxSlotsDelay(maxDelay);
52 mCalibrator->setDebug(
debug);
53 mCalibFileDir = ic.options().get<std::string>(
"output-dir");
54 if (mCalibFileDir !=
"/dev/null") {
57 mMetaFileDir = ic.options().get<std::string>(
"meta-output-dir");
58 if (mMetaFileDir !=
"/dev/null") {
61 mDumpCalibData = ic.options().get<
bool>(
"dump-calib-data");
70 if (mSetDataTakingCont) {
72 mSetDataTakingCont =
false;
76 const auto currents = pc.inputs().get<DataTStruct*>(pc.inputs().get(
"ifitc"));
77 mCalibrator->process(mCalibrator->getCurrentTFInfo().tfCounter, *currents);
79 LOGP(
debug,
"Created {} objects for TF {} and time stamp {}", mCalibrator->getTFinterval().size(), mCalibrator->getCurrentTFInfo().tfCounter, mCalibrator->getCurrentTFInfo().creation);
80 if (mCalibrator->hasCalibrationData()) {
81 sendOutput(pc.outputs());
87 LOGP(info,
"Finalizing calibration. Dumping all objects");
89 for (
int i = 0;
i < mCalibrator->getNSlots(); ++
i) {
90 mCalibrator->finalizeSlot(mCalibrator->getSlot(
i));
92 sendOutput(eos.outputs());
98 std::unique_ptr<o2::calibration::IntegratedClusterCalibrator<DataTStruct>> mCalibrator;
99 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
100 std::string mMetaFileDir{};
101 std::string mCalibFileDir{};
103 bool mSetDataTakingCont{
true};
104 bool mDumpCalibData{
false};
108 using FitType = DataDescriptionFITCurrents<DataT>;
109 auto calibrations = std::move(*mCalibrator).getCalibs();
110 const auto& intervals = mCalibrator->getTimeIntervals();
111 assert(calibrations.size() == intervals.size());
112 for (
unsigned int i = 0;
i < calibrations.size();
i++) {
113 const auto&
object = calibrations[
i];
114 o2::ccdb::CcdbObjectInfo info(FitType::getCCDBPath(), std::string{}, std::string{}, std::map<std::string, std::string>{}, intervals[
i].first, intervals[
i].second);
116 LOGP(info,
"Sending object {} / {} of size {} bytes, valid for {} : {} ", info.getPath(), info.getFileName(),
image->size(), info.getStartValidityTimestamp(), info.getEndValidityTimestamp());
120 if (mDumpCalibData && mCalibFileDir !=
"/dev/null") {
121 std::string calibFName = fmt::format(
"i{}c_cal_data_{}_{}.root", FitType::getName(), info.getStartValidityTimestamp(), info.getEndValidityTimestamp());
123 std::ofstream calFile(fmt::format(
"{}{}", mCalibFileDir, calibFName), std::ios::out | std::ios::binary);
126 }
catch (std::exception
const& e) {
127 LOG(error) <<
"Failed to store calibration data file " << calibFName <<
", reason: " << e.what();
130 if (mMetaFileDir !=
"/dev/null") {
134 calMetaData.
type =
"calib";
136 auto metaFileNameTmp = fmt::format(
"{}{}.tmp", mMetaFileDir, calibFName);
137 auto metaFileName = fmt::format(
"{}{}.done", mMetaFileDir, calibFName);
139 std::ofstream metaFileOut(metaFileNameTmp);
140 metaFileOut << calMetaData;
142 std::filesystem::rename(metaFileNameTmp, metaFileName);
143 }
catch (std::exception
const& e) {
144 LOG(error) <<
"Failed to store CTF meta data file " << metaFileName <<
", reason: " << e.what();
149 mCalibrator->initOutput();
157 std::vector<InputSpec> inputs;
158 inputs.emplace_back(
"ifitc", FitType::getDataOrigin(), FitType::getDataDescriptionFITC(), 0, Lifetime::Sporadic);
160 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
168 std::vector<OutputSpec> outputs;
173 fmt::format(
"{}-merge-integrated-clusters", FitType::getName()),
176 AlgorithmSpec{adaptFromTask<FITMergeIntegrateClusters<DataT>>(ccdbRequest)},
178 {
"debug", VariantType::Bool,
false, {
"Write debug output files"}},
179 {
"tf-per-slot", VariantType::UInt32, 1000u, {
"number of TFs per calibration time slot"}},
180 {
"max-delay", VariantType::UInt32, 3u, {
"number of slots in past to consider"}},
181 {
"output-dir", VariantType::String,
"none", {
"calibration files output directory, must exist"}},
182 {
"meta-output-dir", VariantType::String,
"/dev/null", {
"calibration metadata output directory, must exist (if not /dev/null)"}},
183 {
"dump-calib-data", VariantType::Bool,
false, {
"Dump integrated current calibration data to file"}}}};
TFitResultPtr fit(const size_t nBins, const T *arr, const T xMin, const T xMax, TF1 &func, std::string_view option="")