LCOV - code coverage report
Current view: top level - artdaq/ArtModules - ArtdaqEvent.hh (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 0.0 % 27 0
Test Date: 2025-09-04 00:45:34 Functions: 0.0 % 4 0

            Line data    Source code
       1              : #ifndef artdaq_ArtModules_ArtdaqEvent_hh
       2              : #define artdaq_ArtModules_ArtdaqEvent_hh
       3              : 
       4              : #include "artdaq-core/Data/RawEvent.hh"
       5              : 
       6              : #include <unordered_map>
       7              : 
       8              : /**
       9              :  * \brief An Artdaq Event, consisting of a header and a map of contained Fragments
      10              :  */
      11              : struct ArtdaqEvent
      12              : {
      13              :         std::shared_ptr<artdaq::detail::RawEventHeader> header;
      14              :         std::unordered_map<artdaq::Fragment::type_t, std::unique_ptr<artdaq::Fragments>> fragments;
      15              : 
      16            0 :         ArtdaqEvent()
      17            0 :             : header(nullptr), fragments() {}
      18              : 
      19            0 :         artdaq::Fragment::type_t FirstFragmentType() const
      20              :         {
      21            0 :                 if (fragments.empty()) return artdaq::Fragment::InvalidFragmentType;
      22            0 :                 return fragments.begin()->first;
      23              :         }
      24              : 
      25              :         size_t size() const
      26              :         {
      27              :                 size_t output = 0;
      28              : 
      29              :                 for (auto& type_pair : fragments)
      30              :                 {
      31              :                         output += type_pair.second->size();
      32              :                 }
      33              : 
      34              :                 return output;
      35              :         }
      36              : };
      37              : 
      38            0 : inline bool operator<(ArtdaqEvent const& l, ArtdaqEvent const& r)
      39              : {
      40            0 :         auto left = l.FirstFragmentType();
      41            0 :         auto right = r.FirstFragmentType();
      42              :         // Init Fragments are always first, EndOfData Fragments are always last
      43            0 :         if (left == artdaq::Fragment::InitFragmentType || right == artdaq::Fragment::InitFragmentType || left == artdaq::Fragment::EndOfDataFragmentType || right == artdaq::Fragment::EndOfDataFragmentType)
      44              :         {
      45            0 :                 if (left == right)
      46              :                 {
      47              :                         // Stable ordering
      48            0 :                         return l.header->sequence_id < r.header->sequence_id;
      49              :                 }
      50              :                 else
      51              :                 {
      52            0 :                         return left == artdaq::Fragment::InitFragmentType || right == artdaq::Fragment::EndOfDataFragmentType;
      53              :                 }
      54              :         }
      55            0 :         else if (l.header->run_id == r.header->run_id)
      56              :         {
      57              :                 // EndRun are last in run
      58            0 :                 if (left == artdaq::Fragment::EndOfRunFragmentType || right == artdaq::Fragment::EndOfRunFragmentType || left == artdaq::Fragment::RunDataFragmentType || right == artdaq::Fragment::RunDataFragmentType)
      59              :                 {
      60            0 :                         if (left == right)
      61              :                         {
      62              :                                 // Stable ordering
      63            0 :                                 return l.header->sequence_id < r.header->sequence_id;
      64              :                         }
      65              :                         else
      66              :                         {
      67            0 :                                 return right == artdaq::Fragment::EndOfRunFragmentType || right == artdaq::Fragment::RunDataFragmentType;
      68              :                         }
      69              :                 }
      70              : 
      71            0 :                 if (l.header->subrun_id == r.header->subrun_id)
      72              :                 {
      73              :                         // EndSubrun are last within a subrun
      74            0 :                         if (left == artdaq::Fragment::EndOfSubrunFragmentType || right == artdaq::Fragment::EndOfSubrunFragmentType || left == artdaq::Fragment::SubrunDataFragmentType || right == artdaq::Fragment::SubrunDataFragmentType)
      75              :                         {
      76            0 :                                 if (left == right)
      77              :                                 {
      78              :                                         // Stable ordering
      79            0 :                                         return l.header->sequence_id < r.header->sequence_id;
      80              :                                 }
      81              :                                 else
      82              :                                 {
      83            0 :                                         return right == artdaq::Fragment::EndOfSubrunFragmentType || right == artdaq::Fragment::SubrunDataFragmentType;
      84              :                                 }
      85              :                         }
      86              : 
      87              :                         // Order by sequence ID if not a recognized system broadcast
      88            0 :                         return l.header->sequence_id < r.header->sequence_id;
      89              :                 }
      90              :                 else
      91              :                 {
      92            0 :                         return l.header->subrun_id < r.header->subrun_id;
      93              :                 }
      94              :         }
      95              :         else
      96              :         {
      97            0 :                 return l.header->run_id < r.header->run_id;
      98              :         }
      99              : }
     100              : 
     101            0 : inline bool operator<(std::shared_ptr<ArtdaqEvent> const& l, std::shared_ptr<ArtdaqEvent> const& r)
     102              : {
     103            0 :         return *l < *r;
     104              : }
     105              : 
     106              : #endif /* artdaq_ArtModules_ArtdaqEvent_hh */
     107              : 
     108              : // Local Variables:
     109              : // mode: c++
     110              : // End:
        

Generated by: LCOV version 2.0-1