artdaq_core  v3_06_01
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  fragmentHeaderPtr()->version = RawFragmentHeader::CurrentVersion;
17  updateFragmentHeaderWC_();
18  fragmentHeaderPtr()->type = InvalidFragmentType;
19  fragmentHeaderPtr()->metadata_word_count = 0;
20  fragmentHeaderPtr()->touch();
21 }
22 
24  : vals_(n + RawFragmentHeader::num_words())
25 {
26  // vals ctor w/o init val is used; make sure header is ALL initialized.
27  for (iterator ii = vals_.begin();
28  ii != (vals_.begin() + RawFragmentHeader::num_words()); ++ii)
29  {
30  *ii = -1;
31  }
32  fragmentHeaderPtr()->version = RawFragmentHeader::CurrentVersion;
33  updateFragmentHeaderWC_();
34  fragmentHeaderPtr()->type = Fragment::InvalidFragmentType;
35  fragmentHeaderPtr()->sequence_id = Fragment::InvalidSequenceID;
36  fragmentHeaderPtr()->fragment_id = Fragment::InvalidFragmentID;
37  fragmentHeaderPtr()->timestamp = Fragment::InvalidTimestamp;
38  fragmentHeaderPtr()->metadata_word_count = 0;
39  fragmentHeaderPtr()->touch();
40 }
41 
43  fragment_id_t fragID,
44  type_t type,
45  timestamp_t timestamp)
46  : vals_(RawFragmentHeader::num_words(), -1)
47 {
48  fragmentHeaderPtr()->version = RawFragmentHeader::CurrentVersion;
49  updateFragmentHeaderWC_();
50  if (type == Fragment::DataFragmentType)
51  {
52  // this value is special because it is the default specified
53  // in the constructor declaration
54  fragmentHeaderPtr()->setSystemType(type);
55  }
56  else
57  {
58  fragmentHeaderPtr()->setUserType(type);
59  }
60  fragmentHeaderPtr()->sequence_id = sequenceID;
61  fragmentHeaderPtr()->fragment_id = fragID;
62  fragmentHeaderPtr()->timestamp = timestamp;
63  fragmentHeaderPtr()->metadata_word_count = 0;
64  fragmentHeaderPtr()->touch();
65 }
66 
67 #if HIDE_FROM_ROOT
68 void artdaq::Fragment::print(std::ostream& os) const
69 {
70  os << " Fragment " << fragmentID()
71  << ", WordCount " << size()
72  << ", Event " << sequenceID()
73  << '\n';
74 }
75 
77 artdaq::Fragment::eodFrag(size_t nFragsToExpect)
78 {
79  artdaq::FragmentPtr result(new Fragment(static_cast<size_t>(ceil(sizeof(nFragsToExpect) /
80  static_cast<double>(sizeof(value_type))))));
81  result->setSystemType(Fragment::EndOfDataFragmentType);
82  *result->dataBegin() = nFragsToExpect;
83  return result;
84 }
85 
89  fragment_id_t fragID,
90  RawDataType const* dataPtr,
91  size_t dataSize,
92  timestamp_t timestamp)
93 {
94  FragmentPtr result(new Fragment(sequenceID, fragID, Fragment::DataFragmentType, timestamp));
95  result->resize(dataSize);
96  memcpy(result->dataAddress(), dataPtr, (dataSize * sizeof(RawDataType)));
97  return result;
98 }
99 #endif
std::unique_ptr< Fragment > FragmentPtr
A std::unique_ptr to a Fragment object.
Definition: Fragment.hh:54
detail::RawFragmentHeader::timestamp_t timestamp_t
typedef for timestamp_t from RawFragmentHeader
Definition: Fragment.hh:140
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:147
static constexpr type_t EndOfDataFragmentType
Copy EndOfDataFragmentType from RawFragmentHeader.
Definition: Fragment.hh:148
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:145
detail::RawFragmentHeader::fragment_id_t fragment_id_t
typedef for fragment_id_t from RawFragmentHeader
Definition: Fragment.hh:139
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:137
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:711
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:865
timestamp_t timestamp() const
Timestamp of the Fragment, from the Fragment header.
Definition: Fragment.hh:877
static constexpr type_t DataFragmentType
Copy DataFragmentType from RawFragmentHeader.
Definition: Fragment.hh:149
RawDataType version
The version of the fragment.
static constexpr fragment_id_t InvalidFragmentID
Copy InvalidFragmentID from RawFragmentHeader.
Definition: Fragment.hh:144
RawDataType fragment_id
The fragment_id uniquely identifies a particular piece of hardware within the artdaq system...
void touch()
Update the atime fields of the RawFragmentHeader to current time.
static constexpr sequence_id_t InvalidSequenceID
Copy InvalidSequenceID from RawFragmentHeader.
Definition: Fragment.hh:143
QuickVec< RawDataType >::value_type value_type
Alias value_type type from QuickVec&lt;RawDataType&gt;
Definition: Fragment.hh:185
static FragmentPtr eodFrag(size_t nFragsToExpect)
Creates an EndOfData Fragment.
Definition: Fragment.cc:77
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:68
detail::RawFragmentHeader::RawDataType RawDataType
The RawDataType (currently a 64-bit integer) is the basic unit of data representation within artdaq ...
Definition: Fragment.hh:40
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:183
A Fragment contains the data from one piece of the DAQ system for one event The artdaq::Fragment is t...
Definition: Fragment.hh:85
bool fragmentSequenceIDCompare(const Fragment &i, const Fragment &j)
Comparator for Fragment objects, based on their sequence_id.
Definition: Fragment.cc:8
iterator begin()
Gets an iterator to the beginning of the QuickVec.
Definition: QuickVec.hh:395
detail::RawFragmentHeader::sequence_id_t sequence_id_t
typedef for sequence_id_t from RawFragmentHeader
Definition: Fragment.hh:138