18 std::string trig_collection_name_ =
"ecalTrigDigis";
19 std::string trig_pass_name_ =
"";
20 std::string hit_collection_name_ =
"EcalRecHits";
21 std::string hit_pass_name_ =
"";
22 double total_trigger_mean_ = 876.28120;
23 double total_ampl_mean_ = 48.805244;
25 double secondOrderEnergyCorrection_ = 4000. / 3940.5;
26 double mip_si_energy_ = 0.13;
27 std::vector<double> layerWeights_ = {
28 2.312, 4.312, 6.522, 7.490, 8.595, 10.253, 10.915, 10.915, 10.915,
29 10.915, 10.915, 10.915, 10.915, 10.915, 10.915, 10.915, 10.915, 10.915,
30 10.915, 10.915, 10.915, 10.915, 10.915, 14.783, 18.539, 18.539, 18.539,
31 18.539, 18.539, 18.539, 18.539, 18.539, 18.539, 9.938};
48 return (1 + layerWeights_[layer] / mip_si_energy_) * amplitude *
49 secondOrderEnergyCorrection_;
88 std::vector<double> binsx = {0., 10., 20., 30., 40., 50., 60.,
89 70., 80., 90., 100., 110., 120., 130.,
90 140., 150., 300., 575., 1000.};
91 std::vector<double> binsy = {
92 0.6, 0.608, 0.616, 0.624, 0.632, 0.64, 0.648, 0.656, 0.664, 0.672,
93 0.68, 0.688, 0.696, 0.704, 0.712, 0.72, 0.728, 0.736, 0.744, 0.752,
94 0.76, 0.768, 0.776, 0.784, 0.792, 0.8, 0.808, 0.816, 0.824, 0.832,
95 0.84, 0.848, 0.856, 0.864, 0.872, 0.88, 0.888, 0.896, 0.904, 0.912,
96 0.92, 0.928, 0.936, 0.944, 0.952, 0.96, 0.968, 0.976, 0.984, 0.992,
97 1., 1.008, 1.016, 1.024, 1.032, 1.04, 1.048, 1.056, 1.064, 1.072,
98 1.08, 1.088, 1.096, 1.104, 1.112, 1.12, 1.128, 1.136, 1.144, 1.152,
99 1.16, 1.168, 1.176, 1.184, 1.192, 1.2, 1.208, 1.216, 1.224, 1.232,
100 1.24, 1.248, 1.256, 1.264, 1.272, 1.28, 1.288, 1.296, 1.304, 1.312,
101 1.32, 1.328, 1.336, 1.344, 1.352, 1.36, 1.368, 1.376, 1.384, 1.392,
103 std::vector<double> binsx_fin = {0., 10., 20., 30., 40., 50., 60., 70.,
104 80., 90., 100., 150., 300., 575., 1000.};
111 "total_trig_energy" ,
112 "Total of all Trig Digis [MeV]" ,
116 "Total of Precision Hit Amplitudes [MeV]", 100, 0, 8000);
118 1000, 0, 8000,
"Total of Precision Hit Amplitudes [MeV]",
129 0, 2000,
"Module-sum trigger [MeV]", 100, 0, 2000);
135 2500,
"Layer ampl total [MeV]", 100, 0, 2500);
137 0, 1000,
"module trigger / module precision ampl", 100,
140 "module precision trig sum [MeV]", 100, 0, 2000,
141 "module trigger / module precision ampl", 100, 0.4, 1.2);
143 100, 0, 1000,
"layer trigger / layer precision ampl", 100,
146 100, 0, 8000,
"total trigger / total precision ampl", 100,
149 100, 0, 6000,
"Trigger / Full readout", 100, 0.95, 1.05);
155 "trigger group total precision hits [MeV]", 100, 0, 2000,
156 "trigger group trigger [MeV]", 100, 0, 8000);
158 "Trigger group full readout [MeV]", 100, 0, 1000,
159 "Trigger group ratio / nominal", 200, 0.6, 1.4);
161 "Trigger group full readout [MeV]", binsx,
162 "Trigger group ratio / nominal", binsy);
164 "unweighted trigger group total precision hits [MeV]", 100,
166 "trigger group trigger / unweighted trigger group total "
167 "prec hits / nominal",
170 "Trigger group full readout [MeV]", binsx_fin,
171 "Trigger group ratio / nominal", binsy);
226 trig_collection_name_, trig_pass_name_);
229 event.getCollection<
ldmx::EcalHit>(hit_collection_name_, hit_pass_name_);
231 const ::ecal::EcalTriggerGeometry& geom =
232 getCondition<::ecal::EcalTriggerGeometry>(
233 ::ecal::EcalTriggerGeometry::CONDITIONS_OBJECT_NAME);
235 std::map<UniqueModule, std::pair<int, double>> module_sums;
236 int trig_prim_total{0};
237 int trig_prim_total_first20{0};
238 for (
const auto& trig : trigs) {
241 double trig_ampl = get_estimate(trig);
245 if (module_sums.find(mod) == module_sums.end()) {
246 module_sums[mod] = {0, 0.0};
249 module_sums[mod].first += trig_energy;
250 trig_prim_total += trig_energy;
251 if (mod.layer_ <= 20) {
252 trig_prim_total_first20 += trig_energy;
257 double trig_group_prec_total{0};
258 double trig_group_prec_total_unweight{0};
259 for (
auto& prec_id : geom.contentsOfTriggerCell(tid)) {
260 for (
const auto& hit : hits) {
261 if (prec_id == hit.getID()) {
262 trig_group_prec_total +=
264 trig_group_prec_total_unweight += hit.getAmplitude();
272 double ratio_energy = trig_energy / trig_group_prec_total,
273 ratio_ampl = trig_ampl / trig_group_prec_total_unweight / nominal_;
277 trig_energy * nominal_);
280 histograms_.
fill(
"trig_group_ampl_v_ampl_varbin", trig_group_prec_total,
282 histograms_.
fill(
"trig_group_ampl_v_ampl_varbin_fin", trig_group_prec_total,
284 histograms_.
fill(
"trig_group_ampl_unweight", trig_group_prec_total_unweight,
288 double prec_ampl_total{0.};
289 double prec_ampl_total_first20{0.};
290 for (
const auto& hit : hits) {
291 EcalID id{
static_cast<unsigned int>(hit.getID())};
293 if (module_sums.find(mod) == module_sums.end()) {
294 module_sums[mod] = {0, 0.0};
297 module_sums[mod].second += prec_energy;
298 prec_ampl_total += prec_energy;
299 if (mod.layer_ <= 20) {
300 prec_ampl_total_first20 += prec_energy;
304 std::map<int, std::pair<int, double>> layer_sums;
305 for (
const auto& [unique_module, sum_pair] : module_sums) {
306 if (layer_sums.find(unique_module.layer_) == layer_sums.end()) {
308 layer_sums[unique_module.layer_] = {0, 0.0};
311 layer_sums[unique_module.layer_].first += sum_pair.first;
312 layer_sums[unique_module.layer_].second += sum_pair.second;
315 int layer_id_tmp = {0};
316 int module_id_tmp = {0};
317 for (
const auto& [mod_id, sum_pair] : module_sums) {
320 layer_id_tmp = mod_id.layer_;
321 module_id_tmp = mod_id.module_;
326 histograms_.
fill(
"trig_v_ampl_module", sum_pair.second, sum_pair.first);
328 sum_pair.first / sum_pair.second);
330 sum_pair.first / sum_pair.second);
333 for (
const auto& [layer, layer_sum_pair] : layer_sums) {
337 layer_sum_pair.second);
339 layer_sum_pair.first / layer_sum_pair.second);
344 histograms_.
fill(
"total_trig_v_total_ampl", trig_prim_total, prec_ampl_total);
345 histograms_.
fill(
"trig_ampl_nominal", trig_prim_total / prec_ampl_total);
347 trig_prim_total / prec_ampl_total);
348 histograms_.
fill(
"trig_ampl_v_ampl_total_first20", prec_ampl_total_first20,
349 trig_prim_total_first20 / prec_ampl_total_first20);