29 gPARMS->SetDefaultParameter(
"TRKFIT:CDC_MATCH_CUT",CDC_MATCH_CUT);
31 gPARMS->SetDefaultParameter(
"TRKFIT:FDC_MATCH_CUT",FDC_MATCH_CUT);
47 eventLoop->GetSingle(dPIDAlgorithm);
50 if (geom->
GetDIRCZ(dDIRCz)==
false) dDIRCz=1000.;
52 vector<double>tof_face;
53 geom->
Get(
"//section/composition/posXYZ[@volume='ForwardTOF']/@X_Y_Z",
55 vector<double>tof_plane;
56 geom->
Get(
"//composition[@name='ForwardTOF']/posXYZ[@volume='forwardTOF']/@X_Y_Z/plane[@value='0']", tof_plane);
57 dTOFz=tof_face[2]+tof_plane[2];
58 geom->
Get(
"//composition[@name='ForwardTOF']/posXYZ[@volume='forwardTOF']/@X_Y_Z/plane[@value='1']", tof_plane);
59 dTOFz+=tof_face[2]+tof_plane[2];
65 for (
int i=0;i<30;i++){
67 for (
unsigned int j=0;j<sc_pos[i].size()-1;j++){
68 double dx=sc_pos[i][j+1].x()-sc_pos[i][j].x();
69 double dy=sc_pos[i][j+1].y()-sc_pos[i][j].y();
70 double dz=sc_pos[i][j+1].z()-sc_pos[i][j].z();
71 temp.push_back(
DVector3(dx/dz,dy/dz,1.));
73 sc_dir.push_back(temp);
75 SC_END_NOSE_Z=sc_pos[0][12].z();
76 SC_BARREL_R=sc_pos[0][0].Perp();
77 SC_PHI_SECTOR1=sc_pos[0][0].Phi();
81 vector<const DTrackFinder *> finders;
82 eventLoop->Get(finders);
85 _DBG_<<
"Unable to get a DTrackFinder object!"<<endl;
86 return RESOURCE_UNAVAILABLE;
93 vector<const DTrackFitter *> fitters;
94 eventLoop->Get(fitters,
"StraightTrack");
96 _DBG_<<
"Unable to get a DTrackFitter object!"<<endl;
97 return RESOURCE_UNAVAILABLE;
112 vector<const DTrackWireBased*> tracks;
116 vector<const DCDCTrackHit *>cdchits;
118 vector<const DFDCPseudo *>fdchits;
122 vector<const DSCHit*>sc_hits;
126 vector<const DTOFPoint*> tof_points;
127 loop->Get(tof_points);
130 vector<const DBCALShower*>bcal_showers;
131 loop->Get(bcal_showers);
133 vector<const DFCALShower*>fcal_showers;
134 loop->Get(fcal_showers);
137 for (
unsigned int i=0;i<tracks.size();i++){
146 for (
unsigned int j=0;j<cdchits.size();j++){
147 double d=finder->FindDoca(pos,dir,cdchits[j]->wire->origin,
148 cdchits[j]->wire->udir);
151 for (
unsigned int i=0;i<fdchits.size();i++){
153 double tx=dir.x()/pz;
154 double ty=dir.y()/pz;
155 double dz=fdchits[i]->wire->origin.z()-pos.z();
156 DVector2 predpos(pos.x()+tx*dz,pos.y()+ty*dz);
157 DVector2 diff=predpos-fdchits[i]->xy;
158 if (diff.Mod()<FDC_MATCH_CUT)
fitter->
AddHit(fdchits[i]);
164 GetStartTime(track,sc_hits,tof_points,bcal_showers,fcal_showers,t0,
175 timebased_track->
FOM = TMath::Prob(timebased_track->
chisq, timebased_track->
Ndof);
184 for (
unsigned int k=0;k<cdchits_on_track.size();k++){
185 timebased_track->AddAssociatedObject(cdchits_on_track[k]);
187 for (
unsigned int k=0;k<fdchits_on_track.size();k++){
188 timebased_track->AddAssociatedObject(fdchits_on_track[k]);
193 timebased_track->AddAssociatedObject(track);
194 timebased_track->
dCDCRings = dPIDAlgorithm->Get_CDCRingBitPattern(cdchits_on_track);
195 timebased_track->
dFDCPlanes = dPIDAlgorithm->Get_FDCPlaneBitPattern(fdchits_on_track);
201 _data.push_back(timebased_track);
228 vector<const DSCHit*>&sc_hits,
229 vector<const DTOFPoint*>&tof_points,
230 vector<const DBCALShower*>&bcal_showers,
231 vector<const DFCALShower*>&fcal_showers,
236 double locStartTime = track_t0;
246 locStartTime = track_t0;
254 locStartTime = track_t0;
262 locStartTime=track_t0;
map< DetectorSystem_t, vector< DTrackFitter::Extrapolation_t > > extrapolations
vector< pull_t > & GetPulls(void)
float chisq
Chi-squared for the track (not chisq/dof!)
jerror_t init(void)
Called once at program start.
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.
bool Get(string xpath, string &sval) const
const DVector3 & position(void) const
bool GetIsSmoothed(void) const
unsigned int potential_cdc_hits_on_track
bool GetFCALZ(double &z_fcal) const
z-location of front face of CCAL in cm
oid_t candidateid
id of DTrackCandidate corresponding to this track
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
const map< DetectorSystem_t, vector< Extrapolation_t > > & GetExtrapolations(void) const
double GetChisq(void) const
jerror_t fini(void)
Called after last event of last event source has been processed.
void SetFitType(fit_type_t type)
DGeometry * GetDGeometry(unsigned int run_number)
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
void GetStartTime(const DTrackWireBased *track, vector< const DSCHit * > &sc_hits, vector< const DTOFPoint * > &tof_points, vector< const DBCALShower * > &bcal_showers, vector< const DFCALShower * > &fcal_showers, double &t0, DetectorSystem_t &t0_detector) const
unsigned int potential_fdc_hits_on_track
int Ndof
Number of degrees of freedom in the fit.
const vector< const DCDCTrackHit * > & GetCDCFitHits(void) const
void setPID(Particle_t locPID)
const vector< const DFDCPseudo * > & GetFDCFitHits(void) const
vector< DTrackFitter::pull_t > pulls
Holds pulls used in chisq calc. (not including off-diagonals)
void AddHit(const DCDCTrackHit *cdchit)
unsigned int measured_cdc_hits_on_track
const DVector3 & momentum(void) const
fit_status_t FitTrack(const DVector3 &pos, const DVector3 &mom, double q, double mass, double t0=QuietNaN, DetectorSystem_t t0_det=SYS_NULL)
DetectorSystem_t t0_detector(void) const
const DTrackFitter * fitter
oid_t candidateid
which DTrackCandidate this came from
map< DetectorSystem_t, vector< DTrackFitter::Extrapolation_t > > extrapolations
bool GetDIRCZ(double &z_dirc) const
z-location of DIRC in cm
unsigned int measured_fdc_hits_on_track
bool GetStartCounterGeom(vector< vector< DVector3 > > &pos, vector< vector< DVector3 > > &norm) const
const DTrackingData & GetFitParameters(void) const