Calculate Branching Frequency from Zimm-Stockmayer Theory
Source:R/polymer-analysis.R
measure_branching_frequency.RdCalculates the number of branch points per molecule using Zimm-Stockmayer theory, which relates the branching index (g) to the branching frequency.
Usage
measure_branching_frequency(
g,
architecture = c("random", "star_3", "star_4", "star_f", "comb"),
arms = NULL,
mw = NULL
)Arguments
- g
Numeric vector of branching ratios g = Rg^2(branched) / Rg^2(linear).
- architecture
Branching architecture model:
"random": Random trifunctional branching (default)"star_3": 3-arm star polymer"star_4": 4-arm star polymer"star_f": f-arm star (requiresarmsparameter)"comb": Comb-like branching
- arms
Number of arms for star polymers (required for
"star_f").- mw
Optional molecular weight vector (same length as
g) for calculating total branches in sample.
Value
A data frame of class branching_frequency containing:
- g
Input branching ratio
- branches_per_molecule
Estimated branch points per molecule
- branch_density
Branches per unit MW (if
mwprovided)
Details
Zimm-Stockmayer Theory:
For random trifunctional branching, the relationship between g and the average number of branch points (n_b) is:
$$g = \left[\left(1 + \frac{n_b}{7}\right)^{1/2} + \frac{4n_b}{9\pi}\right]^{-1/2}$$
For star polymers with f arms: $$g = \frac{3f - 2}{f^2}$$
Interpretation:
g = 1.0: Linear polymer (no branching)
g ~ 0.5-0.8: Lightly branched
g ~ 0.3-0.5: Moderately branched
g < 0.3: Highly branched/hyperbranched
References
Zimm, B.H. and Stockmayer, W.H. (1949). "The Dimensions of Chain Molecules Containing Branches and Rings." J. Chem. Phys., 17, 1301-1314.
Examples
# Calculate branching for random trifunctional polymer
g_values <- c(0.9, 0.7, 0.5, 0.3)
bf <- measure_branching_frequency(g_values)
print(bf)
#> Branching Frequency Analysis (Zimm-Stockmayer)
#> ==================================================
#>
#> Architecture: random
#> N samples: 4
#>
#> g ratio range: 0.300 - 0.900
#> Branches/molecule: 1.12 - 57.14 (mean: 19.74)
#>
#> # A tibble: 4 × 2
#> g branches_per_molecule
#> <dbl> <dbl>
#> 1 0.9 1.12
#> 2 0.7 5.12
#> 3 0.5 15.6
#> 4 0.3 57.1
# For star polymer with 4 arms
bf_star <- measure_branching_frequency(0.625, architecture = "star_4")