DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
include
triggeralgs
MichelElectron
TAMakerMichelElectronAlgorithm.hpp
Go to the documentation of this file.
1
8
9
#ifndef TRIGGERALGS_MICHELELECTRON_TRIGGERACTIVITYMAKERMICHELELECTRON_HPP_
10
#define TRIGGERALGS_MICHELELECTRON_TRIGGERACTIVITYMAKERMICHELELECTRON_HPP_
11
12
#include "
triggeralgs/TriggerActivityFactory.hpp
"
13
#include <fstream>
14
#include <vector>
15
16
namespace
triggeralgs
{
17
class
TAMakerMichelElectronAlgorithm
:
public
TriggerActivityMaker
18
{
19
20
public
:
21
void
process
(
const
TriggerPrimitive
& input_tp, std::vector<TriggerActivity>& output_ta);
22
23
void
configure
(
const
nlohmann::json& config);
24
25
private
:
26
class
Window
27
{
28
public
:
29
bool
is_empty
()
const
{
return
inputs
.empty(); };
30
void
add
(
TriggerPrimitive
const
& input_tp)
31
{
32
// Add the input TP's contribution to the total ADC, increase hit channel's hit count and add it to the TP list.
33
adc_integral
+= input_tp.
adc_integral
;
34
channel_states
[input_tp.
channel
]++;
35
inputs
.push_back(input_tp);
36
};
37
void
clear
() {
inputs
.clear(); };
38
uint16_t
n_channels_hit
() {
return
channel_states
.size(); };
39
void
move
(
TriggerPrimitive
const
& input_tp,
timestamp_t
const
& window_length)
40
{
41
// Find all of the TPs in the window that need to be removed
42
// if the input_tp is to be added and the size of the window
43
// is to be conserved.
44
// Substract those TPs' contribution from the total window ADC and remove their
45
// contributions to the hit counts.
46
uint32_t n_tps_to_erase = 0;
47
for
(
auto
tp :
inputs
) {
48
if
(!(input_tp.
time_start
- tp.time_start < window_length)) {
49
n_tps_to_erase++;
50
adc_integral
-= tp.adc_integral;
51
channel_states
[tp.channel]--;
52
// If a TP being removed from the window results in a channel no longer having
53
// any hits, remove from the states map so map.size() can be used for number
54
// channels hit.
55
if
(
channel_states
[tp.channel] == 0)
56
channel_states
.erase(tp.channel);
57
}
else
58
break
;
59
}
60
// Erase the TPs from the window.
61
inputs
.erase(
inputs
.begin(),
inputs
.begin() + n_tps_to_erase);
62
// Make the window start time the start time of what is now the first TP.
63
64
if
(!(
inputs
.size() == 0)) {
65
time_start
=
inputs
.front().time_start;
66
add
(input_tp);
67
}
else
{
68
// std::cout << "Resetting window." << std::endl;
69
reset
(input_tp);
70
}
71
};
72
void
reset
(
TriggerPrimitive
const
& input_tp)
73
{
74
75
// Empty the channel and TP lists.
76
channel_states
.clear();
77
inputs
.clear();
78
// Set the start time of the window to be the start time of theinput_tp.
79
time_start
= input_tp.
time_start
;
80
// Start the total ADC integral.
81
adc_integral
= input_tp.
adc_integral
;
82
// Start hit count for the hit channel.
83
channel_states
[input_tp.
channel
]++;
84
// Add the input TP to the TP list.
85
inputs
.push_back(input_tp);
86
// std::cout << "Number of channels hit: " << n_channels_hit() << std::endl;
87
};
88
friend
std::ostream&
operator<<
(std::ostream& os,
const
Window
& window)
89
{
90
if
(window.
is_empty
())
91
os <<
"Window is empty!\n"
;
92
else
{
93
os <<
"Window start: "
<< window.
time_start
<<
", end: "
<< window.
inputs
.back().time_start;
94
os <<
". Total of: "
<< window.
adc_integral
<<
" ADC counts with "
<< window.
inputs
.size() <<
" TPs.\n"
;
95
os << window.
channel_states
.size() <<
" independent channels have hits.\n"
;
96
}
97
return
os;
98
};
99
100
timestamp_t
time_start
;
101
uint32_t
adc_integral
;
102
std::unordered_map<channel_t, uint16_t>
channel_states
;
103
std::vector<TriggerPrimitive>
inputs
;
104
};
105
106
TriggerActivity
construct_ta
()
const
;
107
std::vector<TriggerPrimitive>
longest_activity
()
const
;
108
bool
check_bragg_peak
(std::vector<TriggerPrimitive> trackHits);
109
bool
check_kinks
(std::vector<TriggerPrimitive> trackHits);
110
111
Window
m_current_window
;
112
uint64_t
m_primitive_count
= 0;
113
114
// Configurable parameters.
115
// triggeractivitymakerhorizontalmuon::ConfParams m_conf;
116
bool
debug
=
false
;
// Use to control whether functions write out useful info
117
uint16_t
m_adjacency_threshold
= 15;
// Default is 15 for trigger
118
int
m_max_adjacency
= 0;
// The maximum adjacency seen so far in any window
119
uint16_t
m_adj_tolerance
= 3;
// Adjacency tolerance - default is 3 from coldbox testing.
120
int
index
= 0;
121
uint16_t
ta_adc
= 0;
122
uint16_t
ta_channels
= 0;
123
timestamp_t
m_window_length
= 50000;
124
125
// For debugging purposes.
126
void
add_window_to_record
(
Window
window);
127
void
dump_window_record
();
128
void
dump_tp
(
TriggerPrimitive
const
& input_tp);
129
std::vector<Window>
m_window_record
;
130
};
131
}
// namespace triggeralgs
132
133
#endif
// TRIGGERALGS_MICHELELECTRON_TRIGGERACTIVITYMAKERMICHELELECTRON_HPP_
TriggerActivityFactory.hpp
triggeralgs::TAMakerMichelElectronAlgorithm::Window
Definition
TAMakerMichelElectronAlgorithm.hpp:27
triggeralgs::TAMakerMichelElectronAlgorithm::Window::add
void add(TriggerPrimitive const &input_tp)
Definition
TAMakerMichelElectronAlgorithm.hpp:30
triggeralgs::TAMakerMichelElectronAlgorithm::Window::clear
void clear()
Definition
TAMakerMichelElectronAlgorithm.hpp:37
triggeralgs::TAMakerMichelElectronAlgorithm::Window::adc_integral
uint32_t adc_integral
Definition
TAMakerMichelElectronAlgorithm.hpp:101
triggeralgs::TAMakerMichelElectronAlgorithm::Window::channel_states
std::unordered_map< channel_t, uint16_t > channel_states
Definition
TAMakerMichelElectronAlgorithm.hpp:102
triggeralgs::TAMakerMichelElectronAlgorithm::Window::is_empty
bool is_empty() const
Definition
TAMakerMichelElectronAlgorithm.hpp:29
triggeralgs::TAMakerMichelElectronAlgorithm::Window::reset
void reset(TriggerPrimitive const &input_tp)
Definition
TAMakerMichelElectronAlgorithm.hpp:72
triggeralgs::TAMakerMichelElectronAlgorithm::Window::time_start
timestamp_t time_start
Definition
TAMakerMichelElectronAlgorithm.hpp:100
triggeralgs::TAMakerMichelElectronAlgorithm::Window::operator<<
friend std::ostream & operator<<(std::ostream &os, const Window &window)
Definition
TAMakerMichelElectronAlgorithm.hpp:88
triggeralgs::TAMakerMichelElectronAlgorithm::Window::inputs
std::vector< TriggerPrimitive > inputs
Definition
TAMakerMichelElectronAlgorithm.hpp:103
triggeralgs::TAMakerMichelElectronAlgorithm::Window::n_channels_hit
uint16_t n_channels_hit()
Definition
TAMakerMichelElectronAlgorithm.hpp:38
triggeralgs::TAMakerMichelElectronAlgorithm::Window::move
void move(TriggerPrimitive const &input_tp, timestamp_t const &window_length)
Definition
TAMakerMichelElectronAlgorithm.hpp:39
triggeralgs::TAMakerMichelElectronAlgorithm
Definition
TAMakerMichelElectronAlgorithm.hpp:18
triggeralgs::TAMakerMichelElectronAlgorithm::longest_activity
std::vector< TriggerPrimitive > longest_activity() const
Definition
TAMakerMichelElectronAlgorithm.cpp:107
triggeralgs::TAMakerMichelElectronAlgorithm::ta_adc
uint16_t ta_adc
Definition
TAMakerMichelElectronAlgorithm.hpp:121
triggeralgs::TAMakerMichelElectronAlgorithm::m_current_window
Window m_current_window
Definition
TAMakerMichelElectronAlgorithm.hpp:111
triggeralgs::TAMakerMichelElectronAlgorithm::check_kinks
bool check_kinks(std::vector< TriggerPrimitive > trackHits)
Definition
TAMakerMichelElectronAlgorithm.cpp:239
triggeralgs::TAMakerMichelElectronAlgorithm::ta_channels
uint16_t ta_channels
Definition
TAMakerMichelElectronAlgorithm.hpp:122
triggeralgs::TAMakerMichelElectronAlgorithm::m_window_record
std::vector< Window > m_window_record
Definition
TAMakerMichelElectronAlgorithm.hpp:129
triggeralgs::TAMakerMichelElectronAlgorithm::m_adjacency_threshold
uint16_t m_adjacency_threshold
Definition
TAMakerMichelElectronAlgorithm.hpp:117
triggeralgs::TAMakerMichelElectronAlgorithm::index
int index
Definition
TAMakerMichelElectronAlgorithm.hpp:120
triggeralgs::TAMakerMichelElectronAlgorithm::construct_ta
TriggerActivity construct_ta() const
Definition
TAMakerMichelElectronAlgorithm.cpp:83
triggeralgs::TAMakerMichelElectronAlgorithm::m_adj_tolerance
uint16_t m_adj_tolerance
Definition
TAMakerMichelElectronAlgorithm.hpp:119
triggeralgs::TAMakerMichelElectronAlgorithm::check_bragg_peak
bool check_bragg_peak(std::vector< TriggerPrimitive > trackHits)
Definition
TAMakerMichelElectronAlgorithm.cpp:193
triggeralgs::TAMakerMichelElectronAlgorithm::m_primitive_count
uint64_t m_primitive_count
Definition
TAMakerMichelElectronAlgorithm.hpp:112
triggeralgs::TAMakerMichelElectronAlgorithm::add_window_to_record
void add_window_to_record(Window window)
Definition
TAMakerMichelElectronAlgorithm.cpp:304
triggeralgs::TAMakerMichelElectronAlgorithm::configure
void configure(const nlohmann::json &config)
Definition
TAMakerMichelElectronAlgorithm.cpp:66
triggeralgs::TAMakerMichelElectronAlgorithm::dump_tp
void dump_tp(TriggerPrimitive const &input_tp)
Definition
TAMakerMichelElectronAlgorithm.cpp:340
triggeralgs::TAMakerMichelElectronAlgorithm::m_window_length
timestamp_t m_window_length
Definition
TAMakerMichelElectronAlgorithm.hpp:123
triggeralgs::TAMakerMichelElectronAlgorithm::m_max_adjacency
int m_max_adjacency
Definition
TAMakerMichelElectronAlgorithm.hpp:118
triggeralgs::TAMakerMichelElectronAlgorithm::dump_window_record
void dump_window_record()
Definition
TAMakerMichelElectronAlgorithm.cpp:313
triggeralgs::TAMakerMichelElectronAlgorithm::debug
bool debug
Definition
TAMakerMichelElectronAlgorithm.hpp:116
triggeralgs::TAMakerMichelElectronAlgorithm::process
void process(const TriggerPrimitive &input_tp, std::vector< TriggerActivity > &output_ta)
TP processing function that creates & fills TAs.
Definition
TAMakerMichelElectronAlgorithm.cpp:20
triggeralgs::TriggerActivityMaker
Definition
TriggerActivityMaker.hpp:29
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::timestamp_t
dunedaq::trgdataformats::timestamp_t timestamp_t
Definition
Types.hpp:16
triggeralgs::TriggerPrimitive
dunedaq::trgdataformats::TriggerPrimitive TriggerPrimitive
Definition
TriggerPrimitive.hpp:22
dunedaq::trgdataformats::TriggerPrimitive::channel
uint64_t channel
Definition
TriggerPrimitive.hpp:36
dunedaq::trgdataformats::TriggerPrimitive::time_start
uint64_t time_start
Definition
TriggerPrimitive.hpp:39
dunedaq::trgdataformats::TriggerPrimitive::adc_integral
uint64_t adc_integral
Definition
TriggerPrimitive.hpp:42
triggeralgs::TriggerActivity
Definition
TriggerActivity.hpp:20
Generated on
for DUNE-DAQ by
1.17.0