def blazeGratingToPoint(self,blazePoint): changed = True I = self.input.center-self.grating.points mI = np.sqrt(np.sum(I**2,1)) S = blazePoint-self.grating.points angleI = su.angle(I) self.grating.angles = (angleI+su.angle(S))/2 an = np.diff((self.grating.angles[1:]+self.grating.angles[:-1])/2) an = np.hstack((an,an[-1])) an = np.hstack((an[0],an)) self.grating.widths = an*mI/np.cos(self.grating.angles-angleI)
device.setOutputWidth(1.4e-6) device.setOutputAngle((30+180)*np.pi/180) device.setOutputFieldMode(spectrometer.cosModeFunction) device.setRowlandRadius(750e-6) device.setDiffractionOrder(10) device.setInputWidth(1.2e-6) device.setInputAngle((44+180)*np.pi/180) device.setInputCenterOnRowlandCircle() device.setInputFieldMode(spectrometer.cosModeFunction) device.setNumberOfGratingGrooves(340) device.setGratingPitch(4e-6) print ' Building Aberration Reduced Grating' device.makeUniformGrating(centralGroove=145) p = device.grating.points[0]-device.grating.points[-1] print 'gratingLength=',np.sqrt(sum(p**2)) print 'gratingAngle=',su.angle(p)*180/np.pi print ' Calculating Grating Blaze Angles' device.blazeGratingToPoint(device.getAberrationFreePoint()) #fig=figure(1) print 'Calculating output waveguide position, angle and width' device.calculateOutputsArray() #device.viewSpectrometer() print 'Simulating' print ' Calculating Eletromagnetic Field on Grating' device.propagateToGrating(device.getAberrationFreeWavelength()) #plt.figure(2) #device.grating.plotField() #plt.show() swavelengths = np.linspace(1549e-9,1601e-9,500) spectra = [] for output in device.output_list: