LDMX Software
ecal::EcalRecProducer Class Reference

Performs basic ECal reconstruction. More...

#include <EcalRecProducer.h>

Public Member Functions

 EcalRecProducer (const std::string &name, framework::Process &process)
 Constructor.
 
virtual ~EcalRecProducer ()=default
 Destructor.
 
void configure (framework::config::Parameters &) override
 Grabs configure parameters from the python config file.
 
void produce (framework::Event &event) override
 Produce EcalHits and put them into the event bus using the EcalDigis as input.
 
void onNewRun (const ldmx::RunHeader &) override
 Seed the phase smearing.
 
- Public Member Functions inherited from framework::Producer
 Producer (const std::string &name, Process &process)
 Class constructor.
 
virtual void process (Event &event) final
 Processing an event for a Producer is calling produce.
 
- 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 beforeNewRun (ldmx::RunHeader &run_header)
 Callback for Producers to add parameters to the run header before conditions are initialized.
 
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

std::string digi_coll_name_
 Digi Collection Name to use as input.
 
std::string digi_pass_name_
 Digi Pass Name to use as input.
 
std::string sim_hit_coll_name_
 simhit collection name
 
std::string sim_hit_pass_name_
 simhit pass name
 
std::string rec_hit_coll_name_
 output hit collection name
 
double mip_si_energy_
 Energy [MeV] deposited by a MIP in Si 0.5mm thick.
 
double clock_cycle_
 Length of clock cycle [ns].
 
double charge_per_mip_
 Number of electrons generated by average MIP in Si 0.5mm thick.
 
std::vector< double > layer_weights_
 Layer Weights to use for this reconstruction.
 
double second_order_energy_correction_
 Second Order Energy Correction to use for this reconstruction.
 
std::string amplitude_method_
 ADC mode amplitude: soi, max or fit.
 
int fit_n_samples_
 number of samples in the fit, starting one before the max, <= 0 for all
 
std::unique_ptr< ldmx::HgcrocShape > pulse_shape_
 HGCROC pulse template, only for amplitude_method fit.
 
bool fit_fixed_t0_
 fit with t0 = event phase + offset, e.g. phase from HCal TOA
 
double fit_t0_offset_
 offset [ns] between the event phase and the pulse t0
 
double phase_resolution_
 Gaussian smearing [ns] of the event phase.
 
std::string phase_name_
 event header float parameter holding the event phase [ns]
 
std::mt19937 rng_
 

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
 
NtupleManager & ntuple_ {NtupleManager::getInstance()}
 Manager for any ntuples.
 
logging::logger the_log_
 The logger for this EventProcessor.
 

Detailed Description

Performs basic ECal reconstruction.

Reconstruction is done from the EcalDigi samples. Some hard-coded parameters are used for position and energy calculation.

Definition at line 30 of file EcalRecProducer.h.

Constructor & Destructor Documentation

◆ EcalRecProducer()

ecal::EcalRecProducer::EcalRecProducer ( const std::string & name,
framework::Process & process )

Constructor.

Definition at line 23 of file EcalRecProducer.cxx.

25 : Producer(name, process) {}
Producer(const std::string &name, Process &process)
Class constructor.
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.

Member Function Documentation

◆ configure()

void ecal::EcalRecProducer::configure ( framework::config::Parameters & ps)
overridevirtual

Grabs configure parameters from the python config file.

Reimplemented from framework::EventProcessor.

Definition at line 27 of file EcalRecProducer.cxx.

27 {
28 // collection names
29 digi_coll_name_ = ps.get<std::string>("digi_coll_name");
30 digi_pass_name_ = ps.get<std::string>("digi_pass_name");
31 sim_hit_coll_name_ = ps.get<std::string>("sim_hit_coll_name");
32 sim_hit_pass_name_ = ps.get<std::string>("sim_hit_pass_name");
33 rec_hit_coll_name_ = ps.get<std::string>("rec_hit_coll_name");
34
35 layer_weights_ = ps.get<std::vector<double>>("layer_weights");
37 ps.get<double>("second_order_energy_correction");
38
39 mip_si_energy_ = ps.get<double>("mip_si_energy");
40 clock_cycle_ = ps.get<double>("clock_cycle");
41 charge_per_mip_ = ps.get<double>("charge_per_mip");
42
43 amplitude_method_ = ps.get<std::string>("amplitude_method", "soi");
44 fit_n_samples_ = ps.get<int>("fit_n_samples", 0);
45 fit_fixed_t0_ = ps.get<bool>("fit_fixed_t0", false);
46 fit_t0_offset_ = ps.get<double>("fit_t0_offset", 0.);
47 phase_resolution_ = ps.get<double>("phase_resolution", 0.);
48 phase_name_ = ps.get<std::string>("phase_name", "ecal_digi_phase");
49 if (amplitude_method_ == "fit") {
50 auto shape = ps.get<std::vector<double>>("pulse_shape");
51 if (shape.size() != 5) {
52 EXCEPTION_RAISE("InvalidConfig", "pulse_shape needs 5 parameters.");
53 }
54 pulse_shape_ = std::make_unique<ldmx::HgcrocShape>(
55 shape[0], shape[1], shape[2], shape[3], shape[4]);
56 } else if (amplitude_method_ != "soi" and amplitude_method_ != "max") {
57 EXCEPTION_RAISE("InvalidConfig", "Unknown amplitude_method '" +
59 "', use soi, max or fit.");
60 }
61}
std::string phase_name_
event header float parameter holding the event phase [ns]
double mip_si_energy_
Energy [MeV] deposited by a MIP in Si 0.5mm thick.
std::string sim_hit_coll_name_
simhit collection name
std::string amplitude_method_
ADC mode amplitude: soi, max or fit.
bool fit_fixed_t0_
fit with t0 = event phase + offset, e.g. phase from HCal TOA
double fit_t0_offset_
offset [ns] between the event phase and the pulse t0
double phase_resolution_
Gaussian smearing [ns] of the event phase.
std::vector< double > layer_weights_
Layer Weights to use for this reconstruction.
double second_order_energy_correction_
Second Order Energy Correction to use for this reconstruction.
double charge_per_mip_
Number of electrons generated by average MIP in Si 0.5mm thick.
std::string rec_hit_coll_name_
output hit collection name
int fit_n_samples_
number of samples in the fit, starting one before the max, <= 0 for all
std::string digi_pass_name_
Digi Pass Name to use as input.
double clock_cycle_
Length of clock cycle [ns].
std::string sim_hit_pass_name_
simhit pass name
std::unique_ptr< ldmx::HgcrocShape > pulse_shape_
HGCROC pulse template, only for amplitude_method fit.
std::string digi_coll_name_
Digi Collection Name to use as input.
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:75

References amplitude_method_, charge_per_mip_, clock_cycle_, digi_coll_name_, digi_pass_name_, fit_fixed_t0_, fit_n_samples_, fit_t0_offset_, framework::config::Parameters::get(), layer_weights_, mip_si_energy_, phase_name_, phase_resolution_, pulse_shape_, rec_hit_coll_name_, second_order_energy_correction_, sim_hit_coll_name_, and sim_hit_pass_name_.

◆ onNewRun()

void ecal::EcalRecProducer::onNewRun ( const ldmx::RunHeader & )
overridevirtual

Seed the phase smearing.

Reimplemented from framework::EventProcessor.

Definition at line 63 of file EcalRecProducer.cxx.

63 {
64 if (fit_fixed_t0_) {
67 rng_.seed(rseed.getSeed(getName() + "::phase"));
68 }
69}
const T & getCondition(const std::string &condition_name)
Access a conditions object for the current event.
std::string getName() const
Get the processor name.
static const std::string CONDITIONS_OBJECT_NAME
Conditions object name.

References framework::RandomNumberSeedService::CONDITIONS_OBJECT_NAME, fit_fixed_t0_, framework::EventProcessor::getCondition(), and framework::EventProcessor::getName().

◆ produce()

void ecal::EcalRecProducer::produce ( framework::Event & event)
overridevirtual

Produce EcalHits and put them into the event bus using the EcalDigis as input.

This function unfolds the digi samples taken by the HGC ROC and reconstructs their energy using knowledge of how the chip operates and the position using EcalGeometry.

Non-positive Electron (charge) count This reconstruction error occurs when the ADC value is at or below the ADC pedestal for that channel. In the normal running mode, this will never happen because our front-end (the digi emulator or the digitizer itself) will suppress any signals that are below the readout threshold. Nevertheless, in some running modes, we don't have this zero suppression, so we need to check that the reconstruction charge (count of electrons) is positive. A channel sitting exactly at its pedestal carries no energy, so it is dropped as well.

Implements framework::Producer.

Definition at line 71 of file EcalRecProducer.cxx.

71 {
72 // Get the Ecal Geometry
73 const auto& geometry = getCondition<ldmx::EcalGeometry>(
74 ldmx::EcalGeometry::CONDITIONS_OBJECT_NAME);
75
76 // Safety check: ensure layer_weights_ covers all geometry layers.
77 // A mismatch here typically means an outdated geometry configuration
78 // (e.g. v14) is being used with layer weights for a different geometry
79 // version (e.g. v15).
80 if (geometry.getNumLayers() > static_cast<int>(layer_weights_.size())) {
81 EXCEPTION_RAISE(
82 "InvalidConfig",
83 "The number of layers in the Ecal geometry (" +
84 std::to_string(geometry.getNumLayers()) +
85 ") exceeds the number of configured layer_weights (" +
86 std::to_string(layer_weights_.size()) +
87 "). This is likely caused by a mismatch between the geometry "
88 "version and the reconstruction configuration. Please ensure "
89 "that the correct geometry is being used.");
90 }
91
92 // Get the reconstruction parameters
93 EcalReconConditions the_conditions(
96
97 std::vector<ldmx::EcalHit> ecal_rec_hits;
98 auto ecal_digis = event.getObject<ldmx::HgcrocDigiCollection>(
100 const int i_soi = ecal_digis.getSampleOfInterestIndex();
101
102 // one measured phase per event, shared by all channels
103 double t0_fixed{0.};
104 if (fit_fixed_t0_) {
105 t0_fixed =
106 event.getEventHeader().getFloatParameter(phase_name_) + fit_t0_offset_;
107 if (phase_resolution_ > 0.) {
108 t0_fixed += std::normal_distribution<double>(0., phase_resolution_)(rng_);
109 }
110 }
111 // loop through digis
112 for (auto digi : ecal_digis) {
113 // ID from first digi sample
114 // assuming rest of samples have same ID
115 ldmx::EcalID id(digi.id());
116
117 // ID to real space position
118 auto [x_, y_, z_] = geometry.getPosition(id);
119
120 // the TOT measurement is in the sample where the pulse fell back below
121 // threshold, which is the SOI only for in-time hits (iss #1944)
122 int i_tot = digi.totSampleIndex();
123
124 // get the estimated charge deposited from digi samples
125 double charge(0.);
126 // TOA with respect to the 25ns clock window that measured it
127 double hit_time(0.);
128
129 if (i_tot >= 0) {
130 // TOT - number of clock ticks that pulse was over threshold
131 // this is related to the amplitude of the pulse approximately through a
132 // linear drain rate the amplitude of the pulse is related to the energy
133 // deposited
134 auto tot_sample = digi.at(i_tot);
135
136 // convert the time over threshold into a total energy deposited in the
137 // silicon
138 // (time over threshold [ns] - pedestal) * gain
139 charge = (tot_sample.tot() - the_conditions.totPedestal(id)) *
140 the_conditions.totGain(id);
141
142 // TOA is measured from the start of its own sample
143 hit_time = (i_tot - i_soi) * clock_cycle_ +
144 tot_sample.toa() * (clock_cycle_ / 1024);
145
146 ldmx_log(trace) << "Recon { TOA: " << hit_time << " ns } ";
147 ldmx_log(trace) << "TOT Mode (sample " << i_tot << ") -> "
148 << tot_sample.tot() << "TDC -> " << charge << " fC";
149 } else {
150 hit_time = digi.soi().toa() * (clock_cycle_ / 1024); // ns
151 ldmx_log(trace) << "Recon { TOA: " << hit_time << " ns } ";
152
153 // ADC mode of readout
154 // ADC - voltage measurement at a specific time of the pulse
155 // Pulse Shape:
156 // p[0]/(1.0+exp(p[1](t-p[2]+p[3]-p[4])))/(1.0+exp(p[5]*(t-p[6]+p[3]-p[4])))
157 // p[0] = amplitude to be fit (TBD)
158 // p[1] = -0.345 shape parameter - rate of up slope
159 // p[2] = 70.6547 shape parameter - time of up slope relative to shape
160 // fit p[3] = 77.732 shape parameter - time of peak relative to shape fit
161 // p[4] = peak time to be fit (TBD)
162 // p[5] = 0.140068 shape parameter - rate of down slope
163 // p[6] = 87.7649 shape paramter - time of down slope relative to shape
164 // fit
165 // These measurements can be used to fit the pulse shape if TOT is not
166 // available. For now, we simply take the measurement of the SOI as the
167 // peak amplitude.
168
169 const double pedestal = the_conditions.adcPedestal(id);
170 if (amplitude_method_ == "soi") {
171 charge = (digi.soi().adcT() - pedestal) * the_conditions.adcGain(id);
172 } else {
173 std::vector<short> adc;
174 for (unsigned int i{0}; i < digi.size(); i++)
175 adc.push_back(static_cast<short>(digi.at(i).adcT()));
176 int i_max = std::max_element(adc.begin(), adc.end()) - adc.begin();
177 if (amplitude_method_ == "max") {
178 charge = (adc[i_max] - pedestal) * the_conditions.adcGain(id);
179 // TOA is measured from the start of its own sample
180 hit_time = (i_max - i_soi) * clock_cycle_ +
181 digi.at(i_max).toa() * (clock_cycle_ / 1024);
182 } else {
183 // window starts one sample before the peak to catch the rise
184 const int n_adc = static_cast<int>(adc.size());
185 const int n =
186 fit_n_samples_ > 0 ? std::min(fit_n_samples_, n_adc) : n_adc;
187 int i_peak = i_max;
188 if (fit_fixed_t0_) {
189 i_peak =
190 i_soi + static_cast<int>(std::lround(t0_fixed / clock_cycle_));
191 }
192 const int first = std::clamp(i_peak - 1, 0, n_adc - n);
193 std::vector<short> window(adc.begin() + first,
194 adc.begin() + first + n);
195 // peak within half a clock of the window, else noise tails fake
196 // pulses
197 ldmx::PulseFitter fitter(
198 *pulse_shape_, (first - i_soi) * clock_cycle_, clock_cycle_,
199 pedestal, 1., (first - i_soi - 0.5) * clock_cycle_,
200 (first + n - 1 - i_soi + 0.5) * clock_cycle_, 0.25);
201 auto r = fit_fixed_t0_ ? fitter.fitFixed(window, t0_fixed)
202 : fitter.fit(window);
203 charge = r.converged ? r.amplitude * the_conditions.adcGain(id) : 0.;
204 hit_time = r.t0;
205 }
206 }
207
208 ldmx_log(trace) << "ADC Mode -> " << charge << " fC";
209 }
210
223 if (charge <= 0) continue;
224
225 double num_mips_equivalent = charge / charge_per_mip_;
226 double energy_deposited_in_si = num_mips_equivalent * mip_si_energy_;
227
228 ldmx_log(trace) << " -> " << num_mips_equivalent << " equiv MIPs -> "
229 << energy_deposited_in_si << " MeV";
230
231 // incorporate layer_ weights
232 double reconstructed_energy =
233 (num_mips_equivalent *
235 id.layer()) // energy lost in non-sensitive layers
236 + energy_deposited_in_si // energy deposited in Si itself
237 ) *
239
240 // copy over information to rec hit structure in new collection
241 ldmx::EcalHit rec_hit;
242 rec_hit.setID(id.raw());
243 rec_hit.setXPos(x_);
244 rec_hit.setYPos(y_);
245 rec_hit.setZPos(z_);
246 rec_hit.setAmplitude(energy_deposited_in_si);
247 rec_hit.setEnergy(reconstructed_energy);
248 rec_hit.setTime(hit_time);
249
250 ecal_rec_hits.push_back(rec_hit);
251 }
252
254 // ecal sim hits_ exist ==> label which hits_ are real and which are pure
255 // noise
256 auto ecal_sim_hits{event.getCollection<ldmx::SimCalorimeterHit>(
258 std::set<int> real_hits;
259 for (auto const& sim_hit : ecal_sim_hits) real_hits.insert(sim_hit.getID());
260 for (auto& hit : ecal_rec_hits)
261 hit.setNoise(real_hits.find(hit.getID()) == real_hits.end());
262 }
263
264 // add collection to event bus
265 event.add(rec_hit_coll_name_, ecal_rec_hits);
266}
static const std::string CONDITIONS_NAME
the name of the EcalReconConditions table (must match python registration name)
bool exists(const std::string &name, const std::string &passName, bool unique=true) const
Check for the existence of an object or collection with the given name and pass name in the event.
Definition Event.cxx:107
void setYPos(float ypos)
Set the Y position of the hit [mm].
void setID(int id)
Set the detector ID.
void setZPos(float zpos)
Set the Z position of the hit [mm].
void setXPos(float xpos)
Set the X position of the hit [mm].
void setTime(float time)
Set the time of the hit [ns].
void setAmplitude(float amplitude)
Set the amplitude of the hit, which is proportional to the signal in the calorimeter cell without sam...
void setEnergy(float energy)
Set the calorimetric energy of the hit, corrected for sampling factors [MeV].
Stores reconstructed hit information from the ECAL.
Definition EcalHit.h:19
Extension of DetectorID providing access to ECal layers and cell numbers in a hex grid.
Definition EcalID.h:20
Represents a collection of the digi hits readout by an HGCROC.
unsigned int getSampleOfInterestIndex() const
Get index of sample of interest.
Fits a pulse shape to the ADC samples of a single readout channel to extract hit amplitude and time.
Definition PulseFitter.h:40
Stores simulated calorimeter hit information.

References ecal::EcalReconConditions::adcGain(), ecal::EcalReconConditions::adcPedestal(), amplitude_method_, charge_per_mip_, clock_cycle_, ecal::EcalReconConditions::CONDITIONS_NAME, ldmx::PulseFitter::FitResult::converged, digi_coll_name_, digi_pass_name_, framework::Event::exists(), ldmx::PulseFitter::fit(), fit_fixed_t0_, fit_n_samples_, fit_t0_offset_, ldmx::PulseFitter::fitFixed(), framework::EventProcessor::getCondition(), ldmx::HgcrocDigiCollection::getSampleOfInterestIndex(), layer_weights_, mip_si_energy_, phase_name_, phase_resolution_, pulse_shape_, rec_hit_coll_name_, second_order_energy_correction_, ldmx::CalorimeterHit::setAmplitude(), ldmx::CalorimeterHit::setEnergy(), ldmx::CalorimeterHit::setID(), ldmx::CalorimeterHit::setTime(), ldmx::CalorimeterHit::setXPos(), ldmx::CalorimeterHit::setYPos(), ldmx::CalorimeterHit::setZPos(), sim_hit_coll_name_, sim_hit_pass_name_, ecal::EcalReconConditions::totGain(), and ecal::EcalReconConditions::totPedestal().

Member Data Documentation

◆ amplitude_method_

std::string ecal::EcalRecProducer::amplitude_method_
private

ADC mode amplitude: soi, max or fit.

Definition at line 106 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ charge_per_mip_

double ecal::EcalRecProducer::charge_per_mip_
private

Number of electrons generated by average MIP in Si 0.5mm thick.

Definition at line 83 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ clock_cycle_

double ecal::EcalRecProducer::clock_cycle_
private

Length of clock cycle [ns].

Definition at line 80 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ digi_coll_name_

std::string ecal::EcalRecProducer::digi_coll_name_
private

Digi Collection Name to use as input.

Definition at line 62 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ digi_pass_name_

std::string ecal::EcalRecProducer::digi_pass_name_
private

Digi Pass Name to use as input.

Definition at line 65 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ fit_fixed_t0_

bool ecal::EcalRecProducer::fit_fixed_t0_
private

fit with t0 = event phase + offset, e.g. phase from HCal TOA

Definition at line 115 of file EcalRecProducer.h.

Referenced by configure(), onNewRun(), and produce().

◆ fit_n_samples_

int ecal::EcalRecProducer::fit_n_samples_
private

number of samples in the fit, starting one before the max, <= 0 for all

Definition at line 109 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ fit_t0_offset_

double ecal::EcalRecProducer::fit_t0_offset_
private

offset [ns] between the event phase and the pulse t0

Definition at line 118 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ layer_weights_

std::vector<double> ecal::EcalRecProducer::layer_weights_
private

Layer Weights to use for this reconstruction.

Layer weights account for the energy lost in the absorber directly in front of the Silicon layer where the measured energy was deposited. These are determined by calculating the average amount of energy lost by a MIP passing through the extra material between sensitive layers.

Definition at line 93 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ mip_si_energy_

double ecal::EcalRecProducer::mip_si_energy_
private

Energy [MeV] deposited by a MIP in Si 0.5mm thick.

Definition at line 77 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ phase_name_

std::string ecal::EcalRecProducer::phase_name_
private

event header float parameter holding the event phase [ns]

Definition at line 124 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ phase_resolution_

double ecal::EcalRecProducer::phase_resolution_
private

Gaussian smearing [ns] of the event phase.

Definition at line 121 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ pulse_shape_

std::unique_ptr<ldmx::HgcrocShape> ecal::EcalRecProducer::pulse_shape_
private

HGCROC pulse template, only for amplitude_method fit.

Definition at line 112 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ rec_hit_coll_name_

std::string ecal::EcalRecProducer::rec_hit_coll_name_
private

output hit collection name

Definition at line 74 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ rng_

std::mt19937 ecal::EcalRecProducer::rng_
private

Definition at line 126 of file EcalRecProducer.h.

◆ second_order_energy_correction_

double ecal::EcalRecProducer::second_order_energy_correction_
private

Second Order Energy Correction to use for this reconstruction.

This is a shift applied to all of the energies in order to have the mean of the total energy deposited in the ECal be accurate. This is less physically motivated than the layer weights and is more of a calibration number.

Definition at line 103 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ sim_hit_coll_name_

std::string ecal::EcalRecProducer::sim_hit_coll_name_
private

simhit collection name

Definition at line 68 of file EcalRecProducer.h.

Referenced by configure(), and produce().

◆ sim_hit_pass_name_

std::string ecal::EcalRecProducer::sim_hit_pass_name_
private

simhit pass name

Definition at line 71 of file EcalRecProducer.h.

Referenced by configure(), and produce().


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