CMS 3D CMS Logo

Public Member Functions | Private Attributes | Static Private Attributes

DTROS25FileReader Class Reference

#include <DTROS25FileReader.h>

Inheritance diagram for DTROS25FileReader:
DaqBaseReader

List of all members.

Public Member Functions

virtual bool checkEndOfFile ()
 DTROS25FileReader (const edm::ParameterSet &pset)
 Constructor.
virtual int fillRawData (edm::EventID &eID, edm::Timestamp &tstamp, FEDRawDataCollection *&data)
 Generate and fill FED raw data for a full event.
bool isHeader (uint32_t word)
 check for a 32 bits word to be a ROS25 header
bool isTrailer (uint32_t word)
 check for a 32 bits word to be a ROS25 trailer
void swap (uint32_t &word)
 swapping the lsBits with the msBits
virtual ~DTROS25FileReader ()
 Destructor.

Private Attributes

edm::EventNumber_t eventNumber
RawFile inputFile
edm::RunNumber_t runNumber

Static Private Attributes

static const int rosWordLenght = 4

Detailed Description

Read DT ROS8 raw data files

Date:
2010/02/03 16:58:24
Revision:
1.6
Author:
M. Zanetti - INFN Padova

Definition at line 20 of file DTROS25FileReader.h.


Constructor & Destructor Documentation

DTROS25FileReader::DTROS25FileReader ( const edm::ParameterSet pset)

Constructor.

Definition at line 32 of file DTROS25FileReader.cc.

References Exception, RawFile::fail(), lut2db_cfg::filename, edm::ParameterSet::getUntrackedParameter(), inputFile, and RawFile::open().

                                                                : 
  runNumber(1), eventNumber(0) {
      
  const string & filename = pset.getUntrackedParameter<string>("fileName");

  inputFile.open(filename.c_str());
  if( inputFile.fail() ) {
    throw cms::Exception("InputFileMissing") 
      << "DTROS25FileReader: the input file: " << filename <<" is not present";
  }
}
DTROS25FileReader::~DTROS25FileReader ( ) [virtual]

Destructor.

Definition at line 45 of file DTROS25FileReader.cc.

References RawFile::close(), and inputFile.

                                     {
  inputFile.close();
}

Member Function Documentation

bool DTROS25FileReader::checkEndOfFile ( ) [virtual]

Definition at line 162 of file DTROS25FileReader.cc.

References RawFile::eof(), and inputFile.

                                      {

  bool retval=false;
  if ( inputFile.eof() ) retval=true;
  return retval;

}
int DTROS25FileReader::fillRawData ( edm::EventID eID,
edm::Timestamp tstamp,
FEDRawDataCollection *&  data 
) [virtual]

Generate and fill FED raw data for a full event.

Implements DaqBaseReader.

Definition at line 50 of file DTROS25FileReader.cc.

References filterCSVwithJSON::copy, gather_cfg::cout, data, FEDRawData::data(), eventNumber, FEDRawDataCollection::FEDData(), i, inputFile, isHeader(), isTrailer(), FEDNumbering::MINDTFEDID, RawFile::read(), FEDRawData::resize(), rosWordLenght, runNumber, and swap().

                                                               {
  data = new FEDRawDataCollection();

  vector<uint32_t> eventData;
  size_t estimatedEventDimension = 102400; // dimensione hardcoded
  eventData.reserve(estimatedEventDimension); 
  uint32_t word = 0;
  

  try {   

    bool marked = false;

    // getting the data word by word from the file
    // do it until you get the ROS25 trailer
    while ( !isTrailer(word) ) { 
      
      // get the first word
      int nread = inputFile.read(dataPointer<uint32_t>( &word ), rosWordLenght);
      
      // WARNING!!! ||swapping it|| (Check whether it is necessary) 
      swap(word);

      if ( nread<=0 ) throw 1;

      // get the ROS25 header
      if (isHeader(word)) marked=true;

      // from now on fill the eventData with the ROS data
      if (marked) {
        eventData.push_back(word);

      }
    } 

    // next event reading will start with meaningless trailer+header from DTLocalDAQ
    // those will be skipped automatically when seeking for the ROS25 header

    //if (eventData.size() > estimatedEventDimension) throw 2;
    
    // Setting the Event ID
    eID = EventID( runNumber, 1U, eventNumber);

    // eventDataSize = (Number Of Words)* (Word Size)
    int eventDataSize = eventData.size()*rosWordLenght;
    // It has to be a multiple of 8 bytes. if not, adjust the size of the FED payload
    int adjustment = (eventDataSize/4)%2 == 1 ? 4 : 0; 

    // The FED ID is always the first in the DT range
    FEDRawData& fedRawData = data->FEDData( FEDNumbering::MINDTFEDID );
    fedRawData.resize(eventDataSize+adjustment);
    
    copy(reinterpret_cast<unsigned char*>(&eventData[0]),
         reinterpret_cast<unsigned char*>(&eventData[0]) + eventDataSize, fedRawData.data());

    return true;
  }

  catch( int i ) {

    if ( i == 1 ){
      cout<<"[DTROS25FileReader]: ERROR! failed to get the trailer"<<endl;
      delete data; data=0;
      return false;
    }    
    else {
      cout<<"[DTROS25FileReader]:"
          <<" ERROR! ROS data exceeding estimated event dimension. Event size = "
          <<eventData.size()<<endl;
      delete data; data=0;
      return false;
    }
    
  }

}
bool DTROS25FileReader::isHeader ( uint32_t  word)

check for a 32 bits word to be a ROS25 header

Definition at line 139 of file DTROS25FileReader.cc.

References eventNumber.

Referenced by fillRawData().

                                              {

  bool it_is = false;
  if ( (word >> 24 ) == 31 ) {
    it_is = true;
    ++eventNumber;
  }
 
  return it_is;
}
bool DTROS25FileReader::isTrailer ( uint32_t  word)

check for a 32 bits word to be a ROS25 trailer

Definition at line 151 of file DTROS25FileReader.cc.

Referenced by fillRawData().

                                               {
 
  bool it_is = false;
  if ( (word >> 24 ) == 63 ) {
    it_is = true;
  }
 
  return it_is;
}
void DTROS25FileReader::swap ( uint32_t &  word)

swapping the lsBits with the msBits

Definition at line 129 of file DTROS25FileReader.cc.

References twoNibble::lsBits, and twoNibble::msBits.

Referenced by fillRawData().

                                            {
  
  twoNibble* newWorld = reinterpret_cast<twoNibble*>(&word);

  uint16_t msBits_tmp = newWorld->msBits;
  newWorld->msBits = newWorld->lsBits;
  newWorld->lsBits = msBits_tmp;
}

Member Data Documentation

Definition at line 52 of file DTROS25FileReader.h.

Referenced by fillRawData(), and isHeader().

const int DTROS25FileReader::rosWordLenght = 4 [static, private]

Definition at line 54 of file DTROS25FileReader.h.

Referenced by fillRawData().

Definition at line 51 of file DTROS25FileReader.h.

Referenced by fillRawData().