CMS 3D CMS Logo

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

#include <L1GlobalTriggerRecordProducer.h>

Inheritance diagram for L1GlobalTriggerRecordProducer:
edm::stream::EDProducer<>

Public Member Functions

 L1GlobalTriggerRecordProducer (const edm::ParameterSet &)
 constructor(s) More...
 
 ~L1GlobalTriggerRecordProducer () override
 destructor More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

edm::EDGetTokenT
< L1GlobalTriggerReadoutRecord
m_l1GtReadoutRecordTag
 InputTag for the L1 Global Trigger DAQ readout record. More...
 
const L1GtTriggerMaskm_l1GtTmAlgo
 cached stuff More...
 
unsigned long long m_l1GtTmAlgoCacheID
 
edm::ESGetToken
< L1GtTriggerMask,
L1GtTriggerMaskAlgoTrigRcd
m_l1GtTmAlgoToken
 EventSetup Token for l1GtTriggerMaskAlgo. More...
 
const L1GtTriggerMaskm_l1GtTmTech
 
unsigned long long m_l1GtTmTechCacheID
 
edm::ESGetToken
< L1GtTriggerMask,
L1GtTriggerMaskTechTrigRcd
m_l1GtTmTechToken
 EventSetupToken for L1GtTriggerMaskTech. More...
 
std::vector< unsigned int > m_triggerMaskAlgoTrig
 
std::vector< unsigned int > m_triggerMaskTechTrig
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Description: L1GlobalTriggerRecord producer.

Implementation: <TODO: enter implementation details>

Author
: Vasile Mihai Ghete - HEPHY Vienna

Definition at line 41 of file L1GlobalTriggerRecordProducer.h.

Constructor & Destructor Documentation

L1GlobalTriggerRecordProducer::L1GlobalTriggerRecordProducer ( const edm::ParameterSet parSet)
explicit

constructor(s)

EventSetup Token for l1GtTriggerMaskAlgo

EventSetupToken for L1GtTriggerMaskTech

Definition at line 34 of file L1GlobaTriggerRecordProducer.cc.

References edm::ParameterSet::getParameter(), cmsLHEtoEOSManager::l, LogDebug, m_l1GtReadoutRecordTag, m_l1GtTmAlgoCacheID, m_l1GtTmAlgoToken, m_l1GtTmTechCacheID, and m_l1GtTmTechToken.

34  {
35  produces<L1GlobalTriggerRecord>();
36 
37  // input tag for DAQ GT record
39  consumes<L1GlobalTriggerReadoutRecord>(parSet.getParameter<edm::InputTag>("L1GtReadoutRecordTag"));
40 
41  LogDebug("L1GlobalTriggerRecordProducer").log([&parSet](auto& l) {
42  l << "\nInput tag for L1 GT DAQ record: " << parSet.getParameter<edm::InputTag>("L1GtReadoutRecordTag");
43  });
45  m_l1GtTmAlgoToken = esConsumes<L1GtTriggerMask, L1GtTriggerMaskAlgoTrigRcd>();
46 
48  m_l1GtTmTechToken = esConsumes<L1GtTriggerMask, L1GtTriggerMaskTechTrigRcd>();
49 
50  // initialize cached IDs
51 
52  m_l1GtTmAlgoCacheID = 0ULL;
53  m_l1GtTmTechCacheID = 0ULL;
54 }
edm::ESGetToken< L1GtTriggerMask, L1GtTriggerMaskTechTrigRcd > m_l1GtTmTechToken
EventSetupToken for L1GtTriggerMaskTech.
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > m_l1GtReadoutRecordTag
InputTag for the L1 Global Trigger DAQ readout record.
edm::ESGetToken< L1GtTriggerMask, L1GtTriggerMaskAlgoTrigRcd > m_l1GtTmAlgoToken
EventSetup Token for l1GtTriggerMaskAlgo.
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
#define LogDebug(id)
L1GlobalTriggerRecordProducer::~L1GlobalTriggerRecordProducer ( )
override

destructor

Definition at line 57 of file L1GlobaTriggerRecordProducer.cc.

57  {
58  // empty
59 }

Member Function Documentation

void L1GlobalTriggerRecordProducer::produce ( edm::Event iEvent,
const edm::EventSetup evSetup 
)
overrideprivate

set global decision, decision word and technical trigger word for bunch cross with L1Accept (BxInEvent = 0) before applying the masks

Definition at line 64 of file L1GlobaTriggerRecordProducer.cc.

References edm::EventSetup::get(), edm::Event::getByToken(), edm::EventSetup::getHandle(), L1GtTriggerMask::gtTriggerMask(), edm::isDebugEnabled(), edm::HandleBase::isValid(), cmsLHEtoEOSManager::l, HLT_FULL_cff::labels, LogDebug, LogTrace, m_l1GtReadoutRecordTag, m_l1GtTmAlgo, m_l1GtTmAlgoCacheID, m_l1GtTmAlgoToken, m_l1GtTmTech, m_l1GtTmTechCacheID, m_l1GtTmTechToken, m_triggerMaskAlgoTrig, m_triggerMaskTechTrig, edm::ProductLabels::module, eostools::move(), edm::ProductLabels::process, edm::ESHandle< class >::product(), edm::ProductLabels::productInstance, and edm::Event::put().

64  {
65  // produce the L1GlobalTriggerRecord
66  std::unique_ptr<L1GlobalTriggerRecord> gtRecord(new L1GlobalTriggerRecord());
67 
68  // get L1GlobalTriggerReadoutRecord
70  iEvent.getByToken(m_l1GtReadoutRecordTag, gtReadoutRecord);
71 
72  if (!gtReadoutRecord.isValid()) {
73  LogDebug("L1GlobalTriggerRecordProducer").log([this](auto& l) {
74  l << "\n\n Error: no L1GlobalTriggerReadoutRecord found with input tag ";
76  labelsForToken(m_l1GtReadoutRecordTag, labels);
77  l << labels.module << " " << labels.productInstance << " " << labels.process
78  << "\n Returning empty L1GlobalTriggerRecord.\n\n";
79  });
80  iEvent.put(std::move(gtRecord));
81  return;
82  }
83 
84  //
85  cms_uint16_t gtFinalOR = gtReadoutRecord->finalOR();
86  int physicsDaqPartition = 0;
87  bool gtDecision = static_cast<bool>(gtFinalOR & (1 << physicsDaqPartition));
88 
89  DecisionWord algoDecisionWord = gtReadoutRecord->decisionWord();
90  TechnicalTriggerWord techDecisionWord = gtReadoutRecord->technicalTriggerWord();
91 
92  // get / update the trigger mask from the EventSetup
93  // local cache & check on cacheIdentifier
94 
95  unsigned long long l1GtTmAlgoCacheID = evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().cacheIdentifier();
96 
97  if (m_l1GtTmAlgoCacheID != l1GtTmAlgoCacheID) {
99  m_l1GtTmAlgo = l1GtTmAlgo.product();
100 
102 
103  m_l1GtTmAlgoCacheID = l1GtTmAlgoCacheID;
104  }
105 
106  unsigned long long l1GtTmTechCacheID = evSetup.get<L1GtTriggerMaskTechTrigRcd>().cacheIdentifier();
107 
108  if (m_l1GtTmTechCacheID != l1GtTmTechCacheID) {
110  m_l1GtTmTech = l1GtTmTech.product();
111 
113 
114  m_l1GtTmTechCacheID = l1GtTmTechCacheID;
115  }
116 
119  gtRecord->setDecisionWordBeforeMask(algoDecisionWord);
120  gtRecord->setTechnicalTriggerWordBeforeMask(techDecisionWord);
121 
122  // mask the required bits for DAQ partition 0 (Physics Partition)
123 
124  int iDaq = 0;
125 
126  // algorithm trigger mask
127 
128  int iBit = -1; // bit counter
129 
130  for (std::vector<bool>::iterator itBit = algoDecisionWord.begin(); itBit != algoDecisionWord.end(); ++itBit) {
131  iBit++;
132 
133  int triggerMaskAlgoTrigBit = m_triggerMaskAlgoTrig[iBit] & (1 << iDaq);
134  //LogTrace("L1GlobalTriggerFDL")
135  //<< "\nAlgorithm trigger bit: " << iBit
136  //<< " mask = " << triggerMaskAlgoTrigBit
137  //<< " DAQ partition " << iDaq
138  //<< std::endl;
139 
140  if (triggerMaskAlgoTrigBit) {
141  *itBit = false;
142 
143  //LogTrace("L1GlobalTriggerFDL")
144  //<< "\nMasked algorithm trigger: " << iBit << ". Result set to false"
145  //<< std::endl;
146  }
147  }
148 
149  // mask the technical trigger
150 
151  iBit = -1; // bit counter
152 
153  for (std::vector<bool>::iterator itBit = techDecisionWord.begin(); itBit != techDecisionWord.end(); ++itBit) {
154  iBit++;
155 
156  int triggerMaskTechTrigBit = m_triggerMaskTechTrig[iBit] & (1 << iDaq);
157  //LogTrace("L1GlobalTriggerFDL")
158  //<< "\nTechnical trigger bit: " << iBit
159  //<< " mask = " << triggerMaskTechTrigBit
160  //<< " DAQ partition " << iDaq
161  //<< std::endl;
162 
163  if (triggerMaskTechTrigBit) {
164  *itBit = false;
165 
166  //LogTrace("L1GlobalTriggerFDL")
167  //<< "\nMasked technical trigger: " << iBit << ". Result set to false"
168  //<< std::endl;
169  }
170  }
171 
172  // set global decision, decision word and technical trigger word
173  // for bunch cross with L1Accept (BxInEvent = 0) after applying the trigger masks
174  gtRecord->setDecision(gtDecision);
175  gtRecord->setDecisionWord(algoDecisionWord);
176  gtRecord->setTechnicalTriggerWord(techDecisionWord);
177 
178  // get/set index of the set of prescale factors
179  unsigned int pfIndexTech = static_cast<unsigned int>((gtReadoutRecord->gtFdlWord()).gtPrescaleFactorIndexTech());
180  unsigned int pfIndexAlgo = static_cast<unsigned int>((gtReadoutRecord->gtFdlWord()).gtPrescaleFactorIndexAlgo());
181 
182  gtRecord->setGtPrescaleFactorIndexTech(pfIndexTech);
183  gtRecord->setGtPrescaleFactorIndexAlgo(pfIndexAlgo);
184 
185  if (edm::isDebugEnabled()) {
186  std::ostringstream myCoutStream;
187  gtRecord->print(myCoutStream);
188  LogTrace("L1GlobalTriggerRecordProducer") << "\n The following L1 GT record was produced.\n"
189  << myCoutStream.str() << "\n"
190  << std::endl;
191  }
192 
193  // put records into event
194  iEvent.put(std::move(gtRecord));
195 }
edm::ESGetToken< L1GtTriggerMask, L1GtTriggerMaskTechTrigRcd > m_l1GtTmTechToken
EventSetupToken for L1GtTriggerMaskTech.
bool isDebugEnabled()
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > m_l1GtReadoutRecordTag
InputTag for the L1 Global Trigger DAQ readout record.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
std::vector< unsigned int > m_triggerMaskAlgoTrig
#define LogTrace(id)
char const * process
Definition: ProductLabels.h:7
const L1GtTriggerMask * m_l1GtTmAlgo
cached stuff
const std::vector< unsigned int > & gtTriggerMask() const
get the trigger mask
std::vector< bool > DecisionWord
typedefs
def move
Definition: eostools.py:511
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
unsigned short cms_uint16_t
Definition: typedefs.h:13
bool isValid() const
Definition: HandleBase.h:70
char const * module
Definition: ProductLabels.h:5
std::vector< unsigned int > m_triggerMaskTechTrig
edm::ESGetToken< L1GtTriggerMask, L1GtTriggerMaskAlgoTrigRcd > m_l1GtTmAlgoToken
EventSetup Token for l1GtTriggerMaskAlgo.
T const * product() const
Definition: ESHandle.h:86
char const * productInstance
Definition: ProductLabels.h:6
T get() const
Definition: EventSetup.h:82
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
#define LogDebug(id)

Member Data Documentation

edm::EDGetTokenT<L1GlobalTriggerReadoutRecord> L1GlobalTriggerRecordProducer::m_l1GtReadoutRecordTag
private

InputTag for the L1 Global Trigger DAQ readout record.

Definition at line 67 of file L1GlobalTriggerRecordProducer.h.

Referenced by L1GlobalTriggerRecordProducer(), and produce().

const L1GtTriggerMask* L1GlobalTriggerRecordProducer::m_l1GtTmAlgo
private

cached stuff

trigger masks

Definition at line 56 of file L1GlobalTriggerRecordProducer.h.

Referenced by produce().

unsigned long long L1GlobalTriggerRecordProducer::m_l1GtTmAlgoCacheID
private

Definition at line 57 of file L1GlobalTriggerRecordProducer.h.

Referenced by L1GlobalTriggerRecordProducer(), and produce().

edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskAlgoTrigRcd> L1GlobalTriggerRecordProducer::m_l1GtTmAlgoToken
private

EventSetup Token for l1GtTriggerMaskAlgo.

Definition at line 69 of file L1GlobalTriggerRecordProducer.h.

Referenced by L1GlobalTriggerRecordProducer(), and produce().

const L1GtTriggerMask* L1GlobalTriggerRecordProducer::m_l1GtTmTech
private

Definition at line 59 of file L1GlobalTriggerRecordProducer.h.

Referenced by produce().

unsigned long long L1GlobalTriggerRecordProducer::m_l1GtTmTechCacheID
private

Definition at line 60 of file L1GlobalTriggerRecordProducer.h.

Referenced by L1GlobalTriggerRecordProducer(), and produce().

edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskTechTrigRcd> L1GlobalTriggerRecordProducer::m_l1GtTmTechToken
private

EventSetupToken for L1GtTriggerMaskTech.

Definition at line 71 of file L1GlobalTriggerRecordProducer.h.

Referenced by L1GlobalTriggerRecordProducer(), and produce().

std::vector<unsigned int> L1GlobalTriggerRecordProducer::m_triggerMaskAlgoTrig
private

Definition at line 62 of file L1GlobalTriggerRecordProducer.h.

Referenced by produce().

std::vector<unsigned int> L1GlobalTriggerRecordProducer::m_triggerMaskTechTrig
private

Definition at line 63 of file L1GlobalTriggerRecordProducer.h.

Referenced by produce().