File indexing completed on 2025-03-08 03:04:14
0001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0002 #include "Geometry/MTDCommonData/interface/BTLElectronicsMapping.h"
0003 #include "FWCore/Utilities/interface/Exception.h"
0004 #include <Geometry/MTDCommonData/interface/MTDTopologyMode.h>
0005
0006 #include <ostream>
0007 #include <algorithm>
0008 #include <vector>
0009 BTLElectronicsMapping::BTLElectronicsMapping(const BTLDetId::CrysLayout lay) {
0010 if (static_cast<int>(lay) < 7) {
0011 throw cms::Exception("BTLElectronicsMapping")
0012 << "MTD Topology mode with layout " << static_cast<int>(lay) << " is not supported\n"
0013 << "use layout : 7 (v4) or later!" << std::endl;
0014 }
0015 }
0016
0017
0018
0019 int BTLElectronicsMapping::SiPMCh(uint32_t smodCopy, uint32_t crystal, uint32_t SiPMSide) {
0020 if (0 > int(crystal) || crystal > BTLDetId::kCrystalsPerModuleV2) {
0021 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::BTLElectronicsMapping(): "
0022 << "****************** Bad crystal number = " << int(crystal);
0023 return 0;
0024 }
0025
0026 if (0 > int(smodCopy) || smodCopy > BTLDetId::kSModulesPerDM) {
0027 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0028 << "****************** Bad detector module copy = " << int(smodCopy);
0029 return 0;
0030 }
0031
0032 if (smodCopy == 0)
0033 return BTLElectronicsMapping::SiPMChannelMapFW[crystal + SiPMSide * BTLDetId::kCrystalsPerModuleV2];
0034 else
0035 return BTLElectronicsMapping::SiPMChannelMapBW[crystal + SiPMSide * BTLDetId::kCrystalsPerModuleV2];
0036 }
0037
0038 int BTLElectronicsMapping::SiPMCh(BTLDetId det, uint32_t SiPMSide) {
0039 uint32_t smodCopy = det.smodule();
0040 uint32_t crystal = det.crystal();
0041
0042 return BTLElectronicsMapping::SiPMCh(smodCopy, crystal, SiPMSide);
0043 }
0044
0045 int BTLElectronicsMapping::SiPMCh(uint32_t rawId, uint32_t SiPMSide) {
0046 BTLDetId theId(rawId);
0047 return BTLElectronicsMapping::SiPMCh(theId, SiPMSide);
0048 }
0049
0050 BTLElectronicsMapping::SiPMChPair BTLElectronicsMapping::GetSiPMChPair(uint32_t smodCopy, uint32_t crystal) {
0051 BTLElectronicsMapping::SiPMChPair SiPMChs;
0052 SiPMChs.Minus = BTLElectronicsMapping::SiPMCh(smodCopy, crystal, 0);
0053 SiPMChs.Plus = BTLElectronicsMapping::SiPMCh(smodCopy, crystal, 1);
0054 return SiPMChs;
0055 }
0056
0057 BTLElectronicsMapping::SiPMChPair BTLElectronicsMapping::GetSiPMChPair(BTLDetId det) {
0058 BTLElectronicsMapping::SiPMChPair SiPMChs;
0059 SiPMChs.Minus = BTLElectronicsMapping::SiPMCh(det, 0);
0060 SiPMChs.Plus = BTLElectronicsMapping::SiPMCh(det, 1);
0061 return SiPMChs;
0062 }
0063 BTLElectronicsMapping::SiPMChPair BTLElectronicsMapping::GetSiPMChPair(uint32_t rawID) {
0064 BTLElectronicsMapping::SiPMChPair SiPMChs;
0065 SiPMChs.Minus = BTLElectronicsMapping::SiPMCh(rawID, 0);
0066 SiPMChs.Plus = BTLElectronicsMapping::SiPMCh(rawID, 1);
0067 return SiPMChs;
0068 }
0069
0070
0071
0072 int BTLElectronicsMapping::TOFHIRCh(uint32_t smodCopy, uint32_t crystal, uint32_t SiPMSide) {
0073 int SiPMCh_ = BTLElectronicsMapping::SiPMCh(smodCopy, crystal, SiPMSide);
0074 return BTLElectronicsMapping::THChannelMap[SiPMCh_];
0075 }
0076
0077 int BTLElectronicsMapping::TOFHIRCh(BTLDetId det, uint32_t SiPMSide) {
0078 uint32_t smodCopy = det.smodule();
0079 uint32_t crystal = det.crystal();
0080
0081 return BTLElectronicsMapping::TOFHIRCh(smodCopy, crystal, SiPMSide);
0082 }
0083
0084 int BTLElectronicsMapping::TOFHIRCh(uint32_t rawId, uint32_t SiPMSide) {
0085 BTLDetId theId(rawId);
0086 return BTLElectronicsMapping::TOFHIRCh(theId, SiPMSide);
0087 }
0088
0089 BTLElectronicsMapping::TOFHIRChPair BTLElectronicsMapping::GetTOFHIRChPair(uint32_t smodCopy, uint32_t crystal) {
0090 BTLElectronicsMapping::TOFHIRChPair TOFHIRChs;
0091 TOFHIRChs.Minus = BTLElectronicsMapping::TOFHIRCh(smodCopy, crystal, 0);
0092 TOFHIRChs.Plus = BTLElectronicsMapping::TOFHIRCh(smodCopy, crystal, 1);
0093 return TOFHIRChs;
0094 }
0095
0096 BTLElectronicsMapping::TOFHIRChPair BTLElectronicsMapping::GetTOFHIRChPair(BTLDetId det) {
0097 BTLElectronicsMapping::TOFHIRChPair TOFHIRChs;
0098 TOFHIRChs.Minus = BTLElectronicsMapping::TOFHIRCh(det, 0);
0099 TOFHIRChs.Plus = BTLElectronicsMapping::TOFHIRCh(det, 1);
0100 return TOFHIRChs;
0101 }
0102 BTLElectronicsMapping::TOFHIRChPair BTLElectronicsMapping::GetTOFHIRChPair(uint32_t rawID) {
0103 BTLElectronicsMapping::TOFHIRChPair TOFHIRChs;
0104 TOFHIRChs.Minus = BTLElectronicsMapping::TOFHIRCh(rawID, 0);
0105 TOFHIRChs.Plus = BTLElectronicsMapping::TOFHIRCh(rawID, 1);
0106 return TOFHIRChs;
0107 }
0108
0109
0110
0111 int BTLElectronicsMapping::THChToXtal(uint32_t smodCopy, uint32_t THCh) {
0112 if (0 > int(smodCopy) || BTLDetId::kSModulesPerDM < smodCopy) {
0113 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0114 << "****************** Bad detector module copy = " << int(smodCopy);
0115 return 0;
0116 }
0117
0118 auto THChPos =
0119 std::find(BTLElectronicsMapping::THChannelMap.begin(), BTLElectronicsMapping::THChannelMap.end(), THCh);
0120 int targetSiPMCh = std::distance(BTLElectronicsMapping::THChannelMap.begin(), THChPos);
0121
0122 std::array<uint32_t, BTLDetId::kCrystalsPerModuleV2 * 2> SiPMChMap;
0123 if (smodCopy == 0)
0124 SiPMChMap = BTLElectronicsMapping::SiPMChannelMapFW;
0125 else
0126 SiPMChMap = BTLElectronicsMapping::SiPMChannelMapBW;
0127
0128 auto targetpos = std::find(SiPMChMap.begin(), SiPMChMap.end(), targetSiPMCh);
0129 return std::distance(SiPMChMap.begin(), targetpos) % BTLDetId::kCrystalsPerModuleV2 + 1;
0130 }
0131
0132 BTLDetId BTLElectronicsMapping::THChToBTLDetId(
0133 uint32_t zside, uint32_t rod, uint32_t runit, uint32_t dmodule, uint32_t smodCopy, uint32_t THCh) {
0134 if (0 > int(THCh) || 31 < THCh) {
0135 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0136 << "****************** Bad TOFHIR channel = " << int(THCh);
0137 return 0;
0138 }
0139
0140 if (0 > int(smodCopy) || BTLDetId::kSModulesPerDM < smodCopy) {
0141 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0142 << "****************** Bad detector module copy = " << int(smodCopy);
0143 return 0;
0144 }
0145
0146 if (0 > int(dmodule) || 12 < dmodule) {
0147 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0148 << "****************** Bad module copy = " << int(dmodule);
0149 return 0;
0150 }
0151
0152 if (1 > rod || 36 < rod) {
0153 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0154 << "****************** Bad rod copy = " << rod;
0155 return 0;
0156 }
0157
0158 if (1 < zside) {
0159 edm::LogWarning("MTDGeom") << "BTLNumberingScheme::getUnitID(): "
0160 << "****************** Bad side = " << zside;
0161 return 0;
0162 }
0163
0164 int crystal = BTLElectronicsMapping::THChToXtal(smodCopy, THCh);
0165
0166 return BTLDetId(zside, rod, runit, dmodule, smodCopy, crystal);
0167 }
0168
0169
0170
0171
0172
0173
0174
0175
0176 int BTLElectronicsMapping::TOFHIRASIC(uint32_t dmodule, uint32_t smodCopy) {
0177 if (dmodule % BTLDetId::kSModulesInDM == 0)
0178 return smodCopy;
0179 else
0180 return BTLDetId::kSModulesInDM - smodCopy - 1;
0181 }
0182
0183 int BTLElectronicsMapping::TOFHIRASIC(BTLDetId det) {
0184 uint32_t dmodule = det.dmodule();
0185 uint32_t smodCopy = det.smodule();
0186 return BTLElectronicsMapping::TOFHIRASIC(dmodule, smodCopy);
0187 }
0188
0189 int BTLElectronicsMapping::TOFHIRASIC(uint32_t rawID) {
0190 BTLDetId theId(rawID);
0191 return BTLElectronicsMapping::TOFHIRASIC(theId);
0192 }
0193
0194
0195 int BTLElectronicsMapping::FEBoardFromDM(uint32_t dmodule) { return dmodule; }
0196
0197 int BTLElectronicsMapping::FEBoard(BTLDetId det) {
0198 uint32_t dmodule = det.dmodule();
0199 return BTLElectronicsMapping::FEBoardFromDM(dmodule);
0200 }
0201
0202 int BTLElectronicsMapping::FEBoard(uint32_t rawID) {
0203 BTLDetId theId(rawID);
0204 return BTLElectronicsMapping::FEBoard(theId);
0205 }
0206
0207
0208 int BTLElectronicsMapping::CCBoardFromRU(uint32_t runit) { return runit; }
0209
0210 int BTLElectronicsMapping::CCBoard(BTLDetId det) {
0211 uint32_t runit = det.runit();
0212 return BTLElectronicsMapping::CCBoardFromRU(runit);
0213 }
0214
0215 int BTLElectronicsMapping::CCBoard(uint32_t rawID) {
0216 BTLDetId theId(rawID);
0217 return BTLElectronicsMapping::CCBoard(theId);
0218 }