CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
sistrip::SpyEventMatcherModule Class Reference
Inheritance diagram for sistrip::SpyEventMatcherModule:
edm::EDFilter edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void beginJob () override
 
bool filter (edm::Event &event, const edm::EventSetup &eventSetup) override
 
 SpyEventMatcherModule (const edm::ParameterSet &config)
 
 ~SpyEventMatcherModule () override
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilter () override
 
- 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
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void copyData (const uint32_t eventId, const uint8_t apvAddress, const SpyEventMatcher::SpyEventList *matches, edm::Event &event, const SiStripFedCabling &cabling) const
 
void findL1IDandAPVAddress (const edm::Event &event, const SiStripFedCabling &cabling, uint32_t &l1ID, uint8_t &apvAddress) const
 

Private Attributes

const bool doMerge_
 
const bool filterNonMatchingEvents_
 
const edm::InputTag primaryStreamRawDataTag_
 
edm::EDGetTokenT< FEDRawDataCollectionprimaryStreamRawDataToken_
 
std::unique_ptr< SpyEventMatcherspyEventMatcher_
 
std::unique_ptr< SpyUtilitiesutils_
 

Static Private Attributes

static const char * messageLabel_ = "SiStripSpyDataMergeModule"
 

Additional Inherited Members

- Public Types inherited from edm::EDFilter
typedef EDFilter ModuleType
 
- 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
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDFilter
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 29 of file SiStripSpyEventMatcherModule.cc.

Constructor & Destructor Documentation

sistrip::SpyEventMatcherModule::SpyEventMatcherModule ( const edm::ParameterSet config)

Definition at line 62 of file SiStripSpyEventMatcherModule.cc.

References doMerge_, primaryStreamRawDataTag_, and primaryStreamRawDataToken_.

63  : filterNonMatchingEvents_(config.getParameter<bool>("FilterNonMatchingEvents")),
64  doMerge_(config.getParameter<bool>("MergeData")),
65  primaryStreamRawDataTag_(config.getParameter<edm::InputTag>("PrimaryEventRawDataTag")),
66  spyEventMatcher_(new SpyEventMatcher(config)),
67  utils_(new SpyUtilities) {
68  primaryStreamRawDataToken_ = consumes<FEDRawDataCollection>(primaryStreamRawDataTag_);
69  if (doMerge_) {
70  produces<FEDRawDataCollection>("RawSpyData");
71  produces<std::vector<uint32_t> >("SpyTotalEventCount");
72  produces<std::vector<uint32_t> >("SpyL1ACount");
73  produces<std::vector<uint32_t> >("SpyAPVAddress");
74  produces<edm::DetSetVector<SiStripRawDigi> >("SpyScope");
75  produces<edm::DetSetVector<SiStripRawDigi> >("SpyPayload");
76  produces<edm::DetSetVector<SiStripRawDigi> >("SpyReordered");
77  produces<edm::DetSetVector<SiStripRawDigi> >("SpyVirginRaw");
78  }
79  }
T getParameter(std::string const &) const
std::unique_ptr< SpyUtilities > utils_
edm::EDGetTokenT< FEDRawDataCollection > primaryStreamRawDataToken_
std::unique_ptr< SpyEventMatcher > spyEventMatcher_
sistrip::SpyEventMatcherModule::~SpyEventMatcherModule ( )
override

Definition at line 81 of file SiStripSpyEventMatcherModule.cc.

81 {}

Member Function Documentation

void sistrip::SpyEventMatcherModule::beginJob ( void  )
overridevirtual

Reimplemented from edm::EDFilter.

Definition at line 83 of file SiStripSpyEventMatcherModule.cc.

References spyEventMatcher_.

83 { spyEventMatcher_->initialize(); }
std::unique_ptr< SpyEventMatcher > spyEventMatcher_
void sistrip::SpyEventMatcherModule::copyData ( const uint32_t  eventId,
const uint8_t  apvAddress,
const SpyEventMatcher::SpyEventList matches,
edm::Event event,
const SiStripFedCabling cabling 
) const
private

Definition at line 158 of file SiStripSpyEventMatcherModule.cc.

References sistrip::SpyEventMatcher::SpyDataCollections::apvAddresses, sistrip::SpyEventMatcher::SpyDataCollections::l1aCounters, eostools::move(), sistrip::SpyEventMatcher::SpyDataCollections::payloadDigis, edm::Event::put(), sistrip::SpyEventMatcher::SpyDataCollections::rawData, sistrip::SpyEventMatcher::SpyDataCollections::reorderedDigis, sistrip::SpyEventMatcher::SpyDataCollections::scopeDigis, spyEventMatcher_, sistrip::SpyEventMatcher::SpyDataCollections::totalEventCounters, and sistrip::SpyEventMatcher::SpyDataCollections::virginRawDigis.

Referenced by filter().

162  {
163  SpyEventMatcher::SpyDataCollections matchedCollections;
164  spyEventMatcher_->getMatchedCollections(eventId, apvAddress, matches, cabling, matchedCollections);
165  if (matchedCollections.rawData.get())
166  event.put(std::move(matchedCollections.rawData), "RawSpyData");
167  if (matchedCollections.totalEventCounters.get())
168  event.put(std::move(matchedCollections.totalEventCounters), "SpyTotalEventCount");
169  if (matchedCollections.l1aCounters.get())
170  event.put(std::move(matchedCollections.l1aCounters), "SpyL1ACount");
171  if (matchedCollections.apvAddresses.get())
172  event.put(std::move(matchedCollections.apvAddresses), "SpyAPVAddress");
173  if (matchedCollections.scopeDigis.get())
174  event.put(std::move(matchedCollections.scopeDigis), "SpyScope");
175  if (matchedCollections.payloadDigis.get())
176  event.put(std::move(matchedCollections.payloadDigis), "SpyPayload");
177  if (matchedCollections.reorderedDigis.get())
178  event.put(std::move(matchedCollections.reorderedDigis), "SpyReordered");
179  if (matchedCollections.virginRawDigis.get())
180  event.put(std::move(matchedCollections.virginRawDigis), "SpyVirginRaw");
181  }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
std::unique_ptr< SpyEventMatcher > spyEventMatcher_
def move(src, dest)
Definition: eostools.py:511
bool sistrip::SpyEventMatcherModule::filter ( edm::Event event,
const edm::EventSetup eventSetup 
)
override

Definition at line 85 of file SiStripSpyEventMatcherModule.cc.

References copyData(), doMerge_, MillePedeFileConverter_cfg::e, filterNonMatchingEvents_, findL1IDandAPVAddress(), patCandidatesForDimuonsSequences_cff::matches, messageLabel_, spyEventMatcher_, utils_, and cms::Exception::what().

Referenced by Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::filter(), Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::find(), Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::setDataAccessor(), and Vispa.Plugins.Browser.BrowserTabController.BrowserTabController::switchCenterView().

85  {
86  const SiStripFedCabling& cabling = *(utils_->getCabling(eventSetup));
87  uint8_t apvAddress = 0;
88  uint32_t eventId = 0;
89  try {
90  findL1IDandAPVAddress(event, cabling, eventId, apvAddress);
91  } catch (const cms::Exception& e) {
92  LogError(messageLabel_) << e.what();
93  return (filterNonMatchingEvents_ ? false : true);
94  }
95  const SpyEventMatcher::SpyEventList* matches = spyEventMatcher_->matchesForEvent(eventId, apvAddress);
96  if (matches) {
97  if (doMerge_) {
98  copyData(eventId, apvAddress, matches, event, cabling);
99  }
100  return true;
101  } else {
102  return (filterNonMatchingEvents_ ? false : true);
103  }
104  }
void copyData(const uint32_t eventId, const uint8_t apvAddress, const SpyEventMatcher::SpyEventList *matches, edm::Event &event, const SiStripFedCabling &cabling) const
std::unique_ptr< SpyUtilities > utils_
char const * what() const override
Definition: Exception.cc:103
std::set< EventID > SpyEventList
std::unique_ptr< SpyEventMatcher > spyEventMatcher_
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
void findL1IDandAPVAddress(const edm::Event &event, const SiStripFedCabling &cabling, uint32_t &l1ID, uint8_t &apvAddress) const
void sistrip::SpyEventMatcherModule::findL1IDandAPVAddress ( const edm::Event event,
const SiStripFedCabling cabling,
uint32_t &  l1ID,
uint8_t &  apvAddress 
) const
private

Definition at line 106 of file SiStripSpyEventMatcherModule.cc.

References edmScanValgrind::buffer, FEDRawData::data(), data, MillePedeFileConverter_cfg::e, Exception, sistrip::FEDCH_PER_FEUNIT, SiStripFedCabling::fedConnections(), FEDRawDataCollection::FEDData(), SiStripFedCabling::fedIds(), l1t_dqm_sourceclient-live_cfg::fedRawData, sistrip::FEDFullDebugHeader::feUnitMajorityAddress(), RecoTauValidation_cfi::header, sistrip::HEADER_TYPE_FULL_DEBUG, LogDebug, messageLabel_, primaryStreamRawDataToken_, FEDRawData::size(), and cms::Exception::what().

Referenced by filter().

109  {
110  edm::Handle<FEDRawDataCollection> fedRawDataHandle;
111  event.getByToken(primaryStreamRawDataToken_, fedRawDataHandle);
112  const FEDRawDataCollection& fedRawData = *fedRawDataHandle;
113  for (auto iFedId = cabling.fedIds().begin(); iFedId != cabling.fedIds().end(); ++iFedId) {
114  const FEDRawData& data = fedRawData.FEDData(*iFedId);
115  if ((!data.data()) || (!data.size())) {
116  LogDebug(messageLabel_) << "Failed to get FED data for FED ID " << *iFedId;
117  continue;
118  }
119  std::unique_ptr<FEDBuffer> buffer;
120  try {
121  buffer.reset(new FEDBuffer(data.data(), data.size()));
122  } catch (const cms::Exception& e) {
123  LogDebug(messageLabel_) << "Failed to build FED buffer for FED ID " << *iFedId << ". Exception was "
124  << e.what();
125  continue;
126  }
127  if (!buffer->doChecks(true)) {
128  LogDebug(messageLabel_) << "Buffer check failed for FED ID " << *iFedId;
129  continue;
130  }
131  l1ID = buffer->daqLvl1ID();
132  apvAddress = buffer->trackerSpecialHeader().apveAddress();
133  if (apvAddress != 0) {
134  return;
135  } else {
136  if (buffer->trackerSpecialHeader().headerType() != HEADER_TYPE_FULL_DEBUG) {
137  continue;
138  }
139  const FEDFullDebugHeader* header = dynamic_cast<const FEDFullDebugHeader*>(buffer->feHeader());
140  auto connections = cabling.fedConnections(*iFedId);
141  for (auto iConn = connections.begin(); iConn != connections.end(); ++iConn) {
142  if (!iConn->isConnected()) {
143  continue;
144  }
145  if (!buffer->channelGood(iConn->fedCh(), true)) {
146  continue;
147  } else {
148  apvAddress = header->feUnitMajorityAddress(iConn->fedCh() / FEDCH_PER_FEUNIT);
149  return;
150  }
151  }
152  }
153  }
154  //if we haven't already found an acceptable alternative, throw an exception
155  throw cms::Exception(messageLabel_) << "Failed to get L1ID/APV address from any FED";
156  }
#define LogDebug(id)
char const * what() const override
Definition: Exception.cc:103
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
edm::EDGetTokenT< FEDRawDataCollection > primaryStreamRawDataToken_
FedsConstIterRange fedIds() const
static const uint16_t FEDCH_PER_FEUNIT
ConnsConstIterRange fedConnections(uint16_t fed_id) const
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24

Member Data Documentation

const bool sistrip::SpyEventMatcherModule::doMerge_
private

Definition at line 49 of file SiStripSpyEventMatcherModule.cc.

Referenced by filter(), and SpyEventMatcherModule().

const bool sistrip::SpyEventMatcherModule::filterNonMatchingEvents_
private

Definition at line 48 of file SiStripSpyEventMatcherModule.cc.

Referenced by filter().

const char * sistrip::SpyEventMatcherModule::messageLabel_ = "SiStripSpyDataMergeModule"
staticprivate

Definition at line 47 of file SiStripSpyEventMatcherModule.cc.

Referenced by filter(), and findL1IDandAPVAddress().

const edm::InputTag sistrip::SpyEventMatcherModule::primaryStreamRawDataTag_
private

Definition at line 50 of file SiStripSpyEventMatcherModule.cc.

Referenced by SpyEventMatcherModule().

edm::EDGetTokenT<FEDRawDataCollection> sistrip::SpyEventMatcherModule::primaryStreamRawDataToken_
private

Definition at line 51 of file SiStripSpyEventMatcherModule.cc.

Referenced by findL1IDandAPVAddress(), and SpyEventMatcherModule().

std::unique_ptr<SpyEventMatcher> sistrip::SpyEventMatcherModule::spyEventMatcher_
private

Definition at line 52 of file SiStripSpyEventMatcherModule.cc.

Referenced by beginJob(), copyData(), and filter().

std::unique_ptr<SpyUtilities> sistrip::SpyEventMatcherModule::utils_
private

Definition at line 53 of file SiStripSpyEventMatcherModule.cc.

Referenced by filter().