52void customize(std::vector<o2::framework::CompletionPolicy>& policies)
73 DigitIOBaseTask::init(ic);
80 mStream = std::make_unique<std::fstream>(outputFileName, mBinary ? std::ios::out | std::ios::binary : std::ios::out);
84 throw std::invalid_argument(fmt::format(
"file version {} is unknown", binaryFileFormat));
88 "Will dump binary information (version {}) up to a maximum size of {} KB",
89 binaryFileFormat, maxsize);
90 mWriter = std::make_unique<io::DigitSink>(*mStream,
92 static_cast<size_t>(maxsize));
94 LOGP(warn,
"Will dump textual information");
95 mWriter = std::make_unique<io::DigitSink>(*mStream);
102 if (orbits.size() && !mBinary) {
103 std::set<OrbitInfo> orderedOrbits(orbits.begin(), orbits.end());
104 for (
auto o : orderedOrbits) {
105 (*mStream) <<
" FEEID " <<
o.getFeeID() <<
" LINK " << (
int)
o.getLinkID() <<
" ORBIT " <<
o.getOrbit() << std::endl;
111 gsl::span<const o2::mch::ROFRecord> rofs,
112 gsl::span<const o2::mch::OrbitInfo> orbits)
118 mWriter->write(
digits, rofs);
123 gsl::span<o2::mch::OrbitInfo> voidOrbitInfos;
126 auto rofs = pc.
inputs().
get<gsl::span<o2::mch::ROFRecord>>(
"rofs");
127 auto orbits = mWithOrbits ? pc.
inputs().
get<gsl::span<o2::mch::OrbitInfo>>(
"orbits") : voidOrbitInfos;
139 std::unique_ptr<io::DigitSink> mWriter =
nullptr;
140 std::unique_ptr<std::iostream> mStream =
nullptr;
141 bool mNoFile =
false;
142 bool mWithOrbits =
false;
150void customize(std::vector<ConfigParamSpec>& workflowOptions)
154 workflowOptions.emplace_back(
ConfigParamSpec{
"input-digits-data-description", VariantType::String,
"DIGITS", {
"description string for the input digits data"}});
155 workflowOptions.emplace_back(
ConfigParamSpec{
"input-digitrofs-data-description", VariantType::String,
"DIGITROFS", {
"description string for the input digit rofs data"}});
167 fmt::format(
"digits:MCH/{};rofs:MCH/{}",
168 cc.options().get<std::string>(
"input-digits-data-description"),
169 cc.options().get<std::string>(
"input-digitrofs-data-description"));
171 input +=
";orbits:MCH/ORBITS";
176 {
OPTNAME_OUTFILE, VariantType::String,
"digits.out", {
"output file name"}},
179 {
OPTNAME_TXT, VariantType::Bool,
false, {
"output digits in text format"}},
180 {
OPTNAME_MAX_SIZE, VariantType::Int, std::numeric_limits<int>::max(), {
"max output size (in KB)"}}};
181 options.insert(options.end(), commonOptions.begin(), commonOptions.end());
184 const char*
specName =
"mch-digits-sink";
A raw page parser for DPL input.
Configurable generator for RootTreeWriter processor spec.
void write(gsl::span< const o2::mch::Digit > digits, gsl::span< const o2::mch::ROFRecord > rofs, gsl::span< const o2::mch::OrbitInfo > orbits)
void run(ProcessingContext &pc)
DigitsSinkTask(bool withOrbits)
void writeOrbits(gsl::span< const o2::mch::OrbitInfo > orbits)
void init(InitContext &ic)
T get(const char *key) const
ConfigParamRegistry const & options()
InputRecord & inputs()
The inputs associated with this processing context.
void printFull(gsl::span< const Digit > digits, gsl::span< const ROFRecord > rofs) const
void printSummary(gsl::span< const Digit > digits, gsl::span< const ROFRecord > rofs, const char *suffix="") const
void incNofProcessedTFs()
bool shouldProcess() const
WorkflowSpec defineDataProcessing(const ConfigContext &cc)
constexpr const char * OPTNAME_NO_FILE
constexpr const char * OPTNAME_OUTFILE
constexpr const char * OPTNAME_TXT
constexpr const char * OPTNAME_WITHOUT_ORBITS
constexpr const char * OPTNAME_BINARY_FORMAT
constexpr const char * OPTNAME_MAX_SIZE
void customize(std::vector< o2::framework::CompletionPolicy > &policies)
Defining PrimaryVertex explicitly as messageable.
std::vector< DataProcessorSpec > WorkflowSpec
std::vector< InputSpec > select(char const *matcher="")
std::vector< InputSpec > Inputs
std::vector< OutputSpec > Outputs
std::vector< ConfigParamSpec > getCommonOptions()
std::array< DigitFileFormat, 5 > digitFileFormats
static CompletionPolicy consumeWhenAllOrdered(const char *name, CompletionPolicy::Matcher matcher)
as consumeWhenAll, but ensures that records are processed with incremental timeSlice (DataHeader::sta...
std::vector< o2::mch::ChannelCode > cc
std::vector< Digit > digits