13 if (!event.
exists(tp_coll_name_, tp_coll_event_passname_))
return;
14 auto ecal_trig_digis{
event.getObject<ldmx::HgcrocTrigDigiCollection>(
15 tp_coll_name_, tp_coll_passname_)};
17 std::map<int, ldmx::HgcrocTrigDigiCollection> l_digis;
18 std::map<int, ldmx::HgcrocTrigDigiCollection> r_digis;
19 std::map<int, ldmx::HgcrocTrigDigiCollection> c_digis;
20 std::map<int, int> l_sums;
21 std::map<int, int> r_sums;
22 std::map<int, int> c_sums;
23 for (
const auto& trig_digi : ecal_trig_digis) {
26 int layer = tid.
layer();
28 auto ptr = l_digis.find(layer);
29 if (ptr == l_digis.end()) {
30 l_digis[layer] = {trig_digi};
31 l_sums[layer] = trig_digi.linearPrimitive();
33 l_digis[layer].push_back(trig_digi);
34 l_sums[layer] += trig_digi.linearPrimitive();
36 }
else if (module > 0) {
37 auto ptr = r_digis.find(layer);
38 if (ptr == r_digis.end()) {
39 r_digis[layer] = {trig_digi};
40 r_sums[layer] = trig_digi.linearPrimitive();
42 r_digis[layer].push_back(trig_digi);
43 r_sums[layer] += trig_digi.linearPrimitive();
46 auto ptr = c_digis.find(layer);
47 if (ptr == c_digis.end()) {
48 c_digis[layer] = {trig_digi};
49 c_sums[layer] = trig_digi.linearPrimitive();
51 c_digis[layer].push_back(trig_digi);
52 c_sums[layer] += trig_digi.linearPrimitive();
60 ldmx::HgcrocTrigDigiCollection pass_t_ps;
61 pass_t_ps.reserve(ecal_trig_digis.size());
62 for (
auto& pair : l_digis) {
63 auto& digis = pair.second;
64 if (digis.size() > max_outer_t_ps_) {
65 std::sort(digis.begin(), digis.end(),
67 return a.getId() > b.getId();
69 digis.resize(max_central_t_ps_);
71 pass_t_ps.insert(pass_t_ps.end(), digis.begin(), digis.end());
73 for (
auto& pair : r_digis) {
74 auto& digis = pair.second;
75 if (digis.size() > max_outer_t_ps_) {
76 std::sort(digis.begin(), digis.end(),
78 return a.getId() > b.getId();
80 digis.resize(max_central_t_ps_);
82 pass_t_ps.insert(pass_t_ps.end(), digis.begin(), digis.end());
85 for (
auto& pair : c_digis) {
86 auto& digis = pair.second;
87 if (digis.size() > max_central_t_ps_) {
88 std::sort(digis.begin(), digis.end(),
90 return a.getPrimitive() > b.getPrimitive();
92 digis.resize(max_central_t_ps_);
94 pass_t_ps.insert(pass_t_ps.end(), digis.begin(), digis.end());
98 std::vector<TrigCaloHit> pass_trig_hits;
99 for (
const auto& tp : pass_t_ps) {
101 decodeTP(tp, x, y, z, e);
102 pass_trig_hits.emplace_back(x, y, z, e);
105 pass_trig_hits.back().setLayer(tid.
layer());
106 pass_trig_hits.back().setModule(tid.
module());
109 TrigEnergySumCollection pass_trig_sums;
111 for (
auto& pair : l_sums) {
112 double e = cvt.calc(pair.second, pair.first);
114 pass_trig_sums.emplace_back(pair.first, 4, e);
116 for (
auto& pair : r_sums) {
117 double e = cvt.calc(pair.second, pair.first);
119 pass_trig_sums.emplace_back(pair.first, 1, e);
121 for (
auto& pair : c_sums) {
122 double e = cvt.calc(pair.second, pair.first);
124 pass_trig_sums.emplace_back(pair.first, 0, e);
127 event.add(pass_coll_name_ +
"Hits", pass_trig_hits);
128 event.add(pass_coll_name_ +
"Sums", pass_trig_sums);