forked from IPKM/nmreval
		
	add "index" keyword to ascii reader to use row number; part of #135
This commit is contained in:
		@@ -312,7 +312,23 @@ class Ui_ascii_reader(object):
 | 
			
		||||
        self.tabWidget.setCurrentIndex(0)
 | 
			
		||||
        self.buttonbox.rejected.connect(ascii_reader.close) # type: ignore
 | 
			
		||||
        QtCore.QMetaObject.connectSlotsByName(ascii_reader)
 | 
			
		||||
        ascii_reader.setTabOrder(self.tabWidget, self.ascii_table)
 | 
			
		||||
        ascii_reader.setTabOrder(self.tabWidget, self.column_checkBox)
 | 
			
		||||
        ascii_reader.setTabOrder(self.column_checkBox, self.line_spinBox)
 | 
			
		||||
        ascii_reader.setTabOrder(self.line_spinBox, self.preview_spinBox)
 | 
			
		||||
        ascii_reader.setTabOrder(self.preview_spinBox, self.pts_radioButton)
 | 
			
		||||
        ascii_reader.setTabOrder(self.pts_radioButton, self.dsc_radioButton)
 | 
			
		||||
        ascii_reader.setTabOrder(self.dsc_radioButton, self.FID_radioButton)
 | 
			
		||||
        ascii_reader.setTabOrder(self.FID_radioButton, self.spectrum_radioButton)
 | 
			
		||||
        ascii_reader.setTabOrder(self.spectrum_radioButton, self.bds_radioButton)
 | 
			
		||||
        ascii_reader.setTabOrder(self.bds_radioButton, self.x_lineedit)
 | 
			
		||||
        ascii_reader.setTabOrder(self.x_lineedit, self.y_lineedit)
 | 
			
		||||
        ascii_reader.setTabOrder(self.y_lineedit, self.deltay_lineEdit)
 | 
			
		||||
        ascii_reader.setTabOrder(self.deltay_lineEdit, self.re_button)
 | 
			
		||||
        ascii_reader.setTabOrder(self.re_button, self.regex_input)
 | 
			
		||||
        ascii_reader.setTabOrder(self.regex_input, self.re_match_index)
 | 
			
		||||
        ascii_reader.setTabOrder(self.re_match_index, self.custom_button)
 | 
			
		||||
        ascii_reader.setTabOrder(self.custom_button, self.custom_input)
 | 
			
		||||
        ascii_reader.setTabOrder(self.custom_input, self.ascii_table)
 | 
			
		||||
        ascii_reader.setTabOrder(self.ascii_table, self.delay_textfield)
 | 
			
		||||
        ascii_reader.setTabOrder(self.delay_textfield, self.delay_lineedit)
 | 
			
		||||
        ascii_reader.setTabOrder(self.delay_lineedit, self.start_lineedit)
 | 
			
		||||
@@ -321,6 +337,7 @@ class Ui_ascii_reader(object):
 | 
			
		||||
        ascii_reader.setTabOrder(self.log_checkBox, self.staggered_checkBox)
 | 
			
		||||
        ascii_reader.setTabOrder(self.staggered_checkBox, self.stag_lineEdit)
 | 
			
		||||
        ascii_reader.setTabOrder(self.stag_lineEdit, self.pushButton)
 | 
			
		||||
        ascii_reader.setTabOrder(self.pushButton, self.skippy_checkbox)
 | 
			
		||||
 | 
			
		||||
    def retranslateUi(self, ascii_reader):
 | 
			
		||||
        _translate = QtCore.QCoreApplication.translate
 | 
			
		||||
@@ -336,9 +353,9 @@ class Ui_ascii_reader(object):
 | 
			
		||||
        self.spectrum_radioButton.setText(_translate("ascii_reader", "Spectrum"))
 | 
			
		||||
        self.bds_radioButton.setText(_translate("ascii_reader", "BDS"))
 | 
			
		||||
        self.label_7.setText(_translate("ascii_reader", "Use columns as"))
 | 
			
		||||
        self.y_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which columns are read for y-values. (\'Points\': Every number creates a new data set;\'FID\'/\'Spectrum\': Numbers at even positions are used for real parts, at odd positions for imaginary parts.)</p></body></html>"))
 | 
			
		||||
        self.y_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which columns are used for y values.</p><p>- \'Points\': Every number creates a new data set;<br/>- \'FID\'/\'Spectrum\': Numbers at even positions are used for real parts, at odd positions for imaginary parts.</p></body></html>"))
 | 
			
		||||
        self.y_label.setText(_translate("ascii_reader", "y"))
 | 
			
		||||
        self.x_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which column is used as x-value.</p></body></html>"))
 | 
			
		||||
        self.x_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which column is used for x values, write <span style=\" font-style:italic;\">index</span> to use row numbers (starting with 0). </p></body></html>"))
 | 
			
		||||
        self.label_5.setText(_translate("ascii_reader", "<html><head/><body><p>Δy</p></body></html>"))
 | 
			
		||||
        self.x_label.setText(_translate("ascii_reader", "x"))
 | 
			
		||||
        self.dsdfsf.setText(_translate("ascii_reader", "Numerical value"))
 | 
			
		||||
 
 | 
			
		||||
@@ -179,9 +179,13 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
 | 
			
		||||
 | 
			
		||||
    def apply(self):
 | 
			
		||||
        # default row for x is the first row, it will be superseded if an integer number is given.
 | 
			
		||||
        try:
 | 
			
		||||
            x = int(self.x_lineedit.text())-1
 | 
			
		||||
        except ValueError:
 | 
			
		||||
        x = self.x_lineedit.text()
 | 
			
		||||
        if x:
 | 
			
		||||
            try:
 | 
			
		||||
                x = int(x)-1
 | 
			
		||||
            except ValueError:
 | 
			
		||||
                pass
 | 
			
		||||
        else:
 | 
			
		||||
            x = None
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
from __future__ import annotations
 | 
			
		||||
 | 
			
		||||
import pathlib
 | 
			
		||||
import re
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
@@ -87,7 +89,7 @@ class AsciiReader:
 | 
			
		||||
 | 
			
		||||
    def export(
 | 
			
		||||
            self: 'AsciiReader',
 | 
			
		||||
            x: int = None,
 | 
			
		||||
            x: int | str = None,
 | 
			
		||||
            y: list = None,
 | 
			
		||||
            yerr: list = None,
 | 
			
		||||
            mode: str = 'points',
 | 
			
		||||
@@ -104,18 +106,20 @@ class AsciiReader:
 | 
			
		||||
        elif y is None:
 | 
			
		||||
            raise ValueError('y is None and yerr is not None')
 | 
			
		||||
 | 
			
		||||
        if (x is None) ^ (y is None):
 | 
			
		||||
            raise ValueError(f'x is {type(x)} and y is {type(y)}, should be both None or both defined')
 | 
			
		||||
        # if (x is None) ^ (y is None):
 | 
			
		||||
        #     raise ValueError(f'x is {type(x)} and y is {type(y)}, should be both None or both defined')
 | 
			
		||||
 | 
			
		||||
        if x is None:
 | 
			
		||||
            x = [0]
 | 
			
		||||
        elif isinstance(x, int):
 | 
			
		||||
            x = [x]
 | 
			
		||||
        elif isinstance(x, str) and x == 'index':
 | 
			
		||||
            x = []
 | 
			
		||||
        else:
 | 
			
		||||
            raise ValueError(f'x is {type(x)}  not int')
 | 
			
		||||
            raise ValueError(f'type of x is {type(x)} not `int` or `str`')
 | 
			
		||||
 | 
			
		||||
        if y is None:
 | 
			
		||||
            y = list(range(1, max(self.width)))
 | 
			
		||||
            y = list(range(int(len(x) != 0), max(self.width)))
 | 
			
		||||
 | 
			
		||||
        cols = x + y + yerr
 | 
			
		||||
        with self.fname.open('rb') as fh:
 | 
			
		||||
@@ -138,6 +142,17 @@ class AsciiReader:
 | 
			
		||||
        else:
 | 
			
		||||
            raw_data = raw_data.reshape((1, *raw_data.shape))
 | 
			
		||||
 | 
			
		||||
        if len(x) == 0 or raw_data.shape[2] == 1:
 | 
			
		||||
            _temp = np.zeros((raw_data.shape[0], raw_data.shape[1], raw_data.shape[2]+1))
 | 
			
		||||
            _temp[:, :, 0] = np.arange(raw_data.shape[1])
 | 
			
		||||
            _temp[:, :, 1:] = raw_data
 | 
			
		||||
            raw_data = _temp
 | 
			
		||||
 | 
			
		||||
            if y:
 | 
			
		||||
                y = [i+1 for i in y]
 | 
			
		||||
            else:
 | 
			
		||||
                y = [1]
 | 
			
		||||
 | 
			
		||||
        filename = self.fname.stem
 | 
			
		||||
 | 
			
		||||
        if self.delays:
 | 
			
		||||
 
 | 
			
		||||
@@ -236,7 +236,7 @@
 | 
			
		||||
               </sizepolicy>
 | 
			
		||||
              </property>
 | 
			
		||||
              <property name="toolTip">
 | 
			
		||||
               <string><html><head/><body><p>Specify which columns are read for y-values. ('Points': Every number creates a new data set;'FID'/'Spectrum': Numbers at even positions are used for real parts, at odd positions for imaginary parts.)</p></body></html></string>
 | 
			
		||||
               <string><html><head/><body><p>Specify which columns are used for y values.</p><p>- 'Points': Every number creates a new data set;<br/>- 'FID'/'Spectrum': Numbers at even positions are used for real parts, at odd positions for imaginary parts.</p></body></html></string>
 | 
			
		||||
              </property>
 | 
			
		||||
              <property name="inputMethodHints">
 | 
			
		||||
               <set>Qt::ImhFormattedNumbersOnly|Qt::ImhPreferNumbers</set>
 | 
			
		||||
@@ -259,7 +259,7 @@
 | 
			
		||||
               </sizepolicy>
 | 
			
		||||
              </property>
 | 
			
		||||
              <property name="toolTip">
 | 
			
		||||
               <string><html><head/><body><p>Specify which column is used as x-value.</p></body></html></string>
 | 
			
		||||
               <string><html><head/><body><p>Specify which column is used for x values, write <span style=" font-style:italic;">index</span> to use row numbers (starting with 0). </p></body></html></string>
 | 
			
		||||
              </property>
 | 
			
		||||
              <property name="inputMethodHints">
 | 
			
		||||
               <set>Qt::ImhFormattedNumbersOnly|Qt::ImhPreferNumbers</set>
 | 
			
		||||
@@ -620,6 +620,22 @@
 | 
			
		||||
 </customwidgets>
 | 
			
		||||
 <tabstops>
 | 
			
		||||
  <tabstop>tabWidget</tabstop>
 | 
			
		||||
  <tabstop>column_checkBox</tabstop>
 | 
			
		||||
  <tabstop>line_spinBox</tabstop>
 | 
			
		||||
  <tabstop>preview_spinBox</tabstop>
 | 
			
		||||
  <tabstop>pts_radioButton</tabstop>
 | 
			
		||||
  <tabstop>dsc_radioButton</tabstop>
 | 
			
		||||
  <tabstop>FID_radioButton</tabstop>
 | 
			
		||||
  <tabstop>spectrum_radioButton</tabstop>
 | 
			
		||||
  <tabstop>bds_radioButton</tabstop>
 | 
			
		||||
  <tabstop>x_lineedit</tabstop>
 | 
			
		||||
  <tabstop>y_lineedit</tabstop>
 | 
			
		||||
  <tabstop>deltay_lineEdit</tabstop>
 | 
			
		||||
  <tabstop>re_button</tabstop>
 | 
			
		||||
  <tabstop>regex_input</tabstop>
 | 
			
		||||
  <tabstop>re_match_index</tabstop>
 | 
			
		||||
  <tabstop>custom_button</tabstop>
 | 
			
		||||
  <tabstop>custom_input</tabstop>
 | 
			
		||||
  <tabstop>ascii_table</tabstop>
 | 
			
		||||
  <tabstop>delay_textfield</tabstop>
 | 
			
		||||
  <tabstop>delay_lineedit</tabstop>
 | 
			
		||||
@@ -629,6 +645,7 @@
 | 
			
		||||
  <tabstop>staggered_checkBox</tabstop>
 | 
			
		||||
  <tabstop>stag_lineEdit</tabstop>
 | 
			
		||||
  <tabstop>pushButton</tabstop>
 | 
			
		||||
  <tabstop>skippy_checkbox</tabstop>
 | 
			
		||||
 </tabstops>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections>
 | 
			
		||||
@@ -650,7 +667,7 @@
 | 
			
		||||
  </connection>
 | 
			
		||||
 </connections>
 | 
			
		||||
 <buttongroups>
 | 
			
		||||
  <buttongroup name="buttonGroup_2"/>
 | 
			
		||||
  <buttongroup name="buttonGroup"/>
 | 
			
		||||
  <buttongroup name="buttonGroup_2"/>
 | 
			
		||||
 </buttongroups>
 | 
			
		||||
</ui>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user