LCOV - code coverage report
Current view: top level - detchannelmaps/src - PD2HDChannelMapSP.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 50.9 % 57 29
Test Date: 2025-12-21 13:07:08 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 <iostream>
      13              : #include <fstream>
      14              : #include <sstream>
      15              : 
      16              : // so far, nothing needs to be done in the constructor
      17              : 
      18            1 : dune::PD2HDChannelMapSP::PD2HDChannelMapSP()
      19              : {
      20            1 : }
      21              : 
      22            1 : void dune::PD2HDChannelMapSP::ReadMapFromFile(std::string &fullname)
      23              : {
      24            1 :   std::ifstream inFile(fullname, std::ios::in);
      25            1 :   std::string line;
      26              : 
      27         2562 :   while (std::getline(inFile,line)) {
      28         2560 :     std::stringstream linestream(line);
      29              : 
      30         2560 :     HDChanInfo_t chanInfo;
      31         2560 :     linestream 
      32         2560 :       >> chanInfo.offlchan 
      33         2560 :       >> chanInfo.crate 
      34         2560 :       >> chanInfo.APAName
      35         2560 :       >> chanInfo.wib 
      36         2560 :       >> chanInfo.link 
      37         2560 :       >> chanInfo.femb_on_link 
      38         2560 :       >> chanInfo.cebchan 
      39         2560 :       >> chanInfo.plane 
      40         2560 :       >> chanInfo.chan_in_plane 
      41         2560 :       >> chanInfo.femb 
      42         2560 :       >> chanInfo.asic 
      43         2560 :       >> chanInfo.asicchan
      44         2560 :       >> chanInfo.wibframechan; 
      45              : 
      46         2560 :     chanInfo.valid = true;
      47              :     
      48              :     // fill maps.
      49              : 
      50         2560 :     check_offline_channel(chanInfo.offlchan);
      51              : 
      52         2560 :     DetToChanInfo[chanInfo.crate][chanInfo.wib][chanInfo.link][chanInfo.wibframechan] = chanInfo;
      53         2560 :     OfflToChanInfo[chanInfo.offlchan] = chanInfo;
      54              : 
      55         2560 :   }
      56            1 :   inFile.close();
      57              : 
      58            1 : }
      59              : 
      60            0 : dune::PD2HDChannelMapSP::HDChanInfo_t dune::PD2HDChannelMapSP::GetChanInfoFromWIBElements(
      61              :     unsigned int crate,
      62              :     unsigned int slot,
      63              :     unsigned int link,
      64              :     unsigned int wibframechan ) const {
      65              : 
      66            0 :   unsigned int wib = slot + 1;
      67              : 
      68            0 :   HDChanInfo_t badInfo = {};
      69            0 :   badInfo.valid = false;
      70              : 
      71              : // a hack -- ununderstood crates are mapped to crate 2
      72              : // for use in the Coldbox
      73              : // crate 2 has the lowest-numbered offline channels
      74              : // data with two ununderstood crates, or an ununderstood crate and crate 2,
      75              : // will have duplicate channels.
      76              : 
      77            0 :   auto fm1 = DetToChanInfo.find(crate);
      78            0 :   if (fm1 == DetToChanInfo.end()) 
      79              :     {
      80            0 :       unsigned int substituteCrate = 2;  
      81            0 :       fm1 = DetToChanInfo.find(substituteCrate);
      82            0 :       if (fm1 == DetToChanInfo.end()) return badInfo;
      83              :     }
      84            0 :   auto& m1 = fm1->second;
      85              : 
      86            0 :   auto fm2 = m1.find(wib);
      87            0 :   if (fm2 == m1.end()) return badInfo;
      88            0 :   auto& m2 = fm2->second;
      89              : 
      90            0 :   auto fm3 = m2.find(link);
      91            0 :   if (fm3 == m2.end()) return badInfo;
      92            0 :   auto& m3 = fm3->second;
      93              : 
      94            0 :   auto fm4 = m3.find(wibframechan);
      95            0 :   if (fm4 == m3.end()) return badInfo;
      96            0 :   return fm4->second;
      97            0 : }
      98              : 
      99              : 
     100            0 : dune::PD2HDChannelMapSP::HDChanInfo_t dune::PD2HDChannelMapSP::GetChanInfoFromOfflChan(unsigned int offlineChannel) const {
     101            0 :   auto ci = OfflToChanInfo.find(offlineChannel);
     102            0 :   if (ci == OfflToChanInfo.end()) 
     103              :     {
     104            0 :       HDChanInfo_t badInfo = {};
     105            0 :       badInfo.valid = false;
     106            0 :       return badInfo;
     107            0 :     }
     108            0 :   return ci->second;
     109              : 
     110              : }
        

Generated by: LCOV version 2.0-1