artdaq_core  v1_07_03
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
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  updateFragmentHeaderWC_();
17  fragmentHeader()->type = InvalidFragmentType;
18  fragmentHeader()->metadata_word_count = 0;
19  fragmentHeader()->version = RawFragmentHeader::CurrentVersion;
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  updateFragmentHeaderWC_();
30  fragmentHeader()->type = Fragment::InvalidFragmentType;
31  fragmentHeader()->sequence_id = Fragment::InvalidSequenceID;
32  fragmentHeader()->fragment_id = Fragment::InvalidFragmentID;
33  fragmentHeader()->timestamp = Fragment::InvalidTimestamp;
34  fragmentHeader()->version = RawFragmentHeader::CurrentVersion;
35  fragmentHeader()->metadata_word_count = 0;
36 }
37 
39  fragment_id_t fragID,
40  type_t type,
41  timestamp_t timestamp) :
42  vals_(RawFragmentHeader::num_words(), -1)
43 {
44  updateFragmentHeaderWC_();
45  if (type == Fragment::DataFragmentType)
46  {
47  // this value is special because it is the default specified
48  // in the constructor declaration
49  fragmentHeader()->setSystemType(type);
50  }
51  else
52  {
53  fragmentHeader()->setUserType(type);
54  }
55  fragmentHeader()->sequence_id = sequenceID;
56  fragmentHeader()->fragment_id = fragID;
57  fragmentHeader()->timestamp = timestamp;
58  fragmentHeader()->version = RawFragmentHeader::CurrentVersion;
59  fragmentHeader()->metadata_word_count = 0;
60 }
61 
62 #if HIDE_FROM_ROOT
63 void
64 artdaq::Fragment::print(std::ostream& os) const
65 {
66  os << " Fragment " << fragmentID()
67  << ", WordCount " << size()
68  << ", Event " << sequenceID()
69  << '\n';
70 }
71 
73 artdaq::Fragment::eodFrag(size_t nFragsToExpect)
74 {
75  artdaq::FragmentPtr result(new Fragment(static_cast<size_t>(ceil(sizeof(nFragsToExpect) /
76  static_cast<double>(sizeof(value_type))))));
77  result->setSystemType(Fragment::EndOfDataFragmentType);
78  *result->dataBegin() = nFragsToExpect;
79  return result;
80 }
81 
85  fragment_id_t fragID,
86  RawDataType const* dataPtr,
87  size_t dataSize,
88  timestamp_t timestamp)
89 {
90  FragmentPtr result(new Fragment(sequenceID, fragID, Fragment::DataFragmentType, timestamp));
91  result->resize(dataSize);
92  memcpy(result->dataAddress(), dataPtr, (dataSize * sizeof(RawDataType)));
93  return result;
94 }
95 #endif
std::unique_ptr< Fragment > FragmentPtr
A std::unique_ptr to a Fragment object.
Definition: Fragment.hh:49
detail::RawFragmentHeader::timestamp_t timestamp_t
typedef for timestamp_t from RawFragmentHeader
Definition: Fragment.hh:135
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:142
static constexpr type_t EndOfDataFragmentType
Copy EndOfDataFragmentType from RawFragmentHeader.
Definition: Fragment.hh:143
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:140
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:134
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:132
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:659
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:801
timestamp_t timestamp() const
Timestamp of the Fragment, from the Fragment header.
Definition: Fragment.hh:815
static constexpr type_t DataFragmentType
Copy DataFragmentType from RawFragmentHeader.
Definition: Fragment.hh:144
RawDataType version
The version of the fragment. Currently always InvalidVersion.
static constexpr fragment_id_t InvalidFragmentID
Copy InvalidFragmentID from RawFragmentHeader.
Definition: Fragment.hh:139
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:138
QuickVec< RawDataType >::value_type value_type
Alias value_type type from QuickVec&lt;RawDataType&gt;
Definition: Fragment.hh:179
static FragmentPtr eodFrag(size_t nFragsToExpect)
Creates an EndOfData Fragment.
Definition: Fragment.cc:73
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:64
detail::RawFragmentHeader::RawDataType RawDataType
The RawDataType (currently a 64-bit integer) is the basic unit of data representation within artdaq ...
Definition: Fragment.hh:35
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:177
A Fragment contains the data from one piece of the DAQ system for one event The artdaq::Fragment is t...
Definition: Fragment.hh:80
iterator begin()
Gets an iterator to the beginning of the QuickVec.
Definition: QuickVec.hh:404
detail::RawFragmentHeader::sequence_id_t sequence_id_t
typedef for sequence_id_t from RawFragmentHeader
Definition: Fragment.hh:133