LDMX Software
TrackerVetoProcessor.cxx
1
8
9#include "Tracking/Event/Track.h"
11
12namespace tracking {
13
16 ps.get<std::string>("tagger_track_collection", "TaggerTracks");
18 ps.get<std::string>("recoil_track_collection", "RecoilTracks");
19 input_tagger_pass_name_ = ps.get<std::string>("input_tagger_pass_name", "");
20 input_recoil_pass_name_ = ps.get<std::string>("input_recoil_pass_name", "");
21 output_collection_ = ps.get<std::string>("output_collection", "");
22 inverse_skim_ = ps.get<bool>("inverse_skim", false);
23 max_d0_ = ps.get<double>("max_d0", 10.);
24 max_z0_ = ps.get<double>("max_z0", 40.);
25 max_chi2_per_ndf_ = ps.get<double>("max_chi2_per_ndf", 5.);
26 min_tagger_momentum_ = ps.get<double>("min_tagger_momentum", 5600.);
27 min_recoil_n_ = ps.get<int>("min_recoil_n", 1);
28 max_recoil_n_ = ps.get<int>("max_recoil_n", 1);
29 min_tagger_hits_ = ps.get<int>("min_tagger_hits", 4);
30 min_recoil_hits_ = ps.get<int>("min_recoil_hits", 4);
31}
32
34 auto tagger_track_collection{event.getCollection<ldmx::Track>(
36 auto recoil_track_collection{event.getCollection<ldmx::Track>(
38
39 bool passes_veto{false}, passes_tagger_veto{false}, passes_recoil_veto{false};
40
41 // Start with tagger tracks
42 int tagger_n{0};
43 for (const auto& trk : tagger_track_collection) {
44 if (trk.getNdf() <= 0) continue;
45 if ((std::abs(trk.getD0()) < max_d0_) &&
46 (std::abs(trk.getZ0()) < max_z0_)) {
47 auto charge_over_momentum = trk.getQoP();
48 auto tagger_momentum = 1000. / std::abs(charge_over_momentum);
49 float chi2_per_ndf = trk.getChi2() / trk.getNdf();
50 if ((tagger_momentum > min_tagger_momentum_) &&
51 (chi2_per_ndf < max_chi2_per_ndf_) &&
52 (trk.getNhits() > min_tagger_hits_)) {
53 tagger_n++;
54 passes_tagger_veto = true;
55 }
56 }
57 }
58
59 ldmx_log(info) << "Tagger requirements passed for " << tagger_n << " tracks";
60
61 // Recoil tracks now
62 int recoil_n{0};
63 for (const auto& trk : recoil_track_collection) {
64 // no fit quality without a positive ndf
65 if (trk.getNdf() <= 0) continue;
66 float chi2_per_ndf = trk.getChi2() / trk.getNdf();
67 if ((std::abs(trk.getD0()) < max_d0_) &&
68 (std::abs(trk.getZ0()) < max_z0_) &&
69 (chi2_per_ndf < max_chi2_per_ndf_) &&
70 (trk.getNhits() > min_recoil_hits_)) {
71 // we may wanna use these in the future, keeping them commented
72 // auto charge_over_momentum = trk.getQoP();
73 // recoil_momentum = 1000. / abs(charge_over_momentum);
74 recoil_n++;
75 };
76 }
77
78 ldmx_log(info) << "Recoil requirements passed for " << recoil_n << " tracks";
79
80 if ((min_recoil_n_ <= recoil_n) && (recoil_n <= max_recoil_n_)) {
81 passes_recoil_veto = true;
82 }
83
84 passes_veto = passes_tagger_veto && passes_recoil_veto;
85
87 result.setVetoResult(passes_veto);
88 result.setTaggerVetoResult(passes_tagger_veto);
89 result.setRecoilVetoResult(passes_recoil_veto);
90
91 event.add(output_collection_, result);
92
93 if (!inverse_skim_) {
94 if (passes_veto) {
95 ldmx_log(info) << "Tracker veto passed, skim will keep the event";
97 } else {
98 ldmx_log(info) << "Tracker veto failed";
100 }
101 } else {
102 if (passes_veto) {
103 ldmx_log(info) << "Inverse tracker veto passed";
105 } else {
106 ldmx_log(info) << "Inverse tracker veto failed, skim will keep the event";
108 }
109 }
110} // produce
111} // namespace tracking
112
#define DECLARE_PRODUCER(CLASS)
Macro which allows the framework to construct a producer given its name during configuration.
Class that flags events if they pass the tracker veto.
Class that holds reco-level tracking veto decision.
void setStorageHint(framework::StorageControl::Hint hint)
Mark the current event as having the given storage control hint from this module_.
Implements an event buffer system for storing event data.
Definition Event.h:40
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:26
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:75
Implementation of a track object.
Definition Track.h:54
Class that holds reco-level tracking veto decision.
void setRecoilVetoResult(bool passes_recoil_veto)
Sets whether the Recoil Tracker veto was passed or not.
void setTaggerVetoResult(bool passes_tagger_veto)
Sets whether the Tagger Tracker veto was passed or not.
void setVetoResult(bool passes_veto)
Sets whether the Tracker veto was passed or not.
Flags events that pass the tracker veto by applying specific selection criteria.
std::string input_tagger_pass_name_
The pass name of the input tagger collections.
float max_d0_
Maximum allowed transverse impact parameter (d0) for tracks.
int min_recoil_n_
Minimum number of recoil tracks required.
int min_tagger_hits_
Min number of hits for tagger tracks required.
void configure(framework::config::Parameters &parameters) override
Configure the processor using the given user-specified parameters.
void produce(framework::Event &event) override
Process an event and apply tracker veto selection criteria.
bool inverse_skim_
Boolean flag to invert the selection criteria for skimming purposes.
float max_z0_
Maximum allowed longitudinal impact parameter (z0) for tracks.
std::string input_recoil_pass_name_
The pass name of the input recoil collections.
int max_recoil_n_
Maximum number of recoil tracks allowed.
std::string recoil_track_collection_name_
The name of the recoil track collection.
int min_recoil_hits_
Min number of hits for recoil tracks required.
float min_tagger_momentum_
Minimum required momentum for tagger tracks.
std::string tagger_track_collection_name_
The name of the tagger track collection.
float max_chi2_per_ndf_
Max chi2/ndf required for tracks.
constexpr StorageControl::Hint HINT_SHOULD_DROP
storage control hint alias for backwards compatibility
constexpr StorageControl::Hint HINT_SHOULD_KEEP
storage control hint alias for backwards compatibility
The measurement calibrator can be a function or a class/struct able to retrieve the sim hits containe...