mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-18 15:57:13 +02:00
exposing receiver thread ids to client (#102)
* exposing receiver thread ids to client Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
This commit is contained in:
@ -331,6 +331,25 @@ std::string CmdProxy::DetectorSize(int action) {
|
||||
return os.str();
|
||||
}
|
||||
|
||||
std::string CmdProxy::SettingsList(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "\n\tList of settings implemented for this detector" << '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
if (!args.empty()) {
|
||||
WrongNumberOfParameters(0);
|
||||
}
|
||||
auto t = det->getSettingsList();
|
||||
os << ToString(t) << "\n";
|
||||
} else if (action == defs::PUT_ACTION) {
|
||||
throw sls::RuntimeError("Cannot put");
|
||||
} else {
|
||||
throw sls::RuntimeError("Unknown action");
|
||||
}
|
||||
return os.str();
|
||||
}
|
||||
|
||||
std::string CmdProxy::GapPixels(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
@ -877,7 +896,11 @@ std::string CmdProxy::DacList(int action) {
|
||||
os << "\n\tGets the list of commands for every dac for this detector."
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
os << sls::ToString(DacCommands()) << '\n';
|
||||
if (!args.empty()) {
|
||||
WrongNumberOfParameters(0);
|
||||
}
|
||||
auto t = det->getDacList();
|
||||
os << ToString(t) << '\n';
|
||||
} else if (action == defs::PUT_ACTION) {
|
||||
throw sls::RuntimeError("Cannot put");
|
||||
} else {
|
||||
@ -890,29 +913,32 @@ std::string CmdProxy::DacValues(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "\n\tGets the list of commands for every dac for this detector."
|
||||
os << "[(optional unit) mv] \n\tGets the list of commands for every "
|
||||
"dac for this detector."
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
std::vector<std::string> names = DacCommands();
|
||||
std::vector<std::string> res(names.size());
|
||||
std::vector<std::string> args;
|
||||
for (size_t i = 0; i < names.size(); ++i) {
|
||||
// for multiple values for each command (to use ToString on vector)
|
||||
std::ostringstream each;
|
||||
size_t spacepos = names[i].find(' ');
|
||||
// chip test board (dac)
|
||||
if (spacepos != std::string::npos) {
|
||||
if (args.empty()) {
|
||||
args.resize(1);
|
||||
}
|
||||
args[0] = names[i].substr(spacepos + 1 - 1);
|
||||
names[i] = names[i].substr(0, spacepos);
|
||||
bool mv = false;
|
||||
if (args.size() == 1) {
|
||||
if (args[0] != "mv") {
|
||||
throw sls::RuntimeError("Unknown argument " + args[0] +
|
||||
". Did you mean mv?");
|
||||
}
|
||||
Call(names[i], args, det_id, action, each);
|
||||
res[i] = each.str();
|
||||
res[i].pop_back(); // remove last \n character
|
||||
mv = true;
|
||||
} else if (args.size() > 1) {
|
||||
WrongNumberOfParameters(1);
|
||||
}
|
||||
os << sls::ToString(res) << '\n';
|
||||
auto t = det->getDacList();
|
||||
os << '[';
|
||||
auto it = t.cbegin();
|
||||
os << ToString(*it) << ' '
|
||||
<< OutString(det->getDAC(*it++, mv, {det_id}))
|
||||
<< (args.size() > 0 ? " mv" : "");
|
||||
while (it != t.cend()) {
|
||||
os << ", " << ToString(*it) << ' '
|
||||
<< OutString(det->getDAC(*it++, mv, {det_id}))
|
||||
<< (args.size() > 0 ? " mv" : "");
|
||||
}
|
||||
os << "]\n";
|
||||
} else if (action == defs::PUT_ACTION) {
|
||||
throw sls::RuntimeError("Cannot put");
|
||||
} else {
|
||||
@ -921,53 +947,6 @@ std::string CmdProxy::DacValues(int action) {
|
||||
return os.str();
|
||||
}
|
||||
|
||||
std::vector<std::string> CmdProxy::DacCommands() {
|
||||
switch (det->getDetectorType().squash(defs::GENERIC)) {
|
||||
case defs::EIGER:
|
||||
return std::vector<std::string>{
|
||||
"vsvp", "vtr", "vrf", "vrs", "vsvn", "vtgstv",
|
||||
"vcmp_ll", "vcmp_lr", "vcal", "vcmp_rl", "rxb_rb", "rxb_lb",
|
||||
"vcmp_rr", "vcp", "vcn", "vis", "vthreshold"};
|
||||
break;
|
||||
case defs::JUNGFRAU:
|
||||
return std::vector<std::string>{"vb_comp", "vdd_prot", "vin_com",
|
||||
"vref_prech", "vb_pixbuf", "vb_ds",
|
||||
"vref_ds", "vref_comp"};
|
||||
break;
|
||||
case defs::GOTTHARD:
|
||||
return std::vector<std::string>{"vref_ds", "vcascn_pb", "vcascp_pb",
|
||||
"vout_cm", "vcasc_out", "vin_cm",
|
||||
"vref_comp", "ib_test_c"};
|
||||
break;
|
||||
case defs::GOTTHARD2:
|
||||
return std::vector<std::string>{
|
||||
"vref_h_adc", "vb_comp_fe", "vb_comp_adc", "vcom_cds",
|
||||
"vref_rstore", "vb_opa_1st", "vref_comp_fe", "vcom_adc1",
|
||||
"vref_prech", "vref_l_adc", "vref_cds", "vb_cs",
|
||||
"vb_opa_fd", "vcom_adc2"};
|
||||
break;
|
||||
case defs::MYTHEN3:
|
||||
return std::vector<std::string>{
|
||||
"vcassh", "vth2", "vshaper", "vshaperneg", "vipre_out", "vth3",
|
||||
"vth1", "vicin", "vcas", "vpreamp", "vpl", "vipre",
|
||||
"viinsh", "vph", "vtrim", "vdcsh"};
|
||||
break;
|
||||
case defs::MOENCH:
|
||||
return std::vector<std::string>{"vbp_colbuf", "vipre", "vin_cm",
|
||||
"vb_sda", "vcasc_sfp", "vout_cm",
|
||||
"vipre_cds", "ibias_sfp"};
|
||||
break;
|
||||
case defs::CHIPTESTBOARD:
|
||||
return std::vector<std::string>{
|
||||
"dac 0", "dac 1", "dac 2", "dac 3", "dac 4", "dac 5",
|
||||
"dac 6", "dac 7", "dac 8", "dac 9", "dac 10", "dac 11",
|
||||
"dac 12", "dac 13", "dac 14", "dac 15", "dac 16", "dac 17"};
|
||||
break;
|
||||
default:
|
||||
throw sls::RuntimeError("Unknown detector type.");
|
||||
}
|
||||
}
|
||||
|
||||
/* acquisition */
|
||||
|
||||
std::string CmdProxy::ReceiverStatus(int action) {
|
||||
|
@ -478,8 +478,19 @@ class CmdProxy {
|
||||
{"digitest", "imagetest"},
|
||||
|
||||
/** temperature */
|
||||
|
||||
/** dacs */
|
||||
{"vtr", "vtrim"},
|
||||
{"vrf", "vrpreamp"},
|
||||
{"vrs", "vrshaper"},
|
||||
{"vcall", "vcal"},
|
||||
{"vis", "vishaper"},
|
||||
{"vshaper", "vrshaper"},
|
||||
{"vpreamp", "vrpreamp"},
|
||||
{"vshaperneg", "vrshaper_n"},
|
||||
{"viinsh", "vishaper"},
|
||||
{"vpl", "vcal_n"},
|
||||
{"vph", "vcal_p"},
|
||||
|
||||
/* acquisition */
|
||||
{"busy", "clearbusy"},
|
||||
@ -562,6 +573,7 @@ class CmdProxy {
|
||||
{"detectornumber", &CmdProxy::detectornumber},
|
||||
{"type", &CmdProxy::type},
|
||||
{"detsize", &CmdProxy::DetectorSize},
|
||||
{"settingslist", &CmdProxy::SettingsList},
|
||||
{"settings", &CmdProxy::settings},
|
||||
{"trimbits", &CmdProxy::trimbits},
|
||||
{"trimval", &CmdProxy::trimval},
|
||||
@ -608,9 +620,9 @@ class CmdProxy {
|
||||
{"vthreshold", &CmdProxy::vthreshold},
|
||||
{"vsvp", &CmdProxy::vsvp},
|
||||
{"vsvn", &CmdProxy::vsvn},
|
||||
{"vtr", &CmdProxy::vtr},
|
||||
{"vrf", &CmdProxy::vrf},
|
||||
{"vrs", &CmdProxy::vrs},
|
||||
{"vtrim", &CmdProxy::vtrim},
|
||||
{"vrpreamp", &CmdProxy::vrpreamp},
|
||||
{"vrshaper", &CmdProxy::vrshaper},
|
||||
{"vtgstv", &CmdProxy::vtgstv},
|
||||
{"vcmp_ll", &CmdProxy::vcmp_ll},
|
||||
{"vcmp_lr", &CmdProxy::vcmp_lr},
|
||||
@ -621,7 +633,7 @@ class CmdProxy {
|
||||
{"rxb_lb", &CmdProxy::rxb_lb},
|
||||
{"vcp", &CmdProxy::vcp},
|
||||
{"vcn", &CmdProxy::vcn},
|
||||
{"vis", &CmdProxy::vis},
|
||||
{"vishaper", &CmdProxy::vishaper},
|
||||
{"iodelay", &CmdProxy::iodelay},
|
||||
{"vref_ds", &CmdProxy::vref_ds},
|
||||
{"vcascn_pb", &CmdProxy::vcascn_pb},
|
||||
@ -631,18 +643,14 @@ class CmdProxy {
|
||||
{"vin_cm", &CmdProxy::vin_cm},
|
||||
{"vref_comp", &CmdProxy::vref_comp},
|
||||
{"ib_test_c", &CmdProxy::ib_test_c},
|
||||
{"vpreamp", &CmdProxy::vpreamp},
|
||||
{"vshaper", &CmdProxy::vshaper},
|
||||
{"vshaperneg", &CmdProxy::vshaperneg},
|
||||
{"vrshaper_n", &CmdProxy::vrshaper_n},
|
||||
{"vipre", &CmdProxy::vipre},
|
||||
{"viinsh", &CmdProxy::viinsh},
|
||||
{"vdcsh", &CmdProxy::vdcsh},
|
||||
{"vth1", &CmdProxy::vth1},
|
||||
{"vth2", &CmdProxy::vth2},
|
||||
{"vth3", &CmdProxy::vth3},
|
||||
{"vpl", &CmdProxy::vpl},
|
||||
{"vph", &CmdProxy::vph},
|
||||
{"vtrim", &CmdProxy::vtrim},
|
||||
{"vcal_n", &CmdProxy::vcal_n},
|
||||
{"vcal_p", &CmdProxy::vcal_p},
|
||||
{"vcassh", &CmdProxy::vcassh},
|
||||
{"vcas", &CmdProxy::vcas},
|
||||
{"vicin", &CmdProxy::vicin},
|
||||
@ -729,6 +737,7 @@ class CmdProxy {
|
||||
{"rx_realudpsocksize", &CmdProxy::rx_realudpsocksize},
|
||||
{"rx_lock", &CmdProxy::rx_lock},
|
||||
{"rx_lastclient", &CmdProxy::rx_lastclient},
|
||||
{"rx_threads", &CmdProxy::rx_threads},
|
||||
|
||||
/* File */
|
||||
{"fformat", &CmdProxy::fformat},
|
||||
@ -923,6 +932,7 @@ class CmdProxy {
|
||||
std::string PackageVersion(int action);
|
||||
std::string ClientVersion(int action);
|
||||
std::string DetectorSize(int action);
|
||||
std::string SettingsList(int action);
|
||||
std::string GapPixels(int action);
|
||||
/* acquisition parameters */
|
||||
std::string acquire(int action);
|
||||
@ -940,7 +950,6 @@ class CmdProxy {
|
||||
std::string Dac(int action);
|
||||
std::string DacList(int action);
|
||||
std::string DacValues(int action);
|
||||
std::vector<std::string> DacCommands();
|
||||
/* acquisition */
|
||||
std::string ReceiverStatus(int action);
|
||||
std::string DetectorStatus(int action);
|
||||
@ -1180,29 +1189,33 @@ class CmdProxy {
|
||||
|
||||
/* dacs */
|
||||
|
||||
DAC_COMMAND(vthreshold, getDAC, setDAC, defs::THRESHOLD,
|
||||
DAC_COMMAND(vthreshold, getDAC, setDAC, defs::VTHRESHOLD,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger][Mythen3] "
|
||||
"Detector threshold voltage for single photon counters.");
|
||||
|
||||
DAC_COMMAND(vsvp, getDAC, setDAC, defs::SVP,
|
||||
DAC_COMMAND(vsvp, getDAC, setDAC, defs::VSVP,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
|
||||
DAC_COMMAND(vsvn, getDAC, setDAC, defs::SVN,
|
||||
DAC_COMMAND(vsvn, getDAC, setDAC, defs::VSVN,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
"?? \n\t[Mythen3] voltage "
|
||||
"to define feedback resistance of the first shaper"); // TODO
|
||||
|
||||
DAC_COMMAND(vtr, getDAC, setDAC, defs::VTR,
|
||||
DAC_COMMAND(vtrim, getDAC, setDAC, defs::VTRIM,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
"?? \n\t[Mythen3] Dac for "
|
||||
"the voltage defining the trim bit size."); // TODO
|
||||
|
||||
DAC_COMMAND(vrf, getDAC, setDAC, defs::VRF,
|
||||
DAC_COMMAND(vrpreamp, getDAC, setDAC, defs::VRPREAMP,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
"?? \n\t[Mythen3] voltage "
|
||||
"to define the preamplifier feedback resistance."); // TODO
|
||||
|
||||
DAC_COMMAND(vrs, getDAC, setDAC, defs::VRS,
|
||||
DAC_COMMAND(vrshaper, getDAC, setDAC, defs::VRSHAPER,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
"?? \n\t[Mythen3] voltage to define feedback resistance of "
|
||||
"the first shaper"); // TODO
|
||||
|
||||
DAC_COMMAND(vtgstv, getDAC, setDAC, defs::VTGSTV,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
@ -1216,7 +1229,7 @@ class CmdProxy {
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
|
||||
DAC_COMMAND(vcal, getDAC, setDAC, defs::CAL,
|
||||
DAC_COMMAND(vcal, getDAC, setDAC, defs::VCAL,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
|
||||
@ -1244,9 +1257,10 @@ class CmdProxy {
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
|
||||
DAC_COMMAND(vis, getDAC, setDAC, defs::VIS,
|
||||
DAC_COMMAND(vishaper, getDAC, setDAC, defs::VISHAPER,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
"?? "); // TODO
|
||||
"?? \n\t[Mythen3] Dac for "
|
||||
"the bias current for the shaper."); // TODO
|
||||
|
||||
DAC_COMMAND(iodelay, getDAC, setDAC, defs::IO_DELAY,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
|
||||
@ -1284,15 +1298,7 @@ class CmdProxy {
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for "
|
||||
"?? "); // TODO
|
||||
|
||||
DAC_COMMAND(vpreamp, getDAC, setDAC, defs::PREAMP,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage "
|
||||
"to define the preamplifier feedback resistance.");
|
||||
|
||||
DAC_COMMAND(vshaper, getDAC, setDAC, defs::SHAPER1,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage "
|
||||
"to define feedback resistance of the first shaper");
|
||||
|
||||
DAC_COMMAND(vshaperneg, getDAC, setDAC, defs::SHAPER2,
|
||||
DAC_COMMAND(vrshaper_n, getDAC, setDAC, defs::VRSHAPER_N,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage "
|
||||
"to define feedback resistance of the second shaper.");
|
||||
|
||||
@ -1301,15 +1307,11 @@ class CmdProxy {
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the "
|
||||
"preamplifier's input transistor current.\n\t[Moench] Dac for 1");
|
||||
|
||||
DAC_COMMAND(viinsh, getDAC, setDAC, defs::VIINSH,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the bias current for the shaper.");
|
||||
|
||||
DAC_COMMAND(vdcsh, getDAC, setDAC, defs::VDCSH,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the reference (DC) voltage for the shaper.");
|
||||
|
||||
DAC_COMMAND(vth1, getDAC, setDAC, defs::THRESHOLD,
|
||||
DAC_COMMAND(vth1, getDAC, setDAC, defs::VTH1,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"first detector threshold voltage.");
|
||||
|
||||
@ -1321,23 +1323,19 @@ class CmdProxy {
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"third detector threshold voltage.");
|
||||
|
||||
DAC_COMMAND(vpl, getDAC, setDAC, defs::VPL,
|
||||
DAC_COMMAND(vcal_n, getDAC, setDAC, defs::VCAL_N,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the low voltage for analog pulsing.");
|
||||
|
||||
DAC_COMMAND(vph, getDAC, setDAC, defs::CALIBRATION_PULSE,
|
||||
DAC_COMMAND(vcal_p, getDAC, setDAC, defs::VCAL_P,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the high voltage for analog pulsing.");
|
||||
|
||||
DAC_COMMAND(vtrim, getDAC, setDAC, defs::TRIMBIT_SIZE,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the voltage defining the trim bit size.");
|
||||
|
||||
DAC_COMMAND(vcassh, getDAC, setDAC, defs::CASSH,
|
||||
DAC_COMMAND(vcassh, getDAC, setDAC, defs::VCASSH,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the shaper's cascode voltage.");
|
||||
|
||||
DAC_COMMAND(vcas, getDAC, setDAC, defs::CAS,
|
||||
DAC_COMMAND(vcas, getDAC, setDAC, defs::VCAS,
|
||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
|
||||
"the preamplifier's cascode voltage.");
|
||||
|
||||
@ -1663,6 +1661,14 @@ class CmdProxy {
|
||||
rx_lastclient, getRxLastClientIP,
|
||||
"\n\tClient IP Address that last communicated with the receiver.");
|
||||
|
||||
GET_COMMAND(
|
||||
rx_threads, getRxThreadIds,
|
||||
"\n\tGet thread ids from the receiver in order of [parent, tcp, "
|
||||
"listener 0, "
|
||||
"processor 0, streamer 0, listener 1, processor 1, streamer 1]. If no "
|
||||
"streamer yet or there is no second interface, it gives 0 in its "
|
||||
"place.");
|
||||
|
||||
/* File */
|
||||
|
||||
INTEGER_COMMAND(
|
||||
|
@ -141,6 +141,38 @@ void Detector::setDetectorSize(const defs::xy value) {
|
||||
pimpl->setNumberOfChannels(value);
|
||||
}
|
||||
|
||||
std::vector<defs::detectorSettings> Detector::getSettingsList() const {
|
||||
switch (getDetectorType().squash()) {
|
||||
case defs::EIGER:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::STANDARD, defs::HIGHGAIN, defs::LOWGAIN, defs::VERYHIGHGAIN,
|
||||
defs::VERYLOWGAIN};
|
||||
case defs::GOTTHARD:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::HIGHGAIN, defs::DYNAMICGAIN, defs::LOWGAIN, defs::MEDIUMGAIN,
|
||||
defs::VERYHIGHGAIN};
|
||||
case defs::JUNGFRAU:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::DYNAMICGAIN, defs::DYNAMICHG0, defs::FIXGAIN1,
|
||||
defs::FIXGAIN2, defs::FORCESWITCHG1, defs::FORCESWITCHG2};
|
||||
case defs::GOTTHARD2:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::DYNAMICGAIN, defs::DYNAMICHG0, defs::FIXGAIN1,
|
||||
defs::FIXGAIN2};
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::G1_HIGHGAIN, defs::G1_LOWGAIN,
|
||||
defs::G2_HIGHCAP_HIGHGAIN, defs::G2_HIGHCAP_LOWGAIN,
|
||||
defs::G2_LOWCAP_HIGHGAIN, defs::G2_LOWCAP_LOWGAIN,
|
||||
defs::G4_HIGHGAIN, defs::G4_LOWGAIN};
|
||||
case defs::CHIPTESTBOARD:
|
||||
case defs::MYTHEN3:
|
||||
throw RuntimeError("Settings not implemented for this detector");
|
||||
default:
|
||||
throw RuntimeError("Unknown detector type");
|
||||
}
|
||||
}
|
||||
|
||||
Result<defs::detectorSettings> Detector::getSettings(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getSettings, pos);
|
||||
}
|
||||
@ -405,6 +437,53 @@ Result<int> Detector::getTemperature(defs::dacIndex index,
|
||||
return res;
|
||||
}
|
||||
|
||||
std::vector<defs::dacIndex> Detector::getDacList() const {
|
||||
std::vector<defs::dacIndex> retval;
|
||||
switch (getDetectorType().squash()) {
|
||||
case defs::EIGER:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VSVP, defs::VTRIM, defs::VRPREAMP, defs::VRSHAPER,
|
||||
defs::VSVN, defs::VTGSTV, defs::VCMP_LL, defs::VCMP_LR,
|
||||
defs::VCAL, defs::VCMP_RL, defs::RXB_RB, defs::RXB_LB,
|
||||
defs::VCMP_RR, defs::VCP, defs::VCN, defs::VISHAPER,
|
||||
defs::VTHRESHOLD};
|
||||
case defs::GOTTHARD:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VREF_DS, defs::VCASCN_PB, defs::VCASCP_PB, defs::VOUT_CM,
|
||||
defs::VCASC_OUT, defs::VIN_CM, defs::VREF_COMP, defs::IB_TESTC};
|
||||
case defs::JUNGFRAU:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VB_COMP, defs::VDD_PROT, defs::VIN_COM, defs::VREF_PRECH,
|
||||
defs::VB_PIXBUF, defs::VB_DS, defs::VREF_DS, defs::VREF_COMP};
|
||||
case defs::GOTTHARD2:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VREF_H_ADC, defs::VB_COMP_FE, defs::VB_COMP_ADC,
|
||||
defs::VCOM_CDS, defs::VREF_RSTORE, defs::VB_OPA_1ST,
|
||||
defs::VREF_COMP_FE, defs::VCOM_ADC1, defs::VREF_PRECH,
|
||||
defs::VREF_L_ADC, defs::VREF_CDS, defs::VB_CS,
|
||||
defs::VB_OPA_FD, defs::VCOM_ADC2};
|
||||
case defs::MYTHEN3:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VCASSH, defs::VTH2, defs::VRSHAPER, defs::VRSHAPER_N,
|
||||
defs::VIPRE_OUT, defs::VTH3, defs::VTH1, defs::VICIN,
|
||||
defs::VCAS, defs::VRPREAMP, defs::VCAL_N, defs::VIPRE,
|
||||
defs::VISHAPER, defs::VCAL_P, defs::VTRIM, defs::VDCSH,
|
||||
defs::VTHRESHOLD};
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VBP_COLBUF, defs::VIPRE, defs::VIN_CM, defs::VB_SDA,
|
||||
defs::VCASC_SFP, defs::VOUT_CM, defs::VIPRE_CDS, defs::IBIAS_SFP};
|
||||
case defs::CHIPTESTBOARD:
|
||||
for (int i = 0; i != 18; ++i) {
|
||||
retval.push_back(static_cast<defs::dacIndex>(i));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw RuntimeError("Unknown detector type");
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
Result<int> Detector::getDAC(defs::dacIndex index, bool mV,
|
||||
Positions pos) const {
|
||||
return pimpl->Parallel(&Module::setDAC, pos, -1, index, mV);
|
||||
@ -759,6 +838,11 @@ Result<sls::IpAddr> Detector::getRxLastClientIP(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getReceiverLastClientIP, pos);
|
||||
}
|
||||
|
||||
Result<std::array<pid_t, NUM_RX_THREAD_IDS>>
|
||||
Detector::getRxThreadIds(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getReceiverThreadIds, pos);
|
||||
}
|
||||
|
||||
// File
|
||||
|
||||
Result<defs::fileFormat> Detector::getFileFormat(Positions pos) const {
|
||||
|
@ -289,7 +289,7 @@ template <typename Ret> Ret Module::sendToReceiver(int fnum) const {
|
||||
<< sizeof(Ret) << "]";
|
||||
Ret retval{};
|
||||
sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval));
|
||||
LOG(logDEBUG1) << "Got back: " << retval;
|
||||
LOG(logDEBUG1) << "Got back: " << ToString(retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -2614,6 +2614,11 @@ sls::IpAddr Module::getReceiverLastClientIP() const {
|
||||
return sendToReceiver<sls::IpAddr>(F_GET_LAST_RECEIVER_CLIENT_IP);
|
||||
}
|
||||
|
||||
std::array<pid_t, NUM_RX_THREAD_IDS> Module::getReceiverThreadIds() const {
|
||||
return sendToReceiver<std::array<pid_t, NUM_RX_THREAD_IDS>>(
|
||||
F_GET_RECEIVER_THREAD_IDS);
|
||||
}
|
||||
|
||||
void Module::exitReceiver() {
|
||||
LOG(logDEBUG1) << "Sending exit command to receiver server";
|
||||
sendToReceiver(F_EXIT_RECEIVER, nullptr, nullptr);
|
||||
|
@ -1309,6 +1309,8 @@ class Module : public virtual slsDetectorDefs {
|
||||
*/
|
||||
sls::IpAddr getReceiverLastClientIP() const;
|
||||
|
||||
std::array<pid_t, NUM_RX_THREAD_IDS> getReceiverThreadIds() const;
|
||||
|
||||
/**
|
||||
* Exits the receiver TCP server
|
||||
*/
|
||||
|
Reference in New Issue
Block a user