CMS 3D CMS Logo

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::PuttableSourceBase edm::InputSource edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 FRDStreamSource (edm::ParameterSet const &pset, edm::InputSourceDescription const &desc)
 
 ~FRDStreamSource () override
 
- Public Member Functions inherited from edm::ProducerSourceFromFiles
bool noFiles () const override
 
 ProducerSourceFromFiles (ParameterSet const &pset, InputSourceDescription const &desc, bool realData)
 
 ~ProducerSourceFromFiles () override
 
- 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
 
 ~ProducerSourceBase () noexcept(false) override
 
- Public Member Functions inherited from edm::PuttableSourceBase
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
 PuttableSourceBase (ParameterSet const &, InputSourceDescription const &)
 
void registerProducts () final
 Register any produced products. More...
 
- Public Member Functions inherited from edm::InputSource
std::shared_ptr< ActivityRegistryactReg () const
 Accessor for Activity Registry. More...
 
std::shared_ptr< BranchIDListHelper const > branchIDListHelper () const
 Accessors for branchIDListHelper. More...
 
std::shared_ptr< BranchIDListHelper > & branchIDListHelper ()
 
void closeFile (FileBlock *, bool cleaningUpAfterException)
 close current file More...
 
void doBeginJob ()
 Called by framework at beginning of job. More...
 
void doEndJob ()
 Called by framework at end of job. 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, StreamID streamID)
 issue an event report More...
 
LuminosityBlockNumber_t luminosityBlock () const
 Accessor for current luminosity block number. More...
 
std::shared_ptr< LuminosityBlockAuxiliaryluminosityBlockAuxiliary () 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
 
ProcessConfiguration const & processConfiguration () const
 Accessor for Process Configuration. More...
 
std::string const & processGUID () const
 Accessor for global process identifier. More...
 
ProcessHistoryRegistry const & processHistoryRegistry () const
 Accessors for process history registry. More...
 
ProcessHistoryRegistryprocessHistoryRegistry ()
 
ProcessingMode processingMode () const
 RunsLumisAndEvents (default), RunsAndLumis, or Runs. More...
 
std::shared_ptr< ProductRegistry const > productRegistry () const
 Accessors for product registry. More...
 
std::shared_ptr< ProductRegistry > & productRegistry ()
 
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< LuminosityBlockAuxiliaryreadLuminosityBlockAuxiliary ()
 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
 
int remainingEvents () const
 
int remainingLuminosityBlocks () const
 
void repeat ()
 Reset the remaining number of events/lumis to the maximum number. More...
 
std::pair< SharedResourcesAcquirer *, std::recursive_mutex * > resourceSharedWithDelayedReader ()
 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)
 
std::shared_ptr< ThinnedAssociationsHelper const > thinnedAssociationsHelper () const
 Accessors for thinnedAssociationsHelper. More...
 
std::shared_ptr< ThinnedAssociationsHelper > & thinnedAssociationsHelper ()
 
Timestamp const & timestamp () const
 Accessor for the current time, as seen by the input source. More...
 
virtual ~InputSource () noexcept(false)
 Destructor. More...
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 

Private Member Functions

bool openFile (const std::string &fileName)
 
void produce (edm::Event &e) override
 
bool setRunAndEventInfo (edm::EventID &id, edm::TimeValue_t &theTime, edm::EventAuxiliary::ExperimentType &eType) override
 

Private Attributes

std::vector< char > buffer_
 
unsigned int detectedFRDversion_ =0
 
std::ifstream fin_
 
std::vector< std::string >::const_iterator itFileName_
 
std::unique_ptr< FEDRawDataCollectionrawData_
 
const bool useL1EventID_
 
const bool verifyAdler32_
 
const bool verifyChecksum_
 

Additional Inherited Members

- Public Types inherited from edm::InputSource
enum  ItemType {
  IsInvalid, IsStop, IsFile, IsRun,
  IsLumi, IsEvent, IsRepeat, IsSynchronize
}
 
enum  ProcessingMode { Runs, RunsAndLumis, RunsLumisAndEvents }
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
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 &)
 
- Public Attributes inherited from edm::InputSource
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> postEventReadFromSourceSignal_
 
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> preEventReadFromSourceSignal_
 
- Protected Member Functions inherited from edm::PuttableSourceBase
void beginJob () override
 
- Protected Member Functions inherited from edm::InputSource
void decreaseRemainingEventsBy (int iSkipped)
 
bool eventCached () const
 
bool newLumi () const
 
bool newRun () const
 
ProcessHistoryRegistryprocessHistoryRegistryForUpdate ()
 
ProductRegistryproductRegistryUpdate ()
 
void reset () const
 
void resetEventCached ()
 
void resetLuminosityBlockAuxiliary (bool isNewLumi=true) const
 
void resetNewLumi ()
 
void resetNewRun ()
 
void resetRunAuxiliary (bool isNewRun=true) 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 19 of file FRDStreamSource.cc.

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

21  : ProducerSourceFromFiles(pset,desc,true),
22  verifyAdler32_(pset.getUntrackedParameter<bool> ("verifyAdler32", true)),
23  verifyChecksum_(pset.getUntrackedParameter<bool> ("verifyChecksum", true)),
24  useL1EventID_(pset.getUntrackedParameter<bool> ("useL1EventID", false))
25 {
26  itFileName_=fileNames().begin();
28  produces<FEDRawDataCollection>();
29 }
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 verifyChecksum_
const bool verifyAdler32_
FRDStreamSource::~FRDStreamSource ( )
inlineoverride

Member Function Documentation

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

Definition at line 167 of file FRDStreamSource.cc.

References gather_cfg::cout, DEFINE_FWK_INPUT_SOURCE, fin_, recoMuon::in, tablePrinter::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(), setRunAndEventInfo(), and ~FRDStreamSource().

168 {
169  std::cout << " open file.. " << fileName << std::endl;
170  fin_.close();
171  fin_.clear();
172  size_t pos = fileName.find(':');
173  if (pos!=std::string::npos) {
174  std::string prefix = fileName.substr(0,pos);
175  if (prefix!="file") return false;
176  pos++;
177  }
178  else pos=0;
179 
180  fin_.open(fileName.substr(pos).c_str(),std::ios::in|std::ios::binary);
181  return fin_.is_open();
182 }
std::ifstream fin_
void FRDStreamSource::produce ( edm::Event e)
overrideprivatevirtual

Implements edm::ProducerSourceBase.

Definition at line 162 of file FRDStreamSource.cc.

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

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

162  {
163  e.put(std::move(rawData_));
164 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
std::unique_ptr< FEDRawDataCollection > rawData_
def move(src, dest)
Definition: eostools.py:511
bool FRDStreamSource::setRunAndEventInfo ( edm::EventID id,
edm::TimeValue_t theTime,
edm::EventAuxiliary::ExperimentType eType 
)
overrideprivatevirtual

Implements edm::ProducerSourceBase.

Definition at line 32 of file FRDStreamSource.cc.

References tcds::Raw_v1::bst, buffer_, crc32c(), detectedFRDversion_, tcds::Header_v1::eventNumber, evf::evtn::evm_board_sense(), Exception, l1t::stage2::layer2::fedId, edm::FromFiles::fileNames(), fin_, FEDTrailer::fragmentLength(), FRDHeaderVersionSize, evf::evtn::get(), evf::evtn::getgpshigh(), evf::evtn::getgpslow(), tcds::BST_v1::gpstimehigh, tcds::BST_v1::gpstimelow, evf::evtn::gtpe_board_sense(), evf::evtn::gtpe_get(), tcds::Raw_v1::header, createfilelist::int, itFileName_, dttmaxenums::L, FEDHeader::length, FEDTrailer::length, tcds::Header_v1::lumiSection, FEDNumbering::MAXFEDID, FEDNumbering::MINTCDSuTCAFEDID, FEDNumbering::MINTriggerEGTPFEDID, FEDNumbering::MINTriggerGTPFEDID, openFile(), rawData_, FEDHeader::sourceID(), FEDHeader::triggerType(), useL1EventID_, verifyAdler32_, and verifyChecksum_.

Referenced by ~FRDStreamSource().

33 {
34  if ( fin_.peek() == EOF ) {
35  if ( ++itFileName_==fileNames().end() ) {
36  fin_.close();
37  return false;
38  }
39  if ( ! openFile(*itFileName_) ) {
40  throw cms::Exception("FRDStreamSource::setRunAndEventInfo") <<
41  "could not open file " << *itFileName_;
42  }
43  }
44 
45  if ( detectedFRDversion_==0) {
46  fin_.read((char*)&detectedFRDversion_,sizeof(uint32_t));
50  *((uint32_t*)(&buffer_[0]))=detectedFRDversion_;
51  fin_.read(&buffer_[0] + sizeof(uint32_t),FRDHeaderVersionSize[detectedFRDversion_]-sizeof(uint32_t));
52  assert( fin_.gcount() == FRDHeaderVersionSize[detectedFRDversion_]-(unsigned int)(sizeof(uint32_t) ));
53  }
54  else {
56  buffer_.resize(FRDHeaderVersionSize[detectedFRDversion_]);
57  fin_.read(&buffer_[0],FRDHeaderVersionSize[detectedFRDversion_]);
58  assert( fin_.gcount() == FRDHeaderVersionSize[detectedFRDversion_] );
59  }
60 
61  std::unique_ptr<FRDEventMsgView> frdEventMsg(new FRDEventMsgView(&buffer_[0]));
62  if (useL1EventID_)
63  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), frdEventMsg->event());
64 
65  const uint32_t totalSize = frdEventMsg->size();
66  if ( totalSize > buffer_.size() ) {
67  buffer_.resize(totalSize);
68  }
69  if ( totalSize > FRDHeaderVersionSize[detectedFRDversion_] ) {
70  fin_.read(&buffer_[0]+FRDHeaderVersionSize[detectedFRDversion_],totalSize-FRDHeaderVersionSize[detectedFRDversion_]);
71  if ( fin_.gcount() != totalSize-FRDHeaderVersionSize[detectedFRDversion_] ) {
72  throw cms::Exception("FRDStreamSource::setRunAndEventInfo") <<
73  "premature end of file " << *itFileName_;
74  }
75  frdEventMsg.reset(new FRDEventMsgView(&buffer_[0]));
76  }
77 
78  if ( verifyChecksum_ && frdEventMsg->version() >= 5 )
79  {
80  uint32_t crc=0;
81  crc = crc32c(crc,(const unsigned char*)frdEventMsg->payload(),frdEventMsg->eventSize());
82  if ( crc != frdEventMsg->crc32c() ) {
83  throw cms::Exception("FRDStreamSource::getNextEvent") <<
84  "Found a wrong crc32c checksum: expected 0x" << std::hex << frdEventMsg->crc32c() <<
85  " but calculated 0x" << crc;
86  }
87  }
88  else if ( verifyAdler32_ && frdEventMsg->version() >= 3 )
89  {
90  uint32_t adler = adler32(0L,Z_NULL,0);
91  adler = adler32(adler,(Bytef*)frdEventMsg->payload(),frdEventMsg->eventSize());
92 
93  if ( adler != frdEventMsg->adler32() ) {
94  throw cms::Exception("FRDStreamSource::setRunAndEventInfo") <<
95  "Found a wrong Adler32 checksum: expected 0x" << std::hex << frdEventMsg->adler32() <<
96  " but calculated 0x" << adler;
97  }
98  }
99 
100  rawData_ = std::make_unique<FEDRawDataCollection>();
101 
102  uint32_t eventSize = frdEventMsg->eventSize();
103  unsigned char* event = (unsigned char*)frdEventMsg->payload();
104  bool foundTCDSFED=false;
105  bool foundGTPFED=false;
106 
107 
108  while (eventSize > 0) {
109  assert(eventSize>=FEDTrailer::length);
110  eventSize -= FEDTrailer::length;
111  const FEDTrailer fedTrailer(event + eventSize);
112  const uint32_t fedSize = fedTrailer.fragmentLength() << 3; //trailer length counts in 8 bytes
113  assert(eventSize>=fedSize - FEDHeader::length);
114  eventSize -= (fedSize - FEDHeader::length);
115  const FEDHeader fedHeader(event + eventSize);
116  const uint16_t fedId = fedHeader.sourceID();
117  if (fedId>FEDNumbering::MAXFEDID)
118  {
119  throw cms::Exception("FedRawDataInputSource::fillFEDRawDataCollection") << "Out of range FED ID : " << fedId;
120  }
121  if (fedId == FEDNumbering::MINTCDSuTCAFEDID) {
122  foundTCDSFED=true;
123  tcds::Raw_v1 const* tcds = reinterpret_cast<tcds::Raw_v1 const*>(event + eventSize + FEDHeader::length);
124  id = edm::EventID(frdEventMsg->run(),tcds->header.lumiSection,tcds->header.eventNumber);
125  eType = static_cast<edm::EventAuxiliary::ExperimentType>(fedHeader.triggerType());
126  theTime = static_cast<edm::TimeValue_t>(((uint64_t)tcds->bst.gpstimehigh << 32) | tcds->bst.gpstimelow);
127  }
128 
129  if (fedId == FEDNumbering::MINTriggerGTPFEDID && !foundTCDSFED) {
130  foundGTPFED=true;
131  const bool GTPEvmBoardSense=evf::evtn::evm_board_sense(event + eventSize,fedSize);
132  if (!useL1EventID_) {
133  if (GTPEvmBoardSense)
134  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), evf::evtn::get(event + eventSize,true));
135  else
136  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), evf::evtn::get(event + eventSize,false));
137  }
138  //evf::evtn::evm_board_setformat(fedSize);
139  const uint64_t gpsl = evf::evtn::getgpslow(event + eventSize);
140  const uint64_t gpsh = evf::evtn::getgpshigh(event + eventSize);
141  theTime = static_cast<edm::TimeValue_t>((gpsh << 32) + gpsl);
142  }
143 
144 
145 
146  //take event ID from GTPE FED
147  if (fedId == FEDNumbering::MINTriggerEGTPFEDID && !foundGTPFED && !foundTCDSFED && !useL1EventID_) {
148  if (evf::evtn::gtpe_board_sense(event + eventSize)) {
149  id = edm::EventID(frdEventMsg->run(), frdEventMsg->lumi(), evf::evtn::gtpe_get(event + eventSize));
150  }
151  }
152  FEDRawData& fedData = rawData_->FEDData(fedId);
153  fedData.resize(fedSize);
154  memcpy(fedData.data(), event + eventSize, fedSize);
155  }
156  assert(eventSize == 0);
157 
158  return true;
159 }
unsigned int detectedFRDversion_
unsigned int getgpshigh(const unsigned char *)
std::ifstream fin_
bool gtpe_board_sense(const unsigned char *p)
static const uint32_t length
Definition: FEDTrailer.h:61
std::unique_ptr< FEDRawDataCollection > rawData_
unsigned int get(const unsigned char *, bool)
static const uint32_t length
Definition: FEDHeader.h:54
const uint32_t lumiSection
Definition: TCDSRaw.h:44
const uint32 FRDHeaderVersionSize[6]
std::vector< char > buffer_
const bool useL1EventID_
const uint64_t eventNumber
Definition: TCDSRaw.h:53
std::vector< std::string > const & fileNames() const
Definition: FromFiles.h:22
Definition: TCDSRaw.h:16
const struct BST_v1 bst
Definition: TCDSRaw.h:118
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)
const bool verifyChecksum_
uint32_t crc32c(uint32_t crc, const unsigned char *buf, size_t len)
Definition: crc32c.cc:340
unsigned long long uint64_t
Definition: Time.h:15
const bool verifyAdler32_
const uint32_t gpstimelow
Definition: TCDSRaw.h:77
const uint32_t gpstimehigh
Definition: TCDSRaw.h:78
unsigned int gtpe_get(const unsigned char *)
const struct Header_v1 header
Definition: TCDSRaw.h:116
unsigned int getgpslow(const unsigned char *)
Definition: event.py:1

Member Data Documentation

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

Definition at line 42 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

unsigned int FRDStreamSource::detectedFRDversion_ =0
private

Definition at line 46 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

std::ifstream FRDStreamSource::fin_
private

Definition at line 40 of file FRDStreamSource.h.

Referenced by openFile(), and setRunAndEventInfo().

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

Definition at line 39 of file FRDStreamSource.h.

Referenced by FRDStreamSource(), and setRunAndEventInfo().

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

Definition at line 41 of file FRDStreamSource.h.

Referenced by produce(), and setRunAndEventInfo().

const bool FRDStreamSource::useL1EventID_
private

Definition at line 45 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

const bool FRDStreamSource::verifyAdler32_
private

Definition at line 43 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().

const bool FRDStreamSource::verifyChecksum_
private

Definition at line 44 of file FRDStreamSource.h.

Referenced by setRunAndEventInfo().