41 {
42
43
44
45
46
48
49 for ( int iline = 0; iline < 8; iline++ )
50 {
51 linefit[iline]._pointCol.push_back( *( _recStereoHit[0] ) );
52 linefit[iline]._pointCol.push_back( *( _recStereoHit[1] ) );
53 linefit[iline]._pointCol.push_back( *( _recStereoHit[2] ) );
54 }
56 {
57 for ( int i = 0; i < 3; i++ )
58 {
59 cout << " the first 3 hits (" << i << " " << _recStereoHit[i]->getLayerId() << ","
60 << _recStereoHit[i]->getWireId() << ")" << endl;
61 cout << " left " << ( _recStereoHit[i] )->getsAmb( 0 ) << " "
62 << ( _recStereoHit[i] )->getzAmb( 0 ) << endl;
63 cout << " right " << ( _recStereoHit[i] )->getsAmb( 1 ) << " "
64 << ( _recStereoHit[i] )->getzAmb( 1 ) << endl;
65 }
66 }
67
69 linefit[0]._pointCol[1].setAmb( 0 );
70 linefit[0]._pointCol[2].setAmb( 0 );
71
72 linefit[1]._pointCol[0].setAmb( 0 );
73 linefit[1]._pointCol[1].setAmb( 0 );
74 linefit[1]._pointCol[2].setAmb( 1 );
75
76 linefit[2]._pointCol[0].setAmb( 0 );
77 linefit[2]._pointCol[1].setAmb( 1 );
78 linefit[2]._pointCol[2].setAmb( 0 );
79
80 linefit[3]._pointCol[0].setAmb( 0 );
81 linefit[3]._pointCol[1].setAmb( 1 );
82 linefit[3]._pointCol[2].setAmb( 1 );
83
84 linefit[4]._pointCol[0].setAmb( 1 );
85 linefit[4]._pointCol[1].setAmb( 0 );
86 linefit[4]._pointCol[2].setAmb( 0 );
87
88 linefit[5]._pointCol[0].setAmb( 1 );
89 linefit[5]._pointCol[1].setAmb( 0 );
90 linefit[5]._pointCol[2].setAmb( 1 );
91
92 linefit[6]._pointCol[0].setAmb( 1 );
93 linefit[6]._pointCol[1].setAmb( 1 );
94 linefit[6]._pointCol[2].setAmb( 0 );
95
96 linefit[7]._pointCol[0].setAmb( 1 );
97 linefit[7]._pointCol[1].setAmb( 1 );
98 linefit[7]._pointCol[2].setAmb( 1 );
99
100 for ( int i = 0; i < 8; i++ )
101 {
102 linefit[i]._ambig.push_back( linefit[i]._pointCol[0].getAmbig() );
103 linefit[i]._ambig.push_back( linefit[i]._pointCol[1].getAmbig() );
104 linefit[i]._ambig.push_back( linefit[i]._pointCol[2].getAmbig() );
105 if (
m_debug > 0 ) cout <<
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^begin line " << i << endl;
107
108 int line_size = 3;
109 for ( int j = 3; j < _hitSize; j++ )
110 {
111 double chi_last = linefit[i]._chi;
112 double k_last = linefit[i]._k;
113 double b_last = linefit[i]._b;
115 cout << "last " << j << " chi k b " << chi_last << " " << k_last << " " << b_last
116 << endl;
117 linefit[i]._pointCol.push_back( *( _recStereoHit[j] ) );
118
119
120
121
122 linefit[i]._pointCol[line_size].setAmb( 0 );
124 cout << "Add point left "
125 << "(" << linefit[i]._pointCol[line_size].getLayerId() << ","
126 << linefit[i]._pointCol[line_size].getWireId() << ") "
127 << linefit[i]._pointCol[line_size].getStyle() << " "
128 << linefit[i]._pointCol[line_size].getsPos() << " "
129 << linefit[i]._pointCol[line_size].getzPos() << endl;
130 leastFit( linefit[i], line_size + 1 );
131 double chil = linefit[i]._chi;
132 double kl = linefit[i]._k;
133 double bl = linefit[i]._b;
134 if ( linefit[i]._pointCol[line_size].getsPos() == -99 ) { chil = 9999; }
136 cout << "left " << line_size << " chi k b " << chil << " " << kl << " " << bl << endl;
137
138 linefit[i]._pointCol[line_size].setAmb( 1 );
140 cout << "Add point right "
141 << "(" << linefit[i]._pointCol[line_size].getLayerId() << ","
142 << linefit[i]._pointCol[line_size].getWireId() << ") "
143 << linefit[i]._pointCol[line_size].getStyle() << " "
144 << linefit[i]._pointCol[line_size].getsPos() << " "
145 << linefit[i]._pointCol[line_size].getzPos() << endl;
146 leastFit( linefit[i], line_size + 1 );
147 double chir = linefit[i]._chi;
148 double kr = linefit[i]._k;
149 double br = linefit[i]._b;
150 if ( linefit[i]._pointCol[line_size].getsPos() == -99 ) { chir = 9999; }
152 cout << "right " << line_size << " chi k b " << chir << " " << kr << " " << br << endl;
153
154 if ( chil < chir )
155 {
156 linefit[i]._pointCol[line_size].setAmb( 0 );
157 linefit[i]._chi = chil;
158 linefit[i]._k = kl;
159 linefit[i]._b = bl;
160 linefit[i]._ambig.push_back( 0 );
161
162 }
163 else linefit[i]._ambig.push_back( 1 );
164 line_size++;
165
166
167 int same_ambig = 1;
168 for ( int ihit = 0; ihit < line_size; ihit++ )
169 {
170 int ambighit = linefit[i]._pointCol[ihit].getAmbig();
171 int ambigTruth = linefit[i]._pointCol[ihit].getLrTruth();
172 int layer = linefit[i]._pointCol[ihit].getLayerId();
173 int wire = linefit[i]._pointCol[ihit].getWireId();
174
175
176
177
178
179 }
180
181
182 double dChi = chi_last - linefit[i]._chi;
183 double dChi_n = ( linefit[i]._chi ) / ( line_size - 1 ) - ( chi_last / line_size );
184 if (
m_debug > 0 ) cout <<
"dChi: " << dChi << endl;
185 if (
m_debug > 0 ) cout <<
"dChi/n: " << dChi_n << endl;
186 if (
m_debug > 0 ) cout << endl;
187
188 if ( fabs( dChi_n ) > 25. )
189
190
191
192 {
193 linefit[i]._pointCol.pop_back();
194 linefit[i]._chi = chi_last;
195 linefit[i]._k = k_last;
196 linefit[i]._b = b_last;
197 linefit[i]._ambig.at( j ) = -999;
198 line_size--;
199 }
200 }
201
202 if ( ( linefit[i]._pointCol[0].getsPos() == -99 ) ||
203 ( linefit[i]._pointCol[1].getsPos() == -99 ) ||
204 ( linefit[i]._pointCol[2].getsPos() == -99 ) )
205 { linefit[i]._chi = 99999; }
206 }
208 for ( int i = 0; i < 8; i++ )
209 {
211 cout << "Line :" << i << " chis: " << linefit[i]._chi << " k,b: " << linefit[i]._k << " "
212 << linefit[i]._b << endl;
213 int ambig_correct = 0;
214 for ( int j = 0; j < _hitSize; j++ )
215 {
216 int ambig = linefit[i]._ambig.at( j );
217 int layer = _recStereoHit.at( j )->getLayerId();
218 int wire = _recStereoHit.at( j )->getWireId();
219 int style = _recStereoHit.at( j )->getStyle();
220 double l = -99;
221 if ( ambig != -999 ) l = _recStereoHit.at( j )->getsAmb( ambig );
222 double z = -99;
223 if ( ambig != -999 ) z = _recStereoHit.at( j )->getzAmb( ambig );
224
225
226 if ( l == -99 && z == -99 ) ambig = -999;
228 cout << "(" << layer << " ," << wire << ") style " << style << " ambig " << ambig
229 << " s " << l << " z " << z << endl;
230 if ( i == 0 )
231 {
232 _recStereoHit[j]->setAmb( ambig );
233 if ( ambig == -999 ) _recStereoHit[j]->setflag( -999 );
234 int ambigTruth = _recStereoHit.at( j )->getLrTruth();
235 if ( ambigTruth == -1 ) ambigTruth = 1;
236 else if ( ambigTruth == 1 ) ambigTruth = 0;
237 if ( ambig == ambigTruth ) ambig_correct++;
238
239 _pro_correct = (double)ambig_correct / (double)_hitSize;
240 }
241 }
242 }
243 _tanl = linefit[0]._k;
244 _z0 = linefit[0]._b;
245 if (
m_debug > 0 ) cout <<
"z0 tanl : " << _z0 <<
" " << _tanl << endl;
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330}
bool compare_zsfit(const HoughZsFit::Line &a, const HoughZsFit::Line &b)
void leastFit(Line &linefit, int N)
std::vector< HoughRecHit > _pointCol