1010/ refactored test_dac_caller (#1576)
Build on RHEL9 docker image / build (push) Successful in 3m35s
Build on RHEL8 docker image / build (push) Successful in 4m43s
Run Simulator Tests on local RHEL9 / build (push) Successful in 19m29s
Run Simulator Tests on local RHEL8 / build (push) Successful in 22m59s

* refactored test_dac_caller

* some more dac tests from developer
This commit is contained in:
maliakal_d authored and GitHub committed 2026-09-24 12:12:59 +02:00
1 parent a891b1c5c7
commit 0f205e676e
8 files changed
+126 -150

No files matched your search

@@ -496,12 +496,8 @@ TEST_CASE("dac", "[.detectorintegration][dacs]") {
auto det_type = det.getDetectorType().squash();
if (det_type == defs::CHIPTESTBOARD ||
det_type == defs::XILINX_CHIPTESTBOARD) {
for (int i = 0; i < 18; ++i) {
SECTION("dac " + std::to_string(i)) {
test_dac_caller(static_cast<defs::dacIndex>(i), "dac", 0);
}
}
// normal dacs
// eiger
// REQUIRE_THROWS(caller.call("dac", {"vthreshold"}, -1, GET));
// REQUIRE_THROWS(caller.call("dac", {"vsvp"}, -1, GET));
@@ -561,6 +557,27 @@ TEST_CASE("dac", "[.detectorintegration][dacs]") {
REQUIRE_THROWS(caller.call("dac", {"vb_cs"}, -1, GET));
REQUIRE_THROWS(caller.call("dac", {"vb_opa_fd"}, -1, GET));
REQUIRE_THROWS(caller.call("dac", {"vcom_adc2"}, -1, GET));
// ctb and xilinx
for (int idac = 0; idac < 18; ++idac) {
SECTION("dac " + std::to_string(idac)) {
test_dac_caller(static_cast<defs::dacIndex>(idac), 0);
test_dac_caller(static_cast<defs::dacIndex>(idac), 1200);
test_dac_caller(static_cast<defs::dacIndex>(idac), 1200, true);
test_dac_caller(static_cast<defs::dacIndex>(idac), -100);
// dac name
std::string dacname_str = "dacname" + std::to_string(idac);
det.setDacName(static_cast<defs::dacIndex>(idac), dacname_str);
test_dacname_caller(dacname_str, -100);
}
REQUIRE_THROWS(
caller.call("dac", {std::to_string(idac), "-2"}, -1, PUT));
// REQUIRE_THROWS(
// caller.call("dac", {std::to_string(idac), "-1"}, -1, PUT));
// not yet implemented in v10.x.x
}
}
}
@@ -126,37 +126,30 @@ TEST_CASE("temp_fpgafr", "[.detectorintegration]") {
/* dacs */
TEST_CASE("Setting and reading back EIGER dacs",
"[.detectorintegration][dacs]") {
TEST_CASE("eiger dac", "[.detectorintegration][dacs]") {
// vsvp, vtr, vrf, vrs, vsvn, vtgstv, vcmp_ll, vcmp_lr, vcal, vcmp_rl,
// rxb_rb, rxb_lb, vcmp_rr, vcp, vcn, vis, vthreshold
Detector det;
Caller caller(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::EIGER) {
SECTION("vsvp") { test_dac_caller(defs::VSVP, "vsvp", 5); }
SECTION("vtrim") { test_dac_caller(defs::VTRIM, "vtrim", 1200); }
SECTION("vrpreamp") {
test_dac_caller(defs::VRPREAMP, "vrpreamp", 1500);
}
SECTION("vrshaper") {
test_dac_caller(defs::VRSHAPER, "vrshaper", 1510);
}
SECTION("vsvn") { test_dac_caller(defs::VSVN, "vsvn", 3800); }
SECTION("vtgstv") { test_dac_caller(defs::VTGSTV, "vtgstv", 2550); }
SECTION("vcmp_ll") { test_dac_caller(defs::VCMP_LL, "vcmp_ll", 1400); }
SECTION("vcmp_lr") { test_dac_caller(defs::VCMP_LR, "vcmp_lr", 1400); }
SECTION("vcal") { test_dac_caller(defs::VCAL, "vcal", 1400); }
SECTION("vcmp_rl") { test_dac_caller(defs::VCMP_RL, "vcmp_rl", 1400); }
SECTION("rxb_rb") { test_dac_caller(defs::RXB_RB, "rxb_rb", 1400); }
SECTION("rxb_lb") { test_dac_caller(defs::RXB_LB, "rxb_lb", 1400); }
SECTION("vcmp_rr") { test_dac_caller(defs::VCMP_RR, "vcmp_rr", 1400); }
SECTION("vcp") { test_dac_caller(defs::VCP, "vcp", 1400); }
SECTION("vcn") { test_dac_caller(defs::VCN, "vcn", 1400); }
SECTION("vishaper") {
test_dac_caller(defs::VISHAPER, "vishaper", 1400);
}
SECTION("iodelay") { test_dac_caller(defs::IO_DELAY, "iodelay", 1400); }
SECTION("vsvp") { test_dac_caller(defs::VSVP, 5); }
SECTION("vtrim") { test_dac_caller(defs::VTRIM, 1200); }
SECTION("vrpreamp") { test_dac_caller(defs::VRPREAMP, 1500); }
SECTION("vrshaper") { test_dac_caller(defs::VRSHAPER, 1510); }
SECTION("vsvn") { test_dac_caller(defs::VSVN, 3800); }
SECTION("vtgstv") { test_dac_caller(defs::VTGSTV, 2550); }
SECTION("vcmp_ll") { test_dac_caller(defs::VCMP_LL, 1400); }
SECTION("vcmp_lr") { test_dac_caller(defs::VCMP_LR, 1400); }
SECTION("vcal") { test_dac_caller(defs::VCAL, 1400); }
SECTION("vcmp_rl") { test_dac_caller(defs::VCMP_RL, 1400); }
SECTION("rxb_rb") { test_dac_caller(defs::RXB_RB, 1400); }
SECTION("rxb_lb") { test_dac_caller(defs::RXB_LB, 1400); }
SECTION("vcmp_rr") { test_dac_caller(defs::VCMP_RR, 1400); }
SECTION("vcp") { test_dac_caller(defs::VCP, 1400); }
SECTION("vcn") { test_dac_caller(defs::VCN, 1400); }
SECTION("vishaper") { test_dac_caller(defs::VISHAPER, 1400); }
SECTION("iodelay") { test_dac_caller(defs::IO_DELAY, 1400); }
SECTION("vthreshold") {
// Read out individual vcmp to be able to reset after
// the test is done
@@ -35,35 +35,34 @@ void test_valid_port_caller(const std::string &command,
}
}
void test_dac_caller(defs::dacIndex index, const std::string &dacname,
int dacvalue, bool mV) {
void test_dac(defs::dacIndex index, std::string dacname, int dacvalue,
bool mV) {
Detector det;
Caller caller(&det);
std::string dac = dacname;
auto value = std::to_string(dacvalue);
auto previous = det.getDAC(index, false);
// chip test board
if (dacname == "dac") {
dac = std::to_string(static_cast<int>(index));
}
{
std::ostringstream oss;
std::vector<std::string> args = {dac, value};
std::vector<std::string> args = {dacname, value};
if (mV)
args.push_back("mV");
std::cout << "args:" << ToString(args) << std::endl;
caller.call("dac", args, -1, PUT, oss);
REQUIRE(oss.str() == std::string("dac ") + dac + " " + value +
REQUIRE(oss.str() == std::string("dac ") + dacname + " " + value +
(mV ? " mV\n" : "\n"));
}
{
std::ostringstream oss;
std::vector<std::string> args = {dac};
std::vector<std::string> args = {dacname};
if (mV)
args.push_back("mV");
caller.call("dac", args, -1, GET, oss);
REQUIRE(oss.str() ==
"dac " + dac + " " + value + (mV ? " mV\n" : "\n"));
{
std::ostringstream oss_expected;
oss_expected << "dac " << dacname << " " << value
<< (mV ? " mV" : "") << '\n';
REQUIRE(oss.str() == oss_expected.str());
}
}
// Reset all dacs to previous value
for (int i = 0; i != det.size(); ++i) {
@@ -71,6 +70,25 @@ void test_dac_caller(defs::dacIndex index, const std::string &dacname,
}
}
void test_dac_caller(defs::dacIndex index, int dacvalue, bool mV) {
std::string dacname = sls::ToString(index);
// ctb: use only the index for dacname
// so that cli output is not 'dac dac 0'
if (index <= defs::DAC_17) {
dacname = std::to_string(static_cast<int>(index));
}
test_dac(index, dacname, dacvalue, mV);
}
void test_dacname_caller(std::string dacname, int dacvalue, bool mV) {
Detector det;
auto detType = det.getDetectorType().squash(defs::GENERIC);
REQUIRE((detType == defs::CHIPTESTBOARD ||
detType == defs::XILINX_CHIPTESTBOARD));
auto index = det.getDacIndex(dacname);
test_dac(index, dacname, dacvalue, mV);
}
void test_onchip_dac_caller(defs::dacIndex index, const std::string &dacname,
int dacvalue) {
Detector det;
@@ -21,8 +21,12 @@ void test_valid_port_caller(const std::string &command,
const std::vector<std::string> &arguments,
int detector_id, int action);
void test_dac_caller(slsDetectorDefs::dacIndex index,
const std::string &dacname, int dacvalue, bool mV = false);
void test_dac(defs::dacIndex index, std::string dacname, int dacvalue,
bool mV = false);
void test_dac_caller(slsDetectorDefs::dacIndex index, int dacvalue,
bool mV = false);
void test_dacname_caller(std::string dacname, int dacvalue, bool mV = false);
void test_onchip_dac_caller(slsDetectorDefs::dacIndex index,
const std::string &dacname, int dacvalue);
@@ -106,8 +106,7 @@ TEST_CASE("timegotthard2", "[.detectorintegration]") {
}
/* dacs */
TEST_CASE("Setting and reading back GOTTHARD2 dacs",
"[.detectorintegration][dacs]") {
TEST_CASE("gotthard2 dac", "[.detectorintegration][dacs]") {
// vref_h_adc, vb_comp_fe, vb_comp_adc, vcom_cds,
// vref_restore, vb_opa_1st, vref_comp_fe, vcom_adc1,
// vref_prech, vref_l_adc, vref_cds, vb_cs,
@@ -117,46 +116,20 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs",
Caller caller(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::GOTTHARD2) {
SECTION("vref_h_adc") {
test_dac_caller(defs::VREF_H_ADC, "vref_h_adc", 2099);
}
SECTION("vb_comp_fe") {
test_dac_caller(defs::VB_COMP_FE, "vb_comp_fe", 0);
}
SECTION("vb_comp_adc") {
test_dac_caller(defs::VB_COMP_ADC, "vb_comp_adc", 0);
}
SECTION("vcom_cds") {
test_dac_caller(defs::VCOM_CDS, "vcom_cds", 1400);
}
SECTION("vref_rstore") {
test_dac_caller(defs::VREF_RSTORE, "vref_rstore", 640);
}
SECTION("vb_opa_1st") {
test_dac_caller(defs::VB_OPA_1ST, "vb_opa_1st", 0);
}
SECTION("vref_comp_fe") {
test_dac_caller(defs::VREF_COMP_FE, "vref_comp_fe", 0);
}
SECTION("vcom_adc1") {
test_dac_caller(defs::VCOM_ADC1, "vcom_adc1", 1400);
}
SECTION("vref_prech") {
test_dac_caller(defs::VREF_PRECH, "vref_prech", 1720);
}
SECTION("vref_l_adc") {
test_dac_caller(defs::VREF_L_ADC, "vref_l_adc", 700);
}
SECTION("vref_cds") {
test_dac_caller(defs::VREF_CDS, "vref_cds", 1200);
}
SECTION("vb_cs") { test_dac_caller(defs::VB_CS, "vb_cs", 2799); }
SECTION("vb_opa_fd") {
test_dac_caller(defs::VB_OPA_FD, "vb_opa_fd", 0);
}
SECTION("vcom_adc2") {
test_dac_caller(defs::VCOM_ADC2, "vcom_adc2", 1400);
}
SECTION("vref_h_adc") { test_dac_caller(defs::VREF_H_ADC, 2099); }
SECTION("vb_comp_fe") { test_dac_caller(defs::VB_COMP_FE, 0); }
SECTION("vb_comp_adc") { test_dac_caller(defs::VB_COMP_ADC, 0); }
SECTION("vcom_cds") { test_dac_caller(defs::VCOM_CDS, 1400); }
SECTION("vref_rstore") { test_dac_caller(defs::VREF_RSTORE, 640); }
SECTION("vb_opa_1st") { test_dac_caller(defs::VB_OPA_1ST, 0); }
SECTION("vref_comp_fe") { test_dac_caller(defs::VREF_COMP_FE, 0); }
SECTION("vcom_adc1") { test_dac_caller(defs::VCOM_ADC1, 1400); }
SECTION("vref_prech") { test_dac_caller(defs::VREF_PRECH, 1720); }
SECTION("vref_l_adc") { test_dac_caller(defs::VREF_L_ADC, 700); }
SECTION("vref_cds") { test_dac_caller(defs::VREF_CDS, 1200); }
SECTION("vb_cs") { test_dac_caller(defs::VB_CS, 2799); }
SECTION("vb_opa_fd") { test_dac_caller(defs::VB_OPA_FD, 0); }
SECTION("vcom_adc2") { test_dac_caller(defs::VCOM_ADC2, 1400); }
// eiger
REQUIRE_THROWS(caller.call("dac", {"vthreshold"}, -1, GET));
REQUIRE_THROWS(caller.call("dac", {"vsvp"}, -1, GET));
@@ -17,30 +17,21 @@ using test::PUT;
/* dacs */
TEST_CASE("Setting and reading back Jungfrau dacs",
"[.detectorintegration][dacs]") {
TEST_CASE("jungfrau dac", "[.detectorintegration][dacs]") {
// vb_comp, vdd_prot, vin_com, vref_prech, vb_pixbuf, vb_ds, vref_ds,
// vref_comp
Detector det;
Caller caller(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::JUNGFRAU) {
SECTION("vb_comp") { test_dac_caller(defs::VB_COMP, "vb_comp", 1220); }
SECTION("vdd_prot") {
test_dac_caller(defs::VDD_PROT, "vdd_prot", 3000);
}
SECTION("vin_com") { test_dac_caller(defs::VIN_COM, "vin_com", 1053); }
SECTION("vref_prech") {
test_dac_caller(defs::VREF_PRECH, "vref_prech", 1450);
}
SECTION("vb_pixbuf") {
test_dac_caller(defs::VB_PIXBUF, "vb_pixbuf", 750);
}
SECTION("vb_ds") { test_dac_caller(defs::VB_DS, "vb_ds", 1000); }
SECTION("vref_ds") { test_dac_caller(defs::VREF_DS, "vref_ds", 480); }
SECTION("vref_comp") {
test_dac_caller(defs::VREF_COMP, "vref_comp", 420);
}
SECTION("vb_comp") { test_dac_caller(defs::VB_COMP, 1220); }
SECTION("vdd_prot") { test_dac_caller(defs::VDD_PROT, 3000); }
SECTION("vin_com") { test_dac_caller(defs::VIN_COM, 1053); }
SECTION("vref_prech") { test_dac_caller(defs::VREF_PRECH, 1450); }
SECTION("vb_pixbuf") { test_dac_caller(defs::VB_PIXBUF, 750); }
SECTION("vb_ds") { test_dac_caller(defs::VB_DS, 1000); }
SECTION("vref_ds") { test_dac_caller(defs::VREF_DS, 480); }
SECTION("vref_comp") { test_dac_caller(defs::VREF_COMP, 420); }
// eiger
REQUIRE_THROWS(caller.call("vthreshold", {}, -1, GET));
REQUIRE_THROWS(caller.call("vsvp", {}, -1, GET));
@@ -17,30 +17,21 @@ using test::PUT;
/* dacs */
TEST_CASE("Setting and reading back moench dacs",
"[.detectorintegration][dacs]") {
TEST_CASE("moench dac", "[.detectorintegration][dacs]") {
// vbp_colbuf, vipre, vin_cm, vb_sda, vcasc_sfp, vout_cm, vipre_cds,
// ibias_sfp
Detector det;
Caller caller(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::MOENCH) {
SECTION("vbp_colbuf") {
test_dac_caller(defs::VBP_COLBUF, "vbp_colbuf", 1300);
}
SECTION("vipre") { test_dac_caller(defs::VIPRE, "vipre", 1000); }
SECTION("vin_cm") { test_dac_caller(defs::VIN_CM, "vin_cm", 1400); }
SECTION("vb_sda") { test_dac_caller(defs::VB_SDA, "vb_sda", 680); }
SECTION("vcasc_sfp") {
test_dac_caller(defs::VCASC_SFP, "vcasc_sfp", 1428);
}
SECTION("vout_cm") { test_dac_caller(defs::VOUT_CM, "vout_cm", 1200); }
SECTION("vipre_cds") {
test_dac_caller(defs::VIPRE_CDS, "vipre_cds", 800);
}
SECTION("ibias_sfp") {
test_dac_caller(defs::IBIAS_SFP, "ibias_sfp", 900);
}
SECTION("vbp_colbuf") { test_dac_caller(defs::VBP_COLBUF, 1300); }
SECTION("vipre") { test_dac_caller(defs::VIPRE, 1000); }
SECTION("vin_cm") { test_dac_caller(defs::VIN_CM, 1400); }
SECTION("vb_sda") { test_dac_caller(defs::VB_SDA, 680); }
SECTION("vcasc_sfp") { test_dac_caller(defs::VCASC_SFP, 1428); }
SECTION("vout_cm") { test_dac_caller(defs::VOUT_CM, 1200); }
SECTION("vipre_cds") { test_dac_caller(defs::VIPRE_CDS, 800); }
SECTION("ibias_sfp") { test_dac_caller(defs::IBIAS_SFP, 900); }
// eiger
REQUIRE_THROWS(caller.call("vthreshold", {}, -1, GET));
REQUIRE_THROWS(caller.call("vsvp", {}, -1, GET));
@@ -19,8 +19,7 @@ using test::PUT;
/* dacs */
TEST_CASE("Setting and reading back MYTHEN3 dacs",
"[.detectorintegration][dacs]") {
TEST_CASE("mythen3 dac", "[.detectorintegration][dacs]") {
// vcassh, vth2, vshaper, vshaperneg, vipre_out, vth3, vth1,
// vicin, vcas, vpreamp, vpl, vipre, viinsh, vph, vtrim, vdcsh,
@@ -28,32 +27,22 @@ TEST_CASE("Setting and reading back MYTHEN3 dacs",
Caller caller(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::MYTHEN3) {
SECTION("vcassh") { test_dac_caller(defs::VCASSH, "vcassh", 1200); }
SECTION("vth2") { test_dac_caller(defs::VTH2, "vth2", 2800); }
SECTION("vrshaper") {
test_dac_caller(defs::VRSHAPER, "vrshaper", 1280);
}
SECTION("vrshaper_n") {
test_dac_caller(defs::VRSHAPER_N, "vrshaper_n", 2800);
}
SECTION("vipre_out") {
test_dac_caller(defs::VIPRE_OUT, "vipre_out", 1220);
}
SECTION("vth3") { test_dac_caller(defs::VTH3, "vth3", 2800); }
SECTION("vth1") { test_dac_caller(defs::VTH1, "vth1", 2880); }
SECTION("vicin") { test_dac_caller(defs::VICIN, "vicin", 1708); }
SECTION("vcas") { test_dac_caller(defs::VCAS, "vcas", 1800); }
SECTION("vrpreamp") {
test_dac_caller(defs::VRPREAMP, "vrpreamp", 1100);
}
SECTION("vcal_n") { test_dac_caller(defs::VCAL_N, "vcal_n", 1100); }
SECTION("vipre") { test_dac_caller(defs::VIPRE, "vipre", 2624); }
SECTION("vishaper") {
test_dac_caller(defs::VISHAPER, "vishaper", 1708);
}
SECTION("vcal_p") { test_dac_caller(defs::VCAL_P, "vcal_p", 1712); }
SECTION("vtrim") { test_dac_caller(defs::VTRIM, "vtrim", 2800); }
SECTION("vdcsh") { test_dac_caller(defs::VDCSH, "vdcsh", 800); }
SECTION("vcassh") { test_dac_caller(defs::VCASSH, 1200); }
SECTION("vth2") { test_dac_caller(defs::VTH2, 2800); }
SECTION("vrshaper") { test_dac_caller(defs::VRSHAPER, 1280); }
SECTION("vrshaper_n") { test_dac_caller(defs::VRSHAPER_N, 2800); }
SECTION("vipre_out") { test_dac_caller(defs::VIPRE_OUT, 1220); }
SECTION("vth3") { test_dac_caller(defs::VTH3, 2800); }
SECTION("vth1") { test_dac_caller(defs::VTH1, 2880); }
SECTION("vicin") { test_dac_caller(defs::VICIN, 1708); }
SECTION("vcas") { test_dac_caller(defs::VCAS, 1800); }
SECTION("vrpreamp") { test_dac_caller(defs::VRPREAMP, 1100); }
SECTION("vcal_n") { test_dac_caller(defs::VCAL_N, 1100); }
SECTION("vipre") { test_dac_caller(defs::VIPRE, 2624); }
SECTION("vishaper") { test_dac_caller(defs::VISHAPER, 1708); }
SECTION("vcal_p") { test_dac_caller(defs::VCAL_P, 1712); }
SECTION("vtrim") { test_dac_caller(defs::VTRIM, 2800); }
SECTION("vdcsh") { test_dac_caller(defs::VDCSH, 800); }
SECTION("vthreshold") {
// Read out individual vcmp to be able to reset after
// the test is done