From de6c33283e2d039d6ac89826e463d5ae4e986a01 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 22:59:47 +0200 Subject: [PATCH 01/15] apply pre-commit hooks * activate sort imports on save in VSCode --- .cspell.json | 11 +- .vscode/settings.json | 17 + README.md | 17 +- data/isobars.json | 146 +-- data/modelparameters.json | 2272 ++++++++++++++++++------------------- julia/notebooks/model0.jl | 24 +- 6 files changed, 1259 insertions(+), 1228 deletions(-) diff --git a/.cspell.json b/.cspell.json index 4d9b5d74..01d79980 100644 --- a/.cspell.json +++ b/.cspell.json @@ -15,7 +15,16 @@ ], "ignorePaths": [ "**/.cspell.json", - ".pre-commit-config.yaml" + ".gitignore", + ".pre-commit-config.yaml", + ".prettierignore", + ".vscode/*", + "LICENSE", + "Manifest.toml", + "Project.toml", + "data/**.json", + "pyproject.toml", + "setup.cfg" ], "language": "en-GB", "words": [ diff --git a/.vscode/settings.json b/.vscode/settings.json index 690e164a..9a011cdd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,21 @@ { + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[markdown]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[python]": { + "editor.codeActionsOnSave": { + "source.organizeImports": true + } + }, + "[yaml]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, "cSpell.enabled": true, "editor.formatOnSave": true, "python.analysis.autoImportCompletions": false, diff --git a/README.md b/README.md index 4859478a..aeb6db58 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,20 @@ pre-commit install For more information about local Python set-up, see [here](https://compwa-org.readthedocs.io/develop.html#local-set-up). ## Data + The parameters of the LHCb fit are storred in the json files in the folder [`data/`](data/) ### Content of the [`data/isobars.json`](data/isobars.json) + The file proveds the description of the characteristics and parameters of the resonances in the decay chains. -The resonances are named by `L(XXXX)`, `D(XXXX)`, and `K(XXXX)` for the Lambda**, Delta**, and K** states. +The resonances are named by `L(XXXX)`, `D(XXXX)`, and `K(XXXX)` for the Lambda**, Delta**, and K\*\* states. The data stucture has the fieds `jp`, `mass`, `width`, and `lineshape`. There are three lineshape types used: - * "BreitWignerMinL": the standard parametrization with isobar spectator orbital momentum set to its minimal value - * "BuggBreitWignerMinL": the mass-dependent width incorporates Adler zero and exponential formfactor - * "Flatte1405": the mass-dependent width includes two terms, pK and Sigma pi with the same Gamma0 + +- "BreitWignerMinL": the standard parametrization with isobar spectator orbital momentum set to its minimal value +- "BuggBreitWignerMinL": the mass-dependent width incorporates Adler zero and exponential formfactor +- "Flatte1405": the mass-dependent width includes two terms, pK and Sigma pi with the same Gamma0 For most of the resonances, the width field gives a fixed value. However, for a few, an interval is provided. In that case, the width was a parameter of the fit. @@ -42,8 +45,10 @@ Its exact value is to be found in the list of parameters The fit results is storred in the `first(file["modelstudies"])`. The dictionary contains the list of all floating parameters. `ArF(XXXX)N` and `AiF(XXXX)N` are the real and imaginary part of the coupling `K^{Lc->Fx}`, where - * the `F` stends for `D`,`L`, or `K`. - * the `N` numbers the helicity indices with the following mapping + +- the `F` stends for `D`,`L`, or `K`. +- the `N` numbers the helicity indices with the following mapping + ``` # Lambda** L(XXXX)1 -> K^{Lc->Lambda pi}_{+1/2,0} diff --git a/data/isobars.json b/data/isobars.json index 66a4234d..16e60c96 100644 --- a/data/isobars.json +++ b/data/isobars.json @@ -1,76 +1,76 @@ { - "isobars": { - "L(1405)": { - "jp": "1/2^-", - "mass": "1405.1", - "width": "50.5", - "lineshape": "Flatte1405" - }, - "L(1520)": { - "jp": "3/2^-", - "mass": "1515-1523", - "width": "10-20", - "lineshape": "BreitWignerMinL" - }, - "L(1600)": { - "jp": "1/2^+", - "mass": "1630", - "width": "250", - "lineshape": "BreitWignerMinL" - }, - "L(1670)": { - "jp": "1/2^-", - "mass": "1670", - "width": "30", - "lineshape": "BreitWignerMinL" - }, - "L(1690)": { - "jp": "3/2^-", - "mass": "1690", - "width": "70", - "lineshape": "BreitWignerMinL" - }, - "L(2000)": { - "jp": "1/2^-", - "mass": "1900-2100", - "width": "20-400", - "lineshape": "BreitWignerMinL" - }, - "D(1232)": { - "jp": "3/2^+", - "mass": "1232", - "width": "117", - "lineshape": "BreitWignerMinL" - }, - "D(1600)": { - "jp": "3/2^+", - "mass": "1640", - "width": "300", - "lineshape": "BreitWignerMinL" - }, - "D(1700)": { - "jp": "3/2^-", - "mass": "1690", - "width": "380", - "lineshape": "BreitWignerMinL" - }, - "K(700)": { - "jp": "0^+", - "mass": "824", - "width": "478", - "lineshape": "BuggBreitWignerMinL" - }, - "K(892)": { - "jp": "1^-", - "mass": "895.5", - "width": "47.3", - "lineshape": "BreitWignerMinL" - }, - "K(1430)": { - "jp": "0^+", - "mass": "1375", - "width": "190", - "lineshape": "BuggBreitWignerMinL" - } + "isobars": { + "L(1405)": { + "jp": "1/2^-", + "mass": "1405.1", + "width": "50.5", + "lineshape": "Flatte1405" + }, + "L(1520)": { + "jp": "3/2^-", + "mass": "1515-1523", + "width": "10-20", + "lineshape": "BreitWignerMinL" + }, + "L(1600)": { + "jp": "1/2^+", + "mass": "1630", + "width": "250", + "lineshape": "BreitWignerMinL" + }, + "L(1670)": { + "jp": "1/2^-", + "mass": "1670", + "width": "30", + "lineshape": "BreitWignerMinL" + }, + "L(1690)": { + "jp": "3/2^-", + "mass": "1690", + "width": "70", + "lineshape": "BreitWignerMinL" + }, + "L(2000)": { + "jp": "1/2^-", + "mass": "1900-2100", + "width": "20-400", + "lineshape": "BreitWignerMinL" + }, + "D(1232)": { + "jp": "3/2^+", + "mass": "1232", + "width": "117", + "lineshape": "BreitWignerMinL" + }, + "D(1600)": { + "jp": "3/2^+", + "mass": "1640", + "width": "300", + "lineshape": "BreitWignerMinL" + }, + "D(1700)": { + "jp": "3/2^-", + "mass": "1690", + "width": "380", + "lineshape": "BreitWignerMinL" + }, + "K(700)": { + "jp": "0^+", + "mass": "824", + "width": "478", + "lineshape": "BuggBreitWignerMinL" + }, + "K(892)": { + "jp": "1^-", + "mass": "895.5", + "width": "47.3", + "lineshape": "BreitWignerMinL" + }, + "K(1430)": { + "jp": "0^+", + "mass": "1375", + "width": "190", + "lineshape": "BuggBreitWignerMinL" } + } } diff --git a/data/modelparameters.json b/data/modelparameters.json index ce7ee57c..9cd28b97 100644 --- a/data/modelparameters.json +++ b/data/modelparameters.json @@ -1,1138 +1,1138 @@ { - "modelstudies": [ - { - "title": "Default amplitude model.", - "parameters": { - "gammaK(700)": "0.941060 ± 0.042406", - "ArK(700)1": "0.068908 ± 0.122603", - "AiK(700)1": "2.521444 ± 0.084235", - "ArK(700)2": "-2.685630 ± 0.124151", - "AiK(700)2": "0.038490 ± 0.123867", - "ArK(892)2": "1.192614 ± 0.066524", - "AiK(892)2": "-1.025814 ± 0.041453", - "ArK(892)3": "-3.141446 ± 0.092448", - "AiK(892)3": "-3.293410 ± 0.206014", - "ArK(892)4": "-0.727145 ± 0.181956", - "AiK(892)4": "-4.155027 ± 0.119153", - "gammaK(1430)": "0.020981 ± 0.011062", - "ArK(1430)1": "-6.715160 ± 0.602836", - "AiK(1430)1": "10.479411 ± 0.267895", - "ArK(1430)2": "0.219754 ± 0.381936", - "AiK(1430)2": "8.741196 ± 0.250855", - "ArL(1405)1": "-4.572486 ± 0.231833", - "AiL(1405)1": "3.190144 ± 0.169851", - "ArL(1405)2": "10.446080 ± 0.128799", - "AiL(1405)2": "2.787441 ± 0.607833", - "ML(1520)": "1.518467 ± 0.000100", - "GL(1520)": "0.015195 ± 0.000265", - "ArL(1520)1": "0.293998 ± 0.012158", - "AiL(1520)1": "0.044324 ± 0.022276", - "ArL(1520)2": "-0.160687 ± 0.075604", - "AiL(1520)2": "1.498833 ± 0.032468", - "ArL(1600)1": "4.840649 ± 0.080342", - "AiL(1600)1": "3.082786 ± 0.313304", - "ArL(1600)2": "-6.971233 ± 0.180278", - "AiL(1600)2": "0.842435 ± 0.300438", - "ArL(1670)1": "-0.339585 ± 0.013871", - "AiL(1670)1": "-0.144678 ± 0.022591", - "ArL(1670)2": "-0.570978 ± 0.059400", - "AiL(1670)2": "1.011833 ± 0.017816", - "ArL(1690)1": "-0.385772 ± 0.046657", - "AiL(1690)1": "-0.110235 ± 0.045896", - "ArL(1690)2": "-2.730592 ± 0.052811", - "AiL(1690)2": "-0.353613 ± 0.136240", - "ML(2000)": "1.988190 ± 0.000911", - "GL(2000)": "0.179260 ± 0.002766", - "ArL(2000)1": "-8.014857 ± 0.267813", - "AiL(2000)1": "-7.614006 ± 0.529630", - "ArL(2000)2": "-4.336255 ± 0.137963", - "AiL(2000)2": "-3.796192 ± 0.285036", - "ArD(1232)1": "-6.778191 ± 0.268436", - "AiD(1232)1": "3.051805 ± 0.264359", - "ArD(1232)2": "-12.987193 ± 0.433180", - "AiD(1232)2": "4.528336 ± 0.493430", - "ArD(1600)1": "11.401585 ± 0.437580", - "AiD(1600)1": "-3.125511 ± 0.473191", - "ArD(1600)2": "6.729211 ± 0.283501", - "AiD(1600)2": "-1.002383 ± 0.331137", - "ArD(1700)1": "10.378280 ± 0.253080", - "AiD(1700)1": "1.434872 ± 0.485532", - "ArD(1700)2": "12.874102 ± 0.233827", - "AiD(1700)2": "2.105570 ± 0.644916" - } - }, - { - "title": "Alternative amplitude model with K^*(892) with free mass and width.", - "parameters": { - "gammaK(700)": "0.979206 ± 0.029926", - "ArK(700)1": "-0.172866 ± 0.169819", - "AiK(700)1": "2.704617 ± 0.154115", - "ArK(700)2": "-2.867440 ± 0.176016", - "AiK(700)2": "-0.173008 ± 0.166487", - "MK(892)": "0.895262 ± 0.000220", - "GK(892)": "0.047548 ± 0.000464", - "ArK(892)2": "1.256591 ± 0.082629", - "AiK(892)2": "-0.961626 ± 0.073051", - "ArK(892)3": "-3.051419 ± 0.243241", - "AiK(892)3": "-3.550773 ± 0.240794", - "ArK(892)4": "-0.477608 ± 0.234991", - "AiK(892)4": "-4.309917 ± 0.211342", - "gammaK(1430)": "0.013442 ± 0.008768", - "ArK(1430)1": "-7.623008 ± 0.695014", - "AiK(1430)1": "10.659428 ± 0.676680", - "ArK(1430)2": "0.070474 ± 0.517914", - "AiK(1430)2": "9.232267 ± 0.483421", - "ArL(1405)1": "-4.803554 ± 0.291350", - "AiL(1405)1": "3.345284 ± 0.300704", - "ArL(1405)2": "11.081209 ± 0.589328", - "AiL(1405)2": "3.433091 ± 0.703625", - "ML(1520)": "1.518521 ± 0.000073", - "GL(1520)": "0.015321 ± 0.000307", - "ArL(1520)1": "0.295599 ± 0.024293", - "AiL(1520)1": "0.066946 ± 0.029078", - "ArL(1520)2": "-0.303600 ± 0.094485", - "AiL(1520)2": "1.593037 ± 0.087940", - "ArL(1600)1": "4.853708 ± 0.335374", - "AiL(1600)1": "3.589134 ± 0.384890", - "ArL(1600)2": "-7.454595 ± 0.384407", - "AiL(1600)2": "0.364087 ± 0.436442", - "ArL(1670)1": "-0.346038 ± 0.017070", - "AiL(1670)1": "-0.155222 ± 0.022148", - "ArL(1670)2": "-0.676886 ± 0.068655", - "AiL(1670)2": "1.024249 ± 0.064593", - "ArL(1690)1": "-0.406504 ± 0.049906", - "AiL(1690)1": "-0.166295 ± 0.047519", - "ArL(1690)2": "-2.877193 ± 0.143120", - "AiL(1690)2": "-0.505867 ± 0.164248", - "ML(2000)": "1.987204 ± 0.000962", - "GL(2000)": "0.180647 ± 0.001905", - "ArL(2000)1": "-8.153499 ± 0.623337", - "AiL(2000)1": "-8.466388 ± 0.605063", - "ArL(2000)2": "-4.440215 ± 0.356779", - "AiL(2000)2": "-4.345002 ± 0.348020", - "ArD(1232)1": "-7.346946 ± 0.395237", - "AiD(1232)1": "2.523705 ± 0.421066", - "ArD(1232)2": "-14.024923 ± 0.712383", - "AiD(1232)2": "3.944177 ± 0.777973", - "ArD(1600)1": "12.653213 ± 0.680913", - "AiD(1600)1": "-2.595411 ± 0.743945", - "ArD(1600)2": "7.617624 ± 0.534547", - "AiD(1600)2": "-0.347803 ± 0.495848", - "ArD(1700)1": "10.598530 ± 0.618298", - "AiD(1700)1": "2.137527 ± 0.617740", - "ArD(1700)2": "13.575967 ± 0.792409", - "AiD(1700)2": "3.625141 ± 0.844290" - } - }, - { - "title": "Alternative amplitude model with Lz(1670) with free mass and width.", - "parameters": { - "gammaK(700)": "0.931224 ± 0.027146", - "ArK(700)1": "0.104999 ± 0.132084", - "AiK(700)1": "2.550341 ± 0.082331", - "ArK(700)2": "-2.680007 ± 0.091156", - "AiK(700)2": "0.066910 ± 0.142798", - "ArK(892)2": "1.181558 ± 0.042422", - "AiK(892)2": "-1.046885 ± 0.068658", - "ArK(892)3": "-3.159878 ± 0.227798", - "AiK(892)3": "-3.296591 ± 0.063905", - "ArK(892)4": "-0.735495 ± 0.192316", - "AiK(892)4": "-4.167493 ± 0.084823", - "gammaK(1430)": "0.015803 ± 0.007288", - "ArK(1430)1": "-6.617803 ± 0.341431", - "AiK(1430)1": "10.649207 ± 0.582432", - "ArK(1430)2": "0.398512 ± 0.462661", - "AiK(1430)2": "8.831185 ± 0.227581", - "ArL(1405)1": "-4.527740 ± 0.145118", - "AiL(1405)1": "3.274871 ± 0.281274", - "ArL(1405)2": "10.406658 ± 0.395947", - "AiL(1405)2": "2.617288 ± 0.474647", - "ML(1520)": "1.518422 ± 0.000130", - "GL(1520)": "0.015145 ± 0.000343", - "ArL(1520)1": "0.292227 ± 0.007909", - "AiL(1520)1": "0.039435 ± 0.018343", - "ArL(1520)2": "-0.131156 ± 0.074057", - "AiL(1520)2": "1.506901 ± 0.051886", - "ArL(1600)1": "4.853613 ± 0.271693", - "AiL(1600)1": "3.038570 ± 0.184491", - "ArL(1600)2": "-6.904670 ± 0.187138", - "AiL(1600)2": "0.945895 ± 0.372292", - "ML(1670)": "1.671225 ± 0.000501", - "GL(1670)": "0.033118 ± 0.001248", - "ArL(1670)1": "-0.371124 ± 0.031753", - "AiL(1670)1": "-0.179791 ± 0.029699", - "ArL(1670)2": "-0.674482 ± 0.054658", - "AiL(1670)2": "1.063042 ± 0.071367", - "ArL(1690)1": "-0.353108 ± 0.033933", - "AiL(1690)1": "-0.111803 ± 0.026556", - "ArL(1690)2": "-2.741542 ± 0.088948", - "AiL(1690)2": "-0.365152 ± 0.123143", - "ML(2000)": "1.987384 ± 0.000835", - "GL(2000)": "0.179791 ± 0.001741", - "ArL(2000)1": "-8.215415 ± 0.572748", - "AiL(2000)1": "-7.556390 ± 0.233964", - "ArL(2000)2": "-4.486753 ± 0.312147", - "AiL(2000)2": "-3.687655 ± 0.161887", - "ArD(1232)1": "-6.789666 ± 0.095830", - "AiD(1232)1": "3.098280 ± 0.367309", - "ArD(1232)2": "-13.008854 ± 0.175973", - "AiD(1232)2": "4.641417 ± 0.694158", - "ArD(1600)1": "11.254499 ± 0.237932", - "AiD(1600)1": "-3.181172 ± 0.639540", - "ArD(1600)2": "6.759316 ± 0.240687", - "AiD(1600)2": "-0.911182 ± 0.377845", - "ArD(1700)1": "10.436469 ± 0.360223", - "AiD(1700)1": "1.403313 ± 0.537243", - "ArD(1700)2": "13.022957 ± 0.474631", - "AiD(1700)2": "1.981198 ± 0.569500" - } - }, - { - "title": "Alternative amplitude model with Lz(1690) with free mass and width.", - "parameters": { - "gammaK(700)": "0.941693 ± 0.027900", - "ArK(700)1": "0.235301 ± 0.151182", - "AiK(700)1": "2.617633 ± 0.123157", - "ArK(700)2": "-2.637704 ± 0.137561", - "AiK(700)2": "0.232068 ± 0.158025", - "ArK(892)2": "1.188494 ± 0.074087", - "AiK(892)2": "-1.064647 ± 0.074399", - "ArK(892)3": "-3.225409 ± 0.235333", - "AiK(892)3": "-3.243287 ± 0.209467", - "ArK(892)4": "-0.823814 ± 0.216549", - "AiK(892)4": "-4.143030 ± 0.187736", - "gammaK(1430)": "0.011083 ± 0.006892", - "ArK(1430)1": "-6.318610 ± 0.589444", - "AiK(1430)1": "10.634797 ± 0.611342", - "ArK(1430)2": "0.720164 ± 0.495065", - "AiK(1430)2": "8.651308 ± 0.379169", - "ArL(1405)1": "-4.438453 ± 0.238323", - "AiL(1405)1": "3.400645 ± 0.294682", - "ArL(1405)2": "10.603083 ± 0.501544", - "AiL(1405)2": "2.468517 ± 0.606209", - "ML(1520)": "1.518304 ± 0.000144", - "GL(1520)": "0.015001 ± 0.000482", - "ArL(1520)1": "0.293460 ± 0.024564", - "AiL(1520)1": "0.027366 ± 0.028136", - "ArL(1520)2": "-0.070759 ± 0.083333", - "AiL(1520)2": "1.509838 ± 0.078132", - "ArL(1600)1": "4.985161 ± 0.289528", - "AiL(1600)1": "2.960452 ± 0.339269", - "ArL(1600)2": "-7.062379 ± 0.322005", - "AiL(1600)2": "1.391393 ± 0.423046", - "ArL(1670)1": "-0.343888 ± 0.017767", - "AiL(1670)1": "-0.122270 ± 0.019908", - "ArL(1670)2": "-0.554003 ± 0.062269", - "AiL(1670)2": "1.054215 ± 0.062275", - "ML(1690)": "1.700233 ± 0.001956", - "GL(1690)": "0.094103 ± 0.001011", - "ArL(1690)1": "-0.486576 ± 0.058133", - "AiL(1690)1": "-0.155656 ± 0.053014", - "ArL(1690)2": "-2.873073 ± 0.140066", - "AiL(1690)2": "-1.080145 ± 0.182254", - "ML(2000)": "1.987831 ± 0.000837", - "GL(2000)": "0.177506 ± 0.001970", - "ArL(2000)1": "-8.208706 ± 0.584764", - "AiL(2000)1": "-7.275124 ± 0.507152", - "ArL(2000)2": "-4.533152 ± 0.328092", - "AiL(2000)2": "-3.645276 ± 0.281560", - "ArD(1232)1": "-6.801588 ± 0.336713", - "AiD(1232)1": "3.392680 ± 0.390102", - "ArD(1232)2": "-13.047199 ± 0.574007", - "AiD(1232)2": "4.724667 ± 0.726138", - "ArD(1600)1": "11.112191 ± 0.540042", - "AiD(1600)1": "-3.600778 ± 0.667295", - "ArD(1600)2": "6.564965 ± 0.477710", - "AiD(1600)2": "-1.671060 ± 0.440635", - "ArD(1700)1": "10.339426 ± 0.502442", - "AiD(1700)1": "0.848406 ± 0.599711", - "ArD(1700)2": "12.825594 ± 0.671808", - "AiD(1700)2": "1.522785 ± 0.722947" - } - }, - { - "title": "Alternative amplitude model with Deltares^{++}(1232) with free mass and width.", - "parameters": { - "gammaK(700)": "0.862213 ± 0.037889", - "ArK(700)1": "-0.058420 ± 0.165556", - "AiK(700)1": "3.245526 ± 0.188081", - "ArK(700)2": "-3.052966 ± 0.192255", - "AiK(700)2": "0.448280 ± 0.165059", - "ArK(892)2": "1.316403 ± 0.082737", - "AiK(892)2": "-0.981707 ± 0.078162", - "ArK(892)3": "-3.102638 ± 0.237331", - "AiK(892)3": "-3.524093 ± 0.226744", - "ArK(892)4": "-0.600424 ± 0.208990", - "AiK(892)4": "-4.340942 ± 0.221140", - "gammaK(1430)": "-0.000808 ± 0.009261", - "ArK(1430)1": "-6.023863 ± 0.603487", - "AiK(1430)1": "11.673504 ± 0.697359", - "ArK(1430)2": "0.439749 ± 0.482248", - "AiK(1430)2": "9.192080 ± 0.465594", - "ArL(1405)1": "-4.311990 ± 0.273925", - "AiL(1405)1": "3.394898 ± 0.283385", - "ArL(1405)2": "10.878538 ± 0.563218", - "AiL(1405)2": "2.550106 ± 0.605541", - "ML(1520)": "1.518329 ± 0.000141", - "GL(1520)": "0.015038 ± 0.000442", - "ArL(1520)1": "0.272623 ± 0.023214", - "AiL(1520)1": "0.040904 ± 0.024110", - "ArL(1520)2": "-0.098882 ± 0.082151", - "AiL(1520)2": "1.575655 ± 0.086769", - "ArL(1600)1": "5.479766 ± 0.341048", - "AiL(1600)1": "2.785101 ± 0.345928", - "ArL(1600)2": "-7.402132 ± 0.373852", - "AiL(1600)2": "1.084110 ± 0.396234", - "ArL(1670)1": "-0.277686 ± 0.031437", - "AiL(1670)1": "-0.125870 ± 0.020935", - "ArL(1670)2": "-0.593018 ± 0.063265", - "AiL(1670)2": "1.094967 ± 0.066888", - "ArL(1690)1": "-0.534285 ± 0.029514", - "AiL(1690)1": "0.028276 ± 0.058393", - "ArL(1690)2": "-2.679008 ± 0.128034", - "AiL(1690)2": "-0.241186 ± 0.138195", - "ML(2000)": "1.990371 ± 0.000946", - "GL(2000)": "0.178285 ± 0.002366", - "ArL(2000)1": "-7.515210 ± 0.595310", - "AiL(2000)1": "-8.493874 ± 0.527933", - "ArL(2000)2": "-4.222160 ± 0.353790", - "AiL(2000)2": "-4.710304 ± 0.328325", - "MD(1232)": "1.243549 ± 0.000726", - "GD(1232)": "0.130084 ± 0.002105", - "ArD(1232)1": "-7.913454 ± 0.431139", - "AiD(1232)1": "2.468312 ± 0.399099", - "ArD(1232)2": "-13.990674 ± 0.733443", - "AiD(1232)2": "5.519206 ± 0.733672", - "ArD(1600)1": "11.119866 ± 0.594976", - "AiD(1600)1": "-3.101455 ± 0.614107", - "ArD(1600)2": "7.561649 ± 0.506562", - "AiD(1600)2": "-0.703400 ± 0.436001", - "ArD(1700)1": "11.160177 ± 0.628154", - "AiD(1700)1": "0.810239 ± 0.596754", - "ArD(1700)2": "13.452967 ± 0.760700", - "AiD(1700)2": "2.391401 ± 0.706637" - } - }, - { - "title": "Alternative amplitude model with Lz(1600), Deltares(1600)^{++}, Deltares(1700)^{++} with free mass and width.", - "parameters": { - "gammaK(700)": "0.930361 ± 0.042917", - "ArK(700)1": "-0.295479 ± 0.159250", - "AiK(700)1": "2.973306 ± 0.129842", - "ArK(700)2": "-2.858500 ± 0.144929", - "AiK(700)2": "-0.330782 ± 0.163328", - "ArK(892)2": "1.336661 ± 0.083917", - "AiK(892)2": "-0.959295 ± 0.067402", - "ArK(892)3": "-2.761572 ± 0.106633", - "AiK(892)3": "-3.598880 ± 0.220996", - "ArK(892)4": "-0.284618 ± 0.196509", - "AiK(892)4": "-4.250430 ± 0.135808", - "gammaK(1430)": "0.001940 ± 0.011045", - "ArK(1430)1": "-7.987826 ± 0.681783", - "AiK(1430)1": "9.803146 ± 0.294698", - "ArK(1430)2": "-0.593331 ± 0.415975", - "AiK(1430)2": "9.324588 ± 0.309701", - "ArL(1405)1": "-4.555433 ± 0.298588", - "AiL(1405)1": "2.763267 ± 0.218122", - "ArL(1405)2": "9.625044 ± 0.246670", - "AiL(1405)2": "3.611149 ± 0.613333", - "ML(1520)": "1.518356 ± 0.000201", - "GL(1520)": "0.013888 ± 0.000468", - "ArL(1520)1": "0.311090 ± 0.030219", - "AiL(1520)1": "0.097119 ± 0.035055", - "ArL(1520)2": "-0.290387 ± 0.075721", - "AiL(1520)2": "1.329605 ± 0.045707", - "ML(1600)": "1.641907 ± 0.003978", - "GL(1600)": "0.280442 ± 0.012658", - "ArL(1600)1": "4.414414 ± 0.185704", - "AiL(1600)1": "4.820363 ± 0.531981", - "ArL(1600)2": "-8.100483 ± 0.399640", - "AiL(1600)2": "-1.077598 ± 0.497833", - "ArL(1670)1": "-0.357416 ± 0.017074", - "AiL(1670)1": "-0.211263 ± 0.037984", - "ArL(1670)2": "-0.645125 ± 0.064380", - "AiL(1670)2": "0.973070 ± 0.024447", - "ArL(1690)1": "-0.469216 ± 0.074886", - "AiL(1690)1": "-0.072329 ± 0.069308", - "ArL(1690)2": "-2.749269 ± 0.083246", - "AiL(1690)2": "-0.571594 ± 0.146788", - "ML(2000)": "1.988627 ± 0.001395", - "GL(2000)": "0.185432 ± 0.003371", - "ArL(2000)1": "-7.191096 ± 0.301981", - "AiL(2000)1": "-9.143200 ± 0.583267", - "ArL(2000)2": "-3.983316 ± 0.160931", - "AiL(2000)2": "-4.282048 ± 0.323373", - "ArD(1232)1": "-6.978590 ± 0.304846", - "AiD(1232)1": "2.387086 ± 0.300128", - "ArD(1232)2": "-13.689222 ± 0.484052", - "AiD(1232)2": "2.851832 ± 0.534940", - "MD(1600)": "1.653725 ± 0.005556", - "GD(1600)": "0.399996 ± 0.041473", - "ArD(1600)1": "15.672601 ± 0.796079", - "AiD(1600)1": "-3.902558 ± 0.805891", - "ArD(1600)2": "7.749456 ± 0.597435", - "AiD(1600)2": "-1.530633 ± 0.559362", - "MD(1700)": "1.760812 ± 0.009728", - "GD(1700)": "0.580378 ± 0.042305", - "ArD(1700)1": "11.181365 ± 0.540593", - "AiD(1700)1": "6.588973 ± 0.743188", - "ArD(1700)2": "13.910511 ± 0.658205", - "AiD(1700)2": "8.140582 ± 0.906997" - } - }, - { - "title": "Alternative amplitude model with free Lz(1405) Flatt'e widths, indicated as G1 (pK channel) and G2 (Sigmapi).", - "parameters": { - "gammaK(700)": "1.046003 ± 0.045155", - "ArK(700)1": "0.008133 ± 0.114784", - "AiK(700)1": "1.988397 ± 0.122308", - "ArK(700)2": "-2.240970 ± 0.138751", - "AiK(700)2": "-0.085452 ± 0.130463", - "ArK(892)2": "1.146258 ± 0.079080", - "AiK(892)2": "-0.954003 ± 0.067668", - "ArK(892)3": "-3.072364 ± 0.215610", - "AiK(892)3": "-3.136817 ± 0.213343", - "ArK(892)4": "-0.637844 ± 0.206690", - "AiK(892)4": "-4.026840 ± 0.191988", - "gammaK(1430)": "-0.009898 ± 0.011343", - "ArK(1430)1": "-5.216333 ± 0.567929", - "AiK(1430)1": "9.975627 ± 0.584259", - "ArK(1430)2": "1.462918 ± 0.499231", - "AiK(1430)2": "8.721736 ± 0.432555", - "G1L(1405)": "0.036126 ± 0.005923", - "G2L(1405)": "0.094903 ± 0.000202", - "ArL(1405)1": "-5.874996 ± 0.391042", - "AiL(1405)1": "4.574277 ± 0.413604", - "ArL(1405)2": "12.197520 ± 0.675524", - "AiL(1405)2": "6.501119 ± 0.873095", - "ML(1520)": "1.518521 ± 0.000052", - "GL(1520)": "0.015532 ± 0.000279", - "ArL(1520)1": "0.281301 ± 0.018746", - "AiL(1520)1": "0.013697 ± 0.026710", - "ArL(1520)2": "-0.147613 ± 0.076595", - "AiL(1520)2": "1.442291 ± 0.074050", - "ArL(1600)1": "4.157093 ± 0.270841", - "AiL(1600)1": "2.657058 ± 0.305277", - "ArL(1600)2": "-6.901756 ± 0.336119", - "AiL(1600)2": "1.200985 ± 0.393966", - "ArL(1670)1": "-0.336580 ± 0.028390", - "AiL(1670)1": "-0.016768 ± 0.031871", - "ArL(1670)2": "-0.533891 ± 0.055274", - "AiL(1670)2": "0.899021 ± 0.053906", - "ArL(1690)1": "-0.241208 ± 0.027406", - "AiL(1690)1": "-0.095257 ± 0.042068", - "ArL(1690)2": "-2.550386 ± 0.110661", - "AiL(1690)2": "-0.365502 ± 0.138869", - "ML(2000)": "1.981461 ± 0.000983", - "GL(2000)": "0.167141 ± 0.002551", - "ArL(2000)1": "-7.597159 ± 0.496023", - "AiL(2000)1": "-5.992964 ± 0.469847", - "ArL(2000)2": "-3.540111 ± 0.278466", - "AiL(2000)2": "-3.103670 ± 0.244369", - "ArD(1232)1": "-6.453502 ± 0.335951", - "AiD(1232)1": "2.913677 ± 0.349109", - "ArD(1232)2": "-12.390391 ± 0.585280", - "AiD(1232)2": "4.188960 ± 0.662337", - "ArD(1600)1": "10.119430 ± 0.519567", - "AiD(1600)1": "-2.250105 ± 0.576355", - "ArD(1600)2": "6.880920 ± 0.436212", - "AiD(1600)2": "-0.268431 ± 0.431312", - "ArD(1700)1": "9.153693 ± 0.516650", - "AiD(1700)1": "1.094454 ± 0.519789", - "ArD(1700)2": "11.665897 ± 0.613543", - "AiD(1700)2": "1.484256 ± 0.646875" - } - }, - { - "title": "Alternative amplitude model with Lz(1800) contribution added with mass and width from Ref.~cite{PDG2020}.", - "parameters": { - "gammaK(700)": "0.820824 ± 0.061113", - "ArK(700)1": "0.479870 ± 0.143496", - "AiK(700)1": "2.669157 ± 0.135086", - "ArK(700)2": "-2.407747 ± 0.139734", - "AiK(700)2": "0.249972 ± 0.126638", - "ArK(892)2": "1.180456 ± 0.078060", - "AiK(892)2": "-1.129548 ± 0.048703", - "ArK(892)3": "-3.113975 ± 0.094314", - "AiK(892)3": "-3.273000 ± 0.190359", - "ArK(892)4": "-0.591144 ± 0.170935", - "AiK(892)4": "-4.143304 ± 0.101200", - "gammaK(1430)": "-0.069727 ± 0.011389", - "ArK(1430)1": "-5.153340 ± 0.665962", - "AiK(1430)1": "12.169831 ± 0.274137", - "ArK(1430)2": "2.375445 ± 0.489785", - "AiK(1430)2": "10.360149 ± 0.341598", - "ArL(1405)1": "-3.718964 ± 0.229158", - "AiL(1405)1": "3.509241 ± 0.252699", - "ArL(1405)2": "8.312918 ± 0.209008", - "AiL(1405)2": "1.057133 ± 0.550655", - "ML(1520)": "1.518230 ± 0.000142", - "GL(1520)": "0.014972 ± 0.000422", - "ArL(1520)1": "0.269194 ± 0.008633", - "AiL(1520)1": "-0.027929 ± 0.024573", - "ArL(1520)2": "0.003638 ± 0.068741", - "AiL(1520)2": "1.456617 ± 0.040032", - "ArL(1600)1": "4.392282 ± 0.069629", - "AiL(1600)1": "2.623712 ± 0.281504", - "ArL(1600)2": "-6.779570 ± 0.208083", - "AiL(1600)2": "1.601388 ± 0.293209", - "ArL(1670)1": "-0.229983 ± 0.029811", - "AiL(1670)1": "0.079729 ± 0.024070", - "ArL(1670)2": "-0.510516 ± 0.051790", - "AiL(1670)2": "0.867892 ± 0.022265", - "ArL(1690)1": "-0.157931 ± 0.057406", - "AiL(1690)1": "-0.171170 ± 0.035648", - "ArL(1690)2": "-2.643447 ± 0.060018", - "AiL(1690)2": "-0.438738 ± 0.131131", - "ArL(1800)1": "-2.896177 ± 0.507260", - "AiL(1800)1": "-4.187938 ± 0.474559", - "ArL(1800)2": "-5.771801 ± 0.380095", - "AiL(1800)2": "2.443076 ± 0.439612", - "ML(2000)": "1.967001 ± 0.001551", - "GL(2000)": "0.172887 ± 0.003175", - "ArL(2000)1": "-10.400572 ± 0.257214", - "AiL(2000)1": "-4.340623 ± 0.625761", - "ArL(2000)2": "-4.045572 ± 0.215202", - "AiL(2000)2": "-0.810151 ± 0.270126", - "ArD(1232)1": "-6.673128 ± 0.251509", - "AiD(1232)1": "2.914234 ± 0.261509", - "ArD(1232)2": "-12.821318 ± 0.397412", - "AiD(1232)2": "4.739651 ± 0.455128", - "ArD(1600)1": "9.039262 ± 0.390506", - "AiD(1600)1": "-2.404412 ± 0.400807", - "ArD(1600)2": "6.015778 ± 0.268655", - "AiD(1600)2": "0.059000 ± 0.365925", - "ArD(1700)1": "9.902492 ± 0.266514", - "AiD(1700)1": "1.343926 ± 0.460351", - "ArD(1700)2": "12.627807 ± 0.266730", - "AiD(1700)2": "0.711202 ± 0.639078" - } - }, - { - "title": "Alternative amplitude model with Lz(1810) contribution added with mass and width from Ref.~cite{PDG2020}.", - "parameters": { - "gammaK(700)": "0.857489 ± 0.032897", - "ArK(700)1": "-0.572430 ± 0.197184", - "AiK(700)1": "3.044079 ± 0.176577", - "ArK(700)2": "-2.602233 ± 0.158901", - "AiK(700)2": "-0.081926 ± 0.166331", - "ArK(892)2": "1.290163 ± 0.093389", - "AiK(892)2": "-1.030455 ± 0.085781", - "ArK(892)3": "-2.579611 ± 0.274888", - "AiK(892)3": "-4.177200 ± 0.265670", - "ArK(892)4": "0.049088 ± 0.251030", - "AiK(892)4": "-4.431232 ± 0.233394", - "gammaK(1430)": "-0.031674 ± 0.010323", - "ArK(1430)1": "-9.784174 ± 0.807011", - "AiK(1430)1": "10.939005 ± 0.840139", - "ArK(1430)2": "2.646623 ± 0.686782", - "AiK(1430)2": "9.852476 ± 0.572181", - "ArL(1405)1": "-4.002134 ± 0.370269", - "AiL(1405)1": "4.238902 ± 0.386727", - "ArL(1405)2": "10.358069 ± 0.574145", - "AiL(1405)2": "3.506165 ± 0.671668", - "ML(1520)": "1.518547 ± 0.000162", - "GL(1520)": "0.014146 ± 0.000425", - "ArL(1520)1": "0.275812 ± 0.021723", - "AiL(1520)1": "0.009175 ± 0.031735", - "ArL(1520)2": "-0.362697 ± 0.089972", - "AiL(1520)2": "1.475039 ± 0.086305", - "ArL(1600)1": "2.580068 ± 0.334961", - "AiL(1600)1": "2.837320 ± 0.357071", - "ArL(1600)2": "-9.079671 ± 0.513260", - "AiL(1600)2": "0.423339 ± 0.540299", - "ArL(1670)1": "-0.301217 ± 0.029938", - "AiL(1670)1": "-0.187261 ± 0.026203", - "ArL(1670)2": "-0.728133 ± 0.068346", - "AiL(1670)2": "0.990152 ± 0.069921", - "ArL(1690)1": "-0.203612 ± 0.063126", - "AiL(1690)1": "-0.408917 ± 0.057318", - "ArL(1690)2": "-2.545942 ± 0.133344", - "AiL(1690)2": "-0.375079 ± 0.153121", - "ArL(1810)1": "-0.865366 ± 0.368650", - "AiL(1810)1": "4.993321 ± 0.804440", - "ArL(1810)2": "1.179995 ± 0.417286", - "AiL(1810)2": "4.413438 ± 0.671013", - "ML(2000)": "1.987175 ± 0.001062", - "GL(2000)": "0.195047 ± 0.002990", - "ArL(2000)1": "-8.611831 ± 0.744395", - "AiL(2000)1": "-9.236148 ± 0.685392", - "ArL(2000)2": "-4.787412 ± 0.444759", - "AiL(2000)2": "-5.304151 ± 0.410633", - "ArD(1232)1": "-7.201427 ± 0.400492", - "AiD(1232)1": "2.135874 ± 0.431609", - "ArD(1232)2": "-14.198953 ± 0.744335", - "AiD(1232)2": "3.591562 ± 0.831119", - "ArD(1600)1": "11.858852 ± 0.630511", - "AiD(1600)1": "-1.695016 ± 0.718071", - "ArD(1600)2": "7.296466 ± 0.566022", - "AiD(1600)2": "-0.821533 ± 0.463677", - "ArD(1700)1": "11.715153 ± 0.677549", - "AiD(1700)1": "2.313153 ± 0.688942", - "ArD(1700)2": "15.153234 ± 0.889049", - "AiD(1700)2": "3.476165 ± 0.888907" - } - }, - { - "title": "Alternative amplitude model with Deltares(1620)^{++} contribution added with free mass and width.", - "parameters": { - "gammaK(700)": "0.594082 ± 0.036813", - "ArK(700)1": "-0.508291 ± 0.255719", - "AiK(700)1": "3.557874 ± 0.234730", - "ArK(700)2": "-4.728087 ± 0.330109", - "AiK(700)2": "-1.300166 ± 0.339730", - "ArK(892)2": "1.509464 ± 0.112060", - "AiK(892)2": "-0.869546 ± 0.111472", - "ArK(892)3": "-2.660499 ± 0.371969", - "AiK(892)3": "-5.012650 ± 0.362007", - "ArK(892)4": "0.752416 ± 0.348229", - "AiK(892)4": "-5.048965 ± 0.314350", - "gammaK(1430)": "0.021594 ± 0.011807", - "ArK(1430)1": "-9.412194 ± 0.900786", - "AiK(1430)1": "10.581979 ± 0.967109", - "ArK(1430)2": "0.943281 ± 0.596987", - "AiK(1430)2": "8.773476 ± 0.571852", - "ArL(1405)1": "-3.911511 ± 0.333627", - "AiL(1405)1": "3.225850 ± 0.367578", - "ArL(1405)2": "10.898158 ± 0.786576", - "AiL(1405)2": "5.380447 ± 0.870842", - "ML(1520)": "1.519114 ± 0.000184", - "GL(1520)": "0.015990 ± 0.000488", - "ArL(1520)1": "0.345083 ± 0.021906", - "AiL(1520)1": "0.043400 ± 0.029742", - "ArL(1520)2": "-0.845828 ± 0.128042", - "AiL(1520)2": "1.646280 ± 0.124651", - "ArL(1600)1": "5.451808 ± 0.457087", - "AiL(1600)1": "4.103115 ± 0.504741", - "ArL(1600)2": "-5.406690 ± 0.390713", - "AiL(1600)2": "-0.015048 ± 0.387662", - "ArL(1670)1": "-0.345424 ± 0.029988", - "AiL(1670)1": "-0.125875 ± 0.039196", - "ArL(1670)2": "-0.743300 ± 0.090313", - "AiL(1670)2": "1.137941 ± 0.091154", - "ArL(1690)1": "-0.200663 ± 0.058090", - "AiL(1690)1": "-0.341098 ± 0.046833", - "ArL(1690)2": "-2.685756 ± 0.171732", - "AiL(1690)2": "-0.902816 ± 0.195988", - "ML(2000)": "1.985654 ± 0.001071", - "GL(2000)": "0.175286 ± 0.002955", - "ArL(2000)1": "-6.796212 ± 0.843828", - "AiL(2000)1": "-10.099423 ± 0.754626", - "ArL(2000)2": "-4.628941 ± 0.496023", - "AiL(2000)2": "-5.442093 ± 0.464947", - "ArD(1232)1": "-8.643292 ± 0.547830", - "AiD(1232)1": "1.905427 ± 0.578079", - "ArD(1232)2": "-16.316906 ± 1.004805", - "AiD(1232)2": "2.335320 ± 1.059623", - "ArD(1600)1": "14.631039 ± 0.934341", - "AiD(1600)1": "-2.695902 ± 1.036508", - "ArD(1600)2": "10.375705 ± 0.800934", - "AiD(1600)2": "1.121209 ± 0.805173", - "MD(1620)": "1.55738 ± 0.000728", - "GD(1620)": "0.181832 ± 0.001744", - "ArD(1620)1": "0.348943 ± 0.231875", - "AiD(1620)1": "3.210361 ± 0.238051", - "ArD(1620)2": "0.414536 ± 0.095090", - "AiD(1620)2": "-0.460853 ± 0.099753", - "ArD(1700)1": "13.761142 ± 0.949363", - "AiD(1700)1": "2.271050 ± 0.961864", - "ArD(1700)2": "17.298070 ± 1.182873", - "AiD(1700)2": "4.165149 ± 1.264982" - } - }, - { - "title": "Alternative amplitude model in which a Relativistic Breit-Wigner is used for the K^*(700) contribution.", - "parameters": { - "ArK(700)1": "0.744669 ± 0.204785", - "AiK(700)1": "3.738385 ± 0.197228", - "ArK(700)2": "-4.473014 ± 0.236293", - "AiK(700)2": "0.062890 ± 0.243306", - "ArK(892)2": "1.237381 ± 0.073566", - "AiK(892)2": "-0.951157 ± 0.070328", - "ArK(892)3": "-2.666654 ± 0.207025", - "AiK(892)3": "-3.347478 ± 0.198699", - "ArK(892)4": "-0.408230 ± 0.195261", - "AiK(892)4": "-3.962939 ± 0.179727", - "gammaK(1430)": "0.004153 ± 0.011079", - "ArK(1430)1": "-6.453339 ± 0.561823", - "AiK(1430)1": "9.691872 ± 0.590122", - "ArK(1430)2": "-0.525731 ± 0.481791", - "AiK(1430)2": "9.490585 ± 0.436026", - "ArL(1405)1": "-4.858058 ± 0.250360", - "AiL(1405)1": "2.514306 ± 0.279303", - "ArL(1405)2": "8.705111 ± 0.454020", - "AiL(1405)2": "4.247092 ± 0.522711", - "ML(1520)": "1.518283 ± 0.000165", - "GL(1520)": "0.014670 ± 0.000439", - "ArL(1520)1": "0.275313 ± 0.014173", - "AiL(1520)1": "0.028308 ± 0.026051", - "ArL(1520)2": "-0.262939 ± 0.072402", - "AiL(1520)2": "1.345020 ± 0.070998", - "ArL(1600)1": "4.629762 ± 0.279056", - "AiL(1600)1": "3.123136 ± 0.322211", - "ArL(1600)2": "-5.922504 ± 0.278060", - "AiL(1600)2": "-0.050362 ± 0.315279", - "ArL(1670)1": "-0.331331 ± 0.022512", - "AiL(1670)1": "-0.217612 ± 0.021152", - "ArL(1670)2": "-0.617724 ± 0.056150", - "AiL(1670)2": "0.911542 ± 0.054531", - "ArL(1690)1": "-0.379944 ± 0.036943", - "AiL(1690)1": "-0.039842 ± 0.038749", - "ArL(1690)2": "-2.423437 ± 0.107110", - "AiL(1690)2": "-0.621704 ± 0.129221", - "ML(2000)": "1.992322 ± 0.001042", - "GL(2000)": "0.183796 ± 0.002503", - "ArL(2000)1": "-7.138184 ± 0.541724", - "AiL(2000)1": "-7.743513 ± 0.490606", - "ArL(2000)2": "-4.218316 ± 0.333047", - "AiL(2000)2": "-4.439730 ± 0.298101", - "ArD(1232)1": "-6.548804 ± 0.324398", - "AiD(1232)1": "2.849460 ± 0.340050", - "ArD(1232)2": "-12.388771 ± 0.555301", - "AiD(1232)2": "3.973618 ± 0.634680", - "ArD(1600)1": "10.926697 ± 0.518948", - "AiD(1600)1": "-2.157619 ± 0.589066", - "ArD(1600)2": "6.388424 ± 0.422591", - "AiD(1600)2": "-0.917458 ± 0.395387", - "ArD(1700)1": "10.146557 ± 0.536077", - "AiD(1700)1": "2.905844 ± 0.541731", - "ArD(1700)2": "11.987531 ± 0.604477", - "AiD(1700)2": "2.058147 ± 0.653879" - } - }, - { - "title": "Alternative amplitude model with K^*(700) with free mass and width.", - "parameters": { - "MK(700)": "0.874000 ± 0.004444", - "GK(700)": "0.398000 ± 0.003845", - "gammaK(700)": "1.293655 ± 0.065049", - "ArK(700)1": "-0.117095 ± 0.177157", - "AiK(700)1": "2.704896 ± 0.059553", - "ArK(700)2": "-3.035274 ± 0.115554", - "AiK(700)2": "0.085415 ± 0.129952", - "ArK(892)2": "1.221242 ± 0.041782", - "AiK(892)2": "-1.047306 ± 0.038072", - "ArK(892)3": "-3.393584 ± 0.075103", - "AiK(892)3": "-3.286426 ± 0.071765", - "ArK(892)4": "-0.885464 ± 0.057722", - "AiK(892)4": "-4.262787 ± 0.066235", - "gammaK(1430)": "0.020145 ± 0.007399", - "ArK(1430)1": "-6.628059 ± 0.228040", - "AiK(1430)1": "11.289175 ± 0.177019", - "ArK(1430)2": "0.267170 ± 0.209239", - "AiK(1430)2": "9.038425 ± 0.142729", - "ArL(1405)1": "-4.509067 ± 0.154996", - "AiL(1405)1": "3.264372 ± 0.177433", - "ArL(1405)2": "11.106135 ± 0.204230", - "AiL(1405)2": "2.179375 ± 0.281816", - "ML(1520)": "1.518427 ± 0.000057", - "GL(1520)": "0.015407 ± 0.000278", - "ArL(1520)1": "0.303906 ± 0.011574", - "AiL(1520)1": "0.027372 ± 0.012679", - "ArL(1520)2": "-0.087241 ± 0.035113", - "AiL(1520)2": "1.589856 ± 0.036747", - "ArL(1600)1": "5.099857 ± 0.118261", - "AiL(1600)1": "3.112247 ± 0.143722", - "ArL(1600)2": "-7.299315 ± 0.153331", - "AiL(1600)2": "1.248635 ± 0.165507", - "ArL(1670)1": "-0.345269 ± 0.018726", - "AiL(1670)1": "-0.127501 ± 0.021951", - "ArL(1670)2": "-0.540961 ± 0.029420", - "AiL(1670)2": "1.074781 ± 0.016984", - "ArL(1690)1": "-0.363644 ± 0.036703", - "AiL(1690)1": "-0.120825 ± 0.025074", - "ArL(1690)2": "-2.802881 ± 0.073307", - "AiL(1690)2": "-0.258627 ± 0.065393", - "ML(2000)": "1.988258 ± 0.000773", - "GL(2000)": "0.177437 ± 0.002181", - "ArL(2000)1": "-8.407101 ± 0.203855", - "AiL(2000)1": "-7.595600 ± 0.182119", - "ArL(2000)2": "-4.442971 ± 0.170001", - "AiL(2000)2": "-3.628276 ± 0.153057", - "ArD(1232)1": "-6.884150 ± 0.140261", - "AiD(1232)1": "3.334478 ± 0.160836", - "ArD(1232)2": "-13.240869 ± 0.229208", - "AiD(1232)2": "5.135798 ± 0.202758", - "ArD(1600)1": "11.573845 ± 0.258889", - "AiD(1600)1": "-3.609929 ± 0.209670", - "ArD(1600)2": "7.337382 ± 0.261163", - "AiD(1600)2": "-1.292572 ± 0.205303", - "ArD(1700)1": "10.938816 ± 0.188411", - "AiD(1700)1": "0.829034 ± 0.246461", - "ArD(1700)2": "13.471328 ± 0.269478", - "AiD(1700)2": "1.841069 ± 0.276973" - } - }, - { - "title": "Alternative amplitude model with K^*(1410) contribution added with mass and width from Ref.~cite{PDG2020}.", - "parameters": { - "gammaK(700)": "0.610031 ± 0.056464", - "ArK(700)1": "0.998014 ± 0.157706", - "AiK(700)1": "2.643169 ± 0.153535", - "ArK(700)2": "-3.741166 ± 0.195130", - "AiK(700)2": "0.101409 ± 0.182576", - "ArK(892)2": "1.029002 ± 0.090867", - "AiK(892)2": "-1.250462 ± 0.046933", - "ArK(892)3": "-3.514216 ± 0.144181", - "AiK(892)3": "-3.039751 ± 0.246634", - "ArK(892)4": "-0.888357 ± 0.187292", - "AiK(892)4": "-4.162778 ± 0.180947", - "ArK(1410)1": "-3.369750 ± 0.633205", - "AiK(1410)1": "-5.812831 ± 0.514088", - "ArK(1410)2": "0.042694 ± 0.616992", - "AiK(1410)2": "-4.840691 ± 0.585265", - "ArK(1410)3": "1.047327 ± 0.726056", - "AiK(1410)3": "10.518265 ± 0.647184", - "ArK(1410)4": "1.162940 ± 0.655989", - "AiK(1410)4": "5.379877 ± 0.493524", - "gammaK(1430)": "0.060253 ± 0.008710", - "ArK(1430)1": "-4.256320 ± 0.657069", - "AiK(1430)1": "11.004596 ± 0.346773", - "ArK(1430)2": "-1.690209 ± 0.354505", - "AiK(1430)2": "7.147499 ± 0.235006", - "ArL(1405)1": "-2.791128 ± 0.309384", - "AiL(1405)1": "0.493229 ± 0.287053", - "ArL(1405)2": "9.262813 ± 0.370295", - "AiL(1405)2": "4.356569 ± 0.674237", - "ML(1520)": "1.518607 ± 0.000142", - "GL(1520)": "0.015031 ± 0.000384", - "ArL(1520)1": "0.417944 ± 0.028169", - "AiL(1520)1": "-0.018029 ± 0.032573", - "ArL(1520)2": "-0.105559 ± 0.078261", - "AiL(1520)2": "1.418640 ± 0.065934", - "ArL(1600)1": "4.362129 ± 0.189634", - "AiL(1600)1": "0.788888 ± 0.312739", - "ArL(1600)2": "-5.849669 ± 0.264203", - "AiL(1600)2": "-0.108307 ± 0.307052", - "ArL(1670)1": "-0.329187 ± 0.017050", - "AiL(1670)1": "-0.074728 ± 0.022863", - "ArL(1670)2": "-0.468199 ± 0.065919", - "AiL(1670)2": "1.068614 ± 0.032767", - "ArL(1690)1": "-0.313354 ± 0.061185", - "AiL(1690)1": "0.024271 ± 0.042523", - "ArL(1690)2": "-2.858095 ± 0.111173", - "AiL(1690)2": "-0.189057 ± 0.149630", - "ML(2000)": "1.986826 ± 0.000838", - "GL(2000)": "0.165625 ± 0.002330", - "ArL(2000)1": "-7.883216 ± 0.319571", - "AiL(2000)1": "-5.719668 ± 0.524428", - "ArL(2000)2": "-4.506034 ± 0.210123", - "AiL(2000)2": "-3.979352 ± 0.319542", - "ArD(1232)1": "-6.218167 ± 0.381939", - "AiD(1232)1": "4.474333 ± 0.280400", - "ArD(1232)2": "-12.917498 ± 0.610768", - "AiD(1232)2": "5.437437 ± 0.534321", - "ArD(1600)1": "10.165113 ± 0.564503", - "AiD(1600)1": "-3.600791 ± 0.490655", - "ArD(1600)2": "6.766681 ± 0.440858", - "AiD(1600)2": "-1.857974 ± 0.412110", - "ArD(1700)1": "11.547894 ± 0.510295", - "AiD(1700)1": "-0.725114 ± 0.555047", - "ArD(1700)2": "14.379176 ± 0.607255", - "AiD(1700)2": "-0.231568 ± 0.722400" - } - }, - { - "title": "Alternative amplitude model in which a Relativistic Breit-Wigner is used for the K^*(1430) contribution.", - "parameters": { - "gammaK(700)": "0.922900 ± 0.034353", - "ArK(700)1": "-0.088452 ± 0.076269", - "AiK(700)1": "2.500931 ± 0.056046", - "ArK(700)2": "-2.807752 ± 0.095853", - "AiK(700)2": "0.080287 ± 0.066974", - "ArK(892)2": "1.183000 ± 0.035495", - "AiK(892)2": "-0.998802 ± 0.025785", - "ArK(892)3": "-3.064230 ± 0.052505", - "AiK(892)3": "-3.325429 ± 0.092621", - "ArK(892)4": "-0.649206 ± 0.079108", - "AiK(892)4": "-4.162340 ± 0.058969", - "ArK(1430)1": "-5.924213 ± 0.298956", - "AiK(1430)1": "12.061420 ± 0.176774", - "ArK(1430)2": "1.113085 ± 0.151442", - "AiK(1430)2": "9.448335 ± 0.156062", - "ArL(1405)1": "-4.646145 ± 0.119962", - "AiL(1405)1": "3.163520 ± 0.134807", - "ArL(1405)2": "10.157843 ± 0.114911", - "AiL(1405)2": "3.125226 ± 0.261682", - "ML(1520)": "1.518487 ± 0.000104", - "GL(1520)": "0.015100 ± 0.000359", - "ArL(1520)1": "0.287645 ± 0.015118", - "AiL(1520)1": "0.050185 ± 0.011685", - "ArL(1520)2": "-0.183290 ± 0.026418", - "AiL(1520)2": "1.485069 ± 0.017384", - "ArL(1600)1": "4.819150 ± 0.061052", - "AiL(1600)1": "3.088826 ± 0.157117", - "ArL(1600)2": "-6.811956 ± 0.119153", - "AiL(1600)2": "0.728666 ± 0.176591", - "ArL(1670)1": "-0.342254 ± 0.006441", - "AiL(1670)1": "-0.149415 ± 0.009928", - "ArL(1670)2": "-0.587154 ± 0.034787", - "AiL(1670)2": "0.998388 ± 0.009583", - "ArL(1690)1": "-0.409085 ± 0.014973", - "AiL(1690)1": "-0.084963 ± 0.024157", - "ArL(1690)2": "-2.715615 ± 0.036386", - "AiL(1690)2": "-0.413649 ± 0.077262", - "ML(2000)": "1.988876 ± 0.000632", - "GL(2000)": "0.183567 ± 0.002289", - "ArL(2000)1": "-8.097512 ± 0.172579", - "AiL(2000)1": "-7.959637 ± 0.250642", - "ArL(2000)2": "-4.396961 ± 0.087357", - "AiL(2000)2": "-4.040855 ± 0.167722", - "ArD(1232)1": "-6.802897 ± 0.137427", - "AiD(1232)1": "2.979103 ± 0.156005", - "ArD(1232)2": "-12.973008 ± 0.203687", - "AiD(1232)2": "4.438833 ± 0.222923", - "ArD(1600)1": "11.405535 ± 0.233336", - "AiD(1600)1": "-3.002764 ± 0.257261", - "ArD(1600)2": "6.867872 ± 0.225361", - "AiD(1600)2": "-0.936850 ± 0.189987", - "ArD(1700)1": "10.226676 ± 0.192975", - "AiD(1700)1": "1.616693 ± 0.275900", - "ArD(1700)2": "12.952162 ± 0.178677", - "AiD(1700)2": "2.237971 ± 0.381360" - } - }, - { - "title": "Alternative amplitude model with K^*(1430) with free width.", - "parameters": { - "gammaK(700)": "0.934183 ± 0.035840", - "ArK(700)1": "-0.025733 ± 0.068373", - "AiK(700)1": "2.555225 ± 0.056446", - "ArK(700)2": "-2.749931 ± 0.079619", - "AiK(700)2": "0.068425 ± 0.080909", - "ArK(892)2": "1.196976 ± 0.035795", - "AiK(892)2": "-1.014281 ± 0.027525", - "ArK(892)3": "-3.115952 ± 0.045253", - "AiK(892)3": "-3.342337 ± 0.052285", - "ArK(892)4": "-0.682157 ± 0.049104", - "AiK(892)4": "-4.190488 ± 0.031710", - "GK(1430)": "0.150117 ± 0.012478", - "gammaK(1430)": "0.353942 ± 0.012437", - "ArK(1430)1": "-6.369001 ± 0.226267", - "AiK(1430)1": "11.341841 ± 0.219290", - "ArK(1430)2": "0.675587 ± 0.249770", - "AiK(1430)2": "9.152291 ± 0.153840", - "ArL(1405)1": "-4.641171 ± 0.123808", - "AiL(1405)1": "3.199043 ± 0.164343", - "ArL(1405)2": "10.366257 ± 0.153619", - "AiL(1405)2": "3.040880 ± 0.252193", - "ML(1520)": "1.518472 ± 0.000096", - "GL(1520)": "0.015161 ± 0.000142", - "ArL(1520)1": "0.291519 ± 0.005953", - "AiL(1520)1": "0.048765 ± 0.007794", - "ArL(1520)2": "-0.176055 ± 0.029575", - "AiL(1520)2": "1.503093 ± 0.013972", - "ArL(1600)1": "4.852188 ± 0.069968", - "AiL(1600)1": "3.132230 ± 0.135834", - "ArL(1600)2": "-6.938257 ± 0.121886", - "AiL(1600)2": "0.770042 ± 0.130365", - "ArL(1670)1": "-0.343306 ± 0.006023", - "AiL(1670)1": "-0.147703 ± 0.009329", - "ArL(1670)2": "-0.585196 ± 0.024116", - "AiL(1670)2": "1.009963 ± 0.006880", - "ArL(1690)1": "-0.396095 ± 0.025097", - "AiL(1690)1": "-0.100006 ± 0.015263", - "ArL(1690)2": "-2.742605 ± 0.040421", - "AiL(1690)2": "-0.388296 ± 0.059445", - "ML(2000)": "1.988368 ± 0.000911", - "GL(2000)": "0.181734 ± 0.001988", - "ArL(2000)1": "-8.127146 ± 0.171276", - "AiL(2000)1": "-7.849932 ± 0.133223", - "ArL(2000)2": "-4.421548 ± 0.105964", - "AiL(2000)2": "-3.936428 ± 0.140305", - "ArD(1232)1": "-6.848011 ± 0.097194", - "AiD(1232)1": "3.013414 ± 0.142968", - "ArD(1232)2": "-13.083422 ± 0.115693", - "AiD(1232)2": "4.476747 ± 0.150077", - "ArD(1600)1": "11.488845 ± 0.171805", - "AiD(1600)1": "-3.052145 ± 0.199702", - "ArD(1600)2": "6.858418 ± 0.148709", - "AiD(1600)2": "-0.970904 ± 0.167293", - "ArD(1700)1": "10.351110 ± 0.160519", - "AiD(1700)1": "1.540701 ± 0.253220", - "ArD(1700)2": "12.985398 ± 0.110004", - "AiD(1700)2": "2.228074 ± 0.258859" - } - }, - { - "title": "Alternative amplitude model with an additional overall exponential form factor exp(-alpha q^2) multiplying Bugg lineshapes. The exponential parameter is indicated as ``alpha''.", - "parameters": { - "gammaK(700)": "0.822411 ± 0.057208", - "alphaK(700)": "-0.444257 ± 0.293332", - "ArK(700)1": "0.500932 ± 0.083523", - "AiK(700)1": "2.316935 ± 0.405634", - "ArK(700)2": "-2.019108 ± 0.371593", - "AiK(700)2": "0.057298 ± 0.076454", - "ArK(892)2": "1.160997 ± 0.042539", - "AiK(892)2": "-1.055468 ± 0.044142", - "ArK(892)3": "-3.153039 ± 0.089038", - "AiK(892)3": "-3.266216 ± 0.052409", - "ArK(892)4": "-0.748458 ± 0.083256", - "AiK(892)4": "-4.079399 ± 0.043196", - "gammaK(1430)": "-0.098783 ± 0.023220", - "alphaK(1430)": "0.320379 ± 0.200884", - "ArK(1430)1": "-7.871384 ± 0.349934", - "AiK(1430)1": "12.706526 ± 0.494652", - "ArK(1430)2": "1.519764 ± 0.524396", - "AiK(1430)2": "10.457474 ± 0.377571", - "ArL(1405)1": "-4.154905 ± 0.183111", - "AiL(1405)1": "3.102126 ± 0.212742", - "ArL(1405)2": "10.612403 ± 0.204058", - "AiL(1405)2": "2.444264 ± 0.295423", - "ML(1520)": "1.518409 ± 0.000135", - "GL(1520)": "0.014958 ± 0.000471", - "ArL(1520)1": "0.299140 ± 0.010063", - "AiL(1520)1": "0.016007 ± 0.012966", - "ArL(1520)2": "-0.149552 ± 0.037814", - "AiL(1520)2": "1.454957 ± 0.036239", - "ArL(1600)1": "4.873289 ± 0.098121", - "AiL(1600)1": "2.976170 ± 0.141205", - "ArL(1600)2": "-7.056025 ± 0.151698", - "AiL(1600)2": "0.638883 ± 0.172244", - "ArL(1670)1": "-0.319250 ± 0.008947", - "AiL(1670)1": "-0.141422 ± 0.013713", - "ArL(1670)2": "-0.555152 ± 0.026316", - "AiL(1670)2": "1.016211 ± 0.020910", - "ArL(1690)1": "-0.330284 ± 0.027874", - "AiL(1690)1": "-0.209158 ± 0.026284", - "ArL(1690)2": "-2.620128 ± 0.057680", - "AiL(1690)2": "-0.357478 ± 0.079165", - "ML(2000)": "1.986670 ± 0.000836", - "GL(2000)": "0.169498 ± 0.002847", - "ArL(2000)1": "-7.209116 ± 0.273563", - "AiL(2000)1": "-6.814298 ± 0.187355", - "ArL(2000)2": "-4.031724 ± 0.166622", - "AiL(2000)2": "-3.121371 ± 0.169532", - "ArD(1232)1": "-6.505562 ± 0.097783", - "AiD(1232)1": "3.218948 ± 0.180801", - "ArD(1232)2": "-12.821674 ± 0.115891", - "AiD(1232)2": "4.717166 ± 0.273132", - "ArD(1600)1": "11.505975 ± 0.221918", - "AiD(1600)1": "-2.755565 ± 0.289988", - "ArD(1600)2": "6.519839 ± 0.254287", - "AiD(1600)2": "-0.779944 ± 0.258351", - "ArD(1700)1": "10.729935 ± 0.232369", - "AiD(1700)1": "1.565633 ± 0.296713", - "ArD(1700)2": "13.294697 ± 0.257569", - "AiD(1700)2": "2.113176 ± 0.354202" - } - }, - { - "title": "Alternative amplitude model with free radial parameter d for the Lc resonance, indicated as dLc.", - "parameters": { - "dLc": "4.204442 ± 0.341296", - "gammaK(700)": "0.922543 ± 0.031137", - "ArK(700)1": "0.127948 ± 0.149474", - "AiK(700)1": "2.529633 ± 0.063936", - "ArK(700)2": "-2.727862 ± 0.088694", - "AiK(700)2": "0.129667 ± 0.146615", - "ArK(892)2": "1.170114 ± 0.063246", - "AiK(892)2": "-1.027869 ± 0.057527", - "ArK(892)3": "-3.215552 ± 0.159851", - "AiK(892)3": "-3.225086 ± 0.183685", - "ArK(892)4": "-0.800213 ± 0.214926", - "AiK(892)4": "-4.146763 ± 0.071926", - "gammaK(1430)": "0.020421 ± 0.005911", - "ArK(1430)1": "-6.490224 ± 0.582215", - "AiK(1430)1": "10.622156 ± 0.278960", - "ArK(1430)2": "0.461026 ± 0.446560", - "AiK(1430)2": "8.726626 ± 0.127359", - "ArL(1405)1": "-4.580370 ± 0.204095", - "AiL(1405)1": "3.210059 ± 0.214052", - "ArL(1405)2": "10.541466 ± 0.162820", - "AiL(1405)2": "2.584296 ± 0.633953", - "ML(1520)": "1.518464 ± 0.000141", - "GL(1520)": "0.015259 ± 0.000369", - "ArL(1520)1": "0.292152 ± 0.013805", - "AiL(1520)1": "0.032693 ± 0.023307", - "ArL(1520)2": "-0.130502 ± 0.085630", - "AiL(1520)2": "1.508702 ± 0.021918", - "ArL(1600)1": "4.957221 ± 0.157697", - "AiL(1600)1": "2.989209 ± 0.314697", - "ArL(1600)2": "-6.880108 ± 0.130076", - "AiL(1600)2": "0.952497 ± 0.375774", - "ArL(1670)1": "-0.339795 ± 0.009563", - "AiL(1670)1": "-0.134046 ± 0.024603", - "ArL(1670)2": "-0.550967 ± 0.059929", - "AiL(1670)2": "1.019503 ± 0.030319", - "ArL(1690)1": "-0.390624 ± 0.029626", - "AiL(1690)1": "-0.093379 ± 0.029199", - "ArL(1690)2": "-2.742302 ± 0.047928", - "AiL(1690)2": "-0.273504 ± 0.156364", - "ML(2000)": "1.987921 ± 0.000493", - "GL(2000)": "0.179272 ± 0.001824", - "ArL(2000)1": "-8.201531 ± 0.389849", - "AiL(2000)1": "-7.392044 ± 0.493271", - "ArL(2000)2": "-4.385238 ± 0.205758", - "AiL(2000)2": "-3.708142 ± 0.264829", - "ArD(1232)1": "-6.689146 ± 0.213299", - "AiD(1232)1": "3.212245 ± 0.337147", - "ArD(1232)2": "-12.871200 ± 0.298883", - "AiD(1232)2": "4.772431 ± 0.644439", - "ArD(1600)1": "11.235201 ± 0.346318", - "AiD(1600)1": "-3.418874 ± 0.611233", - "ArD(1600)2": "6.603461 ± 0.229202", - "AiD(1600)2": "-1.305754 ± 0.406314", - "ArD(1700)1": "10.189830 ± 0.202768", - "AiD(1700)1": "1.183965 ± 0.577030", - "ArD(1700)2": "12.726946 ± 0.210809", - "AiD(1700)2": "1.728984 ± 0.718018" - } - }, - { - "title": "Alternative amplitude model obtained using LS couplings.", - "parameters": { - "ArK(700)1": "-0.000167 ± 0.019096", - "AiK(700)1": "-0.684890 ± 0.026946", - "ArK(700)2": "-0.631117 ± 0.024065", - "AiK(700)2": "0.040435 ± 0.023737", - "ArK(892)2": "0.341792 ± 0.007302", - "AiK(892)2": "-0.064047 ± 0.004810", - "ArK(892)3": "-0.755199 ± 0.014376", - "AiK(892)3": "-0.592176 ± 0.014062", - "ArK(892)4": "0.093754 ± 0.007945", - "AiK(892)4": "0.379956 ± 0.005135", - "ArK(1430)1": "-1.352114 ± 0.098594", - "AiK(1430)1": "-3.150814 ± 0.057482", - "ArK(1430)2": "0.598156 ± 0.054311", - "AiK(1430)2": "-0.955655 ± 0.046918", - "ArL(1405)1": "-1.224670 ± 0.034198", - "AiL(1405)1": "-0.039521 ± 0.052576", - "ArL(1405)2": "-1.811842 ± 0.039381", - "AiL(1405)2": "1.625622 ± 0.034881", - "ArL(1520)1": "0.191708 ± 0.004957", - "AiL(1520)1": "0.167003 ± 0.005131", - "ArL(1520)2": "0.115638 ± 0.006304", - "AiL(1520)2": "0.242542 ± 0.004908", - "ArL(1600)1": "-0.134004 ± 0.032490", - "AiL(1600)1": "-0.628117 ± 0.032433", - "ArL(1600)2": "1.712637 ± 0.029718", - "AiL(1600)2": "-1.128953 ± 0.032192", - "ArL(1670)1": "0.009197 ± 0.004825", - "AiL(1670)1": "-0.200899 ± 0.003052", - "ArL(1670)2": "-0.114543 ± 0.004976", - "AiL(1670)2": "-0.167795 ± 0.005083", - "ArL(1690)1": "-0.378966 ± 0.012153", - "AiL(1690)1": "0.331114 ± 0.009513", - "ArL(1690)2": "-0.286413 ± 0.009060", - "AiL(1690)2": "0.247902 ± 0.011125", - "ArL(2000)1": "2.807070 ± 0.049100", - "AiL(2000)1": "0.071483 ± 0.066689", - "ArL(2000)2": "-0.890941 ± 0.023480", - "AiL(2000)2": "-0.087397 ± 0.028816", - "ArD(1232)1": "-1.499936 ± 0.054859", - "AiD(1232)1": "3.161477 ± 0.040932", - "ArD(1232)2": "-0.586497 ± 0.031930", - "AiD(1232)2": "0.838665 ± 0.019560", - "ArD(1600)1": "1.595876 ± 0.050522", - "AiD(1600)1": "-2.460301 ± 0.074787", - "ArD(1600)2": "-0.432377 ± 0.049114", - "AiD(1600)2": "0.688543 ± 0.027446", - "ArD(1700)1": "3.161722 ± 0.068890", - "AiD(1700)1": "-2.292309 ± 0.099002", - "ArD(1700)2": "0.179027 ± 0.031955", - "AiD(1700)2": "-0.298638 ± 0.021052" - } - } - ] + "modelstudies": [ + { + "title": "Default amplitude model.", + "parameters": { + "gammaK(700)": "0.941060 ± 0.042406", + "ArK(700)1": "0.068908 ± 0.122603", + "AiK(700)1": "2.521444 ± 0.084235", + "ArK(700)2": "-2.685630 ± 0.124151", + "AiK(700)2": "0.038490 ± 0.123867", + "ArK(892)2": "1.192614 ± 0.066524", + "AiK(892)2": "-1.025814 ± 0.041453", + "ArK(892)3": "-3.141446 ± 0.092448", + "AiK(892)3": "-3.293410 ± 0.206014", + "ArK(892)4": "-0.727145 ± 0.181956", + "AiK(892)4": "-4.155027 ± 0.119153", + "gammaK(1430)": "0.020981 ± 0.011062", + "ArK(1430)1": "-6.715160 ± 0.602836", + "AiK(1430)1": "10.479411 ± 0.267895", + "ArK(1430)2": "0.219754 ± 0.381936", + "AiK(1430)2": "8.741196 ± 0.250855", + "ArL(1405)1": "-4.572486 ± 0.231833", + "AiL(1405)1": "3.190144 ± 0.169851", + "ArL(1405)2": "10.446080 ± 0.128799", + "AiL(1405)2": "2.787441 ± 0.607833", + "ML(1520)": "1.518467 ± 0.000100", + "GL(1520)": "0.015195 ± 0.000265", + "ArL(1520)1": "0.293998 ± 0.012158", + "AiL(1520)1": "0.044324 ± 0.022276", + "ArL(1520)2": "-0.160687 ± 0.075604", + "AiL(1520)2": "1.498833 ± 0.032468", + "ArL(1600)1": "4.840649 ± 0.080342", + "AiL(1600)1": "3.082786 ± 0.313304", + "ArL(1600)2": "-6.971233 ± 0.180278", + "AiL(1600)2": "0.842435 ± 0.300438", + "ArL(1670)1": "-0.339585 ± 0.013871", + "AiL(1670)1": "-0.144678 ± 0.022591", + "ArL(1670)2": "-0.570978 ± 0.059400", + "AiL(1670)2": "1.011833 ± 0.017816", + "ArL(1690)1": "-0.385772 ± 0.046657", + "AiL(1690)1": "-0.110235 ± 0.045896", + "ArL(1690)2": "-2.730592 ± 0.052811", + "AiL(1690)2": "-0.353613 ± 0.136240", + "ML(2000)": "1.988190 ± 0.000911", + "GL(2000)": "0.179260 ± 0.002766", + "ArL(2000)1": "-8.014857 ± 0.267813", + "AiL(2000)1": "-7.614006 ± 0.529630", + "ArL(2000)2": "-4.336255 ± 0.137963", + "AiL(2000)2": "-3.796192 ± 0.285036", + "ArD(1232)1": "-6.778191 ± 0.268436", + "AiD(1232)1": "3.051805 ± 0.264359", + "ArD(1232)2": "-12.987193 ± 0.433180", + "AiD(1232)2": "4.528336 ± 0.493430", + "ArD(1600)1": "11.401585 ± 0.437580", + "AiD(1600)1": "-3.125511 ± 0.473191", + "ArD(1600)2": "6.729211 ± 0.283501", + "AiD(1600)2": "-1.002383 ± 0.331137", + "ArD(1700)1": "10.378280 ± 0.253080", + "AiD(1700)1": "1.434872 ± 0.485532", + "ArD(1700)2": "12.874102 ± 0.233827", + "AiD(1700)2": "2.105570 ± 0.644916" + } + }, + { + "title": "Alternative amplitude model with K^*(892) with free mass and width.", + "parameters": { + "gammaK(700)": "0.979206 ± 0.029926", + "ArK(700)1": "-0.172866 ± 0.169819", + "AiK(700)1": "2.704617 ± 0.154115", + "ArK(700)2": "-2.867440 ± 0.176016", + "AiK(700)2": "-0.173008 ± 0.166487", + "MK(892)": "0.895262 ± 0.000220", + "GK(892)": "0.047548 ± 0.000464", + "ArK(892)2": "1.256591 ± 0.082629", + "AiK(892)2": "-0.961626 ± 0.073051", + "ArK(892)3": "-3.051419 ± 0.243241", + "AiK(892)3": "-3.550773 ± 0.240794", + "ArK(892)4": "-0.477608 ± 0.234991", + "AiK(892)4": "-4.309917 ± 0.211342", + "gammaK(1430)": "0.013442 ± 0.008768", + "ArK(1430)1": "-7.623008 ± 0.695014", + "AiK(1430)1": "10.659428 ± 0.676680", + "ArK(1430)2": "0.070474 ± 0.517914", + "AiK(1430)2": "9.232267 ± 0.483421", + "ArL(1405)1": "-4.803554 ± 0.291350", + "AiL(1405)1": "3.345284 ± 0.300704", + "ArL(1405)2": "11.081209 ± 0.589328", + "AiL(1405)2": "3.433091 ± 0.703625", + "ML(1520)": "1.518521 ± 0.000073", + "GL(1520)": "0.015321 ± 0.000307", + "ArL(1520)1": "0.295599 ± 0.024293", + "AiL(1520)1": "0.066946 ± 0.029078", + "ArL(1520)2": "-0.303600 ± 0.094485", + "AiL(1520)2": "1.593037 ± 0.087940", + "ArL(1600)1": "4.853708 ± 0.335374", + "AiL(1600)1": "3.589134 ± 0.384890", + "ArL(1600)2": "-7.454595 ± 0.384407", + "AiL(1600)2": "0.364087 ± 0.436442", + "ArL(1670)1": "-0.346038 ± 0.017070", + "AiL(1670)1": "-0.155222 ± 0.022148", + "ArL(1670)2": "-0.676886 ± 0.068655", + "AiL(1670)2": "1.024249 ± 0.064593", + "ArL(1690)1": "-0.406504 ± 0.049906", + "AiL(1690)1": "-0.166295 ± 0.047519", + "ArL(1690)2": "-2.877193 ± 0.143120", + "AiL(1690)2": "-0.505867 ± 0.164248", + "ML(2000)": "1.987204 ± 0.000962", + "GL(2000)": "0.180647 ± 0.001905", + "ArL(2000)1": "-8.153499 ± 0.623337", + "AiL(2000)1": "-8.466388 ± 0.605063", + "ArL(2000)2": "-4.440215 ± 0.356779", + "AiL(2000)2": "-4.345002 ± 0.348020", + "ArD(1232)1": "-7.346946 ± 0.395237", + "AiD(1232)1": "2.523705 ± 0.421066", + "ArD(1232)2": "-14.024923 ± 0.712383", + "AiD(1232)2": "3.944177 ± 0.777973", + "ArD(1600)1": "12.653213 ± 0.680913", + "AiD(1600)1": "-2.595411 ± 0.743945", + "ArD(1600)2": "7.617624 ± 0.534547", + "AiD(1600)2": "-0.347803 ± 0.495848", + "ArD(1700)1": "10.598530 ± 0.618298", + "AiD(1700)1": "2.137527 ± 0.617740", + "ArD(1700)2": "13.575967 ± 0.792409", + "AiD(1700)2": "3.625141 ± 0.844290" + } + }, + { + "title": "Alternative amplitude model with Lz(1670) with free mass and width.", + "parameters": { + "gammaK(700)": "0.931224 ± 0.027146", + "ArK(700)1": "0.104999 ± 0.132084", + "AiK(700)1": "2.550341 ± 0.082331", + "ArK(700)2": "-2.680007 ± 0.091156", + "AiK(700)2": "0.066910 ± 0.142798", + "ArK(892)2": "1.181558 ± 0.042422", + "AiK(892)2": "-1.046885 ± 0.068658", + "ArK(892)3": "-3.159878 ± 0.227798", + "AiK(892)3": "-3.296591 ± 0.063905", + "ArK(892)4": "-0.735495 ± 0.192316", + "AiK(892)4": "-4.167493 ± 0.084823", + "gammaK(1430)": "0.015803 ± 0.007288", + "ArK(1430)1": "-6.617803 ± 0.341431", + "AiK(1430)1": "10.649207 ± 0.582432", + "ArK(1430)2": "0.398512 ± 0.462661", + "AiK(1430)2": "8.831185 ± 0.227581", + "ArL(1405)1": "-4.527740 ± 0.145118", + "AiL(1405)1": "3.274871 ± 0.281274", + "ArL(1405)2": "10.406658 ± 0.395947", + "AiL(1405)2": "2.617288 ± 0.474647", + "ML(1520)": "1.518422 ± 0.000130", + "GL(1520)": "0.015145 ± 0.000343", + "ArL(1520)1": "0.292227 ± 0.007909", + "AiL(1520)1": "0.039435 ± 0.018343", + "ArL(1520)2": "-0.131156 ± 0.074057", + "AiL(1520)2": "1.506901 ± 0.051886", + "ArL(1600)1": "4.853613 ± 0.271693", + "AiL(1600)1": "3.038570 ± 0.184491", + "ArL(1600)2": "-6.904670 ± 0.187138", + "AiL(1600)2": "0.945895 ± 0.372292", + "ML(1670)": "1.671225 ± 0.000501", + "GL(1670)": "0.033118 ± 0.001248", + "ArL(1670)1": "-0.371124 ± 0.031753", + "AiL(1670)1": "-0.179791 ± 0.029699", + "ArL(1670)2": "-0.674482 ± 0.054658", + "AiL(1670)2": "1.063042 ± 0.071367", + "ArL(1690)1": "-0.353108 ± 0.033933", + "AiL(1690)1": "-0.111803 ± 0.026556", + "ArL(1690)2": "-2.741542 ± 0.088948", + "AiL(1690)2": "-0.365152 ± 0.123143", + "ML(2000)": "1.987384 ± 0.000835", + "GL(2000)": "0.179791 ± 0.001741", + "ArL(2000)1": "-8.215415 ± 0.572748", + "AiL(2000)1": "-7.556390 ± 0.233964", + "ArL(2000)2": "-4.486753 ± 0.312147", + "AiL(2000)2": "-3.687655 ± 0.161887", + "ArD(1232)1": "-6.789666 ± 0.095830", + "AiD(1232)1": "3.098280 ± 0.367309", + "ArD(1232)2": "-13.008854 ± 0.175973", + "AiD(1232)2": "4.641417 ± 0.694158", + "ArD(1600)1": "11.254499 ± 0.237932", + "AiD(1600)1": "-3.181172 ± 0.639540", + "ArD(1600)2": "6.759316 ± 0.240687", + "AiD(1600)2": "-0.911182 ± 0.377845", + "ArD(1700)1": "10.436469 ± 0.360223", + "AiD(1700)1": "1.403313 ± 0.537243", + "ArD(1700)2": "13.022957 ± 0.474631", + "AiD(1700)2": "1.981198 ± 0.569500" + } + }, + { + "title": "Alternative amplitude model with Lz(1690) with free mass and width.", + "parameters": { + "gammaK(700)": "0.941693 ± 0.027900", + "ArK(700)1": "0.235301 ± 0.151182", + "AiK(700)1": "2.617633 ± 0.123157", + "ArK(700)2": "-2.637704 ± 0.137561", + "AiK(700)2": "0.232068 ± 0.158025", + "ArK(892)2": "1.188494 ± 0.074087", + "AiK(892)2": "-1.064647 ± 0.074399", + "ArK(892)3": "-3.225409 ± 0.235333", + "AiK(892)3": "-3.243287 ± 0.209467", + "ArK(892)4": "-0.823814 ± 0.216549", + "AiK(892)4": "-4.143030 ± 0.187736", + "gammaK(1430)": "0.011083 ± 0.006892", + "ArK(1430)1": "-6.318610 ± 0.589444", + "AiK(1430)1": "10.634797 ± 0.611342", + "ArK(1430)2": "0.720164 ± 0.495065", + "AiK(1430)2": "8.651308 ± 0.379169", + "ArL(1405)1": "-4.438453 ± 0.238323", + "AiL(1405)1": "3.400645 ± 0.294682", + "ArL(1405)2": "10.603083 ± 0.501544", + "AiL(1405)2": "2.468517 ± 0.606209", + "ML(1520)": "1.518304 ± 0.000144", + "GL(1520)": "0.015001 ± 0.000482", + "ArL(1520)1": "0.293460 ± 0.024564", + "AiL(1520)1": "0.027366 ± 0.028136", + "ArL(1520)2": "-0.070759 ± 0.083333", + "AiL(1520)2": "1.509838 ± 0.078132", + "ArL(1600)1": "4.985161 ± 0.289528", + "AiL(1600)1": "2.960452 ± 0.339269", + "ArL(1600)2": "-7.062379 ± 0.322005", + "AiL(1600)2": "1.391393 ± 0.423046", + "ArL(1670)1": "-0.343888 ± 0.017767", + "AiL(1670)1": "-0.122270 ± 0.019908", + "ArL(1670)2": "-0.554003 ± 0.062269", + "AiL(1670)2": "1.054215 ± 0.062275", + "ML(1690)": "1.700233 ± 0.001956", + "GL(1690)": "0.094103 ± 0.001011", + "ArL(1690)1": "-0.486576 ± 0.058133", + "AiL(1690)1": "-0.155656 ± 0.053014", + "ArL(1690)2": "-2.873073 ± 0.140066", + "AiL(1690)2": "-1.080145 ± 0.182254", + "ML(2000)": "1.987831 ± 0.000837", + "GL(2000)": "0.177506 ± 0.001970", + "ArL(2000)1": "-8.208706 ± 0.584764", + "AiL(2000)1": "-7.275124 ± 0.507152", + "ArL(2000)2": "-4.533152 ± 0.328092", + "AiL(2000)2": "-3.645276 ± 0.281560", + "ArD(1232)1": "-6.801588 ± 0.336713", + "AiD(1232)1": "3.392680 ± 0.390102", + "ArD(1232)2": "-13.047199 ± 0.574007", + "AiD(1232)2": "4.724667 ± 0.726138", + "ArD(1600)1": "11.112191 ± 0.540042", + "AiD(1600)1": "-3.600778 ± 0.667295", + "ArD(1600)2": "6.564965 ± 0.477710", + "AiD(1600)2": "-1.671060 ± 0.440635", + "ArD(1700)1": "10.339426 ± 0.502442", + "AiD(1700)1": "0.848406 ± 0.599711", + "ArD(1700)2": "12.825594 ± 0.671808", + "AiD(1700)2": "1.522785 ± 0.722947" + } + }, + { + "title": "Alternative amplitude model with Deltares^{++}(1232) with free mass and width.", + "parameters": { + "gammaK(700)": "0.862213 ± 0.037889", + "ArK(700)1": "-0.058420 ± 0.165556", + "AiK(700)1": "3.245526 ± 0.188081", + "ArK(700)2": "-3.052966 ± 0.192255", + "AiK(700)2": "0.448280 ± 0.165059", + "ArK(892)2": "1.316403 ± 0.082737", + "AiK(892)2": "-0.981707 ± 0.078162", + "ArK(892)3": "-3.102638 ± 0.237331", + "AiK(892)3": "-3.524093 ± 0.226744", + "ArK(892)4": "-0.600424 ± 0.208990", + "AiK(892)4": "-4.340942 ± 0.221140", + "gammaK(1430)": "-0.000808 ± 0.009261", + "ArK(1430)1": "-6.023863 ± 0.603487", + "AiK(1430)1": "11.673504 ± 0.697359", + "ArK(1430)2": "0.439749 ± 0.482248", + "AiK(1430)2": "9.192080 ± 0.465594", + "ArL(1405)1": "-4.311990 ± 0.273925", + "AiL(1405)1": "3.394898 ± 0.283385", + "ArL(1405)2": "10.878538 ± 0.563218", + "AiL(1405)2": "2.550106 ± 0.605541", + "ML(1520)": "1.518329 ± 0.000141", + "GL(1520)": "0.015038 ± 0.000442", + "ArL(1520)1": "0.272623 ± 0.023214", + "AiL(1520)1": "0.040904 ± 0.024110", + "ArL(1520)2": "-0.098882 ± 0.082151", + "AiL(1520)2": "1.575655 ± 0.086769", + "ArL(1600)1": "5.479766 ± 0.341048", + "AiL(1600)1": "2.785101 ± 0.345928", + "ArL(1600)2": "-7.402132 ± 0.373852", + "AiL(1600)2": "1.084110 ± 0.396234", + "ArL(1670)1": "-0.277686 ± 0.031437", + "AiL(1670)1": "-0.125870 ± 0.020935", + "ArL(1670)2": "-0.593018 ± 0.063265", + "AiL(1670)2": "1.094967 ± 0.066888", + "ArL(1690)1": "-0.534285 ± 0.029514", + "AiL(1690)1": "0.028276 ± 0.058393", + "ArL(1690)2": "-2.679008 ± 0.128034", + "AiL(1690)2": "-0.241186 ± 0.138195", + "ML(2000)": "1.990371 ± 0.000946", + "GL(2000)": "0.178285 ± 0.002366", + "ArL(2000)1": "-7.515210 ± 0.595310", + "AiL(2000)1": "-8.493874 ± 0.527933", + "ArL(2000)2": "-4.222160 ± 0.353790", + "AiL(2000)2": "-4.710304 ± 0.328325", + "MD(1232)": "1.243549 ± 0.000726", + "GD(1232)": "0.130084 ± 0.002105", + "ArD(1232)1": "-7.913454 ± 0.431139", + "AiD(1232)1": "2.468312 ± 0.399099", + "ArD(1232)2": "-13.990674 ± 0.733443", + "AiD(1232)2": "5.519206 ± 0.733672", + "ArD(1600)1": "11.119866 ± 0.594976", + "AiD(1600)1": "-3.101455 ± 0.614107", + "ArD(1600)2": "7.561649 ± 0.506562", + "AiD(1600)2": "-0.703400 ± 0.436001", + "ArD(1700)1": "11.160177 ± 0.628154", + "AiD(1700)1": "0.810239 ± 0.596754", + "ArD(1700)2": "13.452967 ± 0.760700", + "AiD(1700)2": "2.391401 ± 0.706637" + } + }, + { + "title": "Alternative amplitude model with Lz(1600), Deltares(1600)^{++}, Deltares(1700)^{++} with free mass and width.", + "parameters": { + "gammaK(700)": "0.930361 ± 0.042917", + "ArK(700)1": "-0.295479 ± 0.159250", + "AiK(700)1": "2.973306 ± 0.129842", + "ArK(700)2": "-2.858500 ± 0.144929", + "AiK(700)2": "-0.330782 ± 0.163328", + "ArK(892)2": "1.336661 ± 0.083917", + "AiK(892)2": "-0.959295 ± 0.067402", + "ArK(892)3": "-2.761572 ± 0.106633", + "AiK(892)3": "-3.598880 ± 0.220996", + "ArK(892)4": "-0.284618 ± 0.196509", + "AiK(892)4": "-4.250430 ± 0.135808", + "gammaK(1430)": "0.001940 ± 0.011045", + "ArK(1430)1": "-7.987826 ± 0.681783", + "AiK(1430)1": "9.803146 ± 0.294698", + "ArK(1430)2": "-0.593331 ± 0.415975", + "AiK(1430)2": "9.324588 ± 0.309701", + "ArL(1405)1": "-4.555433 ± 0.298588", + "AiL(1405)1": "2.763267 ± 0.218122", + "ArL(1405)2": "9.625044 ± 0.246670", + "AiL(1405)2": "3.611149 ± 0.613333", + "ML(1520)": "1.518356 ± 0.000201", + "GL(1520)": "0.013888 ± 0.000468", + "ArL(1520)1": "0.311090 ± 0.030219", + "AiL(1520)1": "0.097119 ± 0.035055", + "ArL(1520)2": "-0.290387 ± 0.075721", + "AiL(1520)2": "1.329605 ± 0.045707", + "ML(1600)": "1.641907 ± 0.003978", + "GL(1600)": "0.280442 ± 0.012658", + "ArL(1600)1": "4.414414 ± 0.185704", + "AiL(1600)1": "4.820363 ± 0.531981", + "ArL(1600)2": "-8.100483 ± 0.399640", + "AiL(1600)2": "-1.077598 ± 0.497833", + "ArL(1670)1": "-0.357416 ± 0.017074", + "AiL(1670)1": "-0.211263 ± 0.037984", + "ArL(1670)2": "-0.645125 ± 0.064380", + "AiL(1670)2": "0.973070 ± 0.024447", + "ArL(1690)1": "-0.469216 ± 0.074886", + "AiL(1690)1": "-0.072329 ± 0.069308", + "ArL(1690)2": "-2.749269 ± 0.083246", + "AiL(1690)2": "-0.571594 ± 0.146788", + "ML(2000)": "1.988627 ± 0.001395", + "GL(2000)": "0.185432 ± 0.003371", + "ArL(2000)1": "-7.191096 ± 0.301981", + "AiL(2000)1": "-9.143200 ± 0.583267", + "ArL(2000)2": "-3.983316 ± 0.160931", + "AiL(2000)2": "-4.282048 ± 0.323373", + "ArD(1232)1": "-6.978590 ± 0.304846", + "AiD(1232)1": "2.387086 ± 0.300128", + "ArD(1232)2": "-13.689222 ± 0.484052", + "AiD(1232)2": "2.851832 ± 0.534940", + "MD(1600)": "1.653725 ± 0.005556", + "GD(1600)": "0.399996 ± 0.041473", + "ArD(1600)1": "15.672601 ± 0.796079", + "AiD(1600)1": "-3.902558 ± 0.805891", + "ArD(1600)2": "7.749456 ± 0.597435", + "AiD(1600)2": "-1.530633 ± 0.559362", + "MD(1700)": "1.760812 ± 0.009728", + "GD(1700)": "0.580378 ± 0.042305", + "ArD(1700)1": "11.181365 ± 0.540593", + "AiD(1700)1": "6.588973 ± 0.743188", + "ArD(1700)2": "13.910511 ± 0.658205", + "AiD(1700)2": "8.140582 ± 0.906997" + } + }, + { + "title": "Alternative amplitude model with free Lz(1405) Flatt'e widths, indicated as G1 (pK channel) and G2 (Sigmapi).", + "parameters": { + "gammaK(700)": "1.046003 ± 0.045155", + "ArK(700)1": "0.008133 ± 0.114784", + "AiK(700)1": "1.988397 ± 0.122308", + "ArK(700)2": "-2.240970 ± 0.138751", + "AiK(700)2": "-0.085452 ± 0.130463", + "ArK(892)2": "1.146258 ± 0.079080", + "AiK(892)2": "-0.954003 ± 0.067668", + "ArK(892)3": "-3.072364 ± 0.215610", + "AiK(892)3": "-3.136817 ± 0.213343", + "ArK(892)4": "-0.637844 ± 0.206690", + "AiK(892)4": "-4.026840 ± 0.191988", + "gammaK(1430)": "-0.009898 ± 0.011343", + "ArK(1430)1": "-5.216333 ± 0.567929", + "AiK(1430)1": "9.975627 ± 0.584259", + "ArK(1430)2": "1.462918 ± 0.499231", + "AiK(1430)2": "8.721736 ± 0.432555", + "G1L(1405)": "0.036126 ± 0.005923", + "G2L(1405)": "0.094903 ± 0.000202", + "ArL(1405)1": "-5.874996 ± 0.391042", + "AiL(1405)1": "4.574277 ± 0.413604", + "ArL(1405)2": "12.197520 ± 0.675524", + "AiL(1405)2": "6.501119 ± 0.873095", + "ML(1520)": "1.518521 ± 0.000052", + "GL(1520)": "0.015532 ± 0.000279", + "ArL(1520)1": "0.281301 ± 0.018746", + "AiL(1520)1": "0.013697 ± 0.026710", + "ArL(1520)2": "-0.147613 ± 0.076595", + "AiL(1520)2": "1.442291 ± 0.074050", + "ArL(1600)1": "4.157093 ± 0.270841", + "AiL(1600)1": "2.657058 ± 0.305277", + "ArL(1600)2": "-6.901756 ± 0.336119", + "AiL(1600)2": "1.200985 ± 0.393966", + "ArL(1670)1": "-0.336580 ± 0.028390", + "AiL(1670)1": "-0.016768 ± 0.031871", + "ArL(1670)2": "-0.533891 ± 0.055274", + "AiL(1670)2": "0.899021 ± 0.053906", + "ArL(1690)1": "-0.241208 ± 0.027406", + "AiL(1690)1": "-0.095257 ± 0.042068", + "ArL(1690)2": "-2.550386 ± 0.110661", + "AiL(1690)2": "-0.365502 ± 0.138869", + "ML(2000)": "1.981461 ± 0.000983", + "GL(2000)": "0.167141 ± 0.002551", + "ArL(2000)1": "-7.597159 ± 0.496023", + "AiL(2000)1": "-5.992964 ± 0.469847", + "ArL(2000)2": "-3.540111 ± 0.278466", + "AiL(2000)2": "-3.103670 ± 0.244369", + "ArD(1232)1": "-6.453502 ± 0.335951", + "AiD(1232)1": "2.913677 ± 0.349109", + "ArD(1232)2": "-12.390391 ± 0.585280", + "AiD(1232)2": "4.188960 ± 0.662337", + "ArD(1600)1": "10.119430 ± 0.519567", + "AiD(1600)1": "-2.250105 ± 0.576355", + "ArD(1600)2": "6.880920 ± 0.436212", + "AiD(1600)2": "-0.268431 ± 0.431312", + "ArD(1700)1": "9.153693 ± 0.516650", + "AiD(1700)1": "1.094454 ± 0.519789", + "ArD(1700)2": "11.665897 ± 0.613543", + "AiD(1700)2": "1.484256 ± 0.646875" + } + }, + { + "title": "Alternative amplitude model with Lz(1800) contribution added with mass and width from Ref.~cite{PDG2020}.", + "parameters": { + "gammaK(700)": "0.820824 ± 0.061113", + "ArK(700)1": "0.479870 ± 0.143496", + "AiK(700)1": "2.669157 ± 0.135086", + "ArK(700)2": "-2.407747 ± 0.139734", + "AiK(700)2": "0.249972 ± 0.126638", + "ArK(892)2": "1.180456 ± 0.078060", + "AiK(892)2": "-1.129548 ± 0.048703", + "ArK(892)3": "-3.113975 ± 0.094314", + "AiK(892)3": "-3.273000 ± 0.190359", + "ArK(892)4": "-0.591144 ± 0.170935", + "AiK(892)4": "-4.143304 ± 0.101200", + "gammaK(1430)": "-0.069727 ± 0.011389", + "ArK(1430)1": "-5.153340 ± 0.665962", + "AiK(1430)1": "12.169831 ± 0.274137", + "ArK(1430)2": "2.375445 ± 0.489785", + "AiK(1430)2": "10.360149 ± 0.341598", + "ArL(1405)1": "-3.718964 ± 0.229158", + "AiL(1405)1": "3.509241 ± 0.252699", + "ArL(1405)2": "8.312918 ± 0.209008", + "AiL(1405)2": "1.057133 ± 0.550655", + "ML(1520)": "1.518230 ± 0.000142", + "GL(1520)": "0.014972 ± 0.000422", + "ArL(1520)1": "0.269194 ± 0.008633", + "AiL(1520)1": "-0.027929 ± 0.024573", + "ArL(1520)2": "0.003638 ± 0.068741", + "AiL(1520)2": "1.456617 ± 0.040032", + "ArL(1600)1": "4.392282 ± 0.069629", + "AiL(1600)1": "2.623712 ± 0.281504", + "ArL(1600)2": "-6.779570 ± 0.208083", + "AiL(1600)2": "1.601388 ± 0.293209", + "ArL(1670)1": "-0.229983 ± 0.029811", + "AiL(1670)1": "0.079729 ± 0.024070", + "ArL(1670)2": "-0.510516 ± 0.051790", + "AiL(1670)2": "0.867892 ± 0.022265", + "ArL(1690)1": "-0.157931 ± 0.057406", + "AiL(1690)1": "-0.171170 ± 0.035648", + "ArL(1690)2": "-2.643447 ± 0.060018", + "AiL(1690)2": "-0.438738 ± 0.131131", + "ArL(1800)1": "-2.896177 ± 0.507260", + "AiL(1800)1": "-4.187938 ± 0.474559", + "ArL(1800)2": "-5.771801 ± 0.380095", + "AiL(1800)2": "2.443076 ± 0.439612", + "ML(2000)": "1.967001 ± 0.001551", + "GL(2000)": "0.172887 ± 0.003175", + "ArL(2000)1": "-10.400572 ± 0.257214", + "AiL(2000)1": "-4.340623 ± 0.625761", + "ArL(2000)2": "-4.045572 ± 0.215202", + "AiL(2000)2": "-0.810151 ± 0.270126", + "ArD(1232)1": "-6.673128 ± 0.251509", + "AiD(1232)1": "2.914234 ± 0.261509", + "ArD(1232)2": "-12.821318 ± 0.397412", + "AiD(1232)2": "4.739651 ± 0.455128", + "ArD(1600)1": "9.039262 ± 0.390506", + "AiD(1600)1": "-2.404412 ± 0.400807", + "ArD(1600)2": "6.015778 ± 0.268655", + "AiD(1600)2": "0.059000 ± 0.365925", + "ArD(1700)1": "9.902492 ± 0.266514", + "AiD(1700)1": "1.343926 ± 0.460351", + "ArD(1700)2": "12.627807 ± 0.266730", + "AiD(1700)2": "0.711202 ± 0.639078" + } + }, + { + "title": "Alternative amplitude model with Lz(1810) contribution added with mass and width from Ref.~cite{PDG2020}.", + "parameters": { + "gammaK(700)": "0.857489 ± 0.032897", + "ArK(700)1": "-0.572430 ± 0.197184", + "AiK(700)1": "3.044079 ± 0.176577", + "ArK(700)2": "-2.602233 ± 0.158901", + "AiK(700)2": "-0.081926 ± 0.166331", + "ArK(892)2": "1.290163 ± 0.093389", + "AiK(892)2": "-1.030455 ± 0.085781", + "ArK(892)3": "-2.579611 ± 0.274888", + "AiK(892)3": "-4.177200 ± 0.265670", + "ArK(892)4": "0.049088 ± 0.251030", + "AiK(892)4": "-4.431232 ± 0.233394", + "gammaK(1430)": "-0.031674 ± 0.010323", + "ArK(1430)1": "-9.784174 ± 0.807011", + "AiK(1430)1": "10.939005 ± 0.840139", + "ArK(1430)2": "2.646623 ± 0.686782", + "AiK(1430)2": "9.852476 ± 0.572181", + "ArL(1405)1": "-4.002134 ± 0.370269", + "AiL(1405)1": "4.238902 ± 0.386727", + "ArL(1405)2": "10.358069 ± 0.574145", + "AiL(1405)2": "3.506165 ± 0.671668", + "ML(1520)": "1.518547 ± 0.000162", + "GL(1520)": "0.014146 ± 0.000425", + "ArL(1520)1": "0.275812 ± 0.021723", + "AiL(1520)1": "0.009175 ± 0.031735", + "ArL(1520)2": "-0.362697 ± 0.089972", + "AiL(1520)2": "1.475039 ± 0.086305", + "ArL(1600)1": "2.580068 ± 0.334961", + "AiL(1600)1": "2.837320 ± 0.357071", + "ArL(1600)2": "-9.079671 ± 0.513260", + "AiL(1600)2": "0.423339 ± 0.540299", + "ArL(1670)1": "-0.301217 ± 0.029938", + "AiL(1670)1": "-0.187261 ± 0.026203", + "ArL(1670)2": "-0.728133 ± 0.068346", + "AiL(1670)2": "0.990152 ± 0.069921", + "ArL(1690)1": "-0.203612 ± 0.063126", + "AiL(1690)1": "-0.408917 ± 0.057318", + "ArL(1690)2": "-2.545942 ± 0.133344", + "AiL(1690)2": "-0.375079 ± 0.153121", + "ArL(1810)1": "-0.865366 ± 0.368650", + "AiL(1810)1": "4.993321 ± 0.804440", + "ArL(1810)2": "1.179995 ± 0.417286", + "AiL(1810)2": "4.413438 ± 0.671013", + "ML(2000)": "1.987175 ± 0.001062", + "GL(2000)": "0.195047 ± 0.002990", + "ArL(2000)1": "-8.611831 ± 0.744395", + "AiL(2000)1": "-9.236148 ± 0.685392", + "ArL(2000)2": "-4.787412 ± 0.444759", + "AiL(2000)2": "-5.304151 ± 0.410633", + "ArD(1232)1": "-7.201427 ± 0.400492", + "AiD(1232)1": "2.135874 ± 0.431609", + "ArD(1232)2": "-14.198953 ± 0.744335", + "AiD(1232)2": "3.591562 ± 0.831119", + "ArD(1600)1": "11.858852 ± 0.630511", + "AiD(1600)1": "-1.695016 ± 0.718071", + "ArD(1600)2": "7.296466 ± 0.566022", + "AiD(1600)2": "-0.821533 ± 0.463677", + "ArD(1700)1": "11.715153 ± 0.677549", + "AiD(1700)1": "2.313153 ± 0.688942", + "ArD(1700)2": "15.153234 ± 0.889049", + "AiD(1700)2": "3.476165 ± 0.888907" + } + }, + { + "title": "Alternative amplitude model with Deltares(1620)^{++} contribution added with free mass and width.", + "parameters": { + "gammaK(700)": "0.594082 ± 0.036813", + "ArK(700)1": "-0.508291 ± 0.255719", + "AiK(700)1": "3.557874 ± 0.234730", + "ArK(700)2": "-4.728087 ± 0.330109", + "AiK(700)2": "-1.300166 ± 0.339730", + "ArK(892)2": "1.509464 ± 0.112060", + "AiK(892)2": "-0.869546 ± 0.111472", + "ArK(892)3": "-2.660499 ± 0.371969", + "AiK(892)3": "-5.012650 ± 0.362007", + "ArK(892)4": "0.752416 ± 0.348229", + "AiK(892)4": "-5.048965 ± 0.314350", + "gammaK(1430)": "0.021594 ± 0.011807", + "ArK(1430)1": "-9.412194 ± 0.900786", + "AiK(1430)1": "10.581979 ± 0.967109", + "ArK(1430)2": "0.943281 ± 0.596987", + "AiK(1430)2": "8.773476 ± 0.571852", + "ArL(1405)1": "-3.911511 ± 0.333627", + "AiL(1405)1": "3.225850 ± 0.367578", + "ArL(1405)2": "10.898158 ± 0.786576", + "AiL(1405)2": "5.380447 ± 0.870842", + "ML(1520)": "1.519114 ± 0.000184", + "GL(1520)": "0.015990 ± 0.000488", + "ArL(1520)1": "0.345083 ± 0.021906", + "AiL(1520)1": "0.043400 ± 0.029742", + "ArL(1520)2": "-0.845828 ± 0.128042", + "AiL(1520)2": "1.646280 ± 0.124651", + "ArL(1600)1": "5.451808 ± 0.457087", + "AiL(1600)1": "4.103115 ± 0.504741", + "ArL(1600)2": "-5.406690 ± 0.390713", + "AiL(1600)2": "-0.015048 ± 0.387662", + "ArL(1670)1": "-0.345424 ± 0.029988", + "AiL(1670)1": "-0.125875 ± 0.039196", + "ArL(1670)2": "-0.743300 ± 0.090313", + "AiL(1670)2": "1.137941 ± 0.091154", + "ArL(1690)1": "-0.200663 ± 0.058090", + "AiL(1690)1": "-0.341098 ± 0.046833", + "ArL(1690)2": "-2.685756 ± 0.171732", + "AiL(1690)2": "-0.902816 ± 0.195988", + "ML(2000)": "1.985654 ± 0.001071", + "GL(2000)": "0.175286 ± 0.002955", + "ArL(2000)1": "-6.796212 ± 0.843828", + "AiL(2000)1": "-10.099423 ± 0.754626", + "ArL(2000)2": "-4.628941 ± 0.496023", + "AiL(2000)2": "-5.442093 ± 0.464947", + "ArD(1232)1": "-8.643292 ± 0.547830", + "AiD(1232)1": "1.905427 ± 0.578079", + "ArD(1232)2": "-16.316906 ± 1.004805", + "AiD(1232)2": "2.335320 ± 1.059623", + "ArD(1600)1": "14.631039 ± 0.934341", + "AiD(1600)1": "-2.695902 ± 1.036508", + "ArD(1600)2": "10.375705 ± 0.800934", + "AiD(1600)2": "1.121209 ± 0.805173", + "MD(1620)": "1.55738 ± 0.000728", + "GD(1620)": "0.181832 ± 0.001744", + "ArD(1620)1": "0.348943 ± 0.231875", + "AiD(1620)1": "3.210361 ± 0.238051", + "ArD(1620)2": "0.414536 ± 0.095090", + "AiD(1620)2": "-0.460853 ± 0.099753", + "ArD(1700)1": "13.761142 ± 0.949363", + "AiD(1700)1": "2.271050 ± 0.961864", + "ArD(1700)2": "17.298070 ± 1.182873", + "AiD(1700)2": "4.165149 ± 1.264982" + } + }, + { + "title": "Alternative amplitude model in which a Relativistic Breit-Wigner is used for the K^*(700) contribution.", + "parameters": { + "ArK(700)1": "0.744669 ± 0.204785", + "AiK(700)1": "3.738385 ± 0.197228", + "ArK(700)2": "-4.473014 ± 0.236293", + "AiK(700)2": "0.062890 ± 0.243306", + "ArK(892)2": "1.237381 ± 0.073566", + "AiK(892)2": "-0.951157 ± 0.070328", + "ArK(892)3": "-2.666654 ± 0.207025", + "AiK(892)3": "-3.347478 ± 0.198699", + "ArK(892)4": "-0.408230 ± 0.195261", + "AiK(892)4": "-3.962939 ± 0.179727", + "gammaK(1430)": "0.004153 ± 0.011079", + "ArK(1430)1": "-6.453339 ± 0.561823", + "AiK(1430)1": "9.691872 ± 0.590122", + "ArK(1430)2": "-0.525731 ± 0.481791", + "AiK(1430)2": "9.490585 ± 0.436026", + "ArL(1405)1": "-4.858058 ± 0.250360", + "AiL(1405)1": "2.514306 ± 0.279303", + "ArL(1405)2": "8.705111 ± 0.454020", + "AiL(1405)2": "4.247092 ± 0.522711", + "ML(1520)": "1.518283 ± 0.000165", + "GL(1520)": "0.014670 ± 0.000439", + "ArL(1520)1": "0.275313 ± 0.014173", + "AiL(1520)1": "0.028308 ± 0.026051", + "ArL(1520)2": "-0.262939 ± 0.072402", + "AiL(1520)2": "1.345020 ± 0.070998", + "ArL(1600)1": "4.629762 ± 0.279056", + "AiL(1600)1": "3.123136 ± 0.322211", + "ArL(1600)2": "-5.922504 ± 0.278060", + "AiL(1600)2": "-0.050362 ± 0.315279", + "ArL(1670)1": "-0.331331 ± 0.022512", + "AiL(1670)1": "-0.217612 ± 0.021152", + "ArL(1670)2": "-0.617724 ± 0.056150", + "AiL(1670)2": "0.911542 ± 0.054531", + "ArL(1690)1": "-0.379944 ± 0.036943", + "AiL(1690)1": "-0.039842 ± 0.038749", + "ArL(1690)2": "-2.423437 ± 0.107110", + "AiL(1690)2": "-0.621704 ± 0.129221", + "ML(2000)": "1.992322 ± 0.001042", + "GL(2000)": "0.183796 ± 0.002503", + "ArL(2000)1": "-7.138184 ± 0.541724", + "AiL(2000)1": "-7.743513 ± 0.490606", + "ArL(2000)2": "-4.218316 ± 0.333047", + "AiL(2000)2": "-4.439730 ± 0.298101", + "ArD(1232)1": "-6.548804 ± 0.324398", + "AiD(1232)1": "2.849460 ± 0.340050", + "ArD(1232)2": "-12.388771 ± 0.555301", + "AiD(1232)2": "3.973618 ± 0.634680", + "ArD(1600)1": "10.926697 ± 0.518948", + "AiD(1600)1": "-2.157619 ± 0.589066", + "ArD(1600)2": "6.388424 ± 0.422591", + "AiD(1600)2": "-0.917458 ± 0.395387", + "ArD(1700)1": "10.146557 ± 0.536077", + "AiD(1700)1": "2.905844 ± 0.541731", + "ArD(1700)2": "11.987531 ± 0.604477", + "AiD(1700)2": "2.058147 ± 0.653879" + } + }, + { + "title": "Alternative amplitude model with K^*(700) with free mass and width.", + "parameters": { + "MK(700)": "0.874000 ± 0.004444", + "GK(700)": "0.398000 ± 0.003845", + "gammaK(700)": "1.293655 ± 0.065049", + "ArK(700)1": "-0.117095 ± 0.177157", + "AiK(700)1": "2.704896 ± 0.059553", + "ArK(700)2": "-3.035274 ± 0.115554", + "AiK(700)2": "0.085415 ± 0.129952", + "ArK(892)2": "1.221242 ± 0.041782", + "AiK(892)2": "-1.047306 ± 0.038072", + "ArK(892)3": "-3.393584 ± 0.075103", + "AiK(892)3": "-3.286426 ± 0.071765", + "ArK(892)4": "-0.885464 ± 0.057722", + "AiK(892)4": "-4.262787 ± 0.066235", + "gammaK(1430)": "0.020145 ± 0.007399", + "ArK(1430)1": "-6.628059 ± 0.228040", + "AiK(1430)1": "11.289175 ± 0.177019", + "ArK(1430)2": "0.267170 ± 0.209239", + "AiK(1430)2": "9.038425 ± 0.142729", + "ArL(1405)1": "-4.509067 ± 0.154996", + "AiL(1405)1": "3.264372 ± 0.177433", + "ArL(1405)2": "11.106135 ± 0.204230", + "AiL(1405)2": "2.179375 ± 0.281816", + "ML(1520)": "1.518427 ± 0.000057", + "GL(1520)": "0.015407 ± 0.000278", + "ArL(1520)1": "0.303906 ± 0.011574", + "AiL(1520)1": "0.027372 ± 0.012679", + "ArL(1520)2": "-0.087241 ± 0.035113", + "AiL(1520)2": "1.589856 ± 0.036747", + "ArL(1600)1": "5.099857 ± 0.118261", + "AiL(1600)1": "3.112247 ± 0.143722", + "ArL(1600)2": "-7.299315 ± 0.153331", + "AiL(1600)2": "1.248635 ± 0.165507", + "ArL(1670)1": "-0.345269 ± 0.018726", + "AiL(1670)1": "-0.127501 ± 0.021951", + "ArL(1670)2": "-0.540961 ± 0.029420", + "AiL(1670)2": "1.074781 ± 0.016984", + "ArL(1690)1": "-0.363644 ± 0.036703", + "AiL(1690)1": "-0.120825 ± 0.025074", + "ArL(1690)2": "-2.802881 ± 0.073307", + "AiL(1690)2": "-0.258627 ± 0.065393", + "ML(2000)": "1.988258 ± 0.000773", + "GL(2000)": "0.177437 ± 0.002181", + "ArL(2000)1": "-8.407101 ± 0.203855", + "AiL(2000)1": "-7.595600 ± 0.182119", + "ArL(2000)2": "-4.442971 ± 0.170001", + "AiL(2000)2": "-3.628276 ± 0.153057", + "ArD(1232)1": "-6.884150 ± 0.140261", + "AiD(1232)1": "3.334478 ± 0.160836", + "ArD(1232)2": "-13.240869 ± 0.229208", + "AiD(1232)2": "5.135798 ± 0.202758", + "ArD(1600)1": "11.573845 ± 0.258889", + "AiD(1600)1": "-3.609929 ± 0.209670", + "ArD(1600)2": "7.337382 ± 0.261163", + "AiD(1600)2": "-1.292572 ± 0.205303", + "ArD(1700)1": "10.938816 ± 0.188411", + "AiD(1700)1": "0.829034 ± 0.246461", + "ArD(1700)2": "13.471328 ± 0.269478", + "AiD(1700)2": "1.841069 ± 0.276973" + } + }, + { + "title": "Alternative amplitude model with K^*(1410) contribution added with mass and width from Ref.~cite{PDG2020}.", + "parameters": { + "gammaK(700)": "0.610031 ± 0.056464", + "ArK(700)1": "0.998014 ± 0.157706", + "AiK(700)1": "2.643169 ± 0.153535", + "ArK(700)2": "-3.741166 ± 0.195130", + "AiK(700)2": "0.101409 ± 0.182576", + "ArK(892)2": "1.029002 ± 0.090867", + "AiK(892)2": "-1.250462 ± 0.046933", + "ArK(892)3": "-3.514216 ± 0.144181", + "AiK(892)3": "-3.039751 ± 0.246634", + "ArK(892)4": "-0.888357 ± 0.187292", + "AiK(892)4": "-4.162778 ± 0.180947", + "ArK(1410)1": "-3.369750 ± 0.633205", + "AiK(1410)1": "-5.812831 ± 0.514088", + "ArK(1410)2": "0.042694 ± 0.616992", + "AiK(1410)2": "-4.840691 ± 0.585265", + "ArK(1410)3": "1.047327 ± 0.726056", + "AiK(1410)3": "10.518265 ± 0.647184", + "ArK(1410)4": "1.162940 ± 0.655989", + "AiK(1410)4": "5.379877 ± 0.493524", + "gammaK(1430)": "0.060253 ± 0.008710", + "ArK(1430)1": "-4.256320 ± 0.657069", + "AiK(1430)1": "11.004596 ± 0.346773", + "ArK(1430)2": "-1.690209 ± 0.354505", + "AiK(1430)2": "7.147499 ± 0.235006", + "ArL(1405)1": "-2.791128 ± 0.309384", + "AiL(1405)1": "0.493229 ± 0.287053", + "ArL(1405)2": "9.262813 ± 0.370295", + "AiL(1405)2": "4.356569 ± 0.674237", + "ML(1520)": "1.518607 ± 0.000142", + "GL(1520)": "0.015031 ± 0.000384", + "ArL(1520)1": "0.417944 ± 0.028169", + "AiL(1520)1": "-0.018029 ± 0.032573", + "ArL(1520)2": "-0.105559 ± 0.078261", + "AiL(1520)2": "1.418640 ± 0.065934", + "ArL(1600)1": "4.362129 ± 0.189634", + "AiL(1600)1": "0.788888 ± 0.312739", + "ArL(1600)2": "-5.849669 ± 0.264203", + "AiL(1600)2": "-0.108307 ± 0.307052", + "ArL(1670)1": "-0.329187 ± 0.017050", + "AiL(1670)1": "-0.074728 ± 0.022863", + "ArL(1670)2": "-0.468199 ± 0.065919", + "AiL(1670)2": "1.068614 ± 0.032767", + "ArL(1690)1": "-0.313354 ± 0.061185", + "AiL(1690)1": "0.024271 ± 0.042523", + "ArL(1690)2": "-2.858095 ± 0.111173", + "AiL(1690)2": "-0.189057 ± 0.149630", + "ML(2000)": "1.986826 ± 0.000838", + "GL(2000)": "0.165625 ± 0.002330", + "ArL(2000)1": "-7.883216 ± 0.319571", + "AiL(2000)1": "-5.719668 ± 0.524428", + "ArL(2000)2": "-4.506034 ± 0.210123", + "AiL(2000)2": "-3.979352 ± 0.319542", + "ArD(1232)1": "-6.218167 ± 0.381939", + "AiD(1232)1": "4.474333 ± 0.280400", + "ArD(1232)2": "-12.917498 ± 0.610768", + "AiD(1232)2": "5.437437 ± 0.534321", + "ArD(1600)1": "10.165113 ± 0.564503", + "AiD(1600)1": "-3.600791 ± 0.490655", + "ArD(1600)2": "6.766681 ± 0.440858", + "AiD(1600)2": "-1.857974 ± 0.412110", + "ArD(1700)1": "11.547894 ± 0.510295", + "AiD(1700)1": "-0.725114 ± 0.555047", + "ArD(1700)2": "14.379176 ± 0.607255", + "AiD(1700)2": "-0.231568 ± 0.722400" + } + }, + { + "title": "Alternative amplitude model in which a Relativistic Breit-Wigner is used for the K^*(1430) contribution.", + "parameters": { + "gammaK(700)": "0.922900 ± 0.034353", + "ArK(700)1": "-0.088452 ± 0.076269", + "AiK(700)1": "2.500931 ± 0.056046", + "ArK(700)2": "-2.807752 ± 0.095853", + "AiK(700)2": "0.080287 ± 0.066974", + "ArK(892)2": "1.183000 ± 0.035495", + "AiK(892)2": "-0.998802 ± 0.025785", + "ArK(892)3": "-3.064230 ± 0.052505", + "AiK(892)3": "-3.325429 ± 0.092621", + "ArK(892)4": "-0.649206 ± 0.079108", + "AiK(892)4": "-4.162340 ± 0.058969", + "ArK(1430)1": "-5.924213 ± 0.298956", + "AiK(1430)1": "12.061420 ± 0.176774", + "ArK(1430)2": "1.113085 ± 0.151442", + "AiK(1430)2": "9.448335 ± 0.156062", + "ArL(1405)1": "-4.646145 ± 0.119962", + "AiL(1405)1": "3.163520 ± 0.134807", + "ArL(1405)2": "10.157843 ± 0.114911", + "AiL(1405)2": "3.125226 ± 0.261682", + "ML(1520)": "1.518487 ± 0.000104", + "GL(1520)": "0.015100 ± 0.000359", + "ArL(1520)1": "0.287645 ± 0.015118", + "AiL(1520)1": "0.050185 ± 0.011685", + "ArL(1520)2": "-0.183290 ± 0.026418", + "AiL(1520)2": "1.485069 ± 0.017384", + "ArL(1600)1": "4.819150 ± 0.061052", + "AiL(1600)1": "3.088826 ± 0.157117", + "ArL(1600)2": "-6.811956 ± 0.119153", + "AiL(1600)2": "0.728666 ± 0.176591", + "ArL(1670)1": "-0.342254 ± 0.006441", + "AiL(1670)1": "-0.149415 ± 0.009928", + "ArL(1670)2": "-0.587154 ± 0.034787", + "AiL(1670)2": "0.998388 ± 0.009583", + "ArL(1690)1": "-0.409085 ± 0.014973", + "AiL(1690)1": "-0.084963 ± 0.024157", + "ArL(1690)2": "-2.715615 ± 0.036386", + "AiL(1690)2": "-0.413649 ± 0.077262", + "ML(2000)": "1.988876 ± 0.000632", + "GL(2000)": "0.183567 ± 0.002289", + "ArL(2000)1": "-8.097512 ± 0.172579", + "AiL(2000)1": "-7.959637 ± 0.250642", + "ArL(2000)2": "-4.396961 ± 0.087357", + "AiL(2000)2": "-4.040855 ± 0.167722", + "ArD(1232)1": "-6.802897 ± 0.137427", + "AiD(1232)1": "2.979103 ± 0.156005", + "ArD(1232)2": "-12.973008 ± 0.203687", + "AiD(1232)2": "4.438833 ± 0.222923", + "ArD(1600)1": "11.405535 ± 0.233336", + "AiD(1600)1": "-3.002764 ± 0.257261", + "ArD(1600)2": "6.867872 ± 0.225361", + "AiD(1600)2": "-0.936850 ± 0.189987", + "ArD(1700)1": "10.226676 ± 0.192975", + "AiD(1700)1": "1.616693 ± 0.275900", + "ArD(1700)2": "12.952162 ± 0.178677", + "AiD(1700)2": "2.237971 ± 0.381360" + } + }, + { + "title": "Alternative amplitude model with K^*(1430) with free width.", + "parameters": { + "gammaK(700)": "0.934183 ± 0.035840", + "ArK(700)1": "-0.025733 ± 0.068373", + "AiK(700)1": "2.555225 ± 0.056446", + "ArK(700)2": "-2.749931 ± 0.079619", + "AiK(700)2": "0.068425 ± 0.080909", + "ArK(892)2": "1.196976 ± 0.035795", + "AiK(892)2": "-1.014281 ± 0.027525", + "ArK(892)3": "-3.115952 ± 0.045253", + "AiK(892)3": "-3.342337 ± 0.052285", + "ArK(892)4": "-0.682157 ± 0.049104", + "AiK(892)4": "-4.190488 ± 0.031710", + "GK(1430)": "0.150117 ± 0.012478", + "gammaK(1430)": "0.353942 ± 0.012437", + "ArK(1430)1": "-6.369001 ± 0.226267", + "AiK(1430)1": "11.341841 ± 0.219290", + "ArK(1430)2": "0.675587 ± 0.249770", + "AiK(1430)2": "9.152291 ± 0.153840", + "ArL(1405)1": "-4.641171 ± 0.123808", + "AiL(1405)1": "3.199043 ± 0.164343", + "ArL(1405)2": "10.366257 ± 0.153619", + "AiL(1405)2": "3.040880 ± 0.252193", + "ML(1520)": "1.518472 ± 0.000096", + "GL(1520)": "0.015161 ± 0.000142", + "ArL(1520)1": "0.291519 ± 0.005953", + "AiL(1520)1": "0.048765 ± 0.007794", + "ArL(1520)2": "-0.176055 ± 0.029575", + "AiL(1520)2": "1.503093 ± 0.013972", + "ArL(1600)1": "4.852188 ± 0.069968", + "AiL(1600)1": "3.132230 ± 0.135834", + "ArL(1600)2": "-6.938257 ± 0.121886", + "AiL(1600)2": "0.770042 ± 0.130365", + "ArL(1670)1": "-0.343306 ± 0.006023", + "AiL(1670)1": "-0.147703 ± 0.009329", + "ArL(1670)2": "-0.585196 ± 0.024116", + "AiL(1670)2": "1.009963 ± 0.006880", + "ArL(1690)1": "-0.396095 ± 0.025097", + "AiL(1690)1": "-0.100006 ± 0.015263", + "ArL(1690)2": "-2.742605 ± 0.040421", + "AiL(1690)2": "-0.388296 ± 0.059445", + "ML(2000)": "1.988368 ± 0.000911", + "GL(2000)": "0.181734 ± 0.001988", + "ArL(2000)1": "-8.127146 ± 0.171276", + "AiL(2000)1": "-7.849932 ± 0.133223", + "ArL(2000)2": "-4.421548 ± 0.105964", + "AiL(2000)2": "-3.936428 ± 0.140305", + "ArD(1232)1": "-6.848011 ± 0.097194", + "AiD(1232)1": "3.013414 ± 0.142968", + "ArD(1232)2": "-13.083422 ± 0.115693", + "AiD(1232)2": "4.476747 ± 0.150077", + "ArD(1600)1": "11.488845 ± 0.171805", + "AiD(1600)1": "-3.052145 ± 0.199702", + "ArD(1600)2": "6.858418 ± 0.148709", + "AiD(1600)2": "-0.970904 ± 0.167293", + "ArD(1700)1": "10.351110 ± 0.160519", + "AiD(1700)1": "1.540701 ± 0.253220", + "ArD(1700)2": "12.985398 ± 0.110004", + "AiD(1700)2": "2.228074 ± 0.258859" + } + }, + { + "title": "Alternative amplitude model with an additional overall exponential form factor exp(-alpha q^2) multiplying Bugg lineshapes. The exponential parameter is indicated as ``alpha''.", + "parameters": { + "gammaK(700)": "0.822411 ± 0.057208", + "alphaK(700)": "-0.444257 ± 0.293332", + "ArK(700)1": "0.500932 ± 0.083523", + "AiK(700)1": "2.316935 ± 0.405634", + "ArK(700)2": "-2.019108 ± 0.371593", + "AiK(700)2": "0.057298 ± 0.076454", + "ArK(892)2": "1.160997 ± 0.042539", + "AiK(892)2": "-1.055468 ± 0.044142", + "ArK(892)3": "-3.153039 ± 0.089038", + "AiK(892)3": "-3.266216 ± 0.052409", + "ArK(892)4": "-0.748458 ± 0.083256", + "AiK(892)4": "-4.079399 ± 0.043196", + "gammaK(1430)": "-0.098783 ± 0.023220", + "alphaK(1430)": "0.320379 ± 0.200884", + "ArK(1430)1": "-7.871384 ± 0.349934", + "AiK(1430)1": "12.706526 ± 0.494652", + "ArK(1430)2": "1.519764 ± 0.524396", + "AiK(1430)2": "10.457474 ± 0.377571", + "ArL(1405)1": "-4.154905 ± 0.183111", + "AiL(1405)1": "3.102126 ± 0.212742", + "ArL(1405)2": "10.612403 ± 0.204058", + "AiL(1405)2": "2.444264 ± 0.295423", + "ML(1520)": "1.518409 ± 0.000135", + "GL(1520)": "0.014958 ± 0.000471", + "ArL(1520)1": "0.299140 ± 0.010063", + "AiL(1520)1": "0.016007 ± 0.012966", + "ArL(1520)2": "-0.149552 ± 0.037814", + "AiL(1520)2": "1.454957 ± 0.036239", + "ArL(1600)1": "4.873289 ± 0.098121", + "AiL(1600)1": "2.976170 ± 0.141205", + "ArL(1600)2": "-7.056025 ± 0.151698", + "AiL(1600)2": "0.638883 ± 0.172244", + "ArL(1670)1": "-0.319250 ± 0.008947", + "AiL(1670)1": "-0.141422 ± 0.013713", + "ArL(1670)2": "-0.555152 ± 0.026316", + "AiL(1670)2": "1.016211 ± 0.020910", + "ArL(1690)1": "-0.330284 ± 0.027874", + "AiL(1690)1": "-0.209158 ± 0.026284", + "ArL(1690)2": "-2.620128 ± 0.057680", + "AiL(1690)2": "-0.357478 ± 0.079165", + "ML(2000)": "1.986670 ± 0.000836", + "GL(2000)": "0.169498 ± 0.002847", + "ArL(2000)1": "-7.209116 ± 0.273563", + "AiL(2000)1": "-6.814298 ± 0.187355", + "ArL(2000)2": "-4.031724 ± 0.166622", + "AiL(2000)2": "-3.121371 ± 0.169532", + "ArD(1232)1": "-6.505562 ± 0.097783", + "AiD(1232)1": "3.218948 ± 0.180801", + "ArD(1232)2": "-12.821674 ± 0.115891", + "AiD(1232)2": "4.717166 ± 0.273132", + "ArD(1600)1": "11.505975 ± 0.221918", + "AiD(1600)1": "-2.755565 ± 0.289988", + "ArD(1600)2": "6.519839 ± 0.254287", + "AiD(1600)2": "-0.779944 ± 0.258351", + "ArD(1700)1": "10.729935 ± 0.232369", + "AiD(1700)1": "1.565633 ± 0.296713", + "ArD(1700)2": "13.294697 ± 0.257569", + "AiD(1700)2": "2.113176 ± 0.354202" + } + }, + { + "title": "Alternative amplitude model with free radial parameter d for the Lc resonance, indicated as dLc.", + "parameters": { + "dLc": "4.204442 ± 0.341296", + "gammaK(700)": "0.922543 ± 0.031137", + "ArK(700)1": "0.127948 ± 0.149474", + "AiK(700)1": "2.529633 ± 0.063936", + "ArK(700)2": "-2.727862 ± 0.088694", + "AiK(700)2": "0.129667 ± 0.146615", + "ArK(892)2": "1.170114 ± 0.063246", + "AiK(892)2": "-1.027869 ± 0.057527", + "ArK(892)3": "-3.215552 ± 0.159851", + "AiK(892)3": "-3.225086 ± 0.183685", + "ArK(892)4": "-0.800213 ± 0.214926", + "AiK(892)4": "-4.146763 ± 0.071926", + "gammaK(1430)": "0.020421 ± 0.005911", + "ArK(1430)1": "-6.490224 ± 0.582215", + "AiK(1430)1": "10.622156 ± 0.278960", + "ArK(1430)2": "0.461026 ± 0.446560", + "AiK(1430)2": "8.726626 ± 0.127359", + "ArL(1405)1": "-4.580370 ± 0.204095", + "AiL(1405)1": "3.210059 ± 0.214052", + "ArL(1405)2": "10.541466 ± 0.162820", + "AiL(1405)2": "2.584296 ± 0.633953", + "ML(1520)": "1.518464 ± 0.000141", + "GL(1520)": "0.015259 ± 0.000369", + "ArL(1520)1": "0.292152 ± 0.013805", + "AiL(1520)1": "0.032693 ± 0.023307", + "ArL(1520)2": "-0.130502 ± 0.085630", + "AiL(1520)2": "1.508702 ± 0.021918", + "ArL(1600)1": "4.957221 ± 0.157697", + "AiL(1600)1": "2.989209 ± 0.314697", + "ArL(1600)2": "-6.880108 ± 0.130076", + "AiL(1600)2": "0.952497 ± 0.375774", + "ArL(1670)1": "-0.339795 ± 0.009563", + "AiL(1670)1": "-0.134046 ± 0.024603", + "ArL(1670)2": "-0.550967 ± 0.059929", + "AiL(1670)2": "1.019503 ± 0.030319", + "ArL(1690)1": "-0.390624 ± 0.029626", + "AiL(1690)1": "-0.093379 ± 0.029199", + "ArL(1690)2": "-2.742302 ± 0.047928", + "AiL(1690)2": "-0.273504 ± 0.156364", + "ML(2000)": "1.987921 ± 0.000493", + "GL(2000)": "0.179272 ± 0.001824", + "ArL(2000)1": "-8.201531 ± 0.389849", + "AiL(2000)1": "-7.392044 ± 0.493271", + "ArL(2000)2": "-4.385238 ± 0.205758", + "AiL(2000)2": "-3.708142 ± 0.264829", + "ArD(1232)1": "-6.689146 ± 0.213299", + "AiD(1232)1": "3.212245 ± 0.337147", + "ArD(1232)2": "-12.871200 ± 0.298883", + "AiD(1232)2": "4.772431 ± 0.644439", + "ArD(1600)1": "11.235201 ± 0.346318", + "AiD(1600)1": "-3.418874 ± 0.611233", + "ArD(1600)2": "6.603461 ± 0.229202", + "AiD(1600)2": "-1.305754 ± 0.406314", + "ArD(1700)1": "10.189830 ± 0.202768", + "AiD(1700)1": "1.183965 ± 0.577030", + "ArD(1700)2": "12.726946 ± 0.210809", + "AiD(1700)2": "1.728984 ± 0.718018" + } + }, + { + "title": "Alternative amplitude model obtained using LS couplings.", + "parameters": { + "ArK(700)1": "-0.000167 ± 0.019096", + "AiK(700)1": "-0.684890 ± 0.026946", + "ArK(700)2": "-0.631117 ± 0.024065", + "AiK(700)2": "0.040435 ± 0.023737", + "ArK(892)2": "0.341792 ± 0.007302", + "AiK(892)2": "-0.064047 ± 0.004810", + "ArK(892)3": "-0.755199 ± 0.014376", + "AiK(892)3": "-0.592176 ± 0.014062", + "ArK(892)4": "0.093754 ± 0.007945", + "AiK(892)4": "0.379956 ± 0.005135", + "ArK(1430)1": "-1.352114 ± 0.098594", + "AiK(1430)1": "-3.150814 ± 0.057482", + "ArK(1430)2": "0.598156 ± 0.054311", + "AiK(1430)2": "-0.955655 ± 0.046918", + "ArL(1405)1": "-1.224670 ± 0.034198", + "AiL(1405)1": "-0.039521 ± 0.052576", + "ArL(1405)2": "-1.811842 ± 0.039381", + "AiL(1405)2": "1.625622 ± 0.034881", + "ArL(1520)1": "0.191708 ± 0.004957", + "AiL(1520)1": "0.167003 ± 0.005131", + "ArL(1520)2": "0.115638 ± 0.006304", + "AiL(1520)2": "0.242542 ± 0.004908", + "ArL(1600)1": "-0.134004 ± 0.032490", + "AiL(1600)1": "-0.628117 ± 0.032433", + "ArL(1600)2": "1.712637 ± 0.029718", + "AiL(1600)2": "-1.128953 ± 0.032192", + "ArL(1670)1": "0.009197 ± 0.004825", + "AiL(1670)1": "-0.200899 ± 0.003052", + "ArL(1670)2": "-0.114543 ± 0.004976", + "AiL(1670)2": "-0.167795 ± 0.005083", + "ArL(1690)1": "-0.378966 ± 0.012153", + "AiL(1690)1": "0.331114 ± 0.009513", + "ArL(1690)2": "-0.286413 ± 0.009060", + "AiL(1690)2": "0.247902 ± 0.011125", + "ArL(2000)1": "2.807070 ± 0.049100", + "AiL(2000)1": "0.071483 ± 0.066689", + "ArL(2000)2": "-0.890941 ± 0.023480", + "AiL(2000)2": "-0.087397 ± 0.028816", + "ArD(1232)1": "-1.499936 ± 0.054859", + "AiD(1232)1": "3.161477 ± 0.040932", + "ArD(1232)2": "-0.586497 ± 0.031930", + "AiD(1232)2": "0.838665 ± 0.019560", + "ArD(1600)1": "1.595876 ± 0.050522", + "AiD(1600)1": "-2.460301 ± 0.074787", + "ArD(1600)2": "-0.432377 ± 0.049114", + "AiD(1600)2": "0.688543 ± 0.027446", + "ArD(1700)1": "3.161722 ± 0.068890", + "AiD(1700)1": "-2.292309 ± 0.099002", + "ArD(1700)2": "0.179027 ± 0.031955", + "AiD(1700)2": "-0.298638 ± 0.021052" + } + } + ] } diff --git a/julia/notebooks/model0.jl b/julia/notebooks/model0.jl index 313c0c84..3dca28b4 100644 --- a/julia/notebooks/model0.jl +++ b/julia/notebooks/model0.jl @@ -14,16 +14,16 @@ begin using JSON using Plots using RecipesBase - # + # using LinearAlgebra using Parameters - # + # using ThreeBodyDecay using ThreeBodyDecay.PartialWaveFunctions end # ╔═╡ e04157cc-7697-41e5-8e4e-3556332929ef -theme(:wong2, frame=:box, grid=false, minorticks=true, +theme(:wong2, frame=:box, grid=false, minorticks=true, guidefontvalign=:top, guidefonthalign=:right, xlim=(:auto,:auto), ylim=(:auto,:auto), lw=1, lab="", colorbar=false) @@ -71,9 +71,9 @@ begin pars::T l::Int minL::Int - # + # name::String - # + # m1::Float64 m2::Float64 mk::Float64 @@ -102,9 +102,9 @@ begin pars::T l::Int minL::Int - # + # name::String - # + # m1::Float64 m2::Float64 mk::Float64 @@ -113,7 +113,7 @@ begin BuggBreitWignerMinL(pars::T; kw...) where T <: NamedTuple{X, Tuple{Float64, Float64}} where X = BuggBreitWignerMinL(; pars=merge(pars, (γ=1.1,)), kw...) - # + # function (BW::BuggBreitWignerMinL)(s,σ) σA = mK^2-mπ^2/2 m, Γ₀, γ = BW.pars @@ -135,7 +135,7 @@ begin minL::Int # name::String - # + # m1::Float64 m2::Float64 mk::Float64 @@ -171,7 +171,7 @@ function buildchain(key, dict) @unpack mass, width, lineshape = dict # k = Dict('K'=>1,'D'=>3,'L'=>2)[first(key)] - # + # parity = dict["jp"][end] two_j = Int(2*eval(Meta.parse(dict["jp"][1:end-2]))) # @@ -191,7 +191,7 @@ function buildchain(key, dict) length(ls) != 1 && error("wierd") onlyls = first(ls) minLS = first(sort(vcat(LS...); by=x->x[1])) - # + # code = quote decay_chain( k=$k, @@ -201,7 +201,7 @@ function buildchain(key, dict) l = $(onlyls[1]), minL = $(minLS[1]), m1=$(ms[i]), m2=$(ms[j]), mk=$(ms[k]), m0=$(ms[0])), - two_LS = $(minLS .|> x2), + two_LS = $(minLS .|> x2), two_ls = $(onlyls .|> x2), two_s=$two_j, tbs=$tbs, ) From b178acde5a0f88b19117419b7d03f2b885ee8cd5 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 22:59:48 +0200 Subject: [PATCH 02/15] fix typos --- .cspell.json | 44 ++++++++++++++++++++++++++++++++------- .cspell/julia.txt | 12 +++++++++++ .cspell/physics.txt | 9 ++++++++ .cspell/this-project.txt | 3 +++ .vscode/settings.json | 3 +++ README.md | 16 +++++++------- julia/notebooks/model0.jl | 4 +++- 7 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 .cspell/julia.txt create mode 100644 .cspell/physics.txt create mode 100644 .cspell/this-project.txt diff --git a/.cspell.json b/.cspell.json index 01d79980..97019330 100644 --- a/.cspell.json +++ b/.cspell.json @@ -1,5 +1,29 @@ { - "version": "0.2", + "allowCompoundWords": false, + "dictionaries": [ + "physics", + "this-project" + ], + "dictionaryDefinitions": [ + { + "addWords": true, + "name": "julia", + "path": "./.cspell/julia.txt" + }, + { + "addWords": true, + "name": "physics", + "path": "./.cspell/physics.txt" + }, + { + "addWords": true, + "name": "this-project", + "path": "./.cspell/this-project.txt" + } + ], + "enableFiletypes": [ + "julia" + ], "flagWords": [ "analyse", "colour", @@ -15,6 +39,7 @@ ], "ignorePaths": [ "**/.cspell.json", + ".cspell/*.txt", ".gitignore", ".pre-commit-config.yaml", ".prettierignore", @@ -26,11 +51,16 @@ "pyproject.toml", "setup.cfg" ], - "language": "en-GB", - "words": [ - "ComPWA", - "Conda", - "Dalitz" + "language": "en-US", + "overrides": [ + { + "allowCompoundWords": true, + "dictionaries": [ + "julia" + ], + "filename": "**/*.jl", + "languageId": "julia" + } ], - "ignoreWords": [] + "version": "0.2" } diff --git a/.cspell/julia.txt b/.cspell/julia.txt new file mode 100644 index 00000000..06918b86 --- /dev/null +++ b/.cspell/julia.txt @@ -0,0 +1,12 @@ +colorbar +findfirst +guidefonthalign +guidefontvalign +joinpath +lims +minorticks +readjson +struct +vcat +xlim +ylim diff --git a/.cspell/physics.txt b/.cspell/physics.txt new file mode 100644 index 00000000..4aecac58 --- /dev/null +++ b/.cspell/physics.txt @@ -0,0 +1,9 @@ +Breit +Bugg +Dalitz +Flatté +helicity +Kállën +lineshape +lineshapes +ls diff --git a/.cspell/this-project.txt b/.cspell/this-project.txt new file mode 100644 index 00000000..8e96df94 --- /dev/null +++ b/.cspell/this-project.txt @@ -0,0 +1,3 @@ +ComPWA +Conda +ifhyphenaverage diff --git a/.vscode/settings.json b/.vscode/settings.json index 9a011cdd..457b36bb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,6 +18,9 @@ }, "cSpell.enabled": true, "editor.formatOnSave": true, + "files.associations": { + ".cspell/*.txt": "plaintext" + }, "python.analysis.autoImportCompletions": false, "python.analysis.diagnosticMode": "workspace", "python.formatting.provider": "black", diff --git a/README.md b/README.md index aeb6db58..77f77c01 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Polarization sensitivity in Λc → pπK + + [![GPLv3+ license](https://img.shields.io/badge/License-GPLv3+-blue.svg)](https://www.gnu.org/licenses/gpl-3.0-standalone.html) This repository originates from [ComPWA/compwa-org#129](https://github.com/ComPWA/compwa-org/pull/129). It formulates a symbolic amplitude model for the decay Λc → pπK that is aligned with [Dalitz-plot decomposition](https://journals.aps.org/prd/abstract/10.1103/PhysRevD.101.034033) and computes @@ -23,18 +25,18 @@ For more information about local Python set-up, see [here](https://compwa-org.re ## Data -The parameters of the LHCb fit are storred in the json files in the folder [`data/`](data/) +The parameters of the LHCb fit are stored in the json files in the folder [`data/`](data/) ### Content of the [`data/isobars.json`](data/isobars.json) -The file proveds the description of the characteristics and parameters of the resonances in the decay chains. +The file provides the description of the characteristics and parameters of the resonances in the decay chains. The resonances are named by `L(XXXX)`, `D(XXXX)`, and `K(XXXX)` for the Lambda**, Delta**, and K\*\* states. -The data stucture has the fieds `jp`, `mass`, `width`, and `lineshape`. +The data structure has the fields `jp`, `mass`, `width`, and `lineshape`. There are three lineshape types used: - "BreitWignerMinL": the standard parametrization with isobar spectator orbital momentum set to its minimal value -- "BuggBreitWignerMinL": the mass-dependent width incorporates Adler zero and exponential formfactor +- "BuggBreitWignerMinL": the mass-dependent width incorporates Adler zero and exponential form factor - "Flatte1405": the mass-dependent width includes two terms, pK and Sigma pi with the same Gamma0 For most of the resonances, the width field gives a fixed value. @@ -43,10 +45,10 @@ Its exact value is to be found in the list of parameters ### Content of the [`data/modelparameters.json`](data/modelparameters.json) -The fit results is storred in the `first(file["modelstudies"])`. The dictionary contains the list of all floating parameters. +The fit results is stored in the `first(file["modelstudies"])`. The dictionary contains the list of all floating parameters. `ArF(XXXX)N` and `AiF(XXXX)N` are the real and imaginary part of the coupling `K^{Lc->Fx}`, where -- the `F` stends for `D`,`L`, or `K`. +- the `F` stands for `D`,`L`, or `K`. - the `N` numbers the helicity indices with the following mapping ``` @@ -66,4 +68,4 @@ K(XXXX)3 -> K^{Lc->Lpi}_{+1,-1/2} K(XXXX)4 -> K^{Lc->Lpi}_{ 0,-1/2} ``` -The default-fit result is storred in as the first item, `first(file["modelstudies"])`. +The default-fit result is stored in as the first item, `first(file["modelstudies"])`. diff --git a/julia/notebooks/model0.jl b/julia/notebooks/model0.jl index 3dca28b4..ea776144 100644 --- a/julia/notebooks/model0.jl +++ b/julia/notebooks/model0.jl @@ -1,6 +1,8 @@ ### A Pluto.jl notebook ### # v0.19.3 +# cspell:ignore onlyls Xlineshape + using Markdown using InteractiveUtils @@ -188,7 +190,7 @@ function buildchain(key, dict) jp(tbs.two_js[i] // 2, parities[i]), jp(tbs.two_js[j] // 2, parities[j]); jp=jp(two_j // 2, parity)) - length(ls) != 1 && error("wierd") + length(ls) != 1 && error("weird") onlyls = first(ls) minLS = first(sort(vcat(LS...); by=x->x[1])) # From a0cb998ffb820a9f2777651cf4ce5bc329c8b920 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 22:59:49 +0200 Subject: [PATCH 03/15] facilitate Julia installation --- .vscode/extensions.json | 1 + .vscode/settings.json | 3 +++ README.md | 13 +++++++++++++ environment.yml | 2 ++ 4 files changed, 19 insertions(+) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c5b2383c..9a8854d3 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,6 +5,7 @@ "editorconfig.editorconfig", "esbenp.prettier-vscode", "github.vscode-pull-request-github", + "julialang.language-julia", "ms-python.python", "ms-python.vscode-pylance", "ms-vsliveshare.vsliveshare", diff --git a/.vscode/settings.json b/.vscode/settings.json index 457b36bb..74199cf1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,9 @@ "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[julia]": { + "editor.defaultFormatter": "julialang.language-julia" + }, "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, diff --git a/README.md b/README.md index 77f77c01..0c7dd866 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,19 @@ pre-commit install For more information about local Python set-up, see [here](https://compwa-org.readthedocs.io/develop.html#local-set-up). +Conda also installs [Julia](https://julialang.org). In VSCode, you'll need to point to Julia's executable path and it's best to do this by [defining an overarching workspace](https://compwa-org.readthedocs.io/develop.html#visual-studio-code). An example: + + + +```json +{ + "julia.executablePath": "/home/${env:USER}/miniconda3/envs/polarization/bin/julia", + "python.terminal.activateEnvironment": false // optional +} +``` + +The second option is to avoid that the Conda environment is activated when launching the Julia REPL. + ## Data The parameters of the LHCb fit are stored in the json files in the folder [`data/`](data/) diff --git a/environment.yml b/environment.yml index 7cbe665c..808a2ace 100644 --- a/environment.yml +++ b/environment.yml @@ -1,7 +1,9 @@ name: polarization channels: - defaults + - conda-forge dependencies: + - julia==1.7.2 - python==3.8.* - pip - pip: From 20e5fb38fc97e9a62b95cdc282be5a8781b35a6a Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 22:59:50 +0200 Subject: [PATCH 04/15] format Julia documents --- julia/notebooks/model0.jl | 286 +++++++++++++++++++------------------- 1 file changed, 143 insertions(+), 143 deletions(-) diff --git a/julia/notebooks/model0.jl b/julia/notebooks/model0.jl index ea776144..a4f671ad 100644 --- a/julia/notebooks/model0.jl +++ b/julia/notebooks/model0.jl @@ -8,35 +8,35 @@ using InteractiveUtils # ╔═╡ dea88954-c7b2-11ec-1a3d-717739cfd08b begin - cd(joinpath(@__DIR__,"..")) - using Pkg - Pkg.activate(".") - Pkg.instantiate() - # - using JSON - using Plots - using RecipesBase - # - using LinearAlgebra - using Parameters - # - using ThreeBodyDecay - using ThreeBodyDecay.PartialWaveFunctions + cd(joinpath(@__DIR__, "..")) + using Pkg + Pkg.activate(".") + Pkg.instantiate() + # + using JSON + using Plots + using RecipesBase + # + using LinearAlgebra + using Parameters + # + using ThreeBodyDecay + using ThreeBodyDecay.PartialWaveFunctions end # ╔═╡ e04157cc-7697-41e5-8e4e-3556332929ef theme(:wong2, frame=:box, grid=false, minorticks=true, - guidefontvalign=:top, guidefonthalign=:right, - xlim=(:auto,:auto), ylim=(:auto,:auto), - lw=1, lab="", colorbar=false) + guidefontvalign=:top, guidefonthalign=:right, + xlim=(:auto, :auto), ylim=(:auto, :auto), + lw=1, lab="", colorbar=false) # ╔═╡ 24d2ac10-b474-472d-827b-c353f44d9e8c begin - const mK = 0.493 - const mπ = 0.140 - const mp = 0.938 - const mΣ = 1.18925 - const mΛc = 2.28 + const mK = 0.493 + const mπ = 0.140 + const mp = 0.938 + const mΣ = 1.18925 + const mΛc = 2.28 end # ╔═╡ cfe26457-a531-4fc4-8eee-34d7f1a904ba @@ -44,12 +44,12 @@ const ms = ThreeBodyMasses(m1=mp, m2=mπ, m3=mK, m0=mΛc) # ╔═╡ d227ae5a-d779-4fa2-8483-8842b4f66563 function readjson(path) - f = read(path, String) - return JSON.parse(f) + f = read(path, String) + return JSON.parse(f) end # ╔═╡ 17c5b1c5-006f-4924-9e17-c2278985492c -const tbs = ThreeBodySystem(ms, ThreeBodySpins(1,0,0; two_h0=1)) +const tbs = ThreeBodySystem(ms, ThreeBodySpins(1, 0, 0; two_h0=1)) # ╔═╡ c216abd3-f7c8-4fe6-8559-0ebbf04965cb const parities = ['+', '-', '-', '±'] @@ -60,7 +60,7 @@ md""" """ # ╔═╡ 8c091c8c-f550-4ea6-b4ad-11aa4027468c -breakup(m²,m1²,m2²) = sqrt(Kallen(m²,m1²,m2²)) +breakup(m², m1², m2²) = sqrt(Kallen(m², m1², m2²)) # ╔═╡ 01217062-003d-4496-b0fe-f54d32fbb2bf md""" @@ -69,28 +69,28 @@ md""" # ╔═╡ 7a5a7e49-5454-4021-a698-766b1242f757 begin - @with_kw struct BreitWignerMinL{T} - pars::T - l::Int - minL::Int - # - name::String - # - m1::Float64 - m2::Float64 - mk::Float64 - m0::Float64 - end - BreitWignerMinL(pars::T; kw...) where T = BreitWignerMinL(; pars, kw...) - function (BW::BreitWignerMinL)(s,σ) - m,Γ₀ = BW.pars - @unpack l, minL = BW - @unpack m1,m2,mk,m0 = BW - p,p0 = breakup(σ,m1^2,m2^2), breakup(m^2,m1^2,m2^2) - q,q0 = breakup(s,σ,mk^2), breakup(s,m^2,mk^2) - Γ = Γ₀*(p/p0)^(2l+1)*m/sqrt(σ) # should also have F - 1/(m^2-σ-1im*m*Γ) * (p/p0)^l * (q/q0)^minL # should also have F - end + @with_kw struct BreitWignerMinL{T} + pars::T + l::Int + minL::Int + # + name::String + # + m1::Float64 + m2::Float64 + mk::Float64 + m0::Float64 + end + BreitWignerMinL(pars::T; kw...) where {T} = BreitWignerMinL(; pars, kw...) + function (BW::BreitWignerMinL)(s, σ) + m, Γ₀ = BW.pars + @unpack l, minL = BW + @unpack m1, m2, mk, m0 = BW + p, p0 = breakup(σ, m1^2, m2^2), breakup(m^2, m1^2, m2^2) + q, q0 = breakup(s, σ, mk^2), breakup(s, m^2, mk^2) + Γ = Γ₀ * (p / p0)^(2l + 1) * m / sqrt(σ) # should also have F + 1 / (m^2 - σ - 1im * m * Γ) * (p / p0)^l * (q / q0)^minL # should also have F + end end # ╔═╡ 60a8cb20-6041-494d-9523-397ce329c7b6 @@ -100,28 +100,28 @@ md""" # ╔═╡ 94c6394f-d00c-462c-ae29-ea107b66e191 begin - @with_kw struct BuggBreitWignerMinL{T} - pars::T - l::Int - minL::Int - # - name::String - # - m1::Float64 - m2::Float64 - mk::Float64 - m0::Float64 - end - BuggBreitWignerMinL(pars::T; kw...) where - T <: NamedTuple{X, Tuple{Float64, Float64}} where X = - BuggBreitWignerMinL(; pars=merge(pars, (γ=1.1,)), kw...) - # - function (BW::BuggBreitWignerMinL)(s,σ) - σA = mK^2-mπ^2/2 - m, Γ₀, γ = BW.pars - mΓ = (σ-σA) / (m^2-σA) * Γ₀^2*exp(-γ*σ) - 1/(m^2-σ-1im*mΓ) - end + @with_kw struct BuggBreitWignerMinL{T} + pars::T + l::Int + minL::Int + # + name::String + # + m1::Float64 + m2::Float64 + mk::Float64 + m0::Float64 + end + BuggBreitWignerMinL(pars::T; kw...) where { + T<:NamedTuple{X,Tuple{Float64,Float64}}} where {X} = + BuggBreitWignerMinL(; pars=merge(pars, (γ=1.1,)), kw...) + # + function (BW::BuggBreitWignerMinL)(s, σ) + σA = mK^2 - mπ^2 / 2 + m, Γ₀, γ = BW.pars + mΓ = (σ - σA) / (m^2 - σA) * Γ₀^2 * exp(-γ * σ) + 1 / (m^2 - σ - 1im * mΓ) + end end # ╔═╡ 8baf8a30-fda8-4094-bcfd-4f48c71dc1d1 @@ -131,30 +131,30 @@ md""" # ╔═╡ 6b9a1178-7863-4493-a4fa-78676cc2695c begin - @with_kw struct Flatte1405{T} - pars::T - l::Int - minL::Int - # - name::String - # - m1::Float64 - m2::Float64 - mk::Float64 - m0::Float64 - end - # - Flatte1405(pars::T; kw...) where T = Flatte1405(; pars, kw...) - function (BW::Flatte1405)(s,σ) - m,Γ₀ = BW.pars - @unpack m1, m2 = BW - p,p0 = breakup(σ,m1^2,m2^2), breakup(m^2,m1^2,m2^2) - p′,p0′ = breakup(σ,mπ^2,mΣ^2), breakup(m^2,mp^2,mΣ^2) - Γ1 = Γ₀*(p/p0)*m/sqrt(σ) # should also have F - Γ2 = Γ₀*(p′/p0′)*m/sqrt(σ) # should also have F - Γ = Γ1+Γ2 - 1/(m^2-σ-1im*m*Γ) - end + @with_kw struct Flatte1405{T} + pars::T + l::Int + minL::Int + # + name::String + # + m1::Float64 + m2::Float64 + mk::Float64 + m0::Float64 + end + # + Flatte1405(pars::T; kw...) where {T} = Flatte1405(; pars, kw...) + function (BW::Flatte1405)(s, σ) + m, Γ₀ = BW.pars + @unpack m1, m2 = BW + p, p0 = breakup(σ, m1^2, m2^2), breakup(m^2, m1^2, m2^2) + p′, p0′ = breakup(σ, mπ^2, mΣ^2), breakup(m^2, mp^2, mΣ^2) + Γ1 = Γ₀ * (p / p0) * m / sqrt(σ) # should also have F + Γ2 = Γ₀ * (p′ / p0′) * m / sqrt(σ) # should also have F + Γ = Γ1 + Γ2 + 1 / (m^2 - σ - 1im * m * Γ) + end end # ╔═╡ 877f6aab-d0ff-44d7-9ce0-e43d895be297 @@ -164,68 +164,68 @@ md""" # ╔═╡ 469a9d3e-6c82-4cd6-afb6-5e92c481a7a2 function ifhyphenaverage(s::String) - factor = findfirst('-', s) === nothing ? 1 : 2 - eval(Meta.parse(replace(s,'-'=>'+'))) / factor + factor = findfirst('-', s) === nothing ? 1 : 2 + eval(Meta.parse(replace(s, '-' => '+'))) / factor end # ╔═╡ 680c04bb-027f-46ad-b53b-039e33dacd86 function buildchain(key, dict) - @unpack mass, width, lineshape = dict - # - k = Dict('K'=>1,'D'=>3,'L'=>2)[first(key)] - # - parity = dict["jp"][end] - two_j = Int(2*eval(Meta.parse(dict["jp"][1:end-2]))) - # - massval, widthval = ifhyphenaverage.((mass,width)) ./ 1e3 - # - LS = vcat( - [possible_ls( - jp(two_j // 2, parity), - jp(tbs.two_js[k] // 2, parities[k]); - jp=jp(tbs.two_js[0] // 2, P0)) for P0 in ['+', '-']]...) - # - i,j = ij_from_k(k) - ls = possible_ls( - jp(tbs.two_js[i] // 2, parities[i]), - jp(tbs.two_js[j] // 2, parities[j]); - jp=jp(two_j // 2, parity)) - length(ls) != 1 && error("weird") - onlyls = first(ls) - minLS = first(sort(vcat(LS...); by=x->x[1])) - # - code = quote - decay_chain( - k=$k, - Xlineshape = $(Symbol(lineshape))( - (; m=$massval, Γ=$widthval); - name = $key, - l = $(onlyls[1]), - minL = $(minLS[1]), - m1=$(ms[i]), m2=$(ms[j]), mk=$(ms[k]), m0=$(ms[0])), - two_LS = $(minLS .|> x2), - two_ls = $(onlyls .|> x2), - two_s=$two_j, tbs=$tbs, - ) - end - eval(code) - # code + @unpack mass, width, lineshape = dict + # + k = Dict('K' => 1, 'D' => 3, 'L' => 2)[first(key)] + # + parity = dict["jp"][end] + two_j = Int(2 * eval(Meta.parse(dict["jp"][1:end-2]))) + # + massval, widthval = ifhyphenaverage.((mass, width)) ./ 1e3 + # + LS = vcat( + [possible_ls( + jp(two_j // 2, parity), + jp(tbs.two_js[k] // 2, parities[k]); + jp=jp(tbs.two_js[0] // 2, P0)) for P0 in ['+', '-']]...) + # + i, j = ij_from_k(k) + ls = possible_ls( + jp(tbs.two_js[i] // 2, parities[i]), + jp(tbs.two_js[j] // 2, parities[j]); + jp=jp(two_j // 2, parity)) + length(ls) != 1 && error("weird") + onlyls = first(ls) + minLS = first(sort(vcat(LS...); by=x -> x[1])) + # + code = quote + decay_chain( + k=$k, + Xlineshape=$(Symbol(lineshape))( + (; m=$massval, Γ=$widthval); + name=$key, + l=$(onlyls[1]), + minL=$(minLS[1]), + m1=$(ms[i]), m2=$(ms[j]), mk=$(ms[k]), m0=$(ms[0])), + two_LS=$(minLS .|> x2), + two_ls=$(onlyls .|> x2), + two_s=$two_j, tbs=$tbs, + ) + end + eval(code) + # code end # ╔═╡ c034441c-95b0-409f-a3cf-2714789b2d0f -isobarsinput = readjson(joinpath("..","data","isobars.json"))["isobars"]; +isobarsinput = readjson(joinpath("..", "data", "isobars.json"))["isobars"]; # ╔═╡ b0f5c181-dcb2-48f8-a510-57eac44ca4d9 ds = [buildchain(keys, dict) for (keys, dict) in isobarsinput] # ╔═╡ cee9dc28-8048-49e7-8caf-8e07bcd884c4 let - plot(layout=grid(1,3), size=(1000,240)) - for d in ds - plot!(sp=d.k, x->abs2(d.Xlineshape(ms[0]^2,x)),lims(d.k,ms)..., - lab=d.Xlineshape.name) - end - plot!() + plot(layout=grid(1, 3), size=(1000, 240)) + for d in ds + plot!(sp=d.k, x -> abs2(d.Xlineshape(ms[0]^2, x)), lims(d.k, ms)..., + lab=d.Xlineshape.name) + end + plot!() end # ╔═╡ 3971792d-a41f-4792-92b7-8b36e51f70b1 From 763f9c6c7e9c69002390521281c3cccf58f06f35 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 22:59:51 +0200 Subject: [PATCH 05/15] convert Julia Pluto book to Jupyter --- .cspell.json | 2 +- .cspell/this-project.txt | 1 + .pre-commit-config.yaml | 21 +++ julia/notebooks/model0.ipynb | 343 +++++++++++++++++++++++++++++++++++ 4 files changed, 366 insertions(+), 1 deletion(-) create mode 100644 julia/notebooks/model0.ipynb diff --git a/.cspell.json b/.cspell.json index 97019330..d9ec5428 100644 --- a/.cspell.json +++ b/.cspell.json @@ -58,7 +58,7 @@ "dictionaries": [ "julia" ], - "filename": "**/*.jl", + "filename": "**/*.{ipynb,jl}", "languageId": "julia" } ], diff --git a/.cspell/this-project.txt b/.cspell/this-project.txt index 8e96df94..67971d4f 100644 --- a/.cspell/this-project.txt +++ b/.cspell/this-project.txt @@ -1,3 +1,4 @@ ComPWA Conda ifhyphenaverage +nbformat diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e4aade75..66aee096 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,6 +34,27 @@ repos: hooks: - id: isort + - repo: https://github.com/kynan/nbstripout + rev: 0.5.0 + hooks: + - id: nbstripout + args: + - --extra-keys + - | + cell.metadata.code_folding + cell.metadata.id + metadata.celltoolbar + metadata.colab.name + metadata.colab.provenance + metadata.interpreter + metadata.notify_time + metadata.toc + metadata.toc-autonumbering + metadata.toc-showcode + metadata.toc-showmarkdowntxt + metadata.toc-showtags + metadata.varInspector + - repo: https://github.com/pre-commit/mirrors-prettier rev: v2.6.2 hooks: diff --git a/julia/notebooks/model0.ipynb b/julia/notebooks/model0.ipynb new file mode 100644 index 00000000..a32afdb5 --- /dev/null +++ b/julia/notebooks/model0.ipynb @@ -0,0 +1,343 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Model $\\Lambda_c \\to p \\pi K$\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using Markdown\n", + "using InteractiveUtils" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "begin\n", + " cd(joinpath(@__DIR__, \"..\"))\n", + " using Pkg\n", + " Pkg.activate(\".\")\n", + " Pkg.instantiate()\n", + " #\n", + " using JSON\n", + " using Plots\n", + " using RecipesBase\n", + " #\n", + " using LinearAlgebra\n", + " using Parameters\n", + " #\n", + " using ThreeBodyDecay\n", + " using ThreeBodyDecay.PartialWaveFunctions\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "theme(:wong2, frame=:box, grid=false, minorticks=true,\n", + " guidefontvalign=:top, guidefonthalign=:right,\n", + " xlim=(:auto, :auto), ylim=(:auto, :auto),\n", + " lw=1, lab=\"\", colorbar=false)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "begin\n", + " const mK = 0.493\n", + " const mπ = 0.140\n", + " const mp = 0.938\n", + " const mΣ = 1.18925\n", + " const mΛc = 2.28\n", + "end\n", + "\n", + "const ms = ThreeBodyMasses(m1=mp, m2=mπ, m3=mK, m0=mΛc)\n", + "const tbs = ThreeBodySystem(ms, ThreeBodySpins(1, 0, 0; two_h0=1))\n", + "const parities = ['+', '-', '-', '±']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "function readjson(path)\n", + " f = read(path, String)\n", + " return JSON.parse(f)\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lineshapes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "breakup(m², m1², m2²) = sqrt(Kallen(m², m1², m2²))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `BreitWignerMinL`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "begin\n", + " @with_kw struct BreitWignerMinL{T}\n", + " pars::T\n", + " l::Int\n", + " minL::Int\n", + " #\n", + " name::String\n", + " #\n", + " m1::Float64\n", + " m2::Float64\n", + " mk::Float64\n", + " m0::Float64\n", + " end\n", + " BreitWignerMinL(pars::T; kw...) where {T} = BreitWignerMinL(; pars, kw...)\n", + " function (BW::BreitWignerMinL)(s, σ)\n", + " m, Γ₀ = BW.pars\n", + " @unpack l, minL = BW\n", + " @unpack m1, m2, mk, m0 = BW\n", + " p, p0 = breakup(σ, m1^2, m2^2), breakup(m^2, m1^2, m2^2)\n", + " q, q0 = breakup(s, σ, mk^2), breakup(s, m^2, mk^2)\n", + " Γ = Γ₀ * (p / p0)^(2l + 1) * m / sqrt(σ) # should also have F\n", + " 1 / (m^2 - σ - 1im * m * Γ) * (p / p0)^l * (q / q0)^minL # should also have F\n", + " end\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `BuggBreitWignerMinL`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "begin\n", + " @with_kw struct BuggBreitWignerMinL{T}\n", + " pars::T\n", + " l::Int\n", + " minL::Int\n", + " #\n", + " name::String\n", + " #\n", + " m1::Float64\n", + " m2::Float64\n", + " mk::Float64\n", + " m0::Float64\n", + " end\n", + " BuggBreitWignerMinL(pars::T; kw...) where {\n", + " T<:NamedTuple{X,Tuple{Float64,Float64}}} where {X} =\n", + " BuggBreitWignerMinL(; pars=merge(pars, (γ=1.1,)), kw...)\n", + " #\n", + " function (BW::BuggBreitWignerMinL)(s, σ)\n", + " σA = mK^2 - mπ^2 / 2\n", + " m, Γ₀, γ = BW.pars\n", + " mΓ = (σ - σA) / (m^2 - σA) * Γ₀^2 * exp(-γ * σ)\n", + " 1 / (m^2 - σ - 1im * mΓ)\n", + " end\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Flatte1405`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "begin\n", + " @with_kw struct Flatte1405{T}\n", + " pars::T\n", + " l::Int\n", + " minL::Int\n", + " #\n", + " name::String\n", + " #\n", + " m1::Float64\n", + " m2::Float64\n", + " mk::Float64\n", + " m0::Float64\n", + " end\n", + " #\n", + " Flatte1405(pars::T; kw...) where {T} = Flatte1405(; pars, kw...)\n", + " function (BW::Flatte1405)(s, σ)\n", + " m, Γ₀ = BW.pars\n", + " @unpack m1, m2 = BW\n", + " p, p0 = breakup(σ, m1^2, m2^2), breakup(m^2, m1^2, m2^2)\n", + " p′, p0′ = breakup(σ, mπ^2, mΣ^2), breakup(m^2, mp^2, mΣ^2)\n", + " Γ1 = Γ₀ * (p / p0) * m / sqrt(σ) # should also have F\n", + " Γ2 = Γ₀ * (p′ / p0′) * m / sqrt(σ) # should also have F\n", + " Γ = Γ1 + Γ2\n", + " 1 / (m^2 - σ - 1im * m * Γ)\n", + " end\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parsing the input\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "function ifhyphenaverage(s::String)\n", + " factor = findfirst('-', s) === nothing ? 1 : 2\n", + " eval(Meta.parse(replace(s, '-' => '+'))) / factor\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "function buildchain(key, dict)\n", + " @unpack mass, width, lineshape = dict\n", + " #\n", + " k = Dict('K' => 1, 'D' => 3, 'L' => 2)[first(key)]\n", + " #\n", + " parity = dict[\"jp\"][end]\n", + " two_j = Int(2 * eval(Meta.parse(dict[\"jp\"][1:end-2])))\n", + " #\n", + " massval, widthval = ifhyphenaverage.((mass, width)) ./ 1e3\n", + " #\n", + " LS = vcat(\n", + " [possible_ls(\n", + " jp(two_j // 2, parity),\n", + " jp(tbs.two_js[k] // 2, parities[k]);\n", + " jp=jp(tbs.two_js[0] // 2, P0)) for P0 in ['+', '-']]...)\n", + " #\n", + " i, j = ij_from_k(k)\n", + " ls = possible_ls(\n", + " jp(tbs.two_js[i] // 2, parities[i]),\n", + " jp(tbs.two_js[j] // 2, parities[j]);\n", + " jp=jp(two_j // 2, parity))\n", + " length(ls) != 1 && error(\"weird\")\n", + " onlyls = first(ls)\n", + " minLS = first(sort(vcat(LS...); by=x -> x[1]))\n", + " #\n", + " code = quote\n", + " decay_chain(\n", + " k=$k,\n", + " Xlineshape=$(Symbol(lineshape))(\n", + " (; m=$massval, Γ=$widthval);\n", + " name=$key,\n", + " l=$(onlyls[1]),\n", + " minL=$(minLS[1]),\n", + " m1=$(ms[i]), m2=$(ms[j]), mk=$(ms[k]), m0=$(ms[0])),\n", + " two_LS=$(minLS .|> x2),\n", + " two_ls=$(onlyls .|> x2),\n", + " two_s=$two_j, tbs=$tbs,\n", + " )\n", + " end\n", + " eval(code)\n", + " # code\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "isobarsinput = readjson(joinpath(\"..\", \"data\", \"isobars.json\"))[\"isobars\"];" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ds = [buildchain(keys, dict) for (keys, dict) in isobarsinput]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "let\n", + " plot(layout=grid(1, 3), size=(1000, 240))\n", + " for d in ds\n", + " plot!(sp=d.k, x -> abs2(d.Xlineshape(ms[0]^2, x)), lims(d.k, ms)...,\n", + " lab=d.Xlineshape.name)\n", + " end\n", + " plot!()\n", + "end" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.7.2", + "language": "julia", + "name": "julia-1.7" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.7.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 64b5f6510e2019f124d8f58bc9cf9cb83a968878 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 23:13:48 +0200 Subject: [PATCH 06/15] import TR-018 from ComPWA/compwa-org#129 --- .cspell.json | 28 +- .cspell/latex.txt | 2 + .cspell/physics.txt | 4 + .cspell/python.txt | 28 + .cspell/this-project.txt | 3 + .editorconfig | 3 + .pre-commit-config.yaml | 11 + docs/lambda-decay.ipynb | 1766 ++++++++++++++++++++++++++++++++++++++ pyproject.toml | 13 + setup.cfg | 20 +- tox.ini | 25 + 11 files changed, 1898 insertions(+), 5 deletions(-) create mode 100644 .cspell/latex.txt create mode 100644 .cspell/python.txt create mode 100644 docs/lambda-decay.ipynb create mode 100644 tox.ini diff --git a/.cspell.json b/.cspell.json index d9ec5428..34b0949f 100644 --- a/.cspell.json +++ b/.cspell.json @@ -10,11 +10,21 @@ "name": "julia", "path": "./.cspell/julia.txt" }, + { + "addWords": true, + "name": "latex", + "path": "./.cspell/latex.txt" + }, { "addWords": true, "name": "physics", "path": "./.cspell/physics.txt" }, + { + "addWords": true, + "name": "python", + "path": "./.cspell/python.txt" + }, { "addWords": true, "name": "this-project", @@ -49,17 +59,29 @@ "Project.toml", "data/**.json", "pyproject.toml", - "setup.cfg" + "pytest.ini", + "setup.cfg", + "tox.ini" ], "language": "en-US", "overrides": [ { "allowCompoundWords": true, "dictionaries": [ - "julia" + "julia", + "latex" ], - "filename": "**/*.{ipynb,jl}", + "filename": "**/*.jl", "languageId": "julia" + }, + { + "allowCompoundWords": true, + "dictionaries": [ + "julia", + "latex", + "python" + ], + "filename": "**/*.ipynb" } ], "version": "0.2" diff --git a/.cspell/latex.txt b/.cspell/latex.txt new file mode 100644 index 00000000..0dcdb9be --- /dev/null +++ b/.cspell/latex.txt @@ -0,0 +1,2 @@ +eqnarray +mathrm diff --git a/.cspell/physics.txt b/.cspell/physics.txt index 4aecac58..4c5649dd 100644 --- a/.cspell/physics.txt +++ b/.cspell/physics.txt @@ -1,9 +1,13 @@ +Blatt Breit Bugg Dalitz Flatté +helicities helicity Kállën +Källén lineshape lineshapes ls +Weisskopf diff --git a/.cspell/python.txt b/.cspell/python.txt new file mode 100644 index 00000000..6cbe7ada --- /dev/null +++ b/.cspell/python.txt @@ -0,0 +1,28 @@ +arange +clim +cmap +elif +functools +imag +ipykernel +ipython +ipywidgets +isinstance +itertools +kwargs +nbconvert +ncols +nrows +numpy +pcolormesh +pygments +pyplot +qrules +sharey +sympify +sympy +vmax +vmin +xlabel +xreplace +ylabel diff --git a/.cspell/this-project.txt b/.cspell/this-project.txt index 67971d4f..32bb2b4c 100644 --- a/.cspell/this-project.txt +++ b/.cspell/this-project.txt @@ -1,4 +1,7 @@ ComPWA Conda +heli ifhyphenaverage +msigma nbformat +phsp diff --git a/.editorconfig b/.editorconfig index 6a2a36a6..08d1a272 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,3 +12,6 @@ indent_style = tab [*.{py,toml}] indent_size = 4 + +[setup.cfg] +indent_size = 4 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 66aee096..19f33a31 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,6 +34,17 @@ repos: hooks: - id: isort + - repo: https://github.com/nbQA-dev/nbQA + rev: 1.3.1 + hooks: + - id: nbqa-black + additional_dependencies: + - black>=22.1.0 + - id: nbqa-isort + - id: nbqa-pyupgrade + args: + - --py37-plus + - repo: https://github.com/kynan/nbstripout rev: 0.5.0 hooks: diff --git a/docs/lambda-decay.ipynb b/docs/lambda-decay.ipynb new file mode 100644 index 00000000..efa9b1f6 --- /dev/null +++ b/docs/lambda-decay.ipynb @@ -0,0 +1,1766 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Polarization sensitivity in $\\Lambda_c \\to p \\pi K$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_This notebook originates from [ComPWA/compwa-org#129](https://github.com/ComPWA/compwa-org/pull/129) [[TR-018](https://compwa-org--129.org.readthedocs.build/report/018.html)], [`625e50c`](https://github.com/ComPWA/compwa-org/pull/129/commits/94ceb51)._" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "from __future__ import annotations\n", + "\n", + "import itertools\n", + "import logging\n", + "from functools import partial\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import qrules\n", + "import sympy as sp\n", + "from ampform.sympy import (\n", + " PoolSum,\n", + " UnevaluatedExpression,\n", + " create_expression,\n", + " implement_doit_method,\n", + " make_commutative,\n", + ")\n", + "from attrs import frozen\n", + "from IPython.display import HTML, Image, Math, display\n", + "from ipywidgets import Button, Combobox, HBox, HTMLMath, Tab, VBox, interactive_output\n", + "from matplotlib import cm\n", + "from matplotlib.colors import LogNorm\n", + "from qrules.particle import Particle\n", + "from symplot import create_slider\n", + "from sympy.core.symbol import Str\n", + "from sympy.physics.matrices import msigma\n", + "from sympy.physics.quantum.spin import Rotation as Wigner\n", + "from tensorwaves.data.transform import SympyDataTransformer\n", + "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", + "\n", + "LOGGER = logging.getLogger()\n", + "LOGGER.setLevel(logging.ERROR)\n", + "\n", + "PDG = qrules.load_pdg()\n", + "\n", + "\n", + "def display_definitions(definitions: dict[sp.Symbol, sp.Expr]) -> None:\n", + " latex = R\"\\begin{array}{rcl}\" + \"\\n\"\n", + " for symbol, expr in definitions.items():\n", + " symbol = sp.sympify(symbol)\n", + " expr = sp.sympify(expr)\n", + " lhs = sp.latex(symbol)\n", + " rhs = sp.latex(expr)\n", + " latex += Rf\" {lhs} & = & {rhs} \\\\\" + \"\\n\"\n", + " latex += R\"\\end{array}\"\n", + " display(Math(latex))\n", + "\n", + "\n", + "def display_doit(\n", + " expr: UnevaluatedExpression, deep=False, terms_per_line: int = 10\n", + ") -> None:\n", + " latex = sp.multiline_latex(\n", + " lhs=expr,\n", + " rhs=expr.doit(deep=deep),\n", + " terms_per_line=terms_per_line,\n", + " environment=\"eqnarray\",\n", + " )\n", + " display(Math(latex))\n", + "\n", + "\n", + "# hack for moving Indexed indices below superscript of the base\n", + "def _print_Indexed_latex(self, printer, *args):\n", + " base = printer._print(self.base)\n", + " indices = \", \".join(map(printer._print, self.indices))\n", + " return f\"{base}_{{{indices}}}\"\n", + "\n", + "\n", + "sp.Indexed._latex = _print_Indexed_latex" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## Amplitude model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Resonances and $LS$-scheme" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "Λc = PDG[\"Lambda(c)+\"]\n", + "p = PDG[\"p\"]\n", + "K = PDG[\"K-\"]\n", + "π = PDG[\"pi+\"]\n", + "decay_products = {\n", + " 1: (π, K),\n", + " 2: (p, K),\n", + " 3: (p, π),\n", + "}\n", + "siblings = {\n", + " 1: p,\n", + " 2: π,\n", + " 3: K,\n", + "}\n", + "chain_ids = {\n", + " 1: \"K^{**}\",\n", + " 2: R\"\\Lambda^{**}\",\n", + " 3: R\"\\Delta^{**}\",\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resonance_names = {\n", + " 1: [\"K*(892)0\"],\n", + " 2: [\"Lambda(1520)\", \"Lambda(1670)\"],\n", + " 3: [\"Delta(1232)++\"],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "@frozen\n", + "class Resonance:\n", + " particle: Particle\n", + " l_R: int\n", + " l_Λc: int\n", + "\n", + " @staticmethod\n", + " def generate_ls(particle: Particle, chain_id: int) -> Resonance:\n", + " LS_prod = generate_ls(Λc, particle, siblings[chain_id], strong=False)\n", + " LS_prod = [L for L, S in LS_prod]\n", + " LS_dec = generate_ls(particle, *decay_products[chain_id])\n", + " LS_dec = [L for L, S in LS_dec]\n", + " return Resonance(particle, l_R=min(LS_dec), l_Λc=min(LS_prod))\n", + "\n", + "\n", + "def generate_ls(\n", + " parent: Particle,\n", + " child1: Particle,\n", + " child2: Particle,\n", + " strong: bool = True,\n", + " max_L: int = 3,\n", + "):\n", + " s1 = child1.spin\n", + " s2 = child2.spin\n", + " s_values = arange(abs(s1 - s2), s1 + s2)\n", + " LS_values = set()\n", + " for S in s_values:\n", + " for L in arange(0, max_L):\n", + " if not abs(L - S) <= parent.spin <= L + S:\n", + " continue\n", + " η0, η1, η2 = [\n", + " int(parent.parity),\n", + " int(child1.parity),\n", + " int(child2.parity),\n", + " ]\n", + " if strong and η0 != η1 * η2 * (-1) ** L:\n", + " continue\n", + " LS_values.add((L, S))\n", + " return sorted(LS_values)\n", + "\n", + "\n", + "def arange(x1, x2):\n", + " spin_range = np.arange(float(x1), +float(x2) + 0.5)\n", + " return list(map(sp.Rational, spin_range))\n", + "\n", + "\n", + "resonance_particles = {\n", + " chain_id: [PDG[name] for name in names]\n", + " for chain_id, names in resonance_names.items()\n", + "}\n", + "ls_resonances = {\n", + " chain_id: [Resonance.generate_ls(particle, chain_id) for particle in particles]\n", + " for chain_id, particles in resonance_particles.items()\n", + "}\n", + "\n", + "\n", + "def jp(particle: Particle):\n", + " p = \"+\" if particle.parity > 0 else \"-\"\n", + " j = sp.Rational(particle.spin)\n", + " return Rf\"\\({j}^{p}\\)\"\n", + "\n", + "\n", + "def create_html_table_row(*items, typ=\"td\"):\n", + " items = map(lambda i: f\"<{typ}>{i}\", items)\n", + " return \"\" + \"\".join(items) + \"\\n\"\n", + "\n", + "\n", + "column_names = [\n", + " \"resonance\",\n", + " R\"\\(j^P\\)\",\n", + " R\"\\(m\\) (MeV)\",\n", + " R\"\\(\\Gamma_0\\) (MeV)\",\n", + " R\"\\(l_R\\)\",\n", + " R\"\\(l_{\\Lambda_c}^\\mathrm{min}\\)\",\n", + "]\n", + "src = \"\\n\"\n", + "src += create_html_table_row(*column_names, typ=\"th\")\n", + "for chain_id, resonance_list in ls_resonances.items():\n", + " child1, child2 = decay_products[chain_id]\n", + " for resonance in resonance_list:\n", + " src += create_html_table_row(\n", + " Rf\"\\({resonance.particle.latex} \\to\" Rf\" {child1.latex} {child2.latex}\\)\",\n", + " jp(resonance.particle),\n", + " int(1e3 * resonance.particle.mass),\n", + " int(1e3 * resonance.particle.width),\n", + " resonance.l_R,\n", + " resonance.l_Λc,\n", + " )\n", + "src += \"
\\n\"\n", + "HTML(src)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aligned amplitude" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "full-width", + "hide-input" + ] + }, + "outputs": [], + "source": [ + "A_K = sp.IndexedBase(R\"A^K\")\n", + "A_Λ = sp.IndexedBase(R\"A^{\\Lambda}\")\n", + "A_Δ = sp.IndexedBase(R\"A^{\\Delta}\")\n", + "\n", + "half = sp.S.Half\n", + "\n", + "ζ_0_11 = sp.Symbol(R\"\\zeta^0_{1(1)}\", real=True)\n", + "ζ_0_21 = sp.Symbol(R\"\\zeta^0_{2(1)}\", real=True)\n", + "ζ_0_31 = sp.Symbol(R\"\\zeta^0_{3(1)}\", real=True)\n", + "ζ_1_11 = sp.Symbol(R\"\\zeta^1_{1(1)}\", real=True)\n", + "ζ_1_21 = sp.Symbol(R\"\\zeta^1_{2(1)}\", real=True)\n", + "ζ_1_31 = sp.Symbol(R\"\\zeta^1_{3(1)}\", real=True)\n", + "\n", + "\n", + "def formulate_aligned_amplitude(λ_Λc, λ_p):\n", + " _ν = sp.Symbol(R\"\\nu^{\\prime}\", rational=True)\n", + " _λ = sp.Symbol(R\"\\lambda^{\\prime}\", rational=True)\n", + " return PoolSum(\n", + " A_K[_ν, _λ] * Wigner.d(half, λ_Λc, _ν, ζ_0_11) * Wigner.d(half, _λ, λ_p, ζ_1_11)\n", + " + A_Λ[_ν, _λ]\n", + " * Wigner.d(half, λ_Λc, _ν, ζ_0_21)\n", + " * Wigner.d(half, _λ, λ_p, ζ_1_21)\n", + " + A_Δ[_ν, _λ]\n", + " * Wigner.d(half, λ_Λc, _ν, ζ_0_31)\n", + " * Wigner.d(half, _λ, λ_p, ζ_1_31),\n", + " (_λ, [-half, +half]),\n", + " (_ν, [-half, +half]),\n", + " )\n", + "\n", + "\n", + "ν = sp.Symbol(\"nu\")\n", + "λ = sp.Symbol(\"lambda\")\n", + "formulate_aligned_amplitude(λ_Λc=ν, λ_p=λ)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dynamics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "@make_commutative\n", + "@implement_doit_method\n", + "class BlattWeisskopf(UnevaluatedExpression):\n", + " def __new__(cls, z, L, **hints):\n", + " return create_expression(cls, z, L, **hints)\n", + "\n", + " def evaluate(self):\n", + " z, L = self.args\n", + " cases = {\n", + " 0: 1,\n", + " 1: 1 / (1 + z**2),\n", + " 2: 1 / (9 + 3 * z**2 + z**4),\n", + " }\n", + " return sp.Piecewise(\n", + " *[(sp.sqrt(expr), sp.Eq(L, l_val)) for l_val, expr in cases.items()]\n", + " )\n", + "\n", + " def _latex(self, printer, *args):\n", + " z, L = map(printer._print, self.args)\n", + " return Rf\"F_{{{L}}}\\left({z}\\right)\"\n", + "\n", + "\n", + "z = sp.Symbol(\"z\", positive=True)\n", + "L = sp.Symbol(\"L\", integer=True, nonnegative=True)\n", + "latex = sp.multiline_latex(BlattWeisskopf(z, L), BlattWeisskopf(z, L).doit())\n", + "Math(latex)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "@make_commutative\n", + "@implement_doit_method\n", + "class Källén(UnevaluatedExpression):\n", + " def __new__(cls, x, y, z, **hints):\n", + " return create_expression(cls, x, y, z, **hints)\n", + "\n", + " def evaluate(self) -> sp.Expr:\n", + " x, y, z = self.args\n", + " return x**2 + y**2 + z**2 - 2 * x * y - 2 * y * z - 2 * z * x\n", + "\n", + " def _latex(self, printer, *args):\n", + " x, y, z = map(printer._print, self.args)\n", + " return Rf\"\\lambda\\left({x}, {y}, {z}\\right)\"\n", + "\n", + "\n", + "x, y, z = sp.symbols(\"x:z\")\n", + "display_doit(Källén(x, y, z))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "@make_commutative\n", + "@implement_doit_method\n", + "class P(UnevaluatedExpression):\n", + " def __new__(cls, s, mi, mj, **hints):\n", + " return create_expression(cls, s, mi, mj, **hints)\n", + "\n", + " def evaluate(self):\n", + " s, mi, mj = self.args\n", + " return sp.sqrt(Källén(s, mi**2, mj**2)) / (2 * sp.sqrt(s))\n", + "\n", + " def _latex(self, printer, *args):\n", + " s = printer._print(self.args[0])\n", + " return Rf\"p_{{{s}}}\"\n", + "\n", + "\n", + "@make_commutative\n", + "@implement_doit_method\n", + "class Q(UnevaluatedExpression):\n", + " def __new__(cls, s, m0, mk, **hints):\n", + " return create_expression(cls, s, m0, mk, **hints)\n", + "\n", + " def evaluate(self):\n", + " s, m0, mk = self.args\n", + " return sp.sqrt(Källén(s, m0**2, mk**2)) / (2 * m0) # <-- not s!\n", + "\n", + " def _latex(self, printer, *args):\n", + " s = printer._print(self.args[0])\n", + " return Rf\"q_{{{s}}}\"\n", + "\n", + "\n", + "s, m0, mi, mj, mk = sp.symbols(\"s m0 m_i:k\", nonnegative=True)\n", + "display_doit(P(s, mi, mj))\n", + "display_doit(Q(s, m0, mk))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "R = sp.Symbol(\"R\")\n", + "parameter_defaults = {\n", + " R: 5, # GeV^{-1} (length factor)\n", + "}\n", + "\n", + "\n", + "@make_commutative\n", + "@implement_doit_method\n", + "class EnergyDependentWidth(UnevaluatedExpression):\n", + " def __new__(cls, s, m0, Γ0, m1, m2, L, R):\n", + " return create_expression(cls, s, m0, Γ0, m1, m2, L, R)\n", + "\n", + " def evaluate(self):\n", + " s, m0, Γ0, m1, m2, L, R = self.args\n", + " p = P(s, m1, m2)\n", + " p0 = P(m0**2, m1, m2)\n", + " ff = BlattWeisskopf(p * R, L) ** 2\n", + " ff0 = BlattWeisskopf(p0 * R, L) ** 2\n", + " return sp.Mul(\n", + " Γ0,\n", + " (p / p0) ** (2 * L + 1),\n", + " m0 / sp.sqrt(s),\n", + " ff / ff0,\n", + " evaluate=False,\n", + " )\n", + "\n", + " def _latex(self, printer, *args) -> str:\n", + " s = printer._print(self.args[0])\n", + " return Rf\"\\Gamma\\left({s}\\right)\"\n", + "\n", + "\n", + "l_R = sp.Symbol(\"l_R\", integer=True, positive=True)\n", + "m, Γ0, m1, m2 = sp.symbols(\"m Γ0 m1 m2\", nonnegative=True)\n", + "display_doit(EnergyDependentWidth(s, m, Γ0, m1, m2, l_R, R))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "@make_commutative\n", + "@implement_doit_method\n", + "class RelativisticBreitWigner(UnevaluatedExpression):\n", + " def __new__(cls, s, m0, Γ0, m1, m2, l_R, l_Λc, R):\n", + " return create_expression(cls, s, m0, Γ0, m1, m2, l_R, l_Λc, R)\n", + "\n", + " def evaluate(self):\n", + " s, m0, Γ0, m1, m2, l_R, l_Λc, R = self.args\n", + " q = Q(s, m1, m2)\n", + " q0 = Q(m0**2, m1, m2)\n", + " p = P(s, m1, m2)\n", + " p0 = P(m0**2, m1, m2)\n", + " width = EnergyDependentWidth(s, m0, Γ0, m1, m2, l_R, R)\n", + " return sp.Mul(\n", + " (q / q0) ** l_Λc,\n", + " BlattWeisskopf(q * R, l_Λc) / BlattWeisskopf(q0 * R, l_Λc),\n", + " 1 / (m0**2 - s - sp.I * m0 * width),\n", + " (p / p0) ** l_R,\n", + " BlattWeisskopf(p * R, l_R) / BlattWeisskopf(p0 * R, l_R),\n", + " evaluate=False,\n", + " )\n", + "\n", + " def _latex(self, printer, *args) -> str:\n", + " s = printer._print(self.args[0])\n", + " return Rf\"\\mathcal{{R}}\\left({s}\\right)\"\n", + "\n", + "\n", + "l_Λc = sp.Symbol(R\"l_{\\Lambda_c}\", integer=True, positive=True)\n", + "display_doit(RelativisticBreitWigner(s, m, Γ0, m1, m2, l_R, l_Λc, R))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Decay chain amplitudes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "scroll-input", + "hide-input", + "full-width" + ] + }, + "outputs": [], + "source": [ + "def formulate_chain_amplitude(chain_id: int, λ_Λc, λ_p):\n", + " resonances = ls_resonances[chain_id]\n", + " if chain_id == 1:\n", + " return formulate_K_amplitude(λ_Λc, λ_p, resonances)\n", + " if chain_id == 2:\n", + " return formulate_Λ_amplitude(λ_Λc, λ_p, resonances)\n", + " if chain_id == 3:\n", + " return formulate_Δ_amplitude(λ_Λc, λ_p, resonances)\n", + " raise NotImplementedError\n", + "\n", + "\n", + "H_prod = sp.IndexedBase(R\"\\mathcal{H}^\\mathrm{production}\")\n", + "H_dec = sp.IndexedBase(R\"\\mathcal{H}^\\mathrm{decay}\")\n", + "\n", + "θ23 = sp.Symbol(\"theta23\", real=True)\n", + "θ31 = sp.Symbol(\"theta31\", real=True)\n", + "θ12 = sp.Symbol(\"theta12\", real=True)\n", + "\n", + "σ1, σ2, σ3 = sp.symbols(\"sigma1:4\", nonnegative=True)\n", + "m1, m2, m3 = sp.symbols(R\"m_p m_pi m_K\", nonnegative=True)\n", + "\n", + "\n", + "def formulate_K_amplitude(λ_Λc, λ_p, resonances: list[Resonance]):\n", + " τ = sp.Symbol(\"tau\", rational=True)\n", + " return sp.Add(\n", + " *[\n", + " PoolSum(\n", + " sp.KroneckerDelta(λ_Λc, τ - λ_p)\n", + " * H_prod[stringify(res), τ, λ_p]\n", + " * formulate_dynamics(res, σ1, m2, m3)\n", + " * (-1) ** (half - λ_p)\n", + " * Wigner.d(sp.Rational(res.particle.spin), τ, 0, θ23)\n", + " * H_dec[stringify(res), 0, 0],\n", + " (τ, create_spin_range(res.particle.spin)),\n", + " )\n", + " for res in resonances\n", + " ]\n", + " )\n", + "\n", + "\n", + "def formulate_Λ_amplitude(λ_Λc, λ_p, resonances: list[Resonance]):\n", + " τ = sp.Symbol(\"tau\", rational=True)\n", + " return sp.Add(\n", + " *[\n", + " PoolSum(\n", + " sp.KroneckerDelta(λ_Λc, τ)\n", + " * H_prod[stringify(res), τ, 0]\n", + " * formulate_dynamics(res, σ2, m1, m3)\n", + " * Wigner.d(sp.Rational(res.particle.spin), τ, -λ_p, θ31)\n", + " * H_dec[stringify(res), 0, λ_p]\n", + " * (-1) ** (half - λ_p),\n", + " (τ, create_spin_range(res.particle.spin)),\n", + " )\n", + " for res in resonances\n", + " ]\n", + " )\n", + "\n", + "\n", + "def formulate_Δ_amplitude(λ_Λc, λ_p, resonances: list[Resonance]):\n", + " τ = sp.Symbol(\"tau\", rational=True)\n", + " return sp.Add(\n", + " *[\n", + " PoolSum(\n", + " sp.KroneckerDelta(λ_Λc, τ)\n", + " * H_prod[stringify(res), τ, 0]\n", + " * formulate_dynamics(res, σ3, m1, m2)\n", + " * Wigner.d(sp.Rational(res.particle.spin), τ, λ_p, θ12)\n", + " * H_dec[stringify(res), λ_p, 0],\n", + " (τ, create_spin_range(res.particle.spin)),\n", + " )\n", + " for res in resonances\n", + " ]\n", + " )\n", + "\n", + "\n", + "def formulate_dynamics(decay: Resonance, s, m1, m2):\n", + " l_R = sp.Rational(decay.l_R)\n", + " l_Λc = sp.Rational(decay.l_Λc)\n", + " mass = sp.Symbol(f\"m_{{{decay.particle.latex}}}\")\n", + " width = sp.Symbol(Rf\"\\Gamma_{{{decay.particle.latex}}}\")\n", + " parameter_defaults[mass] = decay.particle.mass\n", + " parameter_defaults[width] = decay.particle.width\n", + " return RelativisticBreitWigner(s, mass, width, m1, m2, l_R, l_Λc, R)\n", + "\n", + "\n", + "def stringify(particle: Particle | Resonance) -> Str:\n", + " if isinstance(particle, Resonance):\n", + " particle = particle.particle\n", + " return Str(particle.latex)\n", + "\n", + "\n", + "def create_spin_range(j):\n", + " return arange(-j, +j)\n", + "\n", + "\n", + "display(\n", + " formulate_chain_amplitude(1, ν, λ),\n", + " formulate_chain_amplitude(2, ν, λ),\n", + " formulate_chain_amplitude(3, ν, λ),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Angle definitions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "scroll-input", + "hide-input" + ] + }, + "outputs": [], + "source": [ + "m0 = sp.Symbol(R\"m_{\\Lambda_c}\", nonnegative=True)\n", + "angles = {\n", + " θ12: sp.acos(\n", + " (\n", + " 2 * σ3 * (σ2 - m3**2 - m1**2)\n", + " - (σ3 + m1**2 - m2**2) * (m0**2 - σ3 - m3**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m3**2, σ3))\n", + " * sp.sqrt(Källén(σ3, m1**2, m2**2))\n", + " )\n", + " ),\n", + " θ23: sp.acos(\n", + " (\n", + " 2 * σ1 * (σ3 - m1**2 - m2**2)\n", + " - (σ1 + m2**2 - m3**2) * (m0**2 - σ1 - m1**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m1**2, σ1))\n", + " * sp.sqrt(Källén(σ1, m2**2, m3**2))\n", + " )\n", + " ),\n", + " θ31: sp.acos(\n", + " (\n", + " 2 * σ2 * (σ1 - m2**2 - m3**2)\n", + " - (σ2 + m3**2 - m1**2) * (m0**2 - σ2 - m2**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m2**2, σ2))\n", + " * sp.sqrt(Källén(σ2, m3**2, m1**2))\n", + " )\n", + " ),\n", + " ζ_0_11: sp.S.Zero, # = \\hat\\theta^0_{1(1)}\n", + " ζ_0_21: -sp.acos( # = -\\hat\\theta^{1(2)}\n", + " (\n", + " (m0**2 + m1**2 - σ1) * (m0**2 + m2**2 - σ2)\n", + " - 2 * m0**2 * (σ3 - m1**2 - m2**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m2**2, σ2))\n", + " * sp.sqrt(Källén(m0**2, σ1, m1**2))\n", + " )\n", + " ),\n", + " ζ_0_31: sp.acos( # = \\hat\\theta^{3(1)}\n", + " (\n", + " (m0**2 + m3**2 - σ3) * (m0**2 + m1**2 - σ1)\n", + " - 2 * m0**2 * (σ2 - m3**2 - m1**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m1**2, σ1))\n", + " * sp.sqrt(Källén(m0**2, σ3, m3**2))\n", + " )\n", + " ),\n", + " ζ_1_11: sp.S.Zero,\n", + " ζ_1_21: sp.acos(\n", + " (\n", + " 2 * m1**2 * (σ3 - m0**2 - m3**2)\n", + " + (m0**2 + m1**2 - σ1) * (σ2 - m1**2 - m3**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m1**2, σ1))\n", + " * sp.sqrt(Källén(σ2, m1**2, m3**2))\n", + " )\n", + " ),\n", + " ζ_1_31: -sp.acos( # = -\\zeta^1_{1(3)}\n", + " (\n", + " 2 * m1**2 * (σ2 - m0**2 - m2**2)\n", + " + (m0**2 + m1**2 - σ1) * (σ3 - m1**2 - m2**2)\n", + " )\n", + " / (\n", + " sp.sqrt(Källén(m0**2, m1**2, σ1))\n", + " * sp.sqrt(Källén(σ3, m1**2, m2**2))\n", + " )\n", + " ),\n", + "}\n", + "\n", + "display_definitions(angles)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "masses = {\n", + " m0: Λc.mass,\n", + " m1: p.mass,\n", + " m2: π.mass,\n", + " m3: K.mass,\n", + "}\n", + "display_definitions(masses)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Helicity coupling values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "dec_couplings = {}\n", + "for res in ls_resonances[1]:\n", + " i = stringify(res)\n", + " dec_couplings[H_dec[i, 0, 0]] = 1\n", + "for res in ls_resonances[2]:\n", + " i = stringify(res.particle)\n", + " dec_couplings[H_dec[i, 0, half]] = 1\n", + " dec_couplings[H_dec[i, 0, -half]] = (\n", + " int(res.particle.parity)\n", + " * int(K.parity)\n", + " * int(p.parity)\n", + " * (-1) ** (res.particle.spin - K.spin - p.spin)\n", + " )\n", + "for res in ls_resonances[3]:\n", + " i = stringify(res.particle)\n", + " dec_couplings[H_dec[i, half, 0]] = 1\n", + " dec_couplings[H_dec[i, -half, 0]] = (\n", + " int(res.particle.parity)\n", + " * int(p.parity)\n", + " * int(π.parity)\n", + " * (-1) ** (res.particle.spin - p.spin - π.spin)\n", + " )\n", + "parameter_defaults.update(dec_couplings)\n", + "display_definitions(dec_couplings)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "prod_couplings = {\n", + " # chain 23:\n", + " H_prod[Str(\"K^{*}(892)^{0}\"), 0, -half]: 1,\n", + " H_prod[Str(\"K^{*}(892)^{0}\"), -1, -half]: 1 - 1j,\n", + " H_prod[Str(\"K^{*}(892)^{0}\"), +1, +half]: -3 - 3j,\n", + " H_prod[Str(\"K^{*}(892)^{0}\"), 0, +half]: -1 - 4j,\n", + " #\n", + " H_prod[Str(\"K_{0}^{*}(1430)^{0}\"), 0, -half]: 1,\n", + " H_prod[Str(\"K_{0}^{*}(1430)^{0}\"), -1, -half]: 1 - 1j,\n", + " H_prod[Str(\"K_{0}^{*}(1430)^{0}\"), +1, +half]: -3 - 3j,\n", + " H_prod[Str(\"K_{0}^{*}(1430)^{0}\"), 0, +half]: -1 - 4j,\n", + " #\n", + " H_prod[Str(\"K_{2}^{*}(1430)^{0}\"), 0, -half]: 1,\n", + " H_prod[Str(\"K_{2}^{*}(1430)^{0}\"), -1, -half]: 1 - 1j,\n", + " H_prod[Str(\"K_{2}^{*}(1430)^{0}\"), +1, +half]: -3 - 3j,\n", + " H_prod[Str(\"K_{2}^{*}(1430)^{0}\"), 0, +half]: -1 - 4j,\n", + " #\n", + " # chain 31:\n", + " H_prod[Str(R\"\\Lambda(1520)\"), +half, 0]: 1.5,\n", + " H_prod[Str(R\"\\Lambda(1520)\"), -half, 0]: 0.3,\n", + " H_prod[Str(R\"\\Lambda(1670)\"), +half, 0]: -0.5 + 1j,\n", + " H_prod[Str(R\"\\Lambda(1670)\"), -half, 0]: -0.3 - 0.1j,\n", + " # chain 12:\n", + " H_prod[Str(R\"\\Delta(1232)^{++}\"), +half, 0]: -13 + 5j,\n", + " H_prod[Str(R\"\\Delta(1232)^{++}\"), -half, 0]: -7 + 3j,\n", + "}\n", + "display_definitions(prod_couplings)\n", + "couplings = dict(dec_couplings)\n", + "couplings.update(prod_couplings)\n", + "parameter_defaults.update(prod_couplings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Intensity expression" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input", + "full-width" + ] + }, + "outputs": [], + "source": [ + "def formulate_intensity(amplitude_builder):\n", + " return PoolSum(\n", + " sp.Abs(amplitude_builder(ν, λ)) ** 2,\n", + " (λ, [-half, +half]),\n", + " (ν, [-half, +half]),\n", + " )\n", + "\n", + "\n", + "intensity_expressions = {\n", + " 0: formulate_intensity(formulate_aligned_amplitude),\n", + " 1: formulate_intensity(partial(formulate_chain_amplitude, 1)),\n", + " 2: formulate_intensity(partial(formulate_chain_amplitude, 2)),\n", + " 3: formulate_intensity(partial(formulate_chain_amplitude, 3)),\n", + "}\n", + "intensity_expressions[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input", + "full-width" + ] + }, + "outputs": [], + "source": [ + "A = {1: A_K, 2: A_Λ, 3: A_Δ}\n", + "amp_definitions = {}\n", + "for chain_id in chain_ids:\n", + " for Λc_heli, p_heli in itertools.product([-half, +half], [-half, +half]):\n", + " symbol = A[chain_id][Λc_heli, p_heli]\n", + " expr = formulate_chain_amplitude(chain_id, ν, λ)\n", + " amp_definitions[symbol] = expr.subs({ν: Λc_heli, λ: p_heli})\n", + "display_definitions(amp_definitions)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "substituted_intensity_expressions = {}\n", + "for chain_id, expr in intensity_expressions.items():\n", + " expr = expr.doit().xreplace(amp_definitions).doit()\n", + " expr = expr.xreplace(angles).doit().xreplace(masses)\n", + " substituted_intensity_expressions[chain_id] = expr\n", + " expr = expr.xreplace(parameter_defaults)\n", + " if chain_id == 0:\n", + " assert expr.free_symbols == {σ1, σ2, σ3}\n", + " else:\n", + " assert expr.free_symbols < {σ1, σ2, σ3}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Polarization sensitivity" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Total polarization sensitivity" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def to_index(helicity):\n", + " \"\"\"Symbolic conversion of half-value helicities to Pauli matrix indices.\"\"\"\n", + " # https://github.com/ComPWA/compwa-org/pull/129#issuecomment-1096599896\n", + " return sp.Piecewise(\n", + " (1, sp.LessThan(helicity, 0)),\n", + " (0, True),\n", + " )\n", + "\n", + "\n", + "ν_prime = sp.Symbol(R\"\\nu^{\\prime}\")\n", + "total_polarization = sp.Array(\n", + " PoolSum(\n", + " formulate_aligned_amplitude(ν, λ).conjugate()\n", + " * msigma(i)[to_index(ν), to_index(ν_prime)]\n", + " * formulate_aligned_amplitude(ν_prime, λ),\n", + " (λ, [-half, +half]),\n", + " (ν, [-half, +half]),\n", + " (ν_prime, [-half, +half]),\n", + " )\n", + " / intensity_expressions[0]\n", + " for i in [1, 2, 3]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Polarization sensitivity per chain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "polarization_expressions = {0: total_polarization}\n", + "for chain_id in chain_ids:\n", + " polarization_expressions[chain_id] = sp.Array(\n", + " PoolSum(\n", + " formulate_chain_amplitude(chain_id, ν, λ).conjugate()\n", + " * msigma(i)[to_index(ν), to_index(ν_prime)]\n", + " * formulate_chain_amplitude(chain_id, ν_prime, λ),\n", + " (λ, [-half, +half]),\n", + " (ν, [-half, +half]),\n", + " (ν_prime, [-half, +half]),\n", + " )\n", + " / intensity_expressions[chain_id]\n", + " for i in [1, 2, 3]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "substituted_polarization_expressions = {}\n", + "for chain_id, expr in polarization_expressions.items():\n", + " expr = expr.doit().xreplace(amp_definitions).doit()\n", + " expr = expr.xreplace(angles).doit().xreplace(masses)\n", + " substituted_polarization_expressions[chain_id] = expr\n", + " expr = expr.xreplace(parameter_defaults)\n", + " if chain_id == 0:\n", + " assert expr.free_symbols == {σ1, σ2, σ3}\n", + " else:\n", + " assert expr.free_symbols < {σ1, σ2, σ3}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computations with TensorWaves\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Conversion to computational backend" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "free_parameters = {\n", + " symbol: value\n", + " for symbol, value in parameter_defaults.items()\n", + " if symbol.name.startswith(\"m_\")\n", + " or symbol.name.startswith(R\"\\Gamma_\")\n", + " or symbol in prod_couplings\n", + "}\n", + "fixed_parameters = {\n", + " symbol: value\n", + " for symbol, value in parameter_defaults.items()\n", + " if symbol not in free_parameters\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "intensity_functions = {\n", + " chain_id: create_parametrized_function(\n", + " expr.subs(fixed_parameters),\n", + " parameters=free_parameters,\n", + " backend=\"jax\",\n", + " )\n", + " for chain_id, expr in substituted_intensity_expressions.items()\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "polarization_functions = {\n", + " chain_id: [\n", + " create_parametrized_function(\n", + " expr[i].subs(fixed_parameters),\n", + " parameters=free_parameters,\n", + " backend=\"jax\",\n", + " )\n", + " for i in range(3)\n", + " ]\n", + " for chain_id, expr in substituted_polarization_expressions.items()\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phase space" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "computed_σ3 = m0**2 + m1**2 + m2**2 + m3**2 - σ1 - σ2\n", + "compute_third_mandelstam = create_function(computed_σ3.subs(masses), backend=\"jax\")\n", + "display_definitions({σ3: computed_σ3})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def kibble_function(σ1, σ2):\n", + " return Källén(\n", + " Källén(σ2, m2**2, m0**2),\n", + " Källén(σ3, m3**2, m0**2),\n", + " Källén(σ1, m1**2, m0**2),\n", + " )\n", + "\n", + "\n", + "def is_within_phsp(σ1, σ2, non_phsp_value=sp.nan):\n", + " return sp.Piecewise(\n", + " (1, sp.LessThan(kibble_function(σ1, σ2), 0)),\n", + " (non_phsp_value, True),\n", + " )\n", + "\n", + "\n", + "is_within_phsp(σ1, σ2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "in_phsp_expr = is_within_phsp(σ1, σ2).subs(σ3, computed_σ3).subs(masses).doit()\n", + "in_phsp_expr.free_symbols" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "resolution = 200\n", + "m0_val, m1_val, m2_val, m3_val = masses.values()\n", + "σ1_min = (m2_val + m3_val) ** 2\n", + "σ1_max = (m0_val - m1_val) ** 2\n", + "σ2_min = (m1_val + m3_val) ** 2\n", + "σ2_max = (m0_val - m2_val) ** 2\n", + "x = np.linspace(σ1_min, σ1_max, num=resolution)\n", + "y = np.linspace(σ2_min, σ2_max, num=resolution)\n", + "X, Y = np.meshgrid(x, y)\n", + "Z = compute_third_mandelstam.function(X, Y)\n", + "σ_arrays = {\"sigma1\": X, \"sigma2\": Y, \"sigma3\": Z}\n", + "\n", + "in_phsp = create_function(in_phsp_expr, backend=\"numpy\")\n", + "phsp = in_phsp(σ_arrays)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "kinematic_variables = {\n", + " symbol: expression.doit().subs(masses).subs(fixed_parameters)\n", + " for symbol, expression in angles.items()\n", + "}\n", + "kinematic_variables.update({s: s for s in [σ1, σ2, σ3]}) # include identity\n", + "transformer = SympyDataTransformer.from_sympy(kinematic_variables, backend=\"jax\")\n", + "kinematic_arrays = transformer(σ_arrays)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Intensity distribution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "intensities = {\n", + " chain_id: func(kinematic_arrays) for chain_id, func in intensity_functions.items()\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "%config InlineBackend.figure_formats = ['png']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "s1_label = R\"$\\sigma_1=m^2\\left(K\\pi\\right)$\"\n", + "s2_label = R\"$\\sigma_2=m^2\\left(pK\\right)$\"\n", + "s3_label = R\"$\\sigma_3=m^2\\left(p\\pi\\right)$\"\n", + "\n", + "fig, ax = plt.subplots(\n", + " figsize=(10, 8),\n", + " tight_layout=True,\n", + ")\n", + "ax.set_title(\"Intensity distribution\")\n", + "ax.set_xlabel(s1_label)\n", + "ax.set_ylabel(s2_label)\n", + "\n", + "mesh = ax.pcolormesh(X, Y, phsp * intensities[0], norm=LogNorm())\n", + "fig.colorbar(mesh, ax=ax)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "%config InlineBackend.figure_formats = ['svg']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "def set_ylim_to_zero(ax):\n", + " _, y_max = ax.get_ylim()\n", + " ax.set_ylim(0, y_max)\n", + "\n", + "\n", + "fig, (ax1, ax2) = plt.subplots(\n", + " ncols=2,\n", + " figsize=(12, 5),\n", + " tight_layout=True,\n", + ")\n", + "ax1.set_xlabel(s1_label)\n", + "ax2.set_xlabel(s2_label)\n", + "\n", + "ax1.fill(x, np.nansum(intensities[0], axis=0), alpha=0.3)\n", + "ax2.fill(y, np.nansum(intensities[0], axis=1), alpha=0.3)\n", + "for chain_id in range(1, 4):\n", + " label = f\"${chain_ids[chain_id]}$\"\n", + " ax1.plot(x, np.nansum(intensities[chain_id], axis=0), label=label)\n", + " ax2.plot(y, np.nansum(intensities[chain_id], axis=1), label=label)\n", + "set_ylim_to_zero(ax1)\n", + "set_ylim_to_zero(ax2)\n", + "ax1.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fit fractions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def sub_intensity(data, non_zero_couplings: list[str]):\n", + " func = intensity_functions[0]\n", + " new_parameters = dict(func.parameters)\n", + " for par_name in new_parameters:\n", + " if not par_name.startswith(R\"\\mathcal{H}\"):\n", + " continue\n", + " if any(map(lambda s: s in par_name, non_zero_couplings)):\n", + " continue\n", + " new_parameters[par_name] = 0\n", + " old_parameters = dict(func.parameters)\n", + " func.update_parameters(new_parameters)\n", + " intensities = func(data)\n", + " func.update_parameters(old_parameters)\n", + " return integrate_intensity(intensities)\n", + "\n", + "\n", + "def integrate_intensity(intensities):\n", + " return np.nansum(intensities) / len(intensities)\n", + "\n", + "\n", + "I_tot = integrate_intensity(intensity_functions[0](kinematic_arrays))\n", + "np.testing.assert_allclose(\n", + " I_tot,\n", + " sub_intensity(kinematic_arrays, [\"K\", R\"\\Lambda\", R\"\\Delta\"]),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def interference_intensity(\n", + " data,\n", + " chain1: list[str],\n", + " chain2: list[str],\n", + "):\n", + " I_interference = sub_intensity(data, chain1 + chain2)\n", + " I_chain1 = sub_intensity(data, chain1)\n", + " I_chain2 = sub_intensity(data, chain2)\n", + " return I_interference - I_chain1 - I_chain2\n", + "\n", + "\n", + "I_K = sub_intensity(kinematic_arrays, non_zero_couplings=[\"K\"])\n", + "I_Λ = sub_intensity(kinematic_arrays, non_zero_couplings=[\"Lambda\"])\n", + "I_Δ = sub_intensity(kinematic_arrays, non_zero_couplings=[\"Delta\"])\n", + "I_ΛΔ = interference_intensity(kinematic_arrays, [\"Lambda\"], [\"Delta\"])\n", + "I_KΔ = interference_intensity(kinematic_arrays, [\"K\"], [\"Delta\"])\n", + "I_KΛ = interference_intensity(kinematic_arrays, [\"K\"], [\"Lambda\"])\n", + "np.testing.assert_allclose(I_tot, I_K + I_Λ + I_Δ + I_ΛΔ + I_KΔ + I_KΛ)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "def render_resonance_row(chain_id):\n", + " rows = [\n", + " (\n", + " Rf\"\\color{{gray}}{{{p.latex}}}\",\n", + " Rf\"\\color{{gray}}{{{sub_intensity(kinematic_arrays, [p.name])/I_tot:.3f}}}\",\n", + " )\n", + " for p in resonance_particles[chain_id]\n", + " ]\n", + " if len(rows) > 1:\n", + " return rows\n", + " return []\n", + "\n", + "\n", + "rows = [\n", + " R\"\\hline\",\n", + " (\"K^{**}\", f\"{I_K/I_tot:.3f}\"),\n", + " *render_resonance_row(chain_id=1),\n", + " (R\"\\Lambda^{**}\", f\"{I_Λ/I_tot:.3f}\"),\n", + " *render_resonance_row(chain_id=2),\n", + " (R\"\\Delta^{**}\", f\"{I_Δ/I_tot:.3f}\"),\n", + " *render_resonance_row(chain_id=3),\n", + " (R\"\\Delta/\\Lambda\", f\"{I_ΛΔ/I_tot:.3f}\"),\n", + " (R\"K/\\Delta\", f\"{I_KΔ/I_tot:.3f}\"),\n", + " (R\"K/\\Lambda\", f\"{I_KΛ/I_tot:.3f}\"),\n", + " R\"\\hline\",\n", + " (\n", + " R\"\\mathrm{total}\",\n", + " f\"{(I_K + I_Λ + I_Δ + I_ΛΔ + I_KΔ + I_KΛ) /I_tot:.3f}\",\n", + " ),\n", + "]\n", + "\n", + "latex = R\"\\begin{array}{crr}\" + \"\\n\"\n", + "latex += R\"& I_\\mathrm{sub}\\,/\\,I \\\\\" + \"\\n\"\n", + "for row in rows:\n", + " if row == R\"\\hline\":\n", + " latex += R\"\\hline\"\n", + " else:\n", + " latex += \" \" + \" & \".join(row) + R\" \\\\\" + \"\\n\"\n", + "latex += R\"\\end{array}\"\n", + "Math(latex)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Polarization distributions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "polarization_values = {\n", + " chain_id: [func[i](kinematic_arrays) for i in range(3)]\n", + " for chain_id, func in polarization_functions.items()\n", + "}\n", + "for chain_id in range(4):\n", + " for array in polarization_values[chain_id]:\n", + " assert np.nanmax(array.imag) < 1e-10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "def render_mean(array, plus=True):\n", + " array = array.real\n", + " mean = f\"{np.nanmean(array):.3f}\"\n", + " std = f\"{np.nanstd(array):.3f}\"\n", + " if plus and float(mean) > 0:\n", + " mean = f\"+{mean}\"\n", + " return Rf\"{mean} \\pm {std}\"\n", + "\n", + "\n", + "latex = R\"\\begin{array}{cccc}\" + \"\\n\"\n", + "latex += R\"& \\bar{|\\alpha|} & \\bar\\alpha_x & \\bar\\alpha_y & \\bar\\alpha_z \\\\\" + \"\\n\"\n", + "for chain_id, label in chain_ids.items():\n", + " latex += f\" {label} & \"\n", + " x, y, z = polarization_values[chain_id]\n", + " latex += render_mean(np.sqrt(x**2 + y**2 + z**2), plus=False) + \" & \"\n", + " latex += \" & \".join(map(render_mean, [x, y, z]))\n", + " latex += R\" \\\\\" + \"\\n\"\n", + "latex += R\"\\end{array}\"\n", + "Math(latex)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "%config InlineBackend.figure_formats = ['png']\n", + "%matplotlib widget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Slider definitions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "scroll-input", + "hide-cell", + "remove-output" + ] + }, + "outputs": [], + "source": [ + "# Slider construction\n", + "sliders = {}\n", + "for symbol, value in free_parameters.items():\n", + " if symbol.name.startswith(R\"\\mathcal{H}\"):\n", + " real_slider = create_slider(symbol)\n", + " imag_slider = create_slider(symbol)\n", + " sliders[f\"{symbol.name}_real\"] = real_slider\n", + " sliders[f\"{symbol.name}_imag\"] = imag_slider\n", + " real_slider.description = R\"\\(\\mathrm{Re}\\)\"\n", + " imag_slider.description = R\"\\(\\mathrm{Im}\\)\"\n", + " else:\n", + " slider = create_slider(symbol)\n", + " sliders[symbol.name] = slider\n", + "\n", + "# Slider ranges\n", + "σ3_max = (m0_val - m3_val) ** 2\n", + "σ3_min = (m1_val + m2_val) ** 2\n", + "\n", + "for name, slider in sliders.items():\n", + " slider.continuous_update = False\n", + " slider.step = 0.01\n", + " if name.startswith(\"m_\"):\n", + " if \"K\" in name:\n", + " slider.min = np.sqrt(σ1_min)\n", + " slider.max = np.sqrt(σ1_max)\n", + " elif R\"\\Lambda\" in name:\n", + " slider.min = np.sqrt(σ2_min)\n", + " slider.max = np.sqrt(σ2_max)\n", + " elif R\"\\Delta\" in name:\n", + " slider.min = np.sqrt(σ3_min)\n", + " slider.max = np.sqrt(σ3_max)\n", + " elif name.startswith(R\"\\Gamma_\"):\n", + " slider.min = 0\n", + " slider.max = max(0.5, 2 * slider.value)\n", + " elif name.startswith(R\"\\mathcal{H}\"):\n", + " slider.min = -15\n", + " slider.max = +15\n", + "\n", + "\n", + "# Slider values\n", + "def reset_sliders(click_event):\n", + " for symbol, value in free_parameters.items():\n", + " if symbol.name.startswith(R\"\\mathcal{H}\"):\n", + " set_slider(sliders[symbol.name + \"_real\"], value)\n", + " set_slider(sliders[symbol.name + \"_imag\"], value)\n", + " else:\n", + " set_slider(sliders[symbol.name], value)\n", + "\n", + "\n", + "def set_coupling_to_zero(filter_pattern):\n", + " if isinstance(filter_pattern, Combobox):\n", + " filter_pattern = filter_pattern.value\n", + " for name, slider in sliders.items():\n", + " if not name.startswith(R\"\\mathcal{H}\"):\n", + " continue\n", + " if filter_pattern not in name:\n", + " continue\n", + " set_slider(sliders[name], 0)\n", + "\n", + "\n", + "def set_slider(slider, value):\n", + " if slider.description == R\"\\(\\mathrm{Im}\\)\":\n", + " value = complex(value).imag\n", + " else:\n", + " value = complex(value).real\n", + " n_decimals = -round(np.log10(slider.step))\n", + " if slider.value != round(value, n_decimals): # widget performance\n", + " slider.value = value\n", + "\n", + "\n", + "reset_sliders(click_event=None)\n", + "reset_button = Button(description=\"Reset slider values\")\n", + "reset_button.on_click(reset_sliders)\n", + "\n", + "all_resonances = [r.latex for r_list in resonance_particles.values() for r in r_list]\n", + "filter_button = Combobox(\n", + " placeholder=\"Enter coupling filter pattern\",\n", + " options=all_resonances,\n", + " description=R\"$\\mathcal{H}=0$\",\n", + ")\n", + "filter_button.on_submit(set_coupling_to_zero)\n", + "\n", + "# UI design\n", + "latex = {symbol.name: sp.latex(symbol) for symbol in free_parameters}\n", + "mass_sliders = [sliders[n] for n in sliders if n.startswith(\"m_\")]\n", + "width_sliders = [sliders[n] for n in sliders if n.startswith(R\"\\Gamma_\")]\n", + "coupling_sliders = {}\n", + "for res_list in resonance_particles.values():\n", + " for res in res_list:\n", + " coupling_sliders[res.name] = (\n", + " [s for n, s in sliders.items() if n.endswith(\"_real\") and res.latex in n],\n", + " [s for n, s in sliders.items() if n.endswith(\"_imag\") and res.latex in n],\n", + " [\n", + " HTMLMath(f\"${latex[n[:-5]]}$\")\n", + " for n in sliders\n", + " if n.endswith(\"_real\") and res.latex in n\n", + " ],\n", + " )\n", + "slider_tabs = Tab(\n", + " children=[\n", + " Tab(\n", + " children=[\n", + " VBox([HBox(s) for s in zip(*pair)])\n", + " for pair in coupling_sliders.values()\n", + " ],\n", + " _titles={i: label for i, label in enumerate(coupling_sliders)},\n", + " ),\n", + " VBox([HBox([r, i]) for r, i in zip(mass_sliders, width_sliders)]),\n", + " ],\n", + " _titles=dict(enumerate([\"Couplings\", \"Masses and widths\"])),\n", + ")\n", + "ui = VBox([slider_tabs, HBox([reset_button, filter_button])])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Interactive plot" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "scroll-input", + "hide-cell", + "remove-output" + ] + }, + "outputs": [], + "source": [ + "nrows = 3\n", + "ncols = 5\n", + "scale = 2.6\n", + "aspect_ratio = 1.15\n", + "fig, axes = plt.subplots(\n", + " figsize=scale * np.array([ncols, aspect_ratio * nrows]),\n", + " ncols=ncols,\n", + " nrows=nrows,\n", + " sharex=True,\n", + " sharey=True,\n", + " gridspec_kw={\"width_ratios\": (ncols - 1) * [1] + [1.24]},\n", + " tight_layout=True,\n", + ")\n", + "fig.canvas.toolbar_visible = False\n", + "fig.canvas.header_visible = False\n", + "fig.canvas.footer_visible = False\n", + "\n", + "for chain_id in range(nrows):\n", + " for i in range(ncols):\n", + " ax = axes[chain_id, i]\n", + " if i == 0:\n", + " alpha_str = R\"I_\\mathrm{tot}\"\n", + " elif i == 1:\n", + " alpha_str = R\"|\\alpha|\"\n", + " else:\n", + " alpha_str = Rf\"\\alpha_{'xyz'[i-2]}\"\n", + " title = alpha_str\n", + " if chain_id > 0:\n", + " title = Rf\"{title}\\left({chain_ids[chain_id]}\\right)\"\n", + " ax.set_title(f\"${title}$\")\n", + " if ax is axes[-1, i]:\n", + " ax.set_xlabel(s1_label)\n", + " if i == 0:\n", + " ax.set_ylabel(s2_label)\n", + "\n", + "color_mesh = np.full([nrows, ncols], None)\n", + "\n", + "\n", + "def plot3(**kwargs):\n", + " global color_mesh\n", + " kwargs = to_complex_kwargs(**kwargs)\n", + " for chain_id in range(nrows):\n", + " # alpha_xyz distributions\n", + " alpha_xyz_arrays = []\n", + " for i in range(2, ncols):\n", + " xyz = i - 2\n", + " func = polarization_functions[chain_id][xyz]\n", + " func.update_parameters(kwargs)\n", + " z_values = func(kinematic_arrays)\n", + " z_values = np.real(z_values)\n", + " alpha_xyz_arrays.append(z_values)\n", + " ax = axes[chain_id, i]\n", + " if color_mesh[chain_id, i] is None:\n", + " color_mesh[chain_id, i] = ax.pcolormesh(\n", + " X, Y, z_values, cmap=cm.coolwarm\n", + " )\n", + " if ax is axes[chain_id, -1]:\n", + " fig.colorbar(color_mesh[chain_id, i], ax=ax)\n", + " else:\n", + " color_mesh[chain_id, i].set_array(z_values)\n", + " color_mesh[chain_id, i].set_clim(vmin=-1, vmax=+1)\n", + " # absolute value of alpha_xyz vector\n", + " i = 1\n", + " alpha_abs = np.sqrt(np.sum(np.array(alpha_xyz_arrays) ** 2, axis=0))\n", + " ax = axes[chain_id, i]\n", + " if color_mesh[chain_id, i] is None:\n", + " color_mesh[chain_id, i] = ax.pcolormesh(X, Y, alpha_abs, cmap=cm.coolwarm)\n", + " else:\n", + " color_mesh[chain_id, i].set_array(alpha_abs)\n", + " color_mesh[chain_id, i].set_clim(vmin=-1, vmax=+1)\n", + " # total intensity\n", + " i = 0\n", + " func = intensity_functions[chain_id]\n", + " func.update_parameters(kwargs)\n", + " z_values = func(kinematic_arrays)\n", + " ax = axes[chain_id, i]\n", + " if color_mesh[chain_id, i] is None:\n", + " color_mesh[chain_id, i] = ax.pcolormesh(X, Y, z_values)\n", + " else:\n", + " color_mesh[chain_id, i].set_array(z_values)\n", + " fig.canvas.draw()\n", + "\n", + "\n", + "def to_complex_kwargs(**kwargs):\n", + " complex_valued_kwargs = {}\n", + " for key, value in dict(kwargs).items():\n", + " if key.endswith(\"real\"):\n", + " symbol_name = key[:-5]\n", + " imag = kwargs[f\"{symbol_name}_imag\"]\n", + " complex_valued_kwargs[symbol_name] = complex(value, imag)\n", + " elif key.endswith(\"imag\"):\n", + " continue\n", + " else:\n", + " complex_valued_kwargs[key] = value\n", + " return complex_valued_kwargs\n", + "\n", + "\n", + "output = interactive_output(plot3, controls=sliders)\n", + "display(ui, output)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyproject.toml b/pyproject.toml index 551af38e..361a2ac6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,3 +37,16 @@ src_paths = [ "src", ] known_third_party = "THIRDPARTY,sympy" + +[tool.pytest.ini_options] +addopts = [ + "--color=yes", +] +filterwarnings = [ + "error", + "ignore:The .* argument to NotebookFile is deprecated.*:pytest.PytestRemovedIn8Warning", +] +norecursedirs = [ + ".ipynb_checkpoints", + "_build", +] diff --git a/setup.cfg b/setup.cfg index 83cae045..09c716d7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -13,13 +13,26 @@ setup_requires = install_requires = attrs >=20.1.0 # on_setattr and https://www.attrs.org/en/stable/api.html#next-gen sympy >=1.10 # module sympy.printing.numpy and array expressions with shape kwarg - tensorwaves >=0.4.5 # lambdify sympy.Indexed - typing-extensions; python_version <"3.8.0" packages = find: package_dir = =src [options.extras_require] +doc = + ipympl + ipywidgets + matplotlib + ampform >=0.14.0 # also contains qrules + tensorwaves[jax] >=0.4.5 # lambdify sympy.Indexed +jupyter = + %(doc)s + aquirdturtle_collapsible_headings + jupyterlab >=3.0 + jupyterlab-code-formatter + jupyterlab-myst +test = + nbmake + pytest >=6.0 # pyproject.toml format = black isort @@ -27,7 +40,10 @@ sty = %(format)s pre-commit >=1.4.0 dev = + %(doc)s + %(jupyter)s %(sty)s + %(test)s tox >=1.9 # for skip_install, use_develop [options.packages.find] diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..aaaa15cb --- /dev/null +++ b/tox.ini @@ -0,0 +1,25 @@ +[tox] +envlist = + sty, +passenv = PYTHONPATH +skip_install = True +skip_missing_interpreters = True +skipsdist = True + +[testenv:nb] +description = + Run all notebooks with pytest +allowlist_externals = + pytest +commands = + pytest --nbmake {posargs:docs} + +[testenv:sty] +description = + Perform all linting, formatting, and spelling checks +setenv = + SKIP = pyright +allowlist_externals = + pre-commit +commands = + pre-commit run {posargs} -a From c6ca8a8c273649f384131210a373134b893e642b Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 29 Apr 2022 15:46:53 +0200 Subject: [PATCH 07/15] recommend VSCode Rewrap extension --- .vscode/extensions.json | 1 + .vscode/settings.json | 1 + 2 files changed, 2 insertions(+) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9a8854d3..e4cbc7ef 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -11,6 +11,7 @@ "ms-vsliveshare.vsliveshare", "oijaz.unicode-latex", "redhat.vscode-yaml", + "stkb.rewrap", "streetsidesoftware.code-spell-checker", "travisillig.vscode-json-stable-stringify", "tyriar.sort-lines", diff --git a/.vscode/settings.json b/.vscode/settings.json index 74199cf1..bca119e2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,5 +27,6 @@ "python.analysis.autoImportCompletions": false, "python.analysis.diagnosticMode": "workspace", "python.formatting.provider": "black", + "rewrap.wrappingColumn": 88, "telemetry.telemetryLevel": "off" } From 6bcd0e3ba2dfbb1a943841325c61b4c36dd2a49a Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:28:19 +0200 Subject: [PATCH 08/15] mark package as typed --- setup.cfg | 4 ++++ src/polarization/py.typed | 0 2 files changed, 4 insertions(+) create mode 100644 src/polarization/py.typed diff --git a/setup.cfg b/setup.cfg index 09c716d7..e4b8c033 100644 --- a/setup.cfg +++ b/setup.cfg @@ -48,3 +48,7 @@ dev = [options.packages.find] where = src + +[options.package_data] +ampform = + py.typed diff --git a/src/polarization/py.typed b/src/polarization/py.typed new file mode 100644 index 00000000..e69de29b From a259d7bc7f6e03e527255694682a5780ae40d35e Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:28:20 +0200 Subject: [PATCH 09/15] activate strict type checking with pyright --- .vscode/settings.json | 1 + pyrightconfig.json | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 pyrightconfig.json diff --git a/.vscode/settings.json b/.vscode/settings.json index bca119e2..d364874e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,6 +27,7 @@ "python.analysis.autoImportCompletions": false, "python.analysis.diagnosticMode": "workspace", "python.formatting.provider": "black", + "python.linting.enabled": true, "rewrap.wrappingColumn": 88, "telemetry.telemetryLevel": "off" } diff --git a/pyrightconfig.json b/pyrightconfig.json new file mode 100644 index 00000000..274ff0f6 --- /dev/null +++ b/pyrightconfig.json @@ -0,0 +1,15 @@ +{ + "include": ["src", "tests"], + "reportGeneralTypeIssues": false, + "reportMissingParameterType": false, + "reportMissingTypeArgument": false, + "reportUnknownArgumentType": false, + "reportUnknownParameterType": false, + "reportUnknownVariableType": false, + "reportUnnecessaryIsInstance": false, + "reportUnusedClass": true, + "reportUnusedFunction": true, + "reportUnusedImport": true, + "reportUnusedVariable": true, + "typeCheckingMode": "strict" +} From 87cdd48dea4cfeb5274b50500561707450f768df Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:28:21 +0200 Subject: [PATCH 10/15] fix linter errors in notebook --- .editorconfig | 1 - docs/lambda-decay.ipynb | 10 ++++++---- pyrightconfig.json | 4 ++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.editorconfig b/.editorconfig index 08d1a272..e909cee4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,7 +3,6 @@ root = true [*] end_of_line = lf indent_style = space -indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true diff --git a/docs/lambda-decay.ipynb b/docs/lambda-decay.ipynb index efa9b1f6..2e853224 100644 --- a/docs/lambda-decay.ipynb +++ b/docs/lambda-decay.ipynb @@ -45,7 +45,7 @@ " make_commutative,\n", ")\n", "from attrs import frozen\n", - "from IPython.display import HTML, Image, Math, display\n", + "from IPython.display import HTML, Math, display\n", "from ipywidgets import Button, Combobox, HBox, HTMLMath, Tab, VBox, interactive_output\n", "from matplotlib import cm\n", "from matplotlib.colors import LogNorm\n", @@ -174,9 +174,9 @@ " @staticmethod\n", " def generate_ls(particle: Particle, chain_id: int) -> Resonance:\n", " LS_prod = generate_ls(Λc, particle, siblings[chain_id], strong=False)\n", - " LS_prod = [L for L, S in LS_prod]\n", + " LS_prod = [L for L, _ in LS_prod]\n", " LS_dec = generate_ls(particle, *decay_products[chain_id])\n", - " LS_dec = [L for L, S in LS_dec]\n", + " LS_dec = [L for L, _ in LS_dec]\n", " return Resonance(particle, l_R=min(LS_dec), l_Λc=min(LS_prod))\n", "\n", "\n", @@ -222,6 +222,8 @@ "\n", "\n", "def jp(particle: Particle):\n", + " if particle.parity is None:\n", + " raise ValueError(f\"Particle {particle.name} has no parity\")\n", " p = \"+\" if particle.parity > 0 else \"-\"\n", " j = sp.Rational(particle.spin)\n", " return Rf\"\\({j}^{p}\\)\"\n", @@ -1564,7 +1566,7 @@ " continue\n", " if filter_pattern not in name:\n", " continue\n", - " set_slider(sliders[name], 0)\n", + " set_slider(slider, 0)\n", "\n", "\n", "def set_slider(slider, value):\n", diff --git a/pyrightconfig.json b/pyrightconfig.json index 274ff0f6..85d1aad0 100644 --- a/pyrightconfig.json +++ b/pyrightconfig.json @@ -3,7 +3,11 @@ "reportGeneralTypeIssues": false, "reportMissingParameterType": false, "reportMissingTypeArgument": false, + "reportMissingTypeStubs": false, + "reportPrivateImportUsage": false, "reportUnknownArgumentType": false, + "reportUnknownLambdaType": false, + "reportUnknownMemberType": false, "reportUnknownParameterType": false, "reportUnknownVariableType": false, "reportUnnecessaryIsInstance": false, From 06c3d50c17e20e93e99d20dda995b3a51a733355 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:28:22 +0200 Subject: [PATCH 11/15] implement I/O module from ComPWA/ampform#280 --- .vscode/settings.json | 3 ++ docs/lambda-decay.ipynb | 25 ++++++-------- pyproject.toml | 9 +++++ setup.cfg | 1 + src/polarization/io.py | 75 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+), 15 deletions(-) create mode 100644 src/polarization/io.py diff --git a/.vscode/settings.json b/.vscode/settings.json index d364874e..71fd91cc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -28,6 +28,9 @@ "python.analysis.diagnosticMode": "workspace", "python.formatting.provider": "black", "python.linting.enabled": true, + "python.testing.pytestArgs": ["--color=no"], + "python.testing.pytestEnabled": true, + "python.testing.unittestEnabled": false, "rewrap.wrappingColumn": 88, "telemetry.telemetryLevel": "off" } diff --git a/docs/lambda-decay.ipynb b/docs/lambda-decay.ipynb index 2e853224..425d6af9 100644 --- a/docs/lambda-decay.ipynb +++ b/docs/lambda-decay.ipynb @@ -57,21 +57,16 @@ "from tensorwaves.data.transform import SympyDataTransformer\n", "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", "\n", + "from polarization.io import as_latex\n", + "\n", "LOGGER = logging.getLogger()\n", "LOGGER.setLevel(logging.ERROR)\n", "\n", "PDG = qrules.load_pdg()\n", "\n", "\n", - "def display_definitions(definitions: dict[sp.Symbol, sp.Expr]) -> None:\n", - " latex = R\"\\begin{array}{rcl}\" + \"\\n\"\n", - " for symbol, expr in definitions.items():\n", - " symbol = sp.sympify(symbol)\n", - " expr = sp.sympify(expr)\n", - " lhs = sp.latex(symbol)\n", - " rhs = sp.latex(expr)\n", - " latex += Rf\" {lhs} & = & {rhs} \\\\\" + \"\\n\"\n", - " latex += R\"\\end{array}\"\n", + "def display_latex(obj) -> None:\n", + " latex = as_latex(obj)\n", " display(Math(latex))\n", "\n", "\n", @@ -733,7 +728,7 @@ " ),\n", "}\n", "\n", - "display_definitions(angles)" + "display_latex(angles)" ] }, { @@ -752,7 +747,7 @@ " m2: π.mass,\n", " m3: K.mass,\n", "}\n", - "display_definitions(masses)" + "display_latex(masses)" ] }, { @@ -797,7 +792,7 @@ " * (-1) ** (res.particle.spin - p.spin - π.spin)\n", " )\n", "parameter_defaults.update(dec_couplings)\n", - "display_definitions(dec_couplings)" + "display_latex(dec_couplings)" ] }, { @@ -836,7 +831,7 @@ " H_prod[Str(R\"\\Delta(1232)^{++}\"), +half, 0]: -13 + 5j,\n", " H_prod[Str(R\"\\Delta(1232)^{++}\"), -half, 0]: -7 + 3j,\n", "}\n", - "display_definitions(prod_couplings)\n", + "display_latex(prod_couplings)\n", "couplings = dict(dec_couplings)\n", "couplings.update(prod_couplings)\n", "parameter_defaults.update(prod_couplings)" @@ -895,7 +890,7 @@ " symbol = A[chain_id][Λc_heli, p_heli]\n", " expr = formulate_chain_amplitude(chain_id, ν, λ)\n", " amp_definitions[symbol] = expr.subs({ν: Λc_heli, λ: p_heli})\n", - "display_definitions(amp_definitions)" + "display_latex(amp_definitions)" ] }, { @@ -1111,7 +1106,7 @@ "source": [ "computed_σ3 = m0**2 + m1**2 + m2**2 + m3**2 - σ1 - σ2\n", "compute_third_mandelstam = create_function(computed_σ3.subs(masses), backend=\"jax\")\n", - "display_definitions({σ3: computed_σ3})" + "display_latex({σ3: computed_σ3})" ] }, { diff --git a/pyproject.toml b/pyproject.toml index 361a2ac6..96e8d84a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,12 +41,21 @@ known_third_party = "THIRDPARTY,sympy" [tool.pytest.ini_options] addopts = [ "--color=yes", + "--doctest-modules", + "--durations=3", + "-m not slow", ] filterwarnings = [ "error", "ignore:The .* argument to NotebookFile is deprecated.*:pytest.PytestRemovedIn8Warning", ] +markers = [ + "slow: marks tests as slow (select with '-m slow')", +] norecursedirs = [ ".ipynb_checkpoints", "_build", ] +testpaths = [ + "src", +] diff --git a/setup.cfg b/setup.cfg index e4b8c033..4d3a40c5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -33,6 +33,7 @@ jupyter = test = nbmake pytest >=6.0 # pyproject.toml + pytest-xdist format = black isort diff --git a/src/polarization/io.py b/src/polarization/io.py new file mode 100644 index 00000000..82eff70e --- /dev/null +++ b/src/polarization/io.py @@ -0,0 +1,75 @@ +"""Input-output functions for `ampform` and `sympy` objects. + +Functions in this module are registered with :func:`functools.singledispatch` and can be +extended as follows: + +>>> from polarization.io import as_latex +>>> @as_latex.register(int) +... def _(obj: int) -> str: +... return "my custom rendering" +>>> as_latex(1) +'my custom rendering' +>>> as_latex(3.4 - 2j) +'3.4-2i' + +This code originates from `ComPWA/ampform#280 +`_. +""" +from __future__ import annotations + +from collections import abc +from functools import singledispatch +from typing import Iterable, Mapping + +import sympy as sp + + +@singledispatch +def as_latex(obj) -> str: + """Render objects as a LaTeX `str`. + + The resulting `str` can for instance be given to `IPython.display.Math`. + """ + return str(obj) + + +@as_latex.register(complex) +def _(obj: complex) -> str: + real = __downcast(obj.real) + imag = __downcast(obj.imag) + plus = "+" if imag >= 0 else "" + return f"{real}{plus}{imag}i" + + +def __downcast(obj: float) -> float | int: + if obj.is_integer(): + return int(obj) + return obj + + +@as_latex.register(sp.Basic) +def _(obj: sp.Basic) -> str: + return sp.latex(obj) + + +@as_latex.register(abc.Mapping) +def _(obj: Mapping) -> str: + if len(obj) == 0: + raise ValueError("Need at least one dictionary item") + latex = R"\begin{array}{rcl}" + "\n" + for lhs, rhs in obj.items(): + latex += Rf" {as_latex(lhs)} &=& {as_latex(rhs)} \\" + "\n" + latex += R"\end{array}" + return latex + + +@as_latex.register(abc.Iterable) +def _(obj: Iterable) -> str: + obj = list(obj) + if len(obj) == 0: + raise ValueError("Need at least one item to render as LaTeX") + latex = R"\begin{array}{c}" + "\n" + for item in map(as_latex, obj): + latex += Rf" {item} \\" + "\n" + latex += R"\end{array}" + return latex From 8f04e32bd89a25d720d596a8c0f0aac517aee2f9 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:28:24 +0200 Subject: [PATCH 12/15] define dynamics functions in module --- .cspell/python.txt | 1 + docs/lambda-decay.ipynb | 157 +++++------------------------------ setup.cfg | 3 +- src/polarization/dynamics.py | 127 ++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+), 138 deletions(-) create mode 100644 src/polarization/dynamics.py diff --git a/.cspell/python.txt b/.cspell/python.txt index 6cbe7ada..e2c09be0 100644 --- a/.cspell/python.txt +++ b/.cspell/python.txt @@ -17,6 +17,7 @@ numpy pcolormesh pygments pyplot +pyright qrules sharey sympify diff --git a/docs/lambda-decay.ipynb b/docs/lambda-decay.ipynb index 425d6af9..4a729472 100644 --- a/docs/lambda-decay.ipynb +++ b/docs/lambda-decay.ipynb @@ -37,13 +37,7 @@ "import numpy as np\n", "import qrules\n", "import sympy as sp\n", - "from ampform.sympy import (\n", - " PoolSum,\n", - " UnevaluatedExpression,\n", - " create_expression,\n", - " implement_doit_method,\n", - " make_commutative,\n", - ")\n", + "from ampform.sympy import PoolSum, UnevaluatedExpression\n", "from attrs import frozen\n", "from IPython.display import HTML, Math, display\n", "from ipywidgets import Button, Combobox, HBox, HTMLMath, Tab, VBox, interactive_output\n", @@ -57,6 +51,14 @@ "from tensorwaves.data.transform import SympyDataTransformer\n", "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", "\n", + "from polarization.dynamics import (\n", + " BlattWeisskopf,\n", + " EnergyDependentWidth,\n", + " Källén,\n", + " P,\n", + " Q,\n", + " RelativisticBreitWigner,\n", + ")\n", "from polarization.io import as_latex\n", "\n", "LOGGER = logging.getLogger()\n", @@ -71,14 +73,17 @@ "\n", "\n", "def display_doit(\n", - " expr: UnevaluatedExpression, deep=False, terms_per_line: int = 10\n", + " expr: UnevaluatedExpression, deep=False, terms_per_line: int | None = None\n", ") -> None:\n", - " latex = sp.multiline_latex(\n", - " lhs=expr,\n", - " rhs=expr.doit(deep=deep),\n", - " terms_per_line=terms_per_line,\n", - " environment=\"eqnarray\",\n", - " )\n", + " if terms_per_line is None:\n", + " latex = as_latex({expr: expr.doit(deep=deep)})\n", + " else:\n", + " latex = sp.multiline_latex(\n", + " lhs=expr,\n", + " rhs=expr.doit(deep=deep),\n", + " terms_per_line=terms_per_line,\n", + " environment=\"eqnarray\",\n", + " )\n", " display(Math(latex))\n", "\n", "\n", @@ -324,32 +329,9 @@ }, "outputs": [], "source": [ - "@make_commutative\n", - "@implement_doit_method\n", - "class BlattWeisskopf(UnevaluatedExpression):\n", - " def __new__(cls, z, L, **hints):\n", - " return create_expression(cls, z, L, **hints)\n", - "\n", - " def evaluate(self):\n", - " z, L = self.args\n", - " cases = {\n", - " 0: 1,\n", - " 1: 1 / (1 + z**2),\n", - " 2: 1 / (9 + 3 * z**2 + z**4),\n", - " }\n", - " return sp.Piecewise(\n", - " *[(sp.sqrt(expr), sp.Eq(L, l_val)) for l_val, expr in cases.items()]\n", - " )\n", - "\n", - " def _latex(self, printer, *args):\n", - " z, L = map(printer._print, self.args)\n", - " return Rf\"F_{{{L}}}\\left({z}\\right)\"\n", - "\n", - "\n", "z = sp.Symbol(\"z\", positive=True)\n", "L = sp.Symbol(\"L\", integer=True, nonnegative=True)\n", - "latex = sp.multiline_latex(BlattWeisskopf(z, L), BlattWeisskopf(z, L).doit())\n", - "Math(latex)" + "display_doit(BlattWeisskopf(z, L))" ] }, { @@ -362,21 +344,6 @@ }, "outputs": [], "source": [ - "@make_commutative\n", - "@implement_doit_method\n", - "class Källén(UnevaluatedExpression):\n", - " def __new__(cls, x, y, z, **hints):\n", - " return create_expression(cls, x, y, z, **hints)\n", - "\n", - " def evaluate(self) -> sp.Expr:\n", - " x, y, z = self.args\n", - " return x**2 + y**2 + z**2 - 2 * x * y - 2 * y * z - 2 * z * x\n", - "\n", - " def _latex(self, printer, *args):\n", - " x, y, z = map(printer._print, self.args)\n", - " return Rf\"\\lambda\\left({x}, {y}, {z}\\right)\"\n", - "\n", - "\n", "x, y, z = sp.symbols(\"x:z\")\n", "display_doit(Källén(x, y, z))" ] @@ -391,36 +358,6 @@ }, "outputs": [], "source": [ - "@make_commutative\n", - "@implement_doit_method\n", - "class P(UnevaluatedExpression):\n", - " def __new__(cls, s, mi, mj, **hints):\n", - " return create_expression(cls, s, mi, mj, **hints)\n", - "\n", - " def evaluate(self):\n", - " s, mi, mj = self.args\n", - " return sp.sqrt(Källén(s, mi**2, mj**2)) / (2 * sp.sqrt(s))\n", - "\n", - " def _latex(self, printer, *args):\n", - " s = printer._print(self.args[0])\n", - " return Rf\"p_{{{s}}}\"\n", - "\n", - "\n", - "@make_commutative\n", - "@implement_doit_method\n", - "class Q(UnevaluatedExpression):\n", - " def __new__(cls, s, m0, mk, **hints):\n", - " return create_expression(cls, s, m0, mk, **hints)\n", - "\n", - " def evaluate(self):\n", - " s, m0, mk = self.args\n", - " return sp.sqrt(Källén(s, m0**2, mk**2)) / (2 * m0) # <-- not s!\n", - "\n", - " def _latex(self, printer, *args):\n", - " s = printer._print(self.args[0])\n", - " return Rf\"q_{{{s}}}\"\n", - "\n", - "\n", "s, m0, mi, mj, mk = sp.symbols(\"s m0 m_i:k\", nonnegative=True)\n", "display_doit(P(s, mi, mj))\n", "display_doit(Q(s, m0, mk))" @@ -440,33 +377,6 @@ "parameter_defaults = {\n", " R: 5, # GeV^{-1} (length factor)\n", "}\n", - "\n", - "\n", - "@make_commutative\n", - "@implement_doit_method\n", - "class EnergyDependentWidth(UnevaluatedExpression):\n", - " def __new__(cls, s, m0, Γ0, m1, m2, L, R):\n", - " return create_expression(cls, s, m0, Γ0, m1, m2, L, R)\n", - "\n", - " def evaluate(self):\n", - " s, m0, Γ0, m1, m2, L, R = self.args\n", - " p = P(s, m1, m2)\n", - " p0 = P(m0**2, m1, m2)\n", - " ff = BlattWeisskopf(p * R, L) ** 2\n", - " ff0 = BlattWeisskopf(p0 * R, L) ** 2\n", - " return sp.Mul(\n", - " Γ0,\n", - " (p / p0) ** (2 * L + 1),\n", - " m0 / sp.sqrt(s),\n", - " ff / ff0,\n", - " evaluate=False,\n", - " )\n", - "\n", - " def _latex(self, printer, *args) -> str:\n", - " s = printer._print(self.args[0])\n", - " return Rf\"\\Gamma\\left({s}\\right)\"\n", - "\n", - "\n", "l_R = sp.Symbol(\"l_R\", integer=True, positive=True)\n", "m, Γ0, m1, m2 = sp.symbols(\"m Γ0 m1 m2\", nonnegative=True)\n", "display_doit(EnergyDependentWidth(s, m, Γ0, m1, m2, l_R, R))" @@ -482,33 +392,6 @@ }, "outputs": [], "source": [ - "@make_commutative\n", - "@implement_doit_method\n", - "class RelativisticBreitWigner(UnevaluatedExpression):\n", - " def __new__(cls, s, m0, Γ0, m1, m2, l_R, l_Λc, R):\n", - " return create_expression(cls, s, m0, Γ0, m1, m2, l_R, l_Λc, R)\n", - "\n", - " def evaluate(self):\n", - " s, m0, Γ0, m1, m2, l_R, l_Λc, R = self.args\n", - " q = Q(s, m1, m2)\n", - " q0 = Q(m0**2, m1, m2)\n", - " p = P(s, m1, m2)\n", - " p0 = P(m0**2, m1, m2)\n", - " width = EnergyDependentWidth(s, m0, Γ0, m1, m2, l_R, R)\n", - " return sp.Mul(\n", - " (q / q0) ** l_Λc,\n", - " BlattWeisskopf(q * R, l_Λc) / BlattWeisskopf(q0 * R, l_Λc),\n", - " 1 / (m0**2 - s - sp.I * m0 * width),\n", - " (p / p0) ** l_R,\n", - " BlattWeisskopf(p * R, l_R) / BlattWeisskopf(p0 * R, l_R),\n", - " evaluate=False,\n", - " )\n", - "\n", - " def _latex(self, printer, *args) -> str:\n", - " s = printer._print(self.args[0])\n", - " return Rf\"\\mathcal{{R}}\\left({s}\\right)\"\n", - "\n", - "\n", "l_Λc = sp.Symbol(R\"l_{\\Lambda_c}\", integer=True, positive=True)\n", "display_doit(RelativisticBreitWigner(s, m, Γ0, m1, m2, l_R, l_Λc, R))" ] diff --git a/setup.cfg b/setup.cfg index 4d3a40c5..ffa8b742 100644 --- a/setup.cfg +++ b/setup.cfg @@ -12,6 +12,7 @@ setup_requires = setuptools_scm install_requires = attrs >=20.1.0 # on_setattr and https://www.attrs.org/en/stable/api.html#next-gen + ampform >=0.14.0 sympy >=1.10 # module sympy.printing.numpy and array expressions with shape kwarg packages = find: package_dir = @@ -22,7 +23,7 @@ doc = ipympl ipywidgets matplotlib - ampform >=0.14.0 # also contains qrules + qrules ==0.9.* tensorwaves[jax] >=0.4.5 # lambdify sympy.Indexed jupyter = %(doc)s diff --git a/src/polarization/dynamics.py b/src/polarization/dynamics.py new file mode 100644 index 00000000..44a65663 --- /dev/null +++ b/src/polarization/dynamics.py @@ -0,0 +1,127 @@ +# pyright: reportPrivateUsage=false +import sympy as sp +from ampform.sympy import ( + UnevaluatedExpression, + create_expression, + implement_doit_method, + make_commutative, +) + + +@make_commutative +@implement_doit_method +class Källén(UnevaluatedExpression): + def __new__(cls, x, y, z, **hints): + return create_expression(cls, x, y, z, **hints) + + def evaluate(self) -> sp.Expr: + x, y, z = self.args + return x**2 + y**2 + z**2 - 2 * x * y - 2 * y * z - 2 * z * x + + def _latex(self, printer, *args): + x, y, z = map(printer._print, self.args) + return Rf"\lambda\left({x}, {y}, {z}\right)" + + +@make_commutative +@implement_doit_method +class P(UnevaluatedExpression): + def __new__(cls, s, mi, mj, **hints): + return create_expression(cls, s, mi, mj, **hints) + + def evaluate(self): + s, mi, mj = self.args + return sp.sqrt(Källén(s, mi**2, mj**2)) / (2 * sp.sqrt(s)) + + def _latex(self, printer, *args): + s = printer._print(self.args[0]) + return Rf"p_{{{s}}}" + + +@make_commutative +@implement_doit_method +class Q(UnevaluatedExpression): + def __new__(cls, s, m0, mk, **hints): + return create_expression(cls, s, m0, mk, **hints) + + def evaluate(self): + s, m0, mk = self.args + return sp.sqrt(Källén(s, m0**2, mk**2)) / (2 * m0) # <-- not s! + + def _latex(self, printer, *args): + s = printer._print(self.args[0]) + return Rf"q_{{{s}}}" + + +@make_commutative +@implement_doit_method +class RelativisticBreitWigner(UnevaluatedExpression): + def __new__(cls, s, m0, Γ0, m1, m2, l_R, l_Λc, R): + return create_expression(cls, s, m0, Γ0, m1, m2, l_R, l_Λc, R) + + def evaluate(self): + s, m0, Γ0, m1, m2, l_R, l_Λc, R = self.args + q = Q(s, m1, m2) + q0 = Q(m0**2, m1, m2) + p = P(s, m1, m2) + p0 = P(m0**2, m1, m2) + width = EnergyDependentWidth(s, m0, Γ0, m1, m2, l_R, R) + return sp.Mul( + (q / q0) ** l_Λc, + BlattWeisskopf(q * R, l_Λc) / BlattWeisskopf(q0 * R, l_Λc), + 1 / (m0**2 - s - sp.I * m0 * width), + (p / p0) ** l_R, + BlattWeisskopf(p * R, l_R) / BlattWeisskopf(p0 * R, l_R), + evaluate=False, + ) + + def _latex(self, printer, *args) -> str: + s = printer._print(self.args[0]) + return Rf"\mathcal{{R}}\left({s}\right)" + + +@make_commutative +@implement_doit_method +class EnergyDependentWidth(UnevaluatedExpression): + def __new__(cls, s, m0, Γ0, m1, m2, L, R): + return create_expression(cls, s, m0, Γ0, m1, m2, L, R) + + def evaluate(self): + s, m0, Γ0, m1, m2, L, R = self.args + p = P(s, m1, m2) + p0 = P(m0**2, m1, m2) + ff = BlattWeisskopf(p * R, L) ** 2 + ff0 = BlattWeisskopf(p0 * R, L) ** 2 + return sp.Mul( + Γ0, + (p / p0) ** (2 * L + 1), + m0 / sp.sqrt(s), + ff / ff0, + evaluate=False, + ) + + def _latex(self, printer, *args) -> str: + s = printer._print(self.args[0]) + return Rf"\Gamma\left({s}\right)" + + +@make_commutative +@implement_doit_method +class BlattWeisskopf(UnevaluatedExpression): + def __new__(cls, z, L, **hints): + return create_expression(cls, z, L, **hints) + + def evaluate(self): + z, L = self.args + cases = { + 0: 1, + 1: 1 / (1 + z**2), + 2: 1 / (9 + 3 * z**2 + z**4), + } + return sp.Piecewise( + *[(sp.sqrt(expr), sp.Eq(L, l_val)) for l_val, expr in cases.items()] + ) + + def _latex(self, printer, *args): + z, L = map(printer._print, self.args) + return Rf"F_{{{L}}}\left({z}\right)" From 76ab84380fb225bf0b925c53fffa21f7a3b3e67f Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sun, 1 May 2022 11:41:42 +0200 Subject: [PATCH 13/15] implement LS-coupling generator functions --- docs/lambda-decay.ipynb | 48 +++++++--------------------- setup.cfg | 1 + src/polarization/spin.py | 69 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 37 deletions(-) create mode 100644 src/polarization/spin.py diff --git a/docs/lambda-decay.ipynb b/docs/lambda-decay.ipynb index 4a729472..0082b1fd 100644 --- a/docs/lambda-decay.ipynb +++ b/docs/lambda-decay.ipynb @@ -60,6 +60,11 @@ " RelativisticBreitWigner,\n", ")\n", "from polarization.io import as_latex\n", + "from polarization.spin import (\n", + " create_spin_range,\n", + " filter_parity_violating_ls,\n", + " generate_ls_couplings,\n", + ")\n", "\n", "LOGGER = logging.getLogger()\n", "LOGGER.setLevel(logging.ERROR)\n", @@ -173,44 +178,17 @@ "\n", " @staticmethod\n", " def generate_ls(particle: Particle, chain_id: int) -> Resonance:\n", - " LS_prod = generate_ls(Λc, particle, siblings[chain_id], strong=False)\n", + " LS_prod = generate_ls_couplings(Λc.spin, particle.spin, siblings[chain_id].spin)\n", " LS_prod = [L for L, _ in LS_prod]\n", - " LS_dec = generate_ls(particle, *decay_products[chain_id])\n", + " child1, child2 = decay_products[chain_id]\n", + " LS_dec = generate_ls_couplings(particle.spin, child1.spin, child2.spin)\n", + " LS_dec = filter_parity_violating_ls(\n", + " LS_dec, particle.parity, child1.parity, child2.parity\n", + " )\n", " LS_dec = [L for L, _ in LS_dec]\n", " return Resonance(particle, l_R=min(LS_dec), l_Λc=min(LS_prod))\n", "\n", "\n", - "def generate_ls(\n", - " parent: Particle,\n", - " child1: Particle,\n", - " child2: Particle,\n", - " strong: bool = True,\n", - " max_L: int = 3,\n", - "):\n", - " s1 = child1.spin\n", - " s2 = child2.spin\n", - " s_values = arange(abs(s1 - s2), s1 + s2)\n", - " LS_values = set()\n", - " for S in s_values:\n", - " for L in arange(0, max_L):\n", - " if not abs(L - S) <= parent.spin <= L + S:\n", - " continue\n", - " η0, η1, η2 = [\n", - " int(parent.parity),\n", - " int(child1.parity),\n", - " int(child2.parity),\n", - " ]\n", - " if strong and η0 != η1 * η2 * (-1) ** L:\n", - " continue\n", - " LS_values.add((L, S))\n", - " return sorted(LS_values)\n", - "\n", - "\n", - "def arange(x1, x2):\n", - " spin_range = np.arange(float(x1), +float(x2) + 0.5)\n", - " return list(map(sp.Rational, spin_range))\n", - "\n", - "\n", "resonance_particles = {\n", " chain_id: [PDG[name] for name in names]\n", " for chain_id, names in resonance_names.items()\n", @@ -506,10 +484,6 @@ " return Str(particle.latex)\n", "\n", "\n", - "def create_spin_range(j):\n", - " return arange(-j, +j)\n", - "\n", - "\n", "display(\n", " formulate_chain_amplitude(1, ν, λ),\n", " formulate_chain_amplitude(2, ν, λ),\n", diff --git a/setup.cfg b/setup.cfg index ffa8b742..bcea1c53 100644 --- a/setup.cfg +++ b/setup.cfg @@ -13,6 +13,7 @@ setup_requires = install_requires = attrs >=20.1.0 # on_setattr and https://www.attrs.org/en/stable/api.html#next-gen ampform >=0.14.0 + numpy sympy >=1.10 # module sympy.printing.numpy and array expressions with shape kwarg packages = find: package_dir = diff --git a/src/polarization/spin.py b/src/polarization/spin.py new file mode 100644 index 00000000..d65e0a48 --- /dev/null +++ b/src/polarization/spin.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from typing import SupportsFloat, SupportsInt + +import numpy as np +import sympy as sp + + +def generate_ls_couplings( + parent_spin: SupportsFloat, + child1_spin: SupportsFloat, + child2_spin: SupportsFloat, + max_L: int = 3, +) -> list[tuple[int, sp.Rational]]: + r""" + >>> generate_ls_couplings(1.5, 0.5, 0) + [(1, 1/2), (2, 1/2)] + """ + s1 = float(child1_spin) + s2 = float(child2_spin) + angular_momenta = create_rational_range(0, max_L) + coupled_spins = create_rational_range(abs(s1 - s2), s1 + s2) + ls_couplings = { + (int(L), S) + for L in angular_momenta + for S in coupled_spins + if abs(L - S) <= parent_spin <= L + S + } + return sorted(ls_couplings) + + +def filter_parity_violating_ls( + ls_couplings: list[tuple[int, sp.Rational]], + parent_parity: SupportsInt, + child1_parity: SupportsInt, + child2_parity: SupportsInt, +) -> list[tuple[int, sp.Rational]]: + r""" + >>> LS = generate_ls_couplings(0.5, 1.5, 0) # Λc → Λ(1520)π + >>> LS + [(1, 3/2), (2, 3/2)] + >>> filter_parity_violating_ls(LS, +1, -1, -1) + [(2, 3/2)] + """ + η0, η1, η2 = ( + int(parent_parity), + int(child1_parity), + int(child2_parity), + ) + return [(L, S) for L, S in ls_couplings if η0 == η1 * η2 * (-1) ** L] + + +def create_spin_range(spin: SupportsFloat) -> list[sp.Rational]: + """ + >>> create_spin_range(1.5) + [-3/2, -1/2, 1/2, 3/2] + """ + return create_rational_range(-spin, spin) + + +def create_rational_range( + __from: SupportsFloat, __to: SupportsFloat +) -> list[sp.Rational]: + """ + >>> create_rational_range(-0.5, +1.5) + [-1/2, 1/2, 3/2] + """ + spin_range = np.arange(float(__from), +float(__to) + 0.5) + return list(map(sp.Rational, spin_range)) From fa7c91370da2a5e660afca34a75038b0ef1aaf37 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:28:25 +0200 Subject: [PATCH 14/15] implement first version of decay data structures --- pyproject.toml | 1 + pyrightconfig.json | 1 + src/polarization/_attrs.py | 34 ++++++++++++++++++++++++++ src/polarization/decay.py | 50 ++++++++++++++++++++++++++++++++++++++ src/polarization/io.py | 28 +++++++++++++++++++++ tests/test_decay.py | 21 ++++++++++++++++ tests/test_io.py | 28 +++++++++++++++++++++ 7 files changed, 163 insertions(+) create mode 100644 src/polarization/_attrs.py create mode 100644 src/polarization/decay.py create mode 100644 tests/test_decay.py create mode 100644 tests/test_io.py diff --git a/pyproject.toml b/pyproject.toml index 96e8d84a..ca8d7f27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,4 +58,5 @@ norecursedirs = [ ] testpaths = [ "src", + "tests", ] diff --git a/pyrightconfig.json b/pyrightconfig.json index 85d1aad0..04198d69 100644 --- a/pyrightconfig.json +++ b/pyrightconfig.json @@ -1,6 +1,7 @@ { "include": ["src", "tests"], "reportGeneralTypeIssues": false, + "reportImportCycles": false, "reportMissingParameterType": false, "reportMissingTypeArgument": false, "reportMissingTypeStubs": false, diff --git a/src/polarization/_attrs.py b/src/polarization/_attrs.py new file mode 100644 index 00000000..dc6c4243 --- /dev/null +++ b/src/polarization/_attrs.py @@ -0,0 +1,34 @@ +"""Helper functions for constructing `attrs` decorated classes.""" +from __future__ import annotations + +from typing import TYPE_CHECKING, SupportsFloat + +import sympy as sp +from attrs import Attribute + +if TYPE_CHECKING: + from polarization.decay import LSCoupling + + +def assert_spin_value(instance, attribute: Attribute, value: sp.Rational) -> None: + if value.denominator not in {1, 2}: + raise ValueError( + f"{attribute.name} value should be integer or half-integer, not {value}" + ) + + +def to_ls(obj: LSCoupling | tuple[int, SupportsFloat] | None) -> LSCoupling: + from polarization.decay import LSCoupling + + if obj is None: + return None + if isinstance(obj, LSCoupling): + return obj + if isinstance(obj, tuple): + L, S = obj + return LSCoupling(L, S) + raise TypeError(f"Cannot convert {type(obj).__name__} to {LSCoupling.__name__}") + + +def to_rational(obj: SupportsFloat) -> sp.Rational: + return sp.Rational(obj) diff --git a/src/polarization/decay.py b/src/polarization/decay.py new file mode 100644 index 00000000..2190b8cb --- /dev/null +++ b/src/polarization/decay.py @@ -0,0 +1,50 @@ +"""Data structures that describe a three-body decay.""" +from __future__ import annotations + +import sympy as sp +from attrs import field, frozen +from attrs.validators import instance_of + +from polarization._attrs import assert_spin_value, to_ls, to_rational + + +@frozen +class ThreeBodyDecay: + initial_state: Particle + final_state: tuple[Particle, Particle, Particle] + resonances: tuple[IsobarNode, ...] + + def __attrs_post_init__(self) -> None: + for resonance in self.resonances: + if self.final_state != resonance.children: + final_state = ", ".join(p.name for p in self.final_state) + raise ValueError( + f"Resonance {resonance.parent.name} →" + f" {resonance.child1.name} {resonance.child2.name} does not decay" + f" to {final_state}" + ) + + +@frozen +class Particle: + name: str + spin: sp.Rational = field(converter=to_rational, validator=assert_spin_value) + parity: int + + +@frozen +class IsobarNode: + parent: Particle = field(validator=instance_of(Particle)) + child1: Particle = field(validator=instance_of(Particle)) + child2: Particle = field(validator=instance_of(Particle)) + interaction: LSCoupling | None = field(default=None, converter=to_ls) + + @property + def children(self) -> tuple[Particle, Particle]: + return self.child1, self.child2 + + +@frozen +class LSCoupling: + L: int + S: sp.Rational = field(converter=to_rational, validator=assert_spin_value) diff --git a/src/polarization/io.py b/src/polarization/io.py index 82eff70e..ea6ee8a8 100644 --- a/src/polarization/io.py +++ b/src/polarization/io.py @@ -23,12 +23,18 @@ import sympy as sp +from polarization.decay import IsobarNode, Particle + @singledispatch def as_latex(obj) -> str: """Render objects as a LaTeX `str`. The resulting `str` can for instance be given to `IPython.display.Math`. + + Optional keywords: + + - `render_jp`: Render a `Particle` as :math:`J^P` (spin-parity). """ return str(obj) @@ -73,3 +79,25 @@ def _(obj: Iterable) -> str: latex += Rf" {item} \\" + "\n" latex += R"\end{array}" return latex + + +@as_latex.register(IsobarNode) +def _(obj: IsobarNode, render_jp: bool = False) -> str: + def render_arrow(node: IsobarNode) -> str: + if node.interaction is None: + return R"\to" + return Rf"\xrightarrow[S={node.interaction.S}]{{L={node.interaction.L}}}" + + parent = as_latex(obj.parent, render_jp) + to = render_arrow(obj) + child1 = as_latex(obj.child1, render_jp) + child2 = as_latex(obj.child2, render_jp) + return Rf"{parent} {to} {child1} {child2}" + + +@as_latex.register(Particle) +def _(obj: Particle, render_jp: bool = False) -> str: + if render_jp: + parity = "-1" if obj.parity < 0 else "+1" + return f"{{{obj.spin}}}^{{{parity}}}" + return obj.name diff --git a/tests/test_decay.py b/tests/test_decay.py new file mode 100644 index 00000000..b41097be --- /dev/null +++ b/tests/test_decay.py @@ -0,0 +1,21 @@ +from polarization.decay import IsobarNode, Particle + +# https://compwa-org--129.org.readthedocs.build/report/018.html#resonances-and-ls-scheme +Λc = Particle(R"\Lambda_c^+", spin=0.5, parity=+1) +p = Particle("p", spin=0.5, parity=+1) +π = Particle(R"\pi^+", spin=0, parity=-1) +K = Particle("K^-", spin=0, parity=-1) +Λ1520 = Particle(R"\Lambda(1520)", spin=1.5, parity=-1) + + +class TestIsobarNode: + def test_children(self): + decay = IsobarNode(Λ1520, p, K) + assert decay.children == (p, K) + + def test_ls(self): + L, S = 2, 1 + node = IsobarNode(Λ1520, p, K, interaction=(L, S)) + assert node.interaction is not None + assert node.interaction.L == L + assert node.interaction.S == S diff --git a/tests/test_io.py b/tests/test_io.py new file mode 100644 index 00000000..7da9f202 --- /dev/null +++ b/tests/test_io.py @@ -0,0 +1,28 @@ +from polarization.decay import IsobarNode, Particle +from polarization.io import as_latex + +# https://compwa-org--129.org.readthedocs.build/report/018.html#resonances-and-ls-scheme +Λc = Particle(R"\Lambda_c^+", spin=0.5, parity=+1) +p = Particle("p", spin=0.5, parity=+1) +π = Particle(R"\pi^+", spin=0, parity=-1) +K = Particle("K^-", spin=0, parity=-1) +Λ1520 = Particle(R"\Lambda(1520)", spin=1.5, parity=-1) + + +def test_as_latex_particle(): + latex = as_latex(Λ1520) + assert latex == Λ1520.name + latex = as_latex(Λ1520, render_jp=True) + assert latex == R"{3/2}^{-1}" + + +def test_as_latex_isobar_node(): + node = IsobarNode(Λ1520, p, K) + latex = as_latex(node) + assert latex == R"\Lambda(1520) \to p K^-" + latex = as_latex(node, render_jp=True) + assert latex == R"{3/2}^{-1} \to {1/2}^{+1} {0}^{-1}" + + node = IsobarNode(Λ1520, p, K, interaction=(2, 1)) + latex = as_latex(node) + assert latex == R"\Lambda(1520) \xrightarrow[S=1]{L=2} p K^-" From 81db4f2d4c74ba211b2aff08fb0b8186345fe538 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Sun, 1 May 2022 13:14:11 +0200 Subject: [PATCH 15/15] implement Resonance class and import isobars.json --- setup.cfg | 1 + src/polarization/dynamics.py | 33 +++++++++++++++++++++ src/polarization/io.py | 56 ++++++++++++++++++++++++++++++++++++ tests/test_io.py | 24 +++++++++++++++- 4 files changed, 113 insertions(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index bcea1c53..8dba948f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -15,6 +15,7 @@ install_requires = ampform >=0.14.0 numpy sympy >=1.10 # module sympy.printing.numpy and array expressions with shape kwarg + typing-extensions; python_version <"3.8.0" packages = find: package_dir = =src diff --git a/src/polarization/dynamics.py b/src/polarization/dynamics.py index 44a65663..47f63578 100644 --- a/src/polarization/dynamics.py +++ b/src/polarization/dynamics.py @@ -1,4 +1,8 @@ # pyright: reportPrivateUsage=false +from __future__ import annotations + +import sys + import sympy as sp from ampform.sympy import ( UnevaluatedExpression, @@ -6,6 +10,14 @@ implement_doit_method, make_commutative, ) +from attrs import frozen + +from polarization.decay import Particle + +if sys.version_info < (3, 8): + from typing_extensions import Literal +else: + from typing import Literal @make_commutative @@ -125,3 +137,24 @@ def evaluate(self): def _latex(self, printer, *args): z, L = map(printer._print, self.args) return Rf"F_{{{L}}}\left({z}\right)" + + +@frozen +class Resonance: + particle: Particle + mass_range: tuple[float, float] + width_range: tuple[float, float] + lineshape: Literal["BreitWignerMinL", "BuggBreitWignerMinL", "Flatte1405"] + + @property + def mass(self) -> float: + return _compute_average(self.mass_range) + + @property + def width(self) -> float: + return _compute_average(self.width_range) + + +def _compute_average(range_def: float | tuple[float, float]) -> float: + _min, _max = range_def + return (_max + _min) / 2 diff --git a/src/polarization/io.py b/src/polarization/io.py index ea6ee8a8..5c36cf8f 100644 --- a/src/polarization/io.py +++ b/src/polarization/io.py @@ -17,6 +17,7 @@ """ from __future__ import annotations +import sys from collections import abc from functools import singledispatch from typing import Iterable, Mapping @@ -24,6 +25,12 @@ import sympy as sp from polarization.decay import IsobarNode, Particle +from polarization.dynamics import Resonance + +if sys.version_info < (3, 8): + from typing_extensions import Literal, TypedDict +else: + from typing import Literal, TypedDict @singledispatch @@ -101,3 +108,52 @@ def _(obj: Particle, render_jp: bool = False) -> str: parity = "-1" if obj.parity < 0 else "+1" return f"{{{obj.spin}}}^{{{parity}}}" return obj.name + + +def to_resonance_dict(definition: dict[str, ResonanceJSON]) -> dict[str, Resonance]: + return { + name: to_resonance(name, resonance_def) + for name, resonance_def in definition.items() + } + + +def to_resonance(name: str, definition: ResonanceJSON) -> Resonance: + spin, parity = _to_jp_pair(definition["jp"]) + return Resonance( + Particle(name, spin, parity), + mass_range=_to_float_range(definition["mass"]), + width_range=_to_float_range(definition["width"]), + lineshape=definition["lineshape"], + ) + + +def _to_float_range(input_str: str) -> tuple[float, float]: + """ + >>> _convert_mass_string("1405.1") + (1405.1, 1405.1) + >>> _convert_mass_string("1900-2100") + (1900.0, 2100.0) + """ + if "-" in input_str: + _min, _max, *_ = map(float, input_str.split("-")) + else: + _min = _max = float(input_str) + return _min, _max + + +def _to_jp_pair(input_str: str) -> tuple[sp.Rational, int]: + """ + >>> _convert_jp_string("3/2^-") + (3/2, -1) + >>> _convert_jp_string("0^+") + (0, 1) + """ + spin, parity_sign = input_str.split("^") + return sp.Rational(spin), int(f"{parity_sign}1") + + +class ResonanceJSON(TypedDict): + jp: str + mass: str + width: str + lineshape: Literal["BreitWignerMinL", "BuggBreitWignerMinL", "Flatte1405"] diff --git a/tests/test_io.py b/tests/test_io.py index 7da9f202..eec518a8 100644 --- a/tests/test_io.py +++ b/tests/test_io.py @@ -1,5 +1,8 @@ +import json +from pathlib import Path + from polarization.decay import IsobarNode, Particle -from polarization.io import as_latex +from polarization.io import as_latex, to_resonance_dict # https://compwa-org--129.org.readthedocs.build/report/018.html#resonances-and-ls-scheme Λc = Particle(R"\Lambda_c^+", spin=0.5, parity=+1) @@ -26,3 +29,22 @@ def test_as_latex_isobar_node(): node = IsobarNode(Λ1520, p, K, interaction=(2, 1)) latex = as_latex(node) assert latex == R"\Lambda(1520) \xrightarrow[S=1]{L=2} p K^-" + + +def test_import_isobar_definitions(): + pwd = Path(__file__).absolute().parent + data_dir = pwd.parent / "data" + with open(data_dir / "isobars.json") as stream: + data = json.load(stream) + isobar_definitions = data["isobars"] + resonances = to_resonance_dict(isobar_definitions) + assert len(resonances) == 12 + Λ2000 = resonances["L(2000)"] + assert Λ2000.particle.name == "L(2000)" + assert Λ2000.particle.spin == 0.5 + assert Λ2000.particle.parity == -1 + assert Λ2000.mass_range == (1900, 2100) + assert Λ2000.mass == 2000 + assert Λ2000.width_range == (20, 400) + assert Λ2000.width == 210 + assert Λ2000.lineshape == "BreitWignerMinL"