File indexing completed on 2025-12-17 09:19:47
0001 #include "MvtxRawDefs.h"
0002
0003 #include <fun4all/DBInterface.h>
0004
0005 #include <odbc++/resultset.h>
0006 #include <odbc++/statement.h> // for Statement
0007
0008 #include <cmath>
0009 #include <iostream>
0010 #include <limits>
0011 #include <memory>
0012 #include <stdexcept>
0013 #include <string>
0014
0015 uint8_t MvtxRawDefs::getStaveIndex(const uint8_t& lyrId, const uint8_t& stvId)
0016 {
0017 return firstStaveIndex[lyrId] + stvId;
0018 };
0019
0020 std::pair<uint8_t, uint8_t> const& MvtxRawDefs::get_flx_endpoint(const uint8_t& lyrId, const uint8_t& stvId)
0021 {
0022 return stave_felix_map.at(getStaveIndex(lyrId, stvId));
0023 };
0024
0025 MvtxRawDefs::linkId_t MvtxRawDefs::decode_feeid(const uint16_t feeid)
0026 {
0027 linkId_t ret = {};
0028
0029
0030
0031 ret.layer = static_cast<uint16_t>(feeid >> 12U) & 0x7U;
0032 ret.stave = feeid & 0x1FU;
0033 ret.gbtid = static_cast<uint16_t>(feeid >> 8U) & 0x3U;
0034 return ret;
0035 };
0036
0037
0038 namespace
0039 {
0040 float getStrobeLengthFromOCDB(const int& runNumber)
0041 {
0042 odbc::Statement *statement = DBInterface::instance()->getStatement("mvtx_read");
0043
0044 std::string sqlcmd = "SELECT strobe FROM mvtx_strobe_offline WHERE runnumber = " + std::to_string(runNumber);
0045
0046 std::unique_ptr<odbc::ResultSet> resultSet(statement->executeQuery(sqlcmd));
0047
0048 if (resultSet && resultSet->next())
0049 {
0050 float strobe = resultSet->getFloat("strobe");
0051 return strobe;
0052 }
0053
0054 return std::numeric_limits<float>::quiet_NaN();
0055 }
0056
0057 float getStrobeLengthFromDAQ(const int& runNumber)
0058 {
0059 float strobeWidth = std::numeric_limits<float>::quiet_NaN();
0060 odbc::Statement *statement = DBInterface::instance()->getStatement("daq");
0061 std::string sqlcmd = "SELECT strobe FROM mvtx_strobe WHERE hostname = 'mvtx0' AND runnumber = " + std::to_string(runNumber);
0062 std::unique_ptr<odbc::ResultSet> resultSet(statement->executeQuery(sqlcmd));
0063 if (resultSet && resultSet->next())
0064 {
0065 strobeWidth = resultSet->getFloat("strobe");
0066 }
0067 return strobeWidth;
0068 }
0069 }
0070
0071 float MvtxRawDefs::getStrobeLength(const int& runNumber)
0072 {
0073 {
0074 float strobe_length = getStrobeLengthFromOCDB(runNumber);
0075 return (!std::isnan(strobe_length)) ? strobe_length : getStrobeLengthFromDAQ(runNumber);
0076 }
0077 }