10#include "trg/klm/modules/klmtrigger/ntuples_full.h"
13#include "trg/klm/modules/klmtrigger/klmtrgLayerCounter.h"
14#include "trg/klm/modules/klmtrigger/IO_csv.h"
15#include "trg/klm/modules/klmtrigger/bit_operations.h"
18#include <unordered_map>
26using namespace Belle2::KLM_TRG_definitions;
39 void klmtrgLayerCounter::clear_layersUsed()
44 void klmtrgLayerCounter::add_layersUsed(
int layersUsed)
46 m_layersUsed.emplace_back(layersUsed);
49 void klmtrgLayerCounter::set_NLayerTrigger(
int NlayerTrigger)
51 m_NlayerTrigger = NlayerTrigger;
54 void klmtrgLayerCounter::run(
const KLM_Digit_compact_ts& hits)
58 m_sections_trig.clear();
61 auto hits1 = nt::algorithms::join_vectors(
64 nt::comparators::on_common_args,
65 [&](
auto e1,
const auto&) {
66 e1.layer = e1.layer * 2 + e1.plane;
71 __CSV__WRITE__(hits1);
74 auto grouped = nt_group(
81 auto bit_mask = to_bit_mask(nt_span(e1, layer));
83 ax_maker(layer_count) = countBits(bit_mask),
84 ax_maker(layer_mask) = bit_mask
89 __CSV__WRITE__(grouped);
91 nt::algorithms::filter(grouped, [&](
const auto & e) {
return e.layer_count >= m_NlayerTrigger; });
97 m_sections_trig = nt_group(
98 grouped[0].subdetector,
102 [&](
const auto & e1) {
104 auto bit_mask = to_bit_mask(nt_span(e1, sector));
105 n_sections_trig nsector = countBits(bit_mask);
107 sector_mask(bit_mask),
113 __CSV__WRITE__(m_sections_trig);
117 m_summary1 = nt_group(
118 m_sections_trig[0].subdetector
121 [](
const auto & e1) {
122 auto bit_mask = countBits(to_bit_mask(nt_span(e1, section)));
123 n_sections_trig nsector = nt::algorithms::sum(e1, [](
auto&& e) {
return e.n_sections_trig; });
127 back2back(bit_mask == 2)
133 __CSV__WRITE__(m_summary1);
138 int klmtrgLayerCounter::get_n_sections_trig(
int subdetector)
140 for (
const auto& e : m_summary1) {
141 if (e.subdetector == subdetector) {
142 return e.n_sections_trig;
148 int klmtrgLayerCounter::get_triggermask(
int subdetector,
int section)
150 for (
const auto& e : m_sections_trig) {
151 if (e.subdetector == subdetector && e.section == section) {
152 return e.sector_mask;
158 int klmtrgLayerCounter::get_BKLM_back_to_back_flag(
int subdetector)
160 for (
const auto& e : m_summary1) {
161 if (e.subdetector == subdetector) {
Abstract base class for different kinds of events.