CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
L1TExtCondProducer Class Reference
Inheritance diagram for L1TExtCondProducer:
edm::stream::EDProducer<>

Public Member Functions

 L1TExtCondProducer (const ParameterSet &)
 
 ~L1TExtCondProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Static Public Member Functions

static void fillDescriptions (ConfigurationDescriptions &descriptions)
 

Private Member Functions

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

Private Attributes

int bxFirst_
 
int bxLast_
 
std::map< std::string, unsigned int > m_extBitMap
 
unsigned long long m_l1GtMenuCacheID
 
unsigned int m_triggerRulePrefireVetoBit
 
bool makeTriggerRulePrefireVetoBit_
 
bool setBptxAND_
 
bool setBptxMinus_
 
bool setBptxOR_
 
bool setBptxPlus_
 
edm::InputTag tcdsInputTag_
 
edm::EDGetTokenT< TCDSRecordtcdsRecordToken_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 49 of file L1TExtCondProducer.cc.

Constructor & Destructor Documentation

L1TExtCondProducer::L1TExtCondProducer ( const ParameterSet iConfig)
explicit

Definition at line 87 of file L1TExtCondProducer.cc.

References m_l1GtMenuCacheID, m_triggerRulePrefireVetoBit, makeTriggerRulePrefireVetoBit_, GlobalExtBlk::maxExternalConditions, tcdsInputTag_, and tcdsRecordToken_.

87  :
88  bxFirst_ (iConfig.getParameter<int>("bxFirst")),
89  bxLast_ (iConfig.getParameter<int>("bxLast")),
90  setBptxAND_ (iConfig.getParameter<bool>("setBptxAND")),
91  setBptxPlus_ (iConfig.getParameter<bool>("setBptxPlus")),
92  setBptxMinus_ (iConfig.getParameter<bool>("setBptxMinus")),
93  setBptxOR_ (iConfig.getParameter<bool>("setBptxOR")),
94  tcdsInputTag_(iConfig.getParameter<edm::InputTag>("tcdsRecordLabel"))
95  {
96 
98 
102  edm::LogWarning("L1TExtCondProducer") << "Default trigger rule prefire veto bit number too large. Resetting to "
104  }
105 
106  if(!(tcdsInputTag_ == edm::InputTag("")))
107  {
108  tcdsRecordToken_ = consumes<TCDSRecord>(tcdsInputTag_);
110 
111  }
112 
113  // register what you produce
114  produces<GlobalExtBlkBxCollection>();
115 
116  // Initialize parameters
117  m_l1GtMenuCacheID = 0ULL;
118  }
T getParameter(std::string const &) const
edm::EDGetTokenT< TCDSRecord > tcdsRecordToken_
static const unsigned int maxExternalConditions
Definition: GlobalExtBlk.h:47
unsigned int m_triggerRulePrefireVetoBit
edm::InputTag tcdsInputTag_
unsigned long long m_l1GtMenuCacheID
L1TExtCondProducer::~L1TExtCondProducer ( )
override

Definition at line 121 of file L1TExtCondProducer.cc.

122  {
123  }

Member Function Documentation

void L1TExtCondProducer::fillDescriptions ( ConfigurationDescriptions descriptions)
static

Definition at line 249 of file L1TExtCondProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and DEFINE_FWK_MODULE.

249  {
250  // simGtExtFakeProd
252  desc.add<bool>("setBptxMinus", true);
253  desc.add<bool>("setBptxAND", true);
254  desc.add<int>("bxFirst", -2);
255  desc.add<bool>("setBptxOR", true);
256  desc.add<int>("bxLast", 2);
257  desc.add<bool>("setBptxPlus", true);
258  desc.add<edm::InputTag> ("tcdsRecordLabel", edm::InputTag(""));
259  descriptions.add("simGtExtFakeProd", desc);
260  }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void L1TExtCondProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 133 of file L1TExtCondProducer.cc.

References bxFirst_, bxLast_, edm::EventSetup::get(), edm::Event::getByToken(), l1t::TriggerMenuParser::getExternalSignals(), LogDebug, m_extBitMap, m_l1GtMenuCacheID, m_triggerRulePrefireVetoBit, makeTriggerRulePrefireVetoBit_, eostools::move(), edm::Handle< T >::product(), edm::ESHandle< T >::product(), edm::Event::put(), setBptxAND_, setBptxMinus_, setBptxOR_, setBptxPlus_, GlobalExtBlk::setExternalDecision(), and tcdsRecordToken_.

134  {
135 
136  LogDebug("L1TExtCondProducer") << "L1TExtCondProducer::produce function called...\n";
137 
138  // get / update the trigger menu from the EventSetup
139  // local cache & check on cacheIdentifier
140  unsigned long long l1GtMenuCacheID = iSetup.get<L1TUtmTriggerMenuRcd>().cacheIdentifier();
141 
142  if (m_l1GtMenuCacheID != l1GtMenuCacheID) {
143 
145  iSetup.get< L1TUtmTriggerMenuRcd>().get(l1GtMenu) ;
146  const L1TUtmTriggerMenu* utml1GtMenu = l1GtMenu.product();
147 
148  // Instantiate Parser
150 
151  std::map<std::string, unsigned int> extBitMap = gtParser.getExternalSignals(utml1GtMenu);
152 
153  m_l1GtMenuCacheID = l1GtMenuCacheID;
154  m_extBitMap = extBitMap;
155  }
156 
157  bool TriggerRulePrefireVetoBit(false);
159  // code taken from Nick Smith's EventFilter/L1TRawToDigi/plugins/TriggerRulePrefireVetoFilter.cc
160 
161  edm::Handle<TCDSRecord> tcdsRecordH;
162  iEvent.getByToken(tcdsRecordToken_, tcdsRecordH);
163  const auto& tcdsRecord = *tcdsRecordH.product();
164 
165  uint64_t thisEvent = (tcdsRecord.getBXID()-1) + tcdsRecord.getOrbitNr()*3564ull;
166 
167  std::vector<uint64_t> eventHistory;
168  for (auto&& l1a : tcdsRecord.getFullL1aHistory()) {
169  eventHistory.push_back(thisEvent - ((l1a.getBXID()-1) + l1a.getOrbitNr()*3564ull));
170  }
171 
172  // should be 16 according to TCDSRecord.h, we only care about the last 4
173  if ( eventHistory.size() < 4 ) {
174  edm::LogError("L1TExtCondProducer") << "Unexpectedly small L1A history from TCDSRecord";
175  }
176 
177  // No more than 1 L1A in 3 BX
178  if ( eventHistory[0] < 3ull ) {
179  edm::LogError("L1TExtCondProducer") << "Found an L1A in an impossible location?! (1 in 3)";
180  }
181 
182  if ( eventHistory[0] == 3ull ) TriggerRulePrefireVetoBit = true;
183 
184  // No more than 2 L1As in 25 BX
185  if ( eventHistory[0] < 25ull and eventHistory[1] < 25ull ) {
186  edm::LogError("L1TExtCondProducer") << "Found an L1A in an impossible location?! (2 in 25)";
187  }
188  if ( eventHistory[0] < 25ull and eventHistory[1] == 25ull ) TriggerRulePrefireVetoBit = true;
189 
190  // No more than 3 L1As in 100 BX
191  if ( eventHistory[0] < 100ull and eventHistory[1] < 100ull and eventHistory[2] < 100ull ) {
192  edm::LogError("L1TExtCondProducer") << "Found an L1A in an impossible location?! (3 in 100)";
193  }
194  if ( eventHistory[0] < 100ull and eventHistory[1] < 100ull and eventHistory[2] == 100ull ) TriggerRulePrefireVetoBit = true;
195 
196  // No more than 4 L1As in 240 BX
197  if ( eventHistory[0] < 240ull and eventHistory[1] < 240ull and eventHistory[2] < 240ull and eventHistory[3] < 240ull ) {
198  edm::LogError("L1TExtCondProducer") << "Found an L1A in an impossible location?! (4 in 240)";
199  }
200  if ( eventHistory[0] < 240ull and eventHistory[1] < 240ull and eventHistory[2] < 240ull and eventHistory[3] == 240ull ) TriggerRulePrefireVetoBit = true;
201  }
202 
203  // Setup vectors
204  GlobalExtBlk extCond_bx;
205 
206  //outputs
207  std::unique_ptr<GlobalExtBlkBxCollection> extCond( new GlobalExtBlkBxCollection(0,bxFirst_,bxLast_));
208 
209  bool foundBptxAND = ( m_extBitMap.find("BPTX_plus_AND_minus.v0")!=m_extBitMap.end() );
210  bool foundBptxPlus = ( m_extBitMap.find("BPTX_plus.v0")!=m_extBitMap.end() );
211  bool foundBptxMinus = ( m_extBitMap.find("BPTX_minus.v0")!=m_extBitMap.end() );
212  bool foundBptxOR = ( m_extBitMap.find("BPTX_plus_OR_minus.v0")!=m_extBitMap.end() );
213 
214  // Fill in some external conditions for testing
215  if( setBptxAND_ && foundBptxAND ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_plus_AND_minus.v0"],true);
216  if( setBptxPlus_ && foundBptxPlus ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_plus.v0"],true);
217  if( setBptxMinus_ && foundBptxMinus ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_minus.v0"],true);
218  if( setBptxOR_ && foundBptxOR ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_plus_OR_minus.v0"],true);
219 
220  //check for updated Bptx names as well
221  foundBptxAND = ( m_extBitMap.find("ZeroBias_BPTX_AND_VME")!=m_extBitMap.end() );
222  foundBptxPlus = ( m_extBitMap.find("BPTX_B1_VME")!=m_extBitMap.end() );
223  foundBptxMinus = ( m_extBitMap.find("BPTX_B2_VME")!=m_extBitMap.end() );
224  foundBptxOR = ( m_extBitMap.find("BPTX_OR_VME")!=m_extBitMap.end() );
225 
226  // Fill in some external conditions for testing
227  if( setBptxAND_ && foundBptxAND ) extCond_bx.setExternalDecision(m_extBitMap["ZeroBias_BPTX_AND_VME"],true);
228  if( setBptxPlus_ && foundBptxPlus ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_B1_VME"],true);
229  if( setBptxMinus_ && foundBptxMinus ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_B2_VME"],true);
230  if( setBptxOR_ && foundBptxOR ) extCond_bx.setExternalDecision(m_extBitMap["BPTX_OR_VME"],true);
231 
232  // set the bit for the TriggerRulePrefireVeto if true
233  if (TriggerRulePrefireVetoBit)
235 
236 
237  // Fill Externals
238  for( int iBx=bxFirst_; iBx<=bxLast_; iBx++ ){
239  extCond->push_back(iBx, extCond_bx);
240  }
241 
242 
243  iEvent.put(std::move(extCond));
244 
245  }
#define LogDebug(id)
BXVector< GlobalExtBlk > GlobalExtBlkBxCollection
Definition: GlobalExtBlk.h:30
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
edm::EDGetTokenT< TCDSRecord > tcdsRecordToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::map< std::string, unsigned int > getExternalSignals(const L1TUtmTriggerMenu *utmMenu)
unsigned int m_triggerRulePrefireVetoBit
void setExternalDecision(unsigned int bit, bool val)
Set decision bits.
Definition: GlobalExtBlk.cc:52
unsigned long long m_l1GtMenuCacheID
T const * product() const
Definition: Handle.h:74
unsigned long long uint64_t
Definition: Time.h:15
T get() const
Definition: EventSetup.h:71
std::map< std::string, unsigned int > m_extBitMap
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

int L1TExtCondProducer::bxFirst_
private

Definition at line 66 of file L1TExtCondProducer.cc.

Referenced by produce().

int L1TExtCondProducer::bxLast_
private

Definition at line 67 of file L1TExtCondProducer.cc.

Referenced by produce().

std::map<std::string, unsigned int> L1TExtCondProducer::m_extBitMap
private

Definition at line 75 of file L1TExtCondProducer.cc.

Referenced by produce().

unsigned long long L1TExtCondProducer::m_l1GtMenuCacheID
private

Definition at line 74 of file L1TExtCondProducer.cc.

Referenced by L1TExtCondProducer(), and produce().

unsigned int L1TExtCondProducer::m_triggerRulePrefireVetoBit
private

Definition at line 77 of file L1TExtCondProducer.cc.

Referenced by L1TExtCondProducer(), and produce().

bool L1TExtCondProducer::makeTriggerRulePrefireVetoBit_
private

Definition at line 79 of file L1TExtCondProducer.cc.

Referenced by L1TExtCondProducer(), and produce().

bool L1TExtCondProducer::setBptxAND_
private

Definition at line 69 of file L1TExtCondProducer.cc.

Referenced by produce().

bool L1TExtCondProducer::setBptxMinus_
private

Definition at line 71 of file L1TExtCondProducer.cc.

Referenced by produce().

bool L1TExtCondProducer::setBptxOR_
private

Definition at line 72 of file L1TExtCondProducer.cc.

Referenced by produce().

bool L1TExtCondProducer::setBptxPlus_
private

Definition at line 70 of file L1TExtCondProducer.cc.

Referenced by produce().

edm::InputTag L1TExtCondProducer::tcdsInputTag_
private

Definition at line 81 of file L1TExtCondProducer.cc.

Referenced by L1TExtCondProducer().

edm::EDGetTokenT<TCDSRecord> L1TExtCondProducer::tcdsRecordToken_
private

Definition at line 80 of file L1TExtCondProducer.cc.

Referenced by L1TExtCondProducer(), and produce().