17 const unsigned& sector,
35 if( m_maxBX-m_minBX >= 7 )
edm::LogWarning(
"CSCTFTrackBuilder::ctor")<<
" BX window width >= 7BX. Resetting m_maxBX="<<(m_maxBX=m_minBX+6);
117 for(
int i = 1;
i <= 4; ++
i)
120 for(
int j = 0;
j < 2;
j++)
131 if(initializeFromPSet){
137 LogDebug(
"CSCTFSectorProcessor") <<
"Looking for PT LUT in EventSetup for endcap="<<
m_endcap<<
", sector="<<
m_sector;
150 firmSP_Map.insert(std::pair<int,int>(20100210,20100122));
151 firmSP_Map.insert(std::pair<int,int>(20100617,20100122));
152 firmSP_Map.insert(std::pair<int,int>(20100629,20100122));
154 firmSP_Map.insert(std::pair<int,int>(20100728,20100728));
156 firmSP_Map.insert(std::pair<int,int>(20100901,20100901));
158 firmSP_Map.insert(std::pair<int,int>(20101011,20101011));
166 LogDebug(
"CSCTFSectorProcessor") <<
"Initializing pT LUT from EventSetup";
180 LogDebug(
"CSCTFSectorProcessor") <<
"\n !!! CSCTF EMULATOR CONFIGURATION !!!"
181 <<
"\n\nCORE CONFIGURATION"
182 <<
"\n Coincidence Trigger? " <<
run_core
191 <<
"\n BX Analyzer depth: assemble coinc. track with stubs in +/-" <<
m_bxa_depth <<
" Bxs"
192 <<
"\n Is Wide Phi Extrapolation (DeltaPhi valid up to ~15 degrees, otherwise ~7.67 degrees)? " <<
m_widePhi
198 <<
"\n\nVARIOUS CONFIGURATION PARAMETERS"
202 <<
"\nQualityEnableME1a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME1a
203 <<
"\nQualityEnableME1b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME1b
204 <<
"\nQualityEnableME1c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME1c
205 <<
"\nQualityEnableME1d (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME1d
206 <<
"\nQualityEnableME1e (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME1e
207 <<
"\nQualityEnableME1f (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME1f
208 <<
"\nQualityEnableME2a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME2a
209 <<
"\nQualityEnableME2b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME2b
210 <<
"\nQualityEnableME2c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME2c
211 <<
"\nQualityEnableME3a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME3a
212 <<
"\nQualityEnableME3b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME3b
213 <<
"\nQualityEnableME3c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME3c
214 <<
"\nQualityEnableME4a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME4a
215 <<
"\nQualityEnableME4b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME4b
216 <<
"\nQualityEnableME4c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" <<
QualityEnableME4c
224 <<
"\n\nDAT_ETA REGISTERS"
225 <<
"\nMinimum eta difference for track cancellation logic=" <<
m_mindetap
226 <<
"\nMinimum eta difference for halo track cancellation logic=" <<
m_mindetap_halo
228 <<
"\nMinimum eta for ME1-ME2 collision tracks=" <<
m_etamin[0]
229 <<
"\nMinimum eta for ME1-ME3 collision tracks=" <<
m_etamin[1]
230 <<
"\nMinimum eta for ME2-ME3 collision tracks=" <<
m_etamin[2]
231 <<
"\nMinimum eta for ME2-ME4 collision tracks=" <<
m_etamin[3]
232 <<
"\nMinimum eta for ME3-ME4 collision tracks=" <<
m_etamin[4]
233 <<
"\nMinimum eta for ME1-ME2 collision tracks in overlap region=" <<
m_etamin[5]
234 <<
"\nMinimum eta for ME2-MB1 collision tracks=" <<
m_etamin[6]
235 <<
"\nMinimum eta for ME1-ME4 collision tracks=" <<
m_etamin[7]
237 <<
"\nMinimum eta difference for ME1-ME2 (except ME1/1) halo tracks=" <<
m_mindeta12_accp
238 <<
"\nMinimum eta difference for ME1-ME3 (except ME1/1) halo tracks=" <<
m_mindeta13_accp
242 <<
"\nMaximum eta for ME1-ME2 collision tracks=" <<
m_etamax[0]
243 <<
"\nMaximum eta for ME1-ME3 collision tracks=" <<
m_etamax[1]
244 <<
"\nMaximum eta for ME2-ME3 collision tracks=" <<
m_etamax[2]
245 <<
"\nMaximum eta for ME2-ME4 collision tracks=" <<
m_etamax[3]
246 <<
"\nMaximum eta for ME3-ME4 collision tracks=" <<
m_etamax[4]
247 <<
"\nMaximum eta for ME1-ME2 collision tracks in overlap region=" <<
m_etamax[5]
248 <<
"\nMaximum eta for ME2-MB1 collision tracks=" <<
m_etamax[6]
249 <<
"\nMaximum eta for ME1-ME4 collision tracks=" <<
m_etamax[7]
251 <<
"\nMaximum eta difference for ME1-ME2 (except ME1/1) halo tracks=" <<
m_maxdeta12_accp
252 <<
"\nMaximum eta difference for ME1-ME3 (except ME1/1) halo tracks=" <<
m_maxdeta13_accp
256 <<
"\nEta window for ME1-ME2 collision tracks=" <<
m_etawin[0]
257 <<
"\nEta window for ME1-ME3 collision tracks=" <<
m_etawin[1]
258 <<
"\nEta window for ME2-ME3 collision tracks=" <<
m_etawin[2]
259 <<
"\nEta window for ME2-ME4 collision tracks=" <<
m_etawin[3]
260 <<
"\nEta window for ME3-ME4 collision tracks=" <<
m_etawin[4]
261 <<
"\nEta window for ME1-ME2 collision tracks in overlap region=" <<
m_etawin[5]
262 <<
"\nEta window for ME1-ME4 collision tracks=" <<
m_etawin[6]
264 <<
"\nMaximum phi difference for ME1-ME2 (except ME1/1) halo tracks=" <<
m_maxdphi12_accp
265 <<
"\nMaximum phi difference for ME1-ME3 (except ME1/1) halo tracks=" <<
m_maxdphi13_accp
269 <<
"\nMinimum phi difference for track cancellation logic=" <<
m_mindphip
270 <<
"\nMinimum phi difference for halo track cancellation logic=" <<
m_mindphip_halo
272 <<
"\nParameter for the correction of misaligned 1-2-3-4 straight tracks =" <<
m_straightp
273 <<
"\nParameter for the correction of misaligned 1-2-3-4 curved tracks=" <<
m_curvedp
277 <<
"\nFirmware SP year+month+day:" <<
m_firmSP
278 <<
"\nFirmware FA year+month+day:" <<
m_firmFA
279 <<
"\nFirmware DD year+month+day:" <<
m_firmDD
280 <<
"\nFirmware VM year+month+day:" <<
m_firmVM;
294 core_ -> SetCoreFirmwareVersion (firmVersCore);
295 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\nCore Firmware is set to " <<
core_ -> GetCoreFirmwareVersion();
360 if (
m_firmSP<1)
throw cms::Exception(
"CSCTFSectorProcessor")<<
" firmwareSP parameter left uninitialized!!!\n";
361 if (
m_firmFA<1)
throw cms::Exception(
"CSCTFSectorProcessor")<<
" firmwareFA parameter left uninitialized!!!\n";
362 if (
m_firmDD<1)
throw cms::Exception(
"CSCTFSectorProcessor")<<
" firmwareDD parameter left uninitialized!!!\n";
363 if (m_firmVM<1)
throw cms::Exception(
"CSCTFSectorProcessor")<<
" firmwareVM parameter left uninitialized!!!\n";
369 <<
" firmwareDD (=" <<
m_firmDD <<
"), "
370 <<
" firmwareVM (=" << m_firmVM <<
") are NOT identical: it shoultd NOT happen!";
380 std::vector<unsigned>::const_iterator iter;
382 std::vector<unsigned> etawins = pset.
getParameter<std::vector<unsigned> >(
"EtaWindows");
383 for(iter=etawins.begin(),index=0; iter!=etawins.end()&&index<7; iter++,index++)
m_etawin[index] = *iter;
384 std::vector<unsigned> etamins = pset.
getParameter<std::vector<unsigned> >(
"EtaMin");
385 for(iter=etamins.begin(),index=0; iter!=etamins.end()&&index<8; iter++,index++)
m_etamin[index] = *iter;
386 std::vector<unsigned> etamaxs = pset.
getParameter<std::vector<unsigned> >(
"EtaMax");
387 for(iter=etamaxs.begin(),index=0; iter!=etamaxs.end()&&index<8; iter++,index++)
m_etamax[index] = *iter;
447 for(
int i = 0;
i < 5; ++
i)
464 throw cms::Exception(
"Initialize CSC TF LUTs first (missed call to CSCTFTrackProducer::beginJob?)")<<
"CSCTFSectorProcessor::run";
471 std::vector<csctf::TrackStub> stub_vec = stubs.
get();
476 for(std::vector<csctf::TrackStub>::const_iterator itr=stub_vec.begin(); itr!=stub_vec.end(); itr++)
477 switch( itr->station() ){
480 switch( itr->getMPCLink() ){
484 default:
edm::LogWarning(
"CSCTFSectorProcessor::run()") <<
"No MPC sorting for LCT: link="<<itr->getMPCLink()<<
"\n";
488 switch( itr->getMPCLink() ){
492 default:
edm::LogWarning(
"CSCTFSectorProcessor::run()") <<
"No MPC sorting for LCT: link="<<itr->getMPCLink()<<
"\n";
496 switch( itr->getMPCLink() ){
500 default:
edm::LogWarning(
"CSCTFSectorProcessor::run()") <<
"No MPC sorting for LCT: link="<<itr->getMPCLink()<<
"\n";
511 default:
edm::LogWarning(
"CSCTFSectorProcessor::run()") <<
"No MPC sorting for LCT: link="<<itr->getMPCLink()<<
"\n";
514 default:
edm::LogWarning(
"CSCTFSectorProcessor::run()") <<
"Invalid station # encountered: "<<itr->station()<<
"\n";
527 if(itr->station() != 5)
534 lclPhi =
srLUTs_[
FPGAs[fpga]]->localPhi(itr->getStrip(), itr->getPattern(), itr->getQuality(), itr->getBend());
536 bzero(&lclPhi,
sizeof(lclPhi));
537 edm::LogWarning(
"CSCTFSectorProcessor:run()") <<
"Exception from LocalPhi LUT in " <<
FPGAs[fpga]
538 <<
"(strip="<<itr->getStrip()<<
",pattern="<<itr->getPattern()<<
",quality="<<itr->getQuality()<<
",bend="<<itr->getBend()<<
")" <<std::endl;
543 unsigned csc_id = itr->cscid();
545 gblPhi =
srLUTs_[
FPGAs[fpga]]->globalPhiME(lclPhi.phi_local, itr->getKeyWG(), csc_id);
548 bzero(&gblPhi,
sizeof(gblPhi));
549 edm::LogWarning(
"CSCTFSectorProcessor:run()") <<
"Exception from GlobalPhi LUT in " <<
FPGAs[fpga]
550 <<
"(phi_local="<<lclPhi.phi_local<<
",KeyWG="<<itr->getKeyWG()<<
",csc="<<itr->cscid()<<
")"<<std::endl;
555 gblEta =
srLUTs_[
FPGAs[fpga]]->globalEtaME(lclPhi.phi_bend_local, lclPhi.phi_local, itr->getKeyWG(), itr->cscid());
557 bzero(&gblEta,
sizeof(gblEta));
558 edm::LogWarning(
"CSCTFSectorProcessor:run()") <<
"Exception from GlobalEta LUT in " <<
FPGAs[fpga]
559 <<
"(phi_bend_local="<<lclPhi.phi_bend_local<<
",phi_local="<<lclPhi.phi_local<<
",KeyWG="<<itr->getKeyWG()<<
",csc="<<itr->cscid()<<
")"<<std::endl;
564 gblPhiDT =
srLUTs_[
FPGAs[fpga]]->globalPhiMB(lclPhi.phi_local, itr->getKeyWG(), itr->cscid());
566 bzero(&gblPhiDT,
sizeof(gblPhiDT));
567 edm::LogWarning(
"CSCTFSectorProcessor:run()") <<
"Exception from GlobalPhi DT LUT in " <<
FPGAs[fpga]
568 <<
"(phi_local="<<lclPhi.phi_local<<
",KeyWG="<<itr->getKeyWG()<<
",csc="<<itr->cscid()<<
")"<<std::endl;
571 itr->setEtaPacked(gblEta.global_eta);
573 if(itr->station() == 1 ) {
575 itr->setPhiPacked(gblPhiDT.global_phi);
582 itr->setPhiPacked(gblPhi.global_phi);
584 LogDebug(
"CSCTFSectorProcessor:run()") <<
"LCT found, processed by FPGA: " <<
FPGAs[fpga] << std::endl
585 <<
" LCT now has (eta, phi) of: (" << itr->etaValue() <<
"," << itr->phiValue() <<
")\n";
597 std::vector<csc::L1Track> tftks;
629 std::vector<csc::L1Track>::iterator titr = tftks.begin();
631 for(; titr != tftks.end(); titr++)
633 ptadd thePtAddress(titr->ptLUTAddress());
636 if(thePtAddress.track_fr)
638 titr->setRank(thePtData.front_rank);
639 titr->setChargeValidPacked(thePtData.charge_valid_front);
643 titr->setRank(thePtData.rear_rank);
644 titr->setChargeValidPacked(thePtData.charge_valid_rear);
647 if( ((titr->ptLUTAddress()>>16)&0xf)==15 )
649 int unmodBx = titr->bx();
650 titr->setBx(unmodBx+2);
663 int station = itr->station()-1;
666 int mpc = ( subSector ? subSector-1 : station+1 );
671 int bx = itr->getBX() -
m_minBX;
672 if( bx<0 || bx>=7 )
edm::LogWarning(
"CSCTFTrackBuilder::buildTracks()") <<
" LCT BX is out of ["<<
m_minBX<<
","<<
m_maxBX<<
") range: "<<itr->getBX();
674 if( itr->isValid() ) myStubContainer[bx].push_back(*itr);
686 for(
int bx=0; bx<7; bx++)
687 if( myStubContainer[bx].
get().size() ){
688 bool coreTrackExists =
false;
691 for(std::vector<csc::L1Track>::iterator trk=tracks.begin(); trk<tracks.end(); trk++)
693 || (((trk->ptLUTAddress()>>16)&0xf)==15 && trk->BX()-2 == bx-
shift) ){
694 coreTrackExists =
true;
697 if( coreTrackExists ==
false ){
700 track.
setBx(bx-shift);
703 std::vector<csctf::TrackStub> stubs = myStubContainer[bx].
get();
705 int qualityME=0, qualityMB=0,
ME=100, MB=100, linkME=7;
706 std::vector<csctf::TrackStub>::const_iterator bestStub=stubs.end();
707 for(std::vector<csctf::TrackStub>::const_iterator st_iter=stubs.begin(); st_iter!=stubs.end(); st_iter++){
708 int station = st_iter->station()-1;
710 int mpc = ( subSector ? subSector-1 : station+1 );
712 if( mpc==5 && (st_iter->getQuality()>qualityMB || (st_iter->getQuality()==qualityMB&&subSector<MB)) ){
713 qualityMB = st_iter->getQuality();
715 if(
ME>4) bestStub = st_iter;
718 if( mpc<5 && (st_iter->getQuality()> qualityME
719 || (st_iter->getQuality()==qualityME && mpc<
ME)
720 || (st_iter->getQuality()==qualityME && mpc==
ME && st_iter->getMPCLink()<linkME))) {
721 qualityME = st_iter->getQuality();
723 linkME = st_iter->getMPCLink();
727 unsigned rescaled_phi = 999;
732 rescaled_phi = unsigned(24*(bestStub->phiPacked()&0x7f)/128.);
736 rescaled_phi = unsigned(24*(bestStub->phiPacked()>>5)/128.);
739 unsigned unscaled_phi = bestStub->phiPacked()>>7 ;
742 switch( bestStub->station() ){
743 case 1: track.
setStationIds(bestStub->getMPCLink(),0,0,0,0);
break;
744 case 2: track.
setStationIds(0,bestStub->getMPCLink(),0,0,0);
break;
745 case 3: track.
setStationIds(0,0,bestStub->getMPCLink(),0,0);
break;
746 case 4: track.
setStationIds(0,0,0,bestStub->getMPCLink(),0);
break;
747 case 5: track.
setStationIds(0,0,0,0,bestStub->getMPCLink());
break;
748 default:
edm::LogError(
"CSCTFSectorProcessor::run()") <<
"Illegal LCT link="<<bestStub->station()<<
"\n";
break;
752 track.
setPtLUTAddress( (11<<16) | ((bestStub->etaPacked()<<9)&0xf000) );
755 if( thePtAddress.track_fr ){
756 track.
setRank(thePtData.front_rank);
759 track.
setRank(thePtData.rear_rank);
765 std::vector<csc::L1Track> single_tracks = tracksFromSingles.
get();
776 <<
"******************************* \n"
777 <<
"*** DISCLAIMER *** \n"
778 <<
"******************************* \n"
779 <<
"\n Firmware SP version (year+month+day)=" << firmSP
780 <<
"\n Firmware FA/VM/DD version (year+month+day)=" << firmFA;
781 if (firmSP==20100210)
782 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
" -> KNOWN BUGS IN THE FIRMWARE:\n"
783 <<
"\t * Wrong phi assignment for singles\n"
784 <<
"\t * Wrapper passes to the core only even quality DT stubs\n"
785 <<
"\n -> BUGS ARE GOING TO BE EMULATED BY THE SOFTWARE\n\n";
788 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\t * Correct phi assignment for singles\n";
790 if (firmSP==20100629){
791 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\t * Correct MB quality masking in the wrapper\n";
792 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\t * Core is 20100122\n";
795 if (firmSP==20100728)
796 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\t * Inverted MB clocks\n";
798 if (firmSP==20100901)
799 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\t * Inverted charge bit\n";
801 if (firmSP==20101011)
802 edm::LogInfo(
"CSCTFSectorProcessor" ) <<
"\t * Added CSC-DT assembling tracks ME1-MB2/1\n";
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void setLocalPhi(const unsigned &lphi)
std::vector< T > get() const
ptdat Pt(const ptadd &) const
CSCTriggerContainer< csctf::TrackStub > dt_stubs
void readParameters(const edm::ParameterSet &pset)
std::vector< csctf::TrackStub > stub_vec_filtered
void initialize(const edm::EventSetup &c)
KK.
void push_back(const T data)
void setPtLUTAddress(const unsigned &adr)
void printDisclaimer(int firmSP, int firmFA)
static const std::string FPGAs[5]
void setChargeValidPacked(unsigned valid)
Set Charge Valid.
unsigned int singlesTrackOutput
void push_many(const std::vector< T > data)
void setRank(const unsigned &rank)
void setBx(int bx)
Set Bunch Crossing.
bool run(const unsigned &endcap, const unsigned §or, const unsigned &latency, const unsigned &etamin1, const unsigned &etamin2, const unsigned &etamin3, const unsigned &etamin4, const unsigned &etamin5, const unsigned &etamin6, const unsigned &etamin7, const unsigned &etamin8, const unsigned &etamax1, const unsigned &etamax2, const unsigned &etamax3, const unsigned &etamax4, const unsigned &etamax5, const unsigned &etamax6, const unsigned &etamax7, const unsigned &etamax8, const unsigned &etawin1, const unsigned &etawin2, const unsigned &etawin3, const unsigned &etawin4, const unsigned &etawin5, const unsigned &etawin6, const unsigned &etawin7, const unsigned &mindphip, const unsigned &mindetap, const unsigned &mindeta12_accp, const unsigned &maxdeta12_accp, const unsigned &maxdphi12_accp, const unsigned &mindeta13_accp, const unsigned &maxdeta13_accp, const unsigned &maxdphi13_accp, const unsigned &mindeta112_accp, const unsigned &maxdeta112_accp, const unsigned &maxdphi112_accp, const unsigned &mindeta113_accp, const unsigned &maxdeta113_accp, const unsigned &maxdphi113_accp, const unsigned &mindphip_halo, const unsigned &mindetap_halo, const unsigned &straightp, const unsigned &curvedp, const unsigned &mbaPhiOff, const unsigned &mbbPhiOff, const unsigned &m_extend_length, const unsigned &m_allowALCTonly, const unsigned &m_allowCLCTonly, const unsigned &m_preTrigger, const unsigned &m_widePhi, const int &minBX, const int &maxBX)
unsigned ptLUTAddress() const
CSCTriggerContainer< csc::L1Track > l1_tracks
std::map< std::string, CSCSectorReceiverLUT * > srLUTs_
CSCTFSectorProcessor(const unsigned &endcap, const unsigned §or, const edm::ParameterSet &pset, bool tmb07, const L1MuTriggerScales *scales, const L1MuTriggerPtScale *ptScale)
class global_phi_data gblphidat
void setOutputLink(unsigned oPL)
T const * product() const
class local_phi_data lclphidat
Data Types.
static int triggerSubSectorFromLabels(int station, int chamber)
CSCTriggerContainer< csc::L1Track > tracks() const
void setEtaPacked(unsigned eta)
Set Eta: 6-bit code.
static unsigned int const shift
bool run(const CSCTriggerContainer< csctf::TrackStub > &)
void setStationIds(const unsigned &me1, const unsigned &me2, const unsigned &me3, const unsigned &me4, const unsigned &mb1)
void loadData(const CSCTriggerContainer< csctf::TrackStub > &, const unsigned &endcap, const unsigned §or, const int &minBX, const int &maxBX)
CSCTriggerContainer< csc::L1Track > tracks()
class global_eta_data gbletadat
std::map< int, int > firmSP_Map