21 xpu::push_timer(
"V0Trigger");
27 size_t numTracksUsed = 0;
28 for (
auto trackIter1 =
tracks.begin(); trackIter1 !=
tracks.end(); trackIter1++) {
29 if (!
Select(*trackIter1, config))
continue;
31 for (
auto trackIter2 = std::next(trackIter1); trackIter2 !=
tracks.end(); trackIter2++) {
32 if (!
Select(*trackIter2, config))
continue;
35 float time1 = trackIter1->fParPV.GetTime();
36 float time2 = trackIter2->fParPV.GetTime();
38 if (
fpQa->IsActive()) {
39 fpQa->fphPairDeltaT->Fill(time2 - time1);
43 result.second.errTracksUnsorted++;
46 result.second.numTrackPairs++;
48 result.second.numTrackPairsAfterTimeCut++;
51 auto [zVertex, dist] =
CalcPCA(trackIter1->fParPV, trackIter2->fParPV);
52 if (
fpQa->IsActive()) {
53 fpQa->fphPairZVertex->Fill(zVertex);
54 fpQa->fphPairDca->Fill(dist);
58 result.second.numTrackPairsAfterDistCut++;
60 result.second.numTrackPairsAfterZCut++;
61 double tVertex = 0.5 * (time1 + time2);
62 result.first.push_back(tVertex);
63 if (
fpQa->IsActive()) {
64 fpQa->fphSelPairDeltaT->Fill(time2 - time1);
65 fpQa->fphSelPairZVertex->Fill(zVertex);
66 fpQa->fphSelPairDca->Fill(dist);
73 result.second.time = xpu::pop_timer();
74 L_(info) <<
"V0Trigger: tracks " <<
tracks.size() <<
", unsorted " << result.second.errTracksUnsorted
75 <<
", used tracks " << numTracksUsed <<
", track pairs " << result.second.numTrackPairs
76 <<
", after time cut " << result.second.numTrackPairsAfterTimeCut <<
", after dist cut "
77 << result.second.numTrackPairsAfterDistCut <<
", after z cut " << result.second.numTrackPairsAfterZCut;
86 const double ax = track1.
GetX() - track1.
GetTx() * track1.
GetZ();
87 const double ay = track1.
GetY() - track1.
GetTy() * track1.
GetZ();
88 const double ux = track1.
GetTx();
89 const double uy = track1.
GetTy();
92 const double bx = track2.
GetX() - track2.
GetTx() * track2.
GetZ();
93 const double by = track2.
GetY() - track2.
GetTy() * track2.
GetZ();
94 const double vx = track2.
GetTx();
95 const double vy = track2.
GetTy();
98 const double cx = ax - bx;
99 const double cy = ay - by;
100 const double wx = ux - vx;
101 const double wy = uy - vy;
104 const double z = -1. * (cx * wx + cy * wy) / (wx * wx + wy * wy);
107 const double dx = cx + z * wx;
108 const double dy = cy + z * wy;
109 const double dist =
sqrt(dx * dx + dy * dy);
111 return std::make_pair(z, dist);
150 std::stringstream out;
151 out <<
"--- Using V0Trigger ---";
friend fvec sqrt(const fvec &a)
Class representing an output track in the CA tracking algorithm.
TrackParam_t fParFirst
Track parameters on the first station.
TrackParam_t fParPV
Track parameters in the primary vertex.
TrackParam_t fParLast
Track parameters on the last station.
Configuration of the V0 trigger class (trigger on displaced vertices)
double TrackImpactY_min() const
Minimum y of track impact in target plane.
double TrackImpactX_max() const
Maximum x of track impact in target plane.
double PairDist_max() const
Maximum distance at closest approach.
double TrackImpactY_max() const
Maximum y of track impact in target plane.
double PairDeltaT_max() const
Maximum time difference of tracks.
double PairZ_max() const
Maximum z of PCA.
double TrackEndZ_min() const
Minimum z at last track measurement.
double TrackStartZ_min() const
Minimum z at first track measurement.
double TrackStartZ_max() const
Maximum z at first track measurement.
double PairZ_min() const
Minimum z of PCA.
double TrackImpactX_min() const
Minimum x of track impact in target plane.
cbm::algo::ca::Vector< cbm::algo::ca::Track > TrackVector
cbm::algo::kf::TrackParamS TrackParam
bool Select(const Track &track, const V0TriggerConfig &config) const
Check track cuts.
std::pair< std::vector< double >, V0TriggerMoniData > Result
std::shared_ptr< V0TriggerQa > fpQa
cbm::algo::ca::Track Track
std::pair< double, double > CalcPCA(const TrackParam &track1, const TrackParam &track2) const
Calculation of closest approach of two tracks (straight lines)
Result operator()(const TrackVector &tracks, const V0TriggerConfig &config) const
Execution.
bool IsPrimary(const TrackParam &track, const V0TriggerConfig &config) const
Check if track is a priomary.
std::string ToString() const
Info to string.
T GetTy() const
Gets slope along y-axis.
T GetZ() const
Gets z position [cm].
T X() const
Gets x position [cm].
T GetTx() const
Gets slope along x-axis.
T Y() const
Gets y position [cm].
T Z() const
Gets z position [cm].
T GetY() const
Gets y position [cm].
T GetX() const
Gets x position [cm].