43 vector<const DTrackFitter *> fitters;
46 _DBG_<<
"Unable to get a DTrackFitter object! NO Charged track fitting will be done!"<<endl;
47 return RESOURCE_UNAVAILABLE;
55 _DBG_<<
"ERROR: Unable to get a DTrackFitter object! Chisq for DTrackWireBased:THROWN will NOT be calculated!"<<endl;
56 return RESOURCE_UNAVAILABLE;
60 vector<const DTrackHitSelector *> hitselectors;
61 loop->Get(hitselectors);
62 if(hitselectors.size()<1){
63 _DBG_<<
"ERROR: Unable to get a DTrackHitSelector object! NO DTrackWireBased:THROWN objects will be created!"<<endl;
64 return RESOURCE_UNAVAILABLE;
66 hitselector = hitselectors[0];
73 loop->GetSingle(dParticleID);
86 vector<const DMCThrown*> mcthrowns;
87 vector<const DCDCTrackHit*> cdctrackhits;
88 vector<const DFDCPseudo*> fdcpseudos;
90 loop->Get(cdctrackhits);
91 loop->Get(fdcpseudos);
93 for(
unsigned int i=0; i< mcthrowns.size(); i++){
96 if(fabs(thrown->
charge())<1)
continue;
100 *
static_cast<DKinematicData*
>(track) = *static_cast<const DKinematicData*>(thrown);
103 track->AddAssociatedObject(thrown);
109 unsigned int locNumInitialReferenceTrajectories = rt_pool.size();
110 if(rt_pool.size()<=_data.size()){
116 if(locNumInitialReferenceTrajectories == rt_pool.size())
128 vector<const DCDCTrackHit*> cdchits;
129 vector<const DFDCPseudo*> fdchits;
132 for(
unsigned int i=0; i<cdchits.size(); i++)track->AddAssociatedObject(cdchits[i]);
133 for(
unsigned int i=0; i<fdchits.size(); i++)track->AddAssociatedObject(fdchits[i]);
145 vector<DTrackFitter::pull_t> pulls;
147 track->
chisq = chisq;
150 track->
pulls = pulls;
154 track->
FOM = numeric_limits<double>::quiet_NaN();
166 _data.push_back(track);
170 for(
size_t loc_i = 0; loc_i < _data.size(); ++loc_i)
172 vector<const DCDCTrackHit*> locCDCTrackHits;
173 _data[loc_i]->Get(locCDCTrackHits);
175 vector<const DFDCPseudo*> locFDCPseudos;
176 _data[loc_i]->Get(locFDCPseudos);
178 _data[loc_i]->dCDCRings = dParticleID->Get_CDCRingBitPattern(locCDCTrackHits);
179 _data[loc_i]->dFDCPlanes = dParticleID->Get_FDCPlaneBitPattern(locFDCPseudos);
jerror_t evnt(JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
float chisq
Chi-squared for the track (not chisq/dof!)
The DTrackFitter class is a base class for different charged track fitting algorithms. It does not actually fit the track itself, but provides the interface and some common support features most algorthims will need to implement.
void AddHits(vector< const DCDCTrackHit * > cdchits)
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
DTrackWireBased_factory_THROWN()
void SetMass(double mass)
const DVector3 & position(void) const
void Swim(const DVector3 &pos, const DVector3 &mom, double q=-1000.0, const TMatrixFSym *cov=NULL, double smax=2000.0, const DCoordinateSystem *wire=NULL)
void SetDGeometry(const DGeometry *geom)
virtual double ChiSq(fit_type_t fit_type, DReferenceTrajectory *rt, double *chisq_ptr=NULL, int *dof_ptr=NULL, vector< pull_t > *pulls_ptr=NULL)=0
vector< DTrackFitter::pull_t > pulls
Holds pulls used in chisq calc. (not including off-diagonals)
DGeometry * GetDGeometry(unsigned int run_number)
void SetDRootGeom(const DRootGeom *RootGeom)
double charge(void) const
int Ndof
Number of degrees of freedom in the fit.
const DVector3 & momentum(void) const
const DTrackFitter * fitter
oid_t candidateid
which DTrackCandidate this came from
jerror_t brun(JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.