import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def plot_image(dataframe,filter):

    for meas_idx in dataframe.loc[filter,:].index:
        meas = dataframe.loc[meas_idx,:] # pandas Series    
        fig = plt.figure()
        ax = plt.gca()
        rows, cols = meas['image'].shape
        scientaEkin_eV = meas['scientaEkin_eV'].flatten()
        x_min, x_max = np.min(scientaEkin_eV), np.max(scientaEkin_eV)
        y_min, y_max = 0, rows
        ax.imshow(meas['image'],extent = [x_min,x_max,y_min,y_max])
        ax.set_xlabel('scientaEkin_eV')
        ax.set_ylabel('Replicates')
        ax.set_title(meas['name'][0] + '\n' + meas['sample'][0]+ '\n' + meas['lastModifiedDatestr'][0])

def plot_spectra(dataframe,filter):

    """ plot_spectra plots XPS spectra associated to 'dataframe' after row reduced by 'filter'. 
    When more than one row are specified by the 'filter' input, indivial spectrum are superimposed
    on the same plot.

    Parameters:
    dataframe (pandas.DataFrame): table with heterogenous entries obtained by read_hdf5_as_dataframe.py.
    filter (binaray array): binary indexing array with same number of entries as rows in dataframe.

    """
    fig = plt.figure()
    ax = plt.gca()

    for meas_idx in dataframe.loc[filter,:].index:
        meas = dataframe.loc[meas_idx,:] # pandas Series   

        rows, cols = meas['image'].shape
        bindingEnergy_eV = meas['bindingEnergy_eV'].flatten()
        spectrum_countsPerSecond = meas['spectrum_countsPerSecond'].flatten()
        x_min, x_max = np.min(bindingEnergy_eV), np.max(bindingEnergy_eV)
        y_min, y_max = 0, rows
        #for i in range(cols):
        #ax.plot(bindingEnergy_eV, spectrum_countsPerSecond,label = meas['name'][0])
        ax.plot(bindingEnergy_eV, spectrum_countsPerSecond,label = meas['name'])

    ax.set_xlabel('bindingEnergy_eV')
    ax.set_ylabel('counts Per Second')
    ax.set_title('\n'+meas['sample']+ '\n' + 'PE spectra')
    #ax.set_title('\n'+meas['sample'][0]+ '\n' + 'PE spectra')
    #ax.set_title(meas['name'][0] + '\n'+meas['sample'][0]+ '\n' + meas['lastModifiedDatestr'][0])
    ax.legend()



