mythen3 gui

This commit is contained in:
maliakal_d 2019-11-18 17:57:19 +01:00
parent c4e7086d99
commit dfc886a65b
14 changed files with 95 additions and 16 deletions

View File

@ -42,7 +42,7 @@ private:
HV_180, HV_180,
HV_200 HV_200
}; };
int hvmin;
static const int HV_MIN = 60; static const int HV_MIN = 60;
static const int HV_MAX = 200; static const int HV_MAX = 200;
}; };

View File

@ -228,6 +228,7 @@ void qDetectorMain::SetUpDetector(const std::string fName, int multiID) {
case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::GOTTHARD:
case slsDetectorDefs::JUNGFRAU: case slsDetectorDefs::JUNGFRAU:
case slsDetectorDefs::MOENCH: case slsDetectorDefs::MOENCH:
case slsDetectorDefs::MYTHEN3:
break; break;
default: default:
std::ostringstream os; std::ostringstream os;

View File

@ -19,6 +19,7 @@ void qTabDeveloper::SetupWidgetWindow() {
lblComboHV->hide(); lblComboHV->hide();
lblSpinHV->hide(); lblSpinHV->hide();
spinHV->hide(); spinHV->hide();
hvmin = HV_MIN;
try{ try{
slsDetectorDefs::detectorType detType = det->getDetectorType().squash(); slsDetectorDefs::detectorType detType = det->getDetectorType().squash();
@ -91,6 +92,27 @@ void qTabDeveloper::SetupWidgetWindow() {
dacWidgets.push_back(new qDacWidget(this, det, true, "i Dac 7: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget(this, det, true, "i Dac 7: ", getSLSIndex(detType, tempid++)));
break; break;
case slsDetectorDefs::MYTHEN3:
lblSpinHV->show();
spinHV->show();
hvmin = 0;
dacWidgets.push_back(new qDacWidget(this, det, true, "vcassh: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vth2: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vshaper: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vshaperneg: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vipre_out: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vth3: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vth1: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vicin: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vcas: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vpreamp: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vph: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "viinsh: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vpl: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vtrim: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(this, det, true, "vdcsh: ", getSLSIndex(detType, tempid++)));
break;
default: default:
break; break;
} }
@ -145,7 +167,7 @@ void qTabDeveloper::GetHighVoltage() {
auto retval = det->getHighVoltage({comboDetector->currentIndex() - 1}).tsquash("Inconsistent values for high voltage."); auto retval = det->getHighVoltage({comboDetector->currentIndex() - 1}).tsquash("Inconsistent values for high voltage.");
//spinHV //spinHV
if (spinHV->isVisible()) { if (spinHV->isVisible()) {
if (retval != 0 && retval < HV_MIN && retval > HV_MAX) { if (retval != 0 && retval < hvmin && retval > HV_MAX) {
throw sls::RuntimeError(std::string("Unknown High Voltage: ") + std::to_string(retval)); throw sls::RuntimeError(std::string("Unknown High Voltage: ") + std::to_string(retval));
} }
spinHV->setValue(retval); spinHV->setValue(retval);
@ -306,6 +328,45 @@ slsDetectorDefs::dacIndex qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorTy
} }
throw sls::RuntimeError(std::string("Unknown dac/adc index") + std::to_string(index)); throw sls::RuntimeError(std::string("Unknown dac/adc index") + std::to_string(index));
case slsDetectorDefs::MYTHEN3:
switch (index) {
case 0:
return slsDetectorDefs::CASSH;
case 1:
return slsDetectorDefs::VTH2;
case 2:
return slsDetectorDefs::SHAPER1;
case 3:
return slsDetectorDefs::SHAPER2;
case 4:
return slsDetectorDefs::VIPRE_OUT;
case 5:
return slsDetectorDefs::VTH3;
case 6:
return slsDetectorDefs::THRESHOLD;
case 7:
return slsDetectorDefs::VICIN;
case 8:
return slsDetectorDefs::CAS;
case 9:
return slsDetectorDefs::PREAMP;
case 10:
return slsDetectorDefs::CALIBRATION_PULSE;
case 11:
return slsDetectorDefs::VIPRE;
case 12:
return slsDetectorDefs::VIINSH;
case 13:
return slsDetectorDefs::VPL;
case 14:
return slsDetectorDefs::TRIMBIT_SIZE;
case 15:
return slsDetectorDefs::VDCSH;
default:
throw sls::RuntimeError(std::string("Unknown dac/adc index") + std::to_string(index));
}
break;
default: default:
throw sls::RuntimeError(std::string("Unknown detector type")); throw sls::RuntimeError(std::string("Unknown detector type"));
} }

View File

@ -59,6 +59,7 @@ void qTabPlot::SetupWidgetWindow() {
is1d = false; is1d = false;
switch(det->getDetectorType().squash()) { switch(det->getDetectorType().squash()) {
case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::GOTTHARD:
case slsDetectorDefs::MYTHEN3:
is1d = true; is1d = true;
break; break;
case slsDetectorDefs::EIGER: case slsDetectorDefs::EIGER:

View File

@ -21,6 +21,7 @@ void qTabSettings::SetupWidgetWindow() {
// enabling according to det type // enabling according to det type
switch(det->getDetectorType().squash()) { switch(det->getDetectorType().squash()) {
case slsDetectorDefs::MOENCH: case slsDetectorDefs::MOENCH:
case slsDetectorDefs::MYTHEN3:
lblSettings->setEnabled(false); lblSettings->setEnabled(false);
comboSettings->setEnabled(false); comboSettings->setEnabled(false);
break; break;

View File

@ -375,6 +375,7 @@ void setupDetector() {
setExpTime(DEFAULT_EXPTIME); setExpTime(DEFAULT_EXPTIME);
setPeriod(DEFAULT_PERIOD); setPeriod(DEFAULT_PERIOD);
setDelayAfterTrigger(DEFAULT_DELAY_AFTER_TRIGGER); setDelayAfterTrigger(DEFAULT_DELAY_AFTER_TRIGGER);
setTiming(DEFAULT_TIMING_MODE);
} }
int setDefaultDacs() { int setDefaultDacs() {
@ -644,6 +645,16 @@ int setHighVoltage(int val){
} }
/* parameters - timing */
void setTiming( enum timingMode arg){
// to be implemented
}
enum timingMode getTiming() {
return AUTO_TIMING;
}
int configureMAC() { int configureMAC() {
uint32_t srcip = udpDetails.srcip; uint32_t srcip = udpDetails.srcip;

View File

@ -7,7 +7,7 @@
#define CTRL_SRVR_INIT_TIME_US (300 * 1000) #define CTRL_SRVR_INIT_TIME_US (300 * 1000)
/* Hardware Definitions */ /* Hardware Definitions */
#define NCHAN (128) #define NCHAN (128 * 3)
#define NCHIP (10) #define NCHIP (10)
#define NDAC (16) #define NDAC (16)
#define HV_SOFT_MAX_VOLTAGE (200) #define HV_SOFT_MAX_VOLTAGE (200)
@ -24,6 +24,7 @@
#define DEFAULT_PERIOD (2*1000*1000) //ns #define DEFAULT_PERIOD (2*1000*1000) //ns
#define DEFAULT_DELAY_AFTER_TRIGGER (0) #define DEFAULT_DELAY_AFTER_TRIGGER (0)
#define DEFAULT_HIGH_VOLTAGE (0) #define DEFAULT_HIGH_VOLTAGE (0)
#define DEFAULT_TIMING_MODE (AUTO_TIMING)
#define DEFAULT_READOUT_C0 (125000000) // rdo_clk, 125 MHz #define DEFAULT_READOUT_C0 (125000000) // rdo_clk, 125 MHz
#define DEFAULT_READOUT_C1 (250000000) // rdo_x2_clk, 250 MHz #define DEFAULT_READOUT_C1 (250000000) // rdo_x2_clk, 250 MHz
#define DEFAULT_SYSTEM_C0 (250000000) // run_clk, 250 MHz #define DEFAULT_SYSTEM_C0 (250000000) // run_clk, 250 MHz

View File

@ -286,7 +286,7 @@ int setHighVoltage(int val);
// parameters - timing, extsig // parameters - timing, extsig
#if !defined(MYTHEN3D) && !defined(GOTTHARD2D) #if !defined(GOTTHARD2D)
void setTiming( enum timingMode arg); void setTiming( enum timingMode arg);
enum timingMode getTiming(); enum timingMode getTiming();
#endif #endif

View File

@ -677,7 +677,7 @@ int set_timing_mode(int file_des) {
return printSocketReadError(); return printSocketReadError();
FILE_LOG(logDEBUG1, ("Setting external communication mode to %d\n", arg)); FILE_LOG(logDEBUG1, ("Setting external communication mode to %d\n", arg));
#if defined(MYTHEN3D) || defined(GOTTHARD2D) #ifdef GOTTHARD2D
functionNotImplemented(); functionNotImplemented();
#else #else

View File

@ -700,7 +700,7 @@ void multiSlsDetector::readFrameFromReceiver() {
currentFileIndex); currentFileIndex);
} }
dataReady(thisData, currentFrameIndex, dataReady(thisData, currentFrameIndex,
((dynamicRange == 32) ? currentSubFrameIndex : -1), ((dynamicRange == 32 && eiger) ? currentSubFrameIndex : -1),
pCallbackArg); pCallbackArg);
delete thisData; delete thisData;
} }

View File

@ -992,16 +992,19 @@ int Implementation::setNumberofDigitalSamples(const uint32_t i) {
} }
int Implementation::setDynamicRange(const uint32_t i) { int Implementation::setDynamicRange(const uint32_t i) {
// only eiger
if (dynamicRange != i) { if (dynamicRange != i) {
dynamicRange = i; dynamicRange = i;
generalData->SetDynamicRange(i, tengigaEnable);
generalData->SetGapPixelsEnable(gapPixelsEnable, dynamicRange, quadEnable); if (myDetectorType == EIGER) {
// to update npixelsx, npixelsy in file writer generalData->SetDynamicRange(i, tengigaEnable);
for (const auto &it : dataProcessor) generalData->SetGapPixelsEnable(gapPixelsEnable, dynamicRange, quadEnable);
it->SetPixelDimension(); // to update npixelsx, npixelsy in file writer
if (SetupFifoStructure() == FAIL) for (const auto &it : dataProcessor)
return FAIL; it->SetPixelDimension();
if (SetupFifoStructure() == FAIL)
return FAIL;
}
} }
FILE_LOG(logINFO) << "Dynamic Range: " << dynamicRange; FILE_LOG(logINFO) << "Dynamic Range: " << dynamicRange;
return OK; return OK;

View File

@ -520,7 +520,7 @@ struct detParameters {
nGappixelsY = 1; nGappixelsY = 1;
break; break;
case slsDetectorDefs::detectorType::MYTHEN3: case slsDetectorDefs::detectorType::MYTHEN3:
nChanX = 128; nChanX = 128 * 3;
nChanY = 1; nChanY = 1;
nChipX = 10; nChipX = 10;
nChipY = 1; nChipY = 1;

View File

@ -8,5 +8,5 @@
#define APIGOTTHARD 0x191111 #define APIGOTTHARD 0x191111
#define APIJUNGFRAU 0x191111 #define APIJUNGFRAU 0x191111
#define APIEIGER 0x191111 #define APIEIGER 0x191111
#define APIMYTHEN3 0x191111
#define APIGOTTHARD2 0x191115 #define APIGOTTHARD2 0x191115
#define APIMYTHEN3 0x191118