34 int ntracks = trkl.length();
35 if ( iprt ) cout <<
"MdcxMergeDups called with " << ntracks <<
" tracks" << endl;
36 double m_2pi = 2.0 *
M_PI;
38 while ( trkl[k] ) trkl[k++]->SetUsedOnHel( 0 );
42 for (
int i = 0; i < ntracks - 1; i++ )
45 int already_merged = 0;
48 already_merged = trkl[i]->GetUsedOnHel();
51 for (
int j = i + 1; j < ntracks; j++ )
53 if ( trkl[j]->GetUsedOnHel() )
continue;
54 double omega1 = iptr->
Omega();
55 double omega2 = trkl[j]->Omega();
56 double phi01 = iptr->
Phi0();
57 double phi02 = trkl[j]->Phi0();
58 double d01 = iptr->
D0();
59 double d02 = trkl[j]->D0();
60 double prodo = omega1 * omega2;
62 cout <<
"Try track [" << i <<
"] and [" << j <<
"], prodo = " << prodo << endl;
66 if (
m_debug ) std::cout <<
" fabs(d01 - d02) " << fabs( d01 - d02 ) << std::endl;
70 std::cout <<
" fabs(phi01-phi02) " << fabs( phi01 - phi02 ) << std::endl;
74 if ( fabs( omega1 ) > 0.00001 ) r1 = 1.0 / fabs( omega1 );
76 if ( fabs( omega2 ) > 0.00001 ) r2 = 1.0 / fabs( omega2 );
77 double pdrad = fabs( ( r1 - r2 ) / ( r1 + r2 ) );
80 std::cout <<
"omega1,r1 " << omega1 <<
" " << r1 <<
" omega2,r2 " << omega2
81 <<
" " << r2 <<
" pdrad " << pdrad << std::endl;
86 cout <<
"MdcxMD i j dif " << i <<
" " << j <<
" " << d01 - d02 <<
" "
87 << phi01 - phi02 <<
" " << r1 <<
" " << r2 <<
" " << pdrad << endl;
89 if ( iprt ) cout <<
"MdcxMD " << dcxhlist.length() <<
" " << iptr->
Chisq();
91 if ( iprt ) cout <<
" " << dcxh2.length() <<
" " << trkl[j]->Chisq();
92 dcxhlist.append( dcxh2 );
94 if ( iprt ) cout <<
" " << dcxhlist.length() << endl;
99 if ( !fit2.
Fail() && ( fit2.
Rcs() < fit1.
Rcs() ) ) uf = 2;
102 std::cout <<
"fit1.Fail() " << fit1.
Fail() <<
" fit1.Rcs " << fit1.
Rcs()
103 <<
" fit2.Fail() " << fit2.
Fail() <<
" fit2.Rcs " << fit2.
Rcs()
108 MdcxHel fitme = ( uf == 1 ) ? fit1 : fit2;
110 if ( !finehel->
Fail() )
112 if ( already_merged )
117 trkl[j]->SetUsedOnHel( already_merged );
125 trkl[j]->SetUsedOnHel( already_merged );
128 else {
delete finehel; }
138 if ( ( fabs( d01 + d02 ) < 4.0 ) && ( fabs( d01 - d02 ) > 47.0 ) )
140 double deltap = fabs( fabs( phi01 - phi02 ) -
M_PI );
144 if ( fabs( omega1 ) > 0.00001 ) r1 = 1.0 / fabs( omega1 );
146 if ( fabs( omega2 ) > 0.00001 ) r2 = 1.0 / fabs( omega2 );
147 double pdrad = fabs( ( r1 - r2 ) / ( r1 + r2 ) );
151 cout <<
"MdcxMD i j sum " << i <<
" " << j <<
" " << d01 + d02 <<
" "
152 << deltap <<
" " << r1 <<
" " << r2 <<
" " << pdrad << endl;
158 if ( iprt ) cout <<
"MdcxMD " << dcxhlist.length() <<
" " << iptr->
Chisq();
160 if ( iprt ) cout <<
" " << dcxh2.length() <<
" " << trkl[j]->Chisq();
161 dcxhlist.append( dcxh2 );
163 if ( iprt ) cout <<
" " << dcxhlist.length() << endl;
168 if ( !fit2.
Fail() && ( fit2.
Rcs() < fit1.
Rcs() ) ) uf = 2;
171 MdcxHel fitme = ( 1 == uf ) ? fit1 : fit2;
173 if ( !finehel->
Fail() )
175 if ( already_merged )
180 trkl[j]->SetUsedOnHel( already_merged );
188 trkl[j]->SetUsedOnHel( already_merged );
191 else {
delete finehel; }
205 cout <<
"In MdcxMD, trk is used on " << k <<
" " << trkl[k]->GetUsedOnHel() << endl;
206 if ( !trkl[k]->GetUsedOnHel() )
CleanTrklist.append( trkl[k] );
222 if ( iprt ) cout <<
"MdcxMD leaves with " <<
CleanTrklist.length() <<
" tracks" << endl;