38 if (getenv(
"ALIEN_JDL_LPMPRODUCTIONTYPE") && std::strcmp(getenv(
"ALIEN_JDL_LPMPRODUCTIONTYPE"),
"MC") == 0) {
46 LOG(
debug) <<
"Running tracklet transformer";
50 updateTimeDependentParams(pc);
53 auto trigRecs = pc.
inputs().
get<gsl::span<TriggerRecord>>(
"trdtriggerrec");
55 std::vector<CalibratedTracklet> calibratedTracklets(
tracklets.size());
57 std::vector<char> trigRecBitfield(trigRecs.size());
58 int nTrackletsTransformed = 0;
60 if (mTrigRecFilterActive) {
61 const auto irFrames =
inputData.getIRFramesITS();
62 size_t lastMatchedIdx = 0;
63 for (
const auto& irFrame : irFrames) {
67 for (
auto j = lastMatchedIdx;
j < trigRecs.size(); ++
j) {
68 const auto& trigRec = trigRecs[
j];
69 if (trigRec.getBCData() >= irFrame.getMin()) {
70 if (trigRec.getBCData() <= irFrame.getMax()) {
72 trigRecBitfield[
j] = 1;
80 LOGF(
debug,
"ITS IR Frame start: %li, end: %li", irFrame.getMin().toLong(), irFrame.getMax().toLong());
95 std::fill(trigRecBitfield.begin(), trigRecBitfield.end(), 1);
98 if (mTrigRecFilterActive) {
100 for (
size_t iTrig = 0; iTrig < trigRecs.size(); ++iTrig) {
101 if (!trigRecBitfield[iTrig]) {
104 const auto& trigRec = trigRecs[iTrig];
105 for (
int iTrklt = trigRec.getFirstTracklet(); iTrklt < trigRec.getFirstTracklet() + trigRec.getNumberOfTracklets(); ++iTrklt) {
107 ++nTrackletsTransformed;
113 for (
size_t iTrklt = 0; iTrklt <
tracklets.size(); ++iTrklt) {
115 ++nTrackletsTransformed;
119 LOGF(info,
"Found %lu tracklets in %lu trigger records. Applied filter for ITS IR frames: %i. Transformed %i tracklets.",
tracklets.size(), trigRecs.size(), mTrigRecFilterActive, nTrackletsTransformed);
128 static bool initOnceDone =
false;
143 LOG(info) <<
"CalVdriftExB object has been updated";
151 std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
152 if (trigRecFilterActive) {
153 dataRequest->requestIRFramesITS();
155 auto& inputs = dataRequest->inputs;
156 inputs.emplace_back(
"trdtracklets",
"TRD",
"TRACKLETS", 0, Lifetime::Timeframe);
157 inputs.emplace_back(
"trdtriggerrec",
"TRD",
"TRKTRGRD", 0, Lifetime::Timeframe);
158 inputs.emplace_back(
"calvdexb",
"TRD",
"CALVDRIFTEXB", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/CalVdriftExB"));
159 auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(
false,
167 std::vector<OutputSpec> outputs;
168 outputs.emplace_back(
"TRD",
"CTRACKLETS", 0, Lifetime::Timeframe);
169 outputs.emplace_back(
"TRD",
"TRIGRECMASK", 0, Lifetime::Timeframe);
172 "TRDTRACKLETTRANSFORMER",
175 AlgorithmSpec{adaptFromTask<TRDTrackletTransformerSpec>(dataRequest, ggRequest, trigRecFilterActive)},
Class to delimit start and end IR of certain time period.
std::vector< o2::mid::ColumnData > inputData
void checkUpdates(o2::framework::ProcessingContext &pc)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
T get(const char *key) const
void snapshot(const Output &spec, T const &object)
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.
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
o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
void collectData(o2::framework::ProcessingContext &pc, const DataRequest &request)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
std::vector< Tracklet64 > tracklets