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('700-1000_direct.csv', newline='') as f:    
#with open('400-700_holes_direct.csv', newline='') as f:
    reader = csv.reader(f)
    hole_list = list(reader)
    
maxw=len(hole_list)
    
#find indices of different fluence percent
index10=[]
index50=[]
index90=[]
index1=[]
index01=[]  
index37=[]     

for k in range(maxw): #loop through each wavelength
    v10=min(range(len(hole_list[k])), key=lambda i: abs(float(hole_list[k][i])- 0.1)) #find 10%
    v50=min(range(len(hole_list[k])), key=lambda i: abs(float(hole_list[k][i])- 0.5)) #find 50%
    v90=min(range(len(hole_list[k])), key=lambda i: abs(float(hole_list[k][i])- 0.9)) #find 90%
    v1=min(range(len(hole_list[k])), key=lambda i: abs(float(hole_list[k][i])- 0.01)) #find 50%
    v01=min(range(len(hole_list[k])), key=lambda i: abs(float(hole_list[k][i])- 0.001)) #find 0.1%
    v37=min(range(len(hole_list[k])), key=lambda i: abs(float(hole_list[k][i])- 0.37)) #find 37%
    index10.append(v10)
    index50.append(v50)
    index90.append(v90)
    index1.append(v1)
    index01.append(v01)
    index37.append(v37)
    
#create arrays of different fluence percentage values
#10% left
ten=[]    
for i in range(maxw):
    ten.append(hole_list[i][index10[i]])
    
#50% left
fiftey=[]    
for i in range(maxw):
    fiftey.append(hole_list[i][index50[i]])
    
#90% left
ninety=[]    
for i in range(maxw):
    ninety.append(hole_list[i][index90[i]])
    
#1% left
one=[]    
for i in range(maxw):
    one.append(hole_list[i][index1[i]])
    
#37% left
thirsev=[]    
for i in range(maxw):
    thirsev.append(hole_list[i][index37[i]])
    
#0.1% left
pone=[]    
for i in range(maxw):
    pone.append(hole_list[i][index01[i]])
    
#print(ten, fiftey, ninety)
    
   

xmax=0.05
ymax=0.05


zlength=0.5 #cm
znumber=800
zvoxel_length=zlength/znumber #cm

xlength=0.1 #cm
xnumber=100
xvoxel_length=(xlength/xnumber)*10 #mm

wavelength=np.arange(400,701) 


xdepth=[]
depth=[]

for i in range(xnumber):
	idepth=(i*xvoxel_length) #cm
	xdepth.append(idepth)
    
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.

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

for i in range(400,500):
    dep=dep + ((2*zmax)/b_nzg)
    depth.append(dep)
    
for i in range(500,650):
    dep=dep + ((2*zmax)/d_nzg)
    depth.append(dep)
    
for i in range(650,800):
    dep=dep + ((2*zmax)/h_nzg)
    depth.append(dep)
    
for i in range(800):
    depth[i]=depth[i]*10
    
#create arrays of different depth values at percentages
#10% left
dten=[]    
for i in range(maxw):
    dten.append(depth[index10[i]])
    
#50% left
dfiftey=[]    
for i in range(maxw):
    dfiftey.append(depth[index50[i]])
    
#90% left
dninety=[]    
for i in range(maxw):
    dninety.append(depth[index90[i]])
    
#1% left
done=[]    
for i in range(maxw):
    done.append(depth[index1[i]])
    
#0.1% left
dpone=[]    
for i in range(maxw):
    dpone.append(depth[index01[i]])
    
    
#37% left
dpthirsev=[]    
for i in range(maxw):
    dpthirsev.append(depth[index37[i]])
    
#print(dten)
print(max(dpone)) #tells us the max depth to create layer image

print(dpthirsev[100])


CB_color_cycle = ['#377eb8', '#ff7f00', '#4daf4a',
'#f781bf', '#a65628', '#984ea3',
'#999999', '#e41a1c', '#dede00']

#image = plt.imread('layerimage-200-400nm.png')
#plt.imshow(image)
    
#cutimage=dslice[:799,:100]
#plt.pcolormesh(xdepth[:100],depth[:799],cutimage)#, cmap='OrRd')


plt.plot(wavelength[:maxw], dninety,color='#f781bf',linestyle='-', linewidth=4)#, label=('90%'))
plt.plot(wavelength[:maxw], dfiftey,color='#4daf4a',linestyle='--',linewidth=4)#, label=('50%'))
plt.plot(wavelength[:maxw], dten,color='#ff7f00',linestyle=':',linewidth=4.0)#, label=('10%'))
plt.plot(wavelength[:maxw], done,color='#e41a1c',linestyle='-.',linewidth=4.0)#, label=('1%'))
plt.plot(wavelength[:maxw], dpone,color='k',linestyle=(0,(3,1,1,1,1,1)),linewidth=4)#, label=('0.1%'))

#plt.plot((300,300),(0.015,0.03),color='k',marker='_',label='in vivo')
#plt.plot((340,340),(0.04,0.06),color='k',marker='_',label='in vivo')

#plt.plot((300),(0.015),color='r',marker='x',label='in vivo')
#plt.plot((340),(0.054),color='r',marker='x',label='in vivo')

plt.plot((532,532),(0,5.1),color='r')#,label='KTP')
plt.plot((595,595),(0,5.1),color='r')#,label='PDL')

#plt.plot((400),(1),color='k',marker='X',markersize=10)#,label='in vivo')
#plt.plot((450),(1.6),color='k',marker='X',markersize=10)#,label='in vivo')
#plt.plot((550),(3),color='k',marker='X',markersize=10,label='Ash et al. Data')

#upload layer image
#im = plt.imread('layerimage-200-400nm.png');
#ext=[200, 400, 0, max(dpone)]
#plt.imshow(im, zorder=0, extent=ext)

im = plt.imread('layerimage-400-700nm.png');
ext=[400, 700, 0, max(dpone)]
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.yaxis.set_major_formatter(mticker.ScalarFormatter())
ax.yaxis.get_major_formatter().set_scientific(False)
ax.yaxis.get_major_formatter().set_useOffset(False)
ax.yaxis.set_major_formatter(mticker.FormatStrFormatter('%.f'))
#plt.legend()
#plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.,fontsize=20)
#plt.title('Percentage of Incident Light at depth')
#plt.xlabel('Wavelength (nm)')
#plt.xscale('log')
#plt.yscale('log')
plt.gca().invert_yaxis()
#plt.ylabel('Depth (mm)')
plt.xticks(fontsize=17)
plt.yticks(fontsize=17)
plt.savefig('percen_400-700_dir_ash_depth_mark.png',format='png', dpi=1200,bbox_inches='tight')
plt.show()

#cutimage=dslice[:605,:100]

#plt.pcolormesh(xdepth[:100],depth[:605],cutimage, cmap='OrRd')
#plt.xlabel('x (mm)') 
#plt.ylabel('z (mm)') 
#plt.gca().invert_yaxis()
#plt.title('Fluence through a Cut Irradiated by Direct 400nm')
#plt.colorbar()
#plt.show()
