CMS 3D CMS Logo

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

#include <L1MuDTExtrapolationUnit.h>

Inheritance diagram for L1MuDTExtrapolationUnit:
L1AbstractProcessor

Public Types

typedef std::pair< Extrapolation, unsigned int > SEUId
 
typedef std::map< SEUId, L1MuDTSEU *, 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...
 
 L1MuDTExtrapolationUnit (const L1MuDTSectorProcessor &)
 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...
 
 ~L1MuDTExtrapolationUnit () 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

SEUmap m_SEUs
 
const L1MuDTSectorProcessorm_sp
 
edm::ESHandle< L1MuDTTFParameterspars
 

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 52 of file L1MuDTExtrapolationUnit.h.

Member Typedef Documentation

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

Definition at line 56 of file L1MuDTExtrapolationUnit.h.

typedef std::map<SEUId, L1MuDTSEU*, std::less<SEUId> > L1MuDTExtrapolationUnit::SEUmap

Definition at line 57 of file L1MuDTExtrapolationUnit.h.

Constructor & Destructor Documentation

L1MuDTExtrapolationUnit::L1MuDTExtrapolationUnit ( const L1MuDTSectorProcessor sp)

constructor

Definition at line 55 of file L1MuDTExtrapolationUnit.cc.

References gather_cfg::cout, L1MuDTTFConfig::Debug(), EX12, EX13, EX14, EX21, EX23, EX24, EX34, triggerObjects_cff::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 L1MuDTSEU(sp,ext,startAddress);
72  if ( L1MuDTTFConfig::Debug(6) ) cout << " creating SEU " << ext << " " << startAddress << endl;
73  }
74  }
75  }
76 
77 }
std::pair< Extrapolation, unsigned int > SEUId
const L1MuDTSectorProcessor & m_sp
const int MAX_EXT
static bool Debug()
Extrapolation
Definition: memstream.h:15
L1MuDTExtrapolationUnit::~L1MuDTExtrapolationUnit ( )
override

destructor

Definition at line 84 of file L1MuDTExtrapolationUnit.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 L1MuDTExtrapolationUnit::getAddress ( Extrapolation  ext,
unsigned int  startAdr,
int  id 
) const

get extrapolation address from a given ERS

Definition at line 189 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs.

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

get Extrapolator table for a given SEU

Definition at line 235 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs.

Referenced by run().

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

get Quality Sorter table for a given SEU

Definition at line 251 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs.

Referenced by L1MuDTTrackAssembler::run().

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

get extrapolation quality from a given ERS

Definition at line 212 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs, and jets_cff::quality.

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

return number of successful extrapolations

Definition at line 267 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs.

Referenced by L1MuDTSectorProcessor::run().

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

print all successful extrapolations

Definition at line 283 of file L1MuDTExtrapolationUnit.cc.

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

Referenced by L1MuDTSectorProcessor::run().

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

reset Extrapolation Unit

Implements L1AbstractProcessor.

Definition at line 161 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs.

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

161  {
162 
163  SEUmap::const_iterator iter;
164  for ( iter = m_SEUs.begin(); iter != m_SEUs.end(); iter++ ) {
165  ((*iter).second)->reset();
166  }
167 
168 }
void reset() override
reset Extrapolation Unit
void L1MuDTExtrapolationUnit::reset ( Extrapolation  ext,
unsigned int  startAdr,
unsigned int  relAdr 
)

reset a single extrapolation

Definition at line 174 of file L1MuDTExtrapolationUnit.cc.

References m_SEUs.

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

run Extrapolation Unit

Reimplemented from L1AbstractProcessor.

Definition at line 102 of file L1MuDTExtrapolationUnit.cc.

References L1MuDTTrackFinder::config(), gather_cfg::cout, L1MuDTSectorProcessor::data(), L1MuDTTFConfig::Debug(), L1MuDTTrackSegPhi::empty(), EX12, EX21, L1MuDTSEU::ext(), edm::EventSetup::get(), L1MuDTTFParameters::get_soc_run_21(), getEXTable(), L1MuDTDataBuffer::getTSphi(), L1MuDTTFConfig::getUseEX21(), L1MuDTSectorProcessor::id(), svgfig::load(), m_SEUs, m_sp, pars, reset(), L1AbstractProcessor::run(), L1MuDTSecProcId::sector(), L1MuDTSectorProcessor::tf(), L1MuDTSEU::tsId(), L1MuDTSecProcId::wheel(), and which_ext().

Referenced by L1MuDTSectorProcessor::run().

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

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

Definition at line 337 of file L1MuDTExtrapolationUnit.cc.

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

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

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

Member Data Documentation

SEUmap L1MuDTExtrapolationUnit::m_SEUs
mutableprivate
const L1MuDTSectorProcessor& L1MuDTExtrapolationUnit::m_sp
private

Definition at line 97 of file L1MuDTExtrapolationUnit.h.

Referenced by print(), and run().

edm::ESHandle< L1MuDTTFParameters > L1MuDTExtrapolationUnit::pars
private

Definition at line 101 of file L1MuDTExtrapolationUnit.h.

Referenced by run().