9 #include <Math/Point3D.h>
23 constexpr
auto cRED =
"\033[1;31m";
26 constexpr
auto cGREEN =
"\033[1;32m";
35 opt_params.
set_parameters(inputParams.s, inputParams.k, inputParams.n, inputParams.m, inputParams.r, inputParams.a,
39 eventToClusters(event, cloud_xyz);
41 if (cloud_xyz.size() == 0) {
42 std::cerr <<
"[Error] empty cloud " << std::endl;
49 if (opt_verbose > 0) {
50 std::cout <<
"AtPATTERN::AtTrackFinderTC - [Info] computed dnn: " << dnn << std::endl;
54 std::cerr <<
"AtPATTERN::AtTrackFinderTC - [Error] dnn computed as zero. "
55 <<
"Suggestion: remove doublets, e.g. with 'sort -u'" << std::endl;
65 std::vector<triplet> triplets;
79 for (
auto &cl : cl_group) {
82 cl_group = cleaned_up_cluster_group;
89 return clustersToTrack(cloud_xyz, cl_group, event);
92 void AtPATTERN::AtTrackFinderTC::eventToClusters(
AtEvent &event,
PointCloud &cloud)
94 Int_t nHits =
event.GetNumHits();
96 for (Int_t iHit = 0; iHit < nHits; iHit++) {
98 const AtHit hit =
event.GetHit(iHit);
100 point.
x = position.X();
101 point.
y = position.Y();
102 point.
z = position.Z();
104 cloud.push_back(point);
108 std::unique_ptr<AtPatternEvent>
109 AtPATTERN::AtTrackFinderTC::clustersToTrack(
PointCloud &cloud,
const std::vector<cluster_t> &clusters,
AtEvent &event)
112 std::vector<AtTrack> tracks;
116 for (
size_t cluster_index = 0; cluster_index < clusters.size(); ++cluster_index) {
120 const std::vector<size_t> &point_indices = clusters[cluster_index];
121 if (point_indices.size() == 0)
125 for (
auto ind : point_indices) {
127 const Point &point = cloud[ind];
132 for (
auto p = points.begin(); p != points.end(); p++) {
143 fTrackTransformer->ClusterizeSmooth3D(track, fClusterRadius, fClusterDistance);
148 tracks.push_back(track);
152 std::cout <<
cRED <<
" Tracks found " << tracks.size() <<
cNORMAL <<
"\n";
155 auto retEvent = std::make_unique<AtPatternEvent>();
156 for (
const auto &point : points)
159 for (
auto &track : tracks) {
161 SetTrackInitialParameters(track);
162 retEvent->AddTrack(std::move(track));