Skip to content

Commit 184e629

Browse files
committed
Merged in monashspinor/lyse/integer_indexing (pull request labscript-suite#39)
Integer indexing of the lyse DataFrame Approved-by: Jan Werkmann <jan.wrk.fb@gmail.com>
2 parents 210b019 + f7d1ebd commit 184e629

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

__init__.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,17 @@ def data(filepath=None, host='localhost', port=_lyse_port, timeout=5):
8080
df = zmq_get(port, host, 'get dataframe', timeout)
8181
try:
8282
padding = ('',)*(df.columns.nlevels - 1)
83-
df.set_index([('sequence',) + padding,('run time',) + padding], inplace=True, drop=False)
84-
df.index.names = ['sequence', 'run time']
85-
# df.set_index(['sequence', 'run time'], inplace=True, drop=False)
83+
try:
84+
integer_indexing = _labconfig.getboolean('lyse', 'integer_indexing')
85+
except (LabConfig.NoOptionError, LabConfig.NoSectionError):
86+
integer_indexing = False
87+
if integer_indexing:
88+
df.set_index(['sequence_index', 'run number', 'run repeat'], inplace=True, drop=False)
89+
else:
90+
df.set_index([('sequence',) + padding,('run time',) + padding], inplace=True, drop=False)
91+
df.index.names = ['sequence', 'run time']
8692
except KeyError:
87-
# Empty dataframe?
93+
# Empty DataFrame or index column not found, so fall back to RangeIndex instead
8894
pass
8995
df.sort_index(inplace=True)
9096
return df

__main__.py

+22-4
Original file line numberDiff line numberDiff line change
@@ -1162,6 +1162,12 @@ def __init__(self, view, exp_config):
11621162
self._view.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
11631163
self._view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
11641164

1165+
# Check if integer indexing is to be used
1166+
try:
1167+
self.integer_indexing = self.exp_config.getboolean('lyse', 'integer_indexing')
1168+
except (LabConfig.NoOptionError, LabConfig.NoSectionError):
1169+
self.integer_indexing = False
1170+
11651171
# This dataframe will contain all the scalar data
11661172
# from the shot files that are currently open:
11671173
index = pandas.MultiIndex.from_tuples([('filepath', '')])
@@ -1469,11 +1475,23 @@ def renumber_rows(self):
14691475
print(self._model.rowCount())
14701476
for row_number in range(self._model.rowCount()):
14711477
vertical_header_item = self._model.verticalHeaderItem(row_number)
1472-
filepath_item = self._model.item(row_number, self.COL_FILEPATH)
1473-
filepath = filepath_item.text()
1474-
basename = os.path.splitext(os.path.basename(filepath))[0]
14751478
row_number_str = str(row_number).rjust(n_digits)
1476-
vert_header_text = '{}. | {}'.format(row_number_str, basename)
1479+
vert_header_text = '{}. |'.format(row_number_str)
1480+
if self.integer_indexing:
1481+
header_cols = ['sequence_index', 'run number', 'run repeat']
1482+
header_strings = []
1483+
for col in header_cols:
1484+
try:
1485+
val = self.dataframe[col].values[row_number]
1486+
header_strings.append(' {:04d}'.format(val))
1487+
except (KeyError, ValueError):
1488+
header_strings.append('----')
1489+
vert_header_text += ' |'.join(header_strings)
1490+
else:
1491+
filepath_item = self._model.item(row_number, self.COL_FILEPATH)
1492+
filepath = filepath_item.text()
1493+
basename = os.path.splitext(os.path.basename(filepath))[0]
1494+
vert_header_text += ' ' + basename
14771495
vertical_header_item.setText(vert_header_text)
14781496

14791497
@inmain_decorator()

dataframe_utilities.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,10 @@ def get_nested_dict_from_shot(filepath):
5959
try:
6060
row['run number'] = h5_file.attrs['run number']
6161
except KeyError:
62-
# ignore:
63-
pass
62+
row['run number'] = float('nan')
6463
try:
6564
row['run repeat'] = h5_file.attrs['run repeat']
66-
except:
65+
except KeyError:
6766
row['run repeat'] = 0
6867
try:
6968
row['individual id'] = h5_file.attrs['individual id']

0 commit comments

Comments
 (0)