def example_of_retroreflector(): onepxtom = pow(10, -5) distance = 0.8 wavelength = 500 * pow(10, -9) aperturesize = 40 pxx = 1920 pxy = 1920 pitch = 40 diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() # Retroreflector corner cube array is created retro = aperture.retroreflector(pxx, pxy, wavelength, pitch, 'normal') aperture.show(retro, onepxtom, wavelength, 'Detector') #aperture.show(diffrac.fft(retro),onepxtom,wavelength,'FFT') #aperture.show3d(retro) # Divergin gaussian beam defined focal = 0.8 amplitude = 1 waistsize = 50 * onepxtom gaussianbeam = beam.gaussian(pxx, pxy, distance, wavelength, onepxtom, amplitude, waistsize, focal) aperture.show(gaussianbeam, onepxtom, wavelength, 'Detector at %s m' % (distance)) # Output after the gaussian beam reflects from retroreflector output1 = gaussianbeam * retro aperture.show(output1, onepxtom, wavelength, 'Detector') # Output at the far distance distance = 1 output2 = diffrac.fresnelfraunhofer(output1, wavelength, distance, onepxtom, aperturesize) aperture.show(diffrac.intensity(output2, onepxtom), onepxtom, wavelength, 'Detector', 'normal') return True
def example_of_gaussian(): # Fixed values are set onepxtom = pow(10, -5) distance = 0.7 wavelength = 500 * pow(10, -9) aperturesize = 40 pxx = 128 pxy = 128 diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() #aperture.show(rectangle,onepxtom,wavelength,'Aperture') # Defining a gaussian beam amplitude = 10 waistsize = 20 * onepxtom # Distance in between beam waist and the simulation origin focal = 8 for distance in xrange(5, 10): distance *= 1 gaussianbeam = beam.gaussian(pxx, pxy, distance, wavelength, onepxtom, amplitude, waistsize, focal) aperture.show(diffrac.intensity(gaussianbeam, onepxtom), onepxtom, wavelength, 'Detector at %s m' % (distance)) aperture.show3d(gaussianbeam) return True
def example_of_retroreflector(): onepxtom = pow(10,-5) distance = 0.8 wavelength = 500*pow(10,-9) aperturesize = 40 pxx = 1920 pxy = 1920 pitch = 40 diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() # Retroreflector corner cube array is created retro = aperture.retroreflector(pxx,pxy,wavelength,pitch,'normal') aperture.show(retro,onepxtom,wavelength,'Detector') #aperture.show(diffrac.fft(retro),onepxtom,wavelength,'FFT') #aperture.show3d(retro) # Divergin gaussian beam defined focal = 0.8 amplitude = 1 waistsize = 50*onepxtom gaussianbeam = beam.gaussian(pxx,pxy,distance,wavelength,onepxtom,amplitude,waistsize,focal) aperture.show(gaussianbeam,onepxtom,wavelength,'Detector at %s m' % (distance)) # Output after the gaussian beam reflects from retroreflector output1 = gaussianbeam*retro aperture.show(output1,onepxtom,wavelength,'Detector') # Output at the far distance distance = 1 output2 = diffrac.fresnelfraunhofer(output1,wavelength,distance,onepxtom,aperturesize) aperture.show(diffrac.intensity(output2,onepxtom),onepxtom,wavelength,'Detector','normal') return True
def main(): # Initial variables greenwavelength = 532*pow(10,-9) redwavelength = 432*pow(10,-9) bluewavelength = 640*pow(10,-9) nx = 2 ny = 1 ni = 360 nj = 360 ratio = numpy.zeros((ni,nj)) crosstalk = numpy.zeros((ni,nj)) jones = odak.jonescalculus() aperture = odak.aperture() # Initial electric field vector defined u = jones.electricfield(1/pow(2,0.5),1/pow(2,0.5)) # Apply rotation combination for wavelength in [redwavelength,greenwavelength,bluewavelength]: for i in xrange(0,ni): for j in xrange(0,nj): # Solve the system urot = jones.birefringentplate(u,nx,ny,greenwavelength/2,wavelength,i) uqwp = jones.birefringentplate(urot,nx,ny,greenwavelength/4,wavelength,j) ul = jones.circullarpolarizer(uqwp,'lefthanded') ur = jones.circullarpolarizer(uqwp,'righthanded') # Calculate crosstalk and illumination ratio on left and right crosstalk[i,j] = (abs(ur[0])+abs(ur[1]))/(abs(u[0])+abs(u[1])) ratio[i,j] = (abs(ur[0])+abs(ur[1]))/(abs(ul[0])+abs(ul[1])) # Show crosstalk and illumination ratio on left and right aperture.show(crosstalk,1,wavelength,'Crosstalk at wavelength %s' % wavelength,'normal',filename='Crosstalk%s.png' % wavelength,xlabel='Rotation of QWP (degrees)', ylabel='Rotation of polarization rotator (degrees)') aperture.show(ratio,1,wavelength, 'Ratios of the eyes at wavelength %s' % wavelength,'normal',filename='Ratio%s.png' % wavelength,xlabel='Rotation of QWP (degrees)',ylabel='Rotation of polarization rotator (degrees)') return True
def example_of_fresnel_fraunhofer(): # Fixed values are set. onepxtom = pow(10,-6) # Aperture size in mm. wavelength = 500*pow(10,-9) pxx = 2048 pxy = pxx diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() # A spherical beam traveled from a point to a pinhole, with a distance in mm. focal = pow(10,-4) distance = 9. distance *= pow(10,-3) spherical = beam.spherical(pxx,pxy,distance,wavelength,onepxtom,focal,1) # aperture.show(spherical,onepxtom,wavelength,'Spherical wave') for i in xrange(1,20): da = i*0.01 aperturesize = da*pow(10,-3)/onepxtom circle = aperture.circle(pxx,pxy,aperturesize) # aperture.show(circle,onepxtom,wavelength,'Aperture') # Spherical wave transmitted from a pinhole. AfterPinhole = diffrac.transmittance(spherical,circle) # aperture.show(AfterPinhole,onepxtom,wavelength,'After a pinhole') # Distance between pinhole and a lens in mm. distance = 43. distance *= pow(10,-3) # Sample Fresnel and Fraunhofer region calculation of the given aperture print 'lambda*d/w = %s m' % (wavelength*distance/(aperturesize*onepxtom)) # Calculating far field behaviour. BeforeLens = diffrac.fresnelfraunhofer(AfterPinhole,wavelength,distance,onepxtom,aperturesize) # Calculating the fresnel number. fresnelno = diffrac.fresnelnumber(aperturesize,onepxtom,wavelength,distance) # aperture.show(diffrac.intensity(BeforeLens,onepxtom),onepxtom,wavelength,'Before a lens, Distance: %s m Wavelength: %s m Fresnel Number: %s'% (distance,wavelength,fresnelno)) # aperture.showrow(diffrac.intensity(BeforeLens,onepxtom),wavelength,onepxtom,distance) # Multiply it with lens transmittance function. Focal length in mm. focal = 22. focal *= pow(10,-3) AfterLens = diffrac.lens(BeforeLens,wavelength,focal,onepxtom) # Calculating far field behaviour. distance = 22. distance *= pow(10,-3) aperturesize = 20.*pow(10,-3)/onepxtom output = diffrac.fresnelfraunhofer(AfterLens,wavelength,distance,onepxtom,aperturesize) # Calculating the fresnel number. fresnelno = diffrac.fresnelnumber(aperturesize,onepxtom,wavelength,distance) aperture.show(diffrac.intensity(output,onepxtom),onepxtom,wavelength,'Retina, Distance: %s m Wavelength: %s m Fresnel Number: %s'% (distance,wavelength,fresnelno),'normal','da=%smm.png'%da) aperture.showrow(diffrac.intensity(output,onepxtom),wavelength,onepxtom,distance,'row_da=%smm.png' % da) # Show a 3D plot of the output. # aperture.show3d(diffrac.intensity(output,onepxtom)) # Showing plots. # aperture.showplots() return True
def main(): # Initial variables greenwavelength = 532 * pow(10, -9) redwavelength = 432 * pow(10, -9) bluewavelength = 640 * pow(10, -9) nx = 2 ny = 1 ni = 360 nj = 360 ratio = numpy.zeros((ni, nj)) crosstalk = numpy.zeros((ni, nj)) jones = odak.jonescalculus() aperture = odak.aperture() # Initial electric field vector defined u = jones.electricfield(1 / pow(2, 0.5), 1 / pow(2, 0.5)) # Apply rotation combination for wavelength in [redwavelength, greenwavelength, bluewavelength]: for i in xrange(0, ni): for j in xrange(0, nj): # Solve the system urot = jones.birefringentplate(u, nx, ny, greenwavelength / 2, wavelength, i) uqwp = jones.birefringentplate(urot, nx, ny, greenwavelength / 4, wavelength, j) ul = jones.circullarpolarizer(uqwp, 'lefthanded') ur = jones.circullarpolarizer(uqwp, 'righthanded') # Calculate crosstalk and illumination ratio on left and right crosstalk[i, j] = (abs(ur[0]) + abs(ur[1])) / (abs(u[0]) + abs(u[1])) ratio[i, j] = (abs(ur[0]) + abs(ur[1])) / (abs(ul[0]) + abs(ul[1])) # Show crosstalk and illumination ratio on left and right aperture.show(crosstalk, 1, wavelength, 'Crosstalk at wavelength %s' % wavelength, 'normal', filename='Crosstalk%s.png' % wavelength, xlabel='Rotation of QWP (degrees)', ylabel='Rotation of polarization rotator (degrees)') aperture.show(ratio, 1, wavelength, 'Ratios of the eyes at wavelength %s' % wavelength, 'normal', filename='Ratio%s.png' % wavelength, xlabel='Rotation of QWP (degrees)', ylabel='Rotation of polarization rotator (degrees)') return True
def example_of_spherical_wave(): # Fixed values are set onepxtom = pow(10,-5) distance = 0.7 wavelength = 500*pow(10,-9) aperturesize = 40 pxx = 128 pxy = 128 diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() # Defining a diverging spherical wave focal = 0.0001 for distance in xrange(1,20): # Focal point distance fromn the origin of the spherical wave distance *= 0.00001 spherical = beam.spherical(pxx,pxy,distance,wavelength,onepxtom,focal,1) aperture.show(diffrac.intensity(spherical,onepxtom),onepxtom,wavelength,'Detector at %s m' % distance) aperture.show3d(spherical) return True
def example_of_spherical_wave(): # Fixed values are set onepxtom = pow(10, -5) distance = 0.7 wavelength = 500 * pow(10, -9) aperturesize = 40 pxx = 128 pxy = 128 diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() # Defining a diverging spherical wave focal = 0.0001 for distance in xrange(1, 20): # Focal point distance fromn the origin of the spherical wave distance *= 0.00001 spherical = beam.spherical(pxx, pxy, distance, wavelength, onepxtom, focal, 1) aperture.show(diffrac.intensity(spherical, onepxtom), onepxtom, wavelength, 'Detector at %s m' % distance) aperture.show3d(spherical) return True
def example_of_gaussian(): # Fixed values are set onepxtom = pow(10,-5) distance = 0.7 wavelength = 500*pow(10,-9) aperturesize = 40 pxx = 128 pxy = 128 diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() #aperture.show(rectangle,onepxtom,wavelength,'Aperture') # Defining a gaussian beam amplitude = 10 waistsize = 20*onepxtom # Distance in between beam waist and the simulation origin focal = 8 for distance in xrange(5,10): distance *= 1 gaussianbeam = beam.gaussian(pxx,pxy,distance,wavelength,onepxtom,amplitude,waistsize,focal) aperture.show(diffrac.intensity(gaussianbeam,onepxtom),onepxtom,wavelength,'Detector at %s m' % (distance)) aperture.show3d(gaussianbeam) return True
def example_of_fresnel_fraunhofer(): # Fixed values are set. onepxtom = pow(10, -6) # Aperture size in mm. wavelength = 500 * pow(10, -9) pxx = 2048 pxy = pxx diffrac = odak.diffractions() aperture = odak.aperture() beam = odak.beams() # A spherical beam traveled from a point to a pinhole, with a distance in mm. focal = pow(10, -4) distance = 9. distance *= pow(10, -3) spherical = beam.spherical(pxx, pxy, distance, wavelength, onepxtom, focal, 1) # aperture.show(spherical,onepxtom,wavelength,'Spherical wave') for i in xrange(1, 20): da = i * 0.01 aperturesize = da * pow(10, -3) / onepxtom circle = aperture.circle(pxx, pxy, aperturesize) # aperture.show(circle,onepxtom,wavelength,'Aperture') # Spherical wave transmitted from a pinhole. AfterPinhole = diffrac.transmittance(spherical, circle) # aperture.show(AfterPinhole,onepxtom,wavelength,'After a pinhole') # Distance between pinhole and a lens in mm. distance = 43. distance *= pow(10, -3) # Sample Fresnel and Fraunhofer region calculation of the given aperture print 'lambda*d/w = %s m' % (wavelength * distance / (aperturesize * onepxtom)) # Calculating far field behaviour. BeforeLens = diffrac.fresnelfraunhofer(AfterPinhole, wavelength, distance, onepxtom, aperturesize) # Calculating the fresnel number. fresnelno = diffrac.fresnelnumber(aperturesize, onepxtom, wavelength, distance) # aperture.show(diffrac.intensity(BeforeLens,onepxtom),onepxtom,wavelength,'Before a lens, Distance: %s m Wavelength: %s m Fresnel Number: %s'% (distance,wavelength,fresnelno)) # aperture.showrow(diffrac.intensity(BeforeLens,onepxtom),wavelength,onepxtom,distance) # Multiply it with lens transmittance function. Focal length in mm. focal = 22. focal *= pow(10, -3) AfterLens = diffrac.lens(BeforeLens, wavelength, focal, onepxtom) # Calculating far field behaviour. distance = 22. distance *= pow(10, -3) aperturesize = 20. * pow(10, -3) / onepxtom output = diffrac.fresnelfraunhofer(AfterLens, wavelength, distance, onepxtom, aperturesize) # Calculating the fresnel number. fresnelno = diffrac.fresnelnumber(aperturesize, onepxtom, wavelength, distance) aperture.show( diffrac.intensity(output, onepxtom), onepxtom, wavelength, 'Retina, Distance: %s m Wavelength: %s m Fresnel Number: %s' % (distance, wavelength, fresnelno), 'normal', 'da=%smm.png' % da) aperture.showrow(diffrac.intensity(output, onepxtom), wavelength, onepxtom, distance, 'row_da=%smm.png' % da) # Show a 3D plot of the output. # aperture.show3d(diffrac.intensity(output,onepxtom)) # Showing plots. # aperture.showplots() return True