30   return StatusCode::SUCCESS;
 
   37   std::string tree_str = 
"FPGATrackSimHoughRootOutput_reg" + 
m_region.value();
 
   38   m_tree = 
new TTree(tree_str.c_str(), tree_str.c_str());
 
   90   std::string truthtree_str = 
"FPGATrackSimTruthTree_reg" + 
m_region.value();
 
   91   m_truthtree = 
new TTree(truthtree_str.c_str(), truthtree_str.c_str());
 
  121   std::string offltree_str = 
"FPGATrackSimOfflineTree_reg" + 
m_region.value();
 
  122   m_offlinetree = 
new TTree(offltree_str.c_str(), offltree_str.c_str());
 
  145   return StatusCode::SUCCESS;
 
  149 StatusCode FPGATrackSimHoughRootOutputTool::fillTree(
const std::vector<FPGATrackSimTrack> &track_cands, 
const std::vector<FPGATrackSimTruthTrack> &truthTracks, 
const std::vector<FPGATrackSimOfflineTrack> &offlineTracks, 
const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits_2nd, 
const bool writeOutNonSPStripHits, 
const bool roadsAreSecondStage)
 
  160   std::vector<float> tmp_hits_x;
 
  161   std::vector<float> tmp_hits_y;
 
  162   std::vector<float> tmp_hits_z;
 
  163   std::vector<float> tmp_hits_R;
 
  164   std::vector<float> tmp_hits_phi;
 
  165   std::vector<int> tmp_hits_layer_disk;
 
  166   std::vector<bool> tmp_hits_mapped;
 
  167   std::vector<bool> tmp_hits_isPixel;
 
  168   std::vector<bool> tmp_hits_isStrip;
 
  169   std::vector<bool> tmp_hits_isClustered;
 
  170   std::vector<bool> tmp_hits_isSpacepoint;
 
  171   std::vector<float> tmp_hits_barcodefrac;
 
  172   std::vector<int> tmp_hits_barcode;
 
  173   std::vector<float> tmp_hits_zIdeal;
 
  174   std::vector<float> tmp_hits_gphiIdeal;
 
  175   std::vector<long> tmp_hits_fineID;
 
  176   std::vector<int> tmp_hits_volumeID;
 
  178   std::vector<float> tmp_hits_x_sorted;
 
  179   std::vector<float> tmp_hits_y_sorted;
 
  180   std::vector<float> tmp_hits_z_sorted;
 
  181   std::vector<float> tmp_hits_R_sorted;
 
  182   std::vector<float> tmp_hits_phi_sorted;
 
  183   std::vector<int> tmp_hits_layer_disk_sorted;
 
  184   std::vector<bool> tmp_hits_isPixel_sorted;
 
  185   std::vector<bool> tmp_hits_isStrip_sorted;
 
  186   std::vector<bool> tmp_hits_isClustered_sorted;
 
  187   std::vector<bool> tmp_hits_isSpacepoint_sorted;
 
  188   std::vector<float> tmp_hits_barcodefrac_sorted;
 
  189   std::vector<int> tmp_hits_barcode_sorted;
 
  190   std::vector<float> tmp_hits_zIdeal_sorted;
 
  191   std::vector<float> tmp_hits_gphiIdeal_sorted;
 
  192   std::vector<long> tmp_hits_fineID_sorted;
 
  193   std::vector<int> tmp_hits_volumeID_sorted;
 
  195   std::vector<bool> tmp_hits_mapped_sorted;
 
  196   bool has_strip_nonspacepoint;
 
  201   for (
const auto & 
track : truthTracks) {
 
  203     if (
track.getStatus() != 1) 
continue;
 
  210     tmp_hits_phi.clear();
 
  211     tmp_hits_layer_disk.clear();
 
  212     tmp_hits_mapped.clear();
 
  213     tmp_hits_isPixel.clear();
 
  214     tmp_hits_isStrip.clear();
 
  215     tmp_hits_isClustered.clear();
 
  216     tmp_hits_isSpacepoint.clear();
 
  217     tmp_hits_barcodefrac.clear();
 
  218     tmp_hits_barcode.clear();
 
  219     tmp_hits_zIdeal.clear();
 
  220     tmp_hits_gphiIdeal.clear();
 
  221     tmp_hits_fineID.clear();
 
  223     tmp_hits_x_sorted.clear();
 
  224     tmp_hits_y_sorted.clear();
 
  225     tmp_hits_z_sorted.clear();
 
  226     tmp_hits_R_sorted.clear();
 
  227     tmp_hits_phi_sorted.clear();
 
  228     tmp_hits_layer_disk_sorted.clear();
 
  229     tmp_hits_mapped_sorted.clear();
 
  230     tmp_hits_isPixel_sorted.clear();
 
  231     tmp_hits_isStrip_sorted.clear();
 
  232     tmp_hits_isClustered_sorted.clear();
 
  233     tmp_hits_isSpacepoint_sorted.clear();
 
  234     tmp_hits_barcodefrac_sorted.clear();
 
  235     tmp_hits_barcode_sorted.clear();
 
  236     tmp_hits_zIdeal_sorted.clear();
 
  237     tmp_hits_gphiIdeal_sorted.clear();
 
  238     tmp_hits_fineID_sorted.clear();
 
  239     tmp_hits_volumeID.clear();
 
  241     has_strip_nonspacepoint = 
false;
 
  244     std::vector<float> idealized_coords;
 
  249     for (
auto hit : hits_2nd) {
 
  251       if (hit->getBarcode() == 
track.getBarcode()) {
 
  253         if (hit->isPixel() == 0 && hit->getHitType() != 
HitType::spacepoint) {has_strip_nonspacepoint = 
true;}
 
  258         const bool ok = truth.
best(tbarcode, tfrac);
 
  259         if (tfrac < 1.0) { 
continue; }
 
  261           tmp_hits_barcode.push_back((
int)(tbarcode.second));
 
  262           tmp_hits_barcodefrac.push_back(tfrac);
 
  265           tmp_hits_barcode.push_back(-1);
 
  266           tmp_hits_barcodefrac.push_back(-1);
 
  269         tmp_hits_x.push_back(hit->getX());
 
  270         tmp_hits_y.push_back(hit->getY());
 
  271         tmp_hits_z.push_back(hit->getZ());
 
  272         tmp_hits_R.push_back(hit->getR());
 
  273         tmp_hits_phi.push_back(hit->getGPhi());
 
  274         tmp_hits_layer_disk.push_back(hit->getLayerDisk(
true));
 
  276         tmp_hits_mapped.push_back(hit->isMapped());
 
  277         tmp_hits_isPixel.push_back(hit->isPixel());
 
  278         tmp_hits_isStrip.push_back(hit->isStrip());
 
  279         tmp_hits_isClustered.push_back(hit->isClustered());
 
  281         tmp_hits_fineID.push_back(
getFineID(*hit));
 
  285         tmp_hits_zIdeal.push_back(idealized_coords[0]);
 
  286         tmp_hits_gphiIdeal.push_back(idealized_coords[1]);
 
  289           tmp_hits_isSpacepoint.push_back(
true);
 
  292           tmp_hits_isSpacepoint.push_back(
false);
 
  300     if ( (! writeOutNonSPStripHits & has_strip_nonspacepoint)) {
 
  301       ATH_MSG_DEBUG(
"Truth Track is not written to HoughRootOutput file, because it contains a non-SP strip hit!");
 
  305     std::vector<int> sorting_index(tmp_hits_R.size(), 0);
 
  306     for (
unsigned int i = 0 ; 
i != sorting_index.size() ; 
i++) {
 
  307         sorting_index[
i] = 
i;
 
  309     sort(sorting_index.begin(), sorting_index.end(),
 
  310         [&](
const int& 
a, 
const int& 
b) {
 
  311             return (tmp_hits_R[a] < tmp_hits_R[b]);
 
  315     for (
unsigned int i = 0 ; 
i != sorting_index.size() ; 
i++) {
 
  316       tmp_hits_x_sorted.push_back(tmp_hits_x[sorting_index[
i]]);
 
  317       tmp_hits_y_sorted.push_back(tmp_hits_y[sorting_index[
i]]);
 
  318       tmp_hits_z_sorted.push_back(tmp_hits_z[sorting_index[
i]]);
 
  319       tmp_hits_R_sorted.push_back(tmp_hits_R[sorting_index[
i]]);
 
  320       tmp_hits_phi_sorted.push_back(tmp_hits_phi[sorting_index[
i]]);
 
  321       tmp_hits_layer_disk_sorted.push_back(tmp_hits_layer_disk[sorting_index[
i]]);
 
  322       tmp_hits_isPixel_sorted.push_back(tmp_hits_isPixel[sorting_index[
i]]);
 
  323       tmp_hits_isStrip_sorted.push_back(tmp_hits_isStrip[sorting_index[
i]]);
 
  324       tmp_hits_isClustered_sorted.push_back(tmp_hits_isClustered[sorting_index[
i]]);
 
  325       tmp_hits_isSpacepoint_sorted.push_back(tmp_hits_isSpacepoint[sorting_index[
i]]);
 
  326       tmp_hits_barcode_sorted.push_back(tmp_hits_barcode[sorting_index[
i]]);
 
  327       tmp_hits_barcodefrac_sorted.push_back(tmp_hits_barcodefrac[sorting_index[
i]]);
 
  328       tmp_hits_zIdeal_sorted.push_back(tmp_hits_zIdeal[sorting_index[
i]]);
 
  329       tmp_hits_gphiIdeal_sorted.push_back(tmp_hits_gphiIdeal[sorting_index[
i]]);
 
  330       tmp_hits_fineID_sorted.push_back(tmp_hits_fineID[sorting_index[
i]]);
 
  331       tmp_hits_volumeID_sorted.push_back(tmp_hits_volumeID[sorting_index[
i]]);
 
  332       tmp_hits_mapped_sorted.push_back(tmp_hits_mapped[sorting_index[
i]]);
 
  372   for (
const auto & 
track : offlineTracks) {
 
  384     int nhole(0), nmeasurement(0), ninert(0), nbrem(0), nscatter(0), nperigee(0), noutlier(0), nother(0);
 
  385     for (
const auto& hit : 
track.getOfflineHits()) {
 
  408   std::vector<FPGATrackSimMultiTruth> mtv;
 
  412   for (
size_t iroad = 0; iroad < track_cands.size(); iroad++) {
 
  416     if (roadsAreSecondStage) {
 
  423     m_roadChi2.push_back(track_cands[iroad].getChi2ndof());
 
  442       mtv.push_back( truth );
 
  446       const bool ok = truth.
best(tbarcode,tfrac);
 
  449         m_barcode.push_back((
int)(tbarcode.second));
 
  459       std::shared_ptr<const FPGATrackSimHit> hit_ptr = std::make_shared<const FPGATrackSimHit>(hit);
 
  462       m_x.push_back(hit.getX());
 
  463       m_y.push_back(hit.getY());
 
  464       m_z.push_back(hit.getZ());
 
  467       m_layerID.push_back(hit.getLayerDisk(
true));
 
  468       m_etaID.push_back(hit.getEtaModule(
true));
 
  470       m_gphi.push_back(hit.getGPhi());
 
  471       m_zIdeal.push_back(idealized_coords[0]);
 
  473       m_isPixel.push_back(hit.isPixel() ? 1 : 0);
 
  474       m_layer.push_back(hit.getLayer());
 
  480       m_ID.push_back(hit.getIdentifierHash());
 
  491     const bool ok = mt.
best(tbarcode,tfrac);
 
  506     for (
const auto & 
track : truthTracks) {
 
  508       if (
track.getStatus() != 1) 
continue;
 
  526   return StatusCode::SUCCESS;
 
  531 StatusCode FPGATrackSimHoughRootOutputTool::fillTree(
const std::vector<std::shared_ptr<const FPGATrackSimRoad>> &roads, 
const std::vector<FPGATrackSimTruthTrack> &truthTracks, 
const std::vector<FPGATrackSimOfflineTrack> &offlineTracks, 
const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits_2nd, 
const bool writeOutNonSPStripHits, 
const float minChi2, 
const int maxOverlappingHits, 
const bool roadsAreSecondStage)
 
  537   std::vector<FPGATrackSimTrack> track_cands;
 
  539   for (
size_t iroad = 0; iroad < roads.size(); iroad++) {
 
  541     std::shared_ptr<const FPGATrackSimRoad> road = roads[iroad];
 
  542     std::vector<FPGATrackSimTrack> track_cand;
 
  543     if (road == 
nullptr) 
continue; 
 
  547     if (roadsAreSecondStage) {
 
  565     if (roadsAreSecondStage) {
 
  585     for (
auto const &tr : track_cand) {
 
  586       track_cands.push_back(tr);
 
  592   for (
auto const &cand : track_cands) {
 
  593     if (cand.passedOR()) {
 
  600   return fillTree(track_cands, truthTracks, offlineTracks, hits_2nd, writeOutNonSPStripHits, roadsAreSecondStage);