artdaq_core  v3_04_09
Fragment.cc
1 #include "artdaq-core/Data/Fragment.hh"
2 
3 #include <cmath>
4 #include <iostream>
5 
7 
9 {
10  return i.sequenceID() < j.sequenceID();
11 }
12 
14  vals_(RawFragmentHeader::num_words(), -1)
15 {
16  fragmentHeader()->version = RawFragmentHeader::CurrentVersion;
17  updateFragmentHeaderWC_();
18  fragmentHeader()->type = InvalidFragmentType;
19  fragmentHeader()->metadata_word_count = 0;
20 }
21 
23  vals_(n + RawFragmentHeader::num_words())
24 {
25  // vals ctor w/o init val is used; make sure header is ALL initialized.
26  for (iterator ii = vals_.begin();
27  ii != (vals_.begin() + RawFragmentHeader::num_words()); ++ii) {
28  *ii = -1;
29  }
30  fragmentHeader()->version = RawFragmentHeader::CurrentVersion;
31  updateFragmentHeaderWC_();
32  fragmentHeader()->type = Fragment::InvalidFragmentType;
33  fragmentHeader()->sequence_id = Fragment::InvalidSequenceID;
34  fragmentHeader()->fragment_id = Fragment::InvalidFragmentID;
35  fragmentHeader()->timestamp = Fragment::InvalidTimestamp;
36  fragmentHeader()->metadata_word_count = 0;
37 }
38 
40  fragment_id_t fragID,
41  type_t type,
42  timestamp_t timestamp) :
43  vals_(RawFragmentHeader::num_words(), -1)
44 {
45  fragmentHeader()->version = RawFragmentHeader::CurrentVersion;
46  updateFragmentHeaderWC_();
47  if (type == Fragment::DataFragmentType)
48  {
49  // this value is special because it is the default specified
50  // in the constructor declaration
51  fragmentHeader()->setSystemType(type);
52  }
53  else
54  {
55  fragmentHeader()->setUserType(type);
56  }
57  fragmentHeader()->sequence_id = sequenceID;
58  fragmentHeader()->fragment_id = fragID;
59  fragmentHeader()->timestamp = timestamp;
60  fragmentHeader()->metadata_word_count = 0;
61 }
62 
63 #if HIDE_FROM_ROOT
64 void
65 artdaq::Fragment::print(std::ostream& os) const
66 {
67  os << " Fragment " << fragmentID()
68  << ", WordCount " << size()
69  << ", Event " << sequenceID()
70  << '\n';
71 }
72 
74 artdaq::Fragment::eodFrag(size_t nFragsToExpect)
75 {
76  artdaq::FragmentPtr result(new Fragment(static_cast<size_t>(ceil(sizeof(nFragsToExpect) /
77  static_cast<double>(sizeof(value_type))))));
78  result->setSystemType(Fragment::EndOfDataFragmentType);
79  *result->dataBegin() = nFragsToExpect;
80  return result;
81 }
82 
86  fragment_id_t fragID,
87  RawDataType const* dataPtr,
88  size_t dataSize,
89  timestamp_t timestamp)
90 {
91  FragmentPtr result(new Fragment(sequenceID, fragID, Fragment::DataFragmentType, timestamp));
92  result->resize(dataSize);
93  memcpy(result->dataAddress(), dataPtr, (dataSize * sizeof(RawDataType)));
94  return result;
95 }
96 #endif
std::unique_ptr< Fragment > FragmentPtr
A std::unique_ptr to a Fragment object.
Definition: Fragment.hh:53
detail::RawFragmentHeader::timestamp_t timestamp_t
typedef for timestamp_t from RawFragmentHeader
Definition: Fragment.hh:139
RawDataType metadata_word_count
The number of RawDataType words in the user-defined metadata.
RawDataType type
The type of the fragment, either system or user-defined.
static constexpr type_t InvalidFragmentType
Copy InvalidFragmentType from RawFragmentHeader.
Definition: Fragment.hh:146
static constexpr type_t EndOfDataFragmentType
Copy EndOfDataFragmentType from RawFragmentHeader.
Definition: Fragment.hh:147
void setSystemType(uint8_t stype)
Sets the type field to the specified system type.
static constexpr timestamp_t InvalidTimestamp
Copy InvalidTimestamp from RawFragmentHeader.
Definition: Fragment.hh:144
bool fragmentSequenceIDCompare(Fragment i, Fragment j)
Comparator for Fragment objects, based on their sequence_id.
Definition: Fragment.cc:8
detail::RawFragmentHeader::fragment_id_t fragment_id_t
typedef for fragment_id_t from RawFragmentHeader
Definition: Fragment.hh:138
The RawFragmentHeader class contains the basic fields used by artdaq for routing Fragment objects thr...
detail::RawFragmentHeader::type_t type_t
typedef for type_t from RawFragmentHeader
Definition: Fragment.hh:136
static FragmentPtr dataFrag(sequence_id_t sequenceID, fragment_id_t fragID, InputIterator i, InputIterator e)
Creates a Fragment, copying data from given location. 12-Apr-2013, KAB - this method is deprecated...
Definition: Fragment.hh:680
RawDataType timestamp
The 64-bit timestamp field is the output of a user-defined clock used for building time-correlated ev...
RawDataType sequence_id
The 48-bit sequence_id uniquely identifies events within the artdaq system.
sequence_id_t sequenceID() const
Sequence ID of the Fragment, from the Fragment header.
Definition: Fragment.hh:837
timestamp_t timestamp() const
Timestamp of the Fragment, from the Fragment header.
Definition: Fragment.hh:851
static constexpr type_t DataFragmentType
Copy DataFragmentType from RawFragmentHeader.
Definition: Fragment.hh:148
RawDataType version
The version of the fragment.
static constexpr fragment_id_t InvalidFragmentID
Copy InvalidFragmentID from RawFragmentHeader.
Definition: Fragment.hh:143
RawDataType fragment_id
The fragment_id uniquely identifies a particular piece of hardware within the artdaq system...
static constexpr sequence_id_t InvalidSequenceID
Copy InvalidSequenceID from RawFragmentHeader.
Definition: Fragment.hh:142
QuickVec< RawDataType >::value_type value_type
Alias value_type type from QuickVec&lt;RawDataType&gt;
Definition: Fragment.hh:184
static FragmentPtr eodFrag(size_t nFragsToExpect)
Creates an EndOfData Fragment.
Definition: Fragment.cc:74
void setUserType(uint8_t utype)
Sets the type field to the specified user type.
void print(std::ostream &os) const
Print out summary information for this Fragment to the given stream.
Definition: Fragment.cc:65
detail::RawFragmentHeader::RawDataType RawDataType
The RawDataType (currently a 64-bit integer) is the basic unit of data representation within artdaq ...
Definition: Fragment.hh:39
Fragment()
Create a Fragment with all header values zeroed.
Definition: Fragment.cc:13
QuickVec< RawDataType >::iterator iterator
Alias iterator type from QuickVec&lt;RawDataType&gt;
Definition: Fragment.hh:182
A Fragment contains the data from one piece of the DAQ system for one event The artdaq::Fragment is t...
Definition: Fragment.hh:84
iterator begin()
Gets an iterator to the beginning of the QuickVec.
Definition: QuickVec.hh:399
detail::RawFragmentHeader::sequence_id_t sequence_id_t
typedef for sequence_id_t from RawFragmentHeader
Definition: Fragment.hh:137