dev #285
| @@ -156,3 +156,20 @@ double energyDistCorrelation(double x, void *user_data) { | |||||||
|     return normalDist(x, e_m, e_b) * exp(-t * r); |     return normalDist(x, e_m, e_b) * exp(-t * r); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Generalised Gamma Function | ||||||
|  | double genGammaAlphaDist(double x, void *user_data) { | ||||||
|  |     double *c = (double *)user_data; | ||||||
|  |  | ||||||
|  |     double omega = c[0]; | ||||||
|  |     double tau0 = c[1]; | ||||||
|  |     double alpha = c[2]; | ||||||
|  |     double beta = c[3]; | ||||||
|  |  | ||||||
|  |     double b_to_a = beta / alpha; | ||||||
|  |     double tau_to_tau0 = tau / tau0; | ||||||
|  |  | ||||||
|  |     double norm = exp(-lgamma(b_to_a) + b_to_a * log(b_to_a)) * alpha; | ||||||
|  |  | ||||||
|  |     return norm * exp(-b_to_a * pow(tau_to_tau0, alpha)) * pow(tau_to_tau0, beta); | ||||||
|  | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,7 +36,10 @@ class AbstractGG(Distribution, ABC): | |||||||
|         taus, ln_tau = AbstractGG._prepare_integration(tau0) |         taus, ln_tau = AbstractGG._prepare_integration(tau0) | ||||||
|         g_tau = cls.distribution(taus, tau0, *args) |         g_tau = cls.distribution(taus, tau0, *args) | ||||||
|  |  | ||||||
|         ret_val = np.array([simpson(g_tau / (1 - 1j*w_i*taus), ln_tau) for w_i in w]).squeeze() |         ret_val = np.zeros_like(omega, dtype=np.complex128) | ||||||
|  |  | ||||||
|  |         ret_val.real = np.array([simpson(g_tau * taus / (1 + (w_i*taus)**2), ln_tau) for w_i in w]).squeeze() | ||||||
|  |         ret_val.imag = np.array([simpson(g_tau * w_i * taus / (1 + (w_i*taus)**2), ln_tau) for w_i in w]).squeeze() | ||||||
|  |  | ||||||
|         return ret_val |         return ret_val | ||||||
|  |  | ||||||
| @@ -50,7 +53,7 @@ class AbstractGG(Distribution, ABC): | |||||||
|         ret_val = np.zeros((w.size, _t.size)) |         ret_val = np.zeros((w.size, _t.size)) | ||||||
|  |  | ||||||
|         for i, tau_i in enumerate(_t): |         for i, tau_i in enumerate(_t): | ||||||
|             taus, ln_tau = AbstractGG._prepare_integration(tau_i) |             taus, ln_tau = AbstractGG._prepare_integration(tau_i, limits=limits, num_steps=num_steps) | ||||||
|             g_tau = cls.distribution(taus, tau_i, *args) |             g_tau = cls.distribution(taus, tau_i, *args) | ||||||
|  |  | ||||||
|             ret_val[:, i] = np.array([simpson(g_tau * taus / (1 + (w_i*taus)**2), ln_tau) for w_i in w]).squeeze() |             ret_val[:, i] = np.array([simpson(g_tau * taus / (1 + (w_i*taus)**2), ln_tau) for w_i in w]).squeeze() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user