mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 14:38:14 +02:00
Merge branch 'developer' into g225gui
This commit is contained in:
commit
a1888bf7c9
@ -33,6 +33,7 @@ This document describes the differences between v6.1.0 and v6.0.0.
|
|||||||
- fixed datastream disabling for eiger. Its only available in 10g mode.
|
- fixed datastream disabling for eiger. Its only available in 10g mode.
|
||||||
- m3 server crash (vthrehsold)
|
- m3 server crash (vthrehsold)
|
||||||
- allow vtrim to be interpolated for Eiger settings
|
- allow vtrim to be interpolated for Eiger settings
|
||||||
|
- m3 setThresholdEnergy and setAllThresholdEnergy was overwriting gaincaps with settings enum
|
||||||
|
|
||||||
|
|
||||||
2. Resolved Issues
|
2. Resolved Issues
|
||||||
|
@ -1924,7 +1924,7 @@ class Detector(CppDetectorApi):
|
|||||||
def datastream(self):
|
def datastream(self):
|
||||||
"""
|
"""
|
||||||
datastream [left|right] [0, 1]
|
datastream [left|right] [0, 1]
|
||||||
[Eiger] Enables or disables data streaming from left or/and right side of detector. 1 (enabled) by default.
|
[Eiger] Enables or disables data streaming from left or/and right side of detector for 10GbE mode. 1 (enabled) by default.
|
||||||
"""
|
"""
|
||||||
result = {}
|
result = {}
|
||||||
for port in [defs.LEFT, defs.RIGHT]:
|
for port in [defs.LEFT, defs.RIGHT]:
|
||||||
|
Binary file not shown.
@ -2105,6 +2105,9 @@ int setDataStream(enum portPosition port, int enable) {
|
|||||||
LOG(logERROR, ("Invalid setDataStream enable argument: %d\n", enable));
|
LOG(logERROR, ("Invalid setDataStream enable argument: %d\n", enable));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
LOG(logINFO,
|
||||||
|
("%s 10GbE %s datastream\n", (enable ? "Enabling" : "Disabling"),
|
||||||
|
(port == LEFT ? "left" : "right")));
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (port == LEFT) {
|
if (port == LEFT) {
|
||||||
eiger_virtual_left_datastream = enable;
|
eiger_virtual_left_datastream = enable;
|
||||||
|
@ -8266,9 +8266,6 @@ int get_datastream(int file_des) {
|
|||||||
"Only left and right allowed\n",
|
"Only left and right allowed\n",
|
||||||
arg);
|
arg);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else if (enableTenGigabitEthernet(GET_FLAG) == 0) {
|
|
||||||
retval = 1;
|
|
||||||
LOG(logINFO, ("Datastream always enabled for 1g\n"));
|
|
||||||
} else {
|
} else {
|
||||||
ret = getDataStream(arg, &retval);
|
ret = getDataStream(arg, &retval);
|
||||||
LOG(logDEBUG1, ("datastream (%s) retval: %u\n",
|
LOG(logDEBUG1, ("datastream (%s) retval: %u\n",
|
||||||
@ -8315,14 +8312,6 @@ int set_datastream(int file_des) {
|
|||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not %s. Invalid enable %d. \n", msg, enable);
|
sprintf(mess, "Could not %s. Invalid enable %d. \n", msg, enable);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else if (enableTenGigabitEthernet(GET_FLAG) == 0 && enable == 0) {
|
|
||||||
ret = FAIL;
|
|
||||||
sprintf(mess,
|
|
||||||
"Could not %s. Disabling is only enabled in 10g mode.\n",
|
|
||||||
msg);
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
} else if (enableTenGigabitEthernet(GET_FLAG) == 0 && enable == 1) {
|
|
||||||
LOG(logINFO, ("Datastream always enabled for 1g\n"));
|
|
||||||
} else {
|
} else {
|
||||||
ret = setDataStream(port, enable);
|
ret = setDataStream(port, enable);
|
||||||
if (ret == FAIL) {
|
if (ret == FAIL) {
|
||||||
|
@ -1147,8 +1147,8 @@ class Detector {
|
|||||||
Result<bool> getDataStream(const defs::portPosition port,
|
Result<bool> getDataStream(const defs::portPosition port,
|
||||||
Positions pos = {}) const;
|
Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Eiger] enable or disable data streaming from left or right of detector.
|
/** [Eiger] enable or disable data streaming from left or right of detector
|
||||||
* Default: enabled
|
* for 10GbE. Default: enabled
|
||||||
*/
|
*/
|
||||||
void setDataStream(const defs::portPosition port, const bool enable,
|
void setDataStream(const defs::portPosition port, const bool enable,
|
||||||
Positions pos = {});
|
Positions pos = {});
|
||||||
|
@ -1804,7 +1804,9 @@ std::string CmdProxy::DataStream(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[left|right] [0, 1]\n\t[Eiger] Enables or disables data "
|
os << "[left|right] [0, 1]\n\t[Eiger] Enables or disables data "
|
||||||
"streaming from left or/and right side of detector. 1 (enabled) "
|
"streaming from left or/and right side of detector for 10 GbE "
|
||||||
|
"mode. "
|
||||||
|
"1 (enabled) "
|
||||||
"by default."
|
"by default."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
|
@ -214,9 +214,21 @@ void Module::setThresholdEnergy(int e_eV, detectorSettings isettings,
|
|||||||
myMod.iodelay = myMod1.iodelay;
|
myMod.iodelay = myMod1.iodelay;
|
||||||
myMod.tau =
|
myMod.tau =
|
||||||
linearInterpolation(e_eV, trim1, trim2, myMod1.tau, myMod2.tau);
|
linearInterpolation(e_eV, trim1, trim2, myMod1.tau, myMod2.tau);
|
||||||
|
// m3, reg is used for gaincaps
|
||||||
|
if (shm()->detType == MYTHEN3) {
|
||||||
|
if (myMod1.reg != myMod2.reg) {
|
||||||
|
throw RuntimeError(
|
||||||
|
"setThresholdEnergyAndSettings: gaincaps do not "
|
||||||
|
"match between files");
|
||||||
|
}
|
||||||
|
myMod.reg = myMod1.reg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// m3, reg is used for gaincaps
|
||||||
|
if (shm()->detType != MYTHEN3) {
|
||||||
|
myMod.reg = isettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
myMod.reg = isettings;
|
|
||||||
myMod.eV[0] = e_eV;
|
myMod.eV[0] = e_eV;
|
||||||
setModule(myMod, trimbits);
|
setModule(myMod, trimbits);
|
||||||
if (getSettings() != isettings) {
|
if (getSettings() != isettings) {
|
||||||
@ -231,6 +243,7 @@ void Module::setThresholdEnergy(int e_eV, detectorSettings isettings,
|
|||||||
|
|
||||||
void Module::setAllThresholdEnergy(std::array<int, 3> e_eV,
|
void Module::setAllThresholdEnergy(std::array<int, 3> e_eV,
|
||||||
detectorSettings isettings, bool trimbits) {
|
detectorSettings isettings, bool trimbits) {
|
||||||
|
// only mythen3
|
||||||
if (shm()->trimEnergies.empty()) {
|
if (shm()->trimEnergies.empty()) {
|
||||||
throw RuntimeError(
|
throw RuntimeError(
|
||||||
"Trim energies have not been defined for this module yet!");
|
"Trim energies have not been defined for this module yet!");
|
||||||
@ -311,6 +324,13 @@ void Module::setAllThresholdEnergy(std::array<int, 3> e_eV,
|
|||||||
|
|
||||||
myMods[i] = interpolateTrim(&myMod1, &myMod2, energy[i], trim1,
|
myMods[i] = interpolateTrim(&myMod1, &myMod2, energy[i], trim1,
|
||||||
trim2, trimbits);
|
trim2, trimbits);
|
||||||
|
// gaincaps
|
||||||
|
if (myMod1.reg != myMod2.reg) {
|
||||||
|
throw RuntimeError("setAllThresholdEnergy: gaincaps do not "
|
||||||
|
"match between files for energy (eV) " +
|
||||||
|
std::to_string(energy[i]));
|
||||||
|
}
|
||||||
|
myMods[i].reg = myMod1.reg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,6 +377,11 @@ void Module::setAllThresholdEnergy(std::array<int, 3> e_eV,
|
|||||||
for (int i = 0; i < myMod.nchan; ++i) {
|
for (int i = 0; i < myMod.nchan; ++i) {
|
||||||
myMod.chanregs[i] = myMods[i % 3].chanregs[i];
|
myMod.chanregs[i] = myMods[i % 3].chanregs[i];
|
||||||
}
|
}
|
||||||
|
// gain caps
|
||||||
|
if (myMods[0].reg != myMods[1].reg || myMods[1].reg != myMods[2].reg) {
|
||||||
|
throw RuntimeError("setAllThresholdEnergy: gaincaps do not "
|
||||||
|
"match between files for all energies");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
myMod.reg = isettings;
|
myMod.reg = isettings;
|
||||||
@ -3330,9 +3355,9 @@ sls_detector_module Module::interpolateTrim(sls_detector_module *a,
|
|||||||
dacs_to_copy.end(),
|
dacs_to_copy.end(),
|
||||||
{E_SVP, E_SVN, E_VTGSTV, E_RXB_RB, E_RXB_LB, E_VCN, E_VIS});
|
{E_SVP, E_SVN, E_VTGSTV, E_RXB_RB, E_RXB_LB, E_VCN, E_VIS});
|
||||||
// interpolate vrf, vcmp, vcp
|
// interpolate vrf, vcmp, vcp
|
||||||
dacs_to_interpolate.insert(
|
dacs_to_interpolate.insert(dacs_to_interpolate.end(),
|
||||||
dacs_to_interpolate.end(),
|
{E_VTR, E_VRF, E_VCMP_LL, E_VCMP_LR,
|
||||||
{E_VTR, E_VRF, E_VCMP_LL, E_VCMP_LR, E_VCMP_RL, E_VCMP_RR, E_VCP, E_VRS});
|
E_VCMP_RL, E_VCMP_RR, E_VCP, E_VRS});
|
||||||
} else {
|
} else {
|
||||||
dacs_to_copy.insert(dacs_to_copy.end(),
|
dacs_to_copy.insert(dacs_to_copy.end(),
|
||||||
{M_VCASSH, M_VRSHAPER, M_VRSHAPER_N, M_VIPRE_OUT,
|
{M_VCASSH, M_VRSHAPER, M_VRSHAPER_N, M_VIPRE_OUT,
|
||||||
|
@ -1466,6 +1466,21 @@ void Implementation::setTenGigaEnable(const bool b) {
|
|||||||
|
|
||||||
generalData->SetTenGigaEnable(b);
|
generalData->SetTenGigaEnable(b);
|
||||||
SetupFifoStructure();
|
SetupFifoStructure();
|
||||||
|
|
||||||
|
// datastream can be disabled/enabled only for Eiger 10GbE
|
||||||
|
if (detType == EIGER) {
|
||||||
|
if (!b) {
|
||||||
|
detectorDataStream[LEFT] = 1;
|
||||||
|
detectorDataStream[RIGHT] = 1;
|
||||||
|
} else {
|
||||||
|
detectorDataStream[LEFT] = detectorDataStream10GbE[LEFT];
|
||||||
|
detectorDataStream[RIGHT] = detectorDataStream10GbE[RIGHT];
|
||||||
|
}
|
||||||
|
LOG(logINFO) << "Detector datastream updated [Left: "
|
||||||
|
<< sls::ToString(detectorDataStream[LEFT])
|
||||||
|
<< ", Right: "
|
||||||
|
<< sls::ToString(detectorDataStream[RIGHT]) << "]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO) << "Ten Giga: " << (tengigaEnable ? "enabled" : "disabled");
|
LOG(logINFO) << "Ten Giga: " << (tengigaEnable ? "enabled" : "disabled");
|
||||||
LOG(logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame);
|
LOG(logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame);
|
||||||
@ -1532,9 +1547,9 @@ bool Implementation::getDetectorDataStream(const portPosition port) const {
|
|||||||
void Implementation::setDetectorDataStream(const portPosition port,
|
void Implementation::setDetectorDataStream(const portPosition port,
|
||||||
const bool enable) {
|
const bool enable) {
|
||||||
int index = (port == LEFT ? 0 : 1);
|
int index = (port == LEFT ? 0 : 1);
|
||||||
detectorDataStream[index] = enable;
|
detectorDataStream10GbE[index] = enable;
|
||||||
LOG(logINFO) << "Detector datastream (" << sls::ToString(port)
|
LOG(logINFO) << "Detector 10GbE datastream (" << sls::ToString(port)
|
||||||
<< " Port): " << sls::ToString(detectorDataStream[index]);
|
<< " Port): " << sls::ToString(detectorDataStream10GbE[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Implementation::getReadNRows() const { return readNRows; }
|
int Implementation::getReadNRows() const { return readNRows; }
|
||||||
|
@ -356,6 +356,7 @@ class Implementation : private virtual slsDetectorDefs {
|
|||||||
bool quadEnable{false};
|
bool quadEnable{false};
|
||||||
bool activated{true};
|
bool activated{true};
|
||||||
std::array<bool, 2> detectorDataStream = {{true, true}};
|
std::array<bool, 2> detectorDataStream = {{true, true}};
|
||||||
|
std::array<bool, 2> detectorDataStream10GbE = {{true, true}};
|
||||||
int readNRows{0};
|
int readNRows{0};
|
||||||
int thresholdEnergyeV{-1};
|
int thresholdEnergyeV{-1};
|
||||||
std::array<int, 3> thresholdAllEnergyeV = {{-1, -1, -1}};
|
std::array<int, 3> thresholdAllEnergyeV = {{-1, -1, -1}};
|
||||||
|
@ -12,4 +12,4 @@
|
|||||||
#define APIJUNGFRAU 0x220203
|
#define APIJUNGFRAU 0x220203
|
||||||
#define APIMYTHEN3 0x220203
|
#define APIMYTHEN3 0x220203
|
||||||
#define APIMOENCH 0x220203
|
#define APIMOENCH 0x220203
|
||||||
#define APIEIGER 0x220204
|
#define APIEIGER 0x220207
|
||||||
|
Loading…
x
Reference in New Issue
Block a user