10 #include "GaudiKernel/MsgStream.h"
17 std::vector<FPGATrackSimTrack>::const_iterator
getBestChi2(std::vector<FPGATrackSimTrack>
const & tracks);
18 bool hasGoodFit(std::vector<FPGATrackSimTrack>
const & track_cands,
float minchi2);
26 const std::vector<const FPGATrackSimFitConstantBank*>& droppedLayerbanks,
bool guessingHits) :
34 for (
auto bank : droppedLayerbanks)
58 for (
auto cur_road : roads) {
59 std::vector<FPGATrackSimTrack>
t;
62 else tracks.insert(tracks.end(),
t.begin(),
t.end());
88 ATH_MSG_DEBUG(
"Attempting to fit Hough road with y = " <<
y <<
", x = " <<
x <<
", sector = " << road->getSector());
92 int sector = road->getSector();
102 ATH_MSG_WARNING(
"Constants for sector " << sector <<
" are not valid");
112 getMissingInfo(*road, nMissing, missPixel, missStrip, missing_mask, norecovery_mask);
135 std::vector<FPGATrackSimTrack> track_cands;
140 for (
size_t icomb = 0; icomb < nFits; icomb++)
144 bool ok = track_cands[icomb].isValidCand();
156 if (!( (missing_mask >>
ic) & 0
x1))
break;
165 track_cands[icomb].setOrigChi2(track_cands[icomb].
getChi2());
167 if (track_cands[icomb].getNMissing() == 0) {
173 bitmask &= ~(1 << icoord);
175 bitmask &= ~(1 << (icoord+1));
187 tracks.push_back(track_cands[icomb]);
250 missing_mask |= 1 << ix;
255 missing_mask |= (1<<ix) | (1<<iy);
262 else missPixel =
true;
265 else if (!((wclayers >>
layer) & 1)) {
270 missing_mask |= 1 << ix;
275 missing_mask |= (1<<ix) | (1<<iy);
281 norecovery_mask |= (1<<
layer);
299 track_cands.resize(combs.size(), temp);
304 for (
size_t icomb = 0; icomb < combs.size(); icomb++)
307 track_cands[icomb].setTrackID(
m_idbase + icomb);
313 std::vector<int>
const & hit_indices = combs[icomb];
316 if (hit_indices[
layer] < 0)
324 if (wcbits & (1 <<
layer ) ) {
329 track_cands[icomb].setFPGATrackSimHit(
layer, newhit);
341 track_cands[icomb].setValidCand(
false);
344 track_cands[icomb].setFPGATrackSimHit(
layer, *hit);
367 float best_chi2ndof =
t.getChi2ndof();
374 if (norecovery_mask & (1<<
layer))
continue;
382 recovered_tracks[
layer].setFPGATrackSimHit(
layer,newhit);
386 unsigned int missing_mask =
t.getHitMap();
387 missing_mask &= ~(1 << ix);
391 recovered_tracks[
layer].setHitMap(missing_mask);
395 recovered_tracks[
layer].setQOverPt(qoverpt);
405 if (recovered_tracks[
layer].getChi2ndof() < best_chi2ndof)
407 best_chi2ndof = recovered_tracks[
layer].getChi2ndof();
413 return recovered_tracks[best_i];
425 std::vector<FPGATrackSimMultiTruth> mtv;
431 if (
layer <
t.getFPGATrackSimHits().size()) mtv.push_back(
t.getFPGATrackSimHits().at(
layer).getTruth());
434 mtv.back().assign_equal_normalization();
442 const bool ok = mt.
best(tbarcode, tfrac);
445 t.setEventIndex(tbarcode.first);
446 t.setBarcode(tbarcode.second);
447 t.setBarcodeFrac(tfrac);
457 bool hasGoodFit(std::vector<FPGATrackSimTrack>
const & track_cands,
float minchi2ndof)
461 if (
t.getChi2ndof() > 0 &&
t.getChi2ndof() < minchi2ndof)