DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
triggeralgs::TAMakerDBSCANAlgorithm Class Reference

#include <TAMakerDBSCANAlgorithm.hpp>

Inheritance diagram for triggeralgs::TAMakerDBSCANAlgorithm:
[legend]
Collaboration diagram for triggeralgs::TAMakerDBSCANAlgorithm:
[legend]

Public Member Functions

void process (const TriggerPrimitive &input_tp, std::vector< TriggerActivity > &output_ta)
 TP processing function that creates & fills TAs.
 
void configure (const nlohmann::json &config)
 
- Public Member Functions inherited from triggeralgs::TriggerActivityMaker
virtual ~TriggerActivityMaker ()=default
 
void operator() (const TriggerPrimitive &input_tp, std::vector< TriggerActivity > &output_ta)
 
virtual bool preprocess (const TriggerPrimitive &input_tp)
 TP pre-processing/filtering.
 
virtual void postprocess (std::vector< TriggerActivity > &output_ta)
 Post-processing/filtering of the TAs, e.g. prescale.
 
virtual void flush (timestamp_t, std::vector< TriggerActivity > &)
 

Private Attributes

int m_eps {10}
 
int m_min_pts {3}
 
timestamp_t m_first_timestamp {0}
 
timestamp_t m_prev_timestamp {0}
 
std::vector< dbscan::Clusterm_dbscan_clusters
 
std::unique_ptr< dbscan::IncrementalDBSCANm_dbscan
 

Additional Inherited Members

- Public Attributes inherited from triggeralgs::TriggerActivityMaker
std::atomic< uint64_t > m_data_vs_system_time = 0
 
std::atomic< uint64_t > m_initial_offset = 0
 
uint64_t m_prescale = 1
 Configurable prescale factor.
 
uint64_t m_ta_count = 0
 TA made count for prescaling.
 
uint32_t m_max_samples_over_threshold = std::numeric_limits<uint32_t>::max()
 Time-over-threshold TP filtering.
 

Detailed Description

Definition at line 19 of file TAMakerDBSCANAlgorithm.hpp.

Member Function Documentation

◆ configure()

void TAMakerDBSCANAlgorithm::configure ( const nlohmann::json & config)
virtual

Reimplemented from triggeralgs::TriggerActivityMaker.

Definition at line 76 of file TAMakerDBSCANAlgorithm.cpp.

77{
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}
std::unique_ptr< dbscan::IncrementalDBSCAN > m_dbscan
virtual void configure(const nlohmann::json &config)

◆ process()

void TAMakerDBSCANAlgorithm::process ( const TriggerPrimitive & input_tp,
std::vector< TriggerActivity > & output_ta )
virtual

TP processing function that creates & fills TAs.

Parameters
input_tp[in]Input TP for the triggering algorithm
output_ta[out]Output vector of TAs to fill by the algorithm

Implements triggeralgs::TriggerActivityMaker.

Definition at line 25 of file TAMakerDBSCANAlgorithm.cpp.

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
70 }
71
72 m_dbscan->trim_hits();
73}
std::vector< dbscan::Cluster > m_dbscan_clusters
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
dunedaq::trgdataformats::channel_t channel_t
Definition Types.hpp:20

Member Data Documentation

◆ m_dbscan

std::unique_ptr<dbscan::IncrementalDBSCAN> triggeralgs::TAMakerDBSCANAlgorithm::m_dbscan
private

Definition at line 33 of file TAMakerDBSCANAlgorithm.hpp.

◆ m_dbscan_clusters

std::vector<dbscan::Cluster> triggeralgs::TAMakerDBSCANAlgorithm::m_dbscan_clusters
private

Definition at line 32 of file TAMakerDBSCANAlgorithm.hpp.

◆ m_eps

int triggeralgs::TAMakerDBSCANAlgorithm::m_eps {10}
private

Definition at line 28 of file TAMakerDBSCANAlgorithm.hpp.

28{10};

◆ m_first_timestamp

timestamp_t triggeralgs::TAMakerDBSCANAlgorithm::m_first_timestamp {0}
private

Definition at line 30 of file TAMakerDBSCANAlgorithm.hpp.

30{0};

◆ m_min_pts

int triggeralgs::TAMakerDBSCANAlgorithm::m_min_pts {3}
private

Definition at line 29 of file TAMakerDBSCANAlgorithm.hpp.

29{3}; // Minimum number of points to form a cluster

◆ m_prev_timestamp

timestamp_t triggeralgs::TAMakerDBSCANAlgorithm::m_prev_timestamp {0}
private

Definition at line 31 of file TAMakerDBSCANAlgorithm.hpp.

31{0};

The documentation for this class was generated from the following files: