import numpy as np
import matplotlib.pyplot as plt
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Dropout
from keras.layers import Flatten
from keras.utils import to_categorical

# load the dataset
dataframe = read_csv('FigLinesAndEEGNew.csv', engine='python')
dataset = dataframe.values

riadok=25
fig=dataset[riadok,1]
print(np.shape(dataset))
#print(dataset[riadok,:])
aa=dataset[riadok,2:6931]

cc1=aa[0:784]
for i in range(len(cc1)):
    if cc1[i]>0:
        cc1[i]=1
cc2=np.reshape(cc1,[28,28],'A')
#print(cc2)
print('figure=',fig)

plt.figure(figsize = (3, 5))
for i in range(28):
    for j in range(28):
        if cc2[i,j]>0:
            plt.plot(j,28-i,'ko')
        else:
            plt.plot(j,28-i,'k.')

plt.xlabel('skumana cislica')
plt.show()
######################################################################################
######################################################################################

### Data preparation
zacEEGdat=787
dlzkaEEGdat=2048             ### pre 4 elektrody
datasetEEG=dataset[:,zacEEGdat:zacEEGdat+dlzkaEEGdat]
datasetEEGy=dataset[:,1]     ### cislica
print('datasetEEG',datasetEEG.shape)

### data pre kazdu elektrodu zvlast
EEG4=datasetEEG.reshape((datasetEEG.shape[0], 4, 512)).astype('float32')
print('EEG3shape=',EEG4.shape)
NoElectr=4   # pocet elektrod

# Vyber 1 riadku - experimentovanie
EEG4riadok=EEG4[riadok,:,:]
print('EEGriadok',EEG4riadok.shape)

from matplotlib import pyplot as plt
for i in range(4):
    plt.plot(EEG4riadok[i,:])
plt.title('4 elektrody')
plt.xlabel('time')
plt.ylabel('Amplituda, mV')
plt.show()

# Fourierova transformacia na 1 elektrode
from scipy.fft import fft
yf = fft(EEG4riadok[0,:])
plt.stem(abs(yf)[0:512])
plt.title('FFT')
plt.xlabel('Hz')
plt.show()

# Periodogram
from scipy.signal import periodogram
yf_period = periodogram(EEG4riadok[0,:])
plt.plot(yf_period[1][2:100])
plt.title('Periodogram')
plt.show()

# Welshova metoda
import mne
from mne.time_frequency import psd_array_welch
yf_welch = psd_array_welch(EEG4riadok[0,:], 512)
plt.plot(yf_welch[0][2:100])
plt.title('WELSH')
plt.ylabel('Hz')
plt.show()

# Spektrogram
from scipy.signal import spectrogram
ff,tt,Sxx=spectrogram(EEG4riadok[0,:],256,nperseg=51,noverlap=5,nfft=102)
# ff – pole frekvencií (y-os spektrogramu)
# tt – pole časových segmentov
# Sxx – hodnoty spektrogramu (amplitúdy sínusoviek na jednotlivých frekvenciách)
print('Sxx ',Sxx.shape)
print('ff  ',ff.shape)
print('tt ',tt.shape)

# Vykreslenie spektrogramu pomocou farieb
#print('Sxx',Sxx[:,:])
aFig=plt.pcolormesh(Sxx[:,:])
plt.title('Spektrogram - TP9')
plt.legend(['TP9'])
plt.ylabel('Frekvencia v Hz')
plt.xlabel('time (2secs at 256Hz)')
plt.show()

# Vyhodnotenie ziskanej FFT - alfa pasmo
pocet_stlpcov=6
tabulka = np.zeros((NoElectr, pocet_stlpcov), dtype = float)
tabulka.shape

dlzka_signalu = 512
vzorkovacia_frekvencia = 256
for i in range(NoElectr):
    signal = EEG4riadok[i,:]
    yf = fft(signal)
    print('yf= ',yf.shape)
    yf = abs(yf)/(dlzka_signalu//2)
    xt = np.arange(dlzka_signalu)
    T = dlzka_signalu / vzorkovacia_frekvencia
    xf = xt / T
    tabulka[i,0] = np.average(yf[16:24])     # amplitúdy frekvencí 8 - 12 Hz (alfa pásmo EEG)
                                             # sa nachádzajú v poli yf na pozíciách 16:24

    tabulka[i,1] = np.max(yf[16:24])

    yf_period = periodogram(signal)
    tabulka[i,2] = np.average(yf_period[1][16:24])
    tabulka[i,3] = np.max(yf_period[1][16:24])

    yf_welch = psd_array_welch(signal, vzorkovacia_frekvencia, n_per_seg=51, n_fft = 102)
    tabulka[i,4] = np.average(yf_welch[0][16:24])
    tabulka[i,5] = np.max(yf_welch[0][16:24])

import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
print(tabulka.shape)
df = pd.DataFrame(tabulka)
df.describe()
print(tabulka)

# amplitúdy frekvencí 8 - 12 Hz (alfa pásmo EEG)
#DELTA - 3 Hz a menej    (hlboký spanok, v bdelosti patologicke)
#THETA - 3.5 až 7.5 Hz   (kreativita, usinanie)
#ALPHA - 8 až 13 Hz      (relaxacia, zavrete oci)
#BETA - 14 Hz až 30Hz    (koncentracia, logicko-analyticke myslenie, neklud)
#GAMA - 30 Hz a více     (extremna koncentracia, hlboka meditacia)
#
#
# Uloha: priprava modifikovanych dat