File indexing completed on 2024-04-06 12:10:54
0001 #include "EventFilter/L1TRawToDigi/interface/OmtfDtPacker.h"
0002
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include "EventFilter/L1TRawToDigi/interface/OmtfDtDataWord64.h"
0005
0006 namespace omtf {
0007
0008 void DtPacker::pack(const L1MuDTChambPhContainer* phCont, const L1MuDTChambThContainer* thCont, FedAmcRawsMap& raws) {
0009 const L1MuDTChambPhContainer& dtphDigisBMTF = *phCont;
0010 const L1MuDTChambThContainer& dtthDigisBMTF = *thCont;
0011 for (const auto& chDigi : *dtphDigisBMTF.getContainer()) {
0012 if (std::abs(chDigi.whNum()) != 2)
0013 continue;
0014 if (chDigi.stNum() == 4)
0015 continue;
0016 DtDataWord64 data;
0017 data.st_phi_ = chDigi.phi();
0018 data.st_phib_ = chDigi.phiB();
0019 data.st_q_ = chDigi.code();
0020 int bxNumber = chDigi.bxNum();
0021 data.bxNum_ = (3 + bxNumber);
0022 data.st_ = chDigi.stNum() - 1;
0023 data.valid_ = 1;
0024 int bxCnt = (chDigi.BxCnt() >= 0 && chDigi.BxCnt() <= 3) ? chDigi.BxCnt() : 0;
0025 data.bcnt_st_ = bxCnt;
0026 data.bcnt_e0_ = bxCnt;
0027 data.bcnt_e1_ = bxCnt;
0028 data.fiber_ = chDigi.Ts2Tag();
0029 unsigned int amc;
0030 unsigned int amc2 = 0;
0031 unsigned int fed = (chDigi.whNum() == -2) ? 1380 : 1381;
0032 if (chDigi.scNum() % 2 != 0) {
0033 amc = chDigi.scNum();
0034 data.sector_ = 1;
0035 } else {
0036 amc = chDigi.scNum() + 1;
0037 data.sector_ = 0;
0038 amc2 = (chDigi.scNum() + 11) % 12;
0039 }
0040 LogTrace("") << " fed: " << fed << " amc: " << amc << " DT PH DATA: " << data << std::endl;
0041 raws[std::make_pair(fed, amc)].push_back(data.rawData);
0042 if (amc2 != 0) {
0043 data.sector_ = 2;
0044 LogTrace("") << " fed: " << fed << " amc: " << amc2 << " DT PH DATA: " << data << std::endl;
0045 raws[std::make_pair(fed, amc2)].push_back(data.rawData);
0046 }
0047 }
0048
0049
0050
0051
0052 for (const auto& chDigi : *dtthDigisBMTF.getContainer()) {
0053 if (std::abs(chDigi.whNum()) != 2)
0054 continue;
0055 if (chDigi.stNum() == 4)
0056 continue;
0057 DtDataWord64 data;
0058 int bxNumber = chDigi.bxNum();
0059 data.bxNum_ = (3 + bxNumber);
0060 data.st_ = chDigi.stNum() - 1;
0061 data.valid_ = 1;
0062 unsigned int amc;
0063 unsigned int amc2 = 0;
0064 unsigned int fed = (chDigi.whNum() == -2) ? 1380 : 1381;
0065 if (chDigi.scNum() % 2 != 0) {
0066 amc = chDigi.scNum();
0067 data.sector_ = 1;
0068 } else {
0069 amc = chDigi.scNum() + 1;
0070 data.sector_ = 0;
0071 amc2 = (chDigi.scNum() + 11) % 12;
0072 }
0073 unsigned int eta = 0;
0074 unsigned int etaQ = 0;
0075 for (unsigned int ipos = 0; ipos < 7; ipos++) {
0076 if (chDigi.position(ipos) > 1)
0077 edm::LogError("OmtfDtPacker") << "DT TH position to ETA, PROBLEM !!!!";
0078 if (chDigi.position(ipos) == 1)
0079 eta |= (1 << ipos);
0080 if (chDigi.quality(ipos) == 1)
0081 etaQ |= (1 << ipos);
0082 }
0083 data.eta_qbit_ = etaQ;
0084 data.eta_hit_ = eta;
0085 bool foundDigi = false;
0086 for (auto& raw : raws) {
0087 if (raw.first.first != fed)
0088 continue;
0089 unsigned int amcPh = raw.first.second;
0090 if (amc != amcPh && amc2 != amcPh)
0091 continue;
0092 auto& words = raw.second;
0093 for (auto& word : words) {
0094 if (DataWord64::dt != DataWord64::type(word))
0095 continue;
0096 DtDataWord64 dataRaw(word);
0097 if (dataRaw.bxNum_ != data.bxNum_)
0098 continue;
0099 if (dataRaw.st_ != data.st_)
0100 continue;
0101 if ((amcPh == amc && dataRaw.sector_ == data.sector_) || (amcPh == amc2 && 2 == dataRaw.sector_)) {
0102 foundDigi = true;
0103 dataRaw.eta_qbit_ = data.eta_qbit_;
0104 dataRaw.eta_hit_ = data.eta_hit_;
0105 word = dataRaw.rawData;
0106 LogTrace("") << "AP fed: " << fed << " amc: " << amc << " DT TH DATA: " << dataRaw << std::endl;
0107 }
0108 }
0109 }
0110 if (!foundDigi) {
0111 LogTrace("") << "NFD fed: " << fed << " amc: " << amc << " DT TH DATA: " << data << std::endl;
0112 raws[std::make_pair(fed, amc)].push_back(data.rawData);
0113 if (amc2 != 0) {
0114 data.sector_ = 2;
0115 LogTrace("") << "NFD fed: " << fed << " amc2: " << amc2 << " DT TH DATA: " << data << std::endl;
0116 raws[std::make_pair(fed, amc2)].push_back(data.rawData);
0117 }
0118 }
0119 }
0120 }
0121
0122 }