LDMX Software
EcalPreselectionSkimmer.cxx
Go to the documentation of this file.
1
8
9namespace recon {
10
12 framework::Process &process)
13 : framework::Producer(name, process) {}
14
16 use_rechits_ = ps.get<bool>("use_rechits", false);
17
18 if (use_rechits_) {
19 // Rechit-based preselection parameters
20 ecal_rec_hit_coll_ = ps.get<std::string>("ecal_rec_hit_coll");
21 ecal_rec_hit_pass_ = ps.get<std::string>("ecal_rec_hit_pass");
22 } else {
23 // Veto-based preselection parameters
24 ecal_veto_name_ = ps.get<std::string>("ecal_veto_name");
25 ecal_veto_pass_ = ps.get<std::string>("ecal_veto_pass");
26 ecal_mip_name_ = ps.get<std::string>("ecal_mip_name");
27 ecal_mip_pass_ = ps.get<std::string>("ecal_mip_pass");
28 summed_tight_iso_max_ = ps.get<double>("summed_tight_iso_max"); // MeV
29 ecal_back_energy_max_ = ps.get<double>("ecal_back_energy_max"); // MeV
30 shower_rms_max_ = ps.get<double>("shower_rms_max");
31 shower_y_std_max_ = ps.get<double>("shower_y_std_max");
32 shower_x_std_max_ = ps.get<double>("shower_x_std_max");
33 max_cell_dep_max_ = ps.get<double>("max_cell_dep_max"); // MeV
34 std_layer_hit_max_ = ps.get<int>("std_layer_hit_max");
35 n_straight_tracks_max_ = ps.get<int>("n_straight_tracks_max");
36 bdt_disc_min_ = ps.get<double>("bdt_disc_min");
37 fiducial_level_ = ps.get<int>("fiducial_level");
38 }
39
40 // Shared parameters used in both modes
41 summed_det_max_ = ps.get<double>("summed_det_max"); // MeV
42 n_readout_hits_max_ = ps.get<int>("n_readout_hits_max");
43
44 return;
45}
46
48 bool passed_preselection{false};
49
50 if (use_rechits_) {
51 // Rechit-based preselection
52 const auto &ecal_rec_hits = event.getCollection<ldmx::EcalHit>(
54
55 // Calculate sum of rechit energies and count hits
56 double total_rec_energy{0.};
57 int num_rec_hits{0};
58
59 for (const auto &rec_hit : ecal_rec_hits) {
60 total_rec_energy += rec_hit.getEnergy();
61 num_rec_hits++;
62 }
63
64 // Check if we pass preselection
65 passed_preselection = (total_rec_energy < summed_det_max_) &&
66 (num_rec_hits < n_readout_hits_max_);
67
68 if (passed_preselection) {
69 ldmx_log(debug) << "Event passed rechit preselection! Total energy: "
70 << total_rec_energy << " MeV, Num hits: " << num_rec_hits;
72 } else {
74 }
75
76 // Add values to the event
77 event.add("EcalPreselectionDecision", passed_preselection);
78 } // end of rechit-based preselection
79 else {
80 // Veto-based preselection (original logic)
81 bool fiducial_decision{true};
82 const auto &ecal_veto{event.getObject<ldmx::EcalVetoResult>(
84 const auto &mip_result{
86
87 // Boolean to if we skim for fiducial / nonfiducial
88 fiducial_decision = (fiducial_level_ == 0 ||
89 (fiducial_level_ == 1 && ecal_veto.getFiducial()) ||
90 (fiducial_level_ == 2 && !ecal_veto.getFiducial()));
91
92 // Boolean to check if we pass preselection
93 passed_preselection =
94 (ecal_veto.getSummedDet() < summed_det_max_) &&
95 (ecal_veto.getSummedTightIso() < summed_tight_iso_max_) &&
96 (ecal_veto.getEcalBackEnergy() < ecal_back_energy_max_) &&
97 (ecal_veto.getNReadoutHits() < n_readout_hits_max_) &&
98 (ecal_veto.getShowerRMS() < shower_rms_max_) &&
99 (ecal_veto.getYStd() < shower_y_std_max_) &&
100 (ecal_veto.getXStd() < shower_x_std_max_) &&
101 (ecal_veto.getMaxCellDep() < max_cell_dep_max_) &&
102 (ecal_veto.getStdLayerHit() < std_layer_hit_max_) &&
103 (mip_result.getNStraightTracks() < n_straight_tracks_max_) &&
104 (ecal_veto.getDisc() > bdt_disc_min_) && fiducial_decision;
105
106 // Tell the skimmer to keep or drop the event based on whether preselection
107 // passed
108 if (passed_preselection) {
109 ldmx_log(debug) << "This event passed preselection!";
111 } else {
113 }
114 // Add the boolean to the event
115 event.add("EcalPreselectionDecision", passed_preselection);
116 } // end of veto-based preselection
117}
118} // namespace recon
119
Processor used to pre-select events for the ECAL studies.
#define DECLARE_PRODUCER(CLASS)
Macro which allows the framework to construct a producer given its name during configuration.
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:42
Class which represents the process under execution.
Definition Process.h:37
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:29
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:78
Stores reconstructed hit information from the ECAL.
Definition EcalHit.h:19
bool use_rechits_
Use rechit-based preselection (if false, use veto-based)
int n_straight_tracks_max_
Max value for num straight tracks.
double ecal_back_energy_max_
Max value for ecal back energy.
virtual void produce(framework::Event &event) final
Run the processor and select events that pass pre-selection in ECAL.
int std_layer_hit_max_
Max value for std layer hits_.
std::string ecal_mip_name_
Collection Name for mip result object (optional if use_rechits_ is true)
double bdt_disc_min_
Min value for the BDT disc variable.
std::string ecal_veto_name_
Collection Name for veto object (optional if use_rechits_ is true)
int n_readout_hits_max_
Max value for num readout hits_.
std::string ecal_rec_hit_pass_
Pass Name for ecal rechits.
double summed_det_max_
Max value for summed det.
virtual void configure(framework::config::Parameters &) final
Callback for the EventProcessor to configure itself from the given set of parameters.
double shower_x_std_max_
Max value for shower rms in X.
double summed_tight_iso_max_
Max value for summed tigh iso.
EcalPreselectionSkimmer(const std::string &name, framework::Process &process)
Constructor.
std::string ecal_rec_hit_coll_
Collection Name for ecal rechits.
double shower_y_std_max_
Max value for shower rms in Y.
double shower_rms_max_
Max value for shower rms.
double max_cell_dep_max_
Max value for maximal cell deposition.
std::string ecal_veto_pass_
Pass Name for veto object (optional if use_rechits_ is true)
int fiducial_level_
Level of interest in fiducial events 0: don't care if it's fiducial or not, 1: keep fiducial events o...
std::string ecal_mip_pass_
Pass Name for mip result object (optional if use_rechits_ is true)
All classes in the ldmx-sw project use this namespace.
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