diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index d175a5cca..4de3d1848 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -368,6 +368,7 @@ class Detector(CppDetectorApi): [Gotthard] DYNAMICGAIN, HIGHGAIN, LOWGAIN, MEDIUMGAIN, VERYHIGHGAIN \n [Gotthard2] DYNAMICGAIN, FIXGAIN1, FIXGAIN2 \n [Eiger] settings loaded from file found in settingspath + [Moench] G1_HIGHGAIN, G1_LOWGAIN, G2_HIGHCAP_HIGHGAIN, G2_HIGHCAP_LOWGAIN, G2_LOWCAP_HIGHGAIN, G2_LOWCAP_LOWGAIN, G4_HIGHGAIN, G4_LOWGAIN """ return element_if_equal(self.getSettings()) diff --git a/slsDetectorServers/moenchDetectorServer/RegisterDefs.h b/slsDetectorServers/moenchDetectorServer/RegisterDefs.h index 65a9590ab..506dfda90 100644 --- a/slsDetectorServers/moenchDetectorServer/RegisterDefs.h +++ b/slsDetectorServers/moenchDetectorServer/RegisterDefs.h @@ -328,6 +328,88 @@ #define ASIC_CTRL_PARALLEL_RD_MSK (0x00000001 << ASIC_CTRL_PARALLEL_RD_OFST) #define ASIC_CTRL_INTRFCE_CLK_PLRTY_OFST (1) #define ASIC_CTRL_INTRFCE_CLK_PLRTY_MSK (0x00000001 << ASIC_CTRL_INTRFCE_CLK_PLRTY_OFST) +#define ASIC_CTRL_PULSETOP_OFST (4) +#define ASIC_CTRL_PULSETOP_MSK (0x00000001 << ASIC_CTRL_PULSETOP_OFST +#define ASIC_CTRL_PULSEBOT_OFST (5) +#define ASIC_CTRL_PULSEBOT_MSK (0x00000001 << ASIC_CTRL_PULSEBOT_OFST) +#define ASIC_CTRL_ENPRECHPREBOT_OFST (6) +#define ASIC_CTRL_ENPRECHPREBOT_MSK (0x00000001 << ASIC_CTRL_ENPRECHPREBOT_OFST) +#define ASIC_CTRL_DSG1_BOT_OFST (7) +#define ASIC_CTRL_DSG1_BOT_MSK (0x00000001 << ASIC_CTRL_DSG1_BOT_OFST) +#define ASIC_CTRL_BYPASSCDSBOT_OFST (8) +#define ASIC_CTRL_BYPASSCDSBOT_MSK (0x00000001 << ASIC_CTRL_BYPASSCDSBOT_OFST) +#define ASIC_CTRL_HG_BOT_OFST (9) +#define ASIC_CTRL_HG_BOT_MSK (0x00000001 << ASIC_CTRL_HG_BOT_OFST) +#define ASIC_CTRL_STO2TOP_OFST (10) +#define ASIC_CTRL_STO2TOP_MSK (0x00000001 << ASIC_CTRL_STO2TOP_OFST) +#define ASIC_CTRL_PRECHARGECONNECTBOT_OFST (11) +#define ASIC_CTRL_PRECHARGECONNECTBOT_MSK (0x00000001 << ASIC_CTRL_PRECHARGECONNECTBOT_OFST) +#define ASIC_CTRL_CONNCDSTOP_OFST (12) +#define ASIC_CTRL_CONNCDSTOP_MSK (0x00000001 << ASIC_CTRL_CONNCDSTOP_OFST) +#define ASIC_CTRL_BYPASSTOP_OFST (13) +#define ASIC_CTRL_BYPASSTOP_MSK (0x00000001 << ASIC_CTRL_BYPASSTOP_OFST) +#define ASIC_CTRL_STO1TOP_OFST (14) +#define ASIC_CTRL_STO1TOP_MSK (0x00000001 << ASIC_CTRL_STO1TOP_OFST) +#define ASIC_CTRL_DSG3_TOP_OFST (15) +#define ASIC_CTRL_DSG3_TOP_MSK (0x00000001 << ASIC_CTRL_DSG3_TOP_OFST) +#define ASIC_CTRL_S2DTESTEN_OFST (16) +#define ASIC_CTRL_S2DTESTEN_MSK (0x00000001 << ASIC_CTRL_S2DTESTEN_OFST) +#define ASIC_CTRL_BOTSRTESTBOT_OFST (17) +#define ASIC_CTRL_BOTSRTESTBOT_MSK (0x00000001 << ASIC_CTRL_BOTSRTESTBOT_OFST) +#define ASIC_CTRL_PRESETSSR_OFST (18) +#define ASIC_CTRL_PRESETSSR_MSK (0x00000001 << ASIC_CTRL_PRESETSSR_OFST) +#define ASIC_CTRL_PULSEOFFTOP_OFST (19) +#define ASIC_CTRL_PULSEOFFTOP_MSK (0x00000001 << ASIC_CTRL_PULSEOFFTOP_OFST) +#define ASIC_CTRL_PULSEOFFBOT_OFST (20) +#define ASIC_CTRL_PULSEOFFBOT_MSK (0x00000001 << ASIC_CTRL_PULSEOFFBOT_OFST) +#define ASIC_CTRL_CONNCDSBOT_OFST (21) +#define ASIC_CTRL_CONNCDSBOT_MSK (0x00000001 << ASIC_CTRL_CONNCDSBOT_OFST) +#define ASIC_CTRL_ENPRECHPRETOP_OFST (22) +#define ASIC_CTRL_ENPRECHPRETOP_MSK (0x00000001 << ASIC_CTRL_ENPRECHPRETOP_OFST) +#define ASIC_CTRL_BYPASSBOT_OFST (23) +#define ASIC_CTRL_BYPASSBOT_MSK (0x00000001 << ASIC_CTRL_BYPASSBOT_OFST) +#define ASIC_CTRL_DSG1_TOP_OFST (24) +#define ASIC_CTRL_DSG1_TOP_MSK (0x00000001 << ASIC_CTRL_DSG1_TOP_OFST) +#define ASIC_CTRL_STO1BOT_OFST (25) +#define ASIC_CTRL_STO1BOT_MSK (0x00000001 << ASIC_CTRL_STO1BOT_OFST) +#define ASIC_CTRL_BYPASSCDSTOP_OFST (26) +#define ASIC_CTRL_BYPASSCDSTOP_MSK (0x00000001 << ASIC_CTRL_BYPASSCDSTOP_OFST) +#define ASIC_CTRL_DSG3_BOT_OFST (27) +#define ASIC_CTRL_DSG3_BOT_MSK (0x00000001 << ASIC_CTRL_DSG3_BOT_OFST) +#define ASIC_CTRL_HG_TOP_OFST (28) +#define ASIC_CTRL_HG_TOP_MSK (0x00000001 << ASIC_CTRL_HG_TOP_OFST) +#define ASIC_CTRL_STO2BOT_OFST (29) +#define ASIC_CTRL_STO2BOT_MSK (0x00000001 << ASIC_CTRL_STO2BOT_OFST) +#define ASIC_CTRL_PRECHARGECONNECTTOP_OFST (30) +#define ASIC_CTRL_PRECHARGECONNECTTOP_MSK (0x00000001 << ASIC_CTRL_PRECHARGECONNECTTOP_OFST) +#define ASIC_CTRL_BOTSRTESTTOP_OFST (31) +#define ASIC_CTRL_BOTSRTESTTOP_MSK (0x00000001 << ASIC_CTRL_BOTSRTESTTOP_OFST) + +#define ASIC_CTRL_DEFAULT_VAL (ASIC_CTRL_INTRFCE_CLK_PLRTY_MSK | ASIC_CTRL_DSG1_BOT_MSK | \ + ASIC_CTRL_HG_BOT_MSK | ASIC_CTRL_STO2TOP_MSK | \ + ASIC_CTRL_CONNCDSTOP_MSK | ASIC_CTRL_STO1TOP_MSK | \ + ASIC_CTRL_BOTSRTESTBOT_MSK | ASIC_CTRL_PULSEOFFTOP_MSK | \ + ASIC_CTRL_PULSEOFFBOT_MSK | ASIC_CTRL_CONNCDSBOT_MSK | \ + ASIC_CTRL_DSG1_TOP_MSK | ASIC_CTRL_STO1BOT_MSK | \ + ASIC_CTRL_HG_TOP_MSK | ASIC_CTRL_STO2BOT_MSK | \ + ASIC_CTRL_BOTSRTESTTOP_MSK) + +#define ASIC_CTRL_HG_MSK (ASIC_CTRL_HG_TOP_MSK | ASIC_CTRL_HG_BOT_MSK) +#define ASIC_CTRL_DSG1_MSK (ASIC_CTRL_DSG1_TOP_MSK | ASIC_CTRL_DSG1_BOT_MSK) +#define ASIC_CTRL_DSG3_MSK (ASIC_CTRL_DSG3_TOP_MSK | ASIC_CTRL_DSG3_BOT_MSK) + +#define SETTINGS_MSK (ASIC_CTRL_HG_MSK | ASIC_CTRL_DSG1_MSK | ASIC_CTRL_DSG3_MSK) +#define SETTINGS_G1_HG (ASIC_CTRL_HG_MSK | ASIC_CTRL_DSG3_MSK) +#define SETTINGS_G1_LG (ASIC_CTRL_DSG3_MSK) +#define SETTINGS_G2_HC_HG (ASIC_CTRL_HG_MSK) +#define SETTINGS_G2_HC_LG (0) +#define SETTINGS_G2_LC_HG (ASIC_CTRL_HG_MSK | ASIC_CTRL_DSG1_MSK | ASIC_CTRL_DSG3_MSK) +#define SETTINGS_G2_LC_LG (ASIC_CTRL_DSG1_MSK | ASIC_CTRL_DSG3_MSK) +#define SETTINGS_G4_HG (ASIC_CTRL_HG_MSK | ASIC_CTRL_DSG1_MSK) +#define SETTINGS_G4_LG (ASIC_CTRL_DSG1_MSK) + + + /* ADC 0 Deserializer Control */ #define ADC_DSRLZR_0_REG (0xF0 << MEM_MAP_SHIFT) diff --git a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer index 7ab321225..f58a20802 100755 Binary files a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer and b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer differ diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c index 6708a264e..4d3c5e997 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c @@ -489,11 +489,13 @@ void setupDetector() { // delay bus_w(ADC_PORT_INVERT_REG, ADC_PORT_INVERT_VAL); + // default asic + bus_w(ASIC_CTRL_REG, ASIC_CTRL_DEFAULT_VAL); initReadoutConfiguration(); // Initialization of acquistion parameters - // setSettings(DEFAULT_SETTINGS); + setSettings(DEFAULT_SETTINGS); setNumFrames(DEFAULT_NUM_FRAMES); setNumTriggers(DEFAULT_NUM_CYCLES); setExpTime(DEFAULT_EXPTIME); @@ -816,18 +818,87 @@ enum detectorSettings setSettings(enum detectorSettings sett) { if (sett == UNINITIALIZED) return thisSettings; + uint32_t mask = 0; // set settings switch (sett) { + case G1_HIGHGAIN: + LOG(logINFOBLUE, ("Settinng settings to g1 hg\n")) + mask = SETTINGS_G1_HG; + break; + case G1_LOWGAIN: + LOG(logINFOBLUE, ("Settinng settings to g1 lg\n")) + mask = SETTINGS_G1_LG; + break; + case G2_HIGHCAP_HIGHGAIN: + LOG(logINFOBLUE, ("Settinng settings to g2 hc hg\n")) + mask = SETTINGS_G2_HC_HG; + break; + case G2_HIGHCAP_LOWGAIN: + LOG(logINFOBLUE, ("Settinng settings to g2 hc lg\n")) + mask = SETTINGS_G2_HC_LG; + break; + case G2_LOWCAP_HIGHGAIN: + LOG(logINFOBLUE, ("Settinng settings to g2 lc_hg\n")) + mask = SETTINGS_G2_LC_HG; + break; + case G2_LOWCAP_LOWGAIN: + LOG(logINFOBLUE, ("Settinng settings to g2 lc lg\n")) + mask = SETTINGS_G2_LC_LG; + break; + case G4_HIGHGAIN: + LOG(logINFOBLUE, ("Settinng settings to g4 hg\n")) + mask = SETTINGS_G4_HG; + break; + case G4_LOWGAIN: + LOG(logINFOBLUE, ("Settinng settings to g4 lg\n")) + mask = SETTINGS_G4_LG; + break; default: LOG(logERROR, ("This settings %d is not defined\n", (int)sett)); return -1; } + uint32_t addr = ASIC_CTRL_REG; + bus_w(addr, bus_r(addr) & ~SETTINGS_MSK); + bus_w(addr, bus_r(addr) | mask); + thisSettings = sett; return getSettings(); } -enum detectorSettings getSettings() { return UNDEFINED; } +enum detectorSettings getSettings() { + uint32_t regval = bus_r(ASIC_CTRL_REG) & SETTINGS_MSK; + switch (regval) { + case SETTINGS_G1_HG: + thisSettings = G1_HIGHGAIN; + break; + case SETTINGS_G1_LG: + thisSettings = G1_LOWGAIN; + break; + case SETTINGS_G2_HC_HG: + thisSettings = G2_HIGHCAP_HIGHGAIN; + break; + case SETTINGS_G2_HC_LG: + thisSettings = G2_HIGHCAP_LOWGAIN; + break; + case SETTINGS_G2_LC_HG: + thisSettings = G2_LOWCAP_HIGHGAIN; + break; + case SETTINGS_G2_LC_LG: + thisSettings = G2_LOWCAP_LOWGAIN; + break; + case SETTINGS_G4_HG: + thisSettings = G4_HIGHGAIN; + break; + case SETTINGS_G4_LG: + thisSettings = G4_LOWGAIN; + break; + default: + thisSettings = UNDEFINED; + break; + } + return thisSettings; +} /* parameters - dac, adc, hv */ void setDAC(enum DACINDEX ind, int val, int mV) { diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h index 0bdb3b962..3b157fe58 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorServer_defs.h @@ -37,7 +37,7 @@ #define DEFAULT_DELAY (0) #define DEFAULT_HIGH_VOLTAGE (0) #define DEFAULT_TIMING_MODE (AUTO_TIMING) -#define DEFAULT_SETTINGS (GAIN0) +#define DEFAULT_SETTINGS (G4_HIGHGAIN) #define DEFAULT_TX_UDP_PORT (0x7e9a) #define DEFAULT_TMP_THRSHLD (65 * 1000) // milli degree Celsius #define DEFAULT_FLIP_ROWS (0) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index ba4f65034..d1163b49e 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -1734,7 +1734,7 @@ void validate_settings(enum detectorSettings sett) { switch (sett) { #ifdef EIGERD case STANDARD: -#elif defined(JUNGFRAUD) +#elif JUNGFRAUD case GAIN0: case HIGHGAIN0: #elif GOTTHARDD @@ -1751,6 +1751,15 @@ void validate_settings(enum detectorSettings sett) { case STANDARD: case FAST: case HIGHGAIN: +#elif MOENCHD + case G1_HIGHGAIN: + case G1_LOWGAIN: + case G2_HIGHCAP_HIGHGAIN: + case G2_HIGHCAP_LOWGAIN: + case G2_LOWCAP_HIGHGAIN: + case G2_LOWCAP_LOWGAIN: + case G4_HIGHGAIN: + case G4_LOWGAIN: #endif break; default: diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 9cf8dedff..390caaac2 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -133,7 +133,10 @@ class Detector { * LOWGAIN, MEDIUMGAIN, VERYHIGHGAIN \n [Gotthard2] DYNAMICGAIN, * FIXGAIN1, FIXGAIN2 \n [Mythen3] STANDARD, FAST, * HIGHGAIN. Also changes vrshaper and vrpreamp \n [Eiger] Use threshold - * command. Settings loaded from file found in settingspath + * command. Settings loaded from file found in settingspath \n + * [Moench] G1_HIGHGAIN, G1_LOWGAIN, G2_HIGHCAP_HIGHGAIN, + * G2_HIGHCAP_LOWGAIN, G2_LOWCAP_HIGHGAIN, G2_LOWCAP_LOWGAIN, G4_HIGHGAIN, + * G4_LOWGAIN */ void setSettings(defs::detectorSettings value, Positions pos = {}); diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 52c42d007..1db1a7091 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -1461,11 +1461,13 @@ class CmdProxy { "\n\t[Jungfrau] - [ gain0 | highgain0]" "\n\t[Gotthard] - [dynamicgain | highgain | lowgain | " "mediumgain | veryhighgain]" + "\n\t[Gotthard] Also loads default dacs on to the detector." "\n\t[Gotthard2] - [dynamicgain | fixgain1 | fixgain2]" "\n\t[Mythen3] - [standard | fast | highgain] Also changes vrshaper " "and vrpreamp. \n\t[Eiger] Use threshold or thresholdnotb. \n\t[Eiger] " "threshold and settings loaded from file found in settingspath. " - "\n\t[Gotthard] Also loads default dacs on to the detector."); + "\n\t[Moench] - [g1_hg | g1_lg | g2_hc_hg | g2_hc_lg | " + "g2_lc_hg | g2_lc_lg | g4_hg | g4_lg]"); STRING_COMMAND(settingspath, getSettingsPath, setSettingsPath, "[path]\n\t[Eiger][Mythen3] Directory where settings files " diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index b9a3f3967..bea46a61a 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -190,14 +190,20 @@ std::vector Detector::getSettingsList() const { defs::HIGHGAIN, defs::DYNAMICGAIN, defs::LOWGAIN, defs::MEDIUMGAIN, defs::VERYHIGHGAIN}; case defs::JUNGFRAU: - case defs::MOENCH: - return std::vector{}; + return std::vector{defs::GAIN0, + defs::HIGHGAIN0}; case defs::GOTTHARD2: return std::vector{ defs::DYNAMICGAIN, defs::FIXGAIN1, defs::FIXGAIN2}; case defs::MYTHEN3: return std::vector{defs::STANDARD, defs::FAST, defs::HIGHGAIN}; + case defs::MOENCH: + return std::vector{ + 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: throw RuntimeError("Settings not implemented for this detector"); default: diff --git a/slsDetectorSoftware/tests/test-CmdProxy.cpp b/slsDetectorSoftware/tests/test-CmdProxy.cpp index 96f8d864e..1ef0546fb 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy.cpp @@ -216,6 +216,14 @@ TEST_CASE("settings", "[.cmd]") { sett.push_back("highgain0"); break; case defs::MOENCH: + sett.push_back("g1_hg"); + sett.push_back("g1_lg"); + sett.push_back("g2_hc_hg"); + sett.push_back("g2_hc_lg"); + sett.push_back("g2_lc_hg"); + sett.push_back("g2_lc_lg"); + sett.push_back("g4_hg"); + sett.push_back("g4_lg"); break; case defs::GOTTHARD: sett.push_back("highgain");