32 vector<const DTrackWireBased*> locTrackWireBasedVector;
33 locEventLoop->Get(locTrackWireBasedVector);
36 _data.push_back(locDetectorMatches);
44 locEventLoop->GetSingle(locParticleID);
46 vector<const DSCHit*> locSCHits;
47 locEventLoop->Get(locSCHits);
49 vector<const DTOFPoint*> locTOFPoints;
50 locEventLoop->Get(locTOFPoints);
52 vector<const DFCALShower*> locFCALShowers;
53 locEventLoop->Get(locFCALShowers);
55 vector<const DBCALShower*> locBCALShowers;
56 locEventLoop->Get(locBCALShowers);
61 for(
size_t loc_i = 0; loc_i < locTrackWireBasedVector.size(); ++loc_i)
63 MatchToBCAL(locParticleID, locTrackWireBasedVector[loc_i], locBCALShowers, locDetectorMatches);
64 MatchToTOF(locParticleID, locTrackWireBasedVector[loc_i], locTOFPoints, locDetectorMatches);
65 MatchToFCAL(locParticleID, locTrackWireBasedVector[loc_i], locFCALShowers, locDetectorMatches);
66 MatchToSC(locParticleID, locTrackWireBasedVector[loc_i], locSCHits, locDetectorMatches);
70 for(
size_t loc_i = 0; loc_i < locBCALShowers.size(); ++loc_i)
71 MatchToTrack(locParticleID, locBCALShowers[loc_i], locTrackWireBasedVector, locDetectorMatches);
72 for(
size_t loc_i = 0; loc_i < locFCALShowers.size(); ++loc_i)
73 MatchToTrack(locParticleID, locFCALShowers[loc_i], locTrackWireBasedVector, locDetectorMatches);
76 for(
size_t loc_i = 0; loc_i < locTrackWireBasedVector.size(); ++loc_i)
79 if(isfinite(locFlightTimePCorrelation))
83 if(isfinite(locFlightTimePCorrelation))
87 if(isfinite(locFlightTimePCorrelation))
91 if(isfinite(locFlightTimePCorrelation))
95 return locDetectorMatches;
102 double locInputStartTime = locTrackWireBased->
t0();
103 for(
size_t loc_i = 0; loc_i < locBCALShowers.size(); ++loc_i)
105 shared_ptr<DBCALShowerMatchParams>locShowerMatchParams;
107 locDetectorMatches->
Add_Match(locTrackWireBased, locBCALShowers[loc_i], locShowerMatchParams);
113 double locInputStartTime = locTrackWireBased->
t0();
114 const vector<DTrackFitter::Extrapolation_t>extrapolations=locTrackWireBased->
extrapolations.at(
SYS_TOF);
115 for(
size_t loc_i = 0; loc_i < locTOFPoints.size(); ++loc_i)
117 shared_ptr<DTOFHitMatchParams>locTOFHitMatchParams;
118 if(locParticleID->
Cut_MatchDistance(extrapolations, locTOFPoints[loc_i], locInputStartTime, locTOFHitMatchParams))
119 locDetectorMatches->
Add_Match(locTrackWireBased, locTOFPoints[loc_i], locTOFHitMatchParams);
125 double locInputStartTime = locTrackWireBased->
t0();
127 for(
size_t loc_i = 0; loc_i < locFCALShowers.size(); ++loc_i)
129 shared_ptr<DFCALShowerMatchParams> locShowerMatchParams;
130 if(locParticleID->
Cut_MatchDistance(extrapolations, locFCALShowers[loc_i], locInputStartTime, locShowerMatchParams))
131 locDetectorMatches->
Add_Match(locTrackWireBased, locFCALShowers[loc_i], locShowerMatchParams);
137 double locInputStartTime = locTrackWireBased->
t0();
139 for(
size_t loc_i = 0; loc_i < locSCHits.size(); ++loc_i)
141 shared_ptr<DSCHitMatchParams> locSCHitMatchParams;
142 if(locParticleID->
Cut_MatchDistance(extrapolations, locSCHits[loc_i], locInputStartTime, locSCHitMatchParams,
true))
143 locDetectorMatches->
Add_Match(locTrackWireBased, locSCHits[loc_i], locSCHitMatchParams);
149 double locMinDistance = 999.0;
150 double locFinalDeltaPhi = 999.0, locFinalDeltaZ = 999.0;
151 for(
size_t loc_i = 0; loc_i < locTrackWireBasedVector.size(); ++loc_i)
153 shared_ptr<DBCALShowerMatchParams> locShowerMatchParams;
154 double locInputStartTime = locTrackWireBasedVector[loc_i]->t0();
155 const vector<DTrackFitter::Extrapolation_t>extrapolations=locTrackWireBasedVector[loc_i]->extrapolations.at(
SYS_BCAL);
156 if(!locParticleID->
Distance_ToTrack(extrapolations, locBCALShower, locInputStartTime, locShowerMatchParams))
159 double locRSq = locBCALShower->
x*locBCALShower->
x + locBCALShower->
y*locBCALShower->
y;
160 double locDeltaPhi = locShowerMatchParams->dDeltaPhiToShower;
161 double locDeltaZ = locShowerMatchParams->dDeltaZToShower;
162 double locDistance =
sqrt(locDeltaZ*locDeltaZ + locDeltaPhi*locDeltaPhi*locRSq);
163 if(locDistance >= locMinDistance)
166 locMinDistance = locDistance;
167 locFinalDeltaPhi = locDeltaPhi;
168 locFinalDeltaZ = locDeltaZ;
175 double locMinDistance = 999.0;
176 for(
size_t loc_i = 0; loc_i < locTrackWireBasedVector.size(); ++loc_i)
178 shared_ptr<DFCALShowerMatchParams> locShowerMatchParams;
179 double locInputStartTime = locTrackWireBasedVector[loc_i]->t0();
180 const vector<DTrackFitter::Extrapolation_t>extrapolations=locTrackWireBasedVector[loc_i]->extrapolations.at(
SYS_FCAL);
181 if(!locParticleID->
Distance_ToTrack(extrapolations, locFCALShower, locInputStartTime, locShowerMatchParams))
183 if(locShowerMatchParams->dDOCAToShower < locMinDistance)
184 locMinDistance = locShowerMatchParams->dDOCAToShower;
map< DetectorSystem_t, vector< DTrackFitter::Extrapolation_t > > extrapolations
jerror_t brun(jana::JEventLoop *locEventLoop, int32_t runnumber)
Called everytime a new run number is detected.
jerror_t evnt(jana::JEventLoop *locEventLoop, uint64_t eventnumber)
Called every event.
double Calc_SCFlightTimePCorrelation(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches) const
jerror_t init(void)
Called once at program start.
void Add_Match(const DTrackingData *locTrack, const DBCALShower *locBCALShower, const shared_ptr< const DBCALShowerMatchParams > &locShowerMatchParams)
void MatchToTrack(const DParticleID *locParticleID, const DBCALShower *locBCALShower, const vector< const DTrackWireBased * > &locTrackWireBasedVector, DDetectorMatches *locDetectorMatches) const
double Calc_TOFFlightTimePCorrelation(const DTrackingData *locTrack, DDetectorMatches *locDetectorMatches) const
double Calc_FCALFlightTimePCorrelation(const DTrackingData *locTrack, DDetectorMatches *locDetectorMatches) const
double Calc_BCALFlightTimePCorrelation(const DTrackingData *locTrack, DDetectorMatches *locDetectorMatches) const
void MatchToSC(const DParticleID *locParticleID, const DTrackWireBased *locTrackWireBased, const vector< const DSCHit * > &locSCHits, DDetectorMatches *locDetectorMatches) const
void Set_DistanceToNearestTrack(const DBCALShower *locBCALShower, double locDeltaPhi, double locDeltaZ)
bool Cut_MatchDistance(const DReferenceTrajectory *rt, const DBCALShower *locBCALShower, double locInputStartTime, shared_ptr< DBCALShowerMatchParams > &locShowerMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const
void MatchToBCAL(const DParticleID *locParticleID, const DTrackWireBased *locTrackWireBased, const vector< const DBCALShower * > &locBCALShowers, DDetectorMatches *locDetectorMatches) const
void MatchToTOF(const DParticleID *locParticleID, const DTrackWireBased *locTrackWireBased, const vector< const DTOFPoint * > &locTOFPoints, DDetectorMatches *locDetectorMatches) const
bool Distance_ToTrack(const DReferenceTrajectory *rt, const DFCALShower *locFCALShower, double locInputStartTime, shared_ptr< DFCALShowerMatchParams > &locShowerMatchParams, DVector3 *locOutputProjPos=nullptr, DVector3 *locOutputProjMom=nullptr) const
DDetectorMatches * Create_DDetectorMatches(jana::JEventLoop *locEventLoop, vector< const DTrackWireBased * > &locTrackWireBasedVector)
void Set_FlightTimePCorrelation(const DTrackingData *locTrack, DetectorSystem_t locDetectorSystem, double locCorrelation)
void MatchToFCAL(const DParticleID *locParticleID, const DTrackWireBased *locTrackWireBased, const vector< const DFCALShower * > &locFCALShowers, DDetectorMatches *locDetectorMatches) const