LDMX Software
dqm::EcalClusterAnalyzer Class Reference

Public Member Functions

 EcalClusterAnalyzer (const std::string &name, framework::Process &process)
 
void configure (framework::config::Parameters &ps) override
 Callback for the EventProcessor to configure itself from the given set of parameters.
 
void analyze (const framework::Event &event) override
 Process the event and make histograms or summaries.
 
- Public Member Functions inherited from framework::Analyzer
 Analyzer (const std::string &name, Process &process)
 Class constructor.
 
virtual void process (Event &event) final
 Processing an event for an Analyzer is calling analyze.
 
virtual void beforeNewRun (ldmx::RunHeader &run_header) final
 Don't allow Analyzers to add parameters to the run header.
 
- Public Member Functions inherited from framework::EventProcessor
 DECLARE_FACTORY (EventProcessor, EventProcessor *, const std::string &, Process &)
 declare that we have a factory for this class
 
 EventProcessor (const std::string &name, Process &process)
 Class constructor.
 
virtual ~EventProcessor ()=default
 Class destructor.
 
virtual void onNewRun (const ldmx::RunHeader &run_header)
 Callback for the EventProcessor to take any necessary action when the run being processed changes.
 
virtual void onFileOpen (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a new event input ROOT file is opened.
 
virtual void onFileClose (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a event input ROOT file is closed.
 
virtual void onProcessStart ()
 Callback for the EventProcessor to take any necessary action when the processing of events starts, such as creating histograms.
 
virtual void onProcessEnd ()
 Callback for the EventProcessor to take any necessary action when the processing of events finishes, such as calculating job-summary quantities.
 
template<class T >
const T & getCondition (const std::string &condition_name)
 Access a conditions object for the current event.
 
TDirectory * getHistoDirectory ()
 Access/create a directory in the histogram file for this event processor to create histograms and analysis tuples.
 
void setStorageHint (framework::StorageControl::Hint hint)
 Mark the current event as having the given storage control hint from this module_.
 
void setStorageHint (framework::StorageControl::Hint hint, const std::string &purposeString)
 Mark the current event as having the given storage control hint from this module and the given purpose string.
 
int getLogFrequency () const
 Get the current logging frequency from the process.
 
int getRunNumber () const
 Get the run number from the process.
 
std::string getName () const
 Get the processor name.
 
void createHistograms (const std::vector< framework::config::Parameters > &histos)
 Internal function which is used to create histograms passed from the python configuration @parma histos vector of Parameters that configure histograms to create.
 

Private Attributes

bool use_simulated_electron_number_
 Use the number of simulated electrons instead of the number of determined by the TS track counting.
 
int nbr_of_electrons_
 What is the number of electrons in the event?
 
std::string ecal_sim_hit_coll_
 
std::string ecal_sim_hit_pass_
 
std::string rec_hit_coll_name_
 
std::string rec_hit_pass_name_
 
std::string cluster_coll_name_
 
std::string cluster_pass_name_
 
std::string ecal_sp_hits_coll_name_
 
std::string ecal_sp_hits_pass_name_
 
double mixed_hit_cutoff_
 
bool inverse_skim_
 
int n_ecal_clusters_min_
 

Additional Inherited Members

- Protected Member Functions inherited from framework::EventProcessor
void abortEvent ()
 Abort the event immediately.
 
- Protected Attributes inherited from framework::EventProcessor
HistogramPool histograms_
 helper object for making and filling histograms
 
NtupleManagerntuple_ {NtupleManager::getInstance()}
 Manager for any ntuples.
 
logging::logger the_log_
 The logger for this EventProcessor.
 

Detailed Description

Definition at line 30 of file EcalClusterAnalyzer.h.

Constructor & Destructor Documentation

◆ EcalClusterAnalyzer()

dqm::EcalClusterAnalyzer::EcalClusterAnalyzer ( const std::string & name,
framework::Process & process )
inline

Definition at line 32 of file EcalClusterAnalyzer.h.

33 : Analyzer(name, process) {}
virtual void process(Event &event) final
Processing an event for an Analyzer is calling analyze.
Analyzer(const std::string &name, Process &process)
Class constructor.

Member Function Documentation

◆ analyze()

void dqm::EcalClusterAnalyzer::analyze ( const framework::Event & event)
overridevirtual

Process the event and make histograms or summaries.

Parameters
eventThe Event to analyze

Implements framework::Analyzer.

Definition at line 30 of file EcalClusterAnalyzer.cxx.

30 {
31 const auto& ecal_rec_hits{event.getCollection<ldmx::EcalHit>(
32 rec_hit_coll_name_, rec_hit_pass_name_)};
33 const auto& ecal_sim_hits{event.getCollection<ldmx::SimCalorimeterHit>(
34 ecal_sim_hit_coll_, ecal_sim_hit_pass_)};
35 const auto& ecal_clusters{event.getCollection<ldmx::EcalCluster>(
36 cluster_coll_name_, cluster_pass_name_)};
37
38 // Determine the number of recoil electrons in the event
39 // By default from the TS track counting
40 int nbr_of_electrons{event.getElectronCount()};
41 // If configured to use the simulated electron number, use that instead
43 nbr_of_electrons = nbr_of_electrons_;
44 }
45
46 std::map<int, int> layer_cluster_count;
47 for (const auto& cluster : ecal_clusters) {
48 auto layer = cluster.getLayer();
49 layer_cluster_count[layer]++;
50 }
51
52 int total_clusters = 0;
53 for (const auto& [layer, count] : layer_cluster_count) {
54 total_clusters += count;
55 }
56
57 int n_ecal_clusters = 0;
58 if (layer_cluster_count.size() != 0) {
59 n_ecal_clusters = static_cast<int>(std::round(
60 static_cast<double>(total_clusters) / layer_cluster_count.size()));
61 }
62
63 ldmx_log(info) << "Avg number of clusters per layer: " << n_ecal_clusters;
64 // Fill histograms with the number of clusters
65 histograms_.fill("number_of_clusters", total_clusters);
66 histograms_.fill("number_of_clusters_per_layer", n_ecal_clusters);
67 histograms_.fill("number_of_clusters_first_layer", layer_cluster_count[0]);
68
69 // Fill simplied 3-bin histogram to check the prediction
70 if (n_ecal_clusters == nbr_of_electrons) {
71 // correct
72 histograms_.fill("correctly_predicted_events", 1);
73 } else if (n_ecal_clusters < nbr_of_electrons) {
74 // undercounting
75 histograms_.fill("correctly_predicted_events", 0);
76 } else if (n_ecal_clusters > nbr_of_electrons) {
77 // overcounting
78 histograms_.fill("correctly_predicted_events", 2);
79 }
80
81 std::unordered_map<int, std::pair<int, std::vector<double>>> hit_info;
82 hit_info.reserve(ecal_rec_hits.size());
83
84 // Determine the truth information for the recoil electron
85 std::vector<std::vector<float>> sp_electron_positions;
86 const auto& ecal_sp_hits{event.getCollection<ldmx::SimTrackerHit>(
87 "EcalScoringPlaneHits", ecal_sp_hits_pass_name_)};
88
89 std::vector<ldmx::SimTrackerHit> sorted_sp_hits = ecal_sp_hits;
90 std::sort(sorted_sp_hits.begin(), sorted_sp_hits.end(),
91 [](const ldmx::SimTrackerHit& a, const ldmx::SimTrackerHit& b) {
92 return a.getTrackID() < b.getTrackID();
93 });
94
95 ldmx_log(trace) << "Number of ECal Scoring Plane Hits: "
96 << sorted_sp_hits.size();
97
98 // Collect positions of all recoil electrons on the SP
99 // relying on the track ID to identify them
100 unsigned int n_filled = 0;
101 for (const ldmx::SimTrackerHit& sp_hit : sorted_sp_hits) {
102 if (sp_hit.getPdgID() != 11) continue;
103 if (sp_hit.getMomentum()[2] <= 0) continue;
104 ldmx::SimSpecialID hit_id(sp_hit.getID());
105 // Ecal scoring plane is plane 31
106 if (hit_id.plane() != 31) continue;
107 if (n_filled < nbr_of_electrons) {
108 ldmx_log(trace) << "\tSP Hit to be added with Track ID : "
109 << sp_hit.getTrackID() << ", SP Hit Position ("
110 << sp_hit.getPosition()[0] << ", "
111 << sp_hit.getPosition()[1] << ", "
112 << sp_hit.getPosition()[2] << ") mm";
113 sp_electron_positions.push_back(sp_hit.getPosition());
114 n_filled++;
115 }
116 }
117
118 ldmx_log(info) << "Number of ECal CLUE clusters: " << n_ecal_clusters
119 << ", TS counted electrons: " << nbr_of_electrons
120 << ", SP electrons: " << sp_electron_positions.size();
121
122 std::map<int, float> true_energy;
123 std::map<int, float> delta_energy;
124 double sp_ele_dist{9999.};
125 if (nbr_of_electrons == 2 && sp_electron_positions.size() > 1) {
126 // Measures sp_ele_distance between two electrons in the ECal scoring plane
127 // TODO: generalize for n electrons
128 std::vector<float> pos1;
129 std::vector<float> pos2;
130 pos1 = sp_electron_positions[0];
131 pos2 = sp_electron_positions[1];
132 sp_ele_dist = std::sqrt((pos1[0] - pos2[0]) * (pos1[0] - pos2[0]) +
133 (pos1[1] - pos2[1]) * (pos1[1] - pos2[1]));
134
135 histograms_.fill("sp_distance", sp_ele_dist);
136
137 } // end block about the scoring plane hits
138
139 ldmx_log(trace) << "Distance between the two e- in the ECal scoring plane: "
140 << sp_ele_dist << " mm";
141
142 double tot_event_energy = 0;
143 std::vector<double> tot_origin_edep;
144 tot_origin_edep.resize(nbr_of_electrons_ + 1);
145 int n_mixed = 0;
146
147 // Loop over the rechits and find the matching simhits
148 ldmx_log(trace) << "Loop over the rechits and find the matching simhits";
149 for (const auto& hit : ecal_rec_hits) {
150 auto it = std::find_if(
151 ecal_sim_hits.begin(), ecal_sim_hits.end(),
152 [&hit](const auto& sim_hit) { return sim_hit.getID() == hit.getID(); });
153 if (it != ecal_sim_hits.end()) {
154 // if found a simhit matching this rechit
155 ldmx_log(trace) << "\tFound simhit matching rechit with ID"
156 << hit.getID();
157 int ancestor = 0;
158 int prev_ancestor = 0;
159 bool tagged = false;
160 int tag = 0;
161 std::vector<double> edep;
162 edep.resize(nbr_of_electrons_ + 1);
163 double e_tot = 0; // keep track of total from all counted ancestors
164 ldmx_log(trace) << "\t\tIt has " << it->getNumberOfContribs()
165 << " contribs. ";
166 for (int i = 0; i < it->getNumberOfContribs(); i++) {
167 // for each contrib in this simhit
168 const auto& contrib = it->getContrib(i);
169 // get origin electron ID
170 ancestor = contrib.origin_id_;
171 ldmx_log(trace) << "\t\t\tAncestor ID " << ancestor << " with edep "
172 << contrib.edep_;
173 tot_event_energy += contrib.edep_;
174 // store energy from this contrib at index = origin electron ID
175 if (ancestor <= nbr_of_electrons) {
176 edep[ancestor] += contrib.edep_;
177 tot_origin_edep[ancestor] += contrib.edep_;
178 e_tot += contrib.edep_;
179 }
180 if (!tagged && i != 0 && prev_ancestor != ancestor) {
181 // if origin electron ID does not match previous origin electron ID
182 // this hit has contributions from several electrons, ie mixed case
183 tag = 0;
184 tagged = true;
185 ldmx_log(trace) << "\t\t\t\tMixed hit! Ancestor ID changed to "
186 << ancestor;
187 }
188 prev_ancestor = ancestor;
189 } // over contribs
190 // now check if mixed really means mixed, i.e. more than small fraction
191 // from a second electron.
192 if (tagged) {
193 for (int i = 1; i < nbr_of_electrons_ + 1; i++) {
194 if (edep[i] / e_tot >
195 1 - mixed_hit_cutoff_) { // one ancestor contributes at least the
196 // complement to the allowed mixing
197 // fraction
198 tagged = false;
199 ancestor =
200 distance(edep.begin(), max_element(edep.begin(), edep.end()));
201 ldmx_log(trace)
202 << "\t\t\t\tUndid mixed hit tagging, now ancestor = "
203 << ancestor;
204 break;
205 }
206 }
207 }
208 if (!tagged) {
209 // if not tagged, hit was from a single electron (within acceptable
210 // purity)
211 tag = ancestor; // prev_ancestor;
212 } else
213 n_mixed++;
214 histograms_.fill("ancestors", tag);
215 hit_info.insert({hit.getID(), std::make_pair(tag, edep)});
216 } // end if simhit found
217 } // end loop on the rechits
218
219 // Loop over the clusters
220 int clustered_hits = 0;
221 ldmx_log(trace) << "Loop over the clusters, N = " << n_ecal_clusters;
222 histograms_.fill("tag0frac_vs_SPdist", sp_ele_dist,
223 (float)n_mixed / ecal_rec_hits.size());
224 ldmx_log(debug) << "Got " << n_mixed << " mixed hits, a fraction of "
225 << (float)n_mixed / ecal_rec_hits.size();
226
227 if (ecal_clusters.size() >= 2) {
228 float d_x =
229 ecal_clusters[0].getCentroidX() - ecal_clusters[1].getCentroidX();
230 float d_y =
231 ecal_clusters[0].getCentroidY() - ecal_clusters[1].getCentroidY();
232 float d_r = std::sqrt(d_x * d_x + d_y * d_y);
233 histograms_.fill("cluster_distance", d_r);
234 ldmx_log(trace) << "Gt cluster distance (0,1) = " << d_r;
235 }
236
237 for (const auto& cl : ecal_clusters) {
238 auto layer = cl.getLayer();
239 ldmx_log(trace) << "Cluster in layer " << layer
240 << ", energy: " << cl.getEnergy()
241 << ", number of hits: " << cl.getHitIDs().size();
242 auto cluster_centroid_x = cl.getCentroidX();
243 auto cluster_centroid_y = cl.getCentroidY();
244 auto cluster_rms_x = cl.getRMSX();
245 auto cluster_rms_y = cl.getRMSY();
246
247 // Find the closest sp_electron_positions to the cluster centroid
248 double min_distance = 9999.;
249 double sp_clue_x_residuals = 9999.;
250 double sp_clue_y_residuals = 9999.;
251 for (const auto& sp_pos : sp_electron_positions) {
252 double distance = std::sqrt(
253 (sp_pos[0] - cluster_centroid_x) * (sp_pos[0] - cluster_centroid_x) +
254 (sp_pos[1] - cluster_centroid_y) * (sp_pos[1] - cluster_centroid_y));
255 if (distance < min_distance) {
256 min_distance = distance;
257 sp_clue_x_residuals = sp_pos[0] - cluster_centroid_x;
258 sp_clue_y_residuals = sp_pos[1] - cluster_centroid_y;
259 }
260 } // end loop on the scoring plane electron positions
261 // Fill histogram with the distance to the closest scoring plane electron
262 ldmx_log(trace) << "\tCluster centroid: (" << cluster_centroid_x << " +/- "
263 << cluster_rms_x << ", " << cluster_centroid_y << " +/- "
264 << cluster_rms_y
265 << " mm; min distance to SP electron: " << min_distance
266 << " mm";
267 if (layer == 0) {
268 histograms_.fill("sp_clue_distance", min_distance);
269 histograms_.fill("sp_clue_x_residual", sp_clue_x_residuals);
270 histograms_.fill("sp_clue_y_residual", sp_clue_y_residuals);
271 }
272 histograms_.fill("sp_clue_distance_vs_layer", layer, min_distance);
273
274 // for each cluster
275 // total number of hits coming from electron, index = electron ID
276 std::vector<double> n_hits_from_electron;
277 n_hits_from_electron.resize(nbr_of_electrons + 2);
278 // total number of energy coming from electron, index = electron ID
279 std::vector<double> energy_from_electron;
280 energy_from_electron.resize(nbr_of_electrons + 2);
281 double energy_sum = 0.;
282 double n_sum = 0.;
283 ldmx_log(trace) << "Looping over hits in the cluster";
284 const auto& hit_ids = cl.getHitIDs();
285 for (const auto& id : hit_ids) {
286 // for each hit in cluster, find previously stored info
287 auto it = hit_info.find(id);
288 if (it != hit_info.end()) {
289 auto t = it->second;
290 // origin electron ID (or 0 for mixed)
291 auto id_electron = t.first;
292 // energy vector
293 auto energies = t.second;
294 // increment number of hits coming from this electron
295 n_hits_from_electron[id_electron]++;
296 n_sum++;
297
298 double hit_energy_sum = 0.;
299 for (int i = 1; i < nbr_of_electrons + 1; i++) {
300 // loop through energy vector
301 if (energies[i] > 0.) {
302 energy_sum += energies[i];
303 // add energy from electron i in this hit to total energy from
304 // electron i in cluster
305 energy_from_electron[i] += energies[i];
306 }
307 }
308 // if mixed hit, add the total energy of this hit to mixed hit energy
309 // counter
310 if (id_electron == 0) energy_from_electron[0] += hit_energy_sum;
311 energy_sum += hit_energy_sum;
312
313 clustered_hits++;
314 } // end if hit info found
315 } // end loop on the hit IDs in the cluster
316
317 if (energy_sum > 0) {
318 // get largest energy contribution
319 double max_energy_contribution = *max_element(
320 energy_from_electron.begin(), energy_from_electron.end());
321 std::string to_log;
322 for (auto nb : energy_from_electron)
323 to_log.append(std::to_string(nb) + " ");
324 ldmx_log(debug) << "Energies vector is " << to_log;
325
326 // energy purity = largest contribution / all energy
327 histograms_.fill("energy_percentage",
328 100. * (max_energy_contribution / energy_sum));
329 if (energy_from_electron[0] > 0.)
330 histograms_.fill("mixed_hit_energy",
331 100. * (energy_from_electron[0] / energy_sum));
332
333 histograms_.fill("total_energy_vs_hits", energy_sum,
334 cl.getHitIDs().size());
335 histograms_.fill("total_energy_vs_purity", energy_sum,
336 100. * (max_energy_contribution / energy_sum));
337
338 if (nbr_of_electrons == 2) {
339 histograms_.fill("sp_ele_distance_vs_purity", sp_ele_dist,
340 100. * (max_energy_contribution / energy_sum));
341 }
342 }
343 if (n_sum > 0) {
344 double n_max = *max_element(n_hits_from_electron.begin(),
345 n_hits_from_electron.end());
346 histograms_.fill("same_ancestor", 100. * (n_max / n_sum));
347 }
348 // find the main contributor
349 auto elt = distance(
350 energy_from_electron.begin(),
351 max_element(energy_from_electron.begin(), energy_from_electron.end()));
352 ldmx_log(debug) << "Found that the maximum contributing trackID is " << elt;
353 delta_energy[elt] = cl.getEnergy() - true_energy[elt];
354 // delta_energy[2]=e[2]-true_energy[2];
355 histograms_.fill("cluster_RMSX", cl.getRMSX());
356 } // end loop on the clusters
357 std::string more_log;
358 for (auto nb : tot_origin_edep) more_log.append(std::to_string(nb) + " ");
359 ldmx_log(debug) << "Edep per ancestor in event is " << more_log;
360 ldmx_log(debug) << "Total energy deposited in event: " << tot_event_energy;
361
362 histograms_.fill("dE_cl2_vs_cl1", delta_energy[1], delta_energy[2]);
363 histograms_.fill("unclustered_hits", (ecal_rec_hits.size() - clustered_hits));
364 histograms_.fill("total_rechits_in_event", ecal_rec_hits.size());
366 "unclustered_hits_percentage",
367 100. * (ecal_rec_hits.size() - clustered_hits) / ecal_rec_hits.size());
368
369 if (inverse_skim_) {
370 // inverse operation: drop events with enough clusters
371 if (n_ecal_clusters > n_ecal_clusters_min_) {
373 } else {
375 }
376 } else {
377 // normal operation: keep events with enough clusters
378 if (n_ecal_clusters > n_ecal_clusters_min_) {
380 } else {
382 }
383 }
384}
int nbr_of_electrons_
What is the number of electrons in the event?
bool use_simulated_electron_number_
Use the number of simulated electrons instead of the number of determined by the TS track counting.
HistogramPool histograms_
helper object for making and filling histograms
void setStorageHint(framework::StorageControl::Hint hint)
Mark the current event as having the given storage control hint from this module_.
void fill(const std::string &name, const T &val)
Fill a 1D histogram.
Stores cluster information from the ECal.
Definition EcalCluster.h:20
Stores reconstructed hit information from the ECAL.
Definition EcalHit.h:19
Stores simulated calorimeter hit information.
Implements detector ids for special simulation-derived hits like scoring planes.
Represents a simulated tracker hit in the simulation.
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

References framework::HistogramPool::fill(), framework::HINT_SHOULD_DROP, framework::HINT_SHOULD_KEEP, framework::EventProcessor::histograms_, nbr_of_electrons_, ldmx::SimSpecialID::plane(), framework::EventProcessor::setStorageHint(), and use_simulated_electron_number_.

◆ configure()

void dqm::EcalClusterAnalyzer::configure ( framework::config::Parameters & parameters)
overridevirtual

Callback for the EventProcessor to configure itself from the given set of parameters.

The parameters a processor has access to are the member variables of the python class in the sequence that has className equal to the EventProcessor class name.

For an example, look at MyProcessor.

Parameters
parametersParameters for configuration.

Reimplemented from framework::EventProcessor.

Definition at line 5 of file EcalClusterAnalyzer.cxx.

5 {
7 ps.get<bool>("use_simulated_electron_number");
8 nbr_of_electrons_ = ps.get<int>("nbr_of_electrons");
9
10 ecal_sim_hit_coll_ = ps.get<std::string>("ecal_sim_hit_coll");
11 ecal_sim_hit_pass_ = ps.get<std::string>("ecal_sim_hit_pass");
12
13 rec_hit_coll_name_ = ps.get<std::string>("rec_hit_coll_name");
14 rec_hit_pass_name_ = ps.get<std::string>("rec_hit_pass_name");
15
16 cluster_coll_name_ = ps.get<std::string>("cluster_coll_name");
17 cluster_pass_name_ = ps.get<std::string>("cluster_pass_name");
18
19 ecal_sp_hits_coll_name_ =
20 ps.getParameter<std::string>("ecal_sp_hits_coll_name");
21 ecal_sp_hits_pass_name_ =
22 ps.getParameter<std::string>("ecal_sp_hits_pass_name");
23 mixed_hit_cutoff_ = ps.getParameter<double>("mixed_hit_cutoff");
24
25 inverse_skim_ = ps.get<bool>("inverse_skim");
26 n_ecal_clusters_min_ = ps.get<int>("n_ecal_clusters_min");
27 return;
28}

References framework::config::Parameters::get(), nbr_of_electrons_, and use_simulated_electron_number_.

Member Data Documentation

◆ cluster_coll_name_

std::string dqm::EcalClusterAnalyzer::cluster_coll_name_
private

Definition at line 59 of file EcalClusterAnalyzer.h.

◆ cluster_pass_name_

std::string dqm::EcalClusterAnalyzer::cluster_pass_name_
private

Definition at line 62 of file EcalClusterAnalyzer.h.

◆ ecal_sim_hit_coll_

std::string dqm::EcalClusterAnalyzer::ecal_sim_hit_coll_
private

Definition at line 47 of file EcalClusterAnalyzer.h.

◆ ecal_sim_hit_pass_

std::string dqm::EcalClusterAnalyzer::ecal_sim_hit_pass_
private

Definition at line 50 of file EcalClusterAnalyzer.h.

◆ ecal_sp_hits_coll_name_

std::string dqm::EcalClusterAnalyzer::ecal_sp_hits_coll_name_
private

Definition at line 65 of file EcalClusterAnalyzer.h.

◆ ecal_sp_hits_pass_name_

std::string dqm::EcalClusterAnalyzer::ecal_sp_hits_pass_name_
private

Definition at line 67 of file EcalClusterAnalyzer.h.

◆ inverse_skim_

bool dqm::EcalClusterAnalyzer::inverse_skim_
private

Definition at line 73 of file EcalClusterAnalyzer.h.

◆ mixed_hit_cutoff_

double dqm::EcalClusterAnalyzer::mixed_hit_cutoff_
private

Definition at line 70 of file EcalClusterAnalyzer.h.

◆ n_ecal_clusters_min_

int dqm::EcalClusterAnalyzer::n_ecal_clusters_min_
private

Definition at line 76 of file EcalClusterAnalyzer.h.

◆ nbr_of_electrons_

int dqm::EcalClusterAnalyzer::nbr_of_electrons_
private

What is the number of electrons in the event?

Definition at line 44 of file EcalClusterAnalyzer.h.

Referenced by analyze(), and configure().

◆ rec_hit_coll_name_

std::string dqm::EcalClusterAnalyzer::rec_hit_coll_name_
private

Definition at line 53 of file EcalClusterAnalyzer.h.

◆ rec_hit_pass_name_

std::string dqm::EcalClusterAnalyzer::rec_hit_pass_name_
private

Definition at line 56 of file EcalClusterAnalyzer.h.

◆ use_simulated_electron_number_

bool dqm::EcalClusterAnalyzer::use_simulated_electron_number_
private

Use the number of simulated electrons instead of the number of determined by the TS track counting.

Definition at line 41 of file EcalClusterAnalyzer.h.

Referenced by analyze(), and configure().


The documentation for this class was generated from the following files: