Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions DbTables/inc/CalEnergyCalibInfo.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#ifndef DbTables_CalEnergyCalibInfo_hh
#define DbTables_CalEnergyCalibInfo_hh

/*
Per-SiPM combined calibration metadata table.
Stores the combined ADC/MeV constants, uncertainties, and status flags
from the cosmic + source calibration combination algorithm.

Status codes:
0 - updated: cosmic + source, consistent
1 - fallback: methods inconsistent, kept old value
2 - fallback: all methods statistically invalid
101 - updated using cosmic only
102 - updated using source only

Author: W. Zhou 2025
*/

#include <iomanip>
#include <sstream>
#include <string>
#include <vector>
#include "cetlib_except/exception.h"
#include "Offline/DbTables/inc/DbTable.hh"
#include "Offline/DataProducts/inc/CaloSiPMId.hh"
#include "Offline/DataProducts/inc/CaloConst.hh"

namespace mu2e {

class CalEnergyCalibInfo : public DbTable {
public:
typedef std::shared_ptr<CalEnergyCalibInfo> ptr_t;
typedef std::shared_ptr<const CalEnergyCalibInfo> cptr_t;

class Row {
public:
Row(CaloSiPMId roid, float ADC2MeV, float ADC2MeV_err,
int status_code, std::string status_message)
: _roid(roid),
_ADC2MeV(ADC2MeV),
_ADC2MeV_err(ADC2MeV_err),
_status_code(status_code),
_status_message(status_message) {}

CaloSiPMId roid() const { return _roid; }
float ADC2MeV() const { return _ADC2MeV; }
float ADC2MeV_err() const { return _ADC2MeV_err; }
int status_code() const { return _status_code; }
std::string status_message() const { return _status_message; }

private:
CaloSiPMId _roid;
float _ADC2MeV;
float _ADC2MeV_err;
int _status_code;
std::string _status_message;
};

constexpr static const char* cxname = "CalEnergyCalibInfo";

CalEnergyCalibInfo()
: DbTable(cxname, "cal.energycalibinfo",
"roid,adc2mev,adc2mev_err,status_code,status_message") {}

const Row& row(CaloSiPMId roid) const { return _rows.at(roid.id()); }
std::vector<Row> const& rows() const { return _rows; }
std::size_t nrow() const override { return _rows.size(); }
size_t size() const override { return baseSize() + nrow() * sizeof(Row); }
virtual std::size_t nrowFix() const override { return CaloConst::_nChannelDB; }
const std::string orderBy() const { return std::string("roid"); }

void addRow(const std::vector<std::string>& columns) override {
std::uint16_t index = std::stoul(columns[0]);
// enforce order, so channels can be looked up by index
if (index >= CaloConst::_nChannelDB || index != _rows.size()) {
throw cet::exception("CALENERGYCALIBINFO_BAD_INDEX")
<< "CalEnergyCalibInfo::addRow found index out of order: " << index
<< " != " << _rows.size() << "\n";
}
_rows.emplace_back(CaloSiPMId(index), std::stof(columns[1]),
std::stof(columns[2]), std::stoi(columns[3]),
columns[4]);
}

void rowToCsv(std::ostringstream& sstream, std::size_t irow) const override {
Row const& r = _rows.at(irow);
sstream << std::fixed << std::setprecision(5);
sstream << r.roid() << ",";
sstream << r.ADC2MeV() << ",";
sstream << r.ADC2MeV_err() << ",";
sstream << r.status_code() << ",";
sstream << r.status_message();
}

virtual void clear() override {
baseClear();
_rows.clear();
}

private:
std::vector<Row> _rows;
};

} // namespace mu2e

#endif
14 changes: 10 additions & 4 deletions DbTables/inc/CalSourceEnergyCalib.hh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace mu2e {

class Row {
public:
Row(CaloSiPMId roid, float fullEPeak,float fullErrEPeak,float fullWidth,float fullErrWidth,float firstescEPeak,float firstescErrEPeak,float firstescWidth,float firstescErrWidth,float secescEPeak,float secescErrEPeak,float secescWidth,float secescErrWidth, float frFull, float frFirst, float frSecond, float chisq): _roid(roid), _fullEPeak(fullEPeak), _fullErrEPeak(fullErrEPeak), _fullWidth(fullWidth), _fullErrWidth(fullErrWidth),_firstescEPeak(firstescEPeak), _firstescErrEPeak(firstescErrEPeak), _firstescWidth(firstescWidth), _firstescErrWidth(firstescErrWidth),_secescEPeak(secescEPeak), _secescErrEPeak(secescErrEPeak), _secescWidth(secescWidth), _secescErrWidth(secescErrWidth), _frFull(frFull), _frFirst(frFirst), _frSecond(frSecond), _chisq(chisq){}
Row(CaloSiPMId roid, float fullEPeak,float fullErrEPeak,float fullWidth,float fullErrWidth,float firstescEPeak,float firstescErrEPeak,float firstescWidth,float firstescErrWidth,float secescEPeak,float secescErrEPeak,float secescWidth,float secescErrWidth, float frFull, float frFirst, float frSecond, float chisq, int ndf): _roid(roid), _fullEPeak(fullEPeak), _fullErrEPeak(fullErrEPeak), _fullWidth(fullWidth), _fullErrWidth(fullErrWidth),_firstescEPeak(firstescEPeak), _firstescErrEPeak(firstescErrEPeak), _firstescWidth(firstescWidth), _firstescErrWidth(firstescErrWidth),_secescEPeak(secescEPeak), _secescErrEPeak(secescErrEPeak), _secescWidth(secescWidth), _secescErrWidth(secescErrWidth), _frFull(frFull), _frFirst(frFirst), _frSecond(frSecond), _chisq(chisq), _ndf(ndf){}

CaloSiPMId roid() const { return _roid;}
float fullEPeak() const { return _fullEPeak; }
Expand All @@ -39,6 +39,7 @@ namespace mu2e {
float frSecond() const { return _frSecond; }

float chisq() const { return _chisq; }
int ndf() const { return _ndf; }

private:
CaloSiPMId _roid;
Expand All @@ -58,11 +59,12 @@ namespace mu2e {
float _frFirst;
float _frSecond;
float _chisq;
int _ndf;
};

constexpr static const char* cxname = "CalSourceEnergyCalib";

CalSourceEnergyCalib():DbTable(cxname,"cal.sourceenergycalib","roid,fullepeak,fullerrepeak,fullwidth,fullerrwidth,firstescepeak,firstescerrepeak,firstescwidth,firstescerrwidth,secescepeak,secescerrepeak,secescwidth,secescerrwidth, frfull,frfirst,frsecond,chisq"){}
CalSourceEnergyCalib():DbTable(cxname,"cal.sourceenergycalib","roid,fullepeak,fullerrepeak,fullwidth,fullerrwidth,firstescepeak,firstescerrepeak,firstescwidth,firstescerrwidth,secescepeak,secescerrepeak,secescwidth,secescerrwidth,frfull,frfirst,frsecond,chisq,ndf"){}

const Row& row(CaloSiPMId roid) const {
return _rows.at(roid.id()); }
Expand All @@ -82,7 +84,7 @@ namespace mu2e {
_rows.emplace_back(CaloSiPMId(index),std::stof(columns[1]),std::stof(columns[2]),std::stof(columns[3]),
std::stof(columns[4]),std::stof(columns[5]),std::stof(columns[6]),std::stof(columns[7]),
std::stof(columns[8]),std::stof(columns[9]),std::stof(columns[10]),std::stof(columns[11]),
std::stof(columns[12]),std::stof(columns[13]),std::stof(columns[14]),std::stof(columns[15]),std::stof(columns[16]));
std::stof(columns[12]),std::stof(columns[13]),std::stof(columns[14]),std::stof(columns[15]),std::stof(columns[16]),std::stoi(columns[17]));

}

Expand All @@ -102,7 +104,11 @@ namespace mu2e {
sstream << r.secescErrEPeak()<<",";
sstream << r.secescWidth()<<",";
sstream << r.secescErrWidth()<<",";
sstream << r.chisq();
sstream << r.frFull()<<",";
sstream << r.frFirst()<<",";
sstream << r.frSecond()<<",";
sstream << r.chisq()<<",";
sstream << r.ndf();
}

virtual void clear() override { baseClear(); _rows.clear();}
Expand Down
3 changes: 3 additions & 0 deletions DbTables/src/DbTableFactory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "Offline/DbTables/inc/CalSourceEnergyCalib.hh"
#include "Offline/DbTables/inc/CalCosmicEnergyCalib.hh"
#include "Offline/DbTables/inc/CalCosmicEnergyCalibInfo.hh"
#include "Offline/DbTables/inc/CalEnergyCalibInfo.hh"
#include "Offline/DbTables/inc/CalLaserEnergyCalib.hh"
#include "Offline/DbTables/inc/CalLaserTimeCalib.hh"
#include "Offline/DbTables/inc/CalLaserRuns.hh"
Expand Down Expand Up @@ -114,6 +115,8 @@ mu2e::DbTable::ptr_t mu2e::DbTableFactory::newTable(std::string const& name) {
return std::shared_ptr<mu2e::DbTable>(new mu2e::CalLaserRuns());
} else if (name=="CalEnergyCalib") {
return std::shared_ptr<mu2e::DbTable>(new mu2e::CalEnergyCalib());
} else if (name=="CalEnergyCalibInfo") {
return std::shared_ptr<mu2e::DbTable>(new mu2e::CalEnergyCalibInfo());
} else if (name=="CalTimeCalib") {
return std::shared_ptr<mu2e::DbTable>(new mu2e::CalTimeCalib());
} else if (name=="CalCosmicT0Align") {
Expand Down