#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 15 16:35:28 2021

@author: louise
"""

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
import csv
from matplotlib import cbook
import matplotlib.ticker as mticker

#import hole data
with open('30umSC_holes.csv', newline='') as f:
    reader = csv.reader(f)
    hole_list30 = list(reader)

with open('20umSC_holes.csv', newline='') as f:
    reader = csv.reader(f)
    hole_list20 = list(reader)
    
with open('14_8umSC_holes.csv', newline='') as f:
    reader = csv.reader(f)
    hole_list14 = list(reader)
    
with open('10umSC_holes.csv', newline='') as f:
    reader = csv.reader(f)
    hole_list10 = list(reader)
    
with open('0umSC_holes.csv', newline='') as f:
    reader = csv.reader(f)
    hole_list0 = list(reader)
    
maxw=len(hole_list20)

index90_30=[]
index1_30=[]
index10_30=[]

index90_20=[]
index1_20=[]
index10_20=[]

index90_14=[]
index1_14=[]
index10_14=[]

index90_10=[]
index1_10=[]
index10_10=[]

index90_0=[]
index1_0=[]
index10_0=[]


for k in range(maxw): #loop through each wavelength
    v10=min(range(len(hole_list30[k])), key=lambda i: abs(float(hole_list30[k][i])- 0.1)) #find 10%
    v90=min(range(len(hole_list30[k])), key=lambda i: abs(float(hole_list30[k][i])- 0.9)) #find 90%
    v1=min(range(len(hole_list30[k])), key=lambda i: abs(float(hole_list30[k][i])- 0.01)) #find 50%
    
    index10_30.append(v10)
    index90_30.append(v90)
    index1_30.append(v1)

for k in range(maxw): #loop through each wavelength
    v10=min(range(len(hole_list20[k])), key=lambda i: abs(float(hole_list20[k][i])- 0.1)) #find 10%
    v90=min(range(len(hole_list20[k])), key=lambda i: abs(float(hole_list20[k][i])- 0.9)) #find 90%
    v1=min(range(len(hole_list20[k])), key=lambda i: abs(float(hole_list20[k][i])- 0.01)) #find 50%
    
    index10_20.append(v10)
    index90_20.append(v90)
    index1_20.append(v1)
    
for k in range(maxw): #loop through each wavelength
    v10=min(range(len(hole_list14[k])), key=lambda i: abs(float(hole_list14[k][i])- 0.1)) #find 10%
    v90=min(range(len(hole_list14[k])), key=lambda i: abs(float(hole_list14[k][i])- 0.9)) #find 90%
    v1=min(range(len(hole_list14[k])), key=lambda i: abs(float(hole_list14[k][i])- 0.01)) #find 50%
    
    index10_14.append(v10)
    index90_14.append(v90)
    index1_14.append(v1)
    
for k in range(maxw): #loop through each wavelength
    v10=min(range(len(hole_list10[k])), key=lambda i: abs(float(hole_list10[k][i])- 0.1)) #find 10%
    v90=min(range(len(hole_list10[k])), key=lambda i: abs(float(hole_list10[k][i])- 0.9)) #find 90%
    v1=min(range(len(hole_list10[k])), key=lambda i: abs(float(hole_list10[k][i])- 0.01)) #find 50%
    
    index10_10.append(v10)
    index90_10.append(v90)
    index1_10.append(v1)
    
for k in range(maxw): #loop through each wavelength
    v10=min(range(len(hole_list0[k])), key=lambda i: abs(float(hole_list0[k][i])- 0.1)) #find 10%
    v90=min(range(len(hole_list0[k])), key=lambda i: abs(float(hole_list0[k][i])- 0.9)) #find 90%
    v1=min(range(len(hole_list0[k])), key=lambda i: abs(float(hole_list0[k][i])- 0.01)) #find 50%
    
    index10_0.append(v10)
    index90_0.append(v90)
    index1_0.append(v1)
    

#10% left
ten_30=[]    
for i in range(maxw):
    ten_30.append(hole_list30[i][index10_30[i]])
    
#90% left
ninety_30=[]    
for i in range(maxw):
    ninety_30.append(hole_list30[i][index90_30[i]])
    
#1% left
one_30=[]    
for i in range(maxw):
    one_30.append(hole_list30[i][index1_30[i]])

#10% left
ten_20=[]    
for i in range(maxw):
    ten_20.append(hole_list20[i][index10_20[i]])
    
#90% left
ninety_20=[]    
for i in range(maxw):
    ninety_20.append(hole_list20[i][index90_20[i]])
    
#1% left
one_20=[]    
for i in range(maxw):
    one_20.append(hole_list20[i][index1_20[i]])

#10% left
ten_14=[]    
for i in range(maxw):
    ten_14.append(hole_list14[i][index10_14[i]])
    
#90% left
ninety_14=[]    
for i in range(maxw):
    ninety_14.append(hole_list14[i][index90_14[i]])
    
#1% left
one_14=[]    
for i in range(maxw):
    one_14.append(hole_list14[i][index1_14[i]])
        
#10% left
ten_10=[]    
for i in range(maxw):
    ten_10.append(hole_list10[i][index10_10[i]])
    
#90% left
ninety_10=[]    
for i in range(maxw):
    ninety_10.append(hole_list10[i][index90_10[i]])
    
#1% left
one_10=[]    
for i in range(maxw):
    one_10.append(hole_list10[i][index1_10[i]])
    
#10% left
ten_0=[]    
for i in range(maxw):
    ten_0.append(hole_list0[i][index10_0[i]])
    
#90% left
ninety_0=[]    
for i in range(maxw):
    ninety_0.append(hole_list0[i][index90_0[i]])
    
#1% left
one_0=[]    
for i in range(maxw):
    one_0.append(hole_list0[i][index1_0[i]])
    
depth30=[]    
    
zmax=0.2505

sc_width=0.003 
e_width=0.0053
m_width=0.0032 
b_width=0.0032
d_width=0.1970
h_width=0.3
            
sc_z_vox=300
e_z_vox=100
m_z_vox=100
b_z_vox=100
d_z_vox=150
h_z_vox=150
            
sc_nzg= (2.*zmax)/(sc_width/sc_z_vox)
e_nzg= (2.*zmax)/(e_width/e_z_vox)
m_nzg=(2.*zmax)/(m_width/m_z_vox)
b_nzg= (2.*zmax)/(b_width/b_z_vox)
d_nzg= (2.*zmax)/(d_width/d_z_vox)
h_nzg= (2.*zmax)/(h_width/h_z_vox)

dep=0.


for i in range(0,300):
    dep=dep + ((2*zmax)/sc_nzg) # 10 converts to mm
    depth30.append(dep)
    
for i in range(300,400):
    dep=dep + ((2*zmax)/e_nzg)
    depth30.append(dep)
    
for i in range(400,500):
    dep=dep + ((2*zmax)/m_nzg)
    depth30.append(dep)

for i in range(500,600):
    dep=dep + ((2*zmax)/b_nzg)
    depth30.append(dep)
    
for i in range(600,750):
    dep=dep + ((2*zmax)/d_nzg)
    depth30.append(dep)
    
for i in range(750,900):
    dep=dep + ((2*zmax)/h_nzg)
    depth30.append(dep)

for i in range(900):
    depth30[i]=depth30[i]*10




depth20=[]    
    
zmax=0.25

sc_width=0.002 
e_width=0.0053
m_width=0.0032 
b_width=0.0032
d_width=0.1970
h_width=0.3
            
sc_z_vox=200
e_z_vox=100
m_z_vox=100
b_z_vox=100
d_z_vox=150
h_z_vox=150
            
sc_nzg= (2.*zmax)/(sc_width/sc_z_vox)
e_nzg= (2.*zmax)/(e_width/e_z_vox)
m_nzg=(2.*zmax)/(m_width/m_z_vox)
b_nzg= (2.*zmax)/(b_width/b_z_vox)
d_nzg= (2.*zmax)/(d_width/d_z_vox)
h_nzg= (2.*zmax)/(h_width/h_z_vox)

dep=0.001


for i in range(0,200):
    dep=dep + ((2*zmax)/sc_nzg) # 10 converts to mm
    depth20.append(dep)
    
for i in range(200,300):
    dep=dep + ((2*zmax)/e_nzg)
    depth20.append(dep)
    
for i in range(300,400):
    dep=dep + ((2*zmax)/m_nzg)
    depth20.append(dep)

for i in range(400,500):
    dep=dep + ((2*zmax)/b_nzg)
    depth20.append(dep)
    
for i in range(500,650):
    dep=dep + ((2*zmax)/d_nzg)
    depth20.append(dep)
    
for i in range(650,800):
    dep=dep + ((2*zmax)/h_nzg)
    depth20.append(dep)
    
for i in range(800):
    depth20[i]=depth20[i]*10
    
depth14=[]    
    
zmax=0.24974

sc_width=0.00148 
e_width=0.0053
m_width=0.0032 
b_width=0.0032
d_width=0.1970
h_width=0.3
            
sc_z_vox=148
e_z_vox=100
m_z_vox=100
b_z_vox=100
d_z_vox=150
h_z_vox=150
            
sc_nzg= (2.*zmax)/(sc_width/sc_z_vox)
e_nzg= (2.*zmax)/(e_width/e_z_vox)
m_nzg=(2.*zmax)/(m_width/m_z_vox)
b_nzg= (2.*zmax)/(b_width/b_z_vox)
d_nzg= (2.*zmax)/(d_width/d_z_vox)
h_nzg= (2.*zmax)/(h_width/h_z_vox)

dep=0.00152

for i in range(0,148):
    dep=dep + ((2*zmax)/sc_nzg) # 10 converts to mm
    depth14.append(dep)
    
for i in range(148,248):
    dep=dep + ((2*zmax)/e_nzg)
    depth14.append(dep)
    
for i in range(248,348):
    dep=dep + ((2*zmax)/m_nzg)
    depth14.append(dep)
    
for i in range(348,448):
    dep=dep + ((2*zmax)/b_nzg)
    depth14.append(dep)
    
for i in range(448,598):
    dep=dep + ((2*zmax)/d_nzg)
    depth14.append(dep)
    
for i in range(598,748):
    dep=dep + ((2*zmax)/h_nzg)
    depth14.append(dep)
    
for i in range(748):
    depth14[i]=depth14[i]*10
    
depth10=[]    
    
zmax=0.2495

sc_width=0.001 
e_width=0.0053
m_width=0.0032 
b_width=0.0032
d_width=0.1970
h_width=0.3
            
sc_z_vox=100
e_z_vox=100
m_z_vox=100
b_z_vox=100
d_z_vox=150
h_z_vox=150
            
sc_nzg= (2.*zmax)/(sc_width/sc_z_vox)
e_nzg= (2.*zmax)/(e_width/e_z_vox)
m_nzg=(2.*zmax)/(m_width/m_z_vox)
b_nzg= (2.*zmax)/(b_width/b_z_vox)
d_nzg= (2.*zmax)/(d_width/d_z_vox)
h_nzg= (2.*zmax)/(h_width/h_z_vox)

dep=0.002



for i in range(0,100):
    dep=dep + ((2*zmax)/sc_nzg)# 10 converts to mm
    depth10.append(dep)
    
for i in range(100,200):
    dep=dep + ((2*zmax)/e_nzg) 
    depth10.append(dep)
    
for i in range(200,300):
    dep=dep + ((2*zmax)/m_nzg) 
    depth10.append(dep)
    
for i in range(300,400):
    dep=dep + ((2*zmax)/b_nzg) 
    depth10.append(dep)
    
for i in range(400,550):
    dep=dep + ((2*zmax)/d_nzg)
    depth10.append(dep)
    
for i in range(550,700):
    dep=dep + ((2*zmax)/h_nzg)
    depth10.append(dep)

for i in range(700):
    depth10[i]=depth10[i]*10
    
depth0=[]    
    
zmax=0.249

#sc_width=0
e_width=0.0053
m_width=0.0032 
b_width=0.0032
d_width=0.1970
h_width=0.3
            
#sc_z_vox=0
e_z_vox=100
m_z_vox=100
b_z_vox=100
d_z_vox=150
h_z_vox=150
            
#sc_nzg= (2.*zmax)/(sc_width/sc_z_vox)
e_nzg= (2.*zmax)/(e_width/e_z_vox)
m_nzg=(2.*zmax)/(m_width/m_z_vox)
b_nzg= (2.*zmax)/(b_width/b_z_vox)
d_nzg= (2.*zmax)/(d_width/d_z_vox)
h_nzg= (2.*zmax)/(h_width/h_z_vox)

dep=0.003



#for i in range(0,100):
 #   dep=dep + ((2*zmax)/sc_nzg)*10 # 10 converts to mm
  #  depth.append(dep)
    
for i in range(0,100):
    dep= (dep + ((2*zmax)/e_nzg)) 
    depth0.append(dep)
    
for i in range(100,200):
    dep=(dep + ((2*zmax)/m_nzg)) 
    depth0.append(dep)
    
for i in range(200,300):
    dep=(dep + ((2*zmax)/b_nzg)) 
    depth0.append(dep)
    
for i in range(300,450):
    dep=(dep + ((2*zmax)/d_nzg)) 
    depth0.append(dep)
    
for i in range(450,600):
    dep=(dep + ((2*zmax)/h_nzg))
    depth0.append(dep)
    
for i in range(600):
    depth0[i]=depth0[i]*10
    
#create arrays of different depth values at percentages


#10% left
dten_30=[]    
for i in range(maxw):
    dten_30.append(depth30[index10_30[i]])
    
#90% left
dninety_30=[]    
for i in range(maxw):
    dninety_30.append(depth30[index90_30[i]])
    
#1% left
done_30=[]    
for i in range(maxw):
    done_30.append(depth30[index1_30[i]])
    

#10% left
dten_20=[]    
for i in range(maxw):
    dten_20.append(depth20[index10_20[i]])
    
#90% left
dninety_20=[]    
for i in range(maxw):
    dninety_20.append(depth20[index90_20[i]])
    
#1% left
done_20=[]    
for i in range(maxw):
    done_20.append(depth20[index1_20[i]])
    
#10% left
dten_14=[]    
for i in range(maxw):
    dten_14.append(depth14[index10_14[i]])
    
#90% left
dninety_14=[]    
for i in range(maxw):
    dninety_14.append(depth14[index90_14[i]])
    
#1% left
done_14=[]    
for i in range(maxw):
    done_14.append(depth14[index1_14[i]])
    
#10% left
dten_10=[]    
for i in range(maxw):
    dten_10.append(depth10[index10_10[i]])
    
#90% left
dninety_10=[]    
for i in range(maxw):
    dninety_10.append(depth10[index90_10[i]])
    
#1% left
done_10=[]    
for i in range(maxw):
    done_10.append(depth10[index1_10[i]])
    
#10% left
dten_0=[]    
for i in range(maxw):
    dten_0.append(depth0[index10_0[i]])
    
#90% left
dninety_0=[]    
for i in range(maxw):
    dninety_0.append(depth0[index90_0[i]])
    
#1% left
done_0=[]    
for i in range(maxw):
    done_0.append(depth0[index1_0[i]])
    
print(max(done_0))



wavelength=np.arange(200,401)

#plt.plot(wavelength, dninety_30 ,color='#018571',linestyle='-', marker='d',markevery=25, label=('30um 90%'))
#plt.plot(wavelength, dten_30, color='#80cdc1',linestyle='-',linewidth=2.0,marker='v',markevery=25,  label=('30um 10%'))
#plt.plot(wavelength, done_30 ,color='#a6611a',linestyle='-', marker='*',markevery=25, label=('30um 1%'))


#plt.plot(wavelength, dninety_20 ,color='#018571',linestyle='-', marker='d',markevery=25, label=('20um 90%'))
#plt.plot(wavelength, dten_20, color='#80cdc1',linestyle='-',linewidth=2.0,marker='v',markevery=25,  label=('20um 10%'))
#plt.plot(wavelength, done_20 ,color='#a6611a',linestyle='-', marker='*',markevery=25, label=('20um 1%'))

#plt.plot(wavelength, dninety_14 ,color='#018571',linestyle='-',marker='d',markevery=25, label=('90%'))
#plt.plot(wavelength, dten_14 ,color='#80cdc1',linestyle='-',linewidth=2.0, marker='v',markevery=25,label=('10%'))
#plt.plot(wavelength, done_14 ,color='#a6611a',linestyle='-',marker='*',markevery=25, label=('1%'))

plt.plot(wavelength, dninety_10 ,color='#018571',linestyle='-', marker='d',markevery=25,label=('10um 90%'))
plt.plot(wavelength, dten_10, color='#80cdc1',linestyle='-',linewidth=2.0,marker='v',markevery=25, label=('10um 10%'))
plt.plot(wavelength, done_10 ,color='#a6611a',linestyle='-',marker='*',markevery=25, label=('10um 1%'))

#plt.plot(wavelength, dninety_0 ,color='#018571',linestyle='-',marker='d',markevery=25,  label=('0um 90%'))
#plt.plot(wavelength, dten_0 ,color='#80cdc1',linestyle='-',linewidth=2.0, marker='v',markevery=25, label=('0um 10%'))
#plt.plot(wavelength, done_0 ,color='#a6611a',linestyle='-',marker='*',markevery=25,  label=('0um 1%'))

#color='paleturquoise'
#color='c'
#color='mediumblue'
#upload layer image
im = plt.imread('layerimage200-400_30um.png');
ext=[200, 400, 0, max(done_0)]
plt.imshow(im, zorder=0, extent=ext)


aspect=im.shape[0]/float(im.shape[1])*((ext[1]-ext[0])/(ext[3]-ext[2]))
plt.gca().set_aspect(aspect)

ax=plt.gca()
ax.set_yscale('log')
ax.set_yticks([0.0001,0.001, 0.01,0.1, 1])
#ax.yaxis.set_major_formatter(mticker.ScalarFormatter())
#ax.yaxis.get_major_formatter().set_scientific(False)
#ax.yaxis.get_major_formatter().set_useOffset(False)
#plt.legend()
#plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0., fontsize=11.3)
#plt.title('Percentage of Incident Light at depth for Varying Stratum Corneum Thickness')
plt.xlabel('Wavelength (nm)', fontsize=15)
#plt.xscale('log')
#plt.yscale('log')

plt.gca().invert_yaxis()
plt.ylabel('Depth (mm)', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

#plt.ticklabel_format(axis='y', style='sci', scilimits=(0,0))

plt.savefig('10um_sc_high_res.eps',format='eps', dpi=1200,bbox_inches='tight')
plt.show()
    

    