#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

from funkce2 import *
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import csv
from lib.utilities import load_or_get

"""--------------------
POPIS:
vytvoření grafu skrze všechny kanály, vykreslení SOZ, NON i IZ, jeden pacient

výstupy:
ll_df - DataFrame obsahující názvy kanálů a k nim přiřazené soz info
hfo_events1 - DataFrame obsahující počty detekcí v jednotlivých kanálech s ohledem na soz info
15channel_analysis.csv – soubor obsahující počty soz_info v jednotlivých kanálech
------------------------------------------------------------------------------------- """
databases = ['LL_alg_Fnusa', 'Matt_alg_Fnusa', 'hilbert_alg_v2']

#-----zadání požadavků-----
database = databases[0]     # volba 0, 1, 2
i = 32                      # volba 2 až 33
columns = 'channel_name' #columns = 'channel_name, normed_LL'
#--------

seeg = i

#--- zobrazení celého DataFrame
pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

#--- funkce pro načtení záznamů databáze a přiřazení soz_info
ll_df = get_data(database, seeg, i, columns)

#--- funkce pro výpočet počtu detekcí v jednotlivých kanálech
hfo_events1 = count_hfo_events(ll_df)
hfo_events_resected = count_hfo_events_resected(ll_df)
hfo_events_resected.reset_index(inplace=True)

#--- zjištění měřených kanálů
channels = ll_df.channel_name.unique()

#--- převod str do numerického formátu
hfo_events1.convert_objects(convert_numeric=True)


hfo_events_resected_graph = hfo_events_resected

for i in range(0,len(hfo_events_resected_graph)):
    if hfo_events_resected_graph.resection[i] == 'non_resected':
        hfo_events_resected_graph.soz_info[i] = 0


'''---------- vykreslení dat -----------'''
sns.set(style="white", context="talk")
rs = np.random.RandomState(7)

f, (ax) = plt.subplots(1, 1, figsize=(8, 6), sharex=True)
sns.plt.suptitle('Pacient cislo ' + str(seeg) + ', databaze ' + str(database))

#--- vstupní data, osa x
x1 = np.array(list(channels))
x2 = np.array(list(channels))
x3 = np.array(list(channels))
#x4 = np.array(list(channels))


#--- vstupní data, osy y1, y2, y3
y1 = np.array(hfo_events1.IZ_count)
sns.barplot(x3, y1, ax=ax, color='yellow', label='IZ')

y2 = np.array(hfo_events1.SOZ_count)
sns.barplot(x1, y2, ax=ax, color='red', label='SOZ')

y3 = np.array(hfo_events1.NON_SOZ_count)
sns.barplot(x2, y3, ax=ax, color='green', label='NON_SOZ')
ax.set_ylabel("pocet detekci")

#y4 = np.array(hfo_events_resected_graph.soz_info)
#sns.barplot(x2, y4, ax=ax, color='blue', label='resected')

#plt.legend(handles = [y1, y2, y3])
plt.legend()
plt.show()

'''--- vykreslení dat se subploty'''
sns.set(style="white", context="talk")
rs = np.random.RandomState(7)

f, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize=(8, 6), sharex=True)
sns.plt.suptitle('Pacient cislo ' + str(seeg) + ', databaze ' + str(database))# + ', database ' + str(database))

#--- vstupní data, osa x
x1 = np.array(list(channels))
x2 = np.array(list(channels))
x3 = np.array(list(channels))
x4 = x3

#--- vstupní data, osy y1, y2, y3
y1 = np.array(hfo_events1.IZ_count)
sns.barplot(x3, y1, ax=ax1, color='yellow')
ax1.set_ylabel("IZ")
# ax1.set_xticks(np.arange(25))
# ax1.set_yticks(np.arange(25))
#ax1.grid(True)

y2 = np.array(hfo_events1.SOZ_count)
sns.barplot(x1, y2, palette="Reds_d", ax=ax2)
ax2.set_ylabel("SOZ")

y3 = np.array(hfo_events1.NON_SOZ_count)
sns.barplot(x2, y3, palette="BuGn_d", ax=ax3)
ax3.set_ylabel("NONSOZ")

y4 = np.array(hfo_events_resected_graph.soz_info)
sns.barplot(x2, y4, ax=ax4, color='blue')
ax4.set_ylabel("resected")
#y4 = np.array(hfo_events_resected_graph.soz_info)
#sns.barplot(x2, y4, ax=ax, color='blue', label='resected')

plt.show()

'''--------vykreslení včetně resected'''

sns.set(style="white", context="talk")
rs = np.random.RandomState(7)

f, (ax,ax2) = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
sns.plt.suptitle('Pacient cislo ' + str(seeg) + ', databaze ' + str(database))

#--- vstupní data, osa x
x1 = np.array(list(channels))
x2 = np.array(list(channels))
x3 = np.array(list(channels))
x4 = np.array(list(channels))

#--- vstupní data, osy y1, y2, y3
y1 = np.array(hfo_events1.IZ_count)
sns.barplot(x3, y1, ax=ax, color='yellow', label='IZ')

y2 = np.array(hfo_events1.SOZ_count)
sns.barplot(x1, y2, ax=ax, color='red', label='SOZ')

y3 = np.array(hfo_events1.NON_SOZ_count)
sns.barplot(x2, y3, ax=ax, color='green', label='NON_SOZ')
ax.set_ylabel("pocet detekci")
legend = plt.legend()

y4 = np.array(hfo_events_resected_graph.soz_info)
sns.barplot(x2, y4, ax=ax2, color='blue', label='resected')

#plt.legend(handles = [y1, y2, y3])
legend2 = plt.legend()
plt.show()

print ('Počet SOZ kanálů u pacienta č. '+str(seeg)+ ' : ' +str(len(hfo_events1.loc[hfo_events1['SOZ_count'] != 0]))+'')
print ('Počet IZ kanálů u pacienta č. '+str(seeg)+ ' : ' +str(len(hfo_events1.loc[hfo_events1['IZ_count'] != 0]))+'')
print ('Počet NON_SOZ kanálů u pacienta č. '+str(seeg)+ ' : ' +str(len(hfo_events1.loc[hfo_events1['NON_SOZ_count'] != 0]))+'')
print ('Počet resekovaných kanálů u pacienta č. '+str(seeg)+ ' : ' +str(len(hfo_events_resected.loc[hfo_events_resected['resection'] != 'non_resected']))+'')

#NON_SOZ_data = bu[bu.soz_info == 'NON_SOZ'].resection.values

#------ zápis dat do formátu kanály, počet SOZ a počet NON --------
with open(str(seeg) + 'channel_analysis.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows((channels, y1, y2))




