39 const auto tracks = pc.inputs().get<gsl::span<TrackTPC>>(
"tracks");
40 std::copy_if(tracks.begin(), tracks.end(), std::back_inserter(mLaserTracks),
41 [
this](
const auto& track) { return isLaserTrackCandidate(track); });
43 LOGP(info,
"Filtered {} laser track candidates out of {} total tpc tracks", mLaserTracks.size(), tracks.size());
45 sendOutput(pc.outputs());
53 std::vector<TrackTPC> mLaserTracks;
58 output.snapshot(
Output{
"TPC",
"LASERTRACKS", 0}, mLaserTracks);
62 bool isLaserTrackCandidate(
const TrackTPC& track)
64 if (track.getP() < 1) {
68 if (track.getNClusters() < 80) {
72 if (track.hasBothSidesClusters()) {
76 const auto& parOutLtr = track.getOuterParam();
77 if (parOutLtr.getX() < 220) {
81 const int side = track.hasCSideClusters();
94 std::vector<OutputSpec> outputs;
95 outputs.emplace_back(
"TPC",
"LASERTRACKS", 0, o2::framework::Lifetime::Timeframe);
98 "tpc-laser-track-filter",
99 Inputs{{
"tracks",
"TPC",
"TRACKS", 0}},
calibration using laser tracks
static bool hasNearbyLaserRod(const TrackPar ¶m, int side)
check if param is closer to a laser rod than 1/4 of a sector width
void init(o2::framework::InitContext &ic) final
void run(o2::framework::ProcessingContext &pc) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > Options
std::vector< InputSpec > Inputs
Global TPC definitions and constants.
DataProcessorSpec getLaserTrackFilter()