33#include <TGeoManager.h>
57 size_t nPileup, std::chrono::high_resolution_clock::time_point
start)
59 LOGP(info,
"Number of digits : {}",
digits.size());
60 LOGP(info,
"Number of rofs : {}", rofs.size());
63 LOGP(error,
"Number of labels != number of digits");
65 LOGP(info,
"Number of signal pileup : {} ({} %)", nPileup, 100. * nPileup /
digits.size());
66 auto tEnd = std::chrono::high_resolution_clock::now();
67 auto duration = tEnd -
start;
68 auto d = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
69 LOGP(info,
"Digitizer time {} ms", d);
74 static bool finished =
false;
81 auto tStart = std::chrono::high_resolution_clock::now();
84 const auto& eventRecords = context->getEventRecords();
89 const auto& eventParts = context->getEventParts();
90 for (
auto i = 0;
i < eventRecords.size();
i++) {
91 auto ir = eventRecords[
i];
97 for (
const auto& part : eventParts[
i]) {
98 std::vector<Hit> hits{};
99 context->retrieveHits(mSimChains,
"MCHHit", part.sourceID, part.entryID, &hits);
100 mDigitizer->processHits(hits,
ir, part.entryID, part.sourceID);
108 mDigitizer->addNoise(firstIR, lastIR);
111 std::vector<Digit>
digits{};
112 std::vector<ROFRecord> rofs{};
114 auto nPileup = mDigitizer->digitize(rofs,
digits, labels);
132 std::unique_ptr<Digitizer> mDigitizer{};
133 std::vector<TChain*> mSimChains{};
138 std::vector<OutputSpec> outputs{};
139 outputs.emplace_back(
"MCH",
"DIGITS", 0, Lifetime::Timeframe);
140 outputs.emplace_back(
"MCH",
"DIGITROFS", 0, Lifetime::Timeframe);
142 outputs.emplace_back(
"MCH",
"DIGITSLABELS", 0, Lifetime::Timeframe);
144 outputs.emplace_back(
"MCH",
"ROMode", 0, Lifetime::Timeframe);
Definition of the base digitizer task 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.
BaseDPLDigitizer()=default
static const DigitFilterParam & Instance()
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
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.
void run(framework::ProcessingContext &pc)
void initDigitizerTask(framework::InitContext &ic) override
void logStatus(gsl::span< Digit > digits, gsl::span< ROFRecord > rofs, o2::dataformats::MCLabelContainer &labels, size_t nPileup, std::chrono::high_resolution_clock::time_point start)
bool initSimChains(o2::detectors::DetID detid, std::vector< TChain * > &simchains) const
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > Options
header::DataHeader::SubSpecificationType SubSpecificationType
std::vector< InputSpec > Inputs
TransformationCreator transformationFromTGeoManager(const TGeoManager &geo)
o2::framework::DataProcessorSpec getMCHDigitizerSpec(int channel, bool mctruth)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static InteractionRecord long2IR(int64_t l)
o2::InteractionRecord ir(0, 0)
std::vector< Digit > digits