1 #include "DAQDataFormats/RawDataBlockV0.h" 2 #include "DAQDataFormats/RawDataBlock.h" 3 #include "DAQDataFormats/RawMilliSliceHeader.h" 4 #include "DAQDataFormats/DataFormatException.h" 10 #include <boost/lexical_cast.hpp> 11 #include <boost/format.hpp> 21 #include "DAQDataFormats/DataFormatFirst.inc" 22 #define CURRENT_CLASS RawDataBlock 23 #define CURRENT_CLASS_VERSION 0 24 #define CURRENT_FIELDS_SUB_NAMESPACE rawnano 25 #include "DAQDataFormats/DataFormatLast.inc" 33 ,_function_readDataFromFileDescriptor(&
RawDataBlock::readDataUnknownVersion)
66 ,_FloatingMicroBlock (NULL)
67 ,_FloatingMicroBlockNumber (-1)
129 bool RawDataBlock::softclear(){
140 if(_shouldBufferBeInternal){
141 resizeInternalBuffer(
_Header->sizeofdata() + 1);
143 checkBufferInternalness();
169 PRINT_ON_DEBUG(
"About to add "<<tmp_microblock.sizeofdata()<<
" words");
180 PRINT_ON_DEBUG(
"Size of internal buffer before reading "<<_InternalBuffer.size());
188 if(_shouldBufferBeInternal) {
192 resizeInternalBuffer(new_sizeofdata);
195 checkBufferInternalness();
202 checkBufferInternalness();
204 PRINT_ON_DEBUG(
"Size of internal buffer after reading "<<_InternalBuffer.size());
207 _Header->setDataSize(new_sizeofdata);
208 _Header->advanceNumMicroBlocks();
214 setMonteCarloFlag(tmp_microblock.getMicroSlice()->getMonteCarloFlag());
223 ,
const void* microslice_buffer
225 ,
const bool check_mc_flag
230 EXECUTE_FUNCTION(
addMicroBlock4)(millislice_buffer, microslice_buffer, tmp_microslice_header.getMicroSliceSize(), microblock_version, check_mc_flag);
244 uint32_t microblock_size = microslice_size;
254 microblock_size += tmp_header.sizeofdata();
260 if(_shouldBufferBeInternal) {
264 resizeInternalBuffer(new_sizeofdata);
267 checkBufferInternalness();
270 const uint32_t current_number_of_microblocks =
EXECUTE_FUNCTION(getNumMicroBlocks)();
275 _Header->setDataSize(new_sizeofdata);
276 _Header->setNumMicroBlocks(current_number_of_microblocks + 1);
303 _Header->setCRCCalculationUsed(
true);
315 uint32_t RawDataBlock::getVersion()
const {
return _Header->getVersion();}
316 uint32_t RawDataBlock::getMarker()
const {
return _Header->getMarker();}
317 uint32_t RawDataBlock::getTrigNumLo()
const {
return _Header->getTrigNumLo();}
318 uint32_t RawDataBlock::getTrigNumHi()
const {
return _Header->getTrigNumHi();}
319 uint64_t RawDataBlock::getTrigNum()
const {
return _Header->getTrigNum();}
320 uint16_t RawDataBlock::getNumMicroBlocks()
const {
return _Header->getNumMicroBlocks();}
321 uint16_t RawDataBlock::getBuffId()
const {
return _Header->getBuffId(); }
322 uint32_t RawDataBlock::getDataSize()
const {
return _Header->getDataSize();}
323 bool RawDataBlock::getMonteCarloFlag()
const {
return _Header->getMonteCarloFlag();}
324 bool RawDataBlock::isCRCCalculationUsed()
const {
return _Header->isCRCCalculationUsed();}
325 bool RawDataBlock::isConnectionInitialization()
const {
return _Header->isConnectionInitialization();}
326 bool RawDataBlock::isCloseConnection()
const {
return _Header->isCloseConnection();}
327 bool RawDataBlock::isMissingData()
const {
return _Header->isMissingData();}
331 bool RawDataBlock::setTrigNumLo (
const uint32_t
tr) {
return _Header->setTrigNumLo(tr);}
332 bool RawDataBlock::setTrigNumHi (
const uint32_t tr) {
return _Header->setTrigNumHi(tr);}
333 bool RawDataBlock::setTrigNum (
const uint64_t tr) {
return _Header->setTrigNum(tr);}
334 bool RawDataBlock::setBuffId (
const uint16_t
b) {
return _Header->setBuffId(b);}
335 bool RawDataBlock::setMonteCarloFlag (
const bool ft) {
return _Header->setMonteCarloFlag(ft);}
336 bool RawDataBlock::setConnectionInitialization (
const bool ft) {
return _Header->setConnectionInitialization(ft);}
337 bool RawDataBlock::setCloseConnection (
const bool ft) {
return _Header->setCloseConnection(ft);}
338 bool RawDataBlock::setMissingData (
const bool ft) {
return _Header->setMissingData(ft);}
346 const uint32_t* old_buffer = (uint32_t*)_Buffer;
347 _Buffer = (
void*)pointer;
348 _shouldBufferBeInternal = isInternalBuffer();
353 _Header->setBufferSource(pointer);
367 const uint32_t* floating_microblock_pointer =((uint32_t*)_Buffer) + ((uint32_t*)
_FloatingMicroBlock->getBuffer() - old_buffer);
368 RETURN_FUNCTION(setFloatingMicroBlockToBufferSource)(floating_microblock_pointer);
377 _function_sizeofdata = (
sizeofdata_t) &version0::RawDataBlock::sizeofdata;
383 bool RawDataBlock::setFloatingMicroBlockToBufferSource(
const void* internal_buffer_pointer)
const {
396 bool RawDataBlock::setFloatingMicroBlock (
const uint32_t imicro)
const {
403 uint32_t* pointer = NULL;
430 if (pointer >= end_of_buffer_pointer)
return false;
447 checkBufferInternalness();
453 checkBufferInternalness();
455 return datablock_buffer_new;
471 if (isInternalBuffer())
473 size_t bytes_to_read = 0;
478 const size_t min_bytes = min_words*
sizeof (uint32_t);
480 if (_InternalBuffer.size() < min_words)
482 _InternalBuffer.resize(min_words);
495 if (_InternalBuffer.size() < (size_t)ss)
496 { _InternalBuffer.resize( ss );
508 {
tprintf( 5,
"connection closed\n" );
513 if (ss != (
int)bytes_to_read)
523 || (size_of_data > 0x400000) )
545 if (isInternalBuffer())
547 size_t bytes_to_read;
553 const size_t min_bytes = min_words*
sizeof (uint32_t);
555 if (_InternalBuffer.size() < min_words)
557 _InternalBuffer.resize(min_words);
558 _Buffer = (
void*)(&_InternalBuffer[0]);
567 || (size_of_data > 0x400000) )
570 if (_InternalBuffer.size() < (size_t)size_of_data)
571 { _InternalBuffer.resize(size_of_data);
572 _Buffer = (
void*)(&_InternalBuffer[0]);
574 bytes_to_read = (size_t)size_of_data*
sizeof(uint32_t) -
_fd_read_bytes;
583 {
tprintf( 5,
"connection closed\n" );
588 if (ss != (
int)bytes_to_read)
596 _version = figureOutTheVersion(_Buffer);
599 setFunctionPointers();
606 resizeInternalBuffer(size_of_data);
612 || (size_of_data > 0x400000) )
630 uint32_t RawDataBlock::getCRC()
const{
632 if(!isCRCCalculationUsed())
return 0;
643 os<<
boost::format(
"\n---RawDataBlock----------------------------------------------------(size=%u, version=%u)\n")
650 for(uint32_t
i = 0;
i < size_of_data; ++
i){
652 printWord(
i,
false, os);
657 const uint32_t num_microblocks =
_Header->getNumMicroBlocks();
658 os<<
"Number of MicroBlocks = "<<num_microblocks<<
std::endl;
663 for(uint32_t imicroblock = 0; imicroblock <num_microblocks ; ++imicroblock){
664 if(!datablock_copy.setFloatingMicroBlock(imicroblock)){
665 const std::string error_message =
"Some failure during setFloatingMicroBlock number " 667 +
". Total number of microblocks = " 668 + boost::lexical_cast<std::string>(num_microblocks)
676 datablock_copy.getFloatingMicroBlock()->print(os);
680 if(isCRCCalculationUsed())os<<
"--- CRC = "<<getCRC()<<
"\n";
686 {
if (lvl > 31) lvl=31;
687 if (
_tlvl & (1<<lvl))
694 gettimeofday( &tv, NULL );
696 strftime( str,
sizeof(str),
"%T", localtime(&local) );
697 printf(
"%s.%06ld%s", str, (
long)tv.tv_usec, &indent[31-lvl] );
#define ZEROOUT_FUNCTION(FUNC)
#define DEEPCOPY_FUNCTION(FUNC)
#define EXECUTE_FUNCTION(FULLFUNCTIONNAME)
Execute and return the delegate.
#define VERSION_NAMESPACE
vector< vector< double > > clear
#define RETURN_FUNCTION(FULLFUNCTIONNAME)
std::string indent(std::size_t const i)
printf("%d Experimental points found\n", nlines)
std::string format(const int32_t &value, const int &ndigits=8)
#define PRINT_ON_DEBUG(x)