16 bool locFirstIsNaN = (!(locChargedTrackHypothesis1->
energy() > -1.0) && !(locChargedTrackHypothesis1->
energy() < 1.0));
17 bool locSecondIsNaN = (!(locChargedTrackHypothesis2->
energy() > -1.0) && !(locChargedTrackHypothesis2->
energy() < 1.0));
22 double locE1 = locChargedTrackHypothesis1->
energy() - double(
int(locChargedTrackHypothesis1->
energy()*100.0))/100.0;
23 double locE2 = locChargedTrackHypothesis2->
energy() - double(
int(locChargedTrackHypothesis2->
energy()*100.0))/100.0;
24 return (locE1 < locE2);
33 SetFactoryFlag(NOT_OBJECT_OWNER);
60 vector<const DTrackTimeBased*> locTrackTimeBasedVector;
61 locEventLoop->Get(locTrackTimeBasedVector);
63 vector<const DEventRFBunch*> locEventRFBunches;
64 locEventLoop->Get(locEventRFBunches);
65 if (locEventRFBunches.size() == 0)
69 locEventLoop->GetSingle(locDetectorMatches);
71 map<JObject::oid_t, vector<DChargedTrackHypothesis*> > locChargedTrackHypotheses;
72 for(
size_t loc_i = 0; loc_i < locTrackTimeBasedVector.size(); loc_i++)
79 vector<DChargedTrackHypothesis*> locTracksToSort;
80 map<JObject::oid_t, vector<DChargedTrackHypothesis*> >::iterator locIterator = locChargedTrackHypotheses.begin();
81 for(; locIterator != locChargedTrackHypotheses.end(); ++locIterator)
82 locTracksToSort.push_back(locIterator->second[0]);
86 for(
size_t loc_i = 0; loc_i < locTracksToSort.size(); loc_i++)
88 JObject::oid_t locTrackID = locTracksToSort[loc_i]->Get_TrackTimeBased()->candidateid;
89 _data.insert(_data.end(), locChargedTrackHypotheses[locTrackID].begin(), locChargedTrackHypotheses[locTrackID].end());
103 locCovarianceMatrix->ResizeTo(7, 7);
104 if(locChargedTrackHypothesis->
errorMatrix() !=
nullptr)
105 *locCovarianceMatrix = *(locChargedTrackHypothesis->
errorMatrix());
115 shared_ptr<const DSCHitMatchParams> locSCHitMatchParams;
120 double locPropagatedTime = locSCHitMatchParams->dHitTime - locSCHitMatchParams->dFlightTime;
121 locChargedTrackHypothesis->
setTime(locPropagatedTime);
124 double locPropagatedTimeUncertainty = 0.3;
127 (*locCovarianceMatrix)(6, 6) = 0.3*0.3+locSCHitMatchParams->dFlightTimeVariance;
130 locChargedTrackHypothesis->
Set_T0(locPropagatedTime, locPropagatedTimeUncertainty,
SYS_START);
134 shared_ptr<const DBCALShowerMatchParams> locBCALShowerMatchParams;
135 shared_ptr<const DTOFHitMatchParams> locTOFHitMatchParams;
136 shared_ptr<const DFCALShowerMatchParams> locFCALShowerMatchParams;
137 shared_ptr<const DDIRCMatchParams> locDIRCMatchParams;
151 const DBCALShower* locBCALShower = locBCALShowerMatchParams->dBCALShower;
152 locChargedTrackHypothesis->
setTime(locBCALShower->
t - locBCALShowerMatchParams->dFlightTime);
155 (*locCovarianceMatrix)(6 , 6) = 0.25*0.25+locBCALShowerMatchParams->dFlightTimeVariance;
162 locChargedTrackHypothesis->
setTime(locTOFHitMatchParams->dHitTime - locTOFHitMatchParams->dFlightTime);
165 (*locCovarianceMatrix)(6, 6) = 0.1*0.1+locTOFHitMatchParams->dFlightTimeVariance;
172 const DFCALShower* locFCALShower = locFCALShowerMatchParams->dFCALShower;
173 locChargedTrackHypothesis->
setTime(locFCALShower->
getTime() - locFCALShowerMatchParams->dFlightTime);
176 (*locCovarianceMatrix)(6, 6) = 0.7*0.7+locFCALShowerMatchParams->dFlightTimeVariance;
185 return locChargedTrackHypothesis;
193 TMatrixFSym locCov_PxPyPz(3);
194 for(
size_t loc_i = 0; loc_i < 3; ++loc_i)
196 for(
size_t loc_j = 0; loc_j < 3; ++loc_j)
197 locCov_PxPyPz(loc_i, loc_j) = (*locCovarianceMatrix)(loc_i, loc_j);
201 double locPMag = locMomentum.Mag();
202 double locPPerpSq = locMomentum.Px()*locMomentum.Px() + locMomentum.Py()*locMomentum.Py();
203 TMatrix locJ_CartSpher(3, 3);
204 locJ_CartSpher(0, 0) = locMomentum.Px()/locPMag;
205 locJ_CartSpher(0, 1) = locMomentum.Py()/locPMag;
206 locJ_CartSpher(0, 2) = locMomentum.Pz()/locPMag;
207 locJ_CartSpher(1, 0) = locMomentum.Px()*locMomentum.Pz()/(locPMag*locPMag*
sqrt(locPPerpSq));
208 locJ_CartSpher(1, 1) = locMomentum.Py()*locMomentum.Pz()/(locPMag*locPMag*
sqrt(locPPerpSq));
209 locJ_CartSpher(1, 2) =
sqrt(locPPerpSq)/(locPMag*locPMag);
210 locJ_CartSpher(2, 0) = -1.0*locMomentum.Py()/locPPerpSq;
211 locJ_CartSpher(2, 1) = locMomentum.Px()/locPPerpSq;
212 locJ_CartSpher(2, 2) = 0.0;
213 TMatrixFSym locCov_PThetaPhi = locCov_PxPyPz.Similarity(locJ_CartSpher);
216 TMatrixFSym locCov_PThetaPhiFTimeHTime(5);
217 double locSigmaPMag = locCov_PThetaPhi(0, 0);
218 for(
size_t loc_i = 0; loc_i < 3; ++loc_i)
220 for(
size_t loc_j = 0; loc_j < 3; ++loc_j)
221 locCov_PThetaPhiFTimeHTime(loc_i, loc_j) = locCov_PThetaPhi(loc_i, loc_j);
223 locCov_PThetaPhiFTimeHTime(0, 3) = locFlightTimePCorrelation*locSigmaPMag*
sqrt(locFlightTimeVariance);
224 locCov_PThetaPhiFTimeHTime(0, 4) = locFlightTimePCorrelation*locSigmaPMag*
sqrt(locHitTimeVariance);
225 locCov_PThetaPhiFTimeHTime(1, 3) = 0.0;
226 locCov_PThetaPhiFTimeHTime(1, 4) = 0.0;
227 locCov_PThetaPhiFTimeHTime(2, 3) = 0.0;
228 locCov_PThetaPhiFTimeHTime(2, 4) = 0.0;
230 locCov_PThetaPhiFTimeHTime(3, 0) = locFlightTimePCorrelation*locSigmaPMag*
sqrt(locFlightTimeVariance);
231 locCov_PThetaPhiFTimeHTime(3, 1) = 0.0;
232 locCov_PThetaPhiFTimeHTime(3, 2) = 0.0;
233 locCov_PThetaPhiFTimeHTime(3, 3) = locFlightTimeVariance;
234 locCov_PThetaPhiFTimeHTime(3, 4) =
sqrt(locFlightTimeVariance*locHitTimeVariance);
236 locCov_PThetaPhiFTimeHTime(4, 0) = locFlightTimePCorrelation*locSigmaPMag*
sqrt(locHitTimeVariance);
237 locCov_PThetaPhiFTimeHTime(4, 1) = 0.0;
238 locCov_PThetaPhiFTimeHTime(4, 2) = 0.0;
239 locCov_PThetaPhiFTimeHTime(4, 3) =
sqrt(locFlightTimeVariance*locHitTimeVariance);
240 locCov_PThetaPhiFTimeHTime(4, 4) = locHitTimeVariance;
243 TMatrix locJ_SpherCart(4, 5);
244 double locTheta = locMomentum.Theta();
245 locJ_SpherCart(0, 0) = locMomentum.Px()/locPMag;
246 locJ_SpherCart(0, 1) = locMomentum.Px()/tan(locTheta);
247 locJ_SpherCart(0, 2) = -1.0*locMomentum.Py();
248 locJ_SpherCart(0, 3) = 0.0;
249 locJ_SpherCart(0, 4) = 0.0;
250 locJ_SpherCart(1, 0) = locMomentum.Py()/locPMag;
251 locJ_SpherCart(1, 1) = locMomentum.Py()/tan(locTheta);
252 locJ_SpherCart(1, 2) = locMomentum.Px();
253 locJ_SpherCart(1, 3) = 0.0;
254 locJ_SpherCart(1, 4) = 0.0;
255 locJ_SpherCart(2, 0) = locMomentum.Pz()/locPMag;
256 locJ_SpherCart(2, 1) = -1.0*locPMag*
sin(locTheta);
257 locJ_SpherCart(2, 2) = 0.0;
258 locJ_SpherCart(2, 3) = 0.0;
259 locJ_SpherCart(2, 4) = 0.0;
260 locJ_SpherCart(3, 0) = 0.0;
261 locJ_SpherCart(3, 1) = 0.0;
262 locJ_SpherCart(3, 2) = 0.0;
263 locJ_SpherCart(3, 3) = -1.0;
264 locJ_SpherCart(3, 4) = 1.0;
265 TMatrixFSym locCov_PxPyPzT = locCov_PThetaPhiFTimeHTime.Similarity(locJ_SpherCart);
268 (*locCovarianceMatrix)(0, 6) = locCov_PxPyPzT(0, 3);
269 (*locCovarianceMatrix)(1, 6) = locCov_PxPyPzT(1, 3);
270 (*locCovarianceMatrix)(2, 6) = locCov_PxPyPzT(2, 3);
271 (*locCovarianceMatrix)(3, 6) = 0.0;
272 (*locCovarianceMatrix)(4, 6) = 0.0;
273 (*locCovarianceMatrix)(5, 6) = 0.0;
274 (*locCovarianceMatrix)(6, 0) = locCov_PxPyPzT(3, 0);
275 (*locCovarianceMatrix)(6, 1) = locCov_PxPyPzT(3, 1);
276 (*locCovarianceMatrix)(6, 2) = locCov_PxPyPzT(3, 2);
277 (*locCovarianceMatrix)(6, 3) = 0.0;
278 (*locCovarianceMatrix)(6, 4) = 0.0;
279 (*locCovarianceMatrix)(6, 5) = 0.0;
280 (*locCovarianceMatrix)(6, 6) = locCov_PxPyPzT(3, 3);
void setTime(double locTime)
void Set_DIRCMatchParams(shared_ptr< const DDIRCMatchParams > locMatchParams)
void Set_TrackTimeBased(const DTrackTimeBased *locTrackTimeBased)
double energy(void) const
shared_ptr< DResourcePool< TMatrixFSym > > dResourcePool_TMatrixFSym
void Set_FCALShowerMatchParams(shared_ptr< const DFCALShowerMatchParams > locMatchParams)
DResourcePool< DChargedTrackHypothesis > * dResourcePool_ChargedTrackHypothesis
bool DChargedTrackHypothesis_SortByEnergy(const DChargedTrackHypothesis *locChargedTrackHypothesis1, const DChargedTrackHypothesis *locChargedTrackHypothesis2)
const DTrackTimeBased * Get_TrackTimeBased(void) const
void Set_BCALShowerMatchParams(shared_ptr< const DBCALShowerMatchParams > locMatchParams)
bool Get_DIRCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DDIRCMatchParams > &locBestMatchParams) const
jerror_t init(void)
Called once at program start.
double Calc_PropagatedRFTime(const DKinematicData *locKinematicData, const DEventRFBunch *locEventRFBunch) const
oid_t candidateid
id of DTrackCandidate corresponding to this track
jerror_t brun(jana::JEventLoop *locEventLoop, int32_t runnumber)
Called everytime a new run number is detected.
shared_ptr< const DTOFHitMatchParams > Get_TOFHitMatchParams(void) const
void Set_T0(double locT0, double locT0Error, DetectorSystem_t locT0Detector)
DChargedTrackHypothesis * Create_ChargedTrackHypothesis(JEventLoop *locEventLoop, const DTrackTimeBased *locTrackTimeBased, const DDetectorMatches *locDetectorMatches, const DEventRFBunch *locEventRFBunch)
bool Get_BestTOFMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DTOFHitMatchParams > &locBestMatchParams) const
void Calc_ChargedPIDFOM(DChargedTrackHypothesis *locChargedTrackHypothesis) const
void Set_TimeAtPOCAToVertex(double locTimeAtPOCAToVertex)
const DParticleID * dPIDAlgorithm
bool Get_BestSCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DSCHitMatchParams > &locBestMatchParams) const
void Add_TimeToTrackingMatrix(DChargedTrackHypothesis *locChargedTrackHypothesis, TMatrixFSym *locCovarianceMatrix, double locFlightTimeVariance, double locHitTimeVariance, double locFlightTimePCorrelation) const
void setErrorMatrix(const shared_ptr< const TMatrixFSym > &aMatrix)
bool Get_BestFCALMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DFCALShowerMatchParams > &locBestMatchParams) const
bool Get_BestBCALMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DBCALShowerMatchParams > &locBestMatchParams) const
vector< DChargedTrackHypothesis * > dCreated
void Share_FromInput_Kinematics(const DKinematicData *locSourceData)
DChargedTrackHypothesis * Get_Resource(void)
void Set_SCHitMatchParams(shared_ptr< const DSCHitMatchParams > locMatchParams)
shared_ptr< const DFCALShowerMatchParams > Get_FCALShowerMatchParams(void) const
const DVector3 & momentum(void) const
DetectorSystem_t dTimeSource
jerror_t evnt(jana::JEventLoop *locEventLoop, uint64_t eventnumber)
Called every event.
void Set_TOFHitMatchParams(shared_ptr< const DTOFHitMatchParams > locMatchParams)
void Set_ControlParams(size_t locGetBatchSize, size_t locNumToAllocateAtOnce, size_t locMaxLocalPoolSize)
shared_ptr< const DBCALShowerMatchParams > Get_BCALShowerMatchParams(void) const
shared_ptr< const TMatrixFSym > errorMatrix(void) const
DetectorSystem_t t1_detector(void) const
void Recycle(const DType *locResource)