File indexing completed on 2024-04-06 12:21:41
0001
0002
0003
0004
0005
0006
0007 #include "L1Trigger/RPCTrigger/interface/RPCTriggerBoard.h"
0008 #include "L1Trigger/RPCTrigger/interface/RPCException.h"
0009 #include "L1Trigger/RPCTrigger/interface/MuonsGrabber.h"
0010
0011 #include <sstream>
0012
0013 RPCTriggerBoard::RPCTriggerBoard(RPCTriggerConfiguration* triggerConfig, int tbNum, int tcNum) {
0014 m_TriggerConfig = triggerConfig;
0015 m_TBNumber = tbNum;
0016
0017 int towerMin = -16;
0018 int towerMax = -16;
0019
0020
0021 for (int i = 0; i <= tbNum; i++) {
0022 towerMin = towerMax;
0023 towerMax += m_TriggerConfig->getTowsCntOnTB(i);
0024 }
0025 towerMax--;
0026
0027 for (int tower = towerMin; tower <= towerMax; tower++) {
0028 for (int logSegment = 0; logSegment < 12; logSegment++) {
0029
0030 RPCConst::l1RpcConeCrdnts coneCrds;
0031 coneCrds.m_Tower = tower;
0032 coneCrds.m_LogSector = tcNum;
0033 coneCrds.m_LogSegment = logSegment;
0034
0035 const RPCPacData* pacData = m_TriggerConfig->getPac(coneCrds);
0036
0037
0038
0039 std::shared_ptr<RPCPac> pac(new RPCPac(pacData, tower, tcNum, logSegment));
0040
0041 m_pacs[tower].push_back(pac);
0042 }
0043 }
0044 }
0045
0046 bool RPCTriggerBoard::runCone(const RPCLogCone& cone) {
0047
0048 if (m_pacs.find(cone.getTower()) == m_pacs.end()) {
0049 std::stringstream s;
0050 s << "RPCTriggerBoard::runCone() wrong tower: " << cone.getTower() << " in TB=" << m_TBNumber;
0051 throw RPCException(s.str());
0052 }
0053
0054 RPCTBMuon tbMuon(m_pacs[cone.getTower()][cone.getLogSegment()]->run(cone));
0055
0056
0057
0058
0059
0060 if (tbMuon.getCode() > 0) {
0061 m_PacsMuonsVec.push_back(tbMuon);
0062 if (m_TriggerConfig->getDebugLevel() != 0) {
0063 #ifndef _STAND_ALONE
0064
0065
0066 MuonsGrabber::Instance().addMuon(tbMuon, 0, -1, -1, -1);
0067 #else
0068 std::cout << "GB 0 -1 " << tbMuon.printDebugInfo(m_TriggerConfig->getDebugLevel()) << std::endl;
0069 #endif
0070 }
0071 return true;
0072 } else
0073 return false;
0074 }
0075
0076 L1RpcTBMuonsVec RPCTriggerBoard::runTBGB() {
0077 if (m_PacsMuonsVec.empty())
0078 return L1RpcTBMuonsVec();
0079
0080 L1RpcTBMuonsVec2 gbMuons(RPCConst::m_TOWERS_ON_TB_CNT, L1RpcTBMuonsVec());
0081 for (unsigned int iMu = 0; iMu < m_PacsMuonsVec.size(); iMu++) {
0082 int tbTower = m_TriggerConfig->getTowerNumOnTb(m_PacsMuonsVec[iMu].getConeCrdnts());
0083
0084 if (gbMuons[tbTower].empty())
0085 gbMuons[tbTower].assign(RPCConst::m_SEGMENTS_IN_SECTOR_CNT, RPCTBMuon());
0086
0087 gbMuons[tbTower][m_PacsMuonsVec[iMu].getLogSegment()] = m_PacsMuonsVec[iMu];
0088 }
0089
0090 m_PacsMuonsVec.clear();
0091 return m_TBGhostBuster.run(gbMuons);
0092 }