40 auto onepix = ic.
options().
get<
bool>(
"1pix-only");
41 LOG(info) <<
"Fast 1=pixel calibration: " << onepix;
42 auto probT = ic.
options().
get<
float>(
"prob-threshold");
43 auto probTRelErr = ic.
options().
get<
float>(
"prob-rel-err");
44 mNoiseCutIB = ic.
options().
get<
float>(
"cut-ib");
45 LOGP(info,
"Setting the probability threshold to {} with relative error {}", probT, probTRelErr);
46 mStopMeOnly = ic.
options().
get<
bool>(
"stop-me-only");
47 mCalibrator = std::make_unique<CALIBRATOR>(onepix, probT, probTRelErr);
48 mCalibrator->setNThreads(ic.
options().
get<
int>(
"nthreads"));
49 mValidityDays = ic.
options().
get<
int>(
"validity-days");
50 if (mValidityDays < 1) {
58 static bool firstCall =
true;
59 if (tinfo.globalRunNumberChanged) {
60 mRunStopRequested =
false;
61 mInitOnceDone =
false;
69 if (mRunStopRequested) {
72 updateTimeDependentParams(pc);
80 mCalibrator->setMinROFs(mCalibrator->getMinROFs() / mCalibrator->getNInstances());
86 const auto compClusters = pc.
inputs().
get<gsl::span<o2::itsmft::CompClusterExt>>(
"compClusters");
87 gsl::span<const unsigned char> patterns = pc.
inputs().
get<gsl::span<unsigned char>>(
"patterns");
88 const auto rofs = pc.
inputs().
get<gsl::span<o2::itsmft::ROFRecord>>(
"ROframes");
89 mNClustersProc += compClusters.size();
93 done = mCalibrator->processTimeFrameClusters(compClusters, patterns, rofs);
95 const auto digits = pc.
inputs().
get<gsl::span<o2::itsmft::Digit>>(
"digits");
96 const auto rofs = pc.
inputs().
get<gsl::span<o2::itsmft::ROFRecord>>(
"ROframes");
97 mNClustersProc +=
digits.size();
99 done = mCalibrator->processTimeFrameDigits(
digits, rofs);
103 gsl::span<const int> partInfo = pc.
inputs().
get<gsl::span<int>>(
"mapspartInfo");
104 mCalibrator->addMap(*extMap.get());
105 done = (++mNPartsDone == partInfo[1]);
106 mStrobeCounter += partInfo[2];
107 mCalibrator->setNStrobes(mStrobeCounter);
108 LOGP(important,
"Received accumulated map {} of {} with {} ROFs, total number of maps = {} and strobes = {}", partInfo[0] + 1, partInfo[1], partInfo[2], mNPartsDone, mCalibrator->getNStrobes());
112 LOG(important) <<
"Minimum number of noise counts has been reached !";
114 LOG(important) <<
"Run stop is requested, sending output";
120 sendAccumulatedMap(pc.
outputs());
123 mRunStopRequested =
true;
131 output.snapshot(
Output{
"ITS",
"NOISEMAPPART", (
unsigned int)mCalibrator->getInstanceID()}, mCalibrator->getNoiseMap());
132 std::vector<int> outInf;
133 outInf.push_back(mCalibrator->getInstanceID());
134 outInf.push_back(mCalibrator->getNInstances());
135 outInf.push_back(mCalibrator->getNStrobes());
136 output.snapshot(
Output{
"ITS",
"NOISEMAPPARTINF", (
unsigned int)mCalibrator->getInstanceID()}, outInf);
137 LOGP(important,
"Sending accumulated map with {} ROFs processed", mCalibrator->getNStrobes());
142 mCalibrator->finalize(mNoiseCutIB);
146#ifdef TIME_SLOT_CALIBRATION
147 const auto& payload = mCalibrator->getNoiseMap(tstart, tend);
149 const auto& payload = mCalibrator->getNoiseMap();
153 std::map<std::string, std::string> md;
158 LOG(info) <<
"Sending object " << info.getPath() <<
"/" << info.getFileName()
159 <<
" of size " <<
image->size()
160 <<
" bytes, valid for " << info.getStartValidityTimestamp()
161 <<
" : " << info.getEndValidityTimestamp();
165 LOG(info) <<
"sending of o2::itsmft::NoiseMap done";
169 const std::map<int, int>* chipmap = payload.getChipMap(ichip);
171 for (std::map<int, int>::const_iterator it = chipmap->begin(); it != chipmap->end(); ++it) {
172 addDatabaseEntry(ichip, payload.key2Row(it->first), payload.key2Col(it->first));
179 info_dcs.setFileName(
"noise_scan.root");
182 LOG(info) <<
"sending of DCSConfigObject done";
185 LOGP(info,
"Timing: {:.2f} CPU / {:.2f} Real s. in {} TFs for {} {} / {:.2f} GB",
186 mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1,
187 mUseClusters ?
"clusters" :
"digits",
188 mNClustersProc, double(mDataSizeStat) / (1024L * 1024L * 1024L));
191void NoiseCalibratorSpec::addDatabaseEntry(
int chip,
int row,
int col)
202 if (mRunStopRequested) {
206 sendAccumulatedMap(ec.
outputs());
210 mRunStopRequested =
true;
217 if (!mInitOnceDone) {
218 mInitOnceDone =
true;
223 pc.
inputs().
get<std::vector<int>*>(
"confdbmap");
233 LOG(info) <<
"cluster dictionary updated";
239 LOG(info) <<
"confDB map updated";
240 mConfDBmap = (std::vector<int>*)obj;
248 std::string
name =
"its-noise-calibrator";
255 name =
"its-noise-calibrator_Norm";
257 LOG(fatal) <<
"Unknown processing mode " << pmode;
260 std::vector<InputSpec> inputs;
261 std::vector<OutputSpec> outputs;
265 inputs.emplace_back(
"compClusters",
"ITS",
"COMPCLUSTERS", 0, Lifetime::Timeframe);
266 inputs.emplace_back(
"patterns",
"ITS",
"PATTERNS", 0, Lifetime::Timeframe);
267 inputs.emplace_back(
"ROframes",
"ITS",
"CLUSTERSROF", 0, Lifetime::Timeframe);
268 inputs.emplace_back(
"cldict",
"ITS",
"CLUSDICT", 0, Lifetime::Condition,
ccdbParamSpec(
"ITS/Calib/ClusterDictionary"));
270 inputs.emplace_back(
"digits",
"ITS",
"DIGITS", 0, Lifetime::Timeframe);
271 inputs.emplace_back(
"ROframes",
"ITS",
"DIGITSROF", 0, Lifetime::Timeframe);
279 inputs.emplace_back(
"confdbmap",
"ITS",
"CONFDBMAP", 0, Lifetime::Condition,
ccdbParamSpec(
"ITS/Calib/Confdbmap"));
287 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
false,
299 AlgorithmSpec{adaptFromTask<NoiseCalibratorSpec>(md, useClusters, ccdbRequest)},
301 {
"1pix-only", VariantType::Bool,
false, {
"Fast 1-pixel calibration only (cluster input only)"}},
302 {
"prob-threshold", VariantType::Float, 3.e-6f, {
"Probability threshold for noisy pixels"}},
303 {
"prob-rel-err", VariantType::Float, 0.2f, {
"Relative error on channel noise to apply the threshold"}},
304 {
"cut-ib", VariantType::Float, -1.f, {
"Special cut to apply to Inner Barrel"}},
305 {
"nthreads", VariantType::Int, 1, {
"Number of map-filling threads"}},
306 {
"validity-days", VariantType::Int, 3, {
"Validity on days from upload time"}},
307 {
"stop-me-only", VariantType::Bool,
false, {
"At sufficient statistics stop only this device, otherwise whole workflow"}}}};
Definition of the ITSMFT compact cluster.
Definition of the Names Generator class.
Utils and constants for calibration and related workflows.
void checkUpdates(o2::framework::ProcessingContext &pc)
bool finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
T get(const char *key) const
DataAllocator & outputs()
ConfigParamRegistry const & options()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
TransitionHandlingState transitionState() const
void run(ProcessingContext &pc) final
void endOfStream(EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void init(InitContext &ic) final
void finaliseCCDB(ConcreteDataMatcher &matcher, void *obj) final
static constexpr int getNChips()
number of chips per barrel
NoiseMap class for the ITS and MFT.
GLuint const GLchar * name
long getCurrentTimestamp()
returns the timestamp in long corresponding to "now"
long getFutureTimestamp(int secondsInFuture)
returns the timestamp in long corresponding to "now + secondsInFuture"
void addConfigItem(DCSconfigObject_t &configVector, std::string key, const T value)
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
std::vector< ConfigParamSpec > Options
DataProcessorSpec getNoiseCalibratorSpec(bool useClusters, int pmode=0)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string to_string(gsl::span< T, Size > span)
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
size_t maxInputTimeslices
The maximum number of time pipelining for this device.
size_t inputTimesliceId
The time pipelining id of this particular device.
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
std::vector< Digit > digits