19#include "TStopwatch.h"
51 TOFDPLDigitizerTask(
bool useCCDB, std::string ccdb_url,
int timestamp, uint32_t
mask) : mUseCCDB{useCCDB}, mCCDBurl(ccdb_url), mTimestamp(timestamp),
o2::base::
BaseDPLDigitizer(
o2::base::InitServices::FIELD |
o2::base::InitServices::GEOM), mPass(
o2::conf::DigiParams::Instance().passName), mMaskDRM(
mask){};
55 LOG(info) <<
"Initializing TOF digitization";
57 mSimChains = std::move(std::make_unique<std::vector<TChain*>>());
60 mDigitizer = std::move(std::make_unique<o2::tof::Digitizer>());
62 mDigits = std::move(std::make_unique<std::vector<o2::tof::Digit>>());
67 const bool isContinuous = ic.
options().
get<
int>(
"pileup");
68 LOG(info) <<
"CONTINUOUS " << isContinuous;
69 mDigitizer->setContinuous(isContinuous);
70 mDigitizer->setMCTruthContainer(mLabels.get());
71 LOG(info) <<
"TOF initialization done";
104 static bool finished =
false;
114 LOG(
debug) <<
"GOT " << timesview.size() <<
" COLLISSION TIMES";
119 if (timesview.size() == 0) {
126 LOG(info) <<
" CALLING TOF DIGITIZATION ";
138 if (tofParams->getSize(mPass) < 0) {
139 LOG(info) <<
"Pass " << mPass <<
" requested but not found in the tofParams object -> using unanchored";
140 mPass =
"unanchored";
143 if (tofParams->getSize(mPass) < 0) {
144 LOG(fatal) <<
"Pass " << mPass <<
" not found in the tofParams object (stop here!)";
146 const auto&
params = tofParams->getPars(mPass);
147 if (
params.count(
"time_resolution")) {
148 mDigitizer->setResolution(
params.at(
"time_resolution"));
149 LOG(info) <<
"time_resolution load from ccdb -> " <<
params.at(
"time_resolution");
151 if (
params.count(
"eff_center")) {
152 mDigitizer->setEffCenter(
params.at(
"eff_center"));
153 LOG(info) <<
"eff_center load from ccdb -> " <<
params.at(
"eff_center");
155 if (
params.count(
"eff_boundary1")) {
156 mDigitizer->setEffBoundary1(
params.at(
"eff_boundary1"));
157 LOG(info) <<
"eff_boundary1 load from ccdb -> " <<
params.at(
"eff_boundary1");
159 if (
params.count(
"eff_boundary2")) {
160 mDigitizer->setEffBoundary2(
params.at(
"eff_boundary2"));
161 LOG(info) <<
"eff_boundary2 load from ccdb -> " <<
params.at(
"eff_boundary2");
163 if (
params.count(
"eff_boundary3")) {
164 mDigitizer->setEffBoundary3(
params.at(
"eff_boundary3"));
165 LOG(info) <<
"eff_boundary3 load from ccdb -> " <<
params.at(
"eff_boundary3");
176 mCalibApi =
new o2::tof::CalibTOFapi(
long(0), lhcPhase, channelCalib, diagnostic, diagnosticDRMerr);
185 LOG(info) <<
"Update CCDB objects since new";
203 }
else if (!mCalibApi) {
207 lhcPhaseDummy->addLHCphase(0, 0);
208 lhcPhaseDummy->addLHCphase(2000000000, 0);
211 channelCalibDummy->addTimeSlewingInfo(ich, 0, 0);
214 channelCalibDummy->setFractionUnderPeak(sector, channelInSector, 1);
220 mCalibApi->
setURL(mCCDBurl);
229 mDigitizer->setCalibApi(mCalibApi);
233 static std::vector<o2::tof::HitType> hits;
235 auto& eventParts = context->getEventParts();
239 for (
int collID = 0; collID < timesview.size(); ++collID) {
242 mDigitizer->setEventTime(
orbit);
246 for (
auto& part : eventParts[collID]) {
247 mDigitizer->setEventID(part.entryID);
248 mDigitizer->setSrcID(part.sourceID);
252 context->retrieveHits(*mSimChains.get(),
"TOFHit", part.sourceID, part.entryID, &hits);
259 mDigitizer->process(&hits, mDigits.get());
262 if (mDigitizer->isContinuous()) {
263 LOG(info) <<
"clear all";
266 LOG(info) <<
"finalize";
267 mDigitizer->flushOutputContainer(*mDigits.get());
270 std::vector<Digit>* digitsVector = mDigitizer->getDigitPerTimeFrame();
271 std::vector<ReadoutWindowData>* readoutwindow = mDigitizer->getReadoutWindowData();
272 std::vector<o2::dataformats::MCTruthContainer<o2::MCCompLabel>>* mcLabVecOfVec = mDigitizer->getMCTruthPerTimeFrame();
274 LOG(info) <<
"Post " << digitsVector->size() <<
" digits in " << readoutwindow->size() <<
" RO windows";
278 if (pc.
outputs().
isAllowed({o2::header::gDataOriginTOF,
"DIGITSMCTR", 0})) {
284 std::vector<uint8_t>& patterns = mDigitizer->getPatterns();
287 DigitHeader& digitH = mDigitizer->getDigitHeader();
290 LOG(info) <<
"TOF: Sending ROMode= " << roMode <<
" to GRPUpdater";
294 LOG(info) <<
"Digitization took " << timer.CpuTime() <<
"s";
304 LOGF(
debug,
"TOF Digitizer endOfStream");
308 std::unique_ptr<std::vector<TChain*>> mSimChains;
309 std::unique_ptr<o2::tof::Digitizer> mDigitizer;
310 std::unique_ptr<std::vector<o2::tof::Digit>> mDigits;
311 std::unique_ptr<o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mLabels;
312 bool mUseCCDB =
false;
313 std::string mCCDBurl;
315 bool mUpdateCCDB =
false;
318 uint32_t mMaskDRM = 0;
328 std::vector<InputSpec> inputs;
329 inputs.emplace_back(
"collisioncontext",
"SIM",
"COLLISIONCONTEXT",
static_cast<SubSpecificationType>(channel), Lifetime::Timeframe);
336 inputs.emplace_back(
"tofccdbStatus",
"TOF",
"StatusTOF", 0, Lifetime::Condition,
ccdbParamSpec(
"TOF/Calib/FEELIGHT"));
337 inputs.emplace_back(
"tofccdbDia",
"TOF",
"DiagnosticCal", 0, Lifetime::Condition,
ccdbParamSpec(
"TOF/Calib/Diagnostic"));
338 inputs.emplace_back(
"tofccdbDrm",
"TOF",
"DiagnosticDRM", 0, Lifetime::Condition,
ccdbParamSpec(
"TOF/Calib/DRMerrors"));
339 inputs.emplace_back(
"tofccdbLHCphase",
"TOF",
"LHCphaseCal", 0, Lifetime::Condition,
ccdbParamSpec(
"TOF/Calib/LHCphase"));
340 inputs.emplace_back(
"tofccdbChannelCalib",
"TOF",
"ChannelCalibCal", 0, Lifetime::Condition,
ccdbParamSpec(
"TOF/Calib/ChannelCalib"));
341 inputs.emplace_back(
"tofccdbParams",
"TOF",
"parameters", 0, Lifetime::Condition,
ccdbParamSpec(
"TOF/Calib/Params"));
344 std::vector<OutputSpec> outputs;
357 AlgorithmSpec{adaptFromTask<TOFDPLDigitizerTask>(useCCDB, ccdb_url, timestamp, maskDRM)},
358 Options{{
"pileup", VariantType::Int, 1, {
"whether to run in continuous time mode"}}}
Definition of the base digitizer task class.
Class to store the output of the matching to TOF for calibration.
Class to use TOF calibration (decalibration, calibration)
Class to store the output of the matching to TOF for calibration.
Definition of the GeometryManager class.
o2::framework::DataAllocator::SubSpecificationType SubSpecificationType
Header of the General Run Parameters object.
Definition of a container to keep Monte Carlo truth external to simulation objects.
Definitions of the containers for the general parameters.
BaseDPLDigitizer()=default
static const HBFUtils & Instance()
T get(const char *key) const
void snapshot(const Output &spec, T const &object)
o2::header::DataHeader::SubSpecificationType SubSpecificationType
bool isAllowed(Output const &query)
check if a certain output is allowed
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.
bool initSimChains(o2::detectors::DetID detid, std::vector< TChain * > &simchains) const
std::vector< o2::InteractionTimeRecord > & getEventRecords(bool withQED=false)
void readDiagnosticDRMFrequencies()
void loadDiagnosticFrequencies()
void readDiagnosticFrequencies()
void loadDiagnosticDRMFrequencies()
void readTimeSlewingParam()
void setTimeStamp(long t)
void loadActiveMap(TOFFEElightInfo *fee)
void setURL(const std::string url)
void setDRMCriticalErrorMask(uint32_t val)
Diagnostic class for TOF.
Class container to hold different parameters meant to be stored on the CCDB.
void initDigitizerTask(framework::InitContext &ic) override
void endOfStream(EndOfStreamContext &ec)
void finaliseCCDB(o2::framework::ConcreteDataMatcher matcher, void *obj)
TOFDPLDigitizerTask(bool useCCDB, std::string ccdb_url, int timestamp, uint32_t mask)
void run(framework::ProcessingContext &pc)
GLenum const GLfloat * params
constexpr o2::header::DataOrigin gDataOriginTOF
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
header::DataHeader::SubSpecificationType SubSpecificationType
DataProcessorSpec getTOFDigitizerSpec(int channel, bool useCCDB, bool mctruth, std::string ccdb_url, int timestamp, uint32_t maskDRM)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"