18 if (!event.
exists(tp_coll_name_, tp_coll_event_passname_))
return;
19 auto ecal_trig_digis{
event.getObject<ldmx::HgcrocTrigDigiCollection>(
20 tp_coll_name_, tp_coll_passname_)};
22 std::map<int, ldmx::HgcrocTrigDigiCollection> l_digis;
23 std::map<int, ldmx::HgcrocTrigDigiCollection> r_digis;
24 std::map<int, ldmx::HgcrocTrigDigiCollection> c_digis;
25 std::map<int, int> l_sums;
26 std::map<int, int> r_sums;
27 std::map<int, int> c_sums;
28 for (
const auto& trig_digi : ecal_trig_digis) {
31 int layer = tid.
layer();
33 auto ptr = l_digis.find(layer);
34 if (ptr == l_digis.end()) {
35 l_digis[layer] = {trig_digi};
36 l_sums[layer] = trig_digi.linearPrimitive();
38 l_digis[layer].push_back(trig_digi);
39 l_sums[layer] += trig_digi.linearPrimitive();
41 }
else if (module > 0) {
42 auto ptr = r_digis.find(layer);
43 if (ptr == r_digis.end()) {
44 r_digis[layer] = {trig_digi};
45 r_sums[layer] = trig_digi.linearPrimitive();
47 r_digis[layer].push_back(trig_digi);
48 r_sums[layer] += trig_digi.linearPrimitive();
51 auto ptr = c_digis.find(layer);
52 if (ptr == c_digis.end()) {
53 c_digis[layer] = {trig_digi};
54 c_sums[layer] = trig_digi.linearPrimitive();
56 c_digis[layer].push_back(trig_digi);
57 c_sums[layer] += trig_digi.linearPrimitive();
65 ldmx::HgcrocTrigDigiCollection pass_t_ps;
66 pass_t_ps.reserve(ecal_trig_digis.size());
67 for (
auto& pair : l_digis) {
68 auto& digis = pair.second;
69 if (digis.size() > max_outer_t_ps_) {
70 std::sort(digis.begin(), digis.end(),
72 return a.getId() > b.getId();
74 digis.resize(max_central_t_ps_);
76 pass_t_ps.insert(pass_t_ps.end(), digis.begin(), digis.end());
78 for (
auto& pair : r_digis) {
79 auto& digis = pair.second;
80 if (digis.size() > max_outer_t_ps_) {
81 std::sort(digis.begin(), digis.end(),
83 return a.getId() > b.getId();
85 digis.resize(max_central_t_ps_);
87 pass_t_ps.insert(pass_t_ps.end(), digis.begin(), digis.end());
90 for (
auto& pair : c_digis) {
91 auto& digis = pair.second;
92 if (digis.size() > max_central_t_ps_) {
93 std::sort(digis.begin(), digis.end(),
95 return a.getPrimitive() > b.getPrimitive();
97 digis.resize(max_central_t_ps_);
99 pass_t_ps.insert(pass_t_ps.end(), digis.begin(), digis.end());
103 std::vector<TrigCaloHit> pass_trig_hits;
104 for (
const auto& tp : pass_t_ps) {
106 decodeTP(tp, x, y, z, e);
107 pass_trig_hits.emplace_back(x, y, z, e);
110 pass_trig_hits.back().setLayer(tid.
layer());
111 pass_trig_hits.back().setModule(tid.
module());
114 TrigEnergySumCollection pass_trig_sums;
116 for (
auto& pair : l_sums) {
117 double e = cvt.calc(pair.second, pair.first);
119 pass_trig_sums.emplace_back(pair.first, 4, e);
121 for (
auto& pair : r_sums) {
122 double e = cvt.calc(pair.second, pair.first);
124 pass_trig_sums.emplace_back(pair.first, 1, e);
126 for (
auto& pair : c_sums) {
127 double e = cvt.calc(pair.second, pair.first);
129 pass_trig_sums.emplace_back(pair.first, 0, e);
132 event.add(pass_coll_name_ +
"Hits", pass_trig_hits);
133 event.add(pass_coll_name_ +
"Sums", pass_trig_sums);