From 4df12d8d0da645d44542a423f2aa56412067eab8 Mon Sep 17 00:00:00 2001 From: Paul Kienzle Date: Wed, 29 Jan 2025 14:45:06 -0500 Subject: [PATCH] round to nearest integer for star polymer arms --- sasmodels/models/star_polymer.c | 14 +++++++++----- sasmodels/models/star_polymer.py | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/sasmodels/models/star_polymer.c b/sasmodels/models/star_polymer.c index a897f7cda..d8b9e92ad 100644 --- a/sasmodels/models/star_polymer.c +++ b/sasmodels/models/star_polymer.c @@ -2,16 +2,16 @@ double form_volume(void); double Iq(double q, double radius2, double arms); -static double star_polymer_kernel(double q, double radius2, double arms) +static double star_polymer_kernel(double q, double radius2, int n_arms) { double u_2 = radius2 * q * q; - double v = u_2 * arms / (3.0 * arms - 2.0); + double v = (u_2 * n_arms) / (3 * n_arms - 2); double term1 = v + expm1(-v); - double term2 = ((arms - 1.0)/2.0) * square(expm1(-v)); + double term2 = ((n_arms - 1) * square(expm1(-v)))/2.0; - return (2.0 * (term1 + term2)) / (arms * v * v); + return (2.0 * (term1 + term2)) / (n_arms * v * v); } @@ -22,5 +22,9 @@ double form_volume(void) double Iq(double q, double radius2, double arms) { - return star_polymer_kernel(q, radius2, arms); + // TODO: round or truncate? + // rounding: stacked_disk pearl_necklace multilayer_vesicle linear_pearls + // lamellar_stack_caille lamellar_hg_stack_caille + // truncation: lamellar_stack_paracrystal + return star_polymer_kernel(q, radius2, int(arms + 0.5)); } diff --git a/sasmodels/models/star_polymer.py b/sasmodels/models/star_polymer.py index 5ec4eb85f..5b6aec076 100644 --- a/sasmodels/models/star_polymer.py +++ b/sasmodels/models/star_polymer.py @@ -79,7 +79,7 @@ # pylint: disable=bad-whitespace, line-too-long # ["name", "units", default, [lower, upper], "type","description"], parameters = [["rg_squared", "Ang^2", 100.0, [0.0, inf], "", "Ensemble radius of gyration SQUARED of the full polymer"], - ["arms", "", 3, [1.0, 6.0], "", "Number of arms in the model"], + ["arms", "", 3, [1.0, 6.0], "", "Number of arms in the model (integer)"], ] # pylint: enable=bad-whitespace, line-too-long