Skip to content

Commit dbd20eb

Browse files
authored
TrackletTransformer uses DPL CCDB mechanism (#8363)
1 parent 88eb6cd commit dbd20eb

5 files changed

Lines changed: 38 additions & 54 deletions

File tree

Detectors/TRD/base/include/TRDBase/TrackletTransformer.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#include "DataFormatsTRD/Tracklet64.h"
1717
#include "DataFormatsTRD/CalibratedTracklet.h"
1818
#include "DataFormatsTRD/CalVdriftExB.h"
19-
#include "CCDB/BasicCCDBManager.h"
2019

2120
namespace o2
2221
{
@@ -26,9 +25,11 @@ namespace trd
2625
class TrackletTransformer
2726
{
2827
public:
29-
TrackletTransformer();
28+
TrackletTransformer() = default;
3029
~TrackletTransformer() = default;
3130

31+
void init();
32+
3233
float getXCathode() { return mXCathode; }
3334
float getXAnode() { return mXAnode; }
3435
float getXDrift() { return mXDrift; }
@@ -39,12 +40,7 @@ class TrackletTransformer
3940
void setXDrift(float x) { mXDrift = x; }
4041
void setXtb0(float x) { mXtb0 = x; }
4142

42-
bool hasCalibration() { return mCalibration != nullptr; }
43-
44-
void loadPadPlane(int hcid);
45-
46-
// use 555555 for default calibration values
47-
void loadCalibrationParameters(int timestamp);
43+
void setCalVdriftExB(const CalVdriftExB* cal) { mCalVdriftExB = cal; };
4844

4945
float calculateY(int hcid, int column, int position);
5046

@@ -61,15 +57,15 @@ class TrackletTransformer
6157
double getTimebin(int detector, double x);
6258

6359
private:
64-
o2::trd::Geometry* mGeo;
65-
const o2::trd::PadPlane* mPadPlane;
60+
Geometry* mGeo{nullptr};
61+
const PadPlane* mPadPlane{nullptr};
6662

6763
float mXCathode;
6864
float mXAnode;
6965
float mXDrift;
7066
float mXtb0;
7167

72-
o2::trd::CalVdriftExB* mCalibration;
68+
const CalVdriftExB* mCalVdriftExB{nullptr};
7369
};
7470

7571
} // namespace trd

Detectors/TRD/base/src/TrackletTransformer.cxx

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
using namespace o2::trd;
1717
using namespace o2::trd::constants;
1818

19-
TrackletTransformer::TrackletTransformer()
19+
void TrackletTransformer::init()
2020
{
2121
o2::base::GeometryManager::loadGeometry();
2222
mGeo = Geometry::instance();
@@ -32,27 +32,6 @@ TrackletTransformer::TrackletTransformer()
3232
mXtb0 = -100;
3333
}
3434

35-
void TrackletTransformer::loadPadPlane(int detector)
36-
{
37-
int stack = mGeo->getStack(detector);
38-
int layer = mGeo->getLayer(detector);
39-
mPadPlane = mGeo->getPadPlane(layer, stack);
40-
}
41-
42-
void TrackletTransformer::loadCalibrationParameters(int timestamp)
43-
{
44-
LOG(info) << "loading calibration parameters with timestamp: " << timestamp;
45-
46-
auto& ccdbmgr = o2::ccdb::BasicCCDBManager::instance();
47-
ccdbmgr.setTimestamp(timestamp);
48-
49-
mCalibration = ccdbmgr.get<o2::trd::CalVdriftExB>("TRD/Calib/CalVdriftExB");
50-
51-
if (mCalibration == nullptr) {
52-
LOG(error) << " failed to get vDrift and ExB parameters from ccdb";
53-
}
54-
}
55-
5635
float TrackletTransformer::calculateY(int hcid, int column, int position)
5736
{
5837
double padWidth = mPadPlane->getWidthIPad();
@@ -78,8 +57,8 @@ float TrackletTransformer::calculateDy(int detector, int slope)
7857
{
7958
double padWidth = mPadPlane->getWidthIPad();
8059

81-
float vDrift = mCalibration->getVdrift(detector);
82-
float exb = mCalibration->getExB(detector);
60+
float vDrift = mCalVdriftExB->getVdrift(detector);
61+
float exb = mCalVdriftExB->getExB(detector);
8362

8463
// dy = slope * nTimeBins * padWidth * GRANULARITYTRKLSLOPE;
8564
// nTimeBins should be number of timebins in drift region. 1 timebin is 100 nanosecond
@@ -123,7 +102,8 @@ CalibratedTracklet TrackletTransformer::transformTracklet(Tracklet64 tracklet)
123102
auto slope = tracklet.getSlopeBinSigned();
124103

125104
// calculate raw local chamber space point
126-
loadPadPlane(detector);
105+
mPadPlane = mGeo->getPadPlane(detector);
106+
127107
float x = getXDrift();
128108
float y = calculateY(hcid, column, position);
129109
float z = calculateZ(padrow);
@@ -146,7 +126,7 @@ CalibratedTracklet TrackletTransformer::transformTracklet(Tracklet64 tracklet)
146126
double TrackletTransformer::getTimebin(int detector, double x)
147127
{
148128
// calculate timebin from x position within chamber
149-
float vDrift = mCalibration->getVdrift(detector);
129+
float vDrift = mCalVdriftExB->getVdrift(detector);
150130
double t0 = 4.0; // time (in timebins) of start of drift region
151131

152132
double timebin;

Detectors/TRD/workflow/include/TRDWorkflow/TRDTrackletTransformerSpec.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,21 @@ namespace trd
2323
class TRDTrackletTransformerSpec : public o2::framework::Task
2424
{
2525
public:
26-
TRDTrackletTransformerSpec(std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, bool trigRecFilterActive, int timestamp) : mDataRequest(dataRequest), mTrigRecFilterActive(trigRecFilterActive), mTimestamp(timestamp){};
26+
TRDTrackletTransformerSpec(std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, bool trigRecFilterActive) : mDataRequest(dataRequest), mTrigRecFilterActive(trigRecFilterActive){};
2727
~TRDTrackletTransformerSpec() override = default;
2828
void init(o2::framework::InitContext& ic) override;
2929
void run(o2::framework::ProcessingContext& pc) override;
30+
void finaliseCCDB(framework::ConcreteDataMatcher& matcher, void* obj) final;
3031

3132
private:
33+
void updateTimeDependentParams(framework::ProcessingContext& pc);
34+
3235
bool mTrigRecFilterActive; ///< if true, transform only TRD tracklets for which ITS data is available
3336
std::shared_ptr<o2::globaltracking::DataRequest> mDataRequest;
34-
int mTimestamp;
3537
TrackletTransformer mTransformer;
3638
};
3739

38-
o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive, int timestamp);
40+
o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive);
3941

4042
} // end namespace trd
4143
} // end namespace o2

Detectors/TRD/workflow/src/TRDTrackletTransformerSpec.cxx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "DataFormatsTRD/Tracklet64.h"
1818
#include "DataFormatsTRD/CalibratedTracklet.h"
1919
#include "CommonDataFormat/IRFrame.h"
20+
#include "Framework/CCDBParamSpec.h"
2021

2122
using namespace o2::framework;
2223
using namespace o2::globaltracking;
@@ -28,24 +29,17 @@ namespace trd
2829

2930
void TRDTrackletTransformerSpec::init(o2::framework::InitContext& ic)
3031
{
31-
LOG(info) << "Initializing tracklet transformer";
32-
mTransformer.loadCalibrationParameters(mTimestamp);
32+
mTransformer.init();
3333
}
3434

3535
void TRDTrackletTransformerSpec::run(o2::framework::ProcessingContext& pc)
3636
{
3737
LOG(info) << "Running tracklet transformer";
38-
if (!mTransformer.hasCalibration()) {
39-
// ccdb object was not found for specified timestamp
40-
return;
41-
}
38+
updateTimeDependentParams(pc);
4239

4340
o2::globaltracking::RecoContainer inputData;
4441
inputData.collectData(pc, *mDataRequest);
4542

46-
//auto tracklets = inputData.getTRDTracklets();
47-
//auto trigRecs = inputData.getTRDTriggerRecords();
48-
4943
auto tracklets = pc.inputs().get<gsl::span<Tracklet64>>("trdtracklets");
5044
auto trigRecs = pc.inputs().get<gsl::span<TriggerRecord>>("trdtriggerrec");
5145

@@ -116,7 +110,20 @@ void TRDTrackletTransformerSpec::run(o2::framework::ProcessingContext& pc)
116110
pc.outputs().snapshot(Output{"TRD", "TRIGRECMASK", 0, Lifetime::Timeframe}, trigRecBitfield);
117111
}
118112

119-
o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive, int timestamp)
113+
void TRDTrackletTransformerSpec::updateTimeDependentParams(ProcessingContext& pc)
114+
{
115+
pc.inputs().get<o2::trd::CalVdriftExB*>("calvdexb"); // just to trigger the finaliseCCDB
116+
}
117+
118+
void TRDTrackletTransformerSpec::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
119+
{
120+
if (matcher == ConcreteDataMatcher("TRD", "CALVDRIFTEXB", 0)) {
121+
LOG(info) << "CalVdriftExB object has been updated";
122+
mTransformer.setCalVdriftExB((const o2::trd::CalVdriftExB*)obj);
123+
}
124+
}
125+
126+
o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive)
120127
{
121128
std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
122129
if (trigRecFilterActive) {
@@ -125,6 +132,7 @@ o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilte
125132
auto& inputs = dataRequest->inputs;
126133
inputs.emplace_back("trdtracklets", "TRD", "TRACKLETS", 0, Lifetime::Timeframe);
127134
inputs.emplace_back("trdtriggerrec", "TRD", "TRKTRGRD", 0, Lifetime::Timeframe);
135+
inputs.emplace_back("calvdexb", "TRD", "CALVDRIFTEXB", 0, Lifetime::Condition, ccdbParamSpec("TRD/Calib/CalVdriftExB"));
128136

129137
std::vector<OutputSpec> outputs;
130138
outputs.emplace_back("TRD", "CTRACKLETS", 0, Lifetime::Timeframe);
@@ -134,7 +142,7 @@ o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilte
134142
"TRDTRACKLETTRANSFORMER",
135143
inputs,
136144
outputs,
137-
AlgorithmSpec{adaptFromTask<TRDTrackletTransformerSpec>(dataRequest, trigRecFilterActive, timestamp)},
145+
AlgorithmSpec{adaptFromTask<TRDTrackletTransformerSpec>(dataRequest, trigRecFilterActive)},
138146
Options{}};
139147
}
140148

Detectors/TRD/workflow/src/TRDTrackletTransformerWorkflow.cxx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
2525
{"disable-mc", o2::framework::VariantType::Bool, false, {"Disable MC labels"}},
2626
{"disable-root-input", o2::framework::VariantType::Bool, false, {"disable root-files input reader"}},
2727
{"disable-root-output", o2::framework::VariantType::Bool, false, {"disable root-files output writer"}},
28-
{"timestamp", o2::framework::VariantType::Int, 5555555, {"timestamp for CCDB calibration objects"}},
2928
{"filter-trigrec", o2::framework::VariantType::Bool, false, {"ignore interaction records without ITS data"}},
3029
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}}};
3130

@@ -42,7 +41,6 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
4241
// MC labels are passed through for the global tracking downstream
4342
// in case ROOT output is requested the tracklet labels are duplicated
4443
bool useMC = !configcontext.options().get<bool>("disable-mc");
45-
int timestamp = configcontext.options().get<int>("timestamp");
4644

4745
WorkflowSpec spec;
4846

@@ -55,7 +53,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
5553
o2::globaltracking::InputHelper::addInputSpecsIRFramesITS(configcontext, spec);
5654
}
5755

58-
spec.emplace_back(o2::trd::getTRDTrackletTransformerSpec(trigRecFilterActive, timestamp));
56+
spec.emplace_back(o2::trd::getTRDTrackletTransformerSpec(trigRecFilterActive));
5957

6058
if (!configcontext.options().get<bool>("disable-root-output")) {
6159
spec.emplace_back(o2::trd::getTRDCalibratedTrackletWriterSpec(useMC));

0 commit comments

Comments
 (0)