Source code for tf_pwa.amp.ampgen_FOCUS

import numpy as np
import tensorflow as tf

from tf_pwa.amp import Particle, register_particle

from .ampgen_pipi_swave import constructKMatrix, phsp_FOCUS, pol, poleConfig


[docs] @register_particle("Kpi_Swave") class KPiSwaveKmatrix(Particle): """ Kpi S wave model from AmpGen (https://github.com/GooFit/AmpGen/blob/master/src/Lineshapes/FOCUS.cpp). .. plot:: >>> import matplotlib.pyplot as plt >>> plt.clf() >>> from tf_pwa.utils import plot_particle_model >>> ax = plot_particle_model("Kpi_Swave") >>> ax = plot_particle_model("Kpi_Swave", params={"lineshape_modifier": "KEta"}, axis=ax) >>> ax = plot_particle_model("Kpi_Swave", params={"lineshape_modifier": "I32"}, axis=ax) >>> _ = ax[1].legend(["Kpi", "KEta", "I32"]) """ def __init__(self, name, **kwargs): self.lineshape_modifier = "Kpi" super().__init__(name, **kwargs) def __call__(self, m, **kwargs): s = m * m ret = FOCUS_fun(s, self.lineshape_modifier) return ret
[docs] def get_amp(self, data, data_c, **kwargs): m = data["m"] return self(m)
[docs] def FOCUS_fun(s, lineshapeModifier="Kpi"): I = 1.0j sInGeV = s mK = 0.493677 # ParticlePropertiesList::get( "K+" )->mass() ; mPi = 0.13957018 # ParticlePropertiesList::get( "pi+" )->mass() ; mEtap = 0.95766 # # ParticlePropertiesList::get( "eta'(958)0" )->mass(); sNorm = mK * mK + mPi * mPi s12 = 0.23 s32 = 0.27 I12_adler = (sInGeV - s12) / sNorm I32_adler = (sInGeV - s32) / sNorm poleConfigs = [poleConfig(np.array(1.7919 + 0j), [0.31072, -0.02323])] rho1 = phsp_FOCUS(sInGeV, mK, mPi) rho2 = phsp_FOCUS(sInGeV, mK, mEtap) X = (sInGeV / sNorm) - 1 kMatrix = constructKMatrix(sInGeV, 2, poleConfigs) scattPart = [ pol(X, [0.79299, -0.15099, 0.00811]), pol(X, [0.15040, -0.038266, 0.0022596]), pol(X, [0.15040, -0.038266, 0.0022596]), pol(X, [0.17054, -0.0219, 0.00085655]), ] scattPart = tf.reshape(tf.stack(scattPart, axis=-1), kMatrix.shape) kMatrix = kMatrix + scattPart I12_adler = tf.cast(I12_adler, kMatrix.dtype) I32_adler = tf.cast(I32_adler, kMatrix.dtype) K11 = I12_adler * kMatrix[..., 0, 0] K12 = I12_adler * kMatrix[..., 0, 1] K22 = I12_adler * kMatrix[..., 1, 1] K32 = I32_adler * pol(X, [-0.22147, 0.026637, -0.00092057]) detK = K11 * K22 - K12 * K12 del_ = 1 - rho1 * rho2 * detK - I * (rho1 * K11 + rho2 * K22) T11 = 1.0 - I * rho2 * K22 T22 = 1.0 - I * rho1 * K11 T12 = I * rho2 * K12 T32 = 1 / (1 - I * K32 * rho1) if lineshapeModifier == "Kpi": return (K11 - I * rho2 * detK) / del_ elif lineshapeModifier == "KEta": return K12 / del_ elif lineshapeModifier == "I32": return T32 else: print("P-vector component : ", lineshapeModifier, " is not recognised") return tf.complex(tf.ones_like(s), tf.zeros_like(s))