LCOV - code coverage report
Current view: top level - detchannelmaps/src - PD2HDChannelMapSP.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 35.4 % 48 17
Test Date: 2026-10-11 15:05:20 Functions: 50.0 % 4 2

            Line data    Source code
       1              : ///////////////////////////////////////////////////////////////////////////////////////////////////
       2              : // Class:       PD2HDChannelMapSP
       3              : // Module type: standalone algorithm
       4              : // File:        PD2HDChannelMapSP.cxx
       5              : // Author:      Tom Junk, May 2022
       6              : //
       7              : // Implementation of hardware-offline channel mapping reading from a file.
       8              : ///////////////////////////////////////////////////////////////////////////////////////////////////
       9              : 
      10              : #include "PD2HDChannelMapSP.h"
      11              : 
      12              : #include <fstream>
      13              : #include <iostream>
      14              : #include <sstream>
      15              : 
      16              : // so far, nothing needs to be done in the constructor
      17              : 
      18            1 : dune::PD2HDChannelMapSP::PD2HDChannelMapSP() {}
      19              : 
      20              : void
      21            1 : dune::PD2HDChannelMapSP::ReadMapFromFile(std::string& fullname)
      22              : {
      23            1 :   std::ifstream inFile(fullname, std::ios::in);
      24            1 :   std::string line;
      25              : 
      26         2562 :   while (std::getline(inFile, line)) {
      27         2560 :     std::stringstream linestream(line);
      28              : 
      29         2560 :     HDChanInfo_t chanInfo;
      30         2560 :     linestream >> chanInfo.offlchan >> chanInfo.crate >> chanInfo.APAName >> chanInfo.wib >> chanInfo.link >>
      31         2560 :       chanInfo.femb_on_link >> chanInfo.cebchan >> chanInfo.plane >> chanInfo.chan_in_plane >> chanInfo.femb >>
      32         2560 :       chanInfo.asic >> chanInfo.asicchan >> chanInfo.wibframechan;
      33              : 
      34         2560 :     chanInfo.valid = true;
      35              : 
      36              :     // fill maps.
      37              : 
      38         2560 :     check_offline_channel(chanInfo.offlchan);
      39              : 
      40         2560 :     DetToChanInfo[chanInfo.crate][chanInfo.wib][chanInfo.link][chanInfo.wibframechan] = chanInfo;
      41         2560 :     OfflToChanInfo[chanInfo.offlchan] = chanInfo;
      42         2560 :   }
      43            1 :   inFile.close();
      44            1 : }
      45              : 
      46              : dune::PD2HDChannelMapSP::HDChanInfo_t
      47            0 : dune::PD2HDChannelMapSP::GetChanInfoFromWIBElements(unsigned int crate,
      48              :                                                     unsigned int slot,
      49              :                                                     unsigned int link,
      50              :                                                     unsigned int wibframechan) const
      51              : {
      52              : 
      53            0 :   unsigned int wib = slot + 1;
      54              : 
      55            0 :   HDChanInfo_t badInfo = {};
      56            0 :   badInfo.valid = false;
      57              : 
      58              :   // a hack -- ununderstood crates are mapped to crate 2
      59              :   // for use in the Coldbox
      60              :   // crate 2 has the lowest-numbered offline channels
      61              :   // data with two ununderstood crates, or an ununderstood crate and crate 2,
      62              :   // will have duplicate channels.
      63              : 
      64            0 :   auto fm1 = DetToChanInfo.find(crate);
      65            0 :   if (fm1 == DetToChanInfo.end()) {
      66            0 :     unsigned int substituteCrate = 2;
      67            0 :     fm1 = DetToChanInfo.find(substituteCrate);
      68            0 :     if (fm1 == DetToChanInfo.end())
      69            0 :       return badInfo;
      70              :   }
      71            0 :   auto& m1 = fm1->second;
      72              : 
      73            0 :   auto fm2 = m1.find(wib);
      74            0 :   if (fm2 == m1.end())
      75            0 :     return badInfo;
      76            0 :   auto& m2 = fm2->second;
      77              : 
      78            0 :   auto fm3 = m2.find(link);
      79            0 :   if (fm3 == m2.end())
      80            0 :     return badInfo;
      81            0 :   auto& m3 = fm3->second;
      82              : 
      83            0 :   auto fm4 = m3.find(wibframechan);
      84            0 :   if (fm4 == m3.end())
      85            0 :     return badInfo;
      86            0 :   return fm4->second;
      87            0 : }
      88              : 
      89              : dune::PD2HDChannelMapSP::HDChanInfo_t
      90            0 : dune::PD2HDChannelMapSP::GetChanInfoFromOfflChan(unsigned int offlineChannel) const
      91              : {
      92            0 :   auto ci = OfflToChanInfo.find(offlineChannel);
      93            0 :   if (ci == OfflToChanInfo.end()) {
      94            0 :     HDChanInfo_t badInfo = {};
      95            0 :     badInfo.valid = false;
      96            0 :     return badInfo;
      97              :   }
      98            0 :   return ci->second;
      99              : }
        

Generated by: LCOV version 2.0-1