Process the event and put new data products into it.
14 {
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 if (!event.
exists(quad_coll_name_, in_proc_)) {
43
44
45
46 return;
47 }
48
49
50
51 const std::vector<ldmx::CaloTrigPrim> one_ended_quads =
53
54
55
56 std::map<int, ldmx::CaloTrigPrim> two_ended_quad_map;
57 for (const auto& one_ended_quad : one_ended_quads) {
60 end_id.superstrip(), 2);
61 auto ptr = two_ended_quad_map.find(combo_id.raw());
62 if (ptr == two_ended_quad_map.end()) {
63 two_ended_quad_map[combo_id.raw()] = one_ended_quad;
64 } else {
65 ptr->second.setPrimitive(ptr->second.getPrimitive() +
66 one_ended_quad.getPrimitive());
67 }
68 }
69 ldmx::CaloTrigPrimCollection two_ended_quads;
70 for (auto p : two_ended_quad_map) two_ended_quads.push_back(p.second);
71 event.add(combined_quad_coll_name_, two_ended_quads);
72
73
74
75 const unsigned int layer_max = 50;
76 const unsigned int side_layer_max = 16;
77 trigger::TrigEnergySumCollection back_layer_sums;
78 trigger::TrigEnergySumCollection side_layer_sums;
79 back_layer_sums.resize(layer_max);
80 for (int i = 0; i < layer_max; i++) back_layer_sums[i].setLayer(i);
81 side_layer_sums.resize(side_layer_max);
82 for (int i = 0; i < side_layer_max; i++) side_layer_sums[i].setLayer(i);
83
84 int total_adc = 0;
85 std::map<int, int> section_sum;
86 for (auto p : two_ended_quad_map) {
87 auto tp = p.second;
88 int adc = tp.getPrimitive();
89 total_adc += adc;
91 int ilayer = combo_id.layer();
92 if (ilayer >= back_layer_sums.size()) {
93 std::cout << "[TrigHcalEnergySum.cxx] Warning(!), layer " << ilayer
94 << " is out-of-bounds.\n";
95 continue;
96 }
97 int isec = combo_id.section();
98
99 if (isec == 0)
100 back_layer_sums[ilayer].setHwEnergy(adc +
101 back_layer_sums[ilayer].hwEnergy());
102 else
103 side_layer_sums[ilayer].setHwEnergy(adc +
104 side_layer_sums[ilayer].hwEnergy());
105
106 auto ptr = section_sum.find(isec);
107 if (ptr == section_sum.end()) {
108 section_sum[isec] = adc;
109 } else {
110 section_sum[isec] += adc;
111 }
112 }
113 event.add(combined_quad_coll_name_ + "BackLayerSums", back_layer_sums);
114 event.add(combined_quad_coll_name_ + "SideLayerSums", side_layer_sums);
115
116 trigger::TrigEnergySumCollection section_sums;
117 for (auto p : section_sum) {
118 section_sums.emplace_back(-1, p.first, p.second);
119 }
120 event.add(combined_quad_coll_name_ + "SectionSums", section_sums);
121
122
124 total_sum.setLayer(-1);
125 total_sum.setHwEnergy(total_adc);
126 event.add(combined_quad_coll_name_ + "Sum", total_sum);
127}
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.
Contains the trigger output for generic calo objects.
Extension of DetectorID providing access to HCal trigger cell.
Contains the trigger output for generic calo objects.