def propagate(self,beam): # print 'propagate with ABCD elements', self.abcd self.beam=beam self.q1=self.beam.q1 self.q2=(self.c+self.d*self.q1)/(self.a+self.b*self.q1) #the task of getting R and waist from complex parameter q can be put into a separate method self.R12=np.real(self.q2)#1/R2 self.lamda2=self.beam.lamda/self.n self.waist2=np.sqrt(1/np.imag(self.q2)/3.145*(self.beam.lamda)/(self.n)) beam2=gbeam(self.waist2,self.lamda2,self.R12) return beam2
import numpy as np from gbeam import gbeam import propagateclass as pg from propagateclass import general_element from propagateclass import freespace beam1=gbeam(1.1*10**-3,780*10**-9,0) abcd=np.array([[1,0],[-1/10**-2,1]]) len1=general_element(abcd,1) len1.givebeam(beam1) beam2=len1.propagate(beam1) fp1=freespace(10*10**-2,1) fp1.givebeam(beam1) fp1.propagate(beam1) beam3=fp1.propagate(len1.propagate(beam1)) print 'waist propagate:',pg.findfocus(beam2).waist #print 'beam3 waist:',beam3.waist,'beam 3 radiuscur:',1/beam3.R1,