File indexing completed on 2023-10-25 09:56:39
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigManager.h"
0019
0020
0021
0022
0023 #include <iostream>
0024 #include <iomanip>
0025 #include <fstream>
0026 #include <sstream>
0027
0028
0029
0030
0031 #include "DataFormats/MuonDetId/interface/DTSuperLayerId.h"
0032
0033 using namespace std;
0034
0035
0036
0037
0038
0039 DTConfigManager::DTConfigManager() {}
0040
0041
0042
0043
0044
0045 DTConfigManager::~DTConfigManager() {
0046 my_sectcollmap.clear();
0047 my_trigunitmap.clear();
0048 my_tsphimap.clear();
0049 my_tsthetamap.clear();
0050 my_tracomap.clear();
0051 my_btimap.clear();
0052 }
0053
0054
0055
0056
0057
0058 const DTConfigBti* DTConfigManager::getDTConfigBti(DTBtiId btiid) const {
0059 DTChamberId chambid = btiid.SLId().chamberId();
0060 BtiMap::const_iterator biter1 = my_btimap.find(chambid);
0061 if (biter1 == my_btimap.end()) {
0062 std::cout << "DTConfigManager::getConfigBti : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0063 << chambid.station() << ") not found, return 0" << std::endl;
0064 return nullptr;
0065 }
0066
0067 innerBtiMap::const_iterator biter2 = (*biter1).second.find(btiid);
0068 if (biter2 == (*biter1).second.end()) {
0069 std::cout << "DTConfigManager::getConfigBti : BTI (" << btiid.wheel() << "," << btiid.sector() << ","
0070 << btiid.station() << "," << btiid.superlayer() << "," << btiid.bti() << ") not found, return 0"
0071 << std::endl;
0072 return nullptr;
0073 }
0074 return &(*biter2).second;
0075 }
0076
0077 const std::map<DTBtiId, DTConfigBti>& DTConfigManager::getDTConfigBtiMap(DTChamberId chambid) const {
0078 BtiMap::const_iterator biter = my_btimap.find(chambid);
0079 if (biter == my_btimap.end()) {
0080 std::cout << "DTConfigManager::getConfigBtiMap : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0081 << chambid.station() << ") not found, return a reference to the end of the map" << std::endl;
0082 }
0083
0084 return (*biter).second;
0085 }
0086
0087 const DTConfigTraco* DTConfigManager::getDTConfigTraco(DTTracoId tracoid) const {
0088 DTChamberId chambid = tracoid.ChamberId();
0089 TracoMap::const_iterator titer1 = my_tracomap.find(chambid);
0090 if (titer1 == my_tracomap.end()) {
0091 std::cout << "DTConfigManager::getConfigTraco : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0092 << chambid.station() << ") not found, return 0" << std::endl;
0093 return nullptr;
0094 }
0095
0096 innerTracoMap::const_iterator titer2 = (*titer1).second.find(tracoid);
0097 if (titer2 == (*titer1).second.end()) {
0098 std::cout << "DTConfigManager::getConfigTraco : TRACO (" << tracoid.wheel() << "," << tracoid.sector() << ","
0099 << tracoid.station() << "," << tracoid.traco() << ") not found, return a reference to the end of the map"
0100 << std::endl;
0101 return nullptr;
0102 }
0103 return &(*titer2).second;
0104 }
0105
0106 const std::map<DTTracoId, DTConfigTraco>& DTConfigManager::getDTConfigTracoMap(DTChamberId chambid) const {
0107 TracoMap::const_iterator titer = my_tracomap.find(chambid);
0108 if (titer == my_tracomap.end()) {
0109 std::cout << "DTConfigManager::getConfigTracoMap : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0110 << chambid.station() << ") not found, return 0" << std::endl;
0111 }
0112
0113 return (*titer).second;
0114 }
0115
0116 const DTConfigTSTheta* DTConfigManager::getDTConfigTSTheta(DTChamberId chambid) const {
0117 TSThetaMap::const_iterator thiter = my_tsthetamap.find(chambid);
0118 if (thiter == my_tsthetamap.end()) {
0119 std::cout << "DTConfigManager::getConfigTSTheta : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0120 << chambid.station() << ") not found, return 0" << std::endl;
0121 return nullptr;
0122 }
0123
0124 return &(*thiter).second;
0125 }
0126
0127 const DTConfigTSPhi* DTConfigManager::getDTConfigTSPhi(DTChamberId chambid) const {
0128 TSPhiMap::const_iterator phiter = my_tsphimap.find(chambid);
0129 if (phiter == my_tsphimap.end()) {
0130 std::cout << "DTConfigManager::getConfigTSPhi : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0131 << chambid.station() << ") not found, return 0" << std::endl;
0132 return nullptr;
0133 }
0134
0135 return &(*phiter).second;
0136 }
0137
0138 const DTConfigTrigUnit* DTConfigManager::getDTConfigTrigUnit(DTChamberId chambid) const {
0139 TrigUnitMap::const_iterator tuiter = my_trigunitmap.find(chambid);
0140 if (tuiter == my_trigunitmap.end()) {
0141 std::cout << "DTConfigManager::getConfigTrigUnit : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0142 << chambid.station() << ") not found, return 0" << std::endl;
0143 return nullptr;
0144 }
0145
0146 return &(*tuiter).second;
0147 }
0148
0149 const DTConfigLUTs* DTConfigManager::getDTConfigLUTs(DTChamberId chambid) const {
0150 LUTMap::const_iterator lutiter = my_lutmap.find(chambid);
0151 if (lutiter == my_lutmap.end()) {
0152 std::cout << "DTConfigManager::getConfigLUTs : Chamber (" << chambid.wheel() << "," << chambid.sector() << ","
0153 << chambid.station() << ") not found, return 0" << std::endl;
0154 return nullptr;
0155 }
0156
0157 return &(*lutiter).second;
0158 }
0159
0160 const DTConfigSectColl* DTConfigManager::getDTConfigSectColl(DTSectCollId scid) const {
0161 SectCollMap::const_iterator sciter = my_sectcollmap.find(scid);
0162 if (sciter == my_sectcollmap.end()) {
0163 std::cout << "DTConfigManager::getConfigSectColl : SectorCollector (" << scid.wheel() << "," << scid.sector()
0164 << ") not found, return 0" << std::endl;
0165 return nullptr;
0166 }
0167
0168 return &(*sciter).second;
0169 }
0170
0171 const DTConfigPedestals* DTConfigManager::getDTConfigPedestals() const { return &my_pedestals; }
0172
0173 int DTConfigManager::getBXOffset() const {
0174 int ST = static_cast<int>(getDTConfigBti(DTBtiId(1, 1, 1, 1, 1))->ST());
0175 return (ST / 2 + ST % 2);
0176 }
0177
0178 void DTConfigManager::setDTConfigBti(DTBtiId btiid, DTConfigBti conf) {
0179 DTChamberId chambid = btiid.SLId().chamberId();
0180 my_btimap[chambid][btiid] = conf;
0181 }
0182
0183 void DTConfigManager::setDTConfigTraco(DTTracoId tracoid, DTConfigTraco conf) {
0184 DTChamberId chambid = tracoid.ChamberId();
0185 my_tracomap[chambid][tracoid] = conf;
0186 }
0187
0188 void DTConfigManager::dumpLUTParam(DTChamberId& chambid) const {
0189
0190 string name = "Lut_from_param";
0191 name += ".txt";
0192
0193 ofstream fout;
0194 fout.open(name.c_str(), ofstream::app);
0195
0196
0197 int wh = chambid.wheel();
0198 int st = chambid.station();
0199 int se = chambid.sector();
0200
0201
0202
0203 fout << wh;
0204 fout << "\t" << st;
0205 fout << "\t" << se;
0206
0207
0208
0209 const DTConfigLUTs* _confLUTs = getDTConfigLUTs(chambid);
0210 short int btic = getDTConfigTraco(DTTracoId(wh, st, se, 1))->BTIC();
0211 float d = _confLUTs->D();
0212 float xcn = _confLUTs->Xcn();
0213
0214
0215
0216
0217 fout << "\tA8";
0218 short int Low_byte = (btic & 0x00FF);
0219 short int High_byte = (btic >> 8 & 0x00FF);
0220 fout << setw(2) << setfill('0') << hex << High_byte << setw(2) << setfill('0') << Low_byte;
0221
0222
0223 short int DSPmantissa = 0;
0224 short int DSPexp = 0;
0225
0226
0227 _confLUTs->IEEE32toDSP(d, DSPmantissa, DSPexp);
0228 Low_byte = (DSPmantissa & 0x00FF);
0229 High_byte = (DSPmantissa >> 8 & 0x00FF);
0230 fout << setw(2) << setfill('0') << hex << High_byte << setw(2) << setfill('0') << Low_byte;
0231 Low_byte = (DSPexp & 0x00FF);
0232 High_byte = (DSPexp >> 8 & 0x00FF);
0233 fout << setw(2) << setfill('0') << High_byte << setw(2) << setfill('0') << Low_byte;
0234
0235
0236 DSPmantissa = 0;
0237 DSPexp = 0;
0238 _confLUTs->IEEE32toDSP(xcn, DSPmantissa, DSPexp);
0239 Low_byte = (DSPmantissa & 0x00FF);
0240 High_byte = (DSPmantissa >> 8 & 0x00FF);
0241 fout << setw(2) << setfill('0') << hex << High_byte << setw(2) << setfill('0') << Low_byte;
0242 Low_byte = (DSPexp & 0x00FF);
0243 High_byte = (DSPexp >> 8 & 0x00FF);
0244 fout << setw(2) << setfill('0') << High_byte << setw(2) << setfill('0') << Low_byte;
0245
0246
0247 short int xcn_sign = _confLUTs->Wheel();
0248 Low_byte = (xcn_sign & 0x00FF);
0249 High_byte = (xcn_sign >> 8 & 0x00FF);
0250 fout << setw(2) << setfill('0') << hex << High_byte << setw(2) << setfill('0') << Low_byte << dec << "\n";
0251
0252 fout.close();
0253
0254 return;
0255 }