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/Fragment.hh"
7 #include "cetlib/exception.h"
20 struct RawEventHeader;
136 void print(std::ostream& os)
const;
152 void fragmentTypes(std::vector<Fragment::type_t>& type_list);
179 header_(run, subrun, event)
186 if (pfrag ==
nullptr)
188 throw cet::exception(
"LogicError")
189 <<
"Attempt to insert a null FragmentPtr into a RawEvent detected.\n";
191 fragments_.emplace_back(std::move(pfrag));
199 return fragments_.size();
206 for (
auto const& frag : fragments_) { sum += frag->size(); }
218 std::unique_ptr<Fragments> result(
new Fragments);
219 result->reserve(fragments_.size());
222 for (
auto& i : fragments_)
224 result->emplace_back(std::move(*i));
238 for (
auto& i : fragments_)
240 auto fragType = i->type();
241 if (std::find(type_list.begin(), type_list.end(), fragType) == type_list.end())
243 type_list.push_back(fragType);
251 std::unique_ptr<Fragments>
254 std::unique_ptr<Fragments> result(
new Fragments);
255 FragmentPtrs::iterator iter = fragments_.begin();
258 if ((*iter)->type() == fragment_type)
260 result->push_back(std::move(*(*iter)));
261 iter = fragments_.erase(iter);
268 while (iter != fragments_.end());
std::unique_ptr< Fragment > FragmentPtr
A std::unique_ptr to a Fragment object.
std::unique_ptr< Fragments > releaseProduct()
Release all the Fragments from this RawEvent.
detail::RawEventHeader::run_id_t run_id_t
Run numbers are 32 bits.
void fragmentTypes(std::vector< Fragment::type_t > &type_list)
Fills in a list of unique fragment types from this event.
RawEvent(run_id_t run, subrun_id_t subrun, sequence_id_t event)
Constructs a RawEvent with the given parameters.
std::vector< Fragment > Fragments
A std::vector of Fragment objects.
subrun_id_t subrunID() const
Retrieve the subrun number from the RawEventHeader.
detail::RawEventHeader::subrun_id_t subrun_id_t
Subrun numbers are 32 bits.
sequence_id_t sequenceID() const
Retrieve the sequence id from the RawEventHeader.
bool isComplete() const
Retrieve the value of the complete flag from the RawEventHeader.
detail::RawEventHeader::sequence_id_t sequence_id_t
Field size should be the same as the Fragment::sequence_id field.
detail::RawFragmentHeader::type_t type_t
typedef for type_t from RawFragmentHeader
size_t numFragments() const
Return the number of fragments this RawEvent contains.
void print(std::ostream &os) const
Print summary information about this RawEvent to the given stream.
run_id_t runID() const
Retrieve the run number from the RawEventHeader.
std::ostream & operator<<(std::ostream &os, Fragment const &f)
Prints the given Fragment to the stream.
std::shared_ptr< RawEvent > RawEvent_ptr
A smart pointer to a RawEvent object.
std::list< FragmentPtr > FragmentPtrs
A std::list of FragmentPtrs.
void insertFragment(FragmentPtr &&pfrag)
Insert the given (pointer to a) Fragment into this RawEvent.
size_t wordCount() const
Return the sum of the word counts of all fragments in this RawEvent.
void markComplete()
Mark the event as complete.
detail::RawFragmentHeader::sequence_id_t sequence_id_t
typedef for sequence_id_t from RawFragmentHeader
RawEvent is the artdaq view of a generic event, containing a header and zero or more Fragments...