BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TBuilderCurl Class Reference

A class to build a Curl track. More...

#include <TBuilderCurl.h>

Inheritance diagram for TBuilderCurl:

Public Member Functions

 TBuilderCurl (const std::string &name)
 Constructor.
virtual ~TBuilderCurl ()
 Destructor.
TTrackbuildStereo (TTrack &track, const AList< TMLink > &) const
 appends stereo hits to a track.
TTrackbuildStereoMC (TTrack &track, const AList< TMLink > &) const
void setParam (const TCurlFinderParameter &)
TTrackbuildStereo (TTrack &track, const AList< TMLink > &, const AList< TMLink > &) const
 TBuilderCurl (const std::string &name)
 Constructor.
virtual ~TBuilderCurl ()
 Destructor.
TTrackbuildStereo (TTrack &track, const AList< TMLink > &) const
 appends stereo hits to a track.
TTrackbuildStereoMC (TTrack &track, const AList< TMLink > &) const
void setParam (const TCurlFinderParameter &)
TTrackbuildStereo (TTrack &track, const AList< TMLink > &, const AList< TMLink > &) const
 TBuilderCurl (const std::string &name)
 Constructor.
virtual ~TBuilderCurl ()
 Destructor.
TTrackbuildStereo (TTrack &track, const AList< TMLink > &) const
 appends stereo hits to a track.
TTrackbuildStereoMC (TTrack &track, const AList< TMLink > &) const
void setParam (const TCurlFinderParameter &)
TTrackbuildStereo (TTrack &track, const AList< TMLink > &, const AList< TMLink > &) const
Public Member Functions inherited from TBuilder0
 TBuilder0 (const std::string &name)
 Constructor.
 TBuilder0 (const std::string &name, float salvageLevel)
 Constructor with salvage level.
 TBuilder0 (const std::string &name, float stereoZ3, float stereoZ4, float stereoChisq3, float stereoChisq4, float stereoMaxSigma, unsigned fittingCorrections, float salvageLevel)
 Constructor with parameters.
virtual ~TBuilder0 ()
 Destructor.
const std::string & name (void) const
 returns name.
void dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
 dumps debug information.
const TMSelectortrackSelector (void) const
 returns a track selector.
TTrackbuildRphi (const AList< TMLink > &) const
 builds a r/phi track from TMLinks or from Segments.
TTrackbuildStereo0 (TTrack &track, const AList< TMLink > &) const
 appends stereo hits to a track. (old version)
void appendClusters (TTrack &track, const AList< TMLink > &) const
 appends TMLinks in a list.
void salvage (TTrack &track, AList< TMLink > &list) const
 salvages links in a list. Used links will be removed from a list.
virtual int fit (TTrackBase &) const
 fits a track using a private fitter.
virtual const TMSelectortrackSelector (const TMSelector &)
 sets a track selector.
 TBuilder0 (const std::string &name)
 Constructor.
 TBuilder0 (const std::string &name, float salvageLevel)
 Constructor with salvage level.
 TBuilder0 (const std::string &name, float stereoZ3, float stereoZ4, float stereoChisq3, float stereoChisq4, float stereoMaxSigma, unsigned fittingCorrections, float salvageLevel)
 Constructor with parameters.
virtual ~TBuilder0 ()
 Destructor.
const std::string & name (void) const
 returns name.
void dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
 dumps debug information.
const TMSelectortrackSelector (void) const
 returns a track selector.
TTrackbuildRphi (const AList< TMLink > &) const
 builds a r/phi track from TMLinks or from Segments.
TTrackbuildStereo0 (TTrack &track, const AList< TMLink > &) const
 appends stereo hits to a track. (old version)
void appendClusters (TTrack &track, const AList< TMLink > &) const
 appends TMLinks in a list.
void salvage (TTrack &track, AList< TMLink > &list) const
 salvages links in a list. Used links will be removed from a list.
virtual int fit (TTrackBase &) const
 fits a track using a private fitter.
virtual const TMSelectortrackSelector (const TMSelector &)
 sets a track selector.
 TBuilder0 (const std::string &name)
 Constructor.
 TBuilder0 (const std::string &name, float salvageLevel)
 Constructor with salvage level.
 TBuilder0 (const std::string &name, float stereoZ3, float stereoZ4, float stereoChisq3, float stereoChisq4, float stereoMaxSigma, unsigned fittingCorrections, float salvageLevel)
 Constructor with parameters.
virtual ~TBuilder0 ()
 Destructor.
const std::string & name (void) const
 returns name.
void dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
 dumps debug information.
const TMSelectortrackSelector (void) const
 returns a track selector.
TTrackbuildRphi (const AList< TMLink > &) const
 builds a r/phi track from TMLinks or from Segments.
TTrackbuildStereo0 (TTrack &track, const AList< TMLink > &) const
 appends stereo hits to a track. (old version)
void appendClusters (TTrack &track, const AList< TMLink > &) const
 appends TMLinks in a list.
void salvage (TTrack &track, AList< TMLink > &list) const
 salvages links in a list. Used links will be removed from a list.
virtual int fit (TTrackBase &) const
 fits a track using a private fitter.
virtual const TMSelectortrackSelector (const TMSelector &)
 sets a track selector.

Additional Inherited Members

Protected Attributes inherited from TBuilder0
TMSelector _circleSelector
TMSelector _trackSelector
TMSelector _lineSelector
float _stereoZ3
float _stereoZ4
float _stereoChisq3
float _stereoChisq4
float _stereoMaxSigma

Detailed Description

A class to build a Curl track.

Definition at line 53 of file InstallArea/x86_64-el9-gcc13-dbg/include/TrkReco/TBuilderCurl.h.

Constructor & Destructor Documentation

◆ TBuilderCurl() [1/3]

TBuilderCurl::TBuilderCurl ( const std::string & name)

Constructor.

Definition at line 58 of file TBuilderCurl.cxx.

59 : TBuilder0( name ), _fitter( "TBuilderCurl Fitter" ), m_pmgnIMF( nullptr ) {
60
61#if 0
62// if(m_param.ON_CORRECTION){
63// _fitter.sag(true);
64// _fitter.propagation(true);
65// _fitter.tof(true);
66// }
67 if (m_param.ON_CORRECTION & 1) _fitter.sag(true);
68 if (m_param.ON_CORRECTION & 2) _fitter.propagation(true);
69 if (m_param.ON_CORRECTION & 4) _fitter.tof(true);
70#endif
71}
const std::string & name(void) const
returns name.
TBuilder0(const std::string &name)
Constructor.
Definition TBuilder0.cxx:31

◆ ~TBuilderCurl() [1/3]

TBuilderCurl::~TBuilderCurl ( )
virtual

Destructor.

Definition at line 73 of file TBuilderCurl.cxx.

73 {
74 // if(m_param.SVD_RECONSTRUCTION){
75 // delete m_svdFinder;
76 // delete m_svdAssociator;
77 // }
78}

◆ TBuilderCurl() [2/3]

TBuilderCurl::TBuilderCurl ( const std::string & name)

Constructor.

◆ ~TBuilderCurl() [2/3]

virtual TBuilderCurl::~TBuilderCurl ( )
virtual

Destructor.

◆ TBuilderCurl() [3/3]

TBuilderCurl::TBuilderCurl ( const std::string & name)

Constructor.

◆ ~TBuilderCurl() [3/3]

virtual TBuilderCurl::~TBuilderCurl ( )
virtual

Destructor.

Member Function Documentation

◆ buildStereo() [1/6]

TTrack * TBuilderCurl::buildStereo ( TTrack & track,
const AList< TMLink > & stereoList ) const
virtual

appends stereo hits to a track.

Reimplemented from TBuilder0.

Definition at line 168 of file TBuilderCurl.cxx.

168 {
169 return NULL;
170}

◆ buildStereo() [2/6]

TTrack * TBuilderCurl::buildStereo ( TTrack & track,
const AList< TMLink > &  ) const
virtual

appends stereo hits to a track.

Reimplemented from TBuilder0.

◆ buildStereo() [3/6]

TTrack * TBuilderCurl::buildStereo ( TTrack & track,
const AList< TMLink > &  ) const
virtual

appends stereo hits to a track.

Reimplemented from TBuilder0.

◆ buildStereo() [4/6]

TTrack * TBuilderCurl::buildStereo ( TTrack & track,
const AList< TMLink > & stereoList,
const AList< TMLink > & allStereoList ) const

Definition at line 172 of file TBuilderCurl.cxx.

173 {
174#if ( DEBUG_CURL_DUMP + DEBUG_CURL_GNUPLOT + DEBUG_CURL_MC )
175 Belle_event_Manager& evtMgr = Belle_event_Manager::get_manager();
176 debugMcFlag = 1;
177 if ( evtMgr.count() != 0 && evtMgr[0].ExpMC() != 2 ) debugMcFlag = 0; // not MC
178#endif
179
180 AList<TMLink> list = stereoList;
181 unsigned nList = list.length();
182
183 //...gets stereo wires from track.links
184 for ( unsigned i = 0, size = track.links().length(); i < size; ++i )
185 {
186 unsigned superID = ( track.links() )[i]->wire()->superLayerId();
187 if ( superID == 0 || superID == 1 || superID == 5 || superID == 6 || superID == 7 ||
188 superID == 8 )
189 {
190 int ok = 1;
191 for ( unsigned j = 0; j < nList; ++j )
192 {
193 TMLink* l = list[j];
194 if ( l->hit()->wire()->id() == ( track.links() )[i]->hit()->wire()->id() )
195 {
196 ok = 0;
197 break;
198 }
199 }
200 if ( ok == 1 ) list.append( ( ( track.links() )[i] ) );
201 }
202 // set LR 2
203 ( track.links() )[i]->leftRight( 2 ); // returns left-right. 0:left, 1:right, 2:wire
204 }
205 for ( unsigned i = 0, size = list.length(); i < size; ++i )
206 {
207 track._links.remove( list[i] );
208 // set LR 2
209 list[i]->leftRight( 2 );
210 }
211
212 if ( list.length() < 2 || list.length() + track.nLinks() < 5 ) return NULL;
213#if DEBUG_CURL_DUMP
214 unsigned debug_stereo_counter1 = 0;
215 for ( unsigned i = 0; i < track.links().length(); ++i )
216 {
217 unsigned superID = ( track.links() )[i]->hit()->wire()->superLayerId();
218 if ( superID == 0 || superID == 1 || superID == 5 || superID == 6 || superID == 7 ||
219 superID == 8 )
220 ++debug_stereo_counter1;
221 }
222 std::cout << "(TBuilderCurl)Fitted Track:";
223 std::cout << ", A# = " << track.links().length() - debug_stereo_counter1;
224 std::cout << ", S# = " << debug_stereo_counter1 << "(==0)";
225 std::cout << ", A+S# = " << track.links().length();
226 std::cout << ", Cand Stereo Wires # = " << list.length() << std::endl;
227 double debugChg = -1.;
228 if ( track.charge() > 0. ) debugChg = 1.;
229 if ( debugChg > 0. ) std::cout << "(TBuilderCurl) Positive Track" << std::endl;
230 else std::cout << "(TBuilderCurl) Negative Track" << std::endl;
231#endif
232
233 //...calculates a circle.
234 double xc2D;
235 double yc2D;
236 double r2D;
237 AList<TMLink> tmpAxialList = track.links();
238 bool err2D = fitWDD( xc2D, yc2D, r2D, tmpAxialList );
239
240 //...using SVD //....Liuqg
241 // double dZSVD, tanLSVD;
242 // bool initWithSVD = buildStereo(track, dZSVD, tanLSVD);
243
244 //...sets arc and z pairs of each stereo hit wire.
245 setArcZ( track, list );
246 AList<TMLink> removeList;
247 for ( unsigned i = 0, size = list.length(); i < size; ++i )
248 {
249 if ( list[i]->arcZ( 0 ).x() == -999. && list[i]->arcZ( 1 ).x() == -999. )
250 removeList.append( list[i] );
251 }
252 list.remove( removeList );
253 if ( list.length() < 2 || list.length() + track.nLinks() < 5 )
254 { // stereo >=2 && axial >= 3
255#if DEBUG_CURL_DUMP
256 std::cout << "(TBuilderCurl) Fail...few wires which can be set Arc-Z # = "
257 << list.length() << std::endl;
258#endif
259 return NULL;
260 }
261#if DEBUG_CURL_DUMP
262 std::cout << "(TBuilderCurl) Cand Stereo Wires which can be set Arc-Z # = " << list.length()
263 << std::endl;
264 plotArcZ( list, 0., 0., 0 );
265#endif
266
267#if 0
268 //...separates
269 AList<TMLink> layer[18];
270 for(unsigned i = 0, size = list.length(); i < size; ++i){
271 layer[list[i]->wire()->layer()->axialStereoLayerId()].append(*list[i]);
272 }
273
274# if DEBUG_CURL_DUMP
275 for(int i=0;i<18;++i){
276 if(layer[i].length())
277 std::cout << "(TBuilderCurl) Cand Stereo Wires which can be set Arc-Z # = "
278 << layer[i].length()
279 << " on " << i << " Layer." << std::endl;
280 }
281# endif
282#endif
283
284 // makes a line.
285 AList<TMLink> goodL;
286 AList<HepPoint3D> goodP;
287 double minChi2 = 9999.;
288 double goodA = 9999.;
289 double goodB = 9999.;
290 makeLine( track, list, allStereoList, goodL, minChi2, goodA, goodB, goodP );
291 HepAListDeleteAll( goodP );
292
293#if DEBUG_CURL_DUMP
294 std::cout << "(TBuilderCurl) a = " << goodA << ", b = " << goodB
295 << " (after makeLine-function)" << std::endl;
296#endif
297
298 // refits
299 static TRobustLineFitter rfitter( "Can you work well?" );
300 TMLine newLine0( goodL );
301 if ( rfitter.fit( newLine0 ) != 0 )
302 {
303#if DEBUG_CURL_DUMP
304 std::cout << "(TBuilderCurl) Fail...linefitting...fail." << std::endl;
305#endif
306 return NULL;
307 }
308
309#if DEBUG_CURL_DUMP
310 std::cout << "(TBuilderCurl) a = " << newLine0.a() << ", b = " << newLine0.b()
311 << " (after robustline-fit)" << std::endl;
312#endif
313
314 //...appends at last chance
315 unsigned nGoodL = goodL.length();
316 list.remove( goodL );
317 AList<TMLink> goodL2;
318 if ( m_param.CURL_VERSION == 0 )
319 { // default
320 if ( fabs( newLine0.b() ) < 10. )
321 {
322 appendPoints( list, goodL2, newLine0.a(), newLine0.b(), track,
323 m_param.Z_DIFF_FOR_LAST_ATTEND );
324 }
325 else
326 { // in case of bad result of robustLineFitter. (2001/04/04)
327 appendPoints( list, goodL2, goodA, goodB, track, m_param.Z_DIFF_FOR_LAST_ATTEND );
328 }
329 }
330 else
331 {
332 // same with b20010409_2122 at least
333 appendPoints( list, goodL2, newLine0.a(), newLine0.b(), track,
334 m_param.Z_DIFF_FOR_LAST_ATTEND );
335 }
336 goodL.append( goodL2 );
337 TMLine newLine( goodL );
338
339 //...refits
340 if ( rfitter.fit( newLine ) != 0 )
341 {
342#if DEBUG_CURL_DUMP
343 std::cout << "(TBuilderCurl) Fail...appending and re-fitting...fail." << std::endl;
344#endif
345 return NULL;
346 }
347
348#if DEBUG_CURL_DUMP
349 std::cout << "(TBuilderCurl) a = " << newLine.a() << ", b = " << newLine.b()
350 << " (after last-append + re-robustline-fit)" << std::endl;
351#endif
352 //...makes 3D tracks
353 const AList<TMLink>& good = newLine.links();
354 track.TTrackBase::append( good );
355 if ( !check( track ) )
356 {
357#if DEBUG_CURL_DUMP
358 std::cout << "(TBuilderCurl) Fail...checking wire numbers...fail." << std::endl;
359#endif
360 return NULL;
361 }
362
363 //...sets initial values
364 Vector a = track.helix().a();
365 if ( err2D )
366 {
367 double tmpA[3];
368 double tmpQ = track.charge() > 0. ? 1. : -1.;
369 tmpA[1] = fmod( atan2( tmpQ * yc2D, tmpQ * xc2D ) + 4. * M_PI, 2. * M_PI );
370 // tmpA[2] = tmpQ*Helix::ConstantAlpha/r2D;
371 // tmpA[2] = tmpQ*333.564095/r2D;
372 tmpA[2] = tmpQ * ( 333.564095 / ( -1000 * ( getPmgnIMF()->getReferField() ) ) ) / r2D;
373 // cout<<"TBuilderCurl::tmpA[2]:
374 // "<<(333.564095/(-1000*(getPmgnIMF()->getReferField())))<<endl;
375 tmpA[0] = xc2D / cos( tmpA[1] ) - tmpQ * r2D;
376 // std::cout << yc2D/sin(tmpA[1])-tmpQ*r2D << std::endl;
377 // std::cout << a[0] << " -0- " << tmpA[0] << std::endl;
378 // std::cout << a[1] << " -1- " << tmpA[1] << std::endl;
379 // std::cout << a[2] << " -2- " << tmpA[2] << std::endl;
380 a[0] = tmpA[0];
381 a[1] = tmpA[1];
382 a[2] = tmpA[2];
383 }
384 a[3] = newLine.b();
385 a[4] = newLine.a();
386 // Liuqg
387 /* if(initWithSVD){ // use SVD initial values if possible.
388 a[3] = dZSVD;
389 a[4] = tanLSVD;
390 }
391 */
392 if ( m_param.CURL_VERSION == 0 )
393 {
394 if ( fabs( a[3] ) > 10. && fabs( goodB ) < 10. )
395 { // 50cm --> 10cm @ 2001/04/04
396 // use initial values when results of RobustFit is bad.
397 a[3] = goodB;
398 a[4] = goodA;
399 }
400 }
401 else
402 {
403 if ( fabs( a[3] ) > 50. && fabs( goodB ) < 50. )
404 {
405 a[3] = goodB;
406 a[4] = goodA;
407 track.TTrackBase::remove( goodL2 );
408 }
409 }
410
411 track._helix->a( a );
412
413#if DEBUG_CURL_DUMP
414 std::cout << "(TBuilderCurl) Created Line: y = " << newLine.a() << " * x + "
415 << newLine.b() << ", size = " << good.length() << std::endl;
416 plotArcZ( const_cast<AList<TMLink>&>( good ), newLine.a(), newLine.b(), 0 );
417#endif
418
419 /* std::cout << "1st : "
420 << track.helix().a()[0] << " " << track.helix().a()[1] << " "
421 << track.helix().a()[2] << " " << track.helix().a()[3] << " "
422 << track.helix().a()[4] << std::endl; */
423
424#if 1
425 // if(m_param.ON_CORRECTION){
426 // _fitter.sag();
427 // _fitter.propagation();
428 // _fitter.tof();
429 // }
430 if ( m_param.ON_CORRECTION & 1 ) _fitter.sag( true );
431 if ( m_param.ON_CORRECTION & 2 ) _fitter.propagation( true );
432 if ( m_param.ON_CORRECTION & 4 ) _fitter.tof( true );
433#endif
434
435 //...fits
436 AList<TMLink> bad;
437 int err = _fitter.fit( track );
438 if ( err < 0 )
439 {
440#if DEBUG_CURL_DUMP
441 std::cout << "(TBuilderCurl) Fail fitting(0)...error code = " << err << std::endl;
442#endif
443 return NULL;
444 }
445 else if ( fabs( track.helix().a()[3] ) > fabs( a[3] ) &&
446 ( fabs( track.helix().a()[3] ) > 50. || // 50cm
447 fabs( track.helix().a()[2] ) > 100. || // 0.01GeV
448 fabs( track.helix().a()[2] ) < 0.1 ) )
449 { // 10GeV
450 // in strange case, set "correction" of wires OFF
451 // and then fit with the initial values.
452 if ( m_param.ON_CORRECTION )
453 {
454 if ( m_param.ON_CORRECTION & 1 ) _fitter.sag( true );
455 if ( m_param.ON_CORRECTION & 2 ) _fitter.propagation( true );
456 if ( m_param.ON_CORRECTION & 4 ) _fitter.tof( true );
457 //_fitter.sag();
458 //_fitter.propagation();
459 //_fitter.tof();
460 track._helix->a( a );
461 // std::cout << "ON --> OFF" << std::endl;
462 }
463 else { return NULL; }
464 }
465
466 /* std::cout << "2nd : "
467 << track.helix().a()[0] << " " << track.helix().a()[1] << " "
468 << track.helix().a()[2] << " " << track.helix().a()[3] << " "
469 << track.helix().a()[4] << std::endl; */
470
471 track.refine( bad, m_param.SELECTOR_MAX_SIGMA * 100. );
472 if ( !check( track ) )
473 {
474#if DEBUG_CURL_DUMP
475 std::cout << "(TBuilderCurl) Fail checking(1)..." << std::endl;
476#endif
477 return NULL;
478 }
479 err = _fitter.fit( track );
480 if ( err < 0 )
481 {
482#if DEBUG_CURL_DUMP
483 std::cout << "(TBuilderCurl) Fail fitting(1)...error code = " << err << std::endl;
484#endif
485 return NULL;
486 }
487 track.refine( bad, m_param.SELECTOR_MAX_SIGMA * 10. );
488 if ( !check( track ) )
489 {
490#if DEBUG_CURL_DUMP
491 std::cout << "(TBuilderCurl) Fail checking(2)..." << std::endl;
492#endif
493 return NULL;
494 }
495 err = _fitter.fit( track );
496 if ( err < 0 )
497 {
498#if DEBUG_CURL_DUMP
499 std::cout << "(TBuilderCurl) Fail fitting(2)...error code = " << err << std::endl;
500#endif
501 return NULL;
502 }
503 track.refine( bad, m_param.SELECTOR_MAX_SIGMA );
504 if ( !check( track ) )
505 {
506#if DEBUG_CURL_DUMP
507 std::cout << "(TBuilderCurl) Fail checking(3)..." << std::endl;
508#endif
509 return NULL;
510 }
511 err = _fitter.fit( track );
512 if ( err < 0 )
513 {
514#if DEBUG_CURL_DUMP
515 std::cout << "(TBuilderCurl) Fail fitting(3)...error code = " << err << std::endl;
516#endif
517 return NULL;
518 }
519
520#if 0
521 for(int i=0;i<track.links().length();++i){
522 if(track.links()[i]->pull() > 36.){
523 std::cout << track.links()[i]->wire()->id()
524 << " :+: " << track.links()[i]->pull() << std::endl;
525 }
526 if(track.links()[i]->hit()->state() & WireHitInvalidForFit)
527 std::cout << "Not Valid For Fit!" << std::endl;
528 //if(!(track.links()[i]->hit()->state() & WireHitFittingValid))
529 //std::cout << "No-Valid For Fit!" << std::endl;
530 }
531#endif
532 track.refine( bad, m_param.SELECTOR_MAX_SIGMA );
533 if ( !check( track ) )
534 {
535#if DEBUG_CURL_DUMP
536 std::cout << "(TBuilderCurl) Fail checking(4)..." << std::endl;
537#endif
538 return NULL;
539 }
540 err = _fitter.fit( track );
541 if ( err < 0 )
542 {
543#if DEBUG_CURL_DUMP
544 std::cout << "(TBuilderCurl) Fail fitting(4)...error code = " << err << std::endl;
545#endif
546 return NULL;
547 }
548
549#if 0
550 for(int i=0;i<track.links().length();++i){
551 if(track.links()[i]->pull() > 36.){
552 std::cout << track.links()[i]->wire()->id()
553 << " :*: " << track.links()[i]->pull() << std::endl;
554 }
555 if(track.links()[i]->hit()->state() & WireHitInvalidForFit)
556 std::cout << "Not Valid For Fit!" << std::endl;
557 //if(!(track.links()[i]->hit()->state() & WireHitFittingValid))
558 //std::cout << "No-Valid For Fit!" << std::endl;
559 }
560#endif
561
562 /* std::cout << "3rd : "
563 << track.helix().a()[0] << " " << track.helix().a()[1] << " "
564 << track.helix().a()[2] << " " << track.helix().a()[3] << " "
565 << track.helix().a()[4] << std::endl; */
566
567 //...tests
568 if ( track.nLinks() < 5 )
569 { // axial + stereo >= 5
570#if DEBUG_CURL_DUMP
571 std::cout << "(TBuilderCurl) Success fitting, but pre-selection...fail." << std::endl;
572#endif
573 return NULL;
574 }
575 if ( fabs( track.impact() ) > m_param.SELECTOR_MAX_IMPACT ||
576 track.pt() < 0.005 || // Pt >= 5MeV
577 fabs( track.pz() ) > m_param.SELECTOR_STRANGE_PZ )
578 {
579#if DEBUG_CURL_DUMP
580 std::cout << "(TBuilderCurl) Success fitting, but selection...fail." << std::endl;
581 std::cout << "(TBuilderCurl) impact = " << track.impact()
582 << std::endl;
583 std::cout << "(TBuilderCurl) pt = " << track.pt()
584 << std::endl;
585 std::cout << "(TBuilderCurl) pz = " << track.pz()
586 << std::endl;
587 std::cout << "(TBuilderCurl) dz = " << track.helix().a()[3]
588 << std::endl;
589#endif
590 return NULL;
591 }
592
593 //...replaces init helix if dz is bad.
594 if ( fabs( track.helix().a()[3] ) > m_param.SELECTOR_REPLACE_DZ &&
595 fabs( a[3] ) < fabs( track.helix().a()[3] ) )
596 { track._helix->a( a ); }
597#if DEBUG_CURL_DUMP
598 std::cout << "(TBuilderCurl) Success Build Stereo!!!" << std::endl;
599#endif
600 return &track;
601}
Double_t x[10]
#define M_PI
Definition TConstant.h:4
const HepVector & a(void) const
returns helix parameters.
const TMDCWire *const wire(void) const
returns a pointer to a TMDCWire.
virtual void refine(AList< TMLink > &list, double maxSigma)
const AList< TMLink > & links(unsigned mask=0) const
unsigned nLinks(unsigned mask=0) const
returns # of masked TMLinks assigned to this track object.
const Helix & helix(void) const
returns helix parameter.
double impact(void) const
returns signed impact parameter to the origin.
double charge(void) const
returns charge.

◆ buildStereo() [5/6]

TTrack * TBuilderCurl::buildStereo ( TTrack & track,
const AList< TMLink > & ,
const AList< TMLink > &  ) const

◆ buildStereo() [6/6]

TTrack * TBuilderCurl::buildStereo ( TTrack & track,
const AList< TMLink > & ,
const AList< TMLink > &  ) const

◆ buildStereoMC() [1/3]

TTrack * TBuilderCurl::buildStereoMC ( TTrack & track,
const AList< TMLink > & stereoList ) const

Definition at line 1047 of file TBuilderCurl.cxx.

1047 {
1048#if DEBUG_CURL_MC
1049 AList<TMLink> list = stereoList;
1050
1051 HepPoint3D center = track.helix().center();
1052 double r = fabs( track.helix().curv() );
1053 for ( unsigned i = 0, size = list.length(); i < size; ++i )
1054 {
1055 HepPoint3D point(
1056 ( list[i]->hit()->mc()->datcdc()->m_xin + list[i]->hit()->mc()->datcdc()->m_xout ) *
1057 0.5,
1058 ( list[i]->hit()->mc()->datcdc()->m_yin + list[i]->hit()->mc()->datcdc()->m_yout ) *
1059 0.5,
1060 0. );
1061 double cosdPhi = -center.dot( ( point - center ).unit() ) / center.mag();
1062 double dPhi;
1063 if ( fabs( cosdPhi ) < 1.0 ) { dPhi = acos( cosdPhi ); }
1064 else if ( cosdPhi >= 1.0 ) { dPhi = 0.; }
1065 else { dPhi = M_PI; }
1066 list[i]->position( HepPoint3D(
1067 r * dPhi,
1068 ( list[i]->hit()->mc()->datcdc()->m_zin + list[i]->hit()->mc()->datcdc()->m_zout ) *
1069 0.5,
1070 0. ) );
1071 /* std::cout << list[i]->wire()->id() << ": "
1072 << point.x() << " "
1073 << point.y() << " "
1074 << (list[i]->hit()->mc()->datcdc()->m_zin+
1075 list[i]->hit()->mc()->datcdc()->m_zout)*0.5 << std::endl; */
1076 }
1077 // std::cout << "A# = " << track.links().length() << ", S# = " << list.length() << std::endl;
1078 double xc2D;
1079 double yc2D;
1080 double r2D;
1081 bool err2D = fitWDD( xc2D, yc2D, r2D, track.links() ); // axial only
1082
1083 TLine0 newLine( list );
1084 if ( newLine.fit() != 0 ) return NULL;
1085 const AList<TMLink>& good = newLine.links();
1086 track.append( good );
1087 Vector a = track.helix().a();
1088 a[3] = newLine.b();
1089 a[4] = newLine.a();
1090 if ( err2D )
1091 {
1092 double tmpA[3];
1093 double tmpQ = track.charge() > 0. ? 1. : -1.;
1094 tmpA[1] = fmod( atan2( tmpQ * yc2D, tmpQ * xc2D ) + 4. * M_PI, 2. * M_PI );
1095 // tmpA[2] = tmpQ*Helix::ConstantAlpha/r2D;
1096 // tmpA[2] = tmpQ*333.564095/r2D;
1097 tmpA[2] = tmpQ * ( 333.564095 / ( -1000 * ( getPmgnIMF()->getReferField() ) ) ) / r2D;
1098 tmpA[0] = xc2D / cos( tmpA[1] ) - tmpQ * r2D;
1099 a[0] = tmpA[0];
1100 a[1] = tmpA[1];
1101 a[2] = tmpA[2];
1102 }
1103 track._helix->a( a );
1104# if 0
1105 std::cout << track.helix().a()[0] << " " << track.helix().a()[1] << " "
1106 << track.helix().a()[2] << " " << track.helix().a()[3] << " "
1107 << track.helix().a()[4] << std::endl;
1108# endif
1109 //...fits
1110 AList<TMLink> bad;
1111 int err = _fitter.fit( track );
1112 if ( err < m_param.ERROR_FOR_HELIX_FIT ) return NULL;
1113 track.refine( bad, m_param.SELECTOR_MAX_SIGMA * 100. );
1114 err = _fitter.fit( track );
1115 if ( err < m_param.ERROR_FOR_HELIX_FIT ) return NULL;
1116 track.refine( bad, m_param.SELECTOR_MAX_SIGMA * 10. );
1117 err = _fitter.fit( track );
1118 if ( err < m_param.ERROR_FOR_HELIX_FIT ) return NULL;
1119 track.refine( bad, m_param.SELECTOR_MAX_SIGMA );
1120 err = _fitter.fit( track );
1121 if ( err < m_param.ERROR_FOR_HELIX_FIT ) return NULL;
1122# if 0
1123 std::cout << track.helix().a()[0] << " " << track.helix().a()[1] << " "
1124 << track.helix().a()[2] << " " << track.helix().a()[3] << " "
1125 << track.helix().a()[4] << std::endl;
1126# endif
1127 // track._helix->a(a); // re-write
1128
1129 //...checks
1130 if ( track.nLinks() < m_param.SELECTOR_NLINKS ) return NULL;
1131 if ( fabs( track.impact() ) > m_param.SELECTOR_MAX_IMPACT ||
1132 track.pt() < m_param.SELECTOR_MIN_PT )
1133 return NULL;
1134 return &track;
1135#else
1136 return NULL;
1137#endif
1138}
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per saves r n generator level $ !Flag for chat level in !Latex Output unit
Definition FoamA.h:90
HepGeom::Point3D< double > HepPoint3D
const HepPoint3D & center(void) const
returns position of helix center(z = 0.);
void append(TMLink &)
appends a TMLink.

◆ buildStereoMC() [2/3]

TTrack * TBuilderCurl::buildStereoMC ( TTrack & track,
const AList< TMLink > &  ) const

◆ buildStereoMC() [3/3]

TTrack * TBuilderCurl::buildStereoMC ( TTrack & track,
const AList< TMLink > &  ) const

◆ setParam() [1/3]

void TBuilderCurl::setParam ( const TCurlFinderParameter & p)

Definition at line 80 of file TBuilderCurl.cxx.

80 {
81 m_param.Z_CUT = p.Z_CUT;
82 m_param.Z_DIFF_FOR_LAST_ATTEND = p.Z_DIFF_FOR_LAST_ATTEND;
83 m_param.SELECTOR_MAX_SIGMA = p.SELECTOR_MAX_SIGMA;
84 m_param.SELECTOR_MAX_IMPACT = p.SELECTOR_MAX_IMPACT;
85 m_param.SELECTOR_STRANGE_PZ = p.SELECTOR_STRANGE_PZ;
86 m_param.SELECTOR_REPLACE_DZ = p.SELECTOR_REPLACE_DZ;
87 m_param.SVD_RECONSTRUCTION = p.SVD_RECONSTRUCTION;
88 m_param.MIN_SVD_ELECTRONS = p.MIN_SVD_ELECTRONS;
89 m_param.ON_CORRECTION = p.ON_CORRECTION;
90 m_param.CURL_VERSION = p.CURL_VERSION;
91#if 1
92 // if(m_param.ON_CORRECTION){
93 // _fitter.sag(true);
94 // _fitter.propagation(true);
95 // _fitter.tof(true);
96 // }
97 if ( m_param.ON_CORRECTION & 1 ) _fitter.sag( true );
98 if ( m_param.ON_CORRECTION & 2 ) _fitter.propagation( true );
99 if ( m_param.ON_CORRECTION & 4 ) _fitter.tof( true );
100#endif
101 // if(m_param.SVD_RECONSTRUCTION){
102 ////m_svdFinder = new TSvdFinder(-1.*(m_param.MIN_SVD_ELECTRONS),
103 //// m_param.MIN_SVD_ELECTRONS);
104 // m_svdAssociator = new TSvdAssociator(-1.*(m_param.MIN_SVD_ELECTRONS),
105 // m_param.MIN_SVD_ELECTRONS);
106 // }
107}

◆ setParam() [2/3]

void TBuilderCurl::setParam ( const TCurlFinderParameter & )

◆ setParam() [3/3]

void TBuilderCurl::setParam ( const TCurlFinderParameter & )

The documentation for this class was generated from the following files: