CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Public Attributes | Private Attributes
RBCChamberORLogic Class Reference

#include <RBCChamberORLogic.h>

Inheritance diagram for RBCChamberORLogic:
RBCLogic

Public Types

typedef std::map< std::string, bool >::iterator itr2chambers
 
typedef std::vector< std::string >::iterator itr2names
 

Public Member Functions

void copymap (const std::bitset< 15 > &)
 
void createmap (const std::bitset< 15 > &)
 
bool evaluateLayerOR (const char *, const char *)
 
std::bitset< 6 > * getlayersignal (int _idx) override
 
void process (const RBCInput &, std::bitset< 2 > &) override
 
 RBCChamberORLogic ()
 Standard constructor. More...
 
void reset ()
 
void setBoardSpecs (const RBCBoardSpecs::RBCBoardConfig &) override
 
void setmaxlevel (int _mx)
 
- Public Member Functions inherited from RBCLogic
virtual ~RBCLogic ()
 

Public Attributes

std::array< std::bitset< 6 >, 2 > m_layersignal
 
- Public Attributes inherited from RBCLogic
bool m_triggersignal
 

Private Attributes

std::map< std::string, bool > m_chamber
 
int m_maxcb
 
int m_maxlevel
 
std::vector< std::string > m_rbname
 

Detailed Description

This class works out the mapping of inputs to chambers and applies a Coincidence Logic. The criteria for coincidence is set by the parameter m_maxlevel.

Authors
Andres Osorio, Flavio Loddo, Marcello Maggi

email: aosor.nosp@m.io@u.nosp@m.niand.nosp@m.es.e.nosp@m.du.co

Date
2008-10-11

Definition at line 27 of file RBCChamberORLogic.h.

Member Typedef Documentation

typedef std::map<std::string, bool>::iterator RBCChamberORLogic::itr2chambers

Definition at line 39 of file RBCChamberORLogic.h.

typedef std::vector<std::string>::iterator RBCChamberORLogic::itr2names

Definition at line 36 of file RBCChamberORLogic.h.

Constructor & Destructor Documentation

RBCChamberORLogic::RBCChamberORLogic ( )

Standard constructor.

Definition at line 15 of file RBCChamberORLogic.cc.

References m_chamber, m_maxcb, m_maxlevel, and m_rbname.

15  {
16  m_rbname.reserve(13);
17  m_rbname.emplace_back("RB1InFw");
18  m_rbname.emplace_back("RB1OutFw");
19  m_rbname.emplace_back("RB22Fw");
20  m_rbname.emplace_back("RB23Fw");
21  m_rbname.emplace_back("RB23M");
22  m_rbname.emplace_back("RB3Fw");
23  m_rbname.emplace_back("RB4Fw");
24  m_rbname.emplace_back("RB1InBk");
25  m_rbname.emplace_back("RB1OutBk");
26  m_rbname.emplace_back("RB22Bk");
27  m_rbname.emplace_back("RB23Bk");
28  m_rbname.emplace_back("RB3Bk");
29  m_rbname.emplace_back("RB4Bk");
30 
31  itr2names itr = m_rbname.begin();
32 
33  while (itr != m_rbname.end()) {
34  m_chamber.insert(make_pair((*itr), 0));
35  ++itr;
36  }
37 
38  m_maxcb = 13;
39  m_maxlevel = 3; // 1 <= m <= 6
40 }
std::vector< std::string >::iterator itr2names
std::map< std::string, bool > m_chamber
std::vector< std::string > m_rbname

Member Function Documentation

void RBCChamberORLogic::copymap ( const std::bitset< 15 > &  _input)

Definition at line 119 of file RBCChamberORLogic.cc.

References m_chamber, and m_rbname.

Referenced by process().

119  {
120  m_chamber[m_rbname[0]] = _input[0];
121  m_chamber[m_rbname[1]] = _input[1];
122  m_chamber[m_rbname[2]] = _input[2];
123  m_chamber[m_rbname[3]] = _input[3];
124  m_chamber[m_rbname[4]] = _input[4];
125  m_chamber[m_rbname[5]] = _input[5];
126  m_chamber[m_rbname[6]] = _input[6];
127  m_chamber[m_rbname[7]] = _input[7];
128  m_chamber[m_rbname[8]] = _input[8];
129  m_chamber[m_rbname[9]] = _input[9];
130  m_chamber[m_rbname[10]] = _input[10];
131  m_chamber[m_rbname[11]] = _input[11];
132  m_chamber[m_rbname[12]] = _input[12];
133 }
std::map< std::string, bool > m_chamber
std::vector< std::string > m_rbname
void RBCChamberORLogic::createmap ( const std::bitset< 15 > &  _input)

Definition at line 135 of file RBCChamberORLogic.cc.

References m_chamber, and m_rbname.

Referenced by process().

135  {
136  m_chamber[m_rbname[0]] = _input[3];
137  m_chamber[m_rbname[1]] = _input[4];
138  m_chamber[m_rbname[2]] = _input[5];
139  m_chamber[m_rbname[3]] = _input[8];
140  m_chamber[m_rbname[4]] = _input[7];
141  m_chamber[m_rbname[5]] = _input[11];
142  m_chamber[m_rbname[6]] = _input[12] || _input[14];
143  m_chamber[m_rbname[7]] = _input[0];
144  m_chamber[m_rbname[8]] = _input[1];
145  m_chamber[m_rbname[9]] = _input[2];
146  m_chamber[m_rbname[10]] = _input[6];
147  m_chamber[m_rbname[11]] = _input[9];
148  m_chamber[m_rbname[12]] = _input[10] || _input[13];
149 }
std::map< std::string, bool > m_chamber
std::vector< std::string > m_rbname
bool RBCChamberORLogic::evaluateLayerOR ( const char *  _chA,
const char *  _chB 
)

Definition at line 166 of file RBCChamberORLogic.cc.

References gather_cfg::cout, m_chamber, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by process().

166  {
167  itr2chambers ptr1 = m_chamber.find(std::string(_chA));
168  itr2chambers ptr2 = m_chamber.find(std::string(_chB));
169 
170  if (ptr1 == m_chamber.end() || ptr2 == m_chamber.end()) {
171  //handle error...
172  std::cout << "RBCChamberORLogic> Cannot find a chamber name" << '\n';
173  return false;
174  }
175 
176  return (ptr1->second || ptr2->second);
177 }
std::map< std::string, bool > m_chamber
std::map< std::string, bool >::iterator itr2chambers
std::bitset<6>* RBCChamberORLogic::getlayersignal ( int  _idx)
inlineoverridevirtual

Implements RBCLogic.

Definition at line 36 of file RBCChamberORLogic.h.

36 { return &m_layersignal[_idx]; };
std::array< std::bitset< 6 >, 2 > m_layersignal
void RBCChamberORLogic::process ( const RBCInput _input,
std::bitset< 2 > &  _decision 
)
overridevirtual

Implements RBCLogic.

Definition at line 44 of file RBCChamberORLogic.cc.

References funct::abs(), copymap(), KineDebug3::count(), createmap(), evaluateLayerOR(), RBCInput::input_sec, createfilelist::int, dqmdumpme::k, m_layersignal, m_maxlevel, RBCInput::needmapping, reset(), mps_update::status, and RBCInput::wheelId().

44  {
45  bool status(false);
46  //std::cout << "RBCChamberORLogic> Working with chambers OR logic ..." << '\n';
47 
48  m_layersignal[0].reset();
49  m_layersignal[1].reset();
50 
51  for (int k = 0; k < 2; ++k) {
52  if (_input.needmapping)
53  this->createmap(_input.input_sec[k]);
54  else
55  this->copymap(_input.input_sec[k]);
56 
57  status = this->evaluateLayerOR("RB1InFw", "RB1InBk");
58  m_layersignal[k].set(0, status);
59 
60  status = this->evaluateLayerOR("RB1OutFw", "RB1OutBk");
61  m_layersignal[k].set(1, status);
62 
63  //... RB2
64  //... wheel -2,+2 RB2IN divided in 2 eta partitions, RB2OUT in 3 eta
65  //... wheel -1, 0, +1 RB2IN divided in 3 eta partitions, RB2OUT in 2 eta
66 
67  if (abs(_input.wheelId()) >= 2) {
68  status = this->evaluateLayerOR("RB22Fw", "RB22Bk");
69  m_layersignal[k].set(2, status);
70 
71  bool rb23FB = this->evaluateLayerOR("RB23Fw", "RB23Bk");
72  bool rb23MF = this->evaluateLayerOR("RB23Fw", "RB23M");
73  bool rb23MB = this->evaluateLayerOR("RB23M", "RB23Bk");
74 
75  status = rb23FB || rb23MF || rb23MB;
76 
77  m_layersignal[k].set(3, status);
78 
79  } else {
80  status = this->evaluateLayerOR("RB22Fw", "RB22Bk");
81  m_layersignal[k].set(3, status);
82 
83  bool rb23FB = this->evaluateLayerOR("RB23Fw", "RB23Bk");
84  bool rb23MF = this->evaluateLayerOR("RB23Fw", "RB23M");
85  bool rb23MB = this->evaluateLayerOR("RB23M", "RB23Bk");
86 
87  status = rb23FB || rb23MF || rb23MB;
88 
89  m_layersignal[k].set(2, status);
90  }
91 
92  //.......
93 
94  status = this->evaluateLayerOR("RB3Fw", "RB3Bk");
95  m_layersignal[k].set(4, status);
96 
97  status = this->evaluateLayerOR("RB4Fw", "RB4Bk");
98  m_layersignal[k].set(5, status);
99 
100  reset();
101 
102  //... apply now majority level criteria:
103 
104  int _majority = int(m_layersignal[k].count());
105 
106  if (_majority >= m_maxlevel)
107  _decision[k] = true;
108  else
109  _decision[k] = false;
110  }
111 
112  //...all done!
113 }
std::array< std::bitset< 15 >, 2 > input_sec
Definition: RBCInput.h:41
bool evaluateLayerOR(const char *, const char *)
void createmap(const std::bitset< 15 > &)
std::array< std::bitset< 6 >, 2 > m_layersignal
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool needmapping
Definition: RBCInput.h:50
int wheelId() const
Definition: RBCInput.h:54
void copymap(const std::bitset< 15 > &)
void RBCChamberORLogic::reset ( void  )

Definition at line 151 of file RBCChamberORLogic.cc.

References m_chamber, and m_rbname.

Referenced by process().

151  {
152  //... Reset map for next sector analysis
153  m_chamber.clear();
154 
155  itr2names itr = m_rbname.begin();
156 
157  while (itr != m_rbname.end()) {
158  m_chamber.insert(make_pair((*itr), 0));
159  ++itr;
160  }
161 
162  //m_layersignal[0].reset();
163  //m_layersignal[1].reset();
164 }
std::vector< std::string >::iterator itr2names
std::map< std::string, bool > m_chamber
std::vector< std::string > m_rbname
void RBCChamberORLogic::setBoardSpecs ( const RBCBoardSpecs::RBCBoardConfig specs)
overridevirtual

Implements RBCLogic.

Definition at line 115 of file RBCChamberORLogic.cc.

References m_maxlevel, and RBCBoardSpecs::RBCBoardConfig::m_MayorityLevel.

void RBCChamberORLogic::setmaxlevel ( int  _mx)
inline

Definition at line 49 of file RBCChamberORLogic.h.

References m_layersignal, and m_maxlevel.

49 { m_maxlevel = _mx; };

Member Data Documentation

std::map<std::string, bool> RBCChamberORLogic::m_chamber
private

Definition at line 57 of file RBCChamberORLogic.h.

Referenced by copymap(), createmap(), evaluateLayerOR(), RBCChamberORLogic(), and reset().

std::array<std::bitset<6>, 2> RBCChamberORLogic::m_layersignal

Definition at line 49 of file RBCChamberORLogic.h.

Referenced by process(), and setmaxlevel().

int RBCChamberORLogic::m_maxcb
private

Definition at line 59 of file RBCChamberORLogic.h.

Referenced by RBCChamberORLogic().

int RBCChamberORLogic::m_maxlevel
private

Definition at line 61 of file RBCChamberORLogic.h.

Referenced by process(), RBCChamberORLogic(), setBoardSpecs(), and setmaxlevel().

std::vector<std::string> RBCChamberORLogic::m_rbname
private

Definition at line 55 of file RBCChamberORLogic.h.

Referenced by copymap(), createmap(), RBCChamberORLogic(), and reset().