ATLAS Offline Software
L1Menu.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrigConfData/L1Menu.h"
6 using namespace std;
7 
8 #include <iterator>
9 #include <utility>
11 {}
12 
15 {
16  load();
17 }
18 
19 void
21 {
22  if(! isInitialized() || empty() ) {
23  return;
24  }
25 
26  m_run = getAttribute_optional<int>("run").value_or(3);
27 
28  // thresholds
29  try {
30  m_name = getAttribute("name");
31  for( const std::string path : {"thresholds", "thresholds.legacyCalo" } ) {
32  for( auto & thrByType : data().get_child( path ) ) {
33  const std::string & thrType = thrByType.first;
34  if (thrType == "legacyCalo")
35  continue;
36 
37  // first create the extraInfo object for this type of thresholds
38  auto extraInfo = m_thrExtraInfo.addExtraInfo(thrByType.first,thrByType.second);
39 
40  auto & v = m_thresholdsByType[thrType] = std::vector<std::shared_ptr<TrigConf::L1Threshold>>();
41  if(thrType == "internal") {
42  for( auto & thr : data().get_child( path + ".internal.names") ) {
43  const std::string thrName = thr.second.data();
44  v.push_back( L1Threshold::createThreshold( thrName, thrType, extraInfo, thr.second ) );
45  }
46  } else {
47  for( auto & thr : data().get_child( path + "." + thrType + ".thresholds") ) {
48  const std::string thrName = thr.first;
49  v.push_back( L1Threshold::createThreshold( thrName, thrType, extraInfo, thr.second ) );
50  }
51  }
52  for( auto & thr : v ) {
53  m_thresholdsByName[ thr->name() ] = thr;
54  }
55  for (auto &thr : v) {
56  m_thresholdsByTypeAndMapping[thrType][thr->mapping()] = thr;
57  }
58  }
59  }
60  }
61  catch(std::exception & ex) {
62  std::cerr << "ERROR: problem when building L1 menu structure (thresholds). " << ex.what() << std::endl;
63  throw;
64  }
65 
66  // boards
67  try {
68  for( auto & board : data().get_child( "boards" ) ) {
69  m_boards.emplace( std::piecewise_construct,
70  std::forward_as_tuple(board.first),
71  std::forward_as_tuple(board.first, board.second) );
72  }
73  }
74  catch(std::exception & ex) {
75  std::cerr << "ERROR: problem when building L1 menu structure (boards). " << ex.what() << std::endl;
76  throw;
77  }
78 
79  // connectors
80  try {
81  for( auto & conn : data().get_child( "connectors" ) ) {
82  auto res = m_connectors.emplace( std::piecewise_construct,
83  std::forward_as_tuple(conn.first),
84  std::forward_as_tuple(conn.first, conn.second) );
85  for( auto & tl : res.first->second.triggerLineNames() ) {
86  m_threshold2ConnectorName.emplace( std::piecewise_construct,
87  std::forward_as_tuple(tl),
88  std::forward_as_tuple(conn.first));
89  }
90  }
91  }
92  catch(std::exception & ex) {
93  std::cerr << "ERROR: problem when building L1 menu structure (connectors). " << ex.what() << std::endl;
94  throw;
95  }
96 
97  // algorithms
98  if(m_run>1) {
99  try {
100  auto topoCategories = isRun2() ? std::vector<std::string> {"R2TOPO"} : std::vector<std::string> {"TOPO", "MUTOPO", "MULTTOPO", "R2TOPO"};
101  for( const std::string& algoCategory : topoCategories ) {
102  auto & v = m_algorithmsByCategory[algoCategory] = std::vector<TrigConf::L1TopoAlgorithm>();
103  m_algorithmsByName.emplace(algoCategory, std::map<std::string, TrigConf::L1TopoAlgorithm*>());
104  m_algorithmsByOutput.emplace(algoCategory, std::map<std::string, TrigConf::L1TopoAlgorithm*>());
105  if(algoCategory == "MULTTOPO") {
106  for( auto & alg : data().get_child( "topoAlgorithms." + algoCategory + ".multiplicityAlgorithms" ) ) {
107  v.emplace_back( alg.first, L1TopoAlgorithm::AlgorithmType::MULTIPLICITY, algoCategory, alg.second );
108  }
109  } else {
111  std::string subpath = "topoAlgorithms." + algoCategory + (algoType==L1TopoAlgorithm::AlgorithmType::DECISION ? ".decisionAlgorithms" : ".sortingAlgorithms" );
112  for( auto & algorithm : data().get_child( subpath ) ) {
113  v.emplace_back( algorithm.first, algoType, algoCategory, algorithm.second );
114  }
115  }
116  }
117  for( auto & algo : v ) {
118  if( m_algorithmsByName[algoCategory].count(algo.name()) > 0 ) {
119  std::cerr << "ERROR : Topo algorithm with name " << algo.name() << " and of type " << algoCategory << " already exists" << std::endl;
120  throw std::runtime_error("Found duplicate topo algorithm name " + algo.name() + " of type " + algoCategory);
121  }
122  m_algorithmsByName[ algoCategory ][ algo.name() ] = & algo;
123  for( const std::string & output : algo.outputs() ) {
124  if( m_algorithmsByOutput[algoCategory].count(output) > 0 ) {
125  std::cerr << "ERROR : Topo algorithm output " << output << " already exists" << std::endl;
126  throw std::runtime_error("Found duplicate topo algorithm output " + output + " of type " + algoCategory);
127  }
128  m_algorithmsByOutput[algoCategory][output] = & algo;
129  }
130  }
131  }
132  }
133  catch(std::exception & ex) {
134  std::cerr << "ERROR: problem when building L1 menu structure (algorithms). " << ex.what() << std::endl;
135  throw;
136  }
137  }
138 
139  // CTP
140  try {
141  m_ctp.setData(data().get_child("ctp"));
142  }
143  catch(std::exception & ex) {
144  std::cerr << "ERROR: problem when building L1 menu structure (CTP). " << ex.what() << std::endl;
145  throw;
146  }
147 }
148 
149 void
151 {
153 
154  m_smk = 0;
155  m_run = 3;
156  m_connectors.clear();
157  m_threshold2ConnectorName.clear();
158  m_boards.clear();
159  m_thresholdsByType.clear();
160  m_thresholdsByName.clear();
161  m_thresholdsByTypeAndMapping.clear();
162 
163  m_thrExtraInfo.clear();
164 
165  m_algorithmsByCategory.clear();
166  m_algorithmsByName.clear();
167  m_algorithmsByOutput.clear();
168 
169  m_ctp.clear();
170 }
171 
172 unsigned int
174 {
175  return getAttribute<unsigned int>("version");
176 }
177 
178 unsigned int
180 {
181  return getAttribute<unsigned int>("ctpVersion");
182 }
183 
184 std::size_t
186 {
187  return data().get_child("items").size();
188 }
189 
190 unsigned int
192  return m_smk;
193 }
194 
195 void
197  m_smk = smk;
198 }
199 
201 TrigConf::L1Menu::item(const std::string & itemName) const
202 {
203  if(itemName=="") {
204  throw std::runtime_error("L1Menu::item() was called with empty itemName");
205  }
206  const ptree * pt;
207  try {
208  pt = & data().get_child(ptree::path_type("items/"+itemName,'/')); // '/' is not used in any item Name, so we can use it as separator in the path
209  } catch(boost::property_tree::ptree_bad_path & ex) {
210  throw std::runtime_error("L1Item " + itemName + " does not exist in the menu");
211  }
212  return L1Item(*pt);
213 }
214 
217 {
218  return {data().get_child("items"), 0, [](auto & x){return L1Item(x.second);}};
219 }
220 
221 
224 {
225  const auto & items = data().get_child("items");
226  return {items, items.size(), [](auto & x){return L1Item(x.second);}};
227 }
228 
229 
230 std::vector<std::string>
232 {
233  std::vector<std::string> thrTypeNames;
234  thrTypeNames.reserve(m_thresholdsByType.size());
235  for( auto x : m_thresholdsByType ) {
236  thrTypeNames.emplace_back(x.first);
237  }
238  return thrTypeNames;
239 }
240 
241 std::vector<std::string>
243 {
244  std::vector<std::string> thrNames;
245  thrNames.reserve(m_thresholdsByName.size());
246  for( auto x : m_thresholdsByName ) {
247  thrNames.emplace_back(x.first);
248  }
249  return thrNames;
250 }
251 
252 
253 const std::vector<std::shared_ptr<TrigConf::L1Threshold>> &
254 TrigConf::L1Menu::thresholds(const std::string & typeName) const
255 {
256  try {
257  return m_thresholdsByType.at(typeName);
258  }
259  catch(std::exception & ex) {
260  std::cerr << "No threshold type '" << typeName << "' defined in the thresholds section of the L1 menu" << std::endl;
261  throw;
262  }
263 }
264 
265 
266 std::vector<std::shared_ptr<TrigConf::L1Threshold>>
268 {
269  std::vector<std::shared_ptr<TrigConf::L1Threshold>> thrlist;
270  for ( const std::string & type : thresholdTypes() ) {
271  const auto & thrOfType = thresholds(type);
272  std::copy(thrOfType.begin(), thrOfType.end(), std::back_inserter(thrlist));
273  }
274  return thrlist;
275 }
276 
277 
278 const TrigConf::L1Threshold &
279 TrigConf::L1Menu::threshold(const std::string & thresholdName) const
280 {
281  try {
282  return * m_thresholdsByName.at(thresholdName);
283  }
284  catch(std::exception & ex) {
285  std::cerr << "No threshold '" << thresholdName << "' defined in the thresholds section of the L1 menu" << std::endl;
286  throw;
287  }
288 }
289 
291 const TrigConf::L1Threshold &
292 TrigConf::L1Menu::threshold(const std::string &typeName, unsigned int mapping) const
293 {
294  try
295  {
296  return *m_thresholdsByTypeAndMapping.at(typeName).at(mapping);
297  }
298  catch (std::exception &ex)
299  {
300  std::cerr << "No threshold of type '" << typeName << "' with mapping " << mapping
301  << " defined in the thresholds section of the L1 menu" << std::endl;
302  throw;
303  }
304 }
305 
308 {
309  return m_thrExtraInfo;
310 }
311 
312 const std::string &
313 TrigConf::L1Menu::connectorNameFromThreshold(const std::string & thresholdName) const
314 {
315  try {
316  return m_threshold2ConnectorName.at(thresholdName);
317  }
318  catch(...) {
319  std::cerr << "Threshold '" << thresholdName << "' not defined as triggerline in the L1 menu" << std::endl;
320  throw;
321  }
322 }
323 
324 std::vector<std::string>
326  std::vector<std::string> connNames;
327  connNames.reserve(m_connectors.size());
328  for( auto & x : m_connectors ) {
329  connNames.emplace_back(x.first);
330  }
331  return connNames;
332 }
333 
334 const TrigConf::L1Connector &
335 TrigConf::L1Menu::connector(const std::string & connectorName) const {
336  try {
337  return m_connectors.at(connectorName);
338  }
339  catch(std::exception & ex) {
340  std::cerr << "No connector " << connectorName << " defined in the L1 menu" << std::endl;
341  throw;
342  }
343 }
344 
346 std::vector<std::string>
348 {
349  std::vector<std::string> algoNames;
350  try {
351  for(auto & entry : m_algorithmsByName.at(category) ) {
352  algoNames.push_back(entry.first);
353  }
354  }
355  catch(std::exception & ex) {
356  std::cerr << "No algorithm category '" << category << "' defined in the L1 menu" << std::endl;
357  throw;
358  }
359  return algoNames;
360 }
361 
363 std::vector<std::string>
365 {
366  std::vector<std::string> outputNames;
367  try {
368  for(auto & entry : m_algorithmsByOutput.at(category) ) {
369  outputNames.push_back(entry.first);
370  }
371  }
372  catch(std::exception & ex) {
373  std::cerr << "No algorithm category '" << category << "' defined in the L1 menu" << std::endl;
374  throw;
375  }
376  return outputNames;
377 }
378 
379 
380 
382 TrigConf::L1Menu::algorithm(const std::string & algoName, const std::string & category) const
383 {
384  try {
385  return * m_algorithmsByName.at(category).at(algoName);
386  }
387  catch(std::exception & ex) {
388  std::cerr << "No algorithm " << algoName << " of category " << category << " defined in the L1 menu" << std::endl;
389  throw;
390  }
391 }
392 
394 TrigConf::L1Menu::algorithmFromTriggerline(const std::string & triggerlineName) const
395 {
396  std::string category {"MULTTOPO"};
397  std::string outputName {triggerlineName};
398  if( std::size_t pos = triggerlineName.find('_'); pos != std::string::npos ) {
399  category = triggerlineName.substr(0,pos);
400  outputName = triggerlineName.substr(pos+1);
401  }
402  const static std::vector<string> topoTypes {"TOPO", "R2TOPO", "MULTTOPO", "MUTOPO"};
403  if( std::none_of(cbegin(topoTypes), cend(topoTypes), [&category](const std::string & str){return str==category;}) ) {
404  std::string msg = "L1Menu::algorithmFromTriggerLine(" + triggerlineName + "): triggerline " + triggerlineName + " is not produced by a topo algorithm.";
405  throw std::runtime_error(msg);
406  }
407  try {
408  return * m_algorithmsByOutput.at(category).at(outputName);
409  }
410  catch(std::exception & ex) {
411  std::cerr << "L1Menu::algorithmFromTriggerLine(): No output " << outputName << " defined by any algorithm of category " << category << " in the L1 menu. (It was asked for " << triggerlineName << ")" << std::endl;
412  throw;
413  }
414 }
415 
417 TrigConf::L1Menu::algorithmFromOutput(const std::string & bareOutputName, const std::string & type) const
418 {
419  try {
420  return * m_algorithmsByOutput.at(type).at(bareOutputName);
421  }
422  catch(std::exception & ex) {
423  std::cerr << "No output " << bareOutputName << " defined by any algorithm of type " << type << " in the L1 menu" << std::endl;
424  throw;
425  }
426 }
427 
428 const TrigConf::L1Board &
429 TrigConf::L1Menu::board(const std::string & boardName) const
430 {
431  try {
432  return m_boards.at(boardName);
433  }
434  catch(std::exception & ex) {
435  std::cerr << "No board " << boardName << " defined in the L1 menu" << std::endl;
436  throw;
437  }
438 }
439 
440 std::vector<std::string>
442 {
443  std::vector<std::string> boardNames;
444  boardNames.reserve(m_boards.size());
445  for(auto & board : m_boards) {
446  boardNames.emplace_back(board.first);
447  }
448  return boardNames;
449 }
450 
451 
452 
453 
454 void
456 {
457  cout << "L1 menu '" << name() << "'" << endl;
458  cout << "Items: " << size() << endl;
459  if(full) {
460  int c(0);
461  for(const L1Item & item : *this ) {
462  cout << " " << c++ << ": " << item.name() << endl;
463  }
464  }
465  cout << "Thresholds: " << thresholds().size() << "(of " << thresholdTypes().size() << " different types)" << endl;
466  if(full) {
467  int c(0);
468  for(const std::string & thrType : thresholdTypes() ) {
469  cout << thrType << " :" << endl;
470  for(auto & thr : thresholds(thrType)) {
471  cout << " " << c++ << ": " << thr->name() << "[" << thr->type() << "]" << endl;
472  }
473  }
474  }
475  if(m_run>1) {
476  cout << "Topo algorithms: " << endl;
477  cout << " new : " << data().get_child("topoAlgorithms.TOPO.decisionAlgorithms").size() << endl;
478  cout << " muon : " << data().get_child("topoAlgorithms.MUTOPO.decisionAlgorithms").size() << endl;
479  cout << " mult : " << data().get_child("topoAlgorithms.MULTTOPO.multiplicityAlgorithms").size() << endl;
480  cout << " legacy: " << data().get_child("topoAlgorithms.R2TOPO.decisionAlgorithms").size() << endl;
481  }
482  cout << "Boards: " << data().get_child("boards").size() << endl;
483  cout << "Connectors: " << data().get_child("connectors").size() << endl;
484  unsigned int ctpinputs = data().get_child("ctp.inputs.optical").size();
485  ctpinputs += data().get_child("ctp.inputs.electrical").size();
486  ctpinputs += data().get_child("ctp.inputs.ctpin.slot7").size();
487  ctpinputs += data().get_child("ctp.inputs.ctpin.slot8").size();
488  ctpinputs += data().get_child("ctp.inputs.ctpin.slot9").size();
489  cout << "CTP connections: " << ctpinputs << endl;
490 }
491 
TrigConf::L1Menu::size
std::size_t size() const
Accessor to the number of L1 items.
Definition: L1Menu.cxx:185
TrigConf::L1Menu::setSMK
void setSMK(unsigned int psk)
Definition: L1Menu.cxx:196
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
TrigConf::L1TopoAlgorithm
L1Topo algorithm configuration.
Definition: L1TopoAlgorithm.h:20
checkCorrelInHIST.conn
conn
Definition: checkCorrelInHIST.py:25
TrigConf::L1Menu::algorithm
const TrigConf::L1TopoAlgorithm & algorithm(const std::string &algoName, const std::string &category) const
Access to topo algorithm by name.
Definition: L1Menu.cxx:382
TrigConf::L1Connector
L1 connectors configuration.
Definition: L1Connector.h:45
algorithm
std::string algorithm
Definition: hcg.cxx:82
SGout2dot.alg
alg
Definition: SGout2dot.py:243
athena.path
path
python interpreter configuration --------------------------------------—
Definition: athena.py:126
TrigConf::L1Menu::load
void load()
Definition: L1Menu.cxx:20
RunEBWeightsComputation.smk
smk
Definition: RunEBWeightsComputation.py:87
TrigConf::L1Menu::topoAlgorithmNames
std::vector< std::string > topoAlgorithmNames(const std::string &category) const
Access to topo algorithm names.
Definition: L1Menu.cxx:347
TrigConf::L1Menu::connectorNameFromThreshold
const std::string & connectorNameFromThreshold(const std::string &thresholdName) const
Name of connector from name of threshold or triggerline.
Definition: L1Menu.cxx:313
TrigConf::L1Menu::thrExtraInfo
const L1ThrExtraInfo & thrExtraInfo() const
Access to extra info for threshold types.
Definition: L1Menu.cxx:307
TrigConf::L1Menu::end
const_iterator end() const
End of the L1 items list.
Definition: L1Menu.cxx:223
test_pyathena.pt
pt
Definition: test_pyathena.py:11
TrigConf::L1Menu::printMenu
void printMenu(bool full=false) const
print overview of L1 Menu
Definition: L1Menu.cxx:455
TrigConf::L1Menu::clear
virtual void clear() override
Clearing the configuration data.
Definition: L1Menu.cxx:150
TrigConf::L1Menu::L1Menu
L1Menu()
Constructor.
Definition: L1Menu.cxx:10
TrigConf::L1Menu::thresholdNames
std::vector< std::string > thresholdNames() const
List of L1 thresholds names.
Definition: L1Menu.cxx:242
TrigConf::L1Menu::topoAlgorithmOutputNames
std::vector< std::string > topoAlgorithmOutputNames(const std::string &category) const
Access to topo algoritm output names.
Definition: L1Menu.cxx:364
x
#define x
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
find_tgc_unfilled_channelids.mapping
mapping
Definition: find_tgc_unfilled_channelids.py:17
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
TrigConf::L1TopoAlgorithm::AlgorithmType::SORTING
@ SORTING
TrigConf::L1ThrExtraInfo
Definition: L1ThrExtraInfo.h:36
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TrigConf::L1Threshold::createThreshold
static std::shared_ptr< L1Threshold > createThreshold(const std::string &name, const std::string &type, std::weak_ptr< L1ThrExtraInfoBase > extraInfo, const ptree &data)
static method to create type-specific L1Thresholds
Definition: L1ThresholdBase.cxx:28
ReweightUtils.category
category
Definition: ReweightUtils.py:15
TrigConf::L1Menu::item
L1Item item(const std::string &itemName) const
Get item by name.
Definition: L1Menu.cxx:201
calibdata.exception
exception
Definition: calibdata.py:496
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
TrigConf::L1Menu::thresholds
std::vector< std::shared_ptr< TrigConf::L1Threshold > > thresholds() const
Access to list of all L1Thresholds.
Definition: L1Menu.cxx:267
TrigConf::L1Menu::ctpVersion
unsigned int ctpVersion() const
Accessor to the version of the CTP format.
Definition: L1Menu.cxx:179
TrigConf::L1Menu::thresholdTypes
std::vector< std::string > thresholdTypes() const
List of L1 thresholds types.
Definition: L1Menu.cxx:231
TrigConf::L1Item
L1 threshold configuration.
Definition: L1Item.h:18
TrigConf::L1Menu::smk
unsigned int smk() const
setter and getter for the supermasterkey
Definition: L1Menu.cxx:191
TrigConf::L1TopoAlgorithm::AlgorithmType::MULTIPLICITY
@ MULTIPLICITY
TrigConf::L1Menu::boardNames
std::vector< std::string > boardNames() const
Board names.
Definition: L1Menu.cxx:441
TrigConf::ConstIter
Forward iterator over an iterable of type V returning an object of type T.
Definition: ConstIter.h:32
TrigConf::L1Menu::connectorNames
std::vector< std::string > connectorNames() const
Connector names.
Definition: L1Menu.cxx:325
merge.output
output
Definition: merge.py:17
TrigConf::L1Menu::begin
const_iterator begin() const
Begin of the L1 items list.
Definition: L1Menu.cxx:216
python.TrigConfigSvcUtils.isRun2
def isRun2(cursor, schemaname)
Definition: TrigConfigSvcUtils.py:290
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
ptree
boost::property_tree::ptree ptree
Definition: JsonFileLoader.cxx:16
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
XMLtoHeader.outputNames
outputNames
Definition: XMLtoHeader.py:18
TrigConf::L1Menu::threshold
const TrigConf::L1Threshold & threshold(const std::string &thresholdName) const
Access to L1Threshold by name.
Definition: L1Menu.cxx:279
TrigConf::DataStructure
Base class for Trigger configuration data and wrapper around underlying representation.
Definition: DataStructure.h:37
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
item
Definition: ItemListSvc.h:43
TrigConf::L1Menu::connector
const TrigConf::L1Connector & connector(const std::string &connectorName) const
Access to connector by name.
Definition: L1Menu.cxx:335
find_data.full
full
Definition: find_data.py:27
TrigConf::L1Menu::board
const TrigConf::L1Board & board(const std::string &boardName) const
Access to boards by name.
Definition: L1Menu.cxx:429
TrigConf::L1Menu::algorithmFromTriggerline
const TrigConf::L1TopoAlgorithm & algorithmFromTriggerline(const std::string &triggerlineName) const
Access to topo algorithm by name of triggerline as given in topo connector specification.
Definition: L1Menu.cxx:394
lumiFormat.outputName
string outputName
Definition: lumiFormat.py:71
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
python.PyAthena.v
v
Definition: PyAthena.py:157
TrigConf::L1TopoAlgorithm::AlgorithmType::DECISION
@ DECISION
TrigConf::L1TopoAlgorithm::AlgorithmType
AlgorithmType
Definition: L1TopoAlgorithm.h:23
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TrigConf::L1Menu::version
unsigned int version() const
Accessor to the menu version.
Definition: L1Menu.cxx:173
TrigConf::DataStructure::clear
virtual void clear()
Clearing the configuration data.
Definition: DataStructure.cxx:65
ReadCalibFromCool.typeName
typeName
Definition: ReadCalibFromCool.py:477
str
Definition: BTagTrackIpAccessor.cxx:11
dqt_zlumi_alleff_HIST.tl
tl
Definition: dqt_zlumi_alleff_HIST.py:73
calibdata.copy
bool copy
Definition: calibdata.py:27
L1Menu.h
TrigConf::DataStructure::ptree
boost::property_tree::ptree ptree
Definition: DataStructure.h:40
python.compressB64.c
def c
Definition: compressB64.py:93
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
TrigConf::L1Board
a TriggerLine entry describes the location of a threshold multiplicity on a cable (connector)
Definition: L1Board.h:23
TrigConf::L1Threshold
Standard L1 threshold configuration.
Definition: L1ThresholdBase.h:125
TrigConf::L1Menu::algorithmFromOutput
const TrigConf::L1TopoAlgorithm & algorithmFromOutput(const std::string &bareOutputName, const std::string &category) const
Access to topo algorithm by name of the output as given in the algorithm definition.
Definition: L1Menu.cxx:417