CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
FRDStreamSource Class Reference

#include <FRDStreamSource.h>

Inheritance diagram for FRDStreamSource:
edm::ProducerSourceFromFiles edm::ProducerSourceBase edm::FromFiles edm::InputSource edm::ProductRegistryHelper

Public Member Functions

 FRDStreamSource (edm::ParameterSet const &pset, edm::InputSourceDescription const &desc)
 
virtual ~FRDStreamSource ()
 
- Public Member Functions inherited from edm::ProducerSourceFromFiles
virtual bool noFiles () const override
 
 ProducerSourceFromFiles (ParameterSet const &pset, InputSourceDescription const &desc, bool realData)
 
virtual ~ProducerSourceFromFiles ()
 
- Public Member Functions inherited from edm::ProducerSourceBase
EventNumber_t event () const
 
unsigned int eventCreationDelay () const
 
EventID const & eventID () const
 
LuminosityBlockNumber_t luminosityBlock () const
 
unsigned int numberEventsInLumi () const
 
unsigned int numberEventsInRun () const
 
unsigned int numberEventsInThisLumi () const
 
unsigned int numberEventsInThisRun () const
 
TimeValue_t presentTime () const
 
 ProducerSourceBase (ParameterSet const &pset, InputSourceDescription const &desc, bool realData)
 
RunNumber_t run () const
 
unsigned int timeBetweenEvents () const
 
virtual ~ProducerSourceBase ()
 
- Public Member Functions inherited from edm::InputSource
std::shared_ptr< ActivityRegistryactReg () const
 Accessor for Activity Registry. More...
 
std::shared_ptr
< BranchIDListHelper
branchIDListHelper () const
 Accessor for branchIDListHelper. More...
 
void closeFile (FileBlock *, bool cleaningUpAfterException)
 close current file More...
 
void doBeginJob ()
 Called by framework at beginning of job. More...
 
void doBeginLumi (LuminosityBlockPrincipal &lbp, ProcessContext const *)
 Called by framework at beginning of lumi block. More...
 
void doBeginRun (RunPrincipal &rp, ProcessContext const *)
 Called by framework at beginning of run. More...
 
void doEndJob ()
 Called by framework at end of job. More...
 
void doEndLumi (LuminosityBlockPrincipal &lbp, bool cleaningUpAfterException, ProcessContext const *)
 Called by framework at end of lumi block. More...
 
void doEndRun (RunPrincipal &rp, bool cleaningUpAfterException, ProcessContext const *)
 Called by framework at end of run. More...
 
void doPostForkReacquireResources (std::shared_ptr< multicore::MessageReceiverForSource >)
 
void doPreForkReleaseResources ()
 Called by the framework before forking the process. More...
 
ProcessingController::ForwardState forwardState () const
 
bool goToEvent (EventID const &eventID)
 
 InputSource (ParameterSet const &, InputSourceDescription const &)
 Constructor. More...
 
 InputSource (InputSource const &)=delete
 
void issueReports (EventID const &eventID)
 issue an event report More...
 
LuminosityBlockNumber_t luminosityBlock () const
 Accessor for current luminosity block number. More...
 
std::shared_ptr
< LuminosityBlockAuxiliary
luminosityBlockAuxiliary () const
 Called by the framework to merge or insert lumi in principal cache. More...
 
int maxEvents () const
 
int maxLuminosityBlocks () const
 
ModuleDescription const & moduleDescription () const
 Accessor for 'module' description. More...
 
ItemType nextItemType ()
 Advances the source to the next item. More...
 
InputSourceoperator= (InputSource const &)=delete
 
bool primary () const
 Accessor for primary input source flag. More...
 
ProcessConfiguration const & processConfiguration () const
 Accessor for Process Configuration. More...
 
std::string const & processGUID () const
 Accessor for global process identifier. More...
 
ProcessHistoryRegistry const & processHistoryRegistry () const
 Const accessor for process history registry. More...
 
ProcessHistoryRegistryprocessHistoryRegistryForUpdate ()
 Non-const accessor for process history registry. More...
 
ProcessingMode processingMode () const
 RunsLumisAndEvents (default), RunsAndLumis, or Runs. More...
 
std::shared_ptr
< ProductRegistry const > 
productRegistry () const
 Accessor for product registry. More...
 
bool randomAccess () const
 
void readAndMergeLumi (LuminosityBlockPrincipal &lbp)
 Read next luminosity block (same as a prior lumi) More...
 
void readAndMergeRun (RunPrincipal &rp)
 Read next run (same as a prior run) More...
 
void readEvent (EventPrincipal &ep, StreamContext &)
 Read next event. More...
 
bool readEvent (EventPrincipal &ep, EventID const &, StreamContext &)
 Read a specific event. More...
 
std::unique_ptr< FileBlockreadFile ()
 Read next file. More...
 
void readLuminosityBlock (LuminosityBlockPrincipal &lumiPrincipal, HistoryAppender &historyAppender)
 Read next luminosity block (new lumi) More...
 
std::shared_ptr
< LuminosityBlockAuxiliary
readLuminosityBlockAuxiliary ()
 Read next luminosity block Auxilary. More...
 
void readRun (RunPrincipal &runPrincipal, HistoryAppender &historyAppender)
 Read next run (new run) More...
 
std::shared_ptr< RunAuxiliaryreadRunAuxiliary ()
 Read next run Auxiliary. More...
 
ProcessHistoryID const & reducedProcessHistoryID () const
 
void registerProducts ()
 Register any produced products. More...
 
int remainingEvents () const
 
int remainingLuminosityBlocks () const
 
void repeat ()
 Reset the remaining number of events/lumis to the maximum number. More...
 
SharedResourcesAcquirerresourceSharedWithDelayedReader () const
 Returns nullptr if no resource shared between the Source and a DelayedReader. More...
 
ProcessingController::ReverseState reverseState () const
 
void rewind ()
 Begin again at the first event. More...
 
RunNumber_t run () const
 Accessor for current run number. More...
 
std::shared_ptr< RunAuxiliaryrunAuxiliary () const
 Called by the framework to merge or insert run in principal cache. More...
 
void setLuminosityBlockNumber_t (LuminosityBlockNumber_t lb)
 Set the luminosity block ID. More...
 
void setRunNumber (RunNumber_t r)
 Set the run number. More...
 
void skipEvents (int offset)
 
bool skipForForking ()
 
std::shared_ptr
< ThinnedAssociationsHelper
thinnedAssociationsHelper () const
 Accessor for thinnedAssociationsHelper. More...
 
Timestamp const & timestamp () const
 Accessor for the current time, as seen by the input source. More...
 
virtual ~InputSource ()
 Destructor. More...
 

Private Member Functions

void beginLuminosityBlock (edm::LuminosityBlock &)
 
void beginRun (edm::Run &)
 
void endLuminosityBlock (edm::LuminosityBlock &)
 
void endRun (edm::Run &)
 
bool openFile (const std::string &fileName)
 
virtual void produce (edm::Event &e)
 
virtual bool setRunAndEventInfo (edm::EventID &id, edm::TimeValue_t &theTime, edm::EventAuxiliary::ExperimentType &eType)
 

Private Attributes

std::vector< char > buffer_
 
unsigned int detectedFRDversion_ =0
 
std::ifstream fin_
 
std::vector< std::string >
::const_iterator 
itFileName_
 
std::auto_ptr
< FEDRawDataCollection
rawData_
 
const bool useL1EventID_
 
const bool verifyAdler32_
 

Additional Inherited Members

- Public Types inherited from edm::InputSource
enum  ItemType {
  IsInvalid, IsStop, IsFile, IsRun,
  IsLumi, IsEvent, IsRepeat, IsSynchronize
}
 
enum  ProcessingMode { Runs, RunsAndLumis, RunsLumisAndEvents }
 
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::ProducerSourceFromFiles
static void fillDescription (ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from edm::ProducerSourceBase
static void fillDescription (ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from edm::InputSource
static const std::string & baseType ()
 
static void fillDescription (ParameterSetDescription &desc)
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::InputSource
void decreaseRemainingEventsBy (int iSkipped)
 
bool eventCached () const
 
std::shared_ptr
< LuminosityBlockPrincipal >
const 
luminosityBlockPrincipal () const
 
bool newLumi () const
 
bool newRun () const
 
ProcessHistoryRegistryprocessHistoryRegistryUpdate () const
 
ProductRegistryproductRegistryUpdate () const
 
void reset () const
 
void resetEventCached ()
 
void resetLuminosityBlockAuxiliary (bool isNewLumi=true) const
 
void resetNewLumi ()
 
void resetNewRun ()
 
void resetRunAuxiliary (bool isNewRun=true) const
 
std::shared_ptr< RunPrincipal >
const 
runPrincipal () const
 
void setEventCached ()
 Called by the framework to merge or ached() const {return eventCached_;}. More...
 
void setLuminosityBlockAuxiliary (LuminosityBlockAuxiliary *lbp)
 
void setNewLumi ()
 
void setNewRun ()
 
void setRunAuxiliary (RunAuxiliary *rp)
 
void setTimestamp (Timestamp const &theTime)
 To set the current time, as seen by the input source. More...
 
ItemType state () const
 

Detailed Description

Definition at line 21 of file FRDStreamSource.h.

Constructor & Destructor Documentation

FRDStreamSource::FRDStreamSource ( edm::ParameterSet const &  pset,
edm::InputSourceDescription const &  desc 
)

Definition at line 17 of file FRDStreamSource.cc.

References edm::FromFiles::fileNames(), itFileName_, and openFile().

19  : ProducerSourceFromFiles(pset,desc,true),
20  verifyAdler32_(pset.getUntrackedParameter<bool> ("verifyAdler32", true)),
21  useL1EventID_(pset.getUntrackedParameter<bool> ("useL1EventID", false))
22 {
23  itFileName_=fileNames().begin();
25  produces<FEDRawDataCollection>();
26 }
const bool useL1EventID_
ProducerSourceFromFiles(ParameterSet const &pset, InputSourceDescription const &desc, bool realData)
std::vector< std::string > const & fileNames() const
Definition: FromFiles.h:22
bool openFile(const std::string &fileName)
std::vector< std::string >::const_iterator itFileName_
const bool verifyAdler32_
virtual FRDStreamSource::~FRDStreamSource ( )
inlinevirtual

Definition at line 27 of file FRDStreamSource.h.

27 {};

Member Function Documentation

void FRDStreamSource::beginLuminosityBlock ( edm::LuminosityBlock )
inlineprivatevirtual

Reimplemented from edm::ProducerSourceBase.

Definition at line 36 of file FRDStreamSource.h.

36 {}
void FRDStreamSource::beginRun ( edm::Run )
inlineprivatevirtual

Reimplemented from edm::ProducerSourceBase.

Definition at line 34 of file FRDStreamSource.h.

34 {}
void FRDStreamSource::endLuminosityBlock ( edm::LuminosityBlock )
inlineprivatevirtual

Reimplemented from edm::ProducerSourceBase.

Definition at line 37 of file FRDStreamSource.h.

37 {}
void FRDStreamSource::endRun ( edm::Run )
inlineprivatevirtual

Reimplemented from edm::ProducerSourceBase.

Definition at line 35 of file FRDStreamSource.h.

35 {}
bool FRDStreamSource::openFile ( const std::string &  fileName)
private

Definition at line 153 of file FRDStreamSource.cc.

References gather_cfg::cout, fin_, recoMuon::in, prof2calltree::prefix, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by Vispa.Main.Application.Application::_readCommandLineAttributes(), Vispa.Main.Application.Application::doubleClickOnFile(), FRDStreamSource(), Vispa.Main.Application.Application::openFileDialog(), Vispa.Main.Application.Application::openRecentFileSlot(), and setRunAndEventInfo().

154 {
155  std::cout << " open file.. " << fileName << std::endl;
156  fin_.close();
157  fin_.clear();
158  size_t pos = fileName.find(':');
159  if (pos!=std::string::npos) {
160  std::string prefix = fileName.substr(0,pos);
161  if (prefix!="file") return false;
162  pos++;
163  }
164  else pos=0;
165 
166  fin_.open(fileName.substr(pos).c_str(),std::ios::in|std::ios::binary);
167  return fin_.is_open();
168 }
std::ifstream fin_
tuple cout
Definition: gather_cfg.py:121
void FRDStreamSource::produce ( edm::Event e)
privatevirtual

Implements edm::ProducerSourceBase.

Definition at line 148 of file FRDStreamSource.cc.

References edm::Event::put(), and rawData_.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

148  {
149  e.put(rawData_);
150 }
std::auto_ptr< FEDRawDataCollection > rawData_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
bool FRDStreamSource::setRunAndEventInfo ( edm::EventID id,
edm::TimeValue_t theTime,
edm::EventAuxiliary::ExperimentType eType 
)
privatevirtual

Implements edm::ProducerSourceBase.

Definition at line 29 of file FRDStreamSource.cc.

References assert(), buffer_, FEDRawData::data(), detectedFRDversion_, edm::ProducerSourceBase::event(), fedh_struct::eventid, evf::evtn::TCDSHeader::tcdsheader::eventNumber, fedt_struct::eventsize, evf::evtn::evm_board_sense(), edm::hlt::Exception, FED_EVSZ_EXTRACT, FED_EVTY_EXTRACT, FED_SOID_EXTRACT, HLT_25ns14e33_v1_cff::fedId, edm::FromFiles::fileNames(), fin_, evf::evtn::get(), evf::evtn::TCDSBST::getBST(), evf::evtn::TCDSRecord::getBST(), evf::evtn::TCDSHeader::getData(), evf::evtn::getgpshigh(), evf::evtn::getgpslow(), evf::evtn::TCDSRecord::getHeader(), evf::evtn::TCDSBST::bst::gpstimehigh, evf::evtn::TCDSBST::bst::gpstimelow, evf::evtn::gtpe_board_sense(), evf::evtn::gtpe_get(), evf::evtn::TCDSHeader::tcdsheader::header, itFileName_, dttmaxenums::L, evf::evtn::TCDSHeader::tcdsheader::lumiSection, FEDNumbering::MINTCDSuTCAFEDID, FEDNumbering::MINTriggerEGTPFEDID, FEDNumbering::MINTriggerGTPFEDID, openFile(), rawData_, record, FEDRawData::resize(), fedh_struct::sourceid, useL1EventID_, and verifyAdler32_.

30 {
31  if ( fin_.peek() == EOF ) {
32  if ( ++itFileName_==fileNames().end() ) {
33  fin_.close();
34  return false;
35  }
36  if ( ! openFile(*itFileName_) ) {
37  throw cms::Exception("FRDStreamSource::setRunAndEventInfo") <<
38  "could not open file " << *itFileName_;
39  }
40  }
41 
42  const uint32_t headerSize[4]={0,2*sizeof(uint32),(4+1024)*sizeof(uint32_t),7*sizeof(uint32_t)};//FRD header size per version
43  if ( detectedFRDversion_==0) {
44  fin_.read((char*)&detectedFRDversion_,sizeof(uint32_t));
46  if ( buffer_.size() < headerSize[detectedFRDversion_] )
47  buffer_.resize(headerSize[detectedFRDversion_]);
48  *((uint32_t*)(&buffer_[0]))=detectedFRDversion_;
49  fin_.read(&buffer_[0] + sizeof(uint32_t),headerSize[detectedFRDversion_]-sizeof(uint32_t));
50  assert( fin_.gcount() == headerSize[detectedFRDversion_]-(unsigned int)(sizeof(uint32_t) ));
51  }
52  else {
53  if ( buffer_.size() < headerSize[detectedFRDversion_] )
54  buffer_.resize(headerSize[detectedFRDversion_]);
55  fin_.read(&buffer_[0],headerSize[detectedFRDversion_]);
56  assert( fin_.gcount() == headerSize[detectedFRDversion_] );
57  }
58 
59  std::unique_ptr<FRDEventMsgView> frdEventMsg(new FRDEventMsgView(&buffer_[0]));
60  if (useL1EventID_)
61  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), frdEventMsg->event());
62 
63  const uint32_t totalSize = frdEventMsg->size();
64  if ( totalSize > buffer_.size() ) {
65  buffer_.resize(totalSize);
66  }
67  if ( totalSize > headerSize[detectedFRDversion_] ) {
68  fin_.read(&buffer_[0]+headerSize[detectedFRDversion_],totalSize-headerSize[detectedFRDversion_]);
69  if ( fin_.gcount() != totalSize-headerSize[detectedFRDversion_] ) {
70  throw cms::Exception("FRDStreamSource::setRunAndEventInfo") <<
71  "premature end of file " << *itFileName_;
72  }
73  frdEventMsg.reset(new FRDEventMsgView(&buffer_[0]));
74  }
75 
76  if ( verifyAdler32_ && frdEventMsg->version() >= 3 )
77  {
78  uint32_t adler = adler32(0L,Z_NULL,0);
79  adler = adler32(adler,(Bytef*)frdEventMsg->payload(),frdEventMsg->eventSize());
80 
81  if ( adler != frdEventMsg->adler32() ) {
82  throw cms::Exception("FRDStreamSource::setRunAndEventInfo") <<
83  "Found a wrong Adler32 checksum: expected 0x" << std::hex << frdEventMsg->adler32() <<
84  " but calculated 0x" << adler;
85  }
86  }
87 
88  rawData_.reset(new FEDRawDataCollection());
89 
90  uint32_t eventSize = frdEventMsg->eventSize();
91  char* event = (char*)frdEventMsg->payload();
92  bool foundTCDSFED=false;
93  bool foundGTPFED=false;
94 
95 
96  while (eventSize > 0) {
97  eventSize -= sizeof(fedt_t);
98  const fedt_t* fedTrailer = (fedt_t*) (event + eventSize);
99  const uint32_t fedSize = FED_EVSZ_EXTRACT(fedTrailer->eventsize) << 3; //trailer length counts in 8 bytes
100  eventSize -= (fedSize - sizeof(fedh_t));
101  const fedh_t* fedHeader = (fedh_t *) (event + eventSize);
102  const uint16_t fedId = FED_SOID_EXTRACT(fedHeader->sourceid);
103  if (fedId == FEDNumbering::MINTCDSuTCAFEDID) {
104  foundTCDSFED=true;
105  evf::evtn::TCDSRecord record((unsigned char *)(event + eventSize ));
106  id = edm::EventID(frdEventMsg->run(),record.getHeader().getData().header.lumiSection,
107  record.getHeader().getData().header.eventNumber);
109  //evf::evtn::evm_board_setformat(fedSize);
110  uint64_t gpsh = record.getBST().getBST().gpstimehigh;
111  uint32_t gpsl = record.getBST().getBST().gpstimelow;
112  theTime = static_cast<edm::TimeValue_t>((gpsh << 32) + gpsl);
113  }
114 
115  if (fedId == FEDNumbering::MINTriggerGTPFEDID && !foundTCDSFED) {
116  foundGTPFED=true;
117  const bool GTPEvmBoardSense=evf::evtn::evm_board_sense((unsigned char*) fedHeader,fedSize);
118  if (!useL1EventID_) {
119  if (GTPEvmBoardSense)
120  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), evf::evtn::get((unsigned char*) fedHeader,true));
121  else
122  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), evf::evtn::get((unsigned char*) fedHeader,false));
123  }
124  //evf::evtn::evm_board_setformat(fedSize);
125  const uint64_t gpsl = evf::evtn::getgpslow((unsigned char*) fedHeader);
126  const uint64_t gpsh = evf::evtn::getgpshigh((unsigned char*) fedHeader);
127  theTime = static_cast<edm::TimeValue_t>((gpsh << 32) + gpsl);
128  }
129 
130 
131 
132  //take event ID from GTPE FED
133  if (fedId == FEDNumbering::MINTriggerEGTPFEDID && !foundGTPFED && !foundTCDSFED && !useL1EventID_) {
134  if (evf::evtn::gtpe_board_sense((unsigned char*)fedHeader)) {
135  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), evf::evtn::gtpe_get((unsigned char*) fedHeader));
136  }
137  }
138  FEDRawData& fedData = rawData_->FEDData(fedId);
139  fedData.resize(fedSize);
140  memcpy(fedData.data(), event + eventSize, fedSize);
141  }
142  assert(eventSize == 0);
143 
144  return true;
145 }
unsigned int detectedFRDversion_
unsigned int getgpshigh(const unsigned char *)
std::ifstream fin_
bool gtpe_board_sense(const unsigned char *p)
struct fedh_struct fedh_t
JetCorrectorParameters::Record record
Definition: classes.h:7
unsigned int get(const unsigned char *, bool)
assert(m_qm.get())
std::vector< char > buffer_
const bool useL1EventID_
std::auto_ptr< FEDRawDataCollection > rawData_
unsigned int sourceid
Definition: fed_header.h:32
std::vector< std::string > const & fileNames() const
Definition: FromFiles.h:22
#define FED_EVTY_EXTRACT(a)
Definition: fed_header.h:38
void resize(size_t newsize)
Definition: FEDRawData.cc:32
struct fedt_struct fedt_t
#define FED_EVSZ_EXTRACT(a)
Definition: fed_trailer.h:36
bool openFile(const std::string &fileName)
unsigned long long TimeValue_t
Definition: Timestamp.h:28
std::vector< std::string >::const_iterator itFileName_
bool evm_board_sense(const unsigned char *p, size_t size)
unsigned int uint32
Definition: MsgTools.h:13
unsigned long long uint64_t
Definition: Time.h:15
const bool verifyAdler32_
unsigned int eventid
Definition: fed_header.h:33
unsigned int eventsize
Definition: fed_trailer.h:33
EventNumber_t event() const
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
unsigned int gtpe_get(const unsigned char *)
unsigned int getgpslow(const unsigned char *)
#define FED_SOID_EXTRACT(a)
Definition: fed_header.h:53

Member Data Documentation

std::vector<char> FRDStreamSource::buffer_
private

Definition at line 47 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

unsigned int FRDStreamSource::detectedFRDversion_ =0
private

Definition at line 50 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

std::ifstream FRDStreamSource::fin_
private

Definition at line 45 of file FRDStreamSource.h.

Referenced by openFile(), and setRunAndEventInfo().

std::vector<std::string>::const_iterator FRDStreamSource::itFileName_
private

Definition at line 44 of file FRDStreamSource.h.

Referenced by FRDStreamSource(), and setRunAndEventInfo().

std::auto_ptr<FEDRawDataCollection> FRDStreamSource::rawData_
private

Definition at line 46 of file FRDStreamSource.h.

Referenced by produce(), and setRunAndEventInfo().

const bool FRDStreamSource::useL1EventID_
private

Definition at line 49 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

const bool FRDStreamSource::verifyAdler32_
private

Definition at line 48 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().