00001 #include <L1Trigger/CSCTrackFinder/src/CSCTFDTReceiver.h>
00002 #include <L1Trigger/DTTrackFinder/src/L1MuDTTFConfig.h>
00003 #include <L1TriggerConfig/DTTPGConfig/interface/DTConfigTraco.h>
00004 #include <DataFormats/MuonDetId/interface/CSCDetId.h>
00005 #include <DataFormats/MuonDetId/interface/CSCTriggerNumbering.h>
00006 #include <DataFormats/L1CSCTrackFinder/interface/CSCBitWidths.h>
00007 #include <L1Trigger/CSCCommonTrigger/interface/CSCConstants.h>
00008 #include <DataFormats/MuonDetId/interface/DTChamberId.h>
00009
00010 CSCTriggerContainer<csctf::TrackStub> CSCTFDTReceiver::process(const L1MuDTChambPhContainer* dttrig)
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;
00018
00019
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
00029
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
00042
00043
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
00051
00052 phi = (phi>0) ? phi : 0;
00053 phi = (phi<(1<<(CSCBitWidths::kGlobalPhiDataBitWidth))) ? phi :
00054 (1<<(CSCBitWidths::kGlobalPhiDataBitWidth))-1;
00055
00056
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
00063 int phib = (dtts[stub]->phiB() + DTConfigTraco::RESOLPSI) / 16;
00064 int qual = dtts[stub]->code();
00065
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 }
00081