DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
triggeralgs::dbscan::Cluster Struct Reference

#include <dbscan.hpp>

Collaboration diagram for triggeralgs::dbscan::Cluster:
[legend]

Public Member Functions

 Cluster (int index_)
 
bool maybe_add_new_hit (Hit *new_hit, float eps, int minPts)
 
void add_hit (Hit *h)
 
void steal_hits (Cluster &other)
 

Public Attributes

int index { -1 }
 
Completeness completeness { Completeness::kIncomplete }
 
float latest_time { 0 }
 
Hitlatest_core_point { nullptr }
 
HitSet hits
 

Detailed Description

Definition at line 22 of file dbscan.hpp.

Constructor & Destructor Documentation

◆ Cluster()

triggeralgs::dbscan::Cluster::Cluster ( int index_)
inline

Definition at line 24 of file dbscan.hpp.

25 : index{ index_ }
26 {}

Member Function Documentation

◆ add_hit()

void triggeralgs::dbscan::Cluster::add_hit ( Hit * h)

Definition at line 63 of file dbscan.cpp.

64{
65 hits.insert(h);
66 h->cluster = index;
67 latest_time = std::max(latest_time, h->time);
68 if (h->connectedness == Connectedness::kCore &&
71 }
72}
void insert(Hit *h)
Definition Hit.cpp:16

◆ maybe_add_new_hit()

bool triggeralgs::dbscan::Cluster::maybe_add_new_hit ( Hit * new_hit,
float eps,
int minPts )

Definition at line 31 of file dbscan.cpp.

32{
33 // Should we add this hit?
34 bool do_add = false;
35
36 // Hits earlier than new_hit time minus `eps` can't possibly be
37 // neighbours, so start the search there in the sorted list of hits in this
38 // cluster
39 auto begin_it = std::lower_bound(
40 hits.begin(), hits.end(), new_hit->time - eps, time_comp_lower);
41
42 for (auto it = begin_it; it != hits.end(); ++it) {
43 Hit* h = *it;
44 if (h->add_potential_neighbour(new_hit, eps, minPts)) {
45 do_add = true;
46 if (h->neighbours.size() + 1 >= minPts) {
47 h->connectedness = Connectedness::kCore;
48 } else {
49 h->connectedness = Connectedness::kEdge;
50 }
51 }
52 } // end loop over hits in cluster
53
54 if (do_add) {
55 add_hit(new_hit);
56 }
57
58 return do_add;
59}
std::vector< Hit * >::iterator begin()
Definition Hit.hpp:59
std::vector< Hit * >::iterator end()
Definition Hit.hpp:60
bool time_comp_lower(const Hit *hit, const float t)
Definition Hit.hpp:120

◆ steal_hits()

void triggeralgs::dbscan::Cluster::steal_hits ( Cluster & other)

Definition at line 76 of file dbscan.cpp.

77{
78 // TODO: it might be faster to do some sort of explicit "merge" of the hits,
79 // eg:
80 //
81 // this->hits.insert(other hits); // Inserts at end
82 // std::inplace_merge(...)
83 //
84 // This might save some reallocations of the vector
85 for (auto h : other.hits) {
86 assert(h);
87 add_hit(h);
88 }
89 other.hits.clear();
90 other.completeness = Completeness::kComplete;
91}

Member Data Documentation

◆ completeness

Completeness triggeralgs::dbscan::Cluster::completeness { Completeness::kIncomplete }

◆ hits

HitSet triggeralgs::dbscan::Cluster::hits

Definition at line 38 of file dbscan.hpp.

◆ index

int triggeralgs::dbscan::Cluster::index { -1 }

Definition at line 28 of file dbscan.hpp.

28{ -1 };

◆ latest_core_point

Hit* triggeralgs::dbscan::Cluster::latest_core_point { nullptr }

Definition at line 36 of file dbscan.hpp.

36{ nullptr };

◆ latest_time

float triggeralgs::dbscan::Cluster::latest_time { 0 }

Definition at line 34 of file dbscan.hpp.

34{ 0 };

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