phasespace
- class ChainGenerator(m0, mi)[source]
Bases:
object
struct = m0 -> [m1, m2, m3] # (m0, [m1, m2, m3]) m0 -> float mi -> float | struct
- class PhaseSpaceGenerator(m0, mass)[source]
Bases:
object
Phase Space Generator for n-body decay
- generate(n_iter: int, force=True, flatten=True, importances=True) list [source]
generate
n_iter
events- Parameters:
n_iter – number of events
force – switch for cutting generated data to required size
flatten – switch for sampling with weights
- Returns:
daughters 4-momentum, list of ndarray with shape (n_iter, 4)
- generate_momentum(mass, n_iter=None)[source]
generate random momentum from mass, boost them to a same rest frame
- generate_momentum_i(m0, m1, m2, n_iter, p_list=[])[source]
\(|p|\) = m0,m1,m2 in m0 rest frame :param p_list: extra list for momentum need to boost
- get_weight(ms, importances=True)[source]
calculate weight of mass
\[w = \frac{1}{w_{max}} \frac{1}{M}\prod_{i=0}^{n-2} q(M_i,M_{i+1},m_{i+1})\]
- generate_phsp(m0, mi, N=1000)[source]
general method to generate decay chain phase sapce >>> (a, b), c = generate_phsp(1.0, ( … (0.3, (0.1, 0.1)), … 0.2), … N = 10) >>> assert np.allclose(LorentzVector.M(a+b+c), 1.0)
- phsp_volume(m0, mi, **kwargs)[source]
Calculate the integration value for
\[\int 1 d\Phi = \frac{1}{2(2\pi)^{2n-3}M} \int |p_{1}| \prod_{i=1}^{n-2}|p_{i+1}^{*}| d M_i\]>>> phsp_volume(3.0, [0.1, 0.1]) <tf.Tensor: shape=(), dtype=float64, numpy=0.039...> >>> phsp_volume(3.0, [0.1, 0.1], return_error=True) (<tf.Tensor: shape=(), dtype=float64, numpy=0.039...>, array(0.)) >>> value = phsp_volume(3.0, [0.1, 0.2, 0.3]) >>> value, err = phsp_volume(3.0, [0.1, 0.2, 0.3], return_error=True) >>> assert abs(value - 0.0009592187960824385) < err * 3