Back to home page

sPhenix code displayed by LXR

 
 

    


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   // std::cout<<"WriteMapToFile"<<std::endl;
0062   CDBTTree cdbttree = CDBTTree(filename);
0063 
0064   FillToCDBTTree(cdbttree);
0065 
0066   cdbttree.Commit();
0067   cdbttree.CommitSingle();
0068   cdbttree.WriteCDBTTree();
0069 
0070   // std::cout<<"WriteMapToFile completed"<<std::endl;
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& /*channel*/,
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   // std::cout<<m_dac.size()<<std::endl;
0152   for (auto& felix_channel : m_dac)
0153   {
0154     // std::cout<<"\t"<<felix_channel.size()<<std::endl;
0155 
0156     for (auto& chip : felix_channel)
0157     {
0158       // std::cout<<"\t\t"<<chip.size()<<std::endl;
0159 
0160       for (auto& adc : chip)
0161       {
0162         // std::cout<<"\t\t\t"<<adc.size()<<std::endl;
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   // std::cout<<"InttDacMap::FillToCDBTTree"<<std::endl;
0180 
0181   // std::cout<<m_dac.size()<<std::endl;
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   // std::cout<<"size "<<           n<< std::endl;
0209 
0210   // std::cout<<"InttDacMap::FillToCDBTTree done"<<std::endl;
0211 }