phasespace

class ChainGenerator(m0, mi)[source]

Bases: object

struct = m0 -> [m1, m2, m3] # (m0, [m1, m2, m3]) m0 -> float mi -> float | struct

cal_max_weight()[source]
generate(N)[source]
get_gen(idx_gen)[source]
class PhaseSpaceGenerator(m0, mass)[source]

Bases: object

Phase Space Generator for n-body decay

cal_max_weight()[source]
flatten_mass(ms, importances=True)[source]

sampling from mass with weight

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_mass(n_iter)[source]

generate possible inner mass.

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_mass_range()[source]
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})\]
mass_importances(mass)[source]

generate possible inner mass.

set_decay(m0, mass)[source]

set decay mass, calculate max weight

\[w_{max} = \frac{1}{M}\prod_{i=0}^{n-2} q(max(M_i),min(M_{i+1}),m_{i+1})\]
\[max(M_i) = M_0 - \sum_{j=1}^{i} (m_j)\]
\[min(M_i) = \sum_{j=i}^{n} (m_j)\]
volume(N=10000, return_error=False)[source]

The 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\]
class UniformGenerator(a, b)[source]

Bases: object

generate(N)[source]
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)

get_p(M, ma, mb)[source]
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