Mie.py 文件源码

python
阅读 26 收藏 0 点赞 0 评论 0

项目:PyMieScatt 作者: bsumlin 项目源码 文件源码
def ScatteringFunction(m, wavelength, diameter, minAngle=0, maxAngle=180, angularResolution=0.5, space='theta', angleMeasure='radians', normalization=None):
#  http://pymiescatt.readthedocs.io/en/latest/forward.html#ScatteringFunction
  x = np.pi*diameter/wavelength

  _steps = int(1+(maxAngle-minAngle)/angularResolution) # default 361

  if angleMeasure in ['radians','RADIANS','rad','RAD']:
    adjust = np.pi/180
  elif angleMeasure in ['gradians','GRADIANS','grad','GRAD']:
    adjust = 1/200
  else:
    adjust = 1

  if space in ['q','qspace','QSPACE','qSpace']:
    _steps *= 10
    if minAngle==0:
      minAngle = 1e-5
    measure = np.logspace(np.log10(minAngle),np.log10(maxAngle),_steps)*np.pi/180
    _q = True
  else:
    measure = np.linspace(minAngle,maxAngle,_steps)*adjust
    _q = False
  if x == 0:
    return measure,0,0,0
  _measure = np.linspace(minAngle,maxAngle,_steps)*np.pi/180
  SL = np.zeros(_steps)
  SR = np.zeros(_steps)
  SU = np.zeros(_steps)
  for j in range(_steps):
    u = np.cos(_measure[j])
    S1, S2 = MieS1S2(m,x,u)
    SL[j] = (np.sum(np.conjugate(S1)*S1)).real
    SR[j] = (np.sum(np.conjugate(S2)*S2)).real
    SU[j] = (SR[j]+SL[j])/2
  if normalization in ['m','M','max','MAX']:
    SL /= np.max(SL)
    SR /= np.max(SR)
    SU /= np.max(SU)
  elif normalization in ['t','T','total','TOTAL']:
    SL /= trapz(SL,measure)
    SR /= trapz(SR,measure)
    SU /= trapz(SU,measure)
  if _q:
    measure = (4*np.pi/wavelength)*np.sin(measure/2)*(diameter/2)
  return measure,SL,SR,SU
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号