CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
RPCPacManager< TPacType > Class Template Reference

#include <RPCPacManager.h>

Public Member Functions

TPacType * getPac (int m_tower, int logSector, int logSegment) const
 
TPacType * getPac (const RPCConst::l1RpcConeCrdnts &coneCrdnts) const
 
void init (std::string patFilesDirectory, L1RpcPACsCntEnum _PACsCnt)
 
void init (const L1RPCConfig *rpcconf)
 
 ~RPCPacManager ()
 

Private Member Functions

void destroy ()
 

Private Attributes

L1RpcPACsCntEnum m_PACsCnt
 
std::vector< std::vector< std::vector< TPacType * > > > m_PacTab
 m_PacTab[m_tower][logSector][m_LogSegment] More...
 
int m_SectorsCnt
 Count of used differnt sectors. More...
 
int m_SegmentCnt
 Count of used differnt segments. More...
 

Detailed Description

template<class TPacType>
class RPCPacManager< TPacType >

The singleton object of thise class stores all PACs of L1RPC trigger. The tempalte type TPacTypeshould be derived from RPCPacBase, and containe the constructor: RPCPacData(std::string patFilesDir, int m_tower, int logSector, int logSegment). 3 configuration are suported: ONE_PAC_PER_TOWER - the same m_PAC (set of patterns etc.) for every LogCone in a m_tower _12_PACS_PER_TOWER - the same m_PAC in the same segment in every sector, (i.e. 12 PACs in sector (one for LogicCone (segment)), all sectors are treat as one) _144_PACS_PER_TOWER - one m_PAC for every LogicCone of given m_tower

Author
Karol Bunkowski (Warsaw)

Definition at line 41 of file RPCPacManager.h.

Constructor & Destructor Documentation

◆ ~RPCPacManager()

template<class TPacType>
RPCPacManager< TPacType >::~RPCPacManager ( )
inline

Definition at line 43 of file RPCPacManager.h.

43  {
44  for (unsigned int m_tower = 0; m_tower < m_PacTab.size(); m_tower++)
45  for (unsigned int logSector = 0; logSector < m_PacTab[m_tower].size(); logSector++) {
46  for (unsigned int logSegment = 0; logSegment < m_PacTab[m_tower][logSector].size(); logSegment++) {
47  TPacType* pac = m_PacTab[m_tower][logSector][logSegment];
48  delete pac;
49  }
50  }
51  }
std::vector< std::vector< std::vector< TPacType * > > > m_PacTab
m_PacTab[m_tower][logSector][m_LogSegment]

Member Function Documentation

◆ destroy()

template<class TPacType>
void RPCPacManager< TPacType >::destroy ( )
inlineprivate

Definition at line 194 of file RPCPacManager.h.

Referenced by RPCPacManager< RPCPacData >::init().

194  {
195  for (size_t tower = 0; tower < m_PacTab.size(); ++tower) {
196  for (size_t logSector = 0; logSector < m_PacTab.at(tower).size(); logSector++) {
197  for (size_t logSegment = 0; logSegment < m_PacTab.at(tower).at(logSector).size(); logSegment++) {
198  TPacType* pac = m_PacTab.at(tower).at(logSector).at(logSegment);
199  delete pac;
200  }
201  }
202  }
203  m_PacTab.clear();
204  }
std::vector< std::vector< std::vector< TPacType * > > > m_PacTab
m_PacTab[m_tower][logSector][m_LogSegment]

◆ getPac() [1/2]

template<class TPacType>
TPacType* RPCPacManager< TPacType >::getPac ( int  m_tower,
int  logSector,
int  logSegment 
) const
inline

Returns the pointer to m_PAC for given LogCone defined by m_tower, logSector, logSegment. Here you do not have to care, what configuration is curent used.

Parameters
m_tower-16 : 16,
logSector0 : 11,
logSegment0 : 11.

Definition at line 161 of file RPCPacManager.h.

Referenced by RPCBasicTrigConfig::getPac(), and RPCPacManager< RPCPacData >::getPac().

161  {
162  if (m_PacTab.size() <= (unsigned int)abs(m_tower))
163  throw RPCException("RPCPacManager::getPac: given towerNum to big");
164  // edm::LogError("RPCTrigger") << "RPCPacManager::getPac: given towerNum to big" << std::endl;
165 
166  //int curLogSector = logSector;
167  //int curlogSegment = logSegment;
168 
169  if (m_PACsCnt == ONE_PAC_PER_TOWER) {
170  logSector = 0;
171  logSegment = 0;
172  } else if (m_PACsCnt == _12_PACS_PER_TOWER) {
173  logSector = 0;
174  }
175 
176  //XXXX//m_PacTab[abs(m_tower)][logSector][logSegment]->setCurrentPosition(m_tower, curLogSector, curlogSegment);
177  return m_PacTab[std::abs(m_tower)][logSector][logSegment];
178  };
L1RpcPACsCntEnum m_PACsCnt
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< std::vector< std::vector< TPacType * > > > m_PacTab
m_PacTab[m_tower][logSector][m_LogSegment]

◆ getPac() [2/2]

template<class TPacType>
TPacType* RPCPacManager< TPacType >::getPac ( const RPCConst::l1RpcConeCrdnts coneCrdnts) const
inline

Definition at line 181 of file RPCPacManager.h.

181  {
182  return getPac(coneCrdnts.m_Tower, coneCrdnts.m_LogSector, coneCrdnts.m_LogSegment);
183  }
TPacType * getPac(int m_tower, int logSector, int logSegment) const

◆ init() [1/2]

template<class TPacType>
void RPCPacManager< TPacType >::init ( std::string  patFilesDirectory,
L1RpcPACsCntEnum  _PACsCnt 
)
inline

Gets data for PACs.

Parameters
patFilesDirectoryThe directory where files defining PACs are stored. The files should be named acording to special convencion.
_PACsCntThe configuration version. Should be caled once, before using PACs

Definition at line 58 of file RPCPacManager.h.

Referenced by RPCTrigger::produce().

58  {
59  destroy();
60  m_PACsCnt = _PACsCnt;
62  m_SectorsCnt = 1;
63  m_SegmentCnt = 1;
64  } else if (m_PACsCnt == _12_PACS_PER_TOWER) {
65  m_SectorsCnt = 1;
66  m_SegmentCnt = 12;
67  } else if (m_PACsCnt == _144_PACS_PER_TOWER) {
68  m_SectorsCnt = 12;
69  m_SegmentCnt = 12;
70  } else if (m_PACsCnt == TB_TESTS) {
71  m_SectorsCnt = 1;
72  m_SegmentCnt = 4;
73  }
74 
75  for (int m_tower = 0; m_tower < RPCConst::m_TOWER_COUNT; m_tower++) {
76  m_PacTab.push_back(std::vector<std::vector<TPacType*> >());
77  for (int logSector = 0; logSector < m_SectorsCnt; logSector++) {
78  m_PacTab[m_tower].push_back(std::vector<TPacType*>());
79  for (int logSegment = 0; logSegment < m_SegmentCnt; logSegment++) {
80  TPacType* pac = new TPacType(patFilesDirectory, m_tower, logSector, logSegment);
81  m_PacTab[m_tower][logSector].push_back(pac);
82  }
83  }
84  }
85  };
int m_SegmentCnt
Count of used differnt segments.
L1RpcPACsCntEnum m_PACsCnt
static const int m_TOWER_COUNT
Only half of the detector.
Definition: RPCConst.h:40
std::vector< std::vector< std::vector< TPacType * > > > m_PacTab
m_PacTab[m_tower][logSector][m_LogSegment]
int m_SectorsCnt
Count of used differnt sectors.

◆ init() [2/2]

template<class TPacType>
void RPCPacManager< TPacType >::init ( const L1RPCConfig rpcconf)
inline

Definition at line 87 of file RPCPacManager.h.

87  {
88  destroy();
89  switch (rpcconf->getPPT()) {
90  case 1:
92  break;
93  case 12:
95  break;
96  case 144:
98  break;
99  }
100 
101  if (m_PACsCnt == ONE_PAC_PER_TOWER) {
102  m_SectorsCnt = 1;
103  m_SegmentCnt = 1;
104  } else if (m_PACsCnt == _12_PACS_PER_TOWER) {
105  m_SectorsCnt = 1;
106  m_SegmentCnt = 12;
107  } else if (m_PACsCnt == _144_PACS_PER_TOWER) {
108  m_SectorsCnt = 12;
109  m_SegmentCnt = 12;
110  } else if (m_PACsCnt == TB_TESTS) {
111  m_SectorsCnt = 1;
112  m_SegmentCnt = 4;
113  }
114 
115  /*
116  std::vector<std::vector<std::vector<RPCPattern::RPCPatVec> > > patvec;
117  std::vector<std::vector<std::vector<RPCPattern::TQualityVec> > > qualvec;
118  for (int tower = 0; tower < RPCConst::m_TOWER_COUNT; ++tower) {
119  patvec.push_back(std::vector< std::vector< RPCPattern::RPCPatVec > >());
120  qualvec.push_back(std::vector< std::vector< RPCPattern::TQualityVec > >());
121  for (int logSector = 0; logSector < m_SectorsCnt; ++logSector) {
122  patvec[tower].push_back(std::vector< RPCPattern::RPCPatVec >());
123  qualvec[tower].push_back(std::vector< RPCPattern::TQualityVec >());
124  for (int logSegment = 0; logSegment < m_SegmentCnt; ++logSegment) {
125  patvec[tower][logSector].push_back(RPCPattern::RPCPatVec());
126  qualvec[tower][logSector].push_back(RPCPattern::TQualityVec());
127  }
128  }
129  }
130 
131  for (unsigned int ipat=0; ipat<rpcconf->m_pats.size(); ipat++)
132  patvec[rpcconf->m_pats[ipat].getTower()][rpcconf->m_pats[ipat].getLogSector()][rpcconf->m_pats[ipat].getLogSegment()].push_back(rpcconf->m_pats[ipat]);
133  for (unsigned int iqual=0; iqual<rpcconf->m_quals.size(); iqual++)
134  qualvec[rpcconf->m_quals[iqual].m_tower][rpcconf->m_quals[iqual].m_logsector][rpcconf->m_quals[iqual].m_logsegment].push_back(rpcconf->m_quals[iqual]);
135  */
136 
137  for (int tower = 0; tower < RPCConst::m_TOWER_COUNT; tower++) {
138  m_PacTab.push_back(std::vector<std::vector<TPacType*> >());
139  for (int logSector = 0; logSector < m_SectorsCnt; logSector++) {
140  m_PacTab[tower].push_back(std::vector<TPacType*>());
141  for (int logSegment = 0; logSegment < m_SegmentCnt; logSegment++) {
142  /*L1RPCConfig* rpcconf1=new L1RPCConfig();
143  rpcconf1->setPPT(rpcconf->getPPT());
144  for (unsigned int ipat=0; ipat<patvec[tower][logSector][logSegment].size(); ipat++)
145  rpcconf1->m_pats.push_back(patvec[tower][logSector][logSegment][ipat]);
146  for (unsigned int iqual=0; iqual<qualvec[tower][logSector][logSegment].size(); iqual++)
147  rpcconf1->m_quals.push_back(qualvec[tower][logSector][logSegment][iqual]);
148  //TPacType* pac = new TPacType(rpcconf1->m_pats,rpcconf1->m_quals);*/
149  TPacType* pac = new TPacType(rpcconf, tower, logSector, logSegment);
150  m_PacTab[tower][logSector].push_back(pac);
151  }
152  }
153  }
154  };
int m_SegmentCnt
Count of used differnt segments.
L1RpcPACsCntEnum m_PACsCnt
static const int m_TOWER_COUNT
Only half of the detector.
Definition: RPCConst.h:40
std::vector< std::vector< std::vector< TPacType * > > > m_PacTab
m_PacTab[m_tower][logSector][m_LogSegment]
int m_SectorsCnt
Count of used differnt sectors.

Member Data Documentation

◆ m_PACsCnt

template<class TPacType>
L1RpcPACsCntEnum RPCPacManager< TPacType >::m_PACsCnt
private

◆ m_PacTab

template<class TPacType>
std::vector<std::vector<std::vector<TPacType*> > > RPCPacManager< TPacType >::m_PacTab
private

◆ m_SectorsCnt

template<class TPacType>
int RPCPacManager< TPacType >::m_SectorsCnt
private

Count of used differnt sectors.

Definition at line 188 of file RPCPacManager.h.

Referenced by RPCPacManager< RPCPacData >::init().

◆ m_SegmentCnt

template<class TPacType>
int RPCPacManager< TPacType >::m_SegmentCnt
private

Count of used differnt segments.

Definition at line 190 of file RPCPacManager.h.

Referenced by RPCPacManager< RPCPacData >::init().