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

from roc_function import *
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt
from funkce2 import *
#from roc_curve import *
from sklearn import metrics
import seaborn as sns
import sys
from lib.utilities import load_or_get
"""--------------------
POPIS:
Výsledkem dvě křivky:
vytvoření ROC pro zvolené pacienty, jeden algoritmus, výpočet hodnoty AUC
vytvoření ROC pro resekovanou tkáň u těchto pacientů, výpočet hodnoty AUC
-------------------------------------------------------------------------------------"""

databases = ['LL_alg_Fnusa', 'Matt_alg_Fnusa', 'hilbert_alg_v2']

#-------zadání parametrů
#patients = range(2, 5)
patients = [5, 7, 15, 18, 32]
database = databases[0]


#----definice proměnných
fpr = dict()
tpr = dict()
fpr_resected = dict()
tpr_resected = dict()
total_count = dict()
doctor = dict()
resected = dict()
AUC = dict()

#-------vytvoření dictionary pro zvolené pacienty, výpočet hodnot podle lékařského určení a podle resekované tkáně
for vybrany_pacient in patients:
    fpr[vybrany_pacient], tpr[vybrany_pacient], total_count[vybrany_pacient], doctor[vybrany_pacient] = load_or_get(roc, database, vybrany_pacient, vybrany_pacient, 'channel_name') #total_count[vybrany_pacient], doctor[vybrany_pacient] NECHCI
    #--- resekovaná tkáň:
    fpr_resected[vybrany_pacient], tpr_resected[vybrany_pacient], total_count[vybrany_pacient], resected[vybrany_pacient] = load_or_get(roc_resected, database, vybrany_pacient, vybrany_pacient, 'channel_name') #total_count[vybrany_pacient], doctor[vybrany_pacient] NECHCI

print(repr(fpr_resected))


#-------vykreslení grafu
#size = determine_graph_sizes(len(patients))
plt.figure('ROC')
i = 1

for patient in patients:

    i += 1

    plt.title('Pacienti cislo ' + str(patients) + ', databaze ' +str(database))

    fpr_one_patient = fpr.get(patient)
    tpr_one_patient = tpr.get(patient)

    line_x = [0,1]
    line_y = [0,1]

    #-----výpočet AUC
    AUC[patient] = round(metrics.auc(fpr_one_patient, tpr_one_patient),3)

    curve = plt.plot(fpr_one_patient, tpr_one_patient, label = 'Pacient cislo ' + str(patient) + ' , AUC: ' + str(AUC[patient]) )#, line_x, line_y)
    line = plt.plot(line_x, line_y)

    plt.setp(curve, 'linewidth', 2.0, 'marker', '+', 'alpha', 0.6)#, 'linestyle', '--'
    plt.setp(line, 'color', "b",'linewidth', 1.0, 'alpha', 0.3, 'linestyle', '--')
    plt.style.use('classic')
    #plt.legend(curve, 'show'  + str(patient))
    #PŘIDAT LEGENDU

#plt.legend([p1, p2, p3, p4, p5], [names[0], names[1], names[2], names[3], "Random guess"], loc = 2)

plt.xlabel('False Positive Rate (specificita)')
plt.ylabel('True Positive Rate (senzitivita)')

plt.legend(loc='lower right') #'center right', 'upper right'
#plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show()

AUC



from textwrap import wrap
#--------vykresleni resekovane tkane
plt.figure('ROC_resected')
i = 1

for patient in patients:

    i += 1

    title= ('Pacienti cislo ' + str(patients) + ', databaze ' +str(database)+ ', resekovana tkan ')
    plt.title('\n'.join(wrap(title, 60)))

    fpr_one_patient = fpr_resected.get(patient)
    tpr_one_patient = tpr_resected.get(patient)

    line_x = [0,1]
    line_y = [0,1]

    #-----výpočet AUC
    AUC[patient] = round(metrics.auc(fpr_one_patient, tpr_one_patient),3)

    curve = plt.plot(fpr_one_patient, tpr_one_patient, label = 'p. ' + str(patient) + ' , AUC: ' + str(AUC[patient]) )#, line_x, line_y)
    line = plt.plot(line_x, line_y)

    plt.setp(curve, 'linewidth', 2.0, 'marker', '+', 'alpha', 0.6)#, 'linestyle', '--'
    plt.setp(line, 'color', "b",'linewidth', 1.0, 'alpha', 0.3, 'linestyle', '--')
    plt.style.use('classic')
    #plt.legend(curve, 'show'  + str(patient))
    #PŘIDAT LEGENDU

#plt.legend([p1, p2, p3, p4, p5], [names[0], names[1], names[2], names[3], "Random guess"], loc = 2)

plt.xlabel('False Positive Rate (specificita)')
plt.ylabel('True Positive Rate (senzitivita)')

plt.legend(loc = 0)
#plt.legend(loc='lower right') #'center right', 'upper right'
#plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show()

AUC