def intensitiesFFFaster(nq, dq, dIntegrand, keys, ffDict, dr):
""" uses atomistic form factors """
dIntensity = np.zeros((nq, 2), dtype=float)
partInt = np.zeros((nq, len(dIntegrand[0])))
nameList = [k.split(",") for k in keys]
# print "nameList=",nameList
qList = np.zeros(nq)
qList[:] = [float(i * dq) for i in range(nq)]
dIntensity[:, 0] = qList[:]
partInt[:, 0] = qList[:]
rList = dIntegrand[:, 0]
# for j in range(0,len(dIntegrand)):
# r=dIntegrand[j,0]
# sinc=j0(q*r)
formFacProd = np.zeros((nq, len(dIntegrand[0])))
for i in range(nq):
sincList = np.sinc(rList * qList[i] / math.pi) * dr
for k in range(1, len(dIntegrand[0])):
# print k
formFacProd[i, k] = ff.fiveGaussian(ffDict[nameList[k - 1][0]], qList[i])\
* ff.fiveGaussian(ffDict[nameList[k - 1][1]], qList[i])
partInt[i, k] += (sincList[:] * dIntegrand[:, k]
).sum() * formFacProd[i, k]
for i in range(nq):
dIntensity[i, 1] = partInt[i, 1:].sum()
return partInt, dIntensity
评论列表
文章目录