FormFactor returns the square root of BlattWeisskopfSquared, which AmpForm normalizes such that $B_L^2(1)=1$. With $z = (qR)^2$:
$$B_0^2(z) = 1, \qquad B_1^2(z) = \frac{2z}{z+1}, \qquad B_2^2(z) = \frac{13z^2}{z^2+3z+9}.$$
The PDG 2026 review on resonances (p. 12–13) uses non-normalized Blatt–Weisskopf factors with a unity numerator, Equation (50.34), where $z = q/q_0$ is not squared:
$$F_0^2(z) = 1, \qquad F_1^2(z) = \frac{1}{1+z^2}, \qquad F_2^2(z) = \frac{1}{9+3z^2+z^4},$$
and combines them with the threshold factor into the vertex factor of Equation (50.33):
$$n_a(s) = \left(\frac{q_a}{q_0}\right)^{l_a} F_{l_a}\left(\frac{q_a}{q_0}\right).$$
With $R = 1/q_0$, the two conventions differ only by the constant $\lvert h_L^{(1)}(1)\rvert$, that is $1$, $\sqrt{2}$, and $\sqrt{13}$ for $L=0,1,2$:
$$n_L = \frac{B_L}{\lvert h_L^{(1)}(1)\rvert}.$$
The constant cancels in the ratio inside EnergyDependentWidth, but not when FormFactor is used as a production or decay vertex factor, where it rescales the couplings for $L>0$ (see #261). Models that follow the PDG convention, such as the serialized amplitude models, currently divide by this constant by hand; ampform_dpd.io.serialization.dynamics does so in a private _blatt_weisskopf_normalization function.
Proposal
Add a keyword-only normalize: bool = True argument to BlattWeisskopfSquared and FormFactor, rather than exposing the constant as a separate function. The default keeps the current output, while normalize=False omits $\lvert h_L^{(1)}(1)\rvert^2$, so that FormFactor returns the PDG factor $n_L$:
BlattWeisskopfSquared(z, angular_momentum=2, normalize=False).doit()
# z**2/(z**2 + 3*z + 9)
The LaTeX rendering should distinguish the two conventions: $\hat{B}_L^2$ and $\hat{\mathcal{F}}_L$ for the normalized functions, $B_L^2$ and $\mathcal{F}_L$ for the non-normalized ones.
Related issues
FormFactorreturns the square root ofBlattWeisskopfSquared, which AmpForm normalizes such thatThe PDG 2026 review on resonances (p. 12–13) uses non-normalized Blatt–Weisskopf factors with a unity numerator, Equation (50.34), where$z = q/q_0$ is not squared:
and combines them with the threshold factor into the vertex factor of Equation (50.33):
With$R = 1/q_0$ , the two conventions differ only by the constant $\lvert h_L^{(1)}(1)\rvert$ , that is $1$ , $\sqrt{2}$ , and $\sqrt{13}$ for $L=0,1,2$ :
The constant cancels in the ratio inside$L>0$ (see #261). Models that follow the PDG convention, such as the serialized amplitude models, currently divide by this constant by hand;
EnergyDependentWidth, but not whenFormFactoris used as a production or decay vertex factor, where it rescales the couplings forampform_dpd.io.serialization.dynamicsdoes so in a private_blatt_weisskopf_normalizationfunction.Proposal
Add a keyword-only$\lvert h_L^{(1)}(1)\rvert^2$ , so that $n_L$ :
normalize: bool = Trueargument toBlattWeisskopfSquaredandFormFactor, rather than exposing the constant as a separate function. The default keeps the current output, whilenormalize=FalseomitsFormFactorreturns the PDG factorThe LaTeX rendering should distinguish the two conventions:$\hat{B}_L^2$ and $\hat{\mathcal{F}}_L$ for the normalized functions, $B_L^2$ and $\mathcal{F}_L$ for the non-normalized ones.
Related issues