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('200-400_diffuse.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=[]     

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 90%
    index10.append(v10)
    index50.append(v50)
    index90.append(v90)
    index1.append(v1)
    index01.append(v01)
    
#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]])
    
#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(200,401) 


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 # 10 converts to mm
    depth.append(dep)
    
for i in range(200,300):
    dep=dep + ((2*zmax)/e_nzg)*10
    depth.append(dep)
    
for i in range(300,400):
    dep=dep + ((2*zmax)/m_nzg)*10
    depth.append(dep)

for i in range(400,500):
    dep=dep + ((2*zmax)/b_nzg)*10
    depth.append(dep)
    
for i in range(500,650):
    dep=dep + ((2*zmax)/d_nzg)*10
    depth.append(dep)
    
for i in range(650,800):
    dep=dep + ((2*zmax)/h_nzg)*10
    depth.append(dep)
    
#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]])
    
#print(dten, dfiftey, dninety)
print(max(dpone)) #tells us the max depth to create layer image


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='-', label=('90%'))
plt.plot(wavelength[:maxw], dfiftey,color='#4daf4a',linestyle='--', label=('50%'))
plt.plot(wavelength[:maxw], dten,color='#ff7f00',linestyle=':',linewidth=2.0,  label=('10%'))
plt.plot(wavelength[:maxw], done,color='#e41a1c',linestyle='-.', label=('1%'))
plt.plot(wavelength[:maxw], dpone,color='k',linestyle=(0,(3,1,1,1,1,1)), label=('0.1%'))

#upload layer image
im = plt.imread('layerimage_200_400.png');
ext=[200, 400, 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('%.3f'))

#plt.legend()
#plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.,fontsize=15)
#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=15)
plt.yticks(fontsize=15)
plt.savefig('percen_200-400_dif.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()
