#include <L1Trigger/DTTrackFinder/src/L1MuDTAssignmentUnit.h>
Public Member Functions | |
L1MuDTAssignmentUnit (L1MuDTSectorProcessor &sp, int id) | |
constructor | |
void | PhiAU (const edm::EventSetup &c) |
assign phi | |
void | PtAU (const edm::EventSetup &c) |
assign pt and charge | |
void | QuaAU () |
assign quality | |
virtual void | reset () |
reset Assignment Unit | |
virtual void | run (const edm::EventSetup &c) |
run Assignment Unit | |
virtual | ~L1MuDTAssignmentUnit () |
destructor | |
Static Public Member Functions | |
static void | setPrecision () |
set precision of phi and phib | |
Private Member Functions | |
int | getPtAddress (PtAssMethod, int bendcharge=0) const |
calculate bend angle | |
PtAssMethod | getPtMethod () const |
determine pt assignment method | |
const L1MuDTTrackSegPhi * | getTSphi (int station) const |
get track segment from a given station | |
int | phiDiff (int stat1, int stat2) const |
build difference of two phi values | |
void | TSR () |
Track Segment Router. | |
Static Private Member Functions | |
static int | convertSector (int) |
convert sector Id to 8 bit code (= sector center) | |
static int | getCharge (PtAssMethod) |
determine charge | |
Private Attributes | |
L1MuDTAddressArray | m_addArray |
int | m_id |
PtAssMethod | m_ptAssMethod |
L1MuDTSectorProcessor & | m_sp |
std::vector< const L1MuDTTrackSegPhi * > | m_TSphi |
edm::ESHandle< L1MuDTPhiLut > | thePhiLUTs |
phi-assignment look-up tables | |
edm::ESHandle< L1MuDTPtaLut > | thePtaLUTs |
pt-assignment look-up tables | |
Static Private Attributes | |
static unsigned short | nbit_phi = 12 |
# of bits used for pt-assignment | |
static unsigned short | nbit_phib = 10 |
# of bits used for pt-assignment |
assigns pt, charge, phi and quality to a muon candidate found by the Track Assembler
N. Neumeister CERN EP J. Troconiz UAM Madrid
Definition at line 52 of file L1MuDTAssignmentUnit.h.
L1MuDTAssignmentUnit::L1MuDTAssignmentUnit | ( | L1MuDTSectorProcessor & | sp, | |
int | id | |||
) |
constructor
Definition at line 58 of file L1MuDTAssignmentUnit.cc.
References m_TSphi, reset(), and setPrecision().
00058 : 00059 m_sp(sp), m_id(id), 00060 m_addArray(), m_TSphi(), m_ptAssMethod(NODEF) { 00061 00062 m_TSphi.reserve(4); // a track candidate can consist of max 4 TS 00063 reset(); 00064 00065 setPrecision(); 00066 00067 }
L1MuDTAssignmentUnit::~L1MuDTAssignmentUnit | ( | ) | [virtual] |
convert sector Id to 8 bit code (= sector center)
Definition at line 316 of file L1MuDTAssignmentUnit.cc.
Referenced by PhiAU().
00316 { 00317 00318 assert( sector >=0 && sector < 12 ); 00319 const int sectorvalues[12] = { 0, 12, 24, 36, 48, 60, 72, 84, 00320 96, 108, 120, 132 }; 00321 00322 return sectorvalues[sector]; 00323 00324 }
int L1MuDTAssignmentUnit::getCharge | ( | PtAssMethod | method | ) | [static, private] |
determine charge
Definition at line 330 of file L1MuDTAssignmentUnit.cc.
References TestMuL1L2Filter_cff::cerr, lat::endl(), NODEF, PT12H, PT12HO, PT12L, PT12LO, PT13H, PT13HO, PT13L, PT13LO, PT14H, PT14HO, PT14L, PT14LO, PT15HO, PT15LO, PT23H, PT23HO, PT23L, PT23LO, PT24H, PT24HO, PT24L, PT24LO, PT25HO, PT25LO, PT34H, PT34HO, PT34L, and PT34LO.
Referenced by PtAU().
00330 { 00331 00332 int chargesign = 0; 00333 switch ( method ) { 00334 case PT12L : { chargesign = -1; break; } 00335 case PT12H : { chargesign = -1; break; } 00336 case PT13L : { chargesign = -1; break; } 00337 case PT13H : { chargesign = -1; break; } 00338 case PT14L : { chargesign = -1; break; } 00339 case PT14H : { chargesign = -1; break; } 00340 case PT23L : { chargesign = -1; break; } 00341 case PT23H : { chargesign = -1; break; } 00342 case PT24L : { chargesign = -1; break; } 00343 case PT24H : { chargesign = -1; break; } 00344 case PT34L : { chargesign = 1; break; } 00345 case PT34H : { chargesign = 1; break; } 00346 case PT12LO : { chargesign = -1; break; } 00347 case PT12HO : { chargesign = -1; break; } 00348 case PT13LO : { chargesign = -1; break; } 00349 case PT13HO : { chargesign = -1; break; } 00350 case PT14LO : { chargesign = -1; break; } 00351 case PT14HO : { chargesign = -1; break; } 00352 case PT23LO : { chargesign = -1; break; } 00353 case PT23HO : { chargesign = -1; break; } 00354 case PT24LO : { chargesign = -1; break; } 00355 case PT24HO : { chargesign = -1; break; } 00356 case PT34LO : { chargesign = 1; break; } 00357 case PT34HO : { chargesign = 1; break; } 00358 case PT15LO : { chargesign = -1; break; } 00359 case PT15HO : { chargesign = -1; break; } 00360 case PT25LO : { chargesign = -1; break; } 00361 case PT25HO : { chargesign = -1; break; } 00362 case NODEF : { chargesign = 0; 00363 cerr << "AssignmentUnit::getCharge : undefined PtAssMethod!" 00364 << endl; 00365 break; 00366 } 00367 } 00368 00369 return chargesign; 00370 00371 }
int L1MuDTAssignmentUnit::getPtAddress | ( | PtAssMethod | method, | |
int | bendcharge = 0 | |||
) | const [private] |
calculate bend angle
Definition at line 443 of file L1MuDTAssignmentUnit.cc.
References TestMuL1L2Filter_cff::cerr, lat::endl(), NODEF, phiDiff(), PT12H, PT12HO, PT12L, PT12LO, PT13H, PT13HO, PT13L, PT13LO, PT14H, PT14HO, PT14L, PT14LO, PT15HO, PT15LO, PT23H, PT23HO, PT23L, PT23LO, PT24H, PT24HO, PT24L, PT24LO, PT25HO, PT25LO, PT34H, PT34HO, PT34L, and PT34LO.
Referenced by PtAU().
00443 { 00444 00445 // calculate bend angle as difference of two azimuthal positions 00446 00447 int bendangle = 0; 00448 switch (method) { 00449 case PT12L : { bendangle = phiDiff(1,2); break; } 00450 case PT12H : { bendangle = phiDiff(1,2); break; } 00451 case PT13L : { bendangle = phiDiff(1,3); break; } 00452 case PT13H : { bendangle = phiDiff(1,3); break; } 00453 case PT14L : { bendangle = phiDiff(1,4); break; } 00454 case PT14H : { bendangle = phiDiff(1,4); break; } 00455 case PT23L : { bendangle = phiDiff(2,3); break; } 00456 case PT23H : { bendangle = phiDiff(2,3); break; } 00457 case PT24L : { bendangle = phiDiff(2,4); break; } 00458 case PT24H : { bendangle = phiDiff(2,4); break; } 00459 case PT34L : { bendangle = phiDiff(4,3); break; } 00460 case PT34H : { bendangle = phiDiff(4,3); break; } 00461 case PT12LO : { bendangle = phiDiff(1,2); break; } 00462 case PT12HO : { bendangle = phiDiff(1,2); break; } 00463 case PT13LO : { bendangle = phiDiff(1,3); break; } 00464 case PT13HO : { bendangle = phiDiff(1,3); break; } 00465 case PT14LO : { bendangle = phiDiff(1,4); break; } 00466 case PT14HO : { bendangle = phiDiff(1,4); break; } 00467 case PT23LO : { bendangle = phiDiff(2,3); break; } 00468 case PT23HO : { bendangle = phiDiff(2,3); break; } 00469 case PT24LO : { bendangle = phiDiff(2,4); break; } 00470 case PT24HO : { bendangle = phiDiff(2,4); break; } 00471 case PT34LO : { bendangle = phiDiff(4,3); break; } 00472 case PT34HO : { bendangle = phiDiff(4,3); break; } 00473 case PT15LO : { bendangle = phiDiff(1,3); break; } 00474 case PT15HO : { bendangle = phiDiff(1,3); break; } 00475 case PT25LO : { bendangle = phiDiff(2,3); break; } 00476 case PT25HO : { bendangle = phiDiff(2,3); break; } 00477 case NODEF : { bendangle = 0; 00478 cerr << "AssignmentUnit::getPtAddress : undefined PtAssMethod" << endl; 00479 break; 00480 } 00481 } 00482 00483 int signo = 1; 00484 bendangle = (bendangle+8192)%4096; 00485 if ( bendangle > 2047 ) bendangle -= 4096; 00486 if ( bendangle < 0 ) signo = -1; 00487 00488 if (bendcharge) return signo; 00489 00490 bendangle = (bendangle+2048)%1024; 00491 if ( bendangle > 511 ) bendangle -= 1024; 00492 00493 return bendangle; 00494 00495 }
PtAssMethod L1MuDTAssignmentUnit::getPtMethod | ( | ) | const [private] |
determine pt assignment method
Definition at line 377 of file L1MuDTAssignmentUnit.cc.
References funct::abs(), GenMuonPlsPt100GeV_cfg::cout, lat::endl(), getTSphi(), m_addArray, m_id, m_sp, method, NODEF, L1MuDTSectorProcessor::ovl(), L1MuDTTrackSegPhi::phib(), PT12H, PT12HO, PT12L, PT12LO, PT13H, PT13HO, PT13L, PT13LO, PT14H, PT14HO, PT14L, PT14LO, PT15HO, PT15LO, PT23H, PT23HO, PT23L, PT23LO, PT24H, PT24HO, PT24L, PT24LO, PT25HO, PT25LO, PT34H, PT34HO, PT34L, PT34LO, s, L1MuDTAddressArray::station(), L1MuDTSectorProcessor::TA(), thePtaLUTs, dimuonsSequences_cff::threshold, and L1MuDTTrackAssembler::trackBitMap().
Referenced by PtAU().
00377 { 00378 00379 // determine which pt-assignment method should be used as a function 00380 // of the track class and 00381 // of the phib values of the track segments making up this track candidate. 00382 00383 // get bitmap of track candidate 00384 const bitset<4> s = m_sp.TA()->trackBitMap(m_id); 00385 00386 int method = -1; 00387 00388 if ( s.test(0) && s.test(3) ) method = 2; // stations 1 and 4 00389 if ( s.test(0) && s.test(2) ) method = 1; // stations 1 and 3 00390 if ( s.test(0) && s.test(1) ) method = 0; // stations 1 and 2 00391 if ( !s.test(0) && s.test(1) && s.test(3) ) method = 4; // stations 2 and 4 00392 if ( !s.test(0) && s.test(1) && s.test(2) ) method = 3; // stations 2 and 3 00393 if ( !s.test(0) && !s.test(1) && s.test(2) && s.test(3) ) method = 5; // stations 3 and 4 00394 00395 if ( m_sp.ovl() ) { 00396 int adr = m_addArray.station(3); 00397 bool s5 = (adr == 15) ? false : ((adr/2)%2 == 1); 00398 if ( s.test(0) && s.test(3) ) method = 8; // stations 1 and 4 00399 if ( s.test(0) && s.test(2) && s5 ) method = 12; // stations 1 and 5 00400 if ( s.test(0) && s.test(2) && !s5 ) method = 7; // stations 1 and 3 00401 if ( s.test(0) && s.test(1) ) method = 6; // stations 1 and 2 00402 if ( !s.test(0) && s.test(1) && s.test(3) ) method = 10; // stations 2 and 4 00403 if ( !s.test(0) && s.test(1) && s.test(2) && s5 ) method = 13; // stations 2 and 5 00404 if ( !s.test(0) && s.test(1) && s.test(2) && !s5 ) method = 9; // stations 2 and 3 00405 if ( !s.test(0) && !s.test(1) && s.test(2) && s.test(3) ) method = 11; // stations 3 and 4 00406 } 00407 00408 int threshold = thePtaLUTs->getPtLutThreshold(method); 00409 00410 // phib values of track segments from stations 1, 2 and 4 00411 int phib1 = ( getTSphi(1) != 0 ) ? getTSphi(1)->phib() : 0; 00412 int phib2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->phib() : 0; 00413 int phib4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->phib() : 0; 00414 00415 PtAssMethod pam = NODEF; 00416 00417 switch ( method ) { 00418 case 0 : { pam = ( abs(phib1) < threshold ) ? PT12H : PT12L; break; } 00419 case 1 : { pam = ( abs(phib1) < threshold ) ? PT13H : PT13L; break; } 00420 case 2 : { pam = ( abs(phib1) < threshold ) ? PT14H : PT14L; break; } 00421 case 3 : { pam = ( abs(phib2) < threshold ) ? PT23H : PT23L; break; } 00422 case 4 : { pam = ( abs(phib2) < threshold ) ? PT24H : PT24L; break; } 00423 case 5 : { pam = ( abs(phib4) < threshold ) ? PT34H : PT34L; break; } 00424 case 6 : { pam = ( abs(phib1) < threshold ) ? PT12HO : PT12LO; break; } 00425 case 7 : { pam = ( abs(phib1) < threshold ) ? PT13HO : PT13LO; break; } 00426 case 8 : { pam = ( abs(phib1) < threshold ) ? PT14HO : PT14LO; break; } 00427 case 9 : { pam = ( abs(phib2) < threshold ) ? PT23HO : PT23LO; break; } 00428 case 10 : { pam = ( abs(phib2) < threshold ) ? PT24HO : PT24LO; break; } 00429 case 11 : { pam = ( abs(phib4) < threshold ) ? PT34HO : PT34LO; break; } 00430 case 12 : { pam = ( abs(phib4) < threshold ) ? PT15HO : PT15LO; break; } 00431 case 13 : { pam = ( abs(phib4) < threshold ) ? PT25HO : PT25LO; break; } 00432 default : cout << "L1MuDTAssignmentUnit : Error in PT ass method evaluation" << endl; 00433 } 00434 00435 return pam; 00436 00437 }
const L1MuDTTrackSegPhi * L1MuDTAssignmentUnit::getTSphi | ( | int | station | ) | const [private] |
get track segment from a given station
Definition at line 297 of file L1MuDTAssignmentUnit.cc.
Referenced by getPtMethod(), PhiAU(), and phiDiff().
00297 { 00298 00299 vector<const L1MuDTTrackSegPhi*>::const_iterator iter; 00300 for ( iter = m_TSphi.begin(); iter != m_TSphi.end(); iter++ ) { 00301 int stat = (*iter)->station(); 00302 if ( station == stat ) { 00303 return (*iter); 00304 break; 00305 } 00306 } 00307 00308 return 0; 00309 00310 }
void L1MuDTAssignmentUnit::PhiAU | ( | const edm::EventSetup & | c | ) |
assign phi
Definition at line 145 of file L1MuDTAssignmentUnit.cc.
References funct::abs(), convertSector(), first, edm::EventSetup::get(), L1MuDTTFConfig::getNbitsPhiPhi(), L1MuDTTFConfig::getNbitsPhiPhib(), getTSphi(), L1MuDTSectorProcessor::id(), k, m_id, m_sp, phi, L1MuDTTrackSegPhi::phi(), L1MuDTTrackSegPhi::phib(), edm::second(), L1MuDTSecProcId::sector(), L1MuDTTrackSegPhi::sector(), L1MuDTTrack::setPhi(), thePhiLUTs, L1MuDTSectorProcessor::track(), and L1MuDTSectorProcessor::tracK().
Referenced by run().
00145 { 00146 00147 // calculate phi at station 2 using 8 bits (precision = 2.5 degrees) 00148 00149 c.get< L1MuDTPhiLutRcd >().get( thePhiLUTs ); 00150 00151 int sh_phi = 12 - L1MuDTTFConfig::getNbitsPhiPhi(); 00152 int sh_phib = 10 - L1MuDTTFConfig::getNbitsPhiPhib(); 00153 00154 const L1MuDTTrackSegPhi* second = getTSphi(2); // track segment at station 2 00155 const L1MuDTTrackSegPhi* first = getTSphi(1); // track segment at station 1 00156 const L1MuDTTrackSegPhi* forth = getTSphi(4); // track segment at station 4 00157 00158 int phi2 = 0; // phi-value at station 2 00159 int sector = 0; 00160 00161 if ( second ) { 00162 phi2 = second->phi() >> sh_phi; 00163 sector = second->sector(); 00164 } 00165 else if ( second == 0 && first ) { 00166 phi2 = first->phi() >> sh_phi; 00167 sector = first->sector(); 00168 } 00169 else if ( second == 0 && forth ) { 00170 phi2 = forth->phi() >> sh_phi; 00171 sector = forth->sector(); 00172 } 00173 00174 int sector0 = m_sp.id().sector(); 00175 00176 // convert sector difference to values in the range -6 to +5 00177 00178 int sectordiff = (sector - sector0)%12; 00179 if ( sectordiff >= 6 ) sectordiff -= 12; 00180 if ( sectordiff < -6 ) sectordiff += 12; 00181 00182 assert( abs(sectordiff) <= 1 ); 00183 00184 // get sector center in 8 bit coding 00185 int sector_8 = convertSector(sector0); 00186 00187 // convert phi to 2.5 degree precision 00188 int phi_precision = 4096 >> sh_phi; 00189 const double k = 57.2958/2.5/static_cast<float>(phi_precision); 00190 double phi_f = static_cast<double>(phi2); 00191 int phi_8 = static_cast<int>(floor(phi_f*k)); 00192 00193 if ( second == 0 && first ) { 00194 int bend_angle = (first->phib() >> sh_phib) << sh_phib; 00195 phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(0,bend_angle); 00196 } 00197 else if ( second == 0 && forth ) { 00198 int bend_angle = (forth->phib() >> sh_phib) << sh_phib; 00199 phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(1,bend_angle); 00200 } 00201 00202 phi_8 += sectordiff*12; 00203 00204 if (phi_8 > 15) phi_8 = 15; 00205 if (phi_8 < -16) phi_8 = -16; 00206 00207 int phi = (sector_8 + phi_8 + 144)%144; 00208 phi_8 = (phi_8 + 32)%32; 00209 00210 m_sp.track(m_id)->setPhi(phi); 00211 m_sp.tracK(m_id)->setPhi(phi_8); 00212 00213 }
build difference of two phi values
Definition at line 501 of file L1MuDTAssignmentUnit.cc.
References funct::abs(), getTSphi(), nbit_phi, offset, L1MuDTTrackSegPhi::phi(), and L1MuDTTrackSegPhi::sector().
Referenced by getPtAddress().
00501 { 00502 00503 // calculate bit shift 00504 00505 int sh_phi = 12 - nbit_phi; 00506 00507 // get 2 phi values and add offset (30 degrees ) for adjacent sector 00508 int sector1 = getTSphi(stat1)->sector(); 00509 int sector2 = getTSphi(stat2)->sector(); 00510 int phi1 = getTSphi(stat1)->phi() >> sh_phi; 00511 int phi2 = getTSphi(stat2)->phi() >> sh_phi; 00512 00513 // convert sector difference to values in the range -6 to +5 00514 00515 int sectordiff = (sector2 - sector1)%12; 00516 if ( sectordiff >= 6 ) sectordiff -= 12; 00517 if ( sectordiff < -6 ) sectordiff += 12; 00518 00519 assert( abs(sectordiff) <= 1 ); 00520 00521 int offset = (2144 >> sh_phi) * sectordiff; 00522 int bendangle = (phi2 - phi1 + offset) << sh_phi; 00523 00524 return bendangle; 00525 00526 }
void L1MuDTAssignmentUnit::PtAU | ( | const edm::EventSetup & | c | ) |
assign pt and charge
Definition at line 219 of file L1MuDTAssignmentUnit.cc.
References edm::EventSetup::get(), getCharge(), getPtAddress(), getPtMethod(), m_id, m_ptAssMethod, m_sp, L1MuDTTrack::setCharge(), L1MuDTTrack::setPt(), thePtaLUTs, L1MuDTSectorProcessor::track(), and L1MuDTSectorProcessor::tracK().
Referenced by run().
00219 { 00220 00221 c.get< L1MuDTPtaLutRcd >().get( thePtaLUTs ); 00222 00223 // get pt-assignment method as function of track class and TS phib values 00224 m_ptAssMethod = getPtMethod(); 00225 00226 // get input address for look-up table 00227 int bend_angle = getPtAddress(m_ptAssMethod); 00228 int bend_carga = getPtAddress(m_ptAssMethod, 1); 00229 00230 // retrieve pt value from look-up table 00231 int lut_idx = m_ptAssMethod; 00232 int pt = thePtaLUTs->getPt(lut_idx,bend_angle ); 00233 00234 m_sp.track(m_id)->setPt(pt); 00235 m_sp.tracK(m_id)->setPt(pt); 00236 00237 // assign charge 00238 int chsign = getCharge(m_ptAssMethod); 00239 int charge = ( bend_carga >= 0 ) ? chsign : -1 * chsign; 00240 m_sp.track(m_id)->setCharge(charge); 00241 m_sp.tracK(m_id)->setCharge(charge); 00242 00243 }
void L1MuDTAssignmentUnit::QuaAU | ( | ) |
assign quality
Definition at line 249 of file L1MuDTAssignmentUnit.cc.
References m_id, m_sp, L1MuDTTrack::setQuality(), T12, T123, T1234, T124, T13, T134, T14, T23, T234, T24, T34, L1MuDTSectorProcessor::TA(), tc, L1MuDTSectorProcessor::track(), L1MuDTSectorProcessor::tracK(), and L1MuDTTrackAssembler::trackClass().
Referenced by run().
00249 { 00250 00251 unsigned int quality = 0; 00252 00253 const TrackClass tc = m_sp.TA()->trackClass(m_id); 00254 00255 switch ( tc ) { 00256 case T1234 : { quality = 7; break; } 00257 case T123 : { quality = 6; break; } 00258 case T124 : { quality = 6; break; } 00259 case T134 : { quality = 5; break; } 00260 case T234 : { quality = 4; break; } 00261 case T12 : { quality = 3; break; } 00262 case T13 : { quality = 3; break; } 00263 case T14 : { quality = 3; break; } 00264 case T23 : { quality = 2; break; } 00265 case T24 : { quality = 2; break; } 00266 case T34 : { quality = 1; break; } 00267 default : { quality = 0; break; } 00268 } 00269 00270 m_sp.track(m_id)->setQuality(quality); 00271 m_sp.tracK(m_id)->setQuality(quality); 00272 00273 }
reset Assignment Unit
Implements L1AbstractProcessor.
Definition at line 133 of file L1MuDTAssignmentUnit.cc.
References m_addArray, m_ptAssMethod, m_TSphi, NODEF, and L1MuDTAddressArray::reset().
Referenced by L1MuDTAssignmentUnit().
00133 { 00134 00135 m_addArray.reset(); 00136 m_TSphi.clear(); 00137 m_ptAssMethod = NODEF; 00138 00139 }
void L1MuDTAssignmentUnit::run | ( | const edm::EventSetup & | c | ) | [virtual] |
run Assignment Unit
Reimplemented from L1AbstractProcessor.
Definition at line 84 of file L1MuDTAssignmentUnit.cc.
References funct::abs(), L1MuDTTrackAssembler::address(), L1MuDTTrack::disable(), L1MuDTTrack::enable(), iter, m_addArray, m_id, m_sp, m_TSphi, PhiAU(), PtAU(), QuaAU(), L1MuDTTrack::setAddresses(), L1MuRegionalCand::setBx(), L1MuDTTrack::setTC(), L1MuDTTrack::setTSphi(), L1MuDTSectorProcessor::TA(), tc, L1MuDTSectorProcessor::track(), L1MuDTSectorProcessor::tracK(), L1MuDTTrackAssembler::trackClass(), TSR(), and muonGeometry::wheel.
00084 { 00085 00086 // enable track candidate 00087 m_sp.track(m_id)->enable(); 00088 m_sp.tracK(m_id)->enable(); 00089 00090 // set track class 00091 TrackClass tc = m_sp.TA()->trackClass(m_id); 00092 m_sp.track(m_id)->setTC(tc); 00093 m_sp.tracK(m_id)->setTC(tc); 00094 00095 // get relative addresses of matching track segments 00096 m_addArray = m_sp.TA()->address(m_id); 00097 m_sp.track(m_id)->setAddresses(m_addArray); 00098 m_sp.tracK(m_id)->setAddresses(m_addArray); 00099 00100 // get track segments (track segment router) 00101 TSR(); 00102 m_sp.track(m_id)->setTSphi(m_TSphi); 00103 m_sp.tracK(m_id)->setTSphi(m_TSphi); 00104 00105 // set bunch-crossing (use first track segment) 00106 vector<const L1MuDTTrackSegPhi*>::const_iterator iter = m_TSphi.begin(); 00107 int bx = (*iter)->bx(); 00108 m_sp.track(m_id)->setBx(bx); 00109 m_sp.tracK(m_id)->setBx(bx); 00110 00111 // assign phi 00112 PhiAU(c); 00113 00114 // assign pt and charge 00115 PtAU(c); 00116 00117 // assign quality 00118 QuaAU(); 00119 00120 // special hack for overlap region 00121 for ( iter = m_TSphi.begin(); iter != m_TSphi.end(); iter++ ) { 00122 int wheel = abs((*iter)->wheel()); 00123 if ( wheel == 3 && (*iter)->etaFlag() ) m_sp.track(m_id)->disable(); 00124 if ( wheel == 3 && (*iter)->etaFlag() ) m_sp.tracK(m_id)->disable(); 00125 } 00126 00127 }
void L1MuDTAssignmentUnit::setPrecision | ( | ) | [static] |
set precision of phi and phib
Definition at line 533 of file L1MuDTAssignmentUnit.cc.
References L1MuDTTFConfig::getNbitsPtaPhi(), L1MuDTTFConfig::getNbitsPtaPhib(), nbit_phi, and nbit_phib.
Referenced by L1MuDTAssignmentUnit().
00533 { 00534 00535 nbit_phi = L1MuDTTFConfig::getNbitsPtaPhi(); 00536 nbit_phib = L1MuDTTFConfig::getNbitsPtaPhib(); 00537 00538 }
void L1MuDTAssignmentUnit::TSR | ( | ) | [private] |
Track Segment Router.
Definition at line 279 of file L1MuDTAssignmentUnit.cc.
References L1MuDTSectorProcessor::data(), L1MuDTDataBuffer::getTSphi(), m_addArray, m_sp, m_TSphi, and L1MuDTAddressArray::station().
Referenced by run().
00279 { 00280 00281 // get the track segments from the data buffer 00282 const L1MuDTTrackSegPhi* ts = 0; 00283 for ( int stat = 1; stat <= 4; stat++ ) { 00284 int adr = m_addArray.station(stat); 00285 if ( adr != 15 ) { 00286 ts = m_sp.data()->getTSphi(stat,adr); 00287 if ( ts != 0 ) m_TSphi.push_back( ts ); 00288 } 00289 } 00290 00291 }
Definition at line 108 of file L1MuDTAssignmentUnit.h.
Referenced by getPtMethod(), reset(), run(), and TSR().
int L1MuDTAssignmentUnit::m_id [private] |
Definition at line 106 of file L1MuDTAssignmentUnit.h.
Referenced by getPtMethod(), PhiAU(), PtAU(), QuaAU(), and run().
L1MuDTSectorProcessor& L1MuDTAssignmentUnit::m_sp [private] |
Definition at line 105 of file L1MuDTAssignmentUnit.h.
Referenced by getPtMethod(), PhiAU(), PtAU(), QuaAU(), run(), and TSR().
std::vector<const L1MuDTTrackSegPhi*> L1MuDTAssignmentUnit::m_TSphi [private] |
Definition at line 109 of file L1MuDTAssignmentUnit.h.
Referenced by getTSphi(), L1MuDTAssignmentUnit(), reset(), run(), and TSR().
unsigned short int L1MuDTAssignmentUnit::nbit_phi = 12 [static, private] |
# of bits used for pt-assignment
Definition at line 114 of file L1MuDTAssignmentUnit.h.
Referenced by phiDiff(), and setPrecision().
unsigned short int L1MuDTAssignmentUnit::nbit_phib = 10 [static, private] |
# of bits used for pt-assignment
Definition at line 115 of file L1MuDTAssignmentUnit.h.
Referenced by setPrecision().
edm::ESHandle< L1MuDTPhiLut > L1MuDTAssignmentUnit::thePhiLUTs [private] |
phi-assignment look-up tables
Definition at line 112 of file L1MuDTAssignmentUnit.h.
Referenced by PhiAU().
edm::ESHandle< L1MuDTPtaLut > L1MuDTAssignmentUnit::thePtaLUTs [private] |
pt-assignment look-up tables
Definition at line 113 of file L1MuDTAssignmentUnit.h.
Referenced by getPtMethod(), and PtAU().