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 DTrackTimeBased: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 DTrackTimeBased:THROWN objects will be created!"<<endl;
64 return RESOURCE_UNAVAILABLE;
66 hitselector = hitselectors[0];
76 loop->GetSingle(dParticleID);
86 vector<const DMCThrown*> mcthrowns;
87 vector<const DCDCTrackHit*> cdctrackhits;
88 vector<const DFDCPseudo*> fdcpseudos;
89 vector<const DTrackWireBased*> wbtracks;
91 loop->Get(cdctrackhits);
92 loop->Get(fdcpseudos);
93 loop->Get(wbtracks,
"THROWN");
95 for(
unsigned int i=0; i< mcthrowns.size(); i++){
98 if(fabs(thrown->
charge())<1)
continue;
102 *
static_cast<DKinematicData*
>(track) = *static_cast<const DKinematicData*>(thrown);
108 track->AddAssociatedObject(thrown);
114 unsigned int locNumInitialReferenceTrajectories = rt_pool.size();
115 if(rt_pool.size()<=_data.size()){
122 if(locNumInitialReferenceTrajectories == rt_pool.size())
134 vector<const DCDCTrackHit*> cdchits;
135 vector<const DFDCPseudo*> fdchits;
138 for(
unsigned int j=0; j<cdchits.size(); ++j)track->AddAssociatedObject(cdchits[j]);
139 for(
unsigned int j=0; j<fdchits.size(); ++j)track->AddAssociatedObject(fdchits[j]);
151 vector<DTrackFitter::pull_t> pulls;
153 track->
chisq = chisq;
155 track->
pulls = pulls;
173 for(
unsigned int j=0; j<wbtracks.size(); j++){
174 if(wbtracks[j]->candidateid == track->
candidateid){
175 track->AddAssociatedObject(wbtracks[j]);
184 _data.push_back(track);
188 for(
size_t loc_i = 0; loc_i < _data.size(); ++loc_i)
190 vector<const DCDCTrackHit*> locCDCTrackHits;
191 _data[loc_i]->Get(locCDCTrackHits);
193 vector<const DFDCPseudo*> locFDCPseudos;
194 _data[loc_i]->Get(locFDCPseudos);
196 _data[loc_i]->dCDCRings = dParticleID->Get_CDCRingBitPattern(locCDCTrackHits);
197 _data[loc_i]->dFDCPlanes = dParticleID->Get_FDCPlaneBitPattern(locFDCPseudos);
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.
oid_t trackid
id of DTrackWireBased corresponding to this track
void AddHits(vector< const DCDCTrackHit * > cdchits)
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
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)
jerror_t brun(JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
oid_t candidateid
id of DTrackCandidate corresponding to this track
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
DGeometry * GetDGeometry(unsigned int run_number)
void SetDRootGeom(const DRootGeom *RootGeom)
int Ndof
Number of degrees of freedom in the fit.
double charge(void) const
void setPID(Particle_t locPID)
vector< DTrackFitter::pull_t > pulls
Holds pulls used in chisq calc. (not including off-diagonals)
const DVector3 & momentum(void) const
jerror_t evnt(JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
int dNumHitsMatchedToThrown
const DTrackFitter * fitter
DTrackTimeBased_factory_THROWN()
int myid
id of this particle from original generator
Particle_t PID(void) const