HISKP-LQCD / sLapH-projection-NG

2 stars 0 forks source link

Make information of involved momenta available #24

Closed martin-ueding closed 5 years ago

martin-ueding commented 5 years ago

We have a few use cases for knowing which momenta actually couple to each irrep:

After playing around with this I settled on extracting the information from the generated prescription JSON files. The information is also available in the Wolfram Language code, and I could just intercept it at the given point. But manipulating data frames is easier in R for me, and the code might be more accessible to other people as the Wolfram Language is not used by any other person in our group, as far as I know.

The following is the head of a table for the 3pi I=3 case. It is in long format, but a call to tidyr::spread or reshape2::dcast can make it a column per particle involved.

total_momentum_sq total_momentum_str irrep irrep_col irrep_row rel_momenta_str particle individual_momentum_sq individual_momentum_str
0 000 A1u 1 1 000,000 1 0 000
0 000 A1u 1 1 000,000 2 0 000
0 000 A1u 1 1 000,000 3 0 000
0 000 A1u 1 1 000,001 1 1 00-1
0 000 A1u 1 1 000,001 2 0 000
0 000 A1u 1 1 000,001 3 1 001
0 000 Eu 1 1 000,001 1 1 00-1
0 000 Eu 1 1 000,001 2 0 000
0 000 Eu 1 1 000,001 3 1 001
0 000 Eu 1 2 000,001 1 1 00-1
0 000 Eu 1 2 000,001 2 0 000
0 000 Eu 1 2 000,001 3 1 001
0 000 Eu 2 1 000,001 1 1 00-1
0 000 Eu 2 1 000,001 2 0 000
0 000 Eu 2 1 000,001 3 1 001

Now it is fairly easy to compute the CM spectrum from this:

extent_space = 32
pion_mass = 0.2

energies <- long3 %>%
  mutate(energy = sqrt(pion_mass^2 + individual_momentum_sq * (2 * pi / extent_space)^2),
         energy_cm = sqrt(energy^2 - total_momentum_sq * (2 * pi / extent_space)^2))

spectrum <- energies %>%
  group_by(total_momentum_sq, total_momentum_str, irrep, irrep_row, irrep_col, rel_momenta_str) %>%
  summarize(total_energy = sum(energy),
            total_energy_cm = sum(energy_cm)) %>%
  ungroup() %>%
  select(total_momentum_sq, irrep, irrep_row, irrep_col, rel_momenta_str, total_energy, total_energy_cm)

This then gives us the non-interacting energy levels:

Bildschirmfoto_006

This also works for the rho for A40.32, taking the pion mass from the wiki just for a quick plot:

Bildschirmfoto_008

Curiously there are some NaN in there, I presume that the boost back into the CM frame creates a negative energy square. The spectrum in the boosted frames looks fine:

Bildschirmfoto_009

This does not seem correct from a physical intuition, I'll have to think about this issue.

martin-ueding commented 5 years ago

I did a stupid mistake with the kinematics, now it should be fine:

Bildschirmfoto_001

kostrzewa commented 5 years ago

Wunderbar, @pittlerf, can you integrate this info into your spectrum plot?

martin-ueding commented 5 years ago

Here is the full spectrum in two different formats:

If you need something else, just tell me.

martin-ueding commented 5 years ago

For the sake of this repository I consider this done. Currently the code is just in a Rmd file, perhaps one could create a script out of this. But as we only have a handful of channels I think that this is still okay until I think of a good way of unifying all this stuff with some wrapper or driver script.

pittlerf commented 5 years ago

Hi Martin, how can I interpret particle 1,2 in spectrum_wide.txt ? I first thought that it is the p1^2 and p2^2 respectively, but then

"16" 1 "001" "A1" 1 1 "00-1" 4 1

should be

"16" 1 "001" "A1" 1 1 "00-1" 0 1.

And then I could calculate the energies in the lab frame by:

energies <- long3 %>%
       mutate(energy = sqrt(pion_mass^2 + particle_1 * (2 * pi / extent_space)^2)
                 +sqrt(pion_mass^2 + particle_2 * (2 * pi / extent_space)^2),
       energy_cm = sqrt(energy^2 - total_momentum_sq * (2 * pi / extent_space)^2))
martin-ueding commented 5 years ago

The particle_1 and particle_2 are indeed the p² for the two particles. The values are correct because my parametrization is p₁ = P - q and p₂ = q. So we have P = (0, 0, 1) and q = (0, 0, -1) in this example. So p₁ = (0, 0, 2) and p₂ = (0, 0, -1), yielding p₁² = 4 and p₂² = 1. Markus's parametrization is different.