Distribution

Matched distribution utils

twiss.distribution.normal(mean: torch.Tensor, emittance: torch.Tensor, wolski: torch.Tensor) torch.distributions.multivariate_normal.MultivariateNormal[source]

Create a multivariate normal distribution

Parameters:
  • mean (Tensor) – mean vector

  • emittance (Tensor) – emittance vector

  • wolski (Tensor) – wolski twiss matrices

Return type:

MultivariateNormal

Note

Use sample method for generation

Examples

>>> from math import pi
>>> import torch
>>> from twiss.matrix import rotation
>>> from twiss.normal import cs_normal
>>> from twiss.wolski import twiss
>>> n = cs_normal(torch.tensor([0.1, 5.0, -0.1, 10.0]))
>>> m = n @ rotation(*2*pi*torch.tensor([0.12, 0.21])) @ n.inverse()
>>> *_, ws = twiss(m)
>>> es = torch.tensor([1.0E-6, 1.0E-8])
>>> ms = torch.zeros(4)
>>> db = normal(ms, es, ws)
>>> ex, ey = es
>>> wx, wy = ws
>>> torch.allclose(db.covariance_matrix, ex*wx + ey*wy)
True
>>> torch.allclose(db.sample((2**20, )).T.cov(), db.covariance_matrix)
True