1 #ifndef artdaq_core_Data_RawEvent_hh
2 #define artdaq_core_Data_RawEvent_hh
4 #include "artdaq-core/Data/dictionarycontrol.hh"
5 #include "artdaq-core/Data/Fragments.hh"
7 #include "cetlib/exception.h"
23 namespace detail {
struct RawEventHeader; }
26 typedef uint32_t run_id_t;
27 typedef uint32_t subrun_id_t;
28 typedef Fragment::sequence_id_t sequence_id_t;
31 subrun_id_t subrun_id;
32 sequence_id_t sequence_id;
37 sequence_id_t event) :
52 typedef detail::RawEventHeader::run_id_t run_id_t;
53 typedef detail::RawEventHeader::subrun_id_t subrun_id_t;
54 typedef detail::RawEventHeader::sequence_id_t sequence_id_t;
56 RawEvent(run_id_t run, subrun_id_t subrun, sequence_id_t event);
62 void insertFragment(FragmentPtr && pfrag);
68 size_t numFragments()
const;
71 size_t wordCount()
const;
74 run_id_t runID()
const;
75 subrun_id_t subrunID()
const;
76 sequence_id_t sequenceID()
const;
77 bool isComplete()
const;
80 void print(std::ostream & os)
const;
85 std::unique_ptr<std::vector<Fragment>> releaseProduct();
88 void fragmentTypes(std::vector<Fragment::type_t>& type_list);
96 std::unique_ptr<std::vector<Fragment>> releaseProduct(Fragment::type_t);
102 FragmentPtrs fragments_;
105 typedef std::shared_ptr<RawEvent> RawEvent_ptr;
108 RawEvent::RawEvent(run_id_t run, subrun_id_t subrun, sequence_id_t event) :
109 header_(run, subrun, event),
115 void RawEvent::insertFragment(FragmentPtr && pfrag)
117 if (pfrag ==
nullptr) {
118 throw cet::exception(
"LogicError")
119 <<
"Attempt to insert a null FragmentPtr into a RawEvent detected.\n";
121 fragments_.emplace_back(std::move(pfrag));
124 inline void RawEvent::markComplete() { header_.is_complete =
true; }
127 size_t RawEvent::numFragments()
const
129 return fragments_.size();
133 size_t RawEvent::wordCount()
const
136 for (
auto const & frag : fragments_) { sum += frag->size(); }
140 inline RawEvent::run_id_t RawEvent::runID()
const {
return header_.run_id; }
141 inline RawEvent::subrun_id_t RawEvent::subrunID()
const {
return header_.subrun_id; }
142 inline RawEvent::sequence_id_t RawEvent::sequenceID()
const {
return header_.sequence_id; }
143 inline bool RawEvent::isComplete()
const {
return header_.is_complete; }
146 std::unique_ptr<std::vector<Fragment>> RawEvent::releaseProduct()
148 std::unique_ptr<std::vector<Fragment>> result(
new std::vector<Fragment>);
149 result->reserve(fragments_.size());
152 for(
auto & i : fragments_) {
153 result->emplace_back(std::move(*i));
163 void RawEvent::fragmentTypes(std::vector<Fragment::type_t>& type_list)
167 for(
auto& i : fragments_) {
168 Fragment::type_t fragType = i->type();
169 if (std::find(type_list.begin(),type_list.end(),fragType) == type_list.end()) {
170 type_list.push_back(fragType);
178 std::unique_ptr<std::vector<Fragment>>
179 RawEvent::releaseProduct(Fragment::type_t fragment_type)
181 std::unique_ptr<std::vector<Fragment>> result(
new std::vector<Fragment>);
182 FragmentPtrs::iterator iter = fragments_.begin();
184 if ((*iter)->type() == fragment_type) {
185 result->push_back(std::move(*(*iter)));
186 iter = fragments_.erase(iter);
191 }
while (iter != fragments_.end());
196 std::ostream & operator<<(std::ostream & os, RawEvent
const & ev)