def calc_intraComponentFZ(Q, fe_Q, Ztot, QmaxIntegrate, maxQ, elementList, element, \ x, y, z, elementParameters, damping_factor, aff_mean_squared): """Function to calculate the intra-molecular components. Parameters ---------- Q : numpy array momentum transfer (nm^-1) fe_Q : numpy array effective electric form factor Ztot : int total Z number QmaxIntegrate : float maximum Q value for the intagrations maxQ : float maximum Q value elementList : dictionary("element": multiplicity) chemical elements of the sample with their multiplicity element : string chemical element multiplicity : int chemical element multiplicity element : string array array with the elements in the xyz_file x, y, z : float array atomic coordinate in the xyz_file (nm) elementParameters : dictionary("element": parameters) chemical elements of the sample with their parameters element : string chemical element parameters : list list of the parameters (Z, a1, b1, a2, b2, a3, b3, a4, b4, c, M, K, L) damping_factor : float damp factor Returns ------- r : numpy array atomic distance (nm) Fintra_r : numpy array intramolecular contribution of F(r) """ iintra_Q = calc_iintraFZ(Q, QmaxIntegrate, maxQ, elementList, element, x, y, z, elementParameters, aff_mean_squared) iintradamp_Q = UtilityAnalysis.calc_iintradamp(iintra_Q, Q, QmaxIntegrate, damping_factor) r = MainFunctions.calc_r(Q) Fintra_r = MainFunctions.calc_Fr(r, Q[Q <= QmaxIntegrate], iintradamp_Q[Q <= QmaxIntegrate]) return (r, iintradamp_Q, Fintra_r)
def calc_FFT_QiQ(Q, Qi_Q, QmaxIntegrate): """Function to calculate the FFT following the Igor Pro procedure. I do not agree with this procedure, but I follow it to compare my results with Igor Pro's ones. Parameters ---------- Q : numpy array momentum transfer (nm^-1) Qi_Q : numpy array Q*i(Q) QmaxIntegrate : float maximum Q value for the integrations Returns ------- r : numpy array atomic distance (nm) F_r : numpy array F(r) """ pMax, elem = UtilityAnalysis.find_nearest(Q, QmaxIntegrate) NumPoints = 2*2*2**math.ceil(math.log(5*(pMax+1))/math.log(2)) DelR = 2*np.pi/(np.mean(np.diff(Q))*NumPoints) Qi_Q = Utility.resize_zero(Qi_Q[Q<=QmaxIntegrate], NumPoints) Qi_Q[pMax+1:] = 0.0 Q = np.arange(np.amin(Q), np.amin(Q)+np.mean(np.diff(Q))*NumPoints, np.mean(np.diff(Q))) r = MainFunctions.calc_r(Q) F_r = fftpack.fft(Qi_Q) F_r = F_r[np.where(r>=0.0)] F_r = -np.imag(F_r)*np.mean(np.diff(Q))*2/np.pi r = np.arange(0.0, 0.0+DelR*len(F_r), DelR) return (r, F_r)