CMS 3D CMS Logo

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

#include <L1MuBMExtrapolationUnit.h>

Inheritance diagram for L1MuBMExtrapolationUnit:
L1AbstractProcessor

Public Types

typedef std::pair< Extrapolation, unsigned int > SEUId
 
typedef std::map< SEUId, L1MuBMSEU *, std::less< SEUId > > SEUmap
 

Public Member Functions

unsigned short int getAddress (Extrapolation ext, unsigned int startAdr, int id) const
 get extrapolation address from a given ERS More...
 
const std::bitset< 12 > & getEXTable (Extrapolation ext, unsigned int startAdr) const
 get Extrapolator table for a given SEU More...
 
const std::bitset< 12 > & getQSTable (Extrapolation ext, unsigned int startAdr) const
 get Quality Sorter table for a given SEU More...
 
unsigned short int getQuality (Extrapolation ext, unsigned int startAdr, int id) const
 get extrapolation quality from a given ERS More...
 
 L1MuBMExtrapolationUnit (const L1MuBMSectorProcessor &)
 constructor More...
 
int numberOfExt () const
 return number of successful extrapolations More...
 
void print (int level=0) const
 print all successful extrapolations More...
 
void reset () override
 reset Extrapolation Unit More...
 
void reset (Extrapolation ext, unsigned int startAdr, unsigned int relAdr)
 reset a single extrapolation More...
 
void run (const edm::EventSetup &c) override
 run Extrapolation Unit More...
 
 ~L1MuBMExtrapolationUnit () override
 destructor More...
 
- Public Member Functions inherited from L1AbstractProcessor
virtual void run ()
 run processor logic More...
 
virtual void run ()
 run processor logic More...
 
virtual ~L1AbstractProcessor ()
 destructor More...
 
virtual ~L1AbstractProcessor ()
 destructor More...
 

Static Public Member Functions

static std::pair< int, int > which_ext (Extrapolation ext)
 return station of start and target track segment for a given extrapolation More...
 

Private Attributes

edm::ESHandle< L1TMuonBarrelParamsbmtfParamsHandle
 
SEUmap m_SEUs
 
const L1MuBMSectorProcessorm_sp
 
L1MuDTTFParameters pars
 

Detailed Description

Extrapolation Unit:

The Extrapolation Unit attempts to join track segment pairs of different stations. it contains 12 Single Extrapolation Units to perform all extrapolations in its own wheel and 6 Single Extrapolation Units to perform all extrapolations in the adjacent wheel (next wheel neighbour)

N. Neumeister CERN EP

Definition at line 54 of file L1MuBMExtrapolationUnit.h.

Member Typedef Documentation

typedef std::pair<Extrapolation, unsigned int> L1MuBMExtrapolationUnit::SEUId

Definition at line 58 of file L1MuBMExtrapolationUnit.h.

typedef std::map<SEUId, L1MuBMSEU*, std::less<SEUId> > L1MuBMExtrapolationUnit::SEUmap

Definition at line 59 of file L1MuBMExtrapolationUnit.h.

Constructor & Destructor Documentation

L1MuBMExtrapolationUnit::L1MuBMExtrapolationUnit ( const L1MuBMSectorProcessor sp)

constructor

Definition at line 55 of file L1MuBMExtrapolationUnit.cc.

References gather_cfg::cout, L1MuBMTFConfig::Debug(), EX12, EX13, EX14, EX21, EX23, EX24, EX34, hcalTTPDigis_cfi::id, m_SEUs, and MAX_EXT.

55  :
56  m_sp(sp), m_SEUs() {
57 
58  for ( int ext_idx = 0; ext_idx < MAX_EXT; ext_idx++ ) {
59 
60  Extrapolation ext = static_cast<Extrapolation>(ext_idx);
61 
62  if ( ext == EX12 || ext == EX13 || ext == EX14 ||
63  ext == EX21 || ext == EX23 || ext == EX24 || ext == EX34 ) {
64 
65  unsigned int maxaddr = 4;
66 
67  if ( ext == EX12 || ext == EX13 || ext == EX14 ) maxaddr = 2;
68 
69  for ( unsigned int startAddress = 0; startAddress < maxaddr; startAddress++ ) {
70  SEUId id = make_pair(ext, startAddress);
71  m_SEUs[id] = new L1MuBMSEU(sp,ext,startAddress);
72  if ( L1MuBMTFConfig::Debug(6) ) cout << " creating SEU " << ext << " " << startAddress << endl;
73  }
74  }
75  }
76 
77 }
const int MAX_EXT
const L1MuBMSectorProcessor & m_sp
Extrapolation
std::pair< Extrapolation, unsigned int > SEUId
static bool Debug()
Definition: memstream.h:15
L1MuBMExtrapolationUnit::~L1MuBMExtrapolationUnit ( )
override

destructor

Definition at line 84 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

84  {
85 
86  for ( SEUmap::iterator iter = m_SEUs.begin(); iter != m_SEUs.end(); iter++ ) {
87  delete (*iter).second;
88  (*iter).second = nullptr;
89  }
90  m_SEUs.clear();
91 
92 }

Member Function Documentation

unsigned short int L1MuBMExtrapolationUnit::getAddress ( Extrapolation  ext,
unsigned int  startAdr,
int  id 
) const

get extrapolation address from a given ERS

Definition at line 193 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

193  {
194 
195  // get extrapolation address from ERS
196  // startAdr = 0, 1 : own wheel
197  // startAdr = 2, 3 : next wheel neighbour
198 
199  // assert( startAdr >= 0 && startAdr <= 3 );
200  // assert( id == 0 || id == 1 );
201 
202  unsigned short int address = 15;
203 
204  SEUId seuid = make_pair(ext, startAdr);
205  SEUmap::const_iterator iter = m_SEUs.find(seuid);
206  if ( iter != m_SEUs.end() ) address = ((*iter).second)->ers()->address(id);
207 
208  return address;
209 
210 }
std::pair< Extrapolation, unsigned int > SEUId
Definition: memstream.h:15
const bitset< 12 > & L1MuBMExtrapolationUnit::getEXTable ( Extrapolation  ext,
unsigned int  startAdr 
) const

get Extrapolator table for a given SEU

Definition at line 239 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

Referenced by run().

239  {
240 
241  // startAdr = 0, 1 : own wheel
242  // startAdr = 2, 3 : next wheel neighbour
243 
244  // assert( startAdr >= 0 && startAdr <= 3 );
245 
246  SEUId seuid = make_pair(ext, startAdr);
247  return m_SEUs[seuid]->exTable();
248 
249 }
std::pair< Extrapolation, unsigned int > SEUId
Definition: memstream.h:15
const bitset< 12 > & L1MuBMExtrapolationUnit::getQSTable ( Extrapolation  ext,
unsigned int  startAdr 
) const

get Quality Sorter table for a given SEU

Definition at line 255 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

Referenced by L1MuBMTrackAssembler::run().

255  {
256 
257  // startAdr = 0, 1 : own wheel
258  // startAdr = 2, 3 : next wheel neighbour
259 
260  // assert( startAdr >= 0 && startAdr <= 3 );
261 
262  SEUId seuid = make_pair(ext, startAdr);
263  return m_SEUs[seuid]->qsTable();
264 
265 }
std::pair< Extrapolation, unsigned int > SEUId
Definition: memstream.h:15
unsigned short int L1MuBMExtrapolationUnit::getQuality ( Extrapolation  ext,
unsigned int  startAdr,
int  id 
) const

get extrapolation quality from a given ERS

Definition at line 216 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs, and btvTracks_cfi::quality.

216  {
217 
218  // get extrapolation quality from ERS
219  // startAdr = 0, 1 : own wheel
220  // startAdr = 2, 3 : next wheel neighbour
221 
222  // assert( startAdr >= 0 && startAdr <= 3 );
223  // assert( id == 0 || id == 1 );
224 
225  unsigned short int quality = 0;
226 
227  SEUId seuid = make_pair(ext, startAdr);
228  SEUmap::const_iterator iter = m_SEUs.find(seuid);
229  if ( iter != m_SEUs.end() ) quality = ((*iter).second)->ers()->quality(id);
230 
231  return quality;
232 
233 }
std::pair< Extrapolation, unsigned int > SEUId
Definition: memstream.h:15
int L1MuBMExtrapolationUnit::numberOfExt ( ) const

return number of successful extrapolations

Definition at line 271 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

Referenced by L1MuBMSectorProcessor::run().

271  {
272 
273  int number = 0;
274  SEUmap::const_iterator iter;
275  for ( iter = m_SEUs.begin(); iter != m_SEUs.end(); iter++ ) {
276  number += ((*iter).second)->numberOfExt();
277  }
278 
279  return number;
280 
281 }
int numberOfExt() const
return number of successful extrapolations
void L1MuBMExtrapolationUnit::print ( int  level = 0) const

print all successful extrapolations

Definition at line 287 of file L1MuBMExtrapolationUnit.cc.

References gather_cfg::cout, L1MuBMSectorProcessor::id(), m_SEUs, and m_sp.

Referenced by L1MuBMSectorProcessor::run().

287  {
288 
289  SEUmap::const_iterator iter_seu;
290 
291  if ( level == 0 ) {
292  for ( iter_seu = m_SEUs.begin(); iter_seu != m_SEUs.end(); iter_seu++ ) {
293  vector<L1MuBMEUX*> vec_eux = ((*iter_seu).second)->eux();
294  vector<L1MuBMEUX*>::const_iterator iter_eux;
295  for ( iter_eux = vec_eux.begin();
296  iter_eux != vec_eux.end(); iter_eux++ ) {
297  if ( (*iter_eux)->result() ) {
298  cout << ((*iter_seu).second)->ext() << " "
299  << ((*iter_seu).second)->tsId() << " "
300  << (*iter_eux)->id() << endl;
301  cout << "start : " << *(*iter_eux)->ts().first << endl;
302  cout << "target : " << *(*iter_eux)->ts().second << endl;
303  cout << "result : " << "quality = " << (*iter_eux)->quality() << '\t'
304  << "address = " << (*iter_eux)->address() << endl;
305  }
306  }
307  }
308  }
309 
310  //
311  // print all results from Extrapolator and Quality Sorter
312  //
313  if ( level == 1 ) {
314  cout << "Results from Extrapolator and Quality Sorter of " << m_sp.id()
315  << " : \n" << endl;
316 
317  cout << " EXT QSU " << endl;
318  cout << " S E U 11 11 " << endl;
319  cout << " 109876543210 109876543210 " << endl;
320  cout << "-------------------------------------" << endl;
321  for ( iter_seu = m_SEUs.begin(); iter_seu != m_SEUs.end(); iter_seu++ ) {
322 
323  cout << ((*iter_seu).second)->ext() << "_ "
324  << ((*iter_seu).second)->tsId() << ": "
325  << ((*iter_seu).second)->exTable() << " "
326  << ((*iter_seu).second)->qsTable() << endl;
327 
328  }
329 
330  cout << endl;
331  }
332 
333 }
const L1MuBMSectorProcessor & m_sp
const L1MuBMSecProcId & id() const
return Sector Processor identifier
Definition: memstream.h:15
void L1MuBMExtrapolationUnit::reset ( void  )
overridevirtual

reset Extrapolation Unit

Implements L1AbstractProcessor.

Definition at line 165 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

Referenced by L1MuBMSectorProcessor::reset(), and run().

165  {
166 
167  SEUmap::const_iterator iter;
168  for ( iter = m_SEUs.begin(); iter != m_SEUs.end(); iter++ ) {
169  ((*iter).second)->reset();
170  }
171 
172 }
void reset() override
reset Extrapolation Unit
void L1MuBMExtrapolationUnit::reset ( Extrapolation  ext,
unsigned int  startAdr,
unsigned int  relAdr 
)

reset a single extrapolation

Definition at line 178 of file L1MuBMExtrapolationUnit.cc.

References m_SEUs.

178  {
179 
180  // assert( startAdr >= 0 && startAdr <= 3 );
181  // assert( relAdr >= 0 && relAdr <= 12 );
182 
183  SEUId seuid = make_pair(ext, startAdr);
184  SEUmap::const_iterator iter = m_SEUs.find(seuid);
185  if ( iter != m_SEUs.end() ) ((*iter).second)->reset(relAdr);
186 
187 }
std::pair< Extrapolation, unsigned int > SEUId
Definition: memstream.h:15
void L1MuBMExtrapolationUnit::run ( const edm::EventSetup c)
overridevirtual

run Extrapolation Unit

Reimplemented from L1AbstractProcessor.

Definition at line 102 of file L1MuBMExtrapolationUnit.cc.

References bmtfParamsHandle, gather_cfg::cout, L1MuBMSectorProcessor::data(), L1MuBMTFConfig::Debug(), L1MuBMTrackSegPhi::empty(), EX12, EX21, L1MuBMSEU::ext(), edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), L1MuDTTFParameters::get_soc_run_21(), getEXTable(), L1MuBMDataBuffer::getTSphi(), L1MuBMTFConfig::getUseEX21(), L1MuBMSectorProcessor::id(), L1TMuonBarrelParams::l1mudttfparams, svgfig::load(), m_SEUs, m_sp, pars, edm::ESHandle< T >::product(), reset(), L1AbstractProcessor::run(), L1MuBMSecProcId::sector(), L1MuBMSEU::tsId(), L1MuBMSecProcId::wheel(), and which_ext().

Referenced by L1MuBMSectorProcessor::run().

102  {
103 
104  //c.get< L1MuDTTFParametersRcd >().get( pars );
105  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
106  bmtfParamsRcd.get(bmtfParamsHandle);
107  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
108  pars = bmtfParams.l1mudttfparams;
109 
110  SEUmap::const_iterator iter;
111  for ( iter = m_SEUs.begin(); iter != m_SEUs.end(); iter++ ) {
112 
113  pair<int,int> ext_pair = which_ext(((*iter).second)->ext());
114  int start = ext_pair.first;
115 
116  const L1MuBMTrackSegPhi* ts = nullptr;
117 
118  //get start track segment
119  ts = m_sp.data()->getTSphi(start, ((*iter).second)->tsId() );
120 
121  if ( ts != nullptr && !ts->empty() ) {
122  ((*iter).second)->load(ts);
123  ((*iter).second)->run(c);
124  }
125 
126  }
127 
128  //
129  // use EX21 to cross-check EX12
130  //
131  bool run_21 = pars.get_soc_run_21(m_sp.id().wheel(), m_sp.id().sector());
132  if ( L1MuBMTFConfig::getUseEX21() || run_21 ) {
133 
134  // search for EX12 + EX21 single extrapolation units
135  for ( unsigned int startAdr = 0; startAdr < 2; startAdr++ ) {
136 
137  bitset<12> extab12 = this->getEXTable( EX12, startAdr );
138  bitset<12> extab21 = this->getEXTable( EX21, startAdr );
139 
140  for ( int eux = 0; eux < 12; eux++ ) {
141  if ( extab12.test(eux) && !extab21.test(eux) ) {
142  reset(EX12,startAdr,eux);
143  if ( L1MuBMTFConfig::Debug(6) ) {
144  SEUId seuid = make_pair(EX12, startAdr);
145  L1MuBMSEU* SEU12 = m_SEUs[seuid];
146  cout << " EX12 - EX21 mismatch : "
147  << " EX12 : " << extab12 << " , "
148  << " EX21 : " << extab21 << endl
149  << " Cancel: " << SEU12->ext()
150  << " start addr = " << SEU12->tsId()
151  << " target addr = " << eux << endl;
152  }
153  }
154  }
155 
156  }
157  }
158 
159 }
Extrapolation ext() const
return extrapolation type
Definition: L1MuBMSEU.h:80
Definition: start.py:1
static std::pair< int, int > which_ext(Extrapolation ext)
return station of start and target track segment for a given extrapolation
L1MuDTTFParameters l1mudttfparams
static bool getUseEX21()
int sector() const
return sector number
void reset() override
reset Extrapolation Unit
virtual void run()
run processor logic
void get(HolderT &iHolder) const
const L1MuBMSectorProcessor & m_sp
unsigned int tsId() const
return start track segment identifier (relative address)
Definition: L1MuBMSEU.h:83
const L1MuBMSecProcId & id() const
return Sector Processor identifier
std::pair< Extrapolation, unsigned int > SEUId
def load(fileName)
Definition: svgfig.py:546
const T & get() const
Definition: EventSetup.h:55
static bool Debug()
bool get_soc_run_21(int wh, int sc) const
const TSPhivector & getTSphi() const
get all track segments from the buffer
const L1MuBMDataBuffer * data() const
return pointer to Data Buffer
const std::bitset< 12 > & getEXTable(Extrapolation ext, unsigned int startAdr) const
get Extrapolator table for a given SEU
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
T const * product() const
Definition: ESHandle.h:86
bool empty() const
is it an empty phi track segment?
int wheel() const
return wheel number
pair< int, int > L1MuBMExtrapolationUnit::which_ext ( Extrapolation  ext)
static

return station of start and target track segment for a given extrapolation

Definition at line 341 of file L1MuBMExtrapolationUnit.cc.

References EX12, EX13, EX14, EX15, EX21, EX23, EX24, EX25, EX34, source, and edmPickEvents::target.

Referenced by L1MuBMSEU::run(), and run().

341  {
342 
343  int source = 0;
344  int target = 0;
345 
346  // assert( ext >= 0 && ext < MAX_EXT );
347 
348  switch ( ext ) {
349  case EX12 : { source = 1; target = 2; break; }
350  case EX13 : { source = 1; target = 3; break; }
351  case EX14 : { source = 1; target = 4; break; }
352  case EX21 : { source = 1; target = 2; break; }
353  case EX23 : { source = 2; target = 3; break; }
354  case EX24 : { source = 2; target = 4; break; }
355  case EX34 : { source = 3; target = 4; break; }
356  case EX15 : { source = 1; target = 3; break; }
357  case EX25 : { source = 2; target = 3; break; }
358  default : { source = 1; target = 2; break; }
359  }
360 
361  return pair<int,int>(source,target);
362 
363 }
Definition: memstream.h:15
static std::string const source
Definition: EdmProvDump.cc:43

Member Data Documentation

edm::ESHandle< L1TMuonBarrelParams > L1MuBMExtrapolationUnit::bmtfParamsHandle
private

Definition at line 104 of file L1MuBMExtrapolationUnit.h.

Referenced by run().

SEUmap L1MuBMExtrapolationUnit::m_SEUs
mutableprivate
const L1MuBMSectorProcessor& L1MuBMExtrapolationUnit::m_sp
private

Definition at line 99 of file L1MuBMExtrapolationUnit.h.

Referenced by print(), and run().

L1MuDTTFParameters L1MuBMExtrapolationUnit::pars
private

Definition at line 105 of file L1MuBMExtrapolationUnit.h.

Referenced by run().