def unittest(mode=1,base=1,comp=["SiO2_gl","cSi_asp"],frange=[0.3,3.3],wid=3000): '''single layer-substrate reflection comp: component list (if only one given, use Si standard substrate) loading of the database:profit.unittest(base=e2,comp=["SiO2_gl","cSi_asp"],frange=None) ''' from numpy import arange,loadtxt,concatenate from spectra import dbload if len(comp)<=1: fa2,sir,sim=loadtxt('/home/limu/Lab/si_dielfun.dat',unpack=True) va2=sir+1j*sim else: fa2,va2=dbload(comp[1],connection="http") sir,sim=va2.real,va2.imag if (type(base)==int) and (base==0): freq=fa2 else: if type(base) in [int,float]: step=0.005/base freq=concatenate([arange(0.01,0.9,step),arange(0.9,6,step*4)]) else: freq=base from spectra import respect va2=respect(freq,[fa2,sir,sim]) fa1,va1=dbload(comp[0],freq) if frange!=None: sel=freq>frange[0] sel*=freq<frange[1] else: sel=freq>0 if mode==1: res=plate elif mode==2: res=matter_plate return freq[sel],[va1[sel],va2[sel]],res(freq[sel],[va1[sel],va2[sel]],[wid])
def measure(self,npix=None,**kwargs): from numpy.random import normal from math import sqrt if self.config==None: print("You must config first!") return if 'noise' in kwargs: noise=float(kwargs['noise']) else: noise=getattr(self.config,'Noise',0.05) noise/=sqrt(self.config.m_NrAverages) rep=normal(size=self.pixtable.shape,scale=noise) mater=None if 'mater' in kwargs: mater=kwargs['mater'] elif hasattr(self.config,'Material') and self.config.Material.decode('ascii')!='simu': mater=self.config.Material.decode('ascii') else: mater=rc.simu_mater #print('using |'+str(mater)+'|') if mater!=None: if type(mater)==list: for m in mater: if not m in self.data: if m in rc.eps_ext: from profit import dielect self.data[m]=dielect(self.pixtable,rc.eps_ext[m][0],rc.eps_ext[m][1]) elif m in rc.mod_ext: from numpy import polyval self.data[m]=polyval(rc.mod_ext[m],self.pixtable)**2 print('calculating diel. '+m) if len(mater)-len(rc.simu_layer) in [0,1]: from profit import plate wid=rc.simu_layer if hasattr(rc,'simu_layer_fluc'): wid=[wid[i]*normal(1,rc.simu_layer_fluc[i]) for i in range(len(wid))] rep+=plate(self.pixtable,[self.data[m] for m in mater],wid) else: if not mater in self.data: if mater in rc.mod_ext: from numpy import polyval self.data[mater]=polyval(rc.mod_ext[mater],self.pixtable)**2 else: from spectra import dbload if type(mater)==bytes: dbname=mater.decode('ascii') else: dbname=mater if dbname in rc.eps_trans: dbname=rc.eps_trans[dbname] try: inp=dbload(dbname,self.pixtable) except: print('cannot load material '+dbname) return rep #for i in range(len(inp)): self.data[mater]=inp[1] if len(self.data)>0: from profit import reflect rep+=reflect(self.data[mater])#,self.data[mater[1]]) rep*=self.config.m_IntegrationTime return rep
def unittest(mode=1, base=1, comp=["SiO2_gl", "cSi_asp"], frange=[0.3, 3.3], wid=3000): '''single layer-substrate reflection comp: component list (if only one given, use Si standard substrate) loading of the database:profit.unittest(base=e2,comp=["SiO2_gl","cSi_asp"],frange=None) ''' from numpy import arange, loadtxt, concatenate from spectra import dbload if len(comp) <= 1: fa2, sir, sim = loadtxt('/home/limu/Lab/si_dielfun.dat', unpack=True) va2 = sir + 1j * sim else: fa2, va2 = dbload(comp[1], connection="http") sir, sim = va2.real, va2.imag if (type(base) == int) and (base == 0): freq = fa2 else: if type(base) in [int, float]: step = 0.005 / base freq = concatenate( [arange(0.01, 0.9, step), arange(0.9, 6, step * 4)]) else: freq = base from spectra import respect va2 = respect(freq, [fa2, sir, sim]) fa1, va1 = dbload(comp[0], freq) if frange != None: sel = freq > frange[0] sel *= freq < frange[1] else: sel = freq > 0 if mode == 1: res = plate elif mode == 2: res = matter_plate return freq[sel], [va1[sel], va2[sel]], res(freq[sel], [va1[sel], va2[sel]], [wid])