LCOV - code coverage report
Current view: top level - artdaq/DAQdata - GenericFragmentSimulator.cc (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 77.1 % 48 37
Test Date: 2025-09-04 00:45:34 Functions: 85.7 % 7 6

            Line data    Source code
       1              : #include "artdaq/DAQdata/GenericFragmentSimulator.hh"
       2              : 
       3              : #include "cetlib_except/exception.h"
       4              : #include "fhiclcpp/ParameterSet.h"
       5              : 
       6              : #include <algorithm>
       7              : #include <functional>
       8              : #include <limits>
       9              : #include <memory>
      10              : 
      11            5 : artdaq::GenericFragmentSimulator::GenericFragmentSimulator(fhicl::ParameterSet const& ps)
      12            5 :     : content_selection_(static_cast<content_selector_t>(ps.get<size_t>("content_selection", 0)))
      13           10 :     , payload_size_spec_(ps.get<size_t>("payload_size", 10240))
      14           10 :     , want_random_payload_size_(ps.get<bool>("want_random_payload_size", false))
      15            5 :     , current_event_num_(0)
      16           10 :     , engine_(ps.get<int64_t>("random_seed", 314159))
      17           15 :     , payload_size_generator_(payload_size_spec_)
      18              : 
      19              : {
      20           10 :         fragment_ids_.resize(ps.get<size_t>("fragments_per_event", 5));
      21           10 :         auto current_id = ps.get<Fragment::fragment_id_t>("starting_fragment_id", 0);
      22            5 :         std::generate(fragment_ids_.begin(),
      23              :                       fragment_ids_.end(),
      24           25 :                       [&current_id]() { return current_id++; });
      25            5 : }
      26              : 
      27          410 : bool artdaq::GenericFragmentSimulator::getNext_(FragmentPtrs& frags)
      28              : {
      29          410 :         ++current_event_num_;
      30              :         // frags.reserve(frags.size() + fragment_ids_.size());
      31         2460 :         for (auto fragID : fragment_ids_)
      32              :         {
      33         2050 :                 frags.emplace_back();
      34              :                 bool result =
      35         2050 :                     getNext(current_event_num_, fragID, frags.back());
      36         2050 :                 if (!result) { return result; }
      37              :         }
      38          410 :         return true;
      39              : }
      40              : 
      41         2050 : bool artdaq::GenericFragmentSimulator::
      42              :     getNext(Fragment::sequence_id_t sequence_id,
      43              :             Fragment::fragment_id_t fragment_id,
      44              :             FragmentPtr& frag_ptr)
      45              : {
      46         2050 :         frag_ptr = std::make_unique<Fragment>(sequence_id, fragment_id);
      47         2050 :         size_t payload_size = generateFragmentSize_();
      48         2050 :         frag_ptr->resize(payload_size, 0);
      49         2050 :         frag_ptr->setSystemType(artdaq::Fragment::EmptyFragmentType);
      50         2050 :         switch (content_selection_)
      51              :         {
      52         2000 :                 case content_selector_t::EMPTY:
      53         2000 :                         break;  // values are already correct
      54            0 :                 case content_selector_t::FRAG_ID:
      55            0 :                         std::fill_n(frag_ptr->dataBegin(), payload_size, fragment_id);
      56            0 :                         break;
      57            0 :                 case content_selector_t::RANDOM:
      58            0 :                         std::generate_n(frag_ptr->dataBegin(),
      59              :                                         payload_size,
      60            0 :                                         [&]() -> int64_t {
      61            0 :                                                 return fragment_content_generator_(engine_);
      62              :                                         });
      63            0 :                         break;
      64           50 :                 case content_selector_t::DEAD_BEEF:
      65           50 :                         std::fill_n(frag_ptr->dataBegin(),
      66              :                                     payload_size,
      67           50 :                                     0xDEADBEEFDEADBEEF);
      68           50 :                         break;
      69            0 :                 default:
      70            0 :                         throw cet::exception("UnknownContentSelection")  // NOLINT(cert-err60-cpp)
      71              :                             << "Unknown content selection: "
      72            0 :                             << static_cast<uint8_t>(content_selection_);
      73              :         }
      74         2050 :         assert(frag_ptr != nullptr);
      75         2050 :         return true;
      76              : }
      77              : 
      78              : std::vector<artdaq::Fragment::fragment_id_t>
      79            2 : artdaq::GenericFragmentSimulator::
      80              :     fragmentIDs_()
      81              : {
      82            2 :         return fragment_ids_;
      83              : }
      84              : 
      85              : std::size_t
      86         2050 : artdaq::GenericFragmentSimulator::
      87              :     generateFragmentSize_()
      88              : {
      89         2050 :         return want_random_payload_size_ ? payload_size_generator_(engine_) : payload_size_spec_;
      90              : }
        

Generated by: LCOV version 2.0-1