#include <L1Triggr/TextToDigi/src/TextToRaw.cc>
Public Member Functions | |
TextToRaw (const edm::ParameterSet &) | |
~TextToRaw () | |
Private Member Functions | |
virtual void | beginJob () |
virtual void | endJob () |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
void | putEmptyDigi (edm::Event &) |
Append empty digi collection. | |
Private Attributes | |
char | data_ [EVT_MAX_SIZE] |
int | fedId_ |
std::ifstream | file_ |
int | fileEventOffset_ |
std::string | filename_ |
int | nevt_ |
Static Private Attributes | |
static const unsigned | EVT_MAX_SIZE = 8192 |
Description: Convert ASCII dump of a raw event to FEDRawData format for unpacking
Implementation: Input format is a 32 bit hex string per line (LSW first). Events separated with blank line.
Definition at line 41 of file TextToRaw.h.
TextToRaw::TextToRaw | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 28 of file TextToRaw.cc.
References filename_.
: fedId_(iConfig.getUntrackedParameter<int>("fedId", 745)), filename_(iConfig.getUntrackedParameter<std::string>("filename", "slinkOutput.txt")), fileEventOffset_(iConfig.getUntrackedParameter<int>("FileEventOffset", 0)), nevt_(0) { edm::LogInfo("TextToDigi") << "Reading ASCII dump from " << filename_ << std::endl; //register the products produces<FEDRawDataCollection>(); }
TextToRaw::~TextToRaw | ( | ) |
Definition at line 42 of file TextToRaw.cc.
{ // do anything here that needs to be done at desctruction time // (e.g. close files, deallocate resources etc.) }
void TextToRaw::beginJob | ( | void | ) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 149 of file TextToRaw.cc.
References file_, filename_, and recoMuon::in.
{ // open VME file file_.open(filename_.c_str(), std::ios::in); if(!file_.good()) { edm::LogInfo("TextToDigi") << "Failed to open ASCII file " << filename_ << std::endl; } }
void TextToRaw::endJob | ( | void | ) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 159 of file TextToRaw.cc.
References file_.
{ file_.close(); }
void TextToRaw::produce | ( | edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [private, virtual] |
Implements edm::EDProducer.
Definition at line 63 of file TextToRaw.cc.
References abs, trackerHits::c, data_, EVT_MAX_SIZE, Exception, fedId_, file_, fileEventOffset_, i, ntuplemaker::iline, j, geometryCSVtoXML::line, nevt_, edm::Event::put(), putEmptyDigi(), and FEDRawData::resize().
{ using namespace edm; // Skip event if required if (nevt_ < fileEventOffset_){ putEmptyDigi(iEvent); nevt_++; return; } else if (nevt_==0 && fileEventOffset_<0) { std::string line; //skip first fileEventOffset input crossings for(unsigned i=0; i<(unsigned)abs(fileEventOffset_); i++) { unsigned iline=0; while (getline(file_, line) && !line.empty()) { iline++; if(iline*4>=EVT_MAX_SIZE) throw cms::Exception("TextToRawEventSizeOverflow") << "TextToRaw::produce() : " << " read too many lines (" << iline << ": " << line << ")" << ", maximum event size is " << EVT_MAX_SIZE << std::endl; } } } nevt_++; // read file std::string line; unsigned i=0; // count 32-bit words // while not encountering dumb errors while (getline(file_, line) && !line.empty() ) { // bail if we reached the EVT_MAX_SIZE if (i*4>=EVT_MAX_SIZE) { throw cms::Exception("TextToRaw") << "Read too many lines from file. Maximum event size is " << EVT_MAX_SIZE << " lines" << std::endl; } // convert string to int std::istringstream iss(line); unsigned long d; iss >> std::hex >> d; // copy data for (int j=0; j<4; j++) { if ( (i*4+j) < EVT_MAX_SIZE ) { char c = (d>>(8*j))&0xff; data_[i*4+j] = c; } } ++i; // bail if we reached the EVT_MAX_SIZE if (i>=EVT_MAX_SIZE) { throw cms::Exception("TextToRaw") << "Read too many lines from file. Maximum event size is " << EVT_MAX_SIZE << " lines" << std::endl; } } unsigned evtSize = i * 4; // create the collection std::auto_ptr<FEDRawDataCollection> rawColl(new FEDRawDataCollection()); // retrieve the target buffer FEDRawData& feddata=rawColl->FEDData(fedId_); // Allocate space for header+trailer+payload feddata.resize(evtSize); // fill FEDRawData object for (unsigned i=0; i<evtSize; ++i) { feddata.data()[i] = data_[i]; } // put the collection in the event iEvent.put(rawColl); }
void TextToRaw::putEmptyDigi | ( | edm::Event & | iEvent | ) | [private] |
Append empty digi collection.
Definition at line 53 of file TextToRaw.cc.
References edm::Event::put().
Referenced by produce().
{ std::auto_ptr<FEDRawDataCollection> rawColl(new FEDRawDataCollection()); //FEDRawData& feddata=rawColl->FEDData(fedId_); //feddata.data()[0] = 0; iEvent.put(rawColl); }
char TextToRaw::data_[EVT_MAX_SIZE] [private] |
Definition at line 62 of file TextToRaw.h.
Referenced by produce().
const unsigned TextToRaw::EVT_MAX_SIZE = 8192 [static, private] |
Definition at line 61 of file TextToRaw.h.
Referenced by produce().
int TextToRaw::fedId_ [private] |
Definition at line 54 of file TextToRaw.h.
Referenced by produce().
std::ifstream TextToRaw::file_ [private] |
Definition at line 58 of file TextToRaw.h.
Referenced by beginJob(), endJob(), and produce().
int TextToRaw::fileEventOffset_ [private] |
Definition at line 64 of file TextToRaw.h.
Referenced by produce().
std::string TextToRaw::filename_ [private] |
Definition at line 57 of file TextToRaw.h.
Referenced by beginJob(), and TextToRaw().
int TextToRaw::nevt_ [private] |
Definition at line 65 of file TextToRaw.h.
Referenced by produce().