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

phys: implement symbolic Dalitz phase space #139

Merged
merged 6 commits into from
Apr 26, 2022

Conversation

redeboer
Copy link
Member

@redeboer redeboer commented Apr 24, 2022

Extracted from #129 (comment).

  • Implement symbolic Kibble and Källén functions
  • Visualize 2D phase space boundary
  • Visualize 1D phase space projections
  • Add references to literature
  • Parametrize 2D phase space boundary (instead of contour plot over meshgrid)
Interactive visualization


TR-017 is now available here.

@redeboer redeboer added 📝 Docs Improvements or additions to documentation 📖 Physics labels Apr 24, 2022
@redeboer redeboer self-assigned this Apr 24, 2022
@review-notebook-app
Copy link

Check out this pull request on  ReviewNB

See visual diffs & provide feedback on Jupyter Notebooks.


Powered by ReviewNB

@redeboer redeboer marked this pull request as draft April 24, 2022 21:24
@mmikhasenko
Copy link
Contributor

(?) Parametrize 2D phase space boundary (instead of contour plot over meshgrid)

It is an analytic expression, easy to write down. I just do not know the best way to code it since, for whatever Mandelstam variable you choose for y axis, there is an expression y+-(x) where x is whatever you choose for x variable.

see
https://github.com/mmikhasenko/ThreeBodyDecay.jl/blob/01be61b5ab56f191e09f28c97f9e64755efe8bee/src/tbs_struct.jl#L172
with
https://github.com/mmikhasenko/ThreeBodyDecay.jl/blob/master/src/angle_functions.jl#L26

@redeboer
Copy link
Member Author

Ah thanks for the links!

I just do not know the best way to code it since, for whatever Mandelstam variable you choose for y axis, there is an expression y+-(x) where x is whatever you choose for x variable.

Do you mean sigma2 as a function of sigma1?
image

For plotting (with matplotlib), it would be better if there is some way to parametrize the closed boundary as a function of some variable t along that boundary. But that would be harder to solve, if even possible.

@mmikhasenko
Copy link
Contributor

mmikhasenko commented Apr 25, 2022

uh, well done with the solve! :)

yes, there is one fun way for the parametric boundary:

  1. replace
  • sigma1 = (m2+m3)^2 + T1
  • sigma2 = (m3+m1)^2 + T2
  • sigma3 = (m1+m2)^2 + T3
  1. Then, replace to r, theta to impose a constraint
    image
    where
    T0 = m0^2+m1^2+m2^2+m3^2 - (m2+m3)^2 - (m3+m1)^2 - (m1+m2)^2

  2. for every value of \theta \in [0, 360], the value of r should be found numerically, by solving phi=0.
    Among all positive solutions for r, one needs to select the lowest.

@mmikhasenko
Copy link
Contributor

for the references,

Eero Byckling, K. Kajantie
https://inspirehep.net/literature/1251349

it is the particle-kinematics bible

@redeboer
Copy link
Member Author

Eero Byckling, K. Kajantie https://inspirehep.net/literature/1251349
it is the particle-kinematics bible

Great tip! See 632d0c4

@redeboer
Copy link
Member Author

yes, there is one fun way for the parametric boundary:
...

Seems that this results in 3rd degree polynomials in r (e626d3b). Well let's not bother to plot that then :P

image

@redeboer redeboer marked this pull request as ready for review April 25, 2022 14:16
@redeboer
Copy link
Member Author

Btw where is this from? Byckling and Kajantie do a similar trick for "all masses equal", but I can't see why this would work.

2. Then, replace to r, theta to impose a constraint
image
where
T0 = m0^2+m1^2+m2^2+m3^2 - (m2+m3)^2 - (m3+m1)^2 - (m1+m2)^2

@redeboer redeboer changed the title feat: implement symbolic Dalitz phase space phys: implement symbolic Dalitz phase space Apr 25, 2022
@mmikhasenko
Copy link
Contributor

mmikhasenko commented Apr 25, 2022

Yes, the idea is from Byckling-Kajantie.
I was giving similar exercises to students when I was teaching.

I can't see why this would work.
you make the change of coordinates {sigma_i} -> {r,\phi} in the way that kinematic constraint

sum_1^3 sigma_i = sum_0^3 m_j^2

is always satisfied. The exact transformation is from the triangle representation of the Dalitz.
{r,\phi} are polar cooridinates. I think, that r=0 is always physical.

Actually, it would be nice to see that it works by finding the root numerically.
I find it fascinating to see the polynomial itself. Before I only worked it out analytically for a few limited cases.

@redeboer
Copy link
Member Author

Actually, it would be nice to see that it works by finding the root numerically.
I find it fascinating to see the polynomial itself. Before I only worked it out analytically for a few limited cases.

SymPy can find the root analytically in for these simple integer values of m_i. That can then be lambdified and used for plotting. I'm not sure whether this can be easily implemented for arbitrary values though.
image

Perhaps for now it's best to merge this PR though, if it looks fine. Then it's available to the other pull requests, so they can renumber and link to it. We can try to work out the parametric plot separately.

@redeboer
Copy link
Member Author

redeboer commented Apr 26, 2022

@wgradl, once this PR is merged, this page can be found under compwa-org.rtfd.io/report/017.html. Are there any things that can be improved before?

@wgradl
Copy link
Collaborator

wgradl commented Apr 26, 2022 via email

@redeboer redeboer enabled auto-merge (squash) April 26, 2022 09:33
@redeboer redeboer removed the request for review from mmikhasenko April 26, 2022 09:33
@redeboer redeboer merged commit 94abdaf into ComPWA:main Apr 26, 2022
@redeboer redeboer deleted the dalitz-phase-space branch April 26, 2022 09:35
@mmikhasenko
Copy link
Contributor

I just checked that the trick with minimal positive root works

image

the example is here
https://github.com/mmikhasenko/examples/blob/master/parametricDPboundary.jl

@redeboer
Copy link
Member Author

Cool. I want to get #134 to work, so we can integrate such Julia scripts 😆
Afaics, with matplotlib/python, this is harder to do with Python, because there isn't an equivalent to this roots() function. Moving this point to ComPWA/report#4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
📝 Docs Improvements or additions to documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants