Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:41

0001 /*******************************************************************************
0002 *                                                                              *
0003 *  Karol Bunkowski                                                             *
0004 *  Warsaw University 2004                                                      *
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   // Calculate tower boundaries for this TB
0021   for (int i = 0; i <= tbNum; i++) {  // Trigger Boards are numbered from 0 to 8
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++) {  // One logSegment = one PAC
0029       //m_pacs[cone.getTower()][cone.getLogSegment()]
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       // one trigger crate covers one logsector:
0038       //RPCPac *pac = new RPCPac(pacData, tower, tcNum, logSegment);
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   //RPCTBMuon tbMuon(m_TriggerConfig->getPac(cone.getConeCrdnts())->run(cone) );
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   //Reference: RPCTBMuon(int ptCode, int quality, int sign, int patternNum, unsigned short firedPlanes);
0056 
0057   //RPCPacMuon pmuon = m_pacs[cone.getTower()][cone.getLogSegment()]->run(cone);
0058   //RPCTBMuon tbMuon(pmuon.getPtCode(), pmuon.getQuality(), pmuon.getSign(), pmuon.getPatternNum(), pmuon.getFiredPlanes());
0059 
0060   if (tbMuon.getCode() > 0) {
0061     m_PacsMuonsVec.push_back(tbMuon);
0062     if (m_TriggerConfig->getDebugLevel() != 0) {
0063 #ifndef _STAND_ALONE
0064       //  LogDebug("RPCHwDebug") << "GB 0 -1 "
0065       //                 << tbMuon.printDebugInfo(m_TriggerConfig->getDebugLevel());
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  //_STAND_ALONE
0070     }
0071     return true;
0072   } else
0073     return false;
0074 }
0075 //---------------------------------------------------------------------------
0076 L1RpcTBMuonsVec RPCTriggerBoard::runTBGB() {  //4 muons or empty vector
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 }