Merge branch 'developer' into rxrmetadata

This commit is contained in:
maliakal_d 2020-09-03 15:52:01 +02:00
commit a081fbbdaa
5 changed files with 209 additions and 38 deletions

View File

@ -19,6 +19,22 @@ pycmd += ['vrf', 'vtr', 'vrs', 'vtgstv', 'vsvn', 'vtrim',
'vin_com', 'vin_cm', 'vrshaper', 'vrshaper_n', 'vrpreamp', 'vishaper', 'vin_com', 'vin_cm', 'vrshaper', 'vrshaper_n', 'vrpreamp', 'vishaper',
'vicin', 'vcassh', 'vcal_n', 'vcal_p'] 'vicin', 'vcassh', 'vcal_n', 'vcal_p']
# command : reason
intentionally_missing = [
'temp_10ge', #temperatures already available from enum or specialized class
'temp_adc',
'temp_dcdc',
'temp_fpga',
'temp_fpgaext',
'temp_fpgafl',
'temp_fpgafr',
'temp_slowadc',
'temp_sodl',
'temp_sodr',
'trigger', #use sendSoftwareTrigger
]
pycmd += intentionally_missing
missing = [] missing = []
for c in cmd: for c in cmd:
if c not in pycmd: if c not in pycmd:

View File

@ -139,27 +139,23 @@ class Detector(CppDetectorApi):
raise ValueError("hostname needs to be string or list of strings") raise ValueError("hostname needs to be string or list of strings")
@property @property
def fw_version(self): def firmwareversion(self):
return element_if_equal(self.getFirmwareVersion()) return element_if_equal(self.getFirmwareVersion())
@property @property
def server_version(self): def detectorserverversion(self):
# TODO! handle hex print # TODO! handle hex print
return element_if_equal(self.getDetectorServerVersion()) return element_if_equal(self.getDetectorServerVersion())
@property @property
def client_version(self): def clientversion(self):
return element_if_equal(self.getClientVersion()) return self.getClientVersion()
@property @property
def rx_version(self): def rx_version(self):
"""Receiver version in format [0xYYMMDD].""" """Receiver version in format [0xYYMMDD]."""
return element_if_equal(self.getReceiverVersion()) return element_if_equal(self.getReceiverVersion())
@property
def detector_type(self):
return element_if_equal(self.getDetectorType())
@property @property
def dr(self): def dr(self):
""" """
@ -1022,6 +1018,41 @@ class Detector(CppDetectorApi):
def led(self, value): def led(self, value):
self.setLEDEnable(value) self.setLEDEnable(value)
@property
def versions(self):
return {'type': self.type,
'package': self.packageversion,
'client': self.clientversion,
'firmware': self.firmwareversion,
'detectorserver': self.detectorserverversion,
'receiver': self.rx_version}
@property
def virtual(self):
"""
Setup with n virtual servers running on localhost
starting with port p
Examples
---------
>>> d.virtual = n, p
"""
raise NotImplementedError('Virtual is set only')
@virtual.setter
def virtual(self, args):
n_detectors, starting_port = args
self.setVirtualDetectorServers(n_detectors, starting_port)
@property
def packageversion(self):
return self.getPackageVersion()
@property @property
def ratecorr(self): def ratecorr(self):
""" """
@ -1172,6 +1203,19 @@ class Detector(CppDetectorApi):
def subdeadtime(self, t): def subdeadtime(self, t):
self.setSubDeadTime(t) self.setSubDeadTime(t)
@property
@element
def parallel(self):
"""
[Eiger] Enable or disable the parallel readout mode of Eiger.
"""
return self.getParallelMode()
@parallel.setter
def parallel(self, value):
self.setParallelMode(value)
@property @property
def partialreset(self): def partialreset(self):
"""[Eiger] Sets up detector to do partial or complete reset at start of acquisition. 0 complete reset, 1 partial reset. Default is complete reset. """[Eiger] Sets up detector to do partial or complete reset at start of acquisition. 0 complete reset, 1 partial reset. Default is complete reset.
@ -1392,6 +1436,34 @@ class Detector(CppDetectorApi):
def veto(self, value): def veto(self, value):
self.setVeto(value) self.setVeto(value)
@property
def vetofile(self):
"""
[Gotthard2] Set veto reference for each 128 channels for specific chip.
The file should have 128 rows of gain index and 12 bit value in dec
Examples
---------
d.vetofile = '/path/to/file.txt' #set for all chips
d.vetofile = 3, '/path/to/file.txt' # set for chip 3
"""
raise NotImplementedError('vetofile is set only')
@vetofile.setter
def vetofile(self, args):
if isinstance(args, str):
chip_index = -1
fname = args
elif isinstance(args, (tuple, list)):
chip_index, fname = args
else:
raise ValueError("unknow argument to vetofile")
self.setVetoFile(chip_index, fname)
""" """
Mythen3 specific Mythen3 specific
""" """

View File

@ -432,7 +432,7 @@
<property name="verticalSpacing"> <property name="verticalSpacing">
<number>4</number> <number>4</number>
</property> </property>
<item row="5" column="0"> <item row="6" column="0">
<widget class="QStackedWidget" name="stackedLblTriggerBurst"> <widget class="QStackedWidget" name="stackedLblTriggerBurst">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -503,7 +503,7 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="4" column="3"> <item row="5" column="3">
<widget class="QComboBox" name="comboPeriodUnit"> <widget class="QComboBox" name="comboPeriodUnit">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -572,7 +572,7 @@ Frame period between exposures.
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2" colspan="2"> <item row="2" column="2" colspan="2">
<widget class="QSpinBox" name="spinNumMeasurements"> <widget class="QSpinBox" name="spinNumMeasurements">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -616,7 +616,7 @@ Frame period between exposures.
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@ -674,7 +674,7 @@ Frame period between exposures.
</item> </item>
</widget> </widget>
</item> </item>
<item row="3" column="2"> <item row="4" column="2">
<widget class="QDoubleSpinBox" name="spinExpTime"> <widget class="QDoubleSpinBox" name="spinExpTime">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@ -718,7 +718,7 @@ Exposure Time of a frame.
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QLabel" name="lblPeriod"> <widget class="QLabel" name="lblPeriod">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -735,7 +735,7 @@ Frame period between exposures.
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<widget class="QLabel" name="lblNumFrames"> <widget class="QLabel" name="lblNumFrames">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -745,7 +745,7 @@ Frame period between exposures.
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="4" column="0">
<widget class="QLabel" name="lblExpTime"> <widget class="QLabel" name="lblExpTime">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@ -762,7 +762,7 @@ Exposure Time of a frame.
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="2" colspan="2"> <item row="3" column="2" colspan="2">
<widget class="QSpinBox" name="spinNumFrames"> <widget class="QSpinBox" name="spinNumFrames">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -809,7 +809,7 @@ Exposure Time of a frame.
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="3"> <item row="4" column="3">
<widget class="QComboBox" name="comboExpUnit"> <widget class="QComboBox" name="comboExpUnit">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@ -871,7 +871,7 @@ Exposure Time of a frame.
</item> </item>
</widget> </widget>
</item> </item>
<item row="4" column="2"> <item row="5" column="2">
<widget class="QDoubleSpinBox" name="spinPeriod"> <widget class="QDoubleSpinBox" name="spinPeriod">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -931,7 +931,7 @@ Frame period between exposures.
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="5" column="2"> <item row="6" column="2">
<widget class="QStackedWidget" name="stackedSpinTriggerBurst"> <widget class="QStackedWidget" name="stackedSpinTriggerBurst">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -1070,7 +1070,7 @@ Frame period between exposures.
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<widget class="QStackedWidget" name="stackedLblDelayBurstPeriod"> <widget class="QStackedWidget" name="stackedLblDelayBurstPeriod">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -1141,7 +1141,7 @@ Frame period between exposures.
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="6" column="2"> <item row="7" column="2">
<widget class="QStackedWidget" name="stackedSpinDelayBurstPeriod"> <widget class="QStackedWidget" name="stackedSpinDelayBurstPeriod">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -1268,7 +1268,7 @@ Frame period between exposures.
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="6" column="3"> <item row="7" column="3">
<widget class="QStackedWidget" name="stackedComboDelayBurstPeriod"> <widget class="QStackedWidget" name="stackedComboDelayBurstPeriod">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -1431,7 +1431,7 @@ Frame period between exposures.
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="8" column="0">
<widget class="QStackedWidget" name="stackedLblSamplesGates"> <widget class="QStackedWidget" name="stackedLblSamplesGates">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -1502,7 +1502,7 @@ Frame period between exposures.
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="7" column="2"> <item row="8" column="2">
<widget class="QStackedWidget" name="stackedSpinSamplesGates"> <widget class="QStackedWidget" name="stackedSpinSamplesGates">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@ -1639,6 +1639,48 @@ Frame period between exposures.
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="1" column="0">
<widget class="QLabel" name="lblBurstMode">
<property name="text">
<string>Burst Mode:</string>
</property>
</widget>
</item>
<item row="1" column="2" colspan="2">
<widget class="QComboBox" name="comboBurstMode">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="toolTip">
<string>Timing Mode of the detector.
#timing#</string>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>Burst Internal</string>
</property>
</item>
<item>
<property name="text">
<string>Burst external</string>
</property>
</item>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -20,6 +20,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
private slots: private slots:
void SetTimingMode(int val); void SetTimingMode(int val);
void SetBurstMode(int val);
void SetNumMeasurements(int val); void SetNumMeasurements(int val);
void SetNumFrames(int val); void SetNumFrames(int val);
void SetNumTriggers(int val); void SetNumTriggers(int val);
@ -52,6 +53,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
void EnableWidgetsforTimingMode(); void EnableWidgetsforTimingMode();
void GetTimingMode(); void GetTimingMode();
void GetBurstMode();
void GetNumFrames(); void GetNumFrames();
void GetNumTriggers(); void GetNumTriggers();
void GetNumBursts(); void GetNumBursts();

View File

@ -46,6 +46,8 @@ void qTabMeasurement::SetupWidgetWindow() {
ShowGates(); ShowGates();
// enabling according to det type // enabling according to det type
lblBurstMode->hide();
comboBurstMode->hide();
switch (det->getDetectorType().squash()) { switch (det->getDetectorType().squash()) {
case slsDetectorDefs::MOENCH: case slsDetectorDefs::MOENCH:
lblNumSamples->setEnabled(true); lblNumSamples->setEnabled(true);
@ -64,6 +66,8 @@ void qTabMeasurement::SetupWidgetWindow() {
startingFnumImplemented = true; startingFnumImplemented = true;
break; break;
case slsDetectorDefs::GOTTHARD2: case slsDetectorDefs::GOTTHARD2:
lblBurstMode->show();
comboBurstMode->show();
lblNumBursts->setEnabled(true); lblNumBursts->setEnabled(true);
spinNumBursts->setEnabled(true); spinNumBursts->setEnabled(true);
lblBurstPeriod->setEnabled(true); lblBurstPeriod->setEnabled(true);
@ -89,6 +93,10 @@ void qTabMeasurement::SetupWidgetWindow() {
void qTabMeasurement::Initialization() { void qTabMeasurement::Initialization() {
connect(comboTimingMode, SIGNAL(currentIndexChanged(int)), this, connect(comboTimingMode, SIGNAL(currentIndexChanged(int)), this,
SLOT(SetTimingMode(int))); SLOT(SetTimingMode(int)));
if (comboBurstMode->isVisible()) {
connect(comboBurstMode, SIGNAL(currentIndexChanged(int)), this,
SLOT(SetBurstMode(int)));
}
connect(spinNumMeasurements, SIGNAL(valueChanged(int)), this, connect(spinNumMeasurements, SIGNAL(valueChanged(int)), this,
SLOT(SetNumMeasurements(int))); SLOT(SetNumMeasurements(int)));
connect(spinNumFrames, SIGNAL(valueChanged(int)), this, connect(spinNumFrames, SIGNAL(valueChanged(int)), this,
@ -144,19 +152,12 @@ void qTabMeasurement::Initialization() {
void qTabMeasurement::ShowTriggerDelay() { void qTabMeasurement::ShowTriggerDelay() {
bool showTrigger = true; bool showTrigger = true;
if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) { if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) {
try { if ((comboBurstMode->currentIndex() != slsDetectorDefs::BURST_OFF) &&
LOG(logDEBUG) << "Getting burst mode"; (comboTimingMode->currentIndex() == AUTO)) {
auto retval = det->getBurstMode().tsquash( // show burst, burstperiod, not trigger or delay
"Inconsistent burst mode for all detectors.");
// burst mode and auto timing mode
if (retval != slsDetectorDefs::BURST_OFF &&
comboTimingMode->currentIndex() == AUTO) {
showTrigger = false; showTrigger = false;
} }
} }
CATCH_DISPLAY("Could not get burst mode.",
"qTabMeasurement::ShowTriggerDelay")
}
if (showTrigger) { if (showTrigger) {
stackedLblTriggerBurst->setCurrentWidget(pageLblTrigger); stackedLblTriggerBurst->setCurrentWidget(pageLblTrigger);
@ -248,7 +249,7 @@ void qTabMeasurement::EnableWidgetsforTimingMode() {
spinPeriod->setEnabled(true); spinPeriod->setEnabled(true);
comboPeriodUnit->setEnabled(true); comboPeriodUnit->setEnabled(true);
if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) { if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) {
ShowTriggerDelay(); GetBurstMode(); // also decides to show trigger or burst mode
} }
break; break;
case TRIGGER: case TRIGGER:
@ -272,7 +273,7 @@ void qTabMeasurement::EnableWidgetsforTimingMode() {
spinDelay->setEnabled(true); spinDelay->setEnabled(true);
comboDelayUnit->setEnabled(true); comboDelayUnit->setEnabled(true);
if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) { if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) {
ShowTriggerDelay(); GetBurstMode(); // also decides to show trigger or burst mode
} }
} }
break; break;
@ -359,6 +360,41 @@ void qTabMeasurement::SetTimingMode(int val) {
this, &qTabMeasurement::GetTimingMode) this, &qTabMeasurement::GetTimingMode)
} }
void qTabMeasurement::GetBurstMode() {
LOG(logDEBUG) << "Getting burst mode";
disconnect(comboBurstMode, SIGNAL(currentIndexChanged(int)), this,
SLOT(SetBurstMode(int)));
try {
auto retval = det->getBurstMode().tsquash(
"Inconsistent burst mode for all detectors.");
switch (retval) {
case slsDetectorDefs::BURST_OFF:
case slsDetectorDefs::BURST_INTERNAL:
case slsDetectorDefs::BURST_EXTERNAL:
comboBurstMode->setCurrentIndex((int)retval);
ShowTriggerDelay();
break;
default:
throw sls::RuntimeError(std::string("Unknown burst mode: ") +
std::to_string(retval));
}
}
CATCH_DISPLAY("Could not get burst mode.", "qTabMeasurement::GetBurstMode")
connect(comboBurstMode, SIGNAL(currentIndexChanged(int)), this,
SLOT(SetBurstMode(int)));
}
void qTabMeasurement::SetBurstMode(int val) {
LOG(logINFO) << "Setting burst mode:"
<< comboBurstMode->currentText().toAscii().data();
try {
det->setBurstMode(static_cast<slsDetectorDefs::burstMode>(val));
ShowTriggerDelay();
}
CATCH_HANDLE("Could not set burst mode.", "qTabMeasurement::SetBurstMode",
this, &qTabMeasurement::GetBurstMode)
}
void qTabMeasurement::SetNumMeasurements(int val) { void qTabMeasurement::SetNumMeasurements(int val) {
LOG(logINFO) << "Setting Number of Measurements to " << val; LOG(logINFO) << "Setting Number of Measurements to " << val;
numMeasurements = val; numMeasurements = val;
@ -913,6 +949,9 @@ void qTabMeasurement::Refresh() {
if (!plot->GetIsRunning()) { if (!plot->GetIsRunning()) {
GetTimingMode(); GetTimingMode();
if (comboBurstMode->isVisible()) {
GetBurstMode();
}
GetNumFrames(); GetNumFrames();
GetExposureTime(); GetExposureTime();
GetAcquisitionPeriod(); GetAcquisitionPeriod();