Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
5101122
Update CalSourceEnergyCalib table format to include ndf; add CalEnerg…
zwl0331 Feb 11, 2026
31af759
Merge remote-tracking branch 'upstream/main'
zwl0331 Feb 11, 2026
a8a430d
Merge branch 'Mu2e:main' into main
zwl0331 Feb 23, 2026
0624721
Add utility header inclusion and optimize move semantics in calibrati…
zwl0331 Feb 23, 2026
058b110
Fix CSV output precision in rowToCsv method of CalEnergyCalibInfo class
zwl0331 Feb 23, 2026
40b2ead
Fix CalEnergyCalibInfo CSV handling for status_message
zwl0331 Feb 23, 2026
71d1484
Flag CalEnergyCalibInfo table as an adhoc table.
zwl0331 Feb 23, 2026
a4dc9e8
Merge branch 'Mu2e:main' into main
zwl0331 Mar 2, 2026
2fe7db3
Remove CalEnergyCalibInfo table as an adhoc table
zwl0331 Mar 2, 2026
bc3a3eb
Add CalEnergyCalibInfoLink adhoc table for CID mapping
zwl0331 Mar 3, 2026
bd8156f
Add cal.energycalibinfo DDL to create.sql
zwl0331 Mar 3, 2026
1d3f66e
Quote and parse CalEnergyCalibInfoLink comment as CSV
zwl0331 Mar 3, 2026
afc1f38
Validate CalEnergyCalibInfoLink input column count
zwl0331 Mar 3, 2026
85e8420
Add cal.sourceenergycalib DDL with ndf
zwl0331 Mar 3, 2026
be816de
Remove create.sql changes from PR
zwl0331 Mar 4, 2026
6a529fc
Rename tables to restore Info naming pattern
zwl0331 Mar 4, 2026
201fba9
Add shared status code include for combined calib
zwl0331 Mar 4, 2026
0888c59
Use const string refs instead of std::move in rows
zwl0331 Mar 4, 2026
0ed7478
Simplify CSV handling for combined calib info tables
zwl0331 Mar 4, 2026
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
45 changes: 45 additions & 0 deletions CaloConditions/inc/CalCombinedEnergyCalibStatus.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#ifndef CaloConditions_CalCombinedEnergyCalibStatus_hh
#define CaloConditions_CalCombinedEnergyCalibStatus_hh

//
// Status codes for combined calorimeter energy calibrations.
//
// 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
//

namespace mu2e {

namespace CalCombinedEnergyCalibStatus {

constexpr int Updated = 0;
constexpr int FallbackInconsistentMethods = 1;
constexpr int FallbackAllMethodsInvalid = 2;
constexpr int UpdatedUsingCosmicOnly = 101;
constexpr int UpdatedUsingSourceOnly = 102;

inline const char* description(int statusCode) {
switch (statusCode) {
case Updated:
return "updated: cosmic + source, consistent";
case FallbackInconsistentMethods:
return "fallback: methods inconsistent, kept old value";
case FallbackAllMethodsInvalid:
return "fallback: all methods statistically invalid";
case UpdatedUsingCosmicOnly:
return "updated using cosmic only";
case UpdatedUsingSourceOnly:
return "updated using source only";
default:
return "unknown status";
}
}

} // namespace CalCombinedEnergyCalibStatus

} // namespace mu2e

#endif
104 changes: 104 additions & 0 deletions DbTables/inc/CalCombinedEnergyCalib.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#ifndef DbTables_CalCombinedEnergyCalib_hh
#define DbTables_CalCombinedEnergyCalib_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-code values and descriptions are defined in:
Offline/CaloConditions/inc/CalCombinedEnergyCalibStatus.hh

Author: W. Zhou 2025
*/

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

namespace mu2e {

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

class Row {
public:
Row(CaloSiPMId roid, float ADC2MeV, float ADC2MeV_err,
int status_code, const 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 = "CalCombinedEnergyCalib";

CalCombinedEnergyCalib()
: DbTable(cxname, "cal.combinedenergycalib",
"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("CALCOMBINEDENERGYCALIB_BAD_INDEX")
<< "CalCombinedEnergyCalib::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 << r.roid() << ",";
sstream << std::fixed << std::setprecision(5);
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
4 changes: 3 additions & 1 deletion DbTables/inc/CalCosmicEnergyCalibInfo.hh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ class CalCosmicEnergyCalibInfo : public DbTable {
public:
class Row {
public:
Row(int cID, int FirstCalibRun, int LastCalibRun, std::string EnergyMethod, std::string FitMethod, std::string Comment) :
Row(int cID, int FirstCalibRun, int LastCalibRun,
const std::string& EnergyMethod, const std::string& FitMethod,
const std::string& Comment) :
_cID(cID),
_FirstCalibRun(FirstCalibRun),
_LastCalibRun(LastCalibRun),
Expand Down
75 changes: 75 additions & 0 deletions DbTables/inc/CalEnergyCalibInfo.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#ifndef DbTables_CalEnergyCalibInfo_hh
#define DbTables_CalEnergyCalibInfo_hh

//
// Ad-hoc table linking a CalEnergyCalib CID to the matching
// CalCombinedEnergyCalib CID produced by the same combination pass.
//

#include "Offline/DbTables/inc/DbTable.hh"
#include "cetlib_except/exception.h"
#include <sstream>
#include <string>

namespace mu2e {

class CalEnergyCalibInfo : public DbTable {
public:
class Row {
public:
Row(int energyCalibCid, int combinedEnergyCalibCid,
const std::string& comment) :
_energyCalibCid(energyCalibCid),
_combinedEnergyCalibCid(combinedEnergyCalibCid),
_comment(comment) {}

int energyCalibCid() const { return _energyCalibCid; }
int combinedEnergyCalibCid() const { return _combinedEnergyCalibCid; }
std::string comment() const { return _comment; }

private:
int _energyCalibCid;
int _combinedEnergyCalibCid;
std::string _comment;
};

constexpr static const char* cxname = "CalEnergyCalibInfo";

CalEnergyCalibInfo() :
DbTable(cxname, "cal.energycalibinfo",
"energycalibcid,combinedenergycalibcid,comment") {}

const Row& rowAt(const std::size_t index) const { return _rows.at(index); }
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); }
tableType type() const override { return Adhoc; }

void addRow(const std::vector<std::string>& columns) override {
if (columns.size() < 3) {
throw cet::exception("CALENERGYCALIBINFO_BAD_COLUMNS")
<< "CalEnergyCalibInfo::addRow expected at least 3 columns, got "
<< columns.size() << "\n";
}
_rows.emplace_back(std::stoi(columns[0]), std::stoi(columns[1]),
columns[2]);
}

void rowToCsv(std::ostringstream& sstream, std::size_t irow) const override {
Row const& r = _rows.at(irow);
sstream << r.energyCalibCid() << ",";
sstream << r.combinedEnergyCalibCid() << ",";
sstream << "\"" << r.comment() << "\"";
}

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
6 changes: 6 additions & 0 deletions DbTables/src/DbTableFactory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#include "Offline/DbTables/inc/CalSourceEnergyCalib.hh"
#include "Offline/DbTables/inc/CalCosmicEnergyCalib.hh"
#include "Offline/DbTables/inc/CalCosmicEnergyCalibInfo.hh"
#include "Offline/DbTables/inc/CalCombinedEnergyCalib.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 +116,10 @@ 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=="CalCombinedEnergyCalib") {
return std::shared_ptr<mu2e::DbTable>(new mu2e::CalCombinedEnergyCalib());
} 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