Merging Algorithm is Here.
37 if ( ( (cluster1.GetParams().length <
_lenMin) and (cluster1.GetHitVector().size() <
_NhitsMin) )
38 and ( (cluster2.GetParams().length <
_lenMin) and (cluster2.GetHitVector().size() <
_NhitsMin) ) )
48 double w_start1 = cluster1.GetParams().start_point.w;
49 double t_start1 = cluster1.GetParams().start_point.t;
50 double angle1 = cluster1.GetParams().angle_2d;
51 double opening1 = cluster1.GetParams().opening_angle * (180./3.14);
52 double len1 = cluster1.GetParams().length;
54 double w_start2 = cluster2.GetParams().start_point.w;
55 double t_start2 = cluster2.GetParams().start_point.t;
56 double angle2 = cluster2.GetParams().angle_2d;
57 double opening2 = cluster2.GetParams().opening_angle * (180./3.14);
58 double len2 = cluster2.GetParams().length;
63 if (
_debug) { std::cout <<
"Directions too different....do not merge" <<
std::endl; }
69 std::cout <<
"\tStart: ( " << w_start1 <<
", " << t_start1 <<
" )" <<
std::endl;
70 std::cout <<
"\tAngle: " << angle1 <<
std::endl;
71 std::cout <<
"\tOpening Angle: " << opening1 <<
std::endl;
72 std::cout <<
"\tLength: " << len1 <<
std::endl;
74 std::cout <<
"\tStart: ( " << w_start2 <<
", " << t_start2 <<
" )" <<
std::endl;
75 std::cout <<
"\tAngle: " << angle2 <<
std::endl;
76 std::cout <<
"\tOpening Angle: " << opening2 <<
std::endl;
77 std::cout <<
"\tLength: " << len2 <<
std::endl;
85 double w_start1_transl = w_start1 - w_start2;
86 double t_start1_transl = t_start1 - t_start2;
87 double w_start2_transl = w_start2 - w_start1;
88 double t_start2_transl = t_start2 - t_start1;
90 double w_start1_rot = w_start1_transl*cos(angle2*3.14/180.) + t_start1_transl*sin(angle2*3.14/180.);
91 double t_start1_rot = - w_start1_transl*sin(angle2*3.14/180.) + t_start1_transl*cos(angle2*3.14/180.);
92 double w_start2_rot = w_start2_transl*cos(angle1*3.14/180.) + t_start2_transl*sin(angle1*3.14/180.);
93 double t_start2_rot = - w_start2_transl*sin(angle1*3.14/180.) + t_start2_transl*cos(angle1*3.14/180.);
96 std::cout <<
"\tStart Rot 1: ( " << w_start1_rot <<
", " << t_start1_rot <<
" )" <<
std::endl;
97 std::cout <<
"\tStart Rot 2: ( " << w_start2_rot <<
", " << t_start2_rot <<
" )" <<
std::endl;
100 if ( (w_start1_rot < len2*
_lengthReach ) and (w_start1_rot > 0) and
101 (
abs(t_start1_rot) < (
abs(w_start1_rot*sin(opening2*3.14/180.))) ) and
103 (cluster2.GetHitVector().size() >
_NhitsMin) ){
104 if (
_verbose) { std::cout <<
"Start point of Cluster 1 in cone of Cluster 2!" <<
std::endl; }
107 if ( (w_start2_rot < len1*_lengthReach ) and (w_start2_rot > 0) and
108 (
abs(t_start2_rot) < (
abs(w_start2_rot*sin(opening1*3.14/180.))) ) and
111 if (
_verbose) { std::cout <<
"Start point of Cluster 2 in cone of Cluster 1!" <<
std::endl; }
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
QTextStream & endl(QTextStream &s)