CMS 3D CMS Logo

RPCTriggerBoard.cc
Go to the documentation of this file.
1 /*******************************************************************************
2 * *
3 * Karol Bunkowski *
4 * Warsaw University 2004 *
5 * *
6 *******************************************************************************/
10 
11 #include <sstream>
12 //---------------------------------------------------------------------------
13 RPCTriggerBoard::RPCTriggerBoard(RPCTriggerConfiguration* triggerConfig, int tbNum, int tcNum) {
14  m_TriggerConfig = triggerConfig;
15  m_TBNumber = tbNum;
16 
17  int towerMin = -16;
18  int towerMax = -16;
19 
20  // Calculate tower boundaries for this TB
21  for (int i = 0; i <= tbNum; i++) { // Trigger Boards are numbered from 0 to 8
22  towerMin = towerMax;
23  towerMax += m_TriggerConfig->getTowsCntOnTB(i);
24  }
25  towerMax--;
26 
27  for (int tower = towerMin; tower <= towerMax; tower++) {
28  for (int logSegment = 0; logSegment < 12; logSegment++) { // One logSegment = one PAC
29  //m_pacs[cone.getTower()][cone.getLogSegment()]
31  coneCrds.m_Tower = tower;
32  coneCrds.m_LogSector = tcNum;
33  coneCrds.m_LogSegment = logSegment;
34 
35  const RPCPacData* pacData = m_TriggerConfig->getPac(coneCrds);
36 
37  // one trigger crate covers one logsector:
38  //RPCPac *pac = new RPCPac(pacData, tower, tcNum, logSegment);
39  std::shared_ptr<RPCPac> pac(new RPCPac(pacData, tower, tcNum, logSegment));
40 
41  m_pacs[tower].push_back(pac);
42  }
43  }
44 }
45 //---------------------------------------------------------------------------
47  //RPCTBMuon tbMuon(m_TriggerConfig->getPac(cone.getConeCrdnts())->run(cone) );
48  if (m_pacs.find(cone.getTower()) == m_pacs.end()) {
49  std::stringstream s;
50  s << "RPCTriggerBoard::runCone() wrong tower: " << cone.getTower() << " in TB=" << m_TBNumber;
51  throw RPCException(s.str());
52  }
53 
54  RPCTBMuon tbMuon(m_pacs[cone.getTower()][cone.getLogSegment()]->run(cone));
55  //Reference: RPCTBMuon(int ptCode, int quality, int sign, int patternNum, unsigned short firedPlanes);
56 
57  //RPCPacMuon pmuon = m_pacs[cone.getTower()][cone.getLogSegment()]->run(cone);
58  //RPCTBMuon tbMuon(pmuon.getPtCode(), pmuon.getQuality(), pmuon.getSign(), pmuon.getPatternNum(), pmuon.getFiredPlanes());
59 
60  if (tbMuon.getCode() > 0) {
61  m_PacsMuonsVec.push_back(tbMuon);
62  if (m_TriggerConfig->getDebugLevel() != 0) {
63 #ifndef _STAND_ALONE
64  // LogDebug("RPCHwDebug") << "GB 0 -1 "
65  // << tbMuon.printDebugInfo(m_TriggerConfig->getDebugLevel());
66  MuonsGrabber::Instance().addMuon(tbMuon, 0, -1, -1, -1);
67 #else
68  std::cout << "GB 0 -1 " << tbMuon.printDebugInfo(m_TriggerConfig->getDebugLevel()) << std::endl;
69 #endif //_STAND_ALONE
70  }
71  return true;
72  } else
73  return false;
74 }
75 //---------------------------------------------------------------------------
76 L1RpcTBMuonsVec RPCTriggerBoard::runTBGB() { //4 muons or empty vector
77  if (m_PacsMuonsVec.empty())
78  return L1RpcTBMuonsVec();
79 
81  for (unsigned int iMu = 0; iMu < m_PacsMuonsVec.size(); iMu++) {
82  int tbTower = m_TriggerConfig->getTowerNumOnTb(m_PacsMuonsVec[iMu].getConeCrdnts());
83 
84  if (gbMuons[tbTower].empty())
85  gbMuons[tbTower].assign(RPCConst::m_SEGMENTS_IN_SECTOR_CNT, RPCTBMuon());
86 
87  gbMuons[tbTower][m_PacsMuonsVec[iMu].getLogSegment()] = m_PacsMuonsVec[iMu];
88  }
89 
90  m_PacsMuonsVec.clear();
91  return m_TBGhostBuster.run(gbMuons);
92 }
bool runCone(const RPCLogCone &cone)
The coordinates of Logic Cone: m_Tower, m_LogSector, m_LogSegment.
Definition: RPCConst.h:117
L1RpcTBMuonsVec runTBGB()
static MuonsGrabber & Instance()
Definition: MuonsGrabber.cc:48
static const unsigned int m_SEGMENTS_IN_SECTOR_CNT
m_Number of Logic Segments in one Logic Sector, defines also the number of Logic Cones for one Logic ...
Definition: RPCConst.h:153
virtual const RPCPacData * getPac(const RPCConst::l1RpcConeCrdnts &coneCrdnts) const =0
Returns pointer to m_PAC that should run given LogCone.
RPCTriggerBoard(RPCTriggerConfiguration *triggerConfig, int tbNum, int tcNum)
std::vector< RPCTBMuon > L1RpcTBMuonsVec
Definition: RPCTBMuon.h:218
RPCTBGhostBuster m_TBGhostBuster
std::vector< L1RpcTBMuonsVec > L1RpcTBMuonsVec2
Definition: RPCTBMuon.h:219
L1RpcTBMuonsVec run(L1RpcTBMuonsVec2 &pacMuonsVec2) const
Definition: RPCPac.h:13
static const unsigned int m_TOWERS_ON_TB_CNT
Max number of towers covered by one Trugger Board.
Definition: RPCConst.h:152
int m_TBNumber
0...8 , 0 = tbn4, m_tower -16..-13, 4 = tb0
RPCTriggerConfiguration * m_TriggerConfig
virtual int getTowsCntOnTB(int tbNum)=0
Returns the count of Towers, that are covered by given TB .
virtual int getTowerNumOnTb(const RPCConst::l1RpcConeCrdnts &coneCrdnts)=0
void addMuon(RPCTBMuon &mu, int lvl, int region, int hs, int index)
L1RpcTBMuonsVec m_PacsMuonsVec