BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TrkSimpleRep.cxx
Go to the documentation of this file.
1// File and Version Information:
2// $Id: TrkSimpleRep.cxx,v 1.1.1.1 2005/04/21 06:26:56 maqm Exp $
3//
4// Description:
5// implementation for TrkSimpleHelix
6//
7// Author(s): Steve Schaffner
8//------------------------------------------------------------------------
9// #include "BaBar/BaBar.h"
10#include "TrkFitter/TrkSimpleRep.h"
11#include "CLHEP/Vector/ThreeVector.h"
12#include "MdcRecoUtil/BesPointErr.h"
13#include "MdcRecoUtil/BesVectorErr.h"
14#include "PatBField/BField.h" //yzhang debug
15#include "TrkBase/TrkErrCode.h"
16#include "TrkBase/TrkHitOnTrk.h"
17#include "TrkBase/TrkMomCalculator.h"
18#include "TrkBase/TrkParams.h"
19#include "TrkBase/TrkPoca.h"
20#include "TrkBase/TrkRecoTrk.h"
21#include "TrkBase/TrkSimpTraj.h"
22
24
26 : TrkRep( inHots, trk, hypo ) {
27 setChisq( -1. );
28}
29
30TrkSimpleRep::TrkSimpleRep( TrkRecoTrk* trk, PdtPid::PidType hypo, int nact, int nsv, int ndc,
31 double chi2, double stFndRng, double endFndRng )
32 : TrkRep( trk, hypo, nact, nsv, ndc, stFndRng, endFndRng ) {
33 setChisq( chi2 );
34}
35
36// copy ctor
38 : TrkRep( right, trk, hypo ), _fitter( right._fitter ), _chisq( right._chisq ) {
39 _hotList.reset( right.hotList()->clone( this ) );
40}
41
43
45 _chisq = right._chisq;
46 TrkRep::operator=( right );
47 return *this;
48}
49
51 if ( !hitCapable() )
52 {
53 setValid( false );
54 return TrkErrCode( TrkErrCode::fail, 100, "Tried to fit without a list of hits." );
55 }
56 TrkErrCode error = _fitter.fit( *hotList(), simpTraj() );
57 if ( error.failure() ) { setValid( false ); }
58 else
59 {
60 setValid( true );
61 setCurrent( true );
62 }
63 setChisq( _fitter.lastChisq() );
64 return error;
65}
66
67int TrkSimpleRep::nDof() const { return nActive() - simpTraj().parameters()->nPar(); }
68
69double TrkSimpleRep::chisq() const {
70 // Note possible inefficiency in calling virtual simpTraj(); implementation
71 // could be moved to derived classes instead.
72 return _chisq;
73 // return simpTraj().parameters()->chisquared();
74}
75
76void TrkSimpleRep::setChisq( double c ) {
77 // See inefficiency comment above.
78 // simpTraj().parameters()->setChisquared(c);
79 _chisq = c;
80}
81
82Hep3Vector TrkSimpleRep::momentum( double fltL ) const {
83 const BField& theField = parentTrack()->bField();
84 return TrkMomCalculator::vecMom( simpTraj(), theField, fltL );
85}
86
87double TrkSimpleRep::pt( double fltL ) const {
88 const BField& theField = parentTrack()->bField();
89 return TrkMomCalculator::ptMom( simpTraj(), theField, fltL );
90}
91
93 const BField& theField = parentTrack()->bField();
94 return TrkMomCalculator::charge( simpTraj(), theField, 0. );
95}
96
98 const BField& theField = parentTrack()->bField();
99 return TrkMomCalculator::errMom( simpTraj(), theField, fltL );
100}
101
102/*
103 * added on 7/17/98 to accomplish vertexing interface (M.Bondioli)
104 * implementation temporarily needed to assure no compile crashes
105 * elsewhere.
106 */
107
108HepMatrix TrkSimpleRep::posmomCov( double fltL ) const {
109 const BField& theField = parentTrack()->bField();
110 return TrkMomCalculator::posmomCov( simpTraj(), theField, fltL );
111}
112
113void TrkSimpleRep::getAllCovs( double fltL, HepSymMatrix& xxCov, HepSymMatrix& ppCov,
114 HepMatrix& xpCov ) const {
115 const BField& theField = parentTrack()->bField();
116 TrkMomCalculator::getAllCovs( simpTraj(), theField, fltL, xxCov, ppCov, xpCov );
117}
118
119void TrkSimpleRep::getAllWeights( double fltL, HepVector& pos, HepVector& mom,
120 HepSymMatrix& xxWeight, HepSymMatrix& ppWeight,
121 HepMatrix& xpWeight ) const {
122 const BField& theField = parentTrack()->bField();
123 TrkMomCalculator::getAllWeights( simpTraj(), theField, fltL, pos, mom, xxWeight, ppWeight,
124 xpWeight );
125}
126
127void TrkSimpleRep::getAllWeights( const HepPoint3D& pt, HepVector& pos, HepVector& mom,
128 HepSymMatrix& xxWeight, HepSymMatrix& ppWeight,
129 HepMatrix& xpWeight ) const {
130 double fltL = 0;
131 TrkPoca poca( traj(), fltL, pt );
132 fltL = poca.flt1();
133 getAllWeights( fltL, pos, mom, xxWeight, ppWeight, xpWeight );
134}
HepGeom::Point3D< double > HepPoint3D
virtual const TrkDifTraj & traj() const =0
void setValid(bool v)
virtual TrkHotList * clone(TrkBase::Functors::cloneHot) const =0
static Hep3Vector vecMom(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen)
static double ptMom(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen)
static void getAllWeights(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen, HepVector &pos, HepVector &mom, HepSymMatrix &xxWeight, HepSymMatrix &ppWeight, HepMatrix &xpWeight)
static void getAllCovs(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen, HepSymMatrix &xxCov, HepSymMatrix &ppCov, HepMatrix &xpCov)
static int charge(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen)
static HepMatrix posmomCov(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen)
static BesVectorErr errMom(const TrkSimpTraj &, const MdcPatRec::BField &, double fltlen)
virtual int nActive() const
Definition TrkRep.cxx:263
TrkRep & operator=(const TrkRep &)
Definition TrkRep.cxx:98
TrkRep(const TrkHotList &inHots, TrkRecoTrk *trk, PdtPid::PidType hypo)
Definition TrkRep.cxx:46
virtual BesVectorErr momentumErr(double fltL) const
virtual void getAllCovs(double fltL, HepSymMatrix &xxCov, HepSymMatrix &ppCov, HepMatrix &xpCov) const
virtual TrkSimpTraj & simpTraj()=0
virtual HepMatrix posmomCov(double fltL) const
virtual void getAllWeights(double fltL, HepVector &pos, HepVector &mom, HepSymMatrix &xxWeight, HepSymMatrix &ppWeight, HepMatrix &xpWeight) const
TrkSimpleRep & operator=(const TrkSimpleRep &right)
int nDof() const
virtual double pt(double fltL=0.) const
double chisq() const
virtual TrkErrCode fit()
virtual int charge() const
TrkSimpleRep(const TrkHotList *, TrkRecoTrk *, PdtPid::PidType)
virtual Hep3Vector momentum(double fltL=0.) const
void setChisq(double c)
virtual ~TrkSimpleRep()