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)
56 int TrackFitter::fitTracks(
const std::vector<std::shared_ptr<const FPGATrackSimRoad>>& roads, std::vector<FPGATrackSimTrack>& tracks) {
58 for (
const std::shared_ptr<const FPGATrackSimRoad>& cur_road : roads) {
59 std::vector<FPGATrackSimTrack>
t;
62 else tracks.insert(tracks.end(),
t.begin(),
t.end());
74 int TrackFitter::fitTracks(
const std::shared_ptr<const FPGATrackSimRoad> &road, std::vector<FPGATrackSimTrack>& tracks)
88 ATH_MSG_DEBUG(
"Attempting to fit Hough road with y = " <<
y <<
", x = " <<
x <<
", sector = " << road->getSector() <<
"and nhits = " << road->getNHits());
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);
139 std::vector<FPGATrackSimTrack> track_cands;
142 std::vector<std::vector<int>> comboIndices =
getComboIndices(road->getNHits_layer());
143 ATH_MSG_DEBUG(
"There are theoretically " << comboIndices.size() <<
" combinations to process for this road");
145 for (
size_t icomb = 0; icomb < comboIndices.size(); icomb++) {
158 track_cand.
setChi2(road->getFitChi2());
159 track_cand.
setPars(road->getFitParams());
160 ATH_MSG_DEBUG(
"Assigned chi2 = " << track_cand.
getChi2() <<
" and parameters from genscan tool");
176 if (!( (missing_mask >>
ic) & 0
x1))
break;
193 bitmask &= ~(1 << icoord);
195 bitmask &= ~(1 << (icoord+1));
208 tracks.push_back(track_cand);
217 ATH_MSG_DEBUG(
"Processed " << tracks.size() <<
" actual/valid tracks for this road");
279 missing_mask |= 1 << ix;
284 missing_mask |= (1<<ix) | (1<<iy);
291 else missPixel =
true;
294 else if (!((wclayers >>
layer) & 1)) {
299 missing_mask |= 1 << ix;
304 missing_mask |= (1<<ix) | (1<<iy);
310 norecovery_mask |= (1<<
layer);
330 track_cands.resize(combs.size(), temp);
334 for (
size_t icomb = 0; icomb < combs.size(); icomb++)
337 track_cands[icomb].setTrackID(
m_idbase + icomb);
346 if (hit_indices[
layer] < 0)
354 if (wcbits & (1 <<
layer ) ) {
359 track_cands[icomb].setFPGATrackSimHit(
layer, newhit);
363 const std::shared_ptr<const FPGATrackSimHit> hit = road.
getHits(
layer)[hit_indices[
layer]];
371 track_cands[icomb].setValidCand(
false);
374 track_cands[icomb].setFPGATrackSimHit(
layer, *hit);
401 if (hit_indices[
layer] < 0)
409 if (wcbits & (1 <<
layer ) ) {
418 const std::shared_ptr<const FPGATrackSimHit> hit = road.
getHits(
layer)[hit_indices[
layer]];
450 float best_chi2ndof =
t.getChi2ndof();
457 if (norecovery_mask & (1<<
layer))
continue;
465 recovered_tracks[
layer].setFPGATrackSimHit(
layer,newhit);
469 unsigned int missing_mask =
t.getHitMap();
470 missing_mask &= ~(1 << ix);
474 recovered_tracks[
layer].setHitMap(missing_mask);
478 recovered_tracks[
layer].setQOverPt(qoverpt);
488 if (recovered_tracks[
layer].getChi2ndof() < best_chi2ndof)
490 best_chi2ndof = recovered_tracks[
layer].getChi2ndof();
496 return recovered_tracks[best_i];
508 std::vector<FPGATrackSimMultiTruth> mtv;
514 if (
layer <
t.getFPGATrackSimHits().size()) mtv.push_back(
t.getFPGATrackSimHits().at(
layer).getTruth());
517 mtv.back().assign_equal_normalization();
525 const bool ok = mt.
best(tbarcode, tfrac);
528 t.setEventIndex(tbarcode.first);
529 t.setBarcode(tbarcode.second);
530 t.setBarcodeFrac(tfrac);
540 bool hasGoodFit(std::vector<FPGATrackSimTrack>
const & track_cands,
float minchi2ndof)
544 if (
t.getChi2ndof() > 0 &&
t.getChi2ndof() < minchi2ndof)