23 const ::cluster::ClusterParamsAlg& cluster2)
31 if ((cluster1.GetHitVector().size() >
_maxHits) or (cluster2.GetHitVector().size() >
_maxHits))
54 std::vector<util::PxHit> hits1;
55 hits1 = cluster1.GetHitVector();
56 Nhits1 = hits1.size();
57 poly1 = cluster1.GetParams().PolyObject;
58 start_w_1 = cluster1.GetParams().start_point.w;
59 start_t_1 = cluster1.GetParams().start_point.t;
60 end_w_1 = cluster1.GetParams().end_point.w;
61 end_t_1 = cluster1.GetParams().end_point.t;
64 std::vector<util::PxHit> hits2;
65 hits2 = cluster2.GetHitVector();
66 Nhits2 = hits2.size();
67 poly2 = cluster2.GetParams().PolyObject;
68 start_w_2 = cluster2.GetParams().start_point.w;
69 start_t_2 = cluster2.GetParams().start_point.t;
70 end_w_2 = cluster2.GetParams().end_point.w;
71 end_t_2 = cluster2.GetParams().end_point.t;
74 for (
auto&
hit : hits1) {
75 COM_t_1 +=
hit.t *
hit.charge;
76 COM_w_1 +=
hit.w *
hit.charge;
83 for (
auto&
hit : hits2) {
84 COM_t_2 +=
hit.t *
hit.charge;
85 COM_w_2 +=
hit.w *
hit.charge;
92 std::cout <<
"Cluster 1: " << std::endl;
93 std::cout <<
"N Hits: " << Nhits1 << std::endl;
94 std::cout <<
"COM: (w,t) -> (" << COM_w_1 <<
", " << COM_t_1 <<
")" << std::endl;
95 std::cout <<
"Cluster 2: " << std::endl;
96 std::cout <<
"N Hits: " << Nhits2 << std::endl;
97 std::cout <<
"COM: (w,t) -> (" << COM_w_2 <<
", " << COM_t_2 <<
")" << std::endl;
98 std::cout << std::endl;
102 std::pair<float, float> COM_1;
103 COM_1 = std::make_pair(COM_w_1, COM_t_1);
104 std::pair<float, float> COM_2;
105 COM_2 = std::make_pair(COM_w_2, COM_t_2);
110 if (
_verbose) { std::cout <<
"Polygon Overlap -> Merge!" << std::endl << std::endl; }
116 (COM_w_1 - COM_w_2) * (COM_w_1 - COM_w_2) + (COM_t_1 - COM_t_2) * (COM_t_1 - COM_t_2);
118 if (
_verbose) { std::cout <<
"COMs close to each other -> Merge!" << std::endl << std::endl; }
128 if (
_verbose) { std::cout <<
"COM close to start-end -> Merge!" << std::endl; }
154 double distance_squared = -1;
157 double length_squared = pow((end_x - start_x), 2) + pow((end_y - start_y), 2);
160 if (length_squared < 0.1) {
162 std::cout << std::endl;
163 std::cout << Form(
" Provided very short line segment: (%g,%g) => (%g,%g)",
169 std::cout <<
" Likely this means one of two clusters have start & end point identical." 171 std::cout <<
" Check the cluster output!" << std::endl;
172 std::cout << std::endl;
173 std::cout << Form(
" At this time, the algorithm uses a point (%g,%g)", start_x, start_y)
175 std::cout <<
" to represent this cluster's location." << std::endl;
176 std::cout << std::endl;
179 return (pow((point_x - start_x), 2) + pow((point_y - start_y), 2));
183 double t = ((point_x - start_x) * (end_x - start_x) + (point_y - start_y) * (end_y - start_y)) /
187 distance_squared = pow((point_x - start_x), 2) + pow((point_y - start_y), 2);
190 distance_squared = pow((point_x - end_x), 2) + pow(point_y - end_y, 2);
193 distance_squared = pow((point_x - (start_x + t * (end_x - start_x))), 2) +
194 pow((point_y - (start_y + t * (end_y - start_y))), 2);
196 return distance_squared;
Detector simulation of raw signals on wires.
Class def header for a class CBAlgoCenterOfMassSmall.
bool PointInside(const std::pair< float, float > &point) const