CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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)=NULL)
 

Function Documentation

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

Definition at line 135 of file L1GtPatternGenerator.cc.

References i, and query::result.

Referenced by extractGlobalTriggerWord().

135  {
136  std::vector<uint32_t> result;
137 
138  result.resize((aWord.size()+31)/32, 0);
139 
140  for(unsigned i = 0 ; i < aWord.size(); ++i) {
141  result[i/32] |= aWord[i] << (i%32);
142  }
143 
144  return result;
145 }
int i
Definition: DBlmapReader.cc:9
tuple result
Definition: query.py:137
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 150 of file L1GtPatternGenerator.cc.

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

Referenced by L1GtPatternGenerator::extractGlobalTriggerData().

151 {
152  std::vector<uint32_t> resultWords = chopWords(input);
153 
154  // add in reverse order, so that higher-order words have lower indices
155  // (like in "natural" number representation) (10 -> digit1=1 digit2=0)
156  for(unsigned i = resultWords.size() ; i > 0; --i) {
157  line.push(prefix, resultWords[i-1]);
158  }
159 }
int i
Definition: DBlmapReader.cc:9
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 = NULL 
)
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 98 of file L1GtPatternGenerator.cc.

References edm::EventID::event(), edm::hlt::Exception, edm::Event::getByLabel(), L1GtPatternMap::getLine(), patZpeak::handle, edm::EventBase::id(), instance, edm::HandleBase::isValid(), geometryCSVtoXML::line, mergeVDriftHistosByStation::name, NULL, L1GtPatternLine::push(), and relativeConstraints::value.

Referenced by L1GtPatternGenerator::analyze().

105 {
106  uint32_t valueCount;
107 
108  // Extract record from event.
110  iEvent.getByLabel(label, instance, handle);
111 
112  if(!handle.isValid()) {
113  throw cms::Exception(__func__) << "Failed to extract record of type " << typeid(TRecord).name() <<
114  " labeled " << label << ", instance " << instance;
115  }
116 
117  edm::EventNumber_t eventNr = iEvent.id().event();
118 
119  // Then loop over collection and add each event to the map.
120  for(typename std::vector<TRecord>::const_iterator it = handle->begin(); it != handle->end(); ++it) {
121  int bx = it->bx();
122  L1GtPatternLine& line = allPatterns.getLine(eventNr, bx);
123  uint32_t value = ((*it).*rawFunctionPtr)();
124  if(packingFunction != NULL) {
125  value = packingFunction(value);
126  }
127 
128  line.push(prefix, value);
129  ++valueCount;
130  }
131 }
EventNumber_t event() const
Definition: EventID.h:44
L1GtPatternLine & getLine(int eventNr, int bxNr)
unsigned int EventNumber_t
Definition: EventID.h:30
static PFTauRenderPlugin instance
#define NULL
Definition: scimark2.h:8
tuple handle
Definition: patZpeak.py:22
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
void push(const std::string &prefix, boost::uint32_t value)
edm::EventID id() const
Definition: EventBase.h:56