Skip to content

Commit ba8d53e

Browse files
wiechuladavidrohr
authored andcommitted
Add DCA cut
1 parent de1f9ba commit ba8d53e

File tree

1 file changed

+56
-7
lines changed

1 file changed

+56
-7
lines changed

Detectors/TPC/workflow/src/MIPTrackFilterSpec.cxx

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
#include "DataFormatsTPC/TrackCuts.h"
2727
#include "DetectorsCalibration/Utils.h"
2828
#include "Framework/Logger.h"
29+
#include "DetectorsBase/GRPGeomHelper.h"
2930
#include "Framework/Task.h"
31+
#include "DetectorsBase/Propagator.h"
3032
#include "Framework/DataProcessorSpec.h"
3133
#include "Framework/ConfigParamRegistry.h"
3234
#include "TPCWorkflow/ProcessingHelpers.h"
@@ -40,20 +42,27 @@ namespace o2::tpc
4042
class MIPTrackFilterDevice : public Task
4143
{
4244
public:
45+
MIPTrackFilterDevice(std::shared_ptr<o2::base::GRPGeomRequest> gr) : mGRPGeomRequest(gr) {}
46+
4347
void init(framework::InitContext& ic) final;
4448
void run(ProcessingContext& pc) final;
4549
void endOfStream(EndOfStreamContext& eos) final;
50+
void finaliseCCDB(ConcreteDataMatcher& matcher, void* obj) final;
4651

4752
private:
4853
void sendOutput(DataAllocator& output);
4954

55+
std::shared_ptr<o2::base::GRPGeomRequest> mGRPGeomRequest;
5056
TrackCuts mCuts{}; ///< Tracks cuts object
5157
std::vector<TrackTPC> mMIPTracks; ///< Filtered MIP tracks
5258
unsigned int mProcessEveryNthTF{1}; ///< process every Nth TF only
5359
int mMaxTracksPerTF{-1}; ///< max number of MIP tracks processed per TF
5460
uint32_t mTFCounter{0}; ///< counter to keep track of the TFs
5561
int mProcessNFirstTFs{0}; ///< number of first TFs which are not sampled
62+
float mDCACut{-1}; ///< DCA cut
5663
bool mSendDummy{false}; ///< send empty data in case TF is skipped
64+
65+
bool acceptDCA(const TrackTPC& track);
5766
};
5867

5968
void MIPTrackFilterDevice::init(framework::InitContext& ic)
@@ -89,6 +98,10 @@ void MIPTrackFilterDevice::init(framework::InitContext& ic)
8998
mCuts.setdEdxMin(mindEdx);
9099
mCuts.setdEdxMax(maxdEdx);
91100
mCuts.setCutLooper(cutLoopers);
101+
102+
mDCACut = ic.options().get<float>("dca-cut");
103+
104+
o2::base::GRPGeomHelper::instance().setRequest(mGRPGeomRequest);
92105
}
93106

94107
void MIPTrackFilterDevice::run(ProcessingContext& pc)
@@ -102,6 +115,7 @@ void MIPTrackFilterDevice::run(ProcessingContext& pc)
102115
}
103116
return;
104117
}
118+
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
105119

106120
const auto tracks = pc.inputs().get<gsl::span<TrackTPC>>("tracks");
107121
const auto nTracks = tracks.size();
@@ -111,7 +125,7 @@ void MIPTrackFilterDevice::run(ProcessingContext& pc)
111125
std::vector<size_t> indices;
112126
indices.reserve(nTracks);
113127
for (size_t i = 0; i < nTracks; ++i) {
114-
if (mCuts.goodTrack(tracks[i])) {
128+
if (mCuts.goodTrack(tracks[i]) && acceptDCA(tracks[i])) {
115129
indices.emplace_back(i);
116130
}
117131
}
@@ -135,33 +149,66 @@ void MIPTrackFilterDevice::run(ProcessingContext& pc)
135149
mMIPTracks.emplace_back(tracks[indices[i]]);
136150
}
137151
} else {
138-
std::copy_if(tracks.begin(), tracks.end(), std::back_inserter(mMIPTracks), [this](const auto& track) { return mCuts.goodTrack(track); });
152+
std::copy_if(tracks.begin(), tracks.end(), std::back_inserter(mMIPTracks), [this](const auto& track) { return mCuts.goodTrack(track) && acceptDCA(track); });
139153
}
140154

141155
LOGP(info, "Filtered {} MIP tracks out of {} total tpc tracks", mMIPTracks.size(), tracks.size());
142156
sendOutput(pc.outputs());
143157
mMIPTracks.clear();
144158
}
145159

160+
void MIPTrackFilterDevice::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
161+
{
162+
if (o2::base::GRPGeomHelper::instance().finaliseCCDB(matcher, obj)) {
163+
return;
164+
}
165+
}
166+
146167
void MIPTrackFilterDevice::sendOutput(DataAllocator& output) { output.snapshot(Output{header::gDataOriginTPC, "MIPS", 0}, mMIPTracks); }
147168

148169
void MIPTrackFilterDevice::endOfStream(EndOfStreamContext& eos)
149170
{
150171
LOG(info) << "Finalizig MIP Tracks filter";
151172
}
152173

174+
bool MIPTrackFilterDevice::acceptDCA(const TrackTPC& track)
175+
{
176+
if (mDCACut < 0) {
177+
return true;
178+
}
179+
180+
auto propagator = o2::base::Propagator::Instance();
181+
o2::gpu::gpustd::array<float, 2> dca;
182+
const o2::math_utils::Point3D<float> refPoint{0, 0, 0};
183+
o2::track::TrackPar propTrack(track);
184+
const auto ok = propagator->propagateToDCABxByBz(refPoint, propTrack, 2., o2::base::Propagator::MatCorrType::USEMatCorrLUT, &dca);
185+
const auto dcar = std::abs(dca[0]);
186+
187+
return ok && (dcar < mDCACut);
188+
}
189+
153190
DataProcessorSpec getMIPTrackFilterSpec()
154191
{
155192
std::vector<OutputSpec> outputs;
156193
outputs.emplace_back(header::gDataOriginTPC, "MIPS", 0, Lifetime::Sporadic);
157194

195+
std::vector<InputSpec> inputs;
196+
inputs.emplace_back("tracks", "TPC", "TRACKS");
197+
198+
auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(false, // orbitResetTime
199+
true, // GRPECS=true
200+
false, // GRPLHCIF
201+
true, // GRPMagField
202+
true, // askMatLUT
203+
o2::base::GRPGeomRequest::Aligned, // geometry
204+
inputs,
205+
true);
206+
158207
return DataProcessorSpec{
159208
"tpc-miptrack-filter",
160-
Inputs{
161-
InputSpec{"tracks", "TPC", "TRACKS"},
162-
},
209+
inputs,
163210
outputs,
164-
adaptFromTask<MIPTrackFilterDevice>(),
211+
adaptFromTask<MIPTrackFilterDevice>(ggRequest),
165212
Options{
166213
{"min-momentum", VariantType::Double, 0.35, {"minimum momentum cut"}},
167214
{"max-momentum", VariantType::Double, 0.55, {"maximum momentum cut"}},
@@ -172,7 +219,9 @@ DataProcessorSpec getMIPTrackFilterSpec()
172219
{"maxTracksPerTF", VariantType::Int, -1, {"Maximum number of processed tracks per TF (-1 for processing all tracks)"}},
173220
{"process-first-n-TFs", VariantType::Int, 1, {"Number of first TFs which are not sampled"}},
174221
{"send-dummy-data", VariantType::Bool, false, {"Send empty data in case TF is skipped"}},
175-
{"dont-cut-loopers", VariantType::Bool, false, {"Do not cut loopers by comparing zout-zin"}}}};
222+
{"dont-cut-loopers", VariantType::Bool, false, {"Do not cut loopers by comparing zout-zin"}},
223+
{"dca-cut", VariantType::Float, 3.f, {"DCA cut in cm, < 0 to disable"}},
224+
}};
176225
}
177226

178227
} // namespace o2::tpc

0 commit comments

Comments
 (0)