#include <L1Trigger/CSCTrackFinder/src/CSCTFDTReceiver.h>
Public Member Functions | |
CSCTFDTReceiver () | |
CSCTriggerContainer < csctf::TrackStub > | process (const L1MuDTChambPhContainer *) |
~CSCTFDTReceiver () | |
Private Attributes | |
CSCTriggerContainer < csctf::TrackStub > | dtstubs |
Definition at line 12 of file CSCTFDTReceiver.h.
CSCTFDTReceiver::CSCTFDTReceiver | ( | ) | [inline] |
Definition at line 16 of file CSCTFDTReceiver.h.
References CSCTriggerContainer< T >::clear(), and dtstubs.
CSCTFDTReceiver::~CSCTFDTReceiver | ( | ) | [inline] |
CSCTriggerContainer< csctf::TrackStub > CSCTFDTReceiver::process | ( | const L1MuDTChambPhContainer * | dttrig | ) |
shift all by one and take mod 8, since DT quality of 7 is a null stub
Definition at line 10 of file CSCTFDTReceiver.cc.
References L1MuDTChambPhContainer::chPhiSegm1(), L1MuDTChambPhContainer::chPhiSegm2(), CSCTriggerContainer< T >::clear(), L1MuDTChambPhDigi::code(), dtstubs, e, L1MuDTTFConfig::getBxMax(), L1MuDTTFConfig::getBxMin(), CSCBitWidths::kGlobalPhiDataBitWidth, CSCDetId::maxEndcapId(), CSCTriggerNumbering::maxTriggerSectorId(), CSCDetId::minEndcapId(), CSCTriggerNumbering::minTriggerSectorId(), phi, L1MuDTChambPhDigi::phi(), L1MuDTChambPhDigi::phiB(), CSCTriggerContainer< T >::push_back(), DTConfigTraco::RESOLPSI, DTConfigTraco::RESOLPSIR, s, tmp, and muonGeometry::wheel.
Referenced by CSCTFTrackBuilder::buildTracks().
00011 { 00012 dtstubs.clear(); 00013 if( !dttrig ) return dtstubs; 00014 00015 const int dt_minBX = L1MuDTTFConfig::getBxMin(); 00016 const int dt_maxBX = L1MuDTTFConfig::getBxMax(); 00017 const int dt_toffs = 0;// changed since DT tpg now centers around zero //abs(dt_maxBX - dt_minBX); 00018 00019 // consider all BX 00020 for(int bx = dt_minBX + dt_toffs; bx <= dt_maxBX + dt_toffs; ++bx) 00021 for(int e = CSCDetId::minEndcapId(); e <= CSCDetId::maxEndcapId(); ++e) 00022 for(int s = CSCTriggerNumbering::minTriggerSectorId(); s <= CSCTriggerNumbering::maxTriggerSectorId(); ++s) 00023 { 00024 int wheel = (e == 1) ? 2 : -2; 00025 int sector = 2*s - 1; 00026 int csc_bx = bx + 6; 00027 00028 // combine two 30 degree DT sectors into a 60 degree CSC 00029 // sector. 00030 for(int is = sector; is <= sector+1; ++is) 00031 { 00032 int iss = (is == 12) ? 0 : is; 00033 L1MuDTChambPhDigi* dtts[2]; 00034 00035 for(int stub = 0; stub < 2; ++stub) 00036 { 00037 dtts[stub] = (stub == 0) ? dttrig->chPhiSegm1(wheel,1,iss,bx) : 00038 dttrig->chPhiSegm2(wheel,1,iss,bx); 00039 if(dtts[stub]) 00040 { 00041 // Convert stubs to CSC format (signed -> unsigned) 00042 // phi was 12 bits (signed) for pi radians = 57.3 deg 00043 // relative to center of 30 degree DT sector 00044 double tmp = static_cast<const double> (dtts[stub]->phi()) / 00045 DTConfigTraco::RESOLPSIR * 180./M_PI + 15.; 00046 00047 int phi = static_cast<int> (tmp/60. * (1<<(CSCBitWidths::kGlobalPhiDataBitWidth))); 00048 if (is>sector) phi = phi + (1<<(CSCBitWidths::kGlobalPhiDataBitWidth - 1)); 00049 00050 // DT chambers may lie outside CSC sector boundary 00051 // Eventually we need to extend CSC phi definition 00052 phi = (phi>0) ? phi : 0; 00053 phi = (phi<(1<<(CSCBitWidths::kGlobalPhiDataBitWidth))) ? phi : 00054 (1<<(CSCBitWidths::kGlobalPhiDataBitWidth))-1; 00055 00056 // account for slope in DT/CSC comparison 00057 phi = static_cast<int>(phi*(1.-40./4096.)) + 25; 00058 phi = (phi>0) ? phi : 0; 00059 phi = (phi<(1<<(CSCBitWidths::kGlobalPhiDataBitWidth))) ? phi : 00060 (1<<(CSCBitWidths::kGlobalPhiDataBitWidth))-1; 00061 00062 // change phib from 10 bits to 6 00063 int phib = (dtts[stub]->phiB() + DTConfigTraco::RESOLPSI) / 16; 00064 int qual = dtts[stub]->code(); 00065 // barrel allows quality=0! 00067 qual = (qual + 1)%8; 00068 00069 CSCCorrelatedLCTDigi dtinfo(stub+1,1, qual, 0, 0, 0, phib, csc_bx, (stub+1) + 2*((is+1)%2)); 00070 DTChamberId dtid(wheel,1,is); 00071 csctf::TrackStub tsCSC(dtinfo,dtid, phi, 0); 00072 00073 dtstubs.push_back(tsCSC); 00074 } 00075 } 00076 } 00077 } 00078 00079 return dtstubs; 00080 }