def findPeakTransmissionAngleAt(self,wavelength,aperture): self.propagateToGrating(wavelength) print 'Ed',np.abs(self.grating.E) N = su.fwhm(np.abs(self.grating.E)) deltaLambdaEff = wavelength/(self.order*N)/self.neff(wavelength) a = self.grating.pitch m = self.order lambdaEff = wavelength/self.neff(wavelength) inputAngle = self.input.angle startAngle = np.arcsin(m/a*(lambdaEff-deltaLambdaEff/2)+np.sin(inputAngle)) endAngle = np.arcsin(m/a*(lambdaEff+deltaLambdaEff/2)+np.sin(inputAngle)) def f(angle): aperture.setAngle(angle+np.pi) self.setApertureCenterOnRowlandCircle(aperture) aperture.makePoints() self.propagateTo(aperture) return -self.fractionCoupledInto(aperture) return optimize.golden(f,brack = (startAngle,endAngle), tol=1e-6,full_output=True)