CMS 3D CMS Logo

Functions
L1GtPatternGenerator.cc File Reference
#include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtPatternGenerator.h"
#include <memory>
#include <iomanip>
#include <fstream>
#include "DataFormats/L1GlobalCaloTrigger/interface/L1GctCollections.h"
#include "DataFormats/L1GlobalCaloTrigger/interface/L1GctHtMiss.h"
#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h"
#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h"
#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
#include "DataFormats/L1GlobalTrigger/interface/L1GtFdlWord.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h"
#include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtPatternMap.h"
#include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtPatternWriter.h"

Go to the source code of this file.

Functions

static std::vector< uint32_t > chopWords (const std::vector< bool > &aWord)
 
static void extractGlobalTriggerWord (const std::vector< bool > input, L1GtPatternLine &line, const std::string &prefix)
 
template<class TRecord , typename TResult >
static void extractRecordData (const edm::Event &iEvent, L1GtPatternMap &allPatterns, const std::string &label, const std::string &instance, TResult(TRecord::*rawFunctionPtr)() const, const std::string &prefix, uint32_t(*packingFunction)(uint32_t)=0)
 

Function Documentation

static std::vector<uint32_t> chopWords ( const std::vector< bool > &  aWord)
static

Definition at line 130 of file L1GtPatternGenerator.cc.

References mps_fire::i, and mps_fire::result.

Referenced by extractGlobalTriggerWord().

130  {
131  std::vector<uint32_t> result;
132 
133  result.resize((aWord.size()+31)/32, 0);
134 
135  for(unsigned i = 0 ; i < aWord.size(); ++i) {
136  result[i/32] |= aWord[i] << (i%32);
137  }
138 
139  return result;
140 }
static void extractGlobalTriggerWord ( const std::vector< bool >  input,
L1GtPatternLine line,
const std::string &  prefix 
)
static

Split a vector<bool> of arbitrary size into uint32_t chunks and add them to a pattern file line with the given prefix.

Definition at line 145 of file L1GtPatternGenerator.cc.

References chopWords(), mps_fire::i, and L1GtPatternLine::push().

Referenced by L1GtPatternGenerator::extractGlobalTriggerData().

146 {
147  std::vector<uint32_t> resultWords = chopWords(input);
148 
149  // add in reverse order, so that higher-order words have lower indices
150  // (like in "natural" number representation) (10 -> digit1=1 digit2=0)
151  for(unsigned i = resultWords.size() ; i > 0; --i) {
152  line.push(prefix, resultWords[i-1]);
153  }
154 }
static std::string const input
Definition: EdmProvDump.cc:44
void push(const std::string &prefix, boost::uint32_t value)
static std::vector< uint32_t > chopWords(const std::vector< bool > &aWord)
template<class TRecord , typename TResult >
static void extractRecordData ( const edm::Event iEvent,
L1GtPatternMap allPatterns,
const std::string &  label,
const std::string &  instance,
TResult(TRecord::*)() const  rawFunctionPtr,
const std::string &  prefix,
uint32_t(*)(uint32_t)  packingFunction = 0 
)
static

Actual data extraction. The template parameters are neccessary because we have to handle multiple unrelated record types and call member functions of varying return type, but note that they don't need to be specified in practice because the rawFunctionPtr parameter defines them anyway.

Parameters
iEventThe event to get the records from.
allPatternsDestination object
labelFirst half of the input tag that identifies our source in the event
instanceSecond half of the input tag that identifies our source in the event
rawFunctionPtrPointer-to-member-function that specifies a getter function that extracts the information we want from the record object.
prefixThe column name prefix that defines how the columns in the pattern map will be named (
See also
L1GtPatternLine::push)
Parameters
packingFunctionan optional function that the raw value is passed through befor it is added to the pattern line

Definition at line 96 of file L1GtPatternGenerator.cc.

References edm::EventID::event(), Exception, edm::Event::getByLabel(), L1GtPatternMap::getLine(), cmsBatch::handle, edm::EventBase::id(), instance, edm::HandleBase::isValid(), geometryCSVtoXML::line, dataset::name, and L1GtPatternLine::push().

Referenced by L1GtPatternGenerator::analyze().

103 {
104  // Extract record from event.
106  iEvent.getByLabel(label, instance, handle);
107 
108  if(!handle.isValid()) {
109  throw cms::Exception(__func__) << "Failed to extract record of type " << typeid(TRecord).name() <<
110  " labeled " << label << ", instance " << instance;
111  }
112 
113  edm::EventNumber_t eventNr = iEvent.id().event();
114 
115  // Then loop over collection and add each event to the map.
116  for(typename std::vector<TRecord>::const_iterator it = handle->begin(); it != handle->end(); ++it) {
117  int bx = it->bx();
118  L1GtPatternLine& line = allPatterns.getLine(eventNr, bx);
119  uint32_t value = ((*it).*rawFunctionPtr)();
120  if(packingFunction != nullptr) {
121  value = packingFunction(value);
122  }
123 
124  line.push(prefix, value);
125  }
126 }
EventNumber_t event() const
Definition: EventID.h:41
L1GtPatternLine & getLine(int eventNr, int bxNr)
static PFTauRenderPlugin instance
unsigned long long EventNumber_t
Definition: value.py:1
bool isValid() const
Definition: HandleBase.h:74
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:475
void push(const std::string &prefix, boost::uint32_t value)
edm::EventID id() const
Definition: EventBase.h:60