示例#1
0
文件: profit.py 项目: limu007/Charlay
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])
示例#2
0
文件: labin.py 项目: limu007/Charlay
 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
示例#3
0
文件: profit.py 项目: limu007/scanner
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])