File indexing completed on 2025-08-06 08:17:40
0001 #include "InttDacMap.h"
0002
0003 #include <ffamodules/CDBInterface.h>
0004
0005 #include <cdbobjects/CDBTTree.h>
0006
0007 #include <filesystem>
0008 #include <iostream>
0009
0010 InttDacMap::InttDacMap()
0011 {
0012 InttDacMap::SetDefault();
0013 }
0014
0015 int InttDacMap::LoadFromCDB(std::string const& calibname)
0016 {
0017 if (calibname.empty())
0018 {
0019 std::cout << "InttDacMap::LoadFromCDB(std::string const& name)" << std::endl;
0020 std::cout << "\tArgument 'name' is empty string" << std::endl;
0021 return -1;
0022 }
0023
0024 std::string database = CDBInterface::instance()->getUrl(calibname);
0025 if (database.empty())
0026 {
0027 std::cout << "InttDacMap::LoadFromCDB(std::string const& name)" << std::endl;
0028 std::cout << "\tArgument 'database' is empty string. calibname invalid :" << calibname << std::endl;
0029 return -1;
0030 }
0031
0032 return LoadFromFile(database);
0033 }
0034
0035 int InttDacMap::LoadFromFile(std::string const& filename)
0036 {
0037 if (filename.empty())
0038 {
0039 std::cout << "InttDacMap::LoadFromFile(std::string const& name)" << std::endl;
0040 std::cout << "\tArgument 'filename' is empty string" << std::endl;
0041 return -1;
0042 }
0043
0044 if (!std::filesystem::exists(filename))
0045 {
0046 std::cout << "int InttDacMap::LoadFromFile(std::string const& filename)" << std::endl;
0047 std::cout << "\tFile '" << filename << "' does not exist" << std::endl;
0048 return -1;
0049 }
0050
0051 std::cout << "CDBFile: " << filename << std::endl;
0052
0053 CDBTTree cdbttree = CDBTTree(filename);
0054 cdbttree.LoadCalibrations();
0055
0056 return LoadFromCDBTTree(cdbttree);
0057 }
0058
0059 int InttDacMap::WriteToFile(std::string const& filename)
0060 {
0061
0062 CDBTTree cdbttree = CDBTTree(filename);
0063
0064 FillToCDBTTree(cdbttree);
0065
0066 cdbttree.Commit();
0067 cdbttree.CommitSingle();
0068 cdbttree.WriteCDBTTree();
0069
0070
0071 return 0;
0072 }
0073
0074 int InttDacMap::LoadFromCDBTTree(CDBTTree& cdbttree)
0075 {
0076
0077 std::cout << "LoadFromCDBTTree::LoadFromCDBTTree" << std::endl;
0078
0079 uint64_t N = cdbttree.GetSingleIntValue("size");
0080 for (uint64_t n = 0; n < N; ++n)
0081 {
0082 int felix_server = cdbttree.GetIntValue(n, "felix_server");
0083 int felix_channel = cdbttree.GetIntValue(n, "felix_channel");
0084 int chip = cdbttree.GetIntValue(n, "chip");
0085 int adc = cdbttree.GetIntValue(n, "adc");
0086 int dac = cdbttree.GetIntValue(n, "dac");
0087 m_dac[felix_server][felix_channel][chip][adc] = dac;
0088
0089 if (m_verbosity > 0)
0090 {
0091 std::cout << "felix_server" << felix_server << " ";
0092 std::cout << "felix_channel" << felix_channel << " ";
0093 std::cout << "chip" << chip << " ";
0094 std::cout << "adc" << adc << " ";
0095 std::cout << "dac" << dac << std::endl;
0096 }
0097 }
0098
0099 return 0;
0100 }
0101
0102 unsigned short InttDacMap::GetDAC(const uint& felix_server,
0103 const uint& felix_channel,
0104 const uint& chip,
0105 const uint& ,
0106 const uint& adc)
0107 {
0108 if (felix_server < m_dac.size() &&
0109 felix_channel < m_dac[felix_server].size() &&
0110 chip < m_dac[felix_server][chip].size() &&
0111 adc < m_dac[felix_server][chip][adc].size())
0112 {
0113 return m_dac[felix_server][felix_channel][chip][adc];
0114 }
0115 else
0116 {
0117 std::cout << "Range Invalid :"
0118 << " " << felix_server
0119 << " " << felix_channel
0120 << " " << chip
0121 << " " << adc
0122 << ", return -1" << std::endl;
0123
0124 return -1;
0125 }
0126 }
0127
0128 unsigned short InttDacMap::GetDAC(InttNameSpace::RawData_s const& rawdata, const uint& adc)
0129 {
0130 return GetDAC(rawdata.felix_server,
0131 rawdata.felix_channel,
0132 rawdata.chip,
0133 rawdata.channel,
0134 adc);
0135 }
0136
0137 unsigned short InttDacMap::GetDAC(InttNameSpace::Offline_s const& offline, const uint& adc)
0138 {
0139 return GetDAC(InttNameSpace::ToRawData(offline), adc);
0140 }
0141
0142 void InttDacMap::SetDefault(const uint& Adc0,
0143 const uint& Adc1,
0144 const uint& Adc2,
0145 const uint& Adc3,
0146 const uint& Adc4,
0147 const uint& Adc5,
0148 const uint& Adc6,
0149 const uint& Adc7)
0150 {
0151
0152 for (auto& felix_channel : m_dac)
0153 {
0154
0155
0156 for (auto& chip : felix_channel)
0157 {
0158
0159
0160 for (auto& adc : chip)
0161 {
0162
0163
0164 adc[0] = Adc0;
0165 adc[1] = Adc1;
0166 adc[2] = Adc2;
0167 adc[3] = Adc3;
0168 adc[4] = Adc4;
0169 adc[5] = Adc5;
0170 adc[6] = Adc6;
0171 adc[7] = Adc7;
0172 }
0173 }
0174 }
0175 }
0176
0177 void InttDacMap::FillToCDBTTree(CDBTTree& cdbttree)
0178 {
0179
0180
0181
0182 int n = 0;
0183 for (uint felix_server = 0; felix_server < m_dac.size(); felix_server++)
0184 {
0185 for (uint felix_channel = 0; felix_channel < m_dac[felix_server].size(); felix_channel++)
0186 {
0187 for (uint chip = 0; chip < m_dac[felix_server][felix_channel].size(); chip++)
0188 {
0189 for (uint adc = 0; adc < m_dac[felix_server][felix_channel][chip].size(); adc++)
0190 {
0191 int dac = m_dac[felix_server][felix_channel][chip][adc];
0192 cdbttree.SetIntValue(n, "felix_server", felix_server);
0193 cdbttree.SetIntValue(n, "felix_channel", felix_channel);
0194 cdbttree.SetIntValue(n, "chip", chip);
0195 cdbttree.SetIntValue(n, "adc", adc);
0196 cdbttree.SetIntValue(n, "dac", dac);
0197 std::cout << "felix_server" << felix_server << " ";
0198 std::cout << "felix_channel" << felix_channel << " ";
0199 std::cout << "chip" << chip << " ";
0200 std::cout << "adc" << adc << " ";
0201 std::cout << "dac" << dac << std::endl;
0202 n++;
0203 }
0204 }
0205 }
0206 }
0207 cdbttree.SetSingleIntValue("size", n);
0208
0209
0210
0211 }