added the other gain modes

This commit is contained in:
maliakal_d 2021-08-03 18:02:42 +02:00
parent e20022f139
commit 0666afc642
6 changed files with 67 additions and 12 deletions

View File

@ -2201,8 +2201,8 @@ class Detector(CppDetectorApi):
[Jungfrau] Detector gain mode. Enum: gainMode
Note
-----
[Jungfrau] NORMAL_GAIN_MODE, FORCE_SWITCH_G1, FORCE_SWITCH_G2
[Jungfrau] NORMAL_GAIN_MODE, FORCE_SWITCH_G1, FORCE_SWITCH_G2, FIX_G1, FIX_G2, FIX_G0, FIX_HG0 \n
CAUTION: Do not use FIX_G0 and FIX_HG0 blindly, you can damage the detector!!!
"""
return element_if_equal(self.getGainMode())

View File

@ -1075,15 +1075,27 @@ enum detectorSettings setSettings(enum detectorSettings sett) {
configureChip();
}
return thisSettings;
return getSettings();
}
enum detectorSettings getSettings() { return thisSettings; }
enum detectorSettings getSettings() {
if (bus_r(DAQ_REG) & DAQ_HIGH_GAIN_MSK)
return DYNAMICHG0;
return DYNAMICGAIN;
}
enum gainMode getGainMode() {
uint32_t retval = bus_r(DAQ_REG) & DAQ_FRCE_SWTCH_GAIN_MSK;
uint32_t regval = bus_r(DAQ_REG);
uint32_t retval_force = regval & DAQ_FRCE_SWTCH_GAIN_MSK;
uint32_t retval_fix = regval & DAQ_FIX_GAIN_MSK;
uint32_t retval_cmp_rst = regval & DAQ_CMP_RST_MSK;
switch (retval) {
// only one set should be valid
if ((retval_force && retval_fix) || (retval_fix && retval_cmp_rst) ||
(retval_force && retval_cmp_rst)) {
LOG(logERROR, ("undefined gain mode. DAQ reg: 0x%x\n", regval));
}
switch (retval_force) {
case DAQ_FRCE_GAIN_STG_0_VAL:
return NORMAL_GAIN_MODE;
case DAQ_FRCE_GAIN_STG_1_VAL:
@ -1091,10 +1103,25 @@ enum gainMode getGainMode() {
case DAQ_FRCE_GAIN_STG_2_VAL:
return FORCE_SWITCH_G2;
default:
LOG(logERROR, ("This gain mode %d is not defined [DAQ reg: %d]\n",
(retval << DAQ_FRCE_SWTCH_GAIN_OFST), retval));
return -1;
break;
}
switch (retval_fix) {
case DAQ_FIX_GAIN_STG_1_VAL:
return FIX_G1;
case DAQ_FIX_GAIN_STG_2_VAL:
return FIX_G2;
default:
break;
}
if (retval_cmp_rst) {
if (getSettings() == DYNAMICGAIN) {
return FIX_G0;
}
return FIX_HG0;
}
LOG(logERROR, ("This gain mode is undefined [DAQ reg: %d]\n", regval));
return -1;
}
void setGainMode(enum gainMode mode) {

View File

@ -1179,7 +1179,9 @@ class Detector {
/** [Jungfrau]*/
Result<defs::gainMode> getGainMode(Positions pos = {}) const;
/** [Jungfrau] Options: NORMAL_GAIN_MODE, FORCE_SWITCH_G1, FORCE_SWITCH_G2\n
/** [Jungfrau] Options: NORMAL_GAIN_MODE, FORCE_SWITCH_G1, FORCE_SWITCH_G2,
* FIX_G1, FIX_G2, FIX_G0, FIX_HG0 \n\CAUTION: Do not use FIX_G0 and FIX_HG0
* blindly, you can damage the detector!!!\n
*/
void setGainMode(const defs::gainMode mode, Positions pos = {});

View File

@ -1877,7 +1877,9 @@ class CmdProxy {
INTEGER_COMMAND_VEC_ID(
gainmode, getGainMode, setGainMode,
sls::StringTo<slsDetectorDefs::gainMode>,
"[forceswitchg1, forceswitchg2]\n\t[Jungfrau] Gain mode.");
"[forceswitchg1|forceswitchg2|fixgain1|fixgain2|fixgain0|"
"fixhighgain0]\n\t[Jungfrau] Gain mode.\n\tCAUTION: Do not use "
"fixgain0 and fixhighgain0 blindly, you can damage the detector!!!");
/* Gotthard Specific */
TIME_GET_COMMAND(exptimel, getExptimeLeft,

View File

@ -414,7 +414,15 @@ typedef struct {
enum vetoAlgorithm { DEFAULT_ALGORITHM };
enum gainMode { NORMAL_GAIN_MODE, FORCE_SWITCH_G1, FORCE_SWITCH_G2 };
enum gainMode {
NORMAL_GAIN_MODE,
FORCE_SWITCH_G1,
FORCE_SWITCH_G2,
FIX_G1,
FIX_G2,
FIX_G0,
FIX_HG0
};
#ifdef __cplusplus

View File

@ -587,6 +587,14 @@ std::string ToString(const defs::gainMode s) {
return std::string("forceswitchg1");
case defs::FORCE_SWITCH_G2:
return std::string("forceswitchg2");
case defs::FIX_G1:
return std::string("fixg1");
case defs::FIX_G2:
return std::string("fixg2");
case defs::FIX_G0:
return std::string("fixg0");
case defs::FIX_HG0:
return std::string("fixhg0");
default:
return std::string("Unknown");
}
@ -982,6 +990,14 @@ template <> defs::gainMode StringTo(const std::string &s) {
return defs::FORCE_SWITCH_G1;
if (s == "forceswitchg2")
return defs::FORCE_SWITCH_G2;
if (s == "fixg1")
return defs::FIX_G1;
if (s == "fixg2")
return defs::FIX_G2;
if (s == "fixg0")
return defs::FIX_G0;
if (s == "fixhg0")
return defs::FIX_HG0;
throw sls::RuntimeError("Unknown gain mode " + s);
}