20 std::vector<float> coords;
21 if (ilayer >= m_hits.size())
22 throw std::range_error(
"FPGATrackSimTrack::getCoords() out of bounds");
26 coords.push_back(m_hits[ilayer].getEtaCoord());
27 coords.push_back(m_hits[ilayer].getPhiCoord());
31 coords = computeIdealCoords(ilayer);
39 std::vector<float> coords;
48 double target_r = m_idealRadii[ilayer];
50 unsigned other_layer = (m_hits[ilayer].getSide() == 0) ? ilayer + 1 : ilayer - 1;
51 target_r = (target_r + m_idealRadii[other_layer]) / 2.;
54 double hitGPhi = m_hits[ilayer].getGPhi();
55 double houghRho = 0.0003 * getHoughY();
58 double expectedGPhi = getHoughX();
60 hitGPhi += (m_hits[ilayer].getR() - target_r) * houghRho;
61 expectedGPhi -= target_r * houghRho;
64 hitGPhi += (
std::pow(m_hits[ilayer].
getR() * houghRho, 3.0) / 6.0);
65 expectedGPhi -= (
std::pow(target_r * houghRho, 3.0) / 6.0);
68 double hitZ = m_hits[ilayer].getZ();
69 if (m_hits[ilayer].
getR() > 1
e-8) {
70 hitZ -= m_hits[ilayer].getGCotTheta() * (m_hits[ilayer].getR() - target_r);
72 hitZ -= (m_hits[ilayer].getGCotTheta() *
std::pow(m_hits[ilayer].
getR(), 3.0) * houghRho * houghRho) / 6.0;
75 coords.push_back(hitZ);
76 coords.push_back(hitGPhi - expectedGPhi);
79 double houghRho = 0.0003 * getHoughY();
81 hitGPhi += (m_hits[ilayer].getR() - target_r) * houghRho;
83 hitGPhi += (
pow(m_hits[ilayer].
getR() * houghRho, 3.0) / 6.0);
86 double z = m_hits[ilayer].getZ();
87 if (m_hits[ilayer].
getR() > 1
e-8) {
88 z -= m_hits[ilayer].getGCotTheta() * (m_hits[ilayer].getR() - target_r);
90 z -= m_hits[ilayer].getGCotTheta() * (
std::pow(m_hits[ilayer].
getR(), 3.0) * houghRho * houghRho) / 6.0;
94 coords.push_back(hitGPhi);
101 auto coords = getCoords(ilayer);
102 if (coords.size() > 0) {
106 throw std::range_error(
"FPGATrackSimTrack::getCoord(layer,coord) out of bounds");
111 auto coords = getCoords(ilayer);
120 unsigned target_coord = 1;
121 if (m_hits[ilayer].getHitType() ==
HitType::spacepoint && (m_hits[ilayer].getPhysLayer() % 2) == 1) {
125 if (coords.size() > target_coord) {
126 return coords.at(target_coord);
129 throw std::range_error(
"FPGATrackSimTrack::getCoord(layer,coord) out of bounds");
135 for (
const auto& hit : m_hits) {
136 nCoords += hit.getDim();
144 if (m_hits.size() >
i)
147 throw std::range_error(
"FPGATrackSimTrack::setFPGATrackSimHit() out of bounds");
153 if (m_hits.size() > 0) m_hits.clear();
162 if (std::abs(
phi) > 100) {
224 out <<
"TRACK: ID=" << std::left << setw(8) <<
track.m_trackID;
225 out <<
" SECTOR1=" << std::left << setw(8) <<
track.m_firstSectorID;
226 out <<
" BANK=" << std::left << setw(8) <<
track.m_bankID;
227 out <<
" BARCODE=" << std::left << setw(6) <<
track.m_barcode;
228 out <<
" BARCODE_F=" << std::left << setw(9) <<
track.m_barcode_frac;
229 out <<
" EVENT=" << std::left << setw(6) <<
track.m_eventindex;
230 out <<
" HITMAP=" << std::left << setw(8) <<
track.getHitMap();
231 out <<
" TYPE=" << std::left << setw(3) <<
track.m_typemask;
232 out <<
" NMISS=" << std::left << setw(3) <<
track.getNMissing();
234 streamsize oldprec =
out.precision();
236 out <<
" PHI=" << std::left << setw(10) <<
track.m_phi;
237 out.setf(ios_base::scientific);
239 out <<
" Q/PT=" << std::left << setw(10) <<
track.m_qoverpt;
240 out.unsetf(ios_base::scientific);
242 out <<
" d0=" << std::left << setw(10) <<
track.m_d0;
243 out <<
" ETA=" << std::left << setw(10) <<
track.m_eta;
244 out <<
" z0=" << std::left << setw(10) <<
track.m_z0;
245 out <<
" Chi2=" << std::left << setw(12) <<
track.m_chi2;
246 out <<
" OChi2=" << std::left << setw(12) <<
track.m_origchi2;
249 out.precision(oldprec);
255 for (
const auto& hit :
track.m_hits) {
256 out <<
"Hit " << iter <<
": " << hit <<
"\n";
266 vector<FPGATrackSimMultiTruth> mtv;
267 mtv.reserve(m_hits.size());
270 for (
const auto& thishit : m_hits)
272 if (thishit.isReal())
276 if (thishit.isPixel())
277 for (
auto&
x : this_mt)
279 mtv.push_back(this_mt);
288 const bool ok = mt.
best(tbarcode, tfrac);
291 setEventIndex(tbarcode.first);
292 setBarcode(tbarcode.second);
293 setBarcodeFrac(tfrac);