Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lorentz Transforms #18

Closed
4 tasks
szabo137 opened this issue Jul 13, 2023 · 2 comments · Fixed by #45
Closed
4 tasks

Lorentz Transforms #18

szabo137 opened this issue Jul 13, 2023 · 2 comments · Fixed by #45
Labels
06 - Feature-request Missing a feature or functionality

Comments

@szabo137
Copy link
Member

szabo137 commented Jul 13, 2023

The Lorentz Vector interface should be extended by a function performing a certain Lorentz transformation.

In general, this may include the following transformations:

  • Lorentz transforms from LorentzVector (actually the relative FourVelocity)
  • Lorentz transforms from (relative) ThreeVelocity
  • Lorentz Boosts w.r.t. a certain axis from beta and rapidity
  • Rotations in 3D
@szabo137 szabo137 added the 06 - Feature-request Missing a feature or functionality label Jul 13, 2023
@szabo137 szabo137 transferred this issue from QEDjl-project/QEDbase.jl Jun 18, 2024
@szabo137
Copy link
Member Author

szabo137 commented Aug 2, 2024

Proposal: boost interface

Lorentz boosts are linear transformations acting on Lorentz vectors, especially four-momenta. This could be implemented using a two step procedure:

  1. Initialization of the boost
  2. Application of the boost to a vector

Boosts itself can be defined in two variants:

I) general boost
II) axis aligned boost

Finally, boosts can be initialized using various parametrisations: beta vector, gamma vectors, rapidities, pseudo-rapidities, ...

implementation

The implementation could be based on a little type hierarchy:

AbstractCoordiateTransform
<:AbstractLorentzTransform
<:AbstractLorentzBoost
<:AbstractLorentzAxisBoost

The specific boosts can then be inherited from the respective abstract type

Boost<:AbstractLorentzBoost
BoostX<:AbstractLorentzAxisBoost
...

The respective construction could be done in two ways, either using a type to indicate the base:

Boost(BoostBetaBase(), (beta_x, beta_y, beta_z)

BoostX(RapidityBase(),rapidity_x) 

However, I think the more convenient way to construct these boosts is the usage of special types for the initializing arguments:

Boost(BetaVector(beta_x, beta_y, beta_z))

Boost(RapidityVector(...))

BoostX(Rapidity(rapidity_x))

Once constructed, each boost (or in general each transformation) should implement the private function

_transform(
    boost::AbstractLorentzBoost,
    p::AbstractFourMomentum 
)

Finally, this can then be used to implement the application of the boost:

function (boost::AbstractLorentzBoost)(p::AbstractFourMomentum)
    _transform(boost, p)
end 

This leads to the following user story:

boost=Boost(BetaVector(0.0, 0.2, 0.5)) # probably the default constructor 
p=rand(SFourMomentum)

p_prime = boost(p)

@szabo137
Copy link
Member Author

szabo137 commented Aug 2, 2024

Side notes:

  • The constructors could be extended with more convenient calls, e.g. Boost(RestFrame(), p) which is a boost to the rest frame of p.
  • since every boost is invertable, it is conceivable to implement Base.inv(boost) -> Boost which returns the inverting boost.
  • initialized boosts can also applied conveniently to other types: obviously ParticleStateful but also PhaseSpacePoint, where the boost is applied to all involved four-momenta.

@szabo137 szabo137 mentioned this issue Aug 25, 2024
4 tasks
@AntonReinhard AntonReinhard linked a pull request Oct 8, 2024 that will close this issue
4 tasks
AntonReinhard added a commit that referenced this issue Oct 21, 2024
This adds Lorentz boosts in two variants: 

1. based on a vector of beta parameters (`BetaVector`), see
[here](https://physics.stackexchange.com/questions/30166/what-is-a-lorentz-boost-and-how-to-calculate-it)
or
[here](https://root.cern.ch/doc/master/classROOT_1_1Math_1_1Boost.html)
for details.
2. special case of axis-aligned boosts parameterized using single beta
vector components.

Solves #18 

---------

Co-authored-by: Uwe Hernandez Acosta <u.hernandez@hzdr.de>
Co-authored-by: Anton Reinhard <anton.reinhard@proton.me>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
06 - Feature-request Missing a feature or functionality
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant