$treeview $search $mathjax $extrastylesheet
artdaq_core
v3_04_20a
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #include "artdaq-core/Data/Fragment.hh" 00002 00003 #include <cmath> 00004 #include <iostream> 00005 00006 using artdaq::detail::RawFragmentHeader; 00007 00008 bool artdaq::fragmentSequenceIDCompare(Fragment i, Fragment j) 00009 { 00010 return i.sequenceID() < j.sequenceID(); 00011 } 00012 00013 artdaq::Fragment::Fragment() : 00014 vals_(RawFragmentHeader::num_words(), -1) 00015 { 00016 fragmentHeader()->version = RawFragmentHeader::CurrentVersion; 00017 updateFragmentHeaderWC_(); 00018 fragmentHeader()->type = InvalidFragmentType; 00019 fragmentHeader()->metadata_word_count = 0; 00020 } 00021 00022 artdaq::Fragment::Fragment(std::size_t n) : 00023 vals_(n + RawFragmentHeader::num_words()) 00024 { 00025 // vals ctor w/o init val is used; make sure header is ALL initialized. 00026 for (iterator ii = vals_.begin(); 00027 ii != (vals_.begin() + RawFragmentHeader::num_words()); ++ii) { 00028 *ii = -1; 00029 } 00030 fragmentHeader()->version = RawFragmentHeader::CurrentVersion; 00031 updateFragmentHeaderWC_(); 00032 fragmentHeader()->type = Fragment::InvalidFragmentType; 00033 fragmentHeader()->sequence_id = Fragment::InvalidSequenceID; 00034 fragmentHeader()->fragment_id = Fragment::InvalidFragmentID; 00035 fragmentHeader()->timestamp = Fragment::InvalidTimestamp; 00036 fragmentHeader()->metadata_word_count = 0; 00037 } 00038 00039 artdaq::Fragment::Fragment(sequence_id_t sequenceID, 00040 fragment_id_t fragID, 00041 type_t type, 00042 timestamp_t timestamp) : 00043 vals_(RawFragmentHeader::num_words(), -1) 00044 { 00045 fragmentHeader()->version = RawFragmentHeader::CurrentVersion; 00046 updateFragmentHeaderWC_(); 00047 if (type == Fragment::DataFragmentType) 00048 { 00049 // this value is special because it is the default specified 00050 // in the constructor declaration 00051 fragmentHeader()->setSystemType(type); 00052 } 00053 else 00054 { 00055 fragmentHeader()->setUserType(type); 00056 } 00057 fragmentHeader()->sequence_id = sequenceID; 00058 fragmentHeader()->fragment_id = fragID; 00059 fragmentHeader()->timestamp = timestamp; 00060 fragmentHeader()->metadata_word_count = 0; 00061 } 00062 00063 #if HIDE_FROM_ROOT 00064 void 00065 artdaq::Fragment::print(std::ostream& os) const 00066 { 00067 os << " Fragment " << fragmentID() 00068 << ", WordCount " << size() 00069 << ", Event " << sequenceID() 00070 << '\n'; 00071 } 00072 00073 artdaq::FragmentPtr 00074 artdaq::Fragment::eodFrag(size_t nFragsToExpect) 00075 { 00076 artdaq::FragmentPtr result(new Fragment(static_cast<size_t>(ceil(sizeof(nFragsToExpect) / 00077 static_cast<double>(sizeof(value_type)))))); 00078 result->setSystemType(Fragment::EndOfDataFragmentType); 00079 *result->dataBegin() = nFragsToExpect; 00080 return result; 00081 } 00082 00083 artdaq::FragmentPtr 00084 artdaq::Fragment:: 00085 dataFrag(sequence_id_t sequenceID, 00086 fragment_id_t fragID, 00087 RawDataType const* dataPtr, 00088 size_t dataSize, 00089 timestamp_t timestamp) 00090 { 00091 FragmentPtr result(new Fragment(sequenceID, fragID, Fragment::DataFragmentType, timestamp)); 00092 result->resize(dataSize); 00093 memcpy(result->dataAddress(), dataPtr, (dataSize * sizeof(RawDataType))); 00094 return result; 00095 } 00096 #endif