CMS 3D CMS Logo

RPCTechnicalTrigger.cc
Go to the documentation of this file.
1 // $Id:
2 
3 //-----------------------------------------------------------------------------
4 // Implementation file for class : RPCTechnicalTrigger
5 //
6 // 2008-10-15 : Andres Osorio
7 //-----------------------------------------------------------------------------
8 
9 //=============================================================================
10 // Standard constructor, initializes variables
11 //=============================================================================
12 
13 // Include files
14 
15 // local
20 
23 
24 //=============================================================================
25 // Standard constructor, initializes variables
26 //=============================================================================
27 
28 namespace {
29  //...........................................................................
30  //For the pointing Logic: declare here the first sector of each quadrant
31  //
32  constexpr std::array<int, 10> s_quadrants = {{2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
33 
34  //The wheelTtu is addressed using -2, -1, 0, 1, 2
35  constexpr unsigned int kWheelOffset = 2;
36  constexpr std::array<int, 5> wheelTtu = {{3, 3, 2, 1, 1}};
37 } // namespace
38 
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  //...........................................................................
48 
49  std::string configFile = iConfig.getParameter<std::string>("ConfigFile");
50 
51  edm::FileInPath f1("L1Trigger/RPCTechnicalTrigger/data/" + configFile);
52  m_configFile = f1.fullPath();
53 
54  if (m_verbosity) {
55  LogTrace("RPCTechnicalTrigger") << m_rpcDigiLabel << '\n' << std::endl;
56 
57  LogTrace("RPCTechnicalTrigger") << "\nConfiguration file used for UseEventSetup = 0 \n"
58  << m_configFile << '\n'
59  << std::endl;
60  }
61 
62  //...........................................................................
63  //... There are three Technical Trigger Units Boards: 1 can handle 2 Wheels
64  //... n_Wheels sets the number of wheels attached to board with index boardIndex
65 
66  constexpr std::array<int, 3> boardIndex = {{1, 2, 3}};
67  constexpr std::array<int, 3> nWheels = {{2, 1, 2}};
68 
69  m_ttu[0] = TTUEmulator(boardIndex[0], nWheels[0]);
70  m_ttu[1] = TTUEmulator(boardIndex[1], nWheels[1]);
71  m_ttu[2] = TTUEmulator(boardIndex[2], nWheels[2]);
72 
73  //... This is second line that delivers in parallel a second trigger
74  m_ttuRbcLine[0] = TTUEmulator(boardIndex[0], nWheels[0]);
75  m_ttuRbcLine[1] = TTUEmulator(boardIndex[1], nWheels[1]);
76  m_ttuRbcLine[2] = TTUEmulator(boardIndex[2], nWheels[2]);
77 
78  //...........................................................................
79 
80  m_hasConfig = false;
81  produces<L1GtTechnicalTriggerRecord>();
82  consumes<edm::DetSetVector<RPCDigiSimLink>>(edm::InputTag("simMuonRPCDigis", "RPCDigiSimLink", ""));
83 }
84 
86 
87 //=============================================================================
89  bool status(false);
90 
92 
94 
95  std::unique_ptr<L1GtTechnicalTriggerRecord> output(new L1GtTechnicalTriggerRecord());
96 
97  //. Set up RPC geometry
98  edm::ESHandle<RPCGeometry> rpcGeometry;
99  iSetup.get<MuonGeometryRecord>().get(rpcGeometry);
100 
101  std::unique_ptr<ProcessInputSignal> signal;
102  if (m_useRPCSimLink == 0) {
103  iEvent.getByToken(m_rpcDigiToken, pIn);
104  if (!pIn.isValid()) {
105  edm::LogError("RPCTechnicalTrigger") << "can't find RPCDigiCollection with label: " << m_rpcDigiLabel << '\n';
106  iEvent.put(std::move(output));
107  return;
108  }
109 
110  signal = std::make_unique<RBCProcessRPCDigis>(rpcGeometry, pIn);
111 
112  } else {
113  iEvent.getByLabel("simMuonRPCDigis", "RPCDigiSimLink", simIn);
114 
115  if (!simIn.isValid()) {
116  edm::LogError("RPCTechnicalTrigger") << "can't find RPCDigiCollection with label: " << m_rpcDigiLabel << '\n';
117  iEvent.put(std::move(output));
118  return;
119  }
120  signal = std::make_unique<RBCProcessRPCSimDigis>(rpcGeometry, simIn);
121  }
122 
123  LogDebug("RPCTechnicalTrigger") << "signal object created" << '\n';
124 
125  if (!m_hasConfig) {
126  edm::LogError("RPCTechnicalTrigger") << "cannot read hardware configuration \n";
127  iEvent.put(std::move(output));
128  return;
129  }
130 
131  status = signal->next();
132 
133  if (!status) {
134  iEvent.put(std::move(output));
135  return;
136  }
137 
138  auto* input = signal->retrievedata();
139 
140  std::vector<L1GtTechnicalTrigger> ttVec(m_ttBits.size());
141 
142  //. distribute data to different TTU emulator instances and process it
143  std::bitset<5> triggerbits;
144 
145  std::vector<std::unique_ptr<TTUResults>> serializedInfoLine1;
146  std::vector<std::unique_ptr<TTUResults>> serializedInfoLine2;
147 
148  for (int k = 0; k < kMaxTtuBoards; ++k) {
149  m_ttu[k].processTtu(input);
150 
151  //work out Pointing Logic to Tracker
152  for (auto firstSector : s_quadrants)
153  m_ttuRbcLine[k].processTtu(input, firstSector);
154 
155  //...for trigger 1
156  for (auto const& out : m_ttu[k].m_triggerBxVec)
157  serializedInfoLine1.emplace_back(std::make_unique<TTUResults>(k, out.m_bx, out.m_trigger[0], out.m_trigger[1]));
158  m_ttu[k].clearTriggerResponse();
159 
160  //...for trigger 2
161  for (auto const& out : m_ttuRbcLine[k].m_triggerBxVec)
162  serializedInfoLine2.push_back(
163  std::make_unique<TTUResults>(k, out.m_bx, out.m_trigger[0], out.m_trigger[1], out.m_wedge));
164 
165  m_ttuRbcLine[k].clearTriggerResponse();
166  }
167 
168  //.. write results to technical trigger bits
169  int bx(0);
170  int infoSize(0);
171 
172  infoSize = serializedInfoLine1.size();
173 
174  auto sortByBx = [](auto& iLHS, auto& iRHS) { return iLHS->m_bx < iRHS->m_bx; };
175  std::sort(serializedInfoLine1.begin(), serializedInfoLine1.end(), sortByBx);
176 
177  if (m_verbosity) {
178  for (auto& ttu : serializedInfoLine1) {
179  if (abs(ttu->m_bx) <= 1)
180  std::cout << "RPCTechnicalTrigger> " << ttu->m_ttuidx << '\t' << ttu->m_bx << '\t' << ttu->m_trigWheel1 << '\t'
181  << ttu->m_trigWheel2 << '\n';
182  }
183  }
184 
185  bool has_bx0 = false;
186 
187  for (int k = 0; k < infoSize; k += kMaxTtuBoards) {
188  bx = serializedInfoLine1[k]->m_bx;
189 
190  if (bx == 0) {
191  triggerbits.set(0, serializedInfoLine1[k]->m_trigWheel2);
192  triggerbits.set(1, serializedInfoLine1[k]->m_trigWheel1);
193  triggerbits.set(2, serializedInfoLine1[k + 1]->m_trigWheel1);
194  triggerbits.set(3, serializedInfoLine1[k + 2]->m_trigWheel1);
195  triggerbits.set(4, serializedInfoLine1[k + 2]->m_trigWheel2);
196 
197  bool five_wheels_OR = triggerbits.any();
198 
199  ttVec.at(0) = L1GtTechnicalTrigger(
200  m_ttNames.at(0), m_ttBits.at(0), bx, five_wheels_OR); // bit 24 = Or 5 wheels in TTU mode
201  ttVec.at(2) = L1GtTechnicalTrigger(m_ttNames.at(2), m_ttBits.at(2), bx, triggerbits[0]); // bit 26
202  ttVec.at(3) = L1GtTechnicalTrigger(m_ttNames.at(3), m_ttBits.at(3), bx, triggerbits[1]); // bit 27
203  ttVec.at(4) = L1GtTechnicalTrigger(m_ttNames.at(4), m_ttBits.at(4), bx, triggerbits[2]); // bit 28
204  ttVec.at(5) = L1GtTechnicalTrigger(m_ttNames.at(5), m_ttBits.at(5), bx, triggerbits[3]); // bit 29
205  ttVec.at(6) = L1GtTechnicalTrigger(m_ttNames.at(6), m_ttBits.at(6), bx, triggerbits[4]); // bit 30
206 
207  triggerbits.reset();
208 
209  has_bx0 = true;
210 
211  break;
212 
213  } else
214  continue;
215  }
216 
217  infoSize = serializedInfoLine2.size();
218 
219  std::sort(serializedInfoLine2.begin(), serializedInfoLine2.end(), sortByBx);
220 
221  if (m_verbosity) {
222  for (auto& ttu : serializedInfoLine2) {
223  if (abs(ttu->m_bx) <= 1)
224  std::cout << "RPCTechnicalTrigger> " << ttu->m_ttuidx << '\t' << ttu->m_bx << '\t' << ttu->m_trigWheel1 << '\t'
225  << ttu->m_trigWheel2 << '\t' << ttu->m_wedge << '\n';
226  }
227  }
228 
229  auto ttuResultsByQuadrant = convertToMap(serializedInfoLine2);
230 
231  std::bitset<8> triggerCoincidence;
232  triggerCoincidence.reset();
233 
234  // searchCoincidence( W-2 , W0 )
235  bool result = searchCoincidence(-2, 0, ttuResultsByQuadrant);
236  triggerCoincidence.set(0, result);
237 
238  // searchCoincidence( W-2 , W+1 )
239  result = searchCoincidence(-2, 1, ttuResultsByQuadrant);
240  triggerCoincidence.set(1, result);
241 
242  // searchCoincidence( W-1 , W0 )
243  result = searchCoincidence(-1, 0, ttuResultsByQuadrant);
244  triggerCoincidence.set(2, result);
245 
246  // searchCoincidence( W-1 , W+1 )
247  result = searchCoincidence(-1, 1, ttuResultsByQuadrant);
248  triggerCoincidence.set(3, result);
249 
250  // searchCoincidence( W-1 , W+2 )
251  result = searchCoincidence(-1, 2, ttuResultsByQuadrant);
252  triggerCoincidence.set(4, result);
253 
254  // searchCoincidence( W0 , W0 )
255  result = searchCoincidence(0, 0, ttuResultsByQuadrant);
256  triggerCoincidence.set(5, result);
257 
258  // searchCoincidence( W+1 , W0 )
259  result = searchCoincidence(1, 0, ttuResultsByQuadrant);
260  triggerCoincidence.set(6, result);
261 
262  // searchCoincidence( W+2 , W0 )
263  result = searchCoincidence(2, 0, ttuResultsByQuadrant);
264  triggerCoincidence.set(7, result);
265 
266  bool five_wheels_OR = triggerCoincidence.any();
267 
268  if (m_verbosity)
269  std::cout << "RPCTechnicalTrigger> pointing trigger: " << five_wheels_OR << '\n';
270 
271  ttVec.at(1) =
272  L1GtTechnicalTrigger(m_ttNames.at(1), m_ttBits.at(1), bx, five_wheels_OR); // bit 25 = Or 5 wheels in RBC mode
273 
274  triggerCoincidence.reset();
275 
276  //...check that data appeared at bx=0
277 
278  if (!has_bx0) {
279  iEvent.put(std::move(output));
280  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger> end of event loop" << std::endl;
281  return;
282  }
283 
284  output->setGtTechnicalTrigger(ttVec);
285  iEvent.put(std::move(output));
286 
287  //.... all done
288 
289  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger> end of event loop" << std::endl;
290 }
291 // ------------ method called once each job just before starting event loop ------------
292 void RPCTechnicalTrigger::beginRun(edm::Run const& iRun, const edm::EventSetup& evtSetup) {
293  LogDebug("RPCTechnicalTrigger") << "RPCTechnicalTrigger::beginRun> starts" << std::endl;
294 
295  //.. Get Board Specifications (hardware configuration)
296 
297  if (m_useEventSetup >= 1) {
299  evtSetup.get<RBCBoardSpecsRcd>().get(pRBCSpecs);
300 
302  evtSetup.get<TTUBoardSpecsRcd>().get(pTTUSpecs);
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 }
343 
344 //
345 std::map<int, RPCTechnicalTrigger::TTUResults*> RPCTechnicalTrigger::convertToMap(
346  const std::vector<std::unique_ptr<TTUResults>>& ttuResults) const {
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 }
364 
365 //...RBC pointing logic to tracker bit 25: hardwired
367  int wheel2,
368  std::map<int, TTUResults*> const& ttuResultsByQuadrant) const {
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 }
441 
442 // ------------ method called once each job just after ending the event loop ------------
443 
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 }
452 
453 //define this as a plug-in
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
RPCTechnicalTrigger::m_ttuRbcLine
std::array< TTUEmulator, kMaxTtuBoards > m_ttuRbcLine
Definition: RPCTechnicalTrigger.h:85
RPCTechnicalTrigger::m_ttu
std::array< TTUEmulator, kMaxTtuBoards > m_ttu
Definition: RPCTechnicalTrigger.h:83
TTUBoardSpecsRcd
Definition: TTUBoardSpecsRcd.h:24
RPCTechnicalTrigger::searchCoincidence
bool searchCoincidence(int, int, std::map< int, TTUResults * > const &ttuResultsByQuandrant) const
Definition: RPCTechnicalTrigger.cc:366
input
static const std::string input
Definition: EdmProvDump.cc:48
MessageLogger.h
RPCTechnicalTrigger::m_hasConfig
bool m_hasConfig
Definition: RPCTechnicalTrigger.h:101
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:32
RPCTechnicalTrigger::m_ttuspecs
const TTUBoardSpecs * m_ttuspecs
Definition: RPCTechnicalTrigger.h:98
mps_update.status
status
Definition: mps_update.py:69
edm::Run
Definition: Run.h:45
RPCTechnicalTrigger::convertToMap
std::map< int, TTUResults * > convertToMap(const std::vector< std::unique_ptr< TTUResults >> &) const
Definition: RPCTechnicalTrigger.cc:345
RBCBoardSpecsRcd
Definition: RBCBoardSpecsRcd.h:24
gather_cfg.cout
cout
Definition: gather_cfg.py:144
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
L1GtTechnicalTrigger
Definition: L1GtTechnicalTrigger.h:33
RPCTechnicalTrigger::m_ttNames
const std::vector< std::string > m_ttNames
Definition: RPCTechnicalTrigger.h:91
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
RBCProcessRPCSimDigis.h
edm::Handle< RPCDigiCollection >
RPCTechnicalTrigger::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: RPCTechnicalTrigger.cc:88
edm::FileInPath
Definition: FileInPath.h:64
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
RPCTechnicalTrigger::m_configFile
std::string m_configFile
Definition: RPCTechnicalTrigger.h:89
edm::ESHandle< RPCGeometry >
RPCTechnicalTrigger::beginRun
void beginRun(edm::Run const &, const edm::EventSetup &) final
Definition: RPCTechnicalTrigger.cc:292
RPCTechnicalTrigger::m_rpcDigiToken
const edm::EDGetTokenT< RPCDigiCollection > m_rpcDigiToken
Definition: RPCTechnicalTrigger.h:93
RPCTechnicalTrigger::m_ttBits
const std::vector< unsigned > m_ttBits
Definition: RPCTechnicalTrigger.h:90
RPCTechnicalTrigger::m_useRPCSimLink
const int m_useRPCSimLink
Definition: RPCTechnicalTrigger.h:95
dqmdumpme.k
k
Definition: dqmdumpme.py:60
RPCTechnicalTrigger::RPCTechnicalTrigger
RPCTechnicalTrigger(const edm::ParameterSet &)
Definition: RPCTechnicalTrigger.cc:39
RPCTechnicalTrigger::kMaxTtuBoards
static constexpr int kMaxTtuBoards
Definition: RPCTechnicalTrigger.h:82
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
RBCProcessRPCDigis.h
RPCTechnicalTrigger::m_rpcDigiLabel
const edm::InputTag m_rpcDigiLabel
Definition: RPCTechnicalTrigger.h:92
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
MessageDrop.h
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
RPCTechnicalTrigger::m_useEventSetup
const int m_useEventSetup
Definition: RPCTechnicalTrigger.h:88
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup
Definition: EventSetup.h:57
itr
std::vector< std::pair< float, float > >::iterator itr
Definition: HGCDigitizer.cc:28
get
#define get
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
RPCTechnicalTrigger::printinfo
void printinfo() const
Definition: RPCTechnicalTrigger.cc:444
RPCTechnicalTrigger::~RPCTechnicalTrigger
~RPCTechnicalTrigger() override
Definition: RPCTechnicalTrigger.cc:85
eostools.move
def move(src, dest)
Definition: eostools.py:511
RPCTechnicalTrigger.h
ProcessTestSignal.h
L1GtTechnicalTriggerRecord
Definition: L1GtTechnicalTriggerRecord.h:28
RPCTechnicalTrigger
Definition: RPCTechnicalTrigger.h:68
RPCTechnicalTrigger::m_readConfig
std::unique_ptr< TTUConfigurator > m_readConfig
Definition: RPCTechnicalTrigger.h:97
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
TTUEmulator
Definition: TTUEmulator.h:39
mps_fire.result
result
Definition: mps_fire.py:303
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
RPCTechnicalTrigger::m_verbosity
const int m_verbosity
Definition: RPCTechnicalTrigger.h:87
DeadROC_duringRun.f1
f1
Definition: DeadROC_duringRun.py:219
crabWrapper.key
key
Definition: crabWrapper.py:19
MuonGeometryRecord
Definition: MuonGeometryRecord.h:34
edm::InputTag
Definition: InputTag.h:15
RPCTechnicalTrigger::m_rbcspecs
const RBCBoardSpecs * m_rbcspecs
Definition: RPCTechnicalTrigger.h:99