import numpy as np
import pandas as pd
from PyQt5 import QtWidgets
from gui.ui.Standardize import Ui_Form
from gui.util.Modules import Modules
from libpyhat.spectral_data import SpectralData
[docs]
class Standardize(Ui_Form, Modules):
[docs]
    def setupUi(self, Form):
        super().setupUi(Form)
        Modules.setupUi(self, Form) 
[docs]
    def run(self):
        if 'Standardization Vectors' in self.datakeys:
            pass
        else:
            Modules.data_count += 1
            self.list_amend(
                self.datakeys, Modules.data_count,
                'Standardization Vectors'
            )
        datakey_to_scale = self.chooseDataComboBox.currentText()
        datakey_to_fit = self.comboBox.currentText()
        try:
            self.data[datakey_to_scale].scale(
                df_to_fit=self.data[datakey_to_fit].df
            )
            print(
                datakey_to_scale + " standardized using spectral channel "
                                   "mean and standard deviations from  " +
                datakey_to_fit
            )
            try:
                scaler = self.data[datakey_to_scale].scaler
                scaler_out = pd.DataFrame(
                    np.vstack((scaler.var_, scaler.mean_)).T,
                    columns=['variance', 'mean']
                )
                spect_label = self.data[datakey_to_fit].spect_label
                scaler_out.index = [(spect_label, x) for x in
                    self.data[datakey_to_fit].df[
                        spect_label].columns.values]
                scaler_out = scaler_out.T
                scaler_out.reset_index(
                    names=[('meta', 'vector')],
                    inplace=True
                )
                scaler_out[('meta', 'Dataset')] = datakey_to_fit
                scaler_out.columns = pd.MultiIndex.from_tuples(
                    scaler_out.columns
                )
                try:
                    self.data['Standardization Vectors'] = SpectralData(
                        pd.concat(
                            [self.data['Standardization Vectors'].df,
                                scaler_out]
                        ),
                        name='Standardization Vectors'
                    )
                except:
                    self.data['Standardization Vectors'] = SpectralData(
                        scaler_out, name='Standardization Vectors',
                        meta_label='meta', spect_label=spect_label
                    )
            except:
                pass
        except:
            pass 
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Standardize()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())