Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions Detectors/TRD/base/include/TRDBase/TrackletTransformer.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include "DataFormatsTRD/Tracklet64.h"
#include "DataFormatsTRD/CalibratedTracklet.h"
#include "DataFormatsTRD/CalVdriftExB.h"
#include "CCDB/BasicCCDBManager.h"

namespace o2
{
Expand All @@ -26,9 +25,11 @@ namespace trd
class TrackletTransformer
{
public:
TrackletTransformer();
TrackletTransformer() = default;
~TrackletTransformer() = default;

void init();

float getXCathode() { return mXCathode; }
float getXAnode() { return mXAnode; }
float getXDrift() { return mXDrift; }
Expand All @@ -39,12 +40,7 @@ class TrackletTransformer
void setXDrift(float x) { mXDrift = x; }
void setXtb0(float x) { mXtb0 = x; }

bool hasCalibration() { return mCalibration != nullptr; }

void loadPadPlane(int hcid);

// use 555555 for default calibration values
void loadCalibrationParameters(int timestamp);
void setCalVdriftExB(const CalVdriftExB* cal) { mCalVdriftExB = cal; };

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

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

private:
o2::trd::Geometry* mGeo;
const o2::trd::PadPlane* mPadPlane;
Geometry* mGeo{nullptr};
const PadPlane* mPadPlane{nullptr};

float mXCathode;
float mXAnode;
float mXDrift;
float mXtb0;

o2::trd::CalVdriftExB* mCalibration;
const CalVdriftExB* mCalVdriftExB{nullptr};
};

} // namespace trd
Expand Down
32 changes: 6 additions & 26 deletions Detectors/TRD/base/src/TrackletTransformer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
using namespace o2::trd;
using namespace o2::trd::constants;

TrackletTransformer::TrackletTransformer()
void TrackletTransformer::init()
{
o2::base::GeometryManager::loadGeometry();
mGeo = Geometry::instance();
Expand All @@ -32,27 +32,6 @@ TrackletTransformer::TrackletTransformer()
mXtb0 = -100;
}

void TrackletTransformer::loadPadPlane(int detector)
{
int stack = mGeo->getStack(detector);
int layer = mGeo->getLayer(detector);
mPadPlane = mGeo->getPadPlane(layer, stack);
}

void TrackletTransformer::loadCalibrationParameters(int timestamp)
{
LOG(info) << "loading calibration parameters with timestamp: " << timestamp;

auto& ccdbmgr = o2::ccdb::BasicCCDBManager::instance();
ccdbmgr.setTimestamp(timestamp);

mCalibration = ccdbmgr.get<o2::trd::CalVdriftExB>("TRD/Calib/CalVdriftExB");

if (mCalibration == nullptr) {
LOG(error) << " failed to get vDrift and ExB parameters from ccdb";
}
}

float TrackletTransformer::calculateY(int hcid, int column, int position)
{
double padWidth = mPadPlane->getWidthIPad();
Expand All @@ -78,8 +57,8 @@ float TrackletTransformer::calculateDy(int detector, int slope)
{
double padWidth = mPadPlane->getWidthIPad();

float vDrift = mCalibration->getVdrift(detector);
float exb = mCalibration->getExB(detector);
float vDrift = mCalVdriftExB->getVdrift(detector);
float exb = mCalVdriftExB->getExB(detector);

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

// calculate raw local chamber space point
loadPadPlane(detector);
mPadPlane = mGeo->getPadPlane(detector);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this no longer needs to be a member variable.

Suggested change
mPadPlane = mGeo->getPadPlane(detector);
auto padPlane = mGeo->getPadPlane(detector);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well it is used in three other functions which are called from there, so one would need to pass it along every time. I would leave it as it is for now.


float x = getXDrift();
float y = calculateY(hcid, column, position);
float z = calculateZ(padrow);
Expand All @@ -146,7 +126,7 @@ CalibratedTracklet TrackletTransformer::transformTracklet(Tracklet64 tracklet)
double TrackletTransformer::getTimebin(int detector, double x)
{
// calculate timebin from x position within chamber
float vDrift = mCalibration->getVdrift(detector);
float vDrift = mCalVdriftExB->getVdrift(detector);
double t0 = 4.0; // time (in timebins) of start of drift region

double timebin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,21 @@ namespace trd
class TRDTrackletTransformerSpec : public o2::framework::Task
{
public:
TRDTrackletTransformerSpec(std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, bool trigRecFilterActive, int timestamp) : mDataRequest(dataRequest), mTrigRecFilterActive(trigRecFilterActive), mTimestamp(timestamp){};
TRDTrackletTransformerSpec(std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, bool trigRecFilterActive) : mDataRequest(dataRequest), mTrigRecFilterActive(trigRecFilterActive){};
~TRDTrackletTransformerSpec() override = default;
void init(o2::framework::InitContext& ic) override;
void run(o2::framework::ProcessingContext& pc) override;
void finaliseCCDB(framework::ConcreteDataMatcher& matcher, void* obj) final;

private:
void updateTimeDependentParams(framework::ProcessingContext& pc);

bool mTrigRecFilterActive; ///< if true, transform only TRD tracklets for which ITS data is available
std::shared_ptr<o2::globaltracking::DataRequest> mDataRequest;
int mTimestamp;
TrackletTransformer mTransformer;
};

o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive, int timestamp);
o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive);

} // end namespace trd
} // end namespace o2
30 changes: 19 additions & 11 deletions Detectors/TRD/workflow/src/TRDTrackletTransformerSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "DataFormatsTRD/Tracklet64.h"
#include "DataFormatsTRD/CalibratedTracklet.h"
#include "CommonDataFormat/IRFrame.h"
#include "Framework/CCDBParamSpec.h"

using namespace o2::framework;
using namespace o2::globaltracking;
Expand All @@ -28,24 +29,17 @@ namespace trd

void TRDTrackletTransformerSpec::init(o2::framework::InitContext& ic)
{
LOG(info) << "Initializing tracklet transformer";
mTransformer.loadCalibrationParameters(mTimestamp);
mTransformer.init();
}

void TRDTrackletTransformerSpec::run(o2::framework::ProcessingContext& pc)
{
LOG(info) << "Running tracklet transformer";
if (!mTransformer.hasCalibration()) {
// ccdb object was not found for specified timestamp
return;
}
updateTimeDependentParams(pc);

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

//auto tracklets = inputData.getTRDTracklets();
//auto trigRecs = inputData.getTRDTriggerRecords();

auto tracklets = pc.inputs().get<gsl::span<Tracklet64>>("trdtracklets");
auto trigRecs = pc.inputs().get<gsl::span<TriggerRecord>>("trdtriggerrec");

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

o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive, int timestamp)
void TRDTrackletTransformerSpec::updateTimeDependentParams(ProcessingContext& pc)
{
pc.inputs().get<o2::trd::CalVdriftExB*>("calvdexb"); // just to trigger the finaliseCCDB
}

void TRDTrackletTransformerSpec::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
{
if (matcher == ConcreteDataMatcher("TRD", "CALVDRIFTEXB", 0)) {
LOG(info) << "CalVdriftExB object has been updated";
mTransformer.setCalVdriftExB((const o2::trd::CalVdriftExB*)obj);
}
}

o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilterActive)
{
std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
if (trigRecFilterActive) {
Expand All @@ -125,6 +132,7 @@ o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilte
auto& inputs = dataRequest->inputs;
inputs.emplace_back("trdtracklets", "TRD", "TRACKLETS", 0, Lifetime::Timeframe);
inputs.emplace_back("trdtriggerrec", "TRD", "TRKTRGRD", 0, Lifetime::Timeframe);
inputs.emplace_back("calvdexb", "TRD", "CALVDRIFTEXB", 0, Lifetime::Condition, ccdbParamSpec("TRD/Calib/CalVdriftExB"));

std::vector<OutputSpec> outputs;
outputs.emplace_back("TRD", "CTRACKLETS", 0, Lifetime::Timeframe);
Expand All @@ -134,7 +142,7 @@ o2::framework::DataProcessorSpec getTRDTrackletTransformerSpec(bool trigRecFilte
"TRDTRACKLETTRANSFORMER",
inputs,
outputs,
AlgorithmSpec{adaptFromTask<TRDTrackletTransformerSpec>(dataRequest, trigRecFilterActive, timestamp)},
AlgorithmSpec{adaptFromTask<TRDTrackletTransformerSpec>(dataRequest, trigRecFilterActive)},
Options{}};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
{"disable-mc", o2::framework::VariantType::Bool, false, {"Disable MC labels"}},
{"disable-root-input", o2::framework::VariantType::Bool, false, {"disable root-files input reader"}},
{"disable-root-output", o2::framework::VariantType::Bool, false, {"disable root-files output writer"}},
{"timestamp", o2::framework::VariantType::Int, 5555555, {"timestamp for CCDB calibration objects"}},
{"filter-trigrec", o2::framework::VariantType::Bool, false, {"ignore interaction records without ITS data"}},
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}}};

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

WorkflowSpec spec;

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

spec.emplace_back(o2::trd::getTRDTrackletTransformerSpec(trigRecFilterActive, timestamp));
spec.emplace_back(o2::trd::getTRDTrackletTransformerSpec(trigRecFilterActive));

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