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
评论列表
文章目录