11 #include <JANA/JEventLoop.h>
44 vector<const DTrackFitter *> fitters;
47 _DBG_<<
"Unable to get a DTrackFitter object! NO Charged track fitting will be done!"<<endl;
48 return RESOURCE_UNAVAILABLE;
56 _DBG_<<
"ERROR: Unable to get a DTrackFitter object! Chisq for DTrackCandidate:THROWN will NOT be calculated!"<<endl;
57 return RESOURCE_UNAVAILABLE;
61 vector<const DTrackHitSelector *> hitselectors;
62 loop->Get(hitselectors);
63 if(hitselectors.size()<1){
64 _DBG_<<
"ERROR: Unable to get a DTrackHitSelector object! NO DTrackCandidate:THROWN objects will be created!"<<endl;
65 return RESOURCE_UNAVAILABLE;
67 hitselector = hitselectors[0];
70 loop->GetSingle(dParticleID);
80 vector<const DMCThrown*> mcthrowns;
81 vector<const DCDCTrackHit*> cdctrackhits;
82 vector<const DFDCPseudo*> fdcpseudos;
84 loop->Get(cdctrackhits);
85 loop->Get(fdcpseudos);
87 for(
unsigned int i=0; i< mcthrowns.size(); i++){
91 if(fabs(thrown->
charge())<1)
continue;
96 *kd_candidate = *kd_thrown;
99 candidate->AddAssociatedObject(thrown);
105 unsigned int locNumInitialReferenceTrajectories = rt_pool.size();
106 if(rt_pool.size()<=_data.size()){
112 if(locNumInitialReferenceTrajectories == rt_pool.size())
121 vector<const DCDCTrackHit*> cdchits;
122 vector<const DFDCPseudo*> fdchits;
125 for(
unsigned int i=0; i<cdchits.size(); i++)candidate->AddAssociatedObject(cdchits[i]);
126 for(
unsigned int i=0; i<fdchits.size(); i++)candidate->AddAssociatedObject(fdchits[i]);
139 candidate->
chisq = chisq;
140 candidate->
Ndof = Ndof;
142 candidate->
chisq = 0.0;
146 _data.push_back(candidate);
150 for(
size_t loc_i = 0; loc_i < _data.size(); ++loc_i)
152 vector<const DCDCTrackHit*> locCDCTrackHits;
153 _data[loc_i]->Get(locCDCTrackHits);
155 vector<const DFDCPseudo*> locFDCPseudos;
156 _data[loc_i]->Get(locFDCPseudos);
158 _data[loc_i]->dCDCRings = dParticleID->Get_CDCRingBitPattern(locCDCTrackHits);
159 _data[loc_i]->dFDCPlanes = dParticleID->Get_FDCPlaneBitPattern(locFDCPseudos);
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)
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)
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
DTrackCandidate_factory_THROWN()
const DReferenceTrajectory * rt
pointer to reference trjectory representing this track (if any)
double charge(void) const
<A href="index.html#legend"> <IMG src="CORE.png" width="100"> </A>
float chisq
Chi-squared for the track (not chisq/dof!)
const DVector3 & momentum(void) const
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
const DTrackFitter * fitter
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
int Ndof
Number of degrees of freedom in the fit.