DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
src
TAMakerDBSCANAlgorithm.cpp
Go to the documentation of this file.
1
8
9
#include "
triggeralgs/dbscan/TAMakerDBSCANAlgorithm.hpp
"
10
#include "
dbscan/Point.hpp
"
11
12
#include "TRACE/trace.h"
13
#include "
triggeralgs/Types.hpp
"
14
#include <chrono>
15
#include <limits>
16
#define TRACE_NAME "TAMakerDBSCANAlgorithm"
17
18
#include <vector>
19
20
using namespace
triggeralgs
;
21
22
using
Logging::TLVL_DEBUG_LOW
;
23
24
void
25
TAMakerDBSCANAlgorithm::process
(
const
TriggerPrimitive
& input_tp, std::vector<TriggerActivity>& output_ta)
26
{
27
if
(input_tp.
time_start
<
m_prev_timestamp
){
28
TLOG_DEBUG
(
TLVL_DEBUG_LOW
) <<
"[TAM:DBS] Out-of-order TPs: prev "
<<
m_prev_timestamp
<<
", current "
<< input_tp.
time_start
;
29
return
;
30
}
31
32
m_dbscan_clusters
.clear();
33
m_dbscan
->add_primitive(input_tp, &
m_dbscan_clusters
);
34
35
uint64_t t0=
m_dbscan
->get_first_prim_time();
36
37
for
(
auto
const
& cluster :
m_dbscan_clusters
){
38
auto
& ta=output_ta.emplace_back();
39
40
ta.time_start = std::numeric_limits<timestamp_t>::max();
41
ta.time_end = 0;
42
ta.channel_start = std::numeric_limits<channel_t>::max();
43
ta.channel_end = 0;
44
ta.adc_integral = 0;
45
46
for
(
auto
const
& hit : cluster.hits){
47
auto
const
& prim=hit->primitive;
48
49
ta.inputs.push_back(prim);
50
51
ta.time_start = std::min(prim.time_start, ta.time_start);
52
ta.time_end = std::max(prim.time_start + prim.samples_over_threshold * 32, ta.time_end);
// FIXME: Replace the hard-coded SOT to TOT scaling.
53
54
ta.channel_start = std::min(
channel_t
(prim.channel), ta.channel_start);
55
ta.channel_end = std::max(
channel_t
(prim.channel), ta.channel_end);
56
57
ta.adc_integral += prim.adc_integral;
58
59
ta.detid = prim.detid;
60
if
(prim.adc_peak > ta.adc_peak) {
61
ta.adc_peak = prim.adc_peak;
62
ta.channel_peak = prim.channel;
63
ta.time_peak = prim.samples_to_peak * 32 + prim.time_start;
// FIXME: Replace hard-coded STP to `time_peak` conversion.
64
}
65
}
66
ta.time_activity = ta.time_peak;
67
68
ta.type =
TriggerActivity::Type::kTPC
;
69
ta.algorithm =
TriggerActivity::Algorithm::kDBSCAN
;
70
}
71
72
m_dbscan
->trim_hits();
73
}
74
75
void
76
TAMakerDBSCANAlgorithm::configure
(
const
nlohmann::json& config)
77
{
78
TriggerActivityMaker::configure
(config);
79
80
if
(config.is_object())
81
{
82
if
(config.contains(
"min_pts"
))
83
m_min_pts
= config[
"min_pts"
];
84
if
(config.contains(
"eps"
))
85
m_eps
= config[
"eps"
];
86
}
87
m_dbscan
=std::make_unique<dbscan::IncrementalDBSCAN>(
m_eps
,
m_min_pts
, 10000);
88
}
89
90
// Register algo in TA Factory
91
REGISTER_TRIGGER_ACTIVITY_MAKER
(
TRACE_NAME
,
TAMakerDBSCANAlgorithm
)
Point.hpp
TRACE_NAME
#define TRACE_NAME
Definition
TimestampEstimatorTimeSync.cpp:17
REGISTER_TRIGGER_ACTIVITY_MAKER
#define REGISTER_TRIGGER_ACTIVITY_MAKER(tam_name, tam_class)
Definition
TriggerActivityFactory.hpp:14
triggeralgs::TAMakerDBSCANAlgorithm
Definition
TAMakerDBSCANAlgorithm.hpp:20
triggeralgs::TAMakerDBSCANAlgorithm::m_prev_timestamp
timestamp_t m_prev_timestamp
Definition
TAMakerDBSCANAlgorithm.hpp:31
triggeralgs::TAMakerDBSCANAlgorithm::m_min_pts
int m_min_pts
Definition
TAMakerDBSCANAlgorithm.hpp:29
triggeralgs::TAMakerDBSCANAlgorithm::configure
void configure(const nlohmann::json &config)
Definition
TAMakerDBSCANAlgorithm.cpp:76
triggeralgs::TAMakerDBSCANAlgorithm::process
void process(const TriggerPrimitive &input_tp, std::vector< TriggerActivity > &output_ta)
TP processing function that creates & fills TAs.
Definition
TAMakerDBSCANAlgorithm.cpp:25
triggeralgs::TAMakerDBSCANAlgorithm::m_eps
int m_eps
Definition
TAMakerDBSCANAlgorithm.hpp:28
triggeralgs::TAMakerDBSCANAlgorithm::m_dbscan
std::unique_ptr< dbscan::IncrementalDBSCAN > m_dbscan
Definition
TAMakerDBSCANAlgorithm.hpp:33
triggeralgs::TAMakerDBSCANAlgorithm::m_dbscan_clusters
std::vector< dbscan::Cluster > m_dbscan_clusters
Definition
TAMakerDBSCANAlgorithm.hpp:32
triggeralgs::TriggerActivityMaker::configure
virtual void configure(const nlohmann::json &config)
Definition
TriggerActivityMaker.hpp:111
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::TLVL_DEBUG_LOW
@ TLVL_DEBUG_LOW
Definition
Logging.hpp:22
triggeralgs::TriggerPrimitive
dunedaq::trgdataformats::TriggerPrimitive TriggerPrimitive
Definition
TriggerPrimitive.hpp:22
triggeralgs::channel_t
dunedaq::trgdataformats::channel_t channel_t
Definition
Types.hpp:20
TAMakerDBSCANAlgorithm.hpp
dunedaq::trgdataformats::TriggerActivityData::Type::kTPC
@ kTPC
Definition
TriggerActivityData.hpp:22
dunedaq::trgdataformats::TriggerActivityData::Algorithm::kDBSCAN
@ kDBSCAN
Definition
TriggerActivityData.hpp:34
dunedaq::trgdataformats::TriggerPrimitive::time_start
uint64_t time_start
Definition
TriggerPrimitive.hpp:39
Types.hpp
Generated on
for DUNE-DAQ by
1.17.0