CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
RPCTechnicalTrigger Class Reference

#include <L1Trigger/RPCTechnicalTrigger/interface/RPCTechnicalTrigger.cc>

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

Classes

class  TTUResults
 

Public Member Functions

 RPCTechnicalTrigger (const edm::ParameterSet &)
 
 ~RPCTechnicalTrigger () override
 
- 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 beginRun (edm::Run const &, const edm::EventSetup &) final
 
std::map< int, TTUResults * > convertToMap (const std::vector< std::unique_ptr< TTUResults >> &) const
 
void printinfo () const
 
void produce (edm::Event &, const edm::EventSetup &) override
 
bool searchCoincidence (int, int, std::map< int, TTUResults *> const &ttuResultsByQuandrant) const
 

Private Attributes

std::string m_configFile
 
bool m_hasConfig
 
edm::ESGetToken< RBCBoardSpecs, RBCBoardSpecsRcdm_pRBCSpecsToken
 
edm::ESGetToken< TTUBoardSpecs, TTUBoardSpecsRcdm_pTTUSpecsToken
 
const RBCBoardSpecsm_rbcspecs
 
std::unique_ptr< TTUConfiguratorm_readConfig
 
const edm::InputTag m_rpcDigiLabel
 
const edm::EDGetTokenT< RPCDigiCollectionm_rpcDigiToken
 
edm::ESGetToken< RPCGeometry, MuonGeometryRecordm_rpcGeometryToken
 
const std::vector< unsigned > m_ttBits
 
const std::vector< std::string > m_ttNames
 
std::array< TTUEmulator, kMaxTtuBoardsm_ttu
 
std::array< TTUEmulator, kMaxTtuBoardsm_ttuRbcLine
 
const TTUBoardSpecsm_ttuspecs
 
const int m_useEventSetup
 
const int m_useRPCSimLink
 
const int m_verbosity
 

Static Private Attributes

static constexpr int kMaxTtuBoards = 3
 

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: Implementation of the RPC Technical Trigger Emulator

Implementation:

Definition at line 69 of file RPCTechnicalTrigger.h.

Constructor & Destructor Documentation

◆ RPCTechnicalTrigger()

RPCTechnicalTrigger::RPCTechnicalTrigger ( const edm::ParameterSet iConfig)
explicit

Definition at line 39 of file RPCTechnicalTrigger.cc.

References edm::ParameterSet::getUntrackedParameter().

40  : m_verbosity{iConfig.getUntrackedParameter<int>("Verbosity", 0)},
41  m_useEventSetup{iConfig.getUntrackedParameter<int>("UseEventSetup", 0)},
42  m_ttBits{iConfig.getParameter<std::vector<unsigned>>("BitNumbers")},
43  m_ttNames{iConfig.getParameter<std::vector<std::string>>("BitNames")},
44  m_rpcDigiLabel{iConfig.getParameter<edm::InputTag>("RPCDigiLabel")},
45  m_rpcDigiToken{consumes<RPCDigiCollection>(m_rpcDigiLabel)},
46  m_useRPCSimLink{iConfig.getUntrackedParameter<int>("UseRPCSimLink", 0)},
47  m_rpcGeometryToken(esConsumes<RPCGeometry, MuonGeometryRecord>()) {
48  std::string configFile = iConfig.getParameter<std::string>("ConfigFile");
49 
50  edm::FileInPath f1("L1Trigger/RPCTechnicalTrigger/data/" + configFile);
51  m_configFile = f1.fullPath();
52 
53  if (m_verbosity) {
54  LogTrace("RPCTechnicalTrigger") << m_rpcDigiLabel << '\n' << std::endl;
55 
56  LogTrace("RPCTechnicalTrigger") << "\nConfiguration file used for UseEventSetup = 0 \n"
57  << m_configFile << '\n'
58  << std::endl;
59  }
60 
61  //...........................................................................
62  //... There are three Technical Trigger Units Boards: 1 can handle 2 Wheels
63  //... n_Wheels sets the number of wheels attached to board with index boardIndex
64 
65  constexpr std::array<int, 3> boardIndex = {{1, 2, 3}};
66  constexpr std::array<int, 3> nWheels = {{2, 1, 2}};
67 
68  m_ttu[0] = TTUEmulator(boardIndex[0], nWheels[0]);
69  m_ttu[1] = TTUEmulator(boardIndex[1], nWheels[1]);
70  m_ttu[2] = TTUEmulator(boardIndex[2], nWheels[2]);
71 
72  //... This is second line that delivers in parallel a second trigger
73  m_ttuRbcLine[0] = TTUEmulator(boardIndex[0], nWheels[0]);
74  m_ttuRbcLine[1] = TTUEmulator(boardIndex[1], nWheels[1]);
75  m_ttuRbcLine[2] = TTUEmulator(boardIndex[2], nWheels[2]);
76 
77  //...........................................................................
78 
79  m_hasConfig = false;
80  produces<L1GtTechnicalTriggerRecord>();
81  consumes<edm::DetSetVector<RPCDigiSimLink>>(edm::InputTag("simMuonRPCDigis", "RPCDigiSimLink", ""));
82  if (m_useEventSetup >= 1) {
83  m_pRBCSpecsToken = esConsumes<RBCBoardSpecs, RBCBoardSpecsRcd, edm::Transition::BeginRun>();
84  m_pTTUSpecsToken = esConsumes<TTUBoardSpecs, TTUBoardSpecsRcd, edm::Transition::BeginRun>();
85  }
86 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const edm::InputTag m_rpcDigiLabel
#define LogTrace(id)
T getUntrackedParameter(std::string const &, T const &) const
edm::ESGetToken< RPCGeometry, MuonGeometryRecord > m_rpcGeometryToken
std::array< TTUEmulator, kMaxTtuBoards > m_ttu
const edm::EDGetTokenT< RPCDigiCollection > m_rpcDigiToken
const std::vector< unsigned > m_ttBits
edm::ESGetToken< RBCBoardSpecs, RBCBoardSpecsRcd > m_pRBCSpecsToken
const std::vector< std::string > m_ttNames
edm::ESGetToken< TTUBoardSpecs, TTUBoardSpecsRcd > m_pTTUSpecsToken
std::array< TTUEmulator, kMaxTtuBoards > m_ttuRbcLine

◆ ~RPCTechnicalTrigger()

RPCTechnicalTrigger::~RPCTechnicalTrigger ( )
override

Definition at line 88 of file RPCTechnicalTrigger.cc.

88 {}

Member Function Documentation

◆ beginRun()

void RPCTechnicalTrigger::beginRun ( edm::Run const &  iRun,
const edm::EventSetup evtSetup 
)
finalprivate

Definition at line 294 of file RPCTechnicalTrigger.cc.

References edm::EventSetup::getHandle(), edm::ESHandleBase::isValid(), dqmdumpme::k, kMaxTtuBoards, LogDebug, m_configFile, m_hasConfig, m_pRBCSpecsToken, m_pTTUSpecsToken, m_rbcspecs, m_readConfig, m_ttu, m_ttuRbcLine, m_ttuspecs, m_useEventSetup, and edm::ESHandle< T >::product().

294  {
295  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger::beginRun> starts" << std::endl;
296 
297  //.. Get Board Specifications (hardware configuration)
298 
299  if (m_useEventSetup >= 1) {
301 
303 
304  if (!pRBCSpecs.isValid() || !pTTUSpecs.isValid()) {
305  edm::LogError("RPCTechnicalTrigger") << "can't find RBC/TTU BoardSpecsRcd" << '\n';
306  m_hasConfig = false;
307  } else {
308  m_rbcspecs = pRBCSpecs.product();
309  m_ttuspecs = pTTUSpecs.product();
310  m_hasConfig = true;
311  }
312 
313  } else {
314  // read hardware configuration from file
315  m_readConfig = std::make_unique<TTUConfigurator>(m_configFile);
316 
317  if (m_readConfig->m_hasConfig) {
318  m_readConfig->process();
319  m_rbcspecs = m_readConfig->getRbcSpecs();
320  m_ttuspecs = m_readConfig->getTtuSpecs();
321  m_hasConfig = true;
322  }
323 
324  else
325  m_hasConfig = false;
326  }
327 
328  if (m_hasConfig) {
329  //... Initialize all
330 
331  for (int k = 0; k < kMaxTtuBoards; ++k) {
332  m_ttu[k].SetLineId(1);
333  m_ttuRbcLine[k].SetLineId(2);
334 
335  m_ttu[k].setSpecifications(m_ttuspecs, m_rbcspecs);
336  m_ttuRbcLine[k].setSpecifications(m_ttuspecs, m_rbcspecs);
337 
338  m_ttu[k].initialise();
339  m_ttuRbcLine[k].initialise();
340  }
341  }
342 }
std::unique_ptr< TTUConfigurator > m_readConfig
Log< level::Error, false > LogError
static constexpr int kMaxTtuBoards
T const * product() const
Definition: ESHandle.h:86
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
bool isValid() const
Definition: ESHandle.h:44
const TTUBoardSpecs * m_ttuspecs
std::array< TTUEmulator, kMaxTtuBoards > m_ttu
const RBCBoardSpecs * m_rbcspecs
edm::ESGetToken< RBCBoardSpecs, RBCBoardSpecsRcd > m_pRBCSpecsToken
edm::ESGetToken< TTUBoardSpecs, TTUBoardSpecsRcd > m_pTTUSpecsToken
std::array< TTUEmulator, kMaxTtuBoards > m_ttuRbcLine
#define LogDebug(id)

◆ convertToMap()

std::map< int, RPCTechnicalTrigger::TTUResults * > RPCTechnicalTrigger::convertToMap ( const std::vector< std::unique_ptr< TTUResults >> &  ttuResults) const
private

Definition at line 345 of file RPCTechnicalTrigger.cc.

References crabWrapper::key.

Referenced by produce().

346  {
347  std::map<int, TTUResults*> returnValue;
348  auto itr = ttuResults.begin();
349 
350  while (itr != ttuResults.end()) {
351  if ((*itr)->m_bx != 0) {
352  ++itr;
353  continue;
354  }
355 
356  int key(0);
357  key = 1000 * ((*itr)->m_ttuidx + 1) + 1 * (*itr)->m_wedge;
358  returnValue[key] = itr->get();
359  ++itr;
360  }
361 
362  return returnValue;
363 }

◆ printinfo()

void RPCTechnicalTrigger::printinfo ( ) const
private

Definition at line 444 of file RPCTechnicalTrigger.cc.

References dqmdumpme::k, kMaxTtuBoards, LogDebug, m_ttu, and m_ttuRbcLine.

444  {
445  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger::Printing TTU emulators info>" << std::endl;
446 
447  for (int k = 0; k < kMaxTtuBoards; ++k) {
448  m_ttu[k].printinfo();
449  m_ttuRbcLine[k].printinfo();
450  }
451 }
static constexpr int kMaxTtuBoards
std::array< TTUEmulator, kMaxTtuBoards > m_ttu
std::array< TTUEmulator, kMaxTtuBoards > m_ttuRbcLine
#define LogDebug(id)

◆ produce()

void RPCTechnicalTrigger::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 91 of file RPCTechnicalTrigger.cc.

References funct::abs(), nano_mu_digi_cff::bx, convertToMap(), gather_cfg::cout, edm::EventSetup::getHandle(), iEvent, input, edm::HandleBase::isValid(), dqmdumpme::k, kMaxTtuBoards, LogDebug, m_hasConfig, m_rpcDigiLabel, m_rpcDigiToken, m_rpcGeometryToken, m_ttBits, m_ttNames, m_ttu, m_ttuRbcLine, m_useRPCSimLink, m_verbosity, eostools::move(), MillePedeFileConverter_cfg::out, convertSQLitetoXML_cfg::output, mps_fire::result, searchCoincidence(), jetUpdater_cfi::sort, and mps_update::status.

91  {
92  bool status(false);
93 
95 
97 
98  std::unique_ptr<L1GtTechnicalTriggerRecord> output(new L1GtTechnicalTriggerRecord());
99 
100  //. Set up RPC geometry
102 
103  std::unique_ptr<ProcessInputSignal> signal;
104  if (m_useRPCSimLink == 0) {
105  iEvent.getByToken(m_rpcDigiToken, pIn);
106  if (!pIn.isValid()) {
107  edm::LogError("RPCTechnicalTrigger") << "can't find RPCDigiCollection with label: " << m_rpcDigiLabel << '\n';
108  iEvent.put(std::move(output));
109  return;
110  }
111 
112  signal = std::make_unique<RBCProcessRPCDigis>(rpcGeometry, pIn);
113 
114  } else {
115  iEvent.getByLabel("simMuonRPCDigis", "RPCDigiSimLink", simIn);
116 
117  if (!simIn.isValid()) {
118  edm::LogError("RPCTechnicalTrigger") << "can't find RPCDigiCollection with label: " << m_rpcDigiLabel << '\n';
119  iEvent.put(std::move(output));
120  return;
121  }
122  signal = std::make_unique<RBCProcessRPCSimDigis>(rpcGeometry, simIn);
123  }
124 
125  LogDebug("RPCTechnicalTrigger") << "signal object created" << '\n';
126 
127  if (!m_hasConfig) {
128  edm::LogError("RPCTechnicalTrigger") << "cannot read hardware configuration \n";
129  iEvent.put(std::move(output));
130  return;
131  }
132 
133  status = signal->next();
134 
135  if (!status) {
136  iEvent.put(std::move(output));
137  return;
138  }
139 
140  auto* input = signal->retrievedata();
141 
142  std::vector<L1GtTechnicalTrigger> ttVec(m_ttBits.size());
143 
144  //. distribute data to different TTU emulator instances and process it
145  std::bitset<5> triggerbits;
146 
147  std::vector<std::unique_ptr<TTUResults>> serializedInfoLine1;
148  std::vector<std::unique_ptr<TTUResults>> serializedInfoLine2;
149 
150  for (int k = 0; k < kMaxTtuBoards; ++k) {
151  m_ttu[k].processTtu(input);
152 
153  //work out Pointing Logic to Tracker
154  for (auto firstSector : s_quadrants)
155  m_ttuRbcLine[k].processTtu(input, firstSector);
156 
157  //...for trigger 1
158  for (auto const& out : m_ttu[k].m_triggerBxVec)
159  serializedInfoLine1.emplace_back(std::make_unique<TTUResults>(k, out.m_bx, out.m_trigger[0], out.m_trigger[1]));
160  m_ttu[k].clearTriggerResponse();
161 
162  //...for trigger 2
163  for (auto const& out : m_ttuRbcLine[k].m_triggerBxVec)
164  serializedInfoLine2.push_back(
165  std::make_unique<TTUResults>(k, out.m_bx, out.m_trigger[0], out.m_trigger[1], out.m_wedge));
166 
167  m_ttuRbcLine[k].clearTriggerResponse();
168  }
169 
170  //.. write results to technical trigger bits
171  int bx(0);
172  int infoSize(0);
173 
174  infoSize = serializedInfoLine1.size();
175 
176  auto sortByBx = [](auto& iLHS, auto& iRHS) { return iLHS->m_bx < iRHS->m_bx; };
177  std::sort(serializedInfoLine1.begin(), serializedInfoLine1.end(), sortByBx);
178 
179  if (m_verbosity) {
180  for (auto& ttu : serializedInfoLine1) {
181  if (abs(ttu->m_bx) <= 1)
182  std::cout << "RPCTechnicalTrigger> " << ttu->m_ttuidx << '\t' << ttu->m_bx << '\t' << ttu->m_trigWheel1 << '\t'
183  << ttu->m_trigWheel2 << '\n';
184  }
185  }
186 
187  bool has_bx0 = false;
188 
189  for (int k = 0; k < infoSize; k += kMaxTtuBoards) {
190  bx = serializedInfoLine1[k]->m_bx;
191 
192  if (bx == 0) {
193  triggerbits.set(0, serializedInfoLine1[k]->m_trigWheel2);
194  triggerbits.set(1, serializedInfoLine1[k]->m_trigWheel1);
195  triggerbits.set(2, serializedInfoLine1[k + 1]->m_trigWheel1);
196  triggerbits.set(3, serializedInfoLine1[k + 2]->m_trigWheel1);
197  triggerbits.set(4, serializedInfoLine1[k + 2]->m_trigWheel2);
198 
199  bool five_wheels_OR = triggerbits.any();
200 
201  ttVec.at(0) = L1GtTechnicalTrigger(
202  m_ttNames.at(0), m_ttBits.at(0), bx, five_wheels_OR); // bit 24 = Or 5 wheels in TTU mode
203  ttVec.at(2) = L1GtTechnicalTrigger(m_ttNames.at(2), m_ttBits.at(2), bx, triggerbits[0]); // bit 26
204  ttVec.at(3) = L1GtTechnicalTrigger(m_ttNames.at(3), m_ttBits.at(3), bx, triggerbits[1]); // bit 27
205  ttVec.at(4) = L1GtTechnicalTrigger(m_ttNames.at(4), m_ttBits.at(4), bx, triggerbits[2]); // bit 28
206  ttVec.at(5) = L1GtTechnicalTrigger(m_ttNames.at(5), m_ttBits.at(5), bx, triggerbits[3]); // bit 29
207  ttVec.at(6) = L1GtTechnicalTrigger(m_ttNames.at(6), m_ttBits.at(6), bx, triggerbits[4]); // bit 30
208 
209  triggerbits.reset();
210 
211  has_bx0 = true;
212 
213  break;
214 
215  } else
216  continue;
217  }
218 
219  infoSize = serializedInfoLine2.size();
220 
221  std::sort(serializedInfoLine2.begin(), serializedInfoLine2.end(), sortByBx);
222 
223  if (m_verbosity) {
224  for (auto& ttu : serializedInfoLine2) {
225  if (abs(ttu->m_bx) <= 1)
226  std::cout << "RPCTechnicalTrigger> " << ttu->m_ttuidx << '\t' << ttu->m_bx << '\t' << ttu->m_trigWheel1 << '\t'
227  << ttu->m_trigWheel2 << '\t' << ttu->m_wedge << '\n';
228  }
229  }
230 
231  auto ttuResultsByQuadrant = convertToMap(serializedInfoLine2);
232 
233  std::bitset<8> triggerCoincidence;
234  triggerCoincidence.reset();
235 
236  // searchCoincidence( W-2 , W0 )
237  bool result = searchCoincidence(-2, 0, ttuResultsByQuadrant);
238  triggerCoincidence.set(0, result);
239 
240  // searchCoincidence( W-2 , W+1 )
241  result = searchCoincidence(-2, 1, ttuResultsByQuadrant);
242  triggerCoincidence.set(1, result);
243 
244  // searchCoincidence( W-1 , W0 )
245  result = searchCoincidence(-1, 0, ttuResultsByQuadrant);
246  triggerCoincidence.set(2, result);
247 
248  // searchCoincidence( W-1 , W+1 )
249  result = searchCoincidence(-1, 1, ttuResultsByQuadrant);
250  triggerCoincidence.set(3, result);
251 
252  // searchCoincidence( W-1 , W+2 )
253  result = searchCoincidence(-1, 2, ttuResultsByQuadrant);
254  triggerCoincidence.set(4, result);
255 
256  // searchCoincidence( W0 , W0 )
257  result = searchCoincidence(0, 0, ttuResultsByQuadrant);
258  triggerCoincidence.set(5, result);
259 
260  // searchCoincidence( W+1 , W0 )
261  result = searchCoincidence(1, 0, ttuResultsByQuadrant);
262  triggerCoincidence.set(6, result);
263 
264  // searchCoincidence( W+2 , W0 )
265  result = searchCoincidence(2, 0, ttuResultsByQuadrant);
266  triggerCoincidence.set(7, result);
267 
268  bool five_wheels_OR = triggerCoincidence.any();
269 
270  if (m_verbosity)
271  std::cout << "RPCTechnicalTrigger> pointing trigger: " << five_wheels_OR << '\n';
272 
273  ttVec.at(1) =
274  L1GtTechnicalTrigger(m_ttNames.at(1), m_ttBits.at(1), bx, five_wheels_OR); // bit 25 = Or 5 wheels in RBC mode
275 
276  triggerCoincidence.reset();
277 
278  //...check that data appeared at bx=0
279 
280  if (!has_bx0) {
281  iEvent.put(std::move(output));
282  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger> end of event loop" << std::endl;
283  return;
284  }
285 
286  output->setGtTechnicalTrigger(ttVec);
287  iEvent.put(std::move(output));
288 
289  //.... all done
290 
291  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger> end of event loop" << std::endl;
292 }
const edm::InputTag m_rpcDigiLabel
std::map< int, TTUResults * > convertToMap(const std::vector< std::unique_ptr< TTUResults >> &) const
Log< level::Error, false > LogError
static std::string const input
Definition: EdmProvDump.cc:50
static constexpr int kMaxTtuBoards
int iEvent
Definition: GenABIO.cc:224
edm::ESGetToken< RPCGeometry, MuonGeometryRecord > m_rpcGeometryToken
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
bool searchCoincidence(int, int, std::map< int, TTUResults *> const &ttuResultsByQuandrant) const
std::array< TTUEmulator, kMaxTtuBoards > m_ttu
bool isValid() const
Definition: HandleBase.h:70
const edm::EDGetTokenT< RPCDigiCollection > m_rpcDigiToken
const std::vector< unsigned > m_ttBits
const std::vector< std::string > m_ttNames
def move(src, dest)
Definition: eostools.py:511
std::array< TTUEmulator, kMaxTtuBoards > m_ttuRbcLine
#define LogDebug(id)

◆ searchCoincidence()

bool RPCTechnicalTrigger::searchCoincidence ( int  wheel1,
int  wheel2,
std::map< int, TTUResults *> const &  ttuResultsByQuandrant 
) const
private

Definition at line 366 of file RPCTechnicalTrigger.cc.

References dqmdumpme::k, and crabWrapper::key.

Referenced by produce().

368  {
369  std::map<int, TTUResults*>::const_iterator itr;
370  bool topRight(false);
371  bool botLeft(false);
372 
373  int indxW1 = wheelTtu[wheel1 + kWheelOffset];
374  int indxW2 = wheelTtu[wheel2 + kWheelOffset];
375 
376  int k(0);
377  int key(0);
378  bool finalTrigger(false);
379  int maxTopQuadrants = 4;
380 
381  //work out Pointing Logic to Tracker
382 
383  for (auto firstSector : s_quadrants) {
384  key = 1000 * (indxW1) + firstSector;
385 
386  itr = ttuResultsByQuadrant.find(key);
387  if (itr != ttuResultsByQuadrant.end())
388  topRight = (*itr).second->getTriggerForWheel(wheel1);
389 
390  //std::cout << "W1: " << wheel1 << " " << "sec: " << firstSector << " dec: " << topRight << '\n';
391 
392  key = 1000 * (indxW2) + firstSector + 5;
393 
394  itr = ttuResultsByQuadrant.find(key);
395 
396  if (itr != ttuResultsByQuadrant.end())
397  botLeft = (*itr).second->getTriggerForWheel(wheel2);
398 
399  //std::cout << "W2: " << wheel2 << " " << "sec: " << firstSector + 5 << " dec: " << botLeft << '\n';
400 
401  finalTrigger |= (topRight && botLeft);
402 
403  ++k;
404 
405  if (k > maxTopQuadrants)
406  break;
407  }
408 
409  //Try the opposite now
410 
411  k = 0;
412 
413  for (auto firstSector : s_quadrants) {
414  key = 1000 * (indxW2) + firstSector;
415 
416  itr = ttuResultsByQuadrant.find(key);
417  if (itr != ttuResultsByQuadrant.end())
418  topRight = (*itr).second->getTriggerForWheel(wheel1);
419 
420  //std::cout << "W1: " << wheel1 << " " << "sec: " << firstSector << " dec: " << topRight << '\n';
421 
422  key = 1000 * (indxW1) + firstSector + 5;
423 
424  itr = ttuResultsByQuadrant.find(key);
425 
426  if (itr != ttuResultsByQuadrant.end())
427  botLeft = (*itr).second->getTriggerForWheel(wheel2);
428 
429  //std::cout << "W2: " << wheel2 << " " << "sec: " << firstSector + 5 << " dec: " << botLeft << '\n';
430 
431  finalTrigger |= (topRight && botLeft);
432 
433  ++k;
434 
435  if (k > maxTopQuadrants)
436  break;
437  }
438 
439  return finalTrigger;
440 }

Member Data Documentation

◆ kMaxTtuBoards

constexpr int RPCTechnicalTrigger::kMaxTtuBoards = 3
staticprivate

Definition at line 83 of file RPCTechnicalTrigger.h.

Referenced by beginRun(), printinfo(), and produce().

◆ m_configFile

std::string RPCTechnicalTrigger::m_configFile
private

Definition at line 90 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_hasConfig

bool RPCTechnicalTrigger::m_hasConfig
private

Definition at line 102 of file RPCTechnicalTrigger.h.

Referenced by beginRun(), and produce().

◆ m_pRBCSpecsToken

edm::ESGetToken<RBCBoardSpecs, RBCBoardSpecsRcd> RPCTechnicalTrigger::m_pRBCSpecsToken
private

Definition at line 138 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_pTTUSpecsToken

edm::ESGetToken<TTUBoardSpecs, TTUBoardSpecsRcd> RPCTechnicalTrigger::m_pTTUSpecsToken
private

Definition at line 139 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_rbcspecs

const RBCBoardSpecs* RPCTechnicalTrigger::m_rbcspecs
private

Definition at line 100 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_readConfig

std::unique_ptr<TTUConfigurator> RPCTechnicalTrigger::m_readConfig
private

Definition at line 98 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_rpcDigiLabel

const edm::InputTag RPCTechnicalTrigger::m_rpcDigiLabel
private

Definition at line 93 of file RPCTechnicalTrigger.h.

Referenced by produce().

◆ m_rpcDigiToken

const edm::EDGetTokenT<RPCDigiCollection> RPCTechnicalTrigger::m_rpcDigiToken
private

Definition at line 94 of file RPCTechnicalTrigger.h.

Referenced by produce().

◆ m_rpcGeometryToken

edm::ESGetToken<RPCGeometry, MuonGeometryRecord> RPCTechnicalTrigger::m_rpcGeometryToken
private

Definition at line 137 of file RPCTechnicalTrigger.h.

Referenced by produce().

◆ m_ttBits

const std::vector<unsigned> RPCTechnicalTrigger::m_ttBits
private

Definition at line 91 of file RPCTechnicalTrigger.h.

Referenced by produce().

◆ m_ttNames

const std::vector<std::string> RPCTechnicalTrigger::m_ttNames
private

Definition at line 92 of file RPCTechnicalTrigger.h.

Referenced by produce().

◆ m_ttu

std::array<TTUEmulator, kMaxTtuBoards> RPCTechnicalTrigger::m_ttu
private

Definition at line 84 of file RPCTechnicalTrigger.h.

Referenced by beginRun(), printinfo(), and produce().

◆ m_ttuRbcLine

std::array<TTUEmulator, kMaxTtuBoards> RPCTechnicalTrigger::m_ttuRbcLine
private

Definition at line 86 of file RPCTechnicalTrigger.h.

Referenced by beginRun(), printinfo(), and produce().

◆ m_ttuspecs

const TTUBoardSpecs* RPCTechnicalTrigger::m_ttuspecs
private

Definition at line 99 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_useEventSetup

const int RPCTechnicalTrigger::m_useEventSetup
private

Definition at line 89 of file RPCTechnicalTrigger.h.

Referenced by beginRun().

◆ m_useRPCSimLink

const int RPCTechnicalTrigger::m_useRPCSimLink
private

Definition at line 96 of file RPCTechnicalTrigger.h.

Referenced by produce().

◆ m_verbosity

const int RPCTechnicalTrigger::m_verbosity
private

Definition at line 88 of file RPCTechnicalTrigger.h.

Referenced by produce().