15# if defined( __EXTENSIONS__ )
18# define __EXTENSIONS__
22#elif defined( __GNUC__ )
23# if defined( _XOPEN_SOURCE )
31#include "TrkReco/TMDCUtil.h"
32#include "TrkReco/TMDCWireHitMC.h"
33#include "TrkReco/TTrack.h"
34#include "TrkReco/TTrackHEP.h"
35#include "TrkReco/TTrackMC.h"
39#include "MdcTables/MdcTables.h"
42# define DBL_MIN 2.2250738585072014E-308
43# define FLT_MIN 1.175494351E-38F
46TTrackMC::TTrackMC(
const TTrack&
t )
50 , _wireFraction( -999. )
51 , _wireFractionHEP( -999. )
53 , _ptFraction( -999. )
54 , _pzFraction( -999. )
55 , _ptResidual( -999. )
56 , _pzResidual( -999. )
139 std::cout << _t.name() <<
":";
140 std::cout <<
"state=" << _state <<
":";
141 if ( _quality &
TTrackGood ) std::cout <<
"good :";
142 else if ( _quality &
TTrackGhost ) std::cout <<
"ghost :";
143 else if ( _quality &
TTrackBad ) std::cout <<
"bad :";
144 else if ( _quality &
TTrackCharge ) std::cout <<
"bad :";
145 else if ( _quality &
TTrackGarbage ) std::cout <<
"garbage:";
146 else std::cout <<
"classification error:";
149 std::cout << _hepID <<
":";
150 std::cout << _wireFraction <<
"," << _wireFractionHEP <<
":";
151 std::cout << _ptFraction <<
"," << _pzFraction;
152 std::cout << std::endl;
155void TTrackMC::compare(
void ) {
159 int id = _hep->
pType();
161 if ( aId == 11 || aId == 13 || aId == 15 )
id *= -1;
164 if ( (
int)_t.
charge() *
id > 0 ) _charge =
true;
169 unsigned n = list.length();
173 for (
unsigned i = 0; i <
n; i++ )
176 if ( inner->
hit()->
mc()->
hep() == _hep )
183 list.remove( inner );
185 Helix hHep =
Helix( vHep, pHep, copysign( 1.,
id ) );
186 hHep.
pivot( _t.helix().pivot() );
192 std::cout <<
"TTrackMC::compare !!! something wrong with mc hits" << std::endl;
214 _residual = _t.p() - pHep;
215 _cosOpen = pHep.unit().dot( _t.p().unit() );
219 double ptHep = sqrt( pHep.x() * pHep.x() + pHep.y() * pHep.y() );
220 _ptResidual = pt - ptHep;
221 const Helix& h = _t.helix();
224 double ptError2 = h.
Ea().similarity( dPt );
225 if ( ptError2 < 0.0 )
226 { std::cout << h.
kappa() <<
" " << h.
Ea() <<
" dPt=" << dPt << std::endl; }
227 double ptError = ( ptError2 > 0. ) ? sqrt( ptError2 ) : ( DBL_MIN );
228 _ptPull = ( ptError2 > 0. ) ? ( _ptResidual ) / ptError : ( FLT_MAX );
229 _ptFraction = ( fabs( ptHep ) > ( FLT_MIN ) ) ? _ptResidual / ptHep : 0.0;
233 double pzHep = pHep.z();
234 _pzResidual = pz - pzHep;
237 dPz[4] = 1. / h.
kappa();
238 double pzError2 = h.
Ea().similarity( dPz );
239 if ( pzError2 < 0.0 )
240 { std::cout << h.
kappa() <<
" " << h.
Ea() <<
" dPz=" << dPz << std::endl; }
241 double pzError = ( pzError2 > 0. ) ? sqrt( pzError2 ) : ( DBL_MIN );
242 _pzPull = ( pzError2 > 0. ) ? ( _pzResidual ) / pzError : ( FLT_MAX );
243 _pzFraction = (
abs( pzHep ) > FLT_MIN ) ? ( _pzResidual / pzHep ) : ( FLT_MAX );
246void TTrackMC::classify(
void ) {
253 if ( fabs( _ptFraction ) < .1 ) _quality |=
TTrackPt;
254 if ( fabs( _pzFraction ) < .1 ) _quality |=
TTrackPz;
255 float momResidual = sqrt( _ptResidual * _ptResidual + _pzResidual * _pzResidual );
261 if ( _wireFraction < 0.8 )
return;
266 if ( !_charge )
return;
280 std::string matching;
285 else matching =
"bad";
295 if ( quality &
TTrackGood )
return std::string(
"Good" );
296 else if ( quality &
TTrackGhost )
return std::string(
"Ghost" );
297 else if ( quality &
TTrackBad )
return std::string(
"Bad" );
298 else if ( quality &
TTrackCharge )
return std::string(
"Charge" );
299 else if ( quality &
TTrackGarbage )
return std::string(
"Garbage" );
300 return std::string(
"Unknown" );
CLHEP::Hep3Vector Vector3
void bitDisplay(unsigned)
TMLink * InnerMost(const AList< TMLink > &links)
returns the inner(outer)-most link.
#define TTrackMatchingLoose
#define TTrackMatchingTight
#define TTrackMatchingLoose
#define TTrackMatchingTight
std::string TrackMCQualityString(unsigned quality)
std::string TrackMCQualityString(unsigned quality)
std::string TrackMCStatus(unsigned quality)
Hep3Vector momentum(double dPhi=0.) const
returns momentum vector after rotating angle dPhi in phi direction.
const HepSymMatrix & Ea(void) const
returns error matrix.
const HepPoint3D & pivot(void) const
returns pivot position.
const Hep3Vector & momentum(void) const
returns momentum vector at the entrance.
const TTrackHEP *const hep(void) const
returns a pointer to a GEN_HEPEVT.
const HepPoint3D & entrance(void) const
returns an entrance point.
const TMDCWireHitMC *const mc(void) const
returns a pointer to TMDCWireHitMC.
A class to relate TMDCWireHit and TTrack objects.
const TMDCWireHit * hit(void) const
returns a pointer to a hit.
int pType(void) const
returns particle type.
A class to have MC information of TTrack.
virtual ~TTrackMC()
Destructor.
void update(void)
updates information.
unsigned quality(void) const
returns quality.
void dump(const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
dumps debug information.
std::string qualityString(void) const
returns quality.
A class to represent a track in tracking.
const AList< TMLink > & finalHits(void) const
finds cathode hits associated to this track.
double charge(void) const
returns charge.