LDMX Software
EcalPreselectionSkimmer.cxx
Go to the documentation of this file.
1
8
9#include "Ecal/Event/EcalHit.h"
12
13namespace recon {
14
16 framework::Process& process)
17 : framework::Producer(name, process) {}
18
20 use_rechits_ = ps.get<bool>("use_rechits", false);
21
22 if (use_rechits_) {
23 // Rechit-based preselection parameters
24 ecal_rec_hit_coll_ = ps.get<std::string>("ecal_rec_hit_coll");
25 ecal_rec_hit_pass_ = ps.get<std::string>("ecal_rec_hit_pass");
26 } else {
27 // Veto-based preselection parameters
28 ecal_veto_name_ = ps.get<std::string>("ecal_veto_name");
29 ecal_veto_pass_ = ps.get<std::string>("ecal_veto_pass");
30 ecal_mip_name_ = ps.get<std::string>("ecal_mip_name");
31 ecal_mip_pass_ = ps.get<std::string>("ecal_mip_pass");
32 summed_tight_iso_max_ = ps.get<double>("summed_tight_iso_max"); // MeV
33 ecal_back_energy_max_ = ps.get<double>("ecal_back_energy_max"); // MeV
34 shower_rms_max_ = ps.get<double>("shower_rms_max");
35 shower_y_std_max_ = ps.get<double>("shower_y_std_max");
36 shower_x_std_max_ = ps.get<double>("shower_x_std_max");
37 max_cell_dep_max_ = ps.get<double>("max_cell_dep_max"); // MeV
38 std_layer_hit_max_ = ps.get<int>("std_layer_hit_max");
39 n_straight_tracks_max_ = ps.get<int>("n_straight_tracks_max");
40 bdt_disc_min_ = ps.get<double>("bdt_disc_min");
41 fiducial_level_ = ps.get<int>("fiducial_level");
42 }
43
44 // Shared parameters used in both modes
45 summed_det_max_ = ps.get<double>("summed_det_max"); // MeV
46 n_readout_hits_max_ = ps.get<int>("n_readout_hits_max");
47
48 return;
49}
50
52 bool passed_preselection{false};
53
54 if (use_rechits_) {
55 // Rechit-based preselection
56 const auto& ecal_rec_hits = event.getCollection<ldmx::EcalHit>(
58
59 // Calculate sum of rechit energies and count hits
60 double total_rec_energy{0.};
61 int num_rec_hits{0};
62
63 for (const auto& rec_hit : ecal_rec_hits) {
64 total_rec_energy += rec_hit.getEnergy();
65 num_rec_hits++;
66 }
67
68 // Check if we pass preselection
69 passed_preselection = (total_rec_energy < summed_det_max_) &&
70 (num_rec_hits < n_readout_hits_max_);
71
72 if (passed_preselection) {
73 ldmx_log(debug) << "Event passed rechit preselection! Total energy: "
74 << total_rec_energy << " MeV, Num hits: " << num_rec_hits;
76 } else {
78 }
79
80 // Add values to the event
81 event.add("EcalPreselectionDecision", passed_preselection);
82 } // end of rechit-based preselection
83 else {
84 // Veto-based preselection (original logic)
85 bool fiducial_decision{true};
86 const auto& ecal_veto{event.getObject<ldmx::EcalVetoResult>(
88 const auto& mip_result{
90
91 // Boolean to if we skim for fiducial / nonfiducial
92 fiducial_decision = (fiducial_level_ == 0 ||
93 (fiducial_level_ == 1 && ecal_veto.getFiducial()) ||
94 (fiducial_level_ == 2 && !ecal_veto.getFiducial()));
95
96 // Boolean to check if we pass preselection
97 passed_preselection =
98 (ecal_veto.getSummedDet() < summed_det_max_) &&
99 (ecal_veto.getSummedTightIso() < summed_tight_iso_max_) &&
100 (ecal_veto.getEcalBackEnergy() < ecal_back_energy_max_) &&
101 (ecal_veto.getNReadoutHits() < n_readout_hits_max_) &&
102 (ecal_veto.getShowerRMS() < shower_rms_max_) &&
103 (ecal_veto.getYStd() < shower_y_std_max_) &&
104 (ecal_veto.getXStd() < shower_x_std_max_) &&
105 (ecal_veto.getMaxCellDep() < max_cell_dep_max_) &&
106 (ecal_veto.getStdLayerHit() < std_layer_hit_max_) &&
107 (mip_result.getNStraightTracks() < n_straight_tracks_max_) &&
108 (ecal_veto.getDisc() > bdt_disc_min_) && fiducial_decision;
109
110 // Tell the skimmer to keep or drop the event based on whether preselection
111 // passed
112 if (passed_preselection) {
113 ldmx_log(debug) << "This event passed preselection!";
115 } else {
117 }
118 // Add the boolean to the event
119 event.add("EcalPreselectionDecision", passed_preselection);
120 } // end of veto-based preselection
121}
122} // namespace recon
123
Class used to encapsulate the results obtained from EcalMipTrackingProcessor.
Processor used to pre-select events for the ECAL studies.
Class used to encapsulate the results obtained from EcalVetoProcessor.
#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:40
Class which represents the process under execution.
Definition Process.h:34
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
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