DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
include
triggeralgs
dbscan
Hit.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
triggeralgs/TriggerActivity.hpp
"
4
#include "
triggeralgs/TriggerPrimitive.hpp
"
5
#include <vector>
6
#include <cmath>
7
#include <list>
8
9
namespace
triggeralgs
{
10
namespace
dbscan
{
11
//======================================================================
12
13
// Special "cluster numbers" for hits that are not (yet) in a cluster
14
const
int
kNoise
= -2;
15
const
int
kUndefined
= -1;
16
17
//======================================================================
18
19
// Hit classifications in the DBSCAN scheme
20
enum class
Connectedness
21
{
22
// clang-format off
23
kUndefined
,
24
kNoise
,
// Fewer than minPts neighbours, not in a cluster
25
kCore
,
// minPts neighbours or more
26
kEdge
// Fewer than minPts neighbours, part of a cluster
27
// clang-format on
28
};
29
30
//======================================================================
31
32
// As new hits arrive, they push forward the "current" time, and
33
// eventually a given hit or cluster will know that it cannot be
34
// modified any further. A hit becomes kComplete when its time is so
35
// far behind the current time that new hits cannot be neighbours of
36
// it. A cluster becomes kComplete when its latest hit is complete
37
enum class
Completeness
38
{
39
kIncomplete
,
40
kComplete
,
41
};
42
43
class
Hit;
44
45
//======================================================================
46
47
// An array of unique hits, sorted by time. The actual container
48
// implementation is a std::vector, which seems to be faster than a
49
// std::set (needs rechecking)
50
class
HitSet
51
{
52
public
:
53
HitSet
();
54
55
// Insert a hit in the set, if not already present. Keeps the
56
// array sorted by time
57
void
insert
(
Hit
* h);
58
59
std::vector<Hit*>::iterator
begin
() {
return
hits
.begin(); }
60
std::vector<Hit*>::iterator
end
() {
return
hits
.end(); }
61
62
std::vector<Hit*>::const_iterator
begin
()
const
{
return
hits
.cbegin(); }
63
std::vector<Hit*>::const_iterator
end
()
const
{
return
hits
.cend(); }
64
65
void
clear
() {
hits
.clear(); }
66
67
size_t
size
()
const
{
return
hits
.size(); }
68
69
std::vector<Hit*>
hits
;
70
};
71
72
//======================================================================
73
struct
Hit
74
{
75
Hit
(
float
_time,
int
_chan,
const
triggeralgs::TriggerPrimitive
* _prim=
nullptr
);
76
77
void
reset
(
float
_time,
int
_chan,
const
triggeralgs::TriggerPrimitive
* _prim=
nullptr
);
78
// Add hit `other` to this hit's list of neighbours if they are
79
// closer than `eps`. Return true if so
80
bool
add_potential_neighbour
(
Hit
* other,
float
eps,
int
minPts);
81
82
float
time
;
83
int
chan
,
cluster
;
84
Connectedness
connectedness
;
85
HitSet
neighbours
;
86
triggeralgs::TriggerPrimitive
primitive
;
87
};
88
89
//======================================================================
90
inline
float
91
manhattan_distance
(
const
Hit
& p,
const
Hit
& q)
92
{
93
return
fabs((p.
time
- q.
time
)) + fabs(p.
chan
- q.
chan
);
94
}
95
96
//======================================================================
97
template
<
class
T>
98
inline
T
99
sqr
(T x)
100
{
101
return
x * x;
102
}
103
104
//======================================================================
105
inline
float
106
euclidean_distance
(
const
Hit
& p,
const
Hit
& q)
107
{
108
return
std::sqrt(
sqr
(p.
time
- q.
time
) +
sqr
(p.
chan
- q.
chan
));
109
}
110
111
//======================================================================
112
inline
float
113
euclidean_distance_sqr
(
const
Hit
& p,
const
Hit
& q)
114
{
115
return
sqr
(p.
time
- q.
time
) +
sqr
(p.
chan
- q.
chan
);
116
}
117
118
//======================================================================
119
inline
bool
120
time_comp_lower
(
const
Hit
* hit,
const
float
t)
121
{
122
return
hit->
time
< t;
123
}
124
125
}
126
}
127
// Local Variables:
128
// mode: c++
129
// c-basic-offset: 4
130
// c-file-style: "linux"
131
// End:
TriggerActivity.hpp
triggeralgs::dbscan::HitSet
Definition
Hit.hpp:51
triggeralgs::dbscan::HitSet::begin
std::vector< Hit * >::iterator begin()
Definition
Hit.hpp:59
triggeralgs::dbscan::HitSet::insert
void insert(Hit *h)
Definition
Hit.cpp:16
triggeralgs::dbscan::HitSet::clear
void clear()
Definition
Hit.hpp:65
triggeralgs::dbscan::HitSet::end
std::vector< Hit * >::const_iterator end() const
Definition
Hit.hpp:63
triggeralgs::dbscan::HitSet::hits
std::vector< Hit * > hits
Definition
Hit.hpp:69
triggeralgs::dbscan::HitSet::begin
std::vector< Hit * >::const_iterator begin() const
Definition
Hit.hpp:62
triggeralgs::dbscan::HitSet::HitSet
HitSet()
Definition
Hit.cpp:9
triggeralgs::dbscan::HitSet::end
std::vector< Hit * >::iterator end()
Definition
Hit.hpp:60
triggeralgs::dbscan::HitSet::size
size_t size() const
Definition
Hit.hpp:67
triggeralgs::dbscan
Definition
dbscan.hpp:14
triggeralgs::dbscan::sqr
T sqr(T x)
Definition
Hit.hpp:99
triggeralgs::dbscan::kUndefined
const int kUndefined
Definition
Hit.hpp:15
triggeralgs::dbscan::Completeness
Completeness
Definition
Hit.hpp:38
triggeralgs::dbscan::Completeness::kComplete
@ kComplete
Definition
Hit.hpp:40
triggeralgs::dbscan::Completeness::kIncomplete
@ kIncomplete
Definition
Hit.hpp:39
triggeralgs::dbscan::time_comp_lower
bool time_comp_lower(const Hit *hit, const float t)
Definition
Hit.hpp:120
triggeralgs::dbscan::kNoise
const int kNoise
Definition
Hit.hpp:14
triggeralgs::dbscan::euclidean_distance
float euclidean_distance(const Hit &p, const Hit &q)
Definition
Hit.hpp:106
triggeralgs::dbscan::manhattan_distance
float manhattan_distance(const Hit &p, const Hit &q)
Definition
Hit.hpp:91
triggeralgs::dbscan::Connectedness
Connectedness
Definition
Hit.hpp:21
triggeralgs::dbscan::Connectedness::kEdge
@ kEdge
Definition
Hit.hpp:26
triggeralgs::dbscan::Connectedness::kCore
@ kCore
Definition
Hit.hpp:25
triggeralgs::dbscan::euclidean_distance_sqr
float euclidean_distance_sqr(const Hit &p, const Hit &q)
Definition
Hit.hpp:113
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::TriggerPrimitive
dunedaq::trgdataformats::TriggerPrimitive TriggerPrimitive
Definition
TriggerPrimitive.hpp:22
triggeralgs::dbscan::Hit
Definition
Hit.hpp:74
triggeralgs::dbscan::Hit::add_potential_neighbour
bool add_potential_neighbour(Hit *other, float eps, int minPts)
Definition
Hit.cpp:60
triggeralgs::dbscan::Hit::cluster
int cluster
Definition
Hit.hpp:83
triggeralgs::dbscan::Hit::neighbours
HitSet neighbours
Definition
Hit.hpp:85
triggeralgs::dbscan::Hit::primitive
triggeralgs::TriggerPrimitive primitive
Definition
Hit.hpp:86
triggeralgs::dbscan::Hit::time
float time
Definition
Hit.hpp:82
triggeralgs::dbscan::Hit::Hit
Hit(float _time, int _chan, const triggeralgs::TriggerPrimitive *_prim=nullptr)
Definition
Hit.cpp:36
triggeralgs::dbscan::Hit::reset
void reset(float _time, int _chan, const triggeralgs::TriggerPrimitive *_prim=nullptr)
Definition
Hit.cpp:44
triggeralgs::dbscan::Hit::connectedness
Connectedness connectedness
Definition
Hit.hpp:84
triggeralgs::dbscan::Hit::chan
int chan
Definition
Hit.hpp:83
TriggerPrimitive.hpp
Generated on
for DUNE-DAQ by
1.17.0