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());
 
   94       sector = road->getSector();
 
  104     ATH_MSG_WARNING(
"Constants for sector " << sector << 
" are not valid");
 
  115     getMissingInfo(*road, nMissing, missPixel, missStrip, missing_mask, norecovery_mask);
 
  144     std::vector<FPGATrackSimTrack> track_cands;
 
  147     std::vector<std::vector<int>> comboIndices = 
getComboIndices(road->getNHits_layer());
 
  148     ATH_MSG_DEBUG(
"There are theoretically " << comboIndices.size() << 
" combinations to process for this road");
 
  150     for (
size_t icomb = 0; icomb < comboIndices.size(); icomb++) {
 
  163             track_cand.
setChi2(road->getFitChi2());
 
  164             track_cand.
setPars(road->getFitParams());
 
  165             ATH_MSG_DEBUG(
"Assigned chi2 = " << track_cand.
getChi2() << 
" and parameters from genscan tool");
 
  181                 if (!( (missing_mask >> 
ic) & 0
x1)) 
break; 
 
  198                     bitmask &= ~(1 << icoord); 
 
  200                         bitmask &= ~(1 << (icoord+1)); 
 
  213         tracks.push_back(track_cand);
 
  222     ATH_MSG_DEBUG(
"Processed " << tracks.size() << 
" actual/valid tracks for this road");
 
  284                     missing_mask |= 1 << ix;
 
  289                     missing_mask |= (1<<ix) | (1<<iy);
 
  296                 else missPixel = 
true;
 
  299         else if (!((wclayers >> 
layer) & 1)) { 
 
  304                 missing_mask |= 1 << ix;
 
  309                 missing_mask |= (1<<ix) | (1<<iy);
 
  315                 norecovery_mask |= (1<<
layer);
 
  335     track_cands.resize(combs.size(), temp);
 
  339     for (
size_t icomb = 0; icomb < combs.size(); icomb++)
 
  342       track_cands[icomb].setTrackID(
m_idbase + icomb);
 
  351             if (hit_indices[
layer] < 0) 
 
  359                 if (wcbits & (1 << 
layer ) ) {
 
  364                 track_cands[icomb].setFPGATrackSimHit(
layer, newhit);
 
  368                 const std::shared_ptr<const FPGATrackSimHit> hit = road.
getHits(
layer)[hit_indices[
layer]];
 
  376                         track_cands[icomb].setValidCand(
false);
 
  379                 track_cands[icomb].setFPGATrackSimHit(
layer, *hit);
 
  406         if (hit_indices[
layer] < 0) 
 
  414             if (wcbits & (1 << 
layer ) ) {
 
  423             const std::shared_ptr<const FPGATrackSimHit> hit = road.
getHits(
layer)[hit_indices[
layer]];
 
  455     float best_chi2ndof = 
t.getChi2ndof();
 
  462         if (norecovery_mask & (1<<
layer)) 
continue;
 
  470         recovered_tracks[
layer].setFPGATrackSimHit(
layer,newhit);
 
  474         unsigned int missing_mask = 
t.getHitMap();
 
  475         missing_mask &= ~(1 << ix);
 
  479         recovered_tracks[
layer].setHitMap(missing_mask);
 
  483     recovered_tracks[
layer].setQOverPt(qoverpt);
 
  493         if (recovered_tracks[
layer].getChi2ndof() < best_chi2ndof)
 
  495             best_chi2ndof = recovered_tracks[
layer].getChi2ndof();
 
  501         return recovered_tracks[best_i];
 
  513     std::vector<FPGATrackSimMultiTruth> mtv;
 
  519     if (
layer < 
t.getFPGATrackSimHits().size()) mtv.push_back(
t.getFPGATrackSimHits().at(
layer).getTruth());
 
  522         mtv.back().assign_equal_normalization();
 
  530     const bool ok = mt.
best(tbarcode, tfrac);
 
  533         t.setEventIndex(tbarcode.first);
 
  534         t.setBarcode(tbarcode.second);
 
  535         t.setBarcodeFrac(tfrac);
 
  545 bool hasGoodFit(std::vector<FPGATrackSimTrack> 
const & track_cands, 
float minchi2ndof)
 
  549         if (
t.getChi2ndof() > 0 && 
t.getChi2ndof() < minchi2ndof)