19 std::string trig_collection_name_ =
"ecalTrigDigis";
20 std::string trig_pass_name_ =
"";
21 std::string hit_collection_name_ =
"EcalRecHits";
22 std::string hit_pass_name_ =
"";
23 double total_trigger_mean_ = 876.28120;
24 double total_ampl_mean_ = 48.805244;
26 double second_order_energy_correction_ = 4000. / 3940.5;
27 double mip_si_energy_ = 0.13;
28 std::vector<double> layer_weights_ = {
29 2.312, 4.312, 6.522, 7.490, 8.595, 10.253, 10.915, 10.915, 10.915,
30 10.915, 10.915, 10.915, 10.915, 10.915, 10.915, 10.915, 10.915, 10.915,
31 10.915, 10.915, 10.915, 10.915, 10.915, 14.783, 18.539, 18.539, 18.539,
32 18.539, 18.539, 18.539, 18.539, 18.539, 18.539, 9.938};
49 return (1 + layer_weights_[layer_] / mip_si_energy_) * amplitude *
50 second_order_energy_correction_;
89 std::vector<double> binsx = {0., 10., 20., 30., 40., 50., 60.,
90 70., 80., 90., 100., 110., 120., 130.,
91 140., 150., 300., 575., 1000.};
92 std::vector<double> binsy = {
93 0.6, 0.608, 0.616, 0.624, 0.632, 0.64, 0.648, 0.656, 0.664, 0.672,
94 0.68, 0.688, 0.696, 0.704, 0.712, 0.72, 0.728, 0.736, 0.744, 0.752,
95 0.76, 0.768, 0.776, 0.784, 0.792, 0.8, 0.808, 0.816, 0.824, 0.832,
96 0.84, 0.848, 0.856, 0.864, 0.872, 0.88, 0.888, 0.896, 0.904, 0.912,
97 0.92, 0.928, 0.936, 0.944, 0.952, 0.96, 0.968, 0.976, 0.984, 0.992,
98 1., 1.008, 1.016, 1.024, 1.032, 1.04, 1.048, 1.056, 1.064, 1.072,
99 1.08, 1.088, 1.096, 1.104, 1.112, 1.12, 1.128, 1.136, 1.144, 1.152,
100 1.16, 1.168, 1.176, 1.184, 1.192, 1.2, 1.208, 1.216, 1.224, 1.232,
101 1.24, 1.248, 1.256, 1.264, 1.272, 1.28, 1.288, 1.296, 1.304, 1.312,
102 1.32, 1.328, 1.336, 1.344, 1.352, 1.36, 1.368, 1.376, 1.384, 1.392,
104 std::vector<double> binsx_fin = {0., 10., 20., 30., 40., 50., 60., 70.,
105 80., 90., 100., 150., 300., 575., 1000.};
112 "total_trig_energy" ,
113 "Total of all Trig Digis [MeV]" ,
117 "Total of Precision Hit Amplitudes [MeV]", 100, 0, 8000);
119 1000, 0, 8000,
"Total of Precision Hit Amplitudes [MeV]",
130 0, 2000,
"Module-sum trigger [MeV]", 100, 0, 2000);
136 2500,
"Layer ampl total [MeV]", 100, 0, 2500);
138 100, 0, 1000,
"module_ trigger / module_ precision ampl",
141 "module_ precision trig sum [MeV]", 100, 0, 2000,
142 "module_ trigger / module_ precision ampl", 100, 0.4, 1.2);
144 "layer_ precision ampl sum [MeV]", 100, 0, 1000,
145 "layer_ trigger / layer_ precision ampl", 100, 0.4, 1.2);
147 100, 0, 8000,
"total trigger / total precision ampl", 100,
150 100, 0, 6000,
"Trigger / Full readout", 100, 0.95, 1.05);
156 "trigger group total precision hits_ [MeV]", 100, 0, 2000,
157 "trigger group trigger [MeV]", 100, 0, 8000);
159 "Trigger group full readout [MeV]", 100, 0, 1000,
160 "Trigger group ratio / nominal", 200, 0.6, 1.4);
162 "Trigger group full readout [MeV]", binsx,
163 "Trigger group ratio / nominal", binsy);
165 "unweighted trigger group total precision hits_ [MeV]",
167 "trigger group trigger / unweighted trigger group total "
168 "prec hits_ / nominal",
171 "Trigger group full readout [MeV]", binsx_fin,
172 "Trigger group ratio / nominal", binsy);
227 trig_collection_name_, trig_pass_name_);
230 event.getCollection<
ldmx::EcalHit>(hit_collection_name_, hit_pass_name_);
232 const ::ecal::EcalTriggerGeometry& geom =
234 ::ecal::EcalTriggerGeometry::CONDITIONS_OBJECT_NAME);
236 std::map<UniqueModule, std::pair<int, double>> module_sums;
237 int trig_prim_total{0};
238 int trig_prim_total_first20{0};
239 for (
const auto& trig : trigs) {
242 double trig_ampl = getEstimate(trig);
243 double trig_energy =
calculateEnergy(mod.layer_, trig_ampl) / nominal_;
246 if (module_sums.find(mod) == module_sums.end()) {
247 module_sums[mod] = {0, 0.0};
250 module_sums[mod].first += trig_energy;
251 trig_prim_total += trig_energy;
252 if (mod.layer_ <= 20) {
253 trig_prim_total_first20 += trig_energy;
258 double trig_group_prec_total{0};
259 double trig_group_prec_total_unweight{0};
260 for (
auto& prec_id : geom.contentsOfTriggerCell(tid)) {
261 for (
const auto& hit : hits) {
262 if (prec_id == hit.getID()) {
263 trig_group_prec_total +=
265 trig_group_prec_total_unweight += hit.getAmplitude();
273 double ratio_energy = trig_energy / trig_group_prec_total,
274 ratio_ampl = trig_ampl / trig_group_prec_total_unweight / nominal_;
278 trig_energy * nominal_);
281 histograms_.
fill(
"trig_group_ampl_v_ampl_varbin", trig_group_prec_total,
283 histograms_.
fill(
"trig_group_ampl_v_ampl_varbin_fin", trig_group_prec_total,
285 histograms_.
fill(
"trig_group_ampl_unweight", trig_group_prec_total_unweight,
289 double prec_ampl_total{0.};
290 double prec_ampl_total_first20{0.};
291 for (
const auto& hit : hits) {
292 EcalID id{
static_cast<unsigned int>(hit.getID())};
294 if (module_sums.find(mod) == module_sums.end()) {
295 module_sums[mod] = {0, 0.0};
298 module_sums[mod].second += prec_energy;
299 prec_ampl_total += prec_energy;
300 if (mod.layer_ <= 20) {
301 prec_ampl_total_first20 += prec_energy;
305 std::map<int, std::pair<int, double>> layer_sums;
306 for (
const auto& [unique_module, sum_pair] : module_sums) {
307 if (layer_sums.find(unique_module.layer_) == layer_sums.end()) {
309 layer_sums[unique_module.layer_] = {0, 0.0};
312 layer_sums[unique_module.layer_].first += sum_pair.first;
313 layer_sums[unique_module.layer_].second += sum_pair.second;
316 int layer_id_tmp = {0};
317 int module_id_tmp = {0};
318 for (
const auto& [mod_id, sum_pair] : module_sums) {
321 layer_id_tmp = mod_id.layer_;
322 module_id_tmp = mod_id.module_;
327 histograms_.
fill(
"trig_v_ampl_module", sum_pair.second, sum_pair.first);
329 sum_pair.first / sum_pair.second);
331 sum_pair.first / sum_pair.second);
334 for (
const auto& [layer_, layer_sum_pair] : layer_sums) {
338 layer_sum_pair.second);
340 layer_sum_pair.first / layer_sum_pair.second);
345 histograms_.
fill(
"total_trig_v_total_ampl", trig_prim_total, prec_ampl_total);
346 histograms_.
fill(
"trig_ampl_nominal", trig_prim_total / prec_ampl_total);
348 trig_prim_total / prec_ampl_total);
349 histograms_.
fill(
"trig_ampl_v_ampl_total_first20", prec_ampl_total_first20,
350 trig_prim_total_first20 / prec_ampl_total_first20);