diff --git a/.cspell.json b/.cspell.json new file mode 100644 index 0000000..4c1ef3d --- /dev/null +++ b/.cspell.json @@ -0,0 +1,48 @@ +{ + "dictionaries": ["physics", "project"], + "dictionaryDefinitions": [ + { + "addWords": true, + "name": "julia", + "path": "./.cspell/julia.txt" + }, + { + "addWords": true, + "name": "project", + "path": "./.cspell/project.txt" + }, + { + "addWords": true, + "name": "physics", + "path": "./.cspell/physics.txt" + } + ], + "enableFiletypes": ["julia", "quarto"], + "ignorePaths": [ + ".cspell.json", + ".cspell/*.txt", + ".editorconfig", + ".github/workflows", + ".gitignore", + ".pre-commit-config.yaml", + ".taplo.toml", + ".vscode/*.json", + "json_options.jl", + "Manifest.toml", + "models/*.json", + "pixi.lock", + "pixi.toml", + "Project.toml", + "pyproject.toml", + "read_json.jl" + ], + "language": "en-US", + "languageSettings": [ + { + "dictionaries": ["julia", "physics", "project"], + "languageId": ["julia", "quarto", "text"] + } + ], + "version": "0.2", + "ignoreWords": ["formfactor", "pdfs"] +} diff --git a/.cspell/julia.txt b/.cspell/julia.txt new file mode 100644 index 0000000..4c59e8f --- /dev/null +++ b/.cspell/julia.txt @@ -0,0 +1,15 @@ +compat +eachslice +guidefonthalign +guidefontvalign +joinpath +lims +minorticks +mlims +Mmap +quadgk +struct +xlab +xlim +ylab +ylim diff --git a/.cspell/physics.txt b/.cspell/physics.txt new file mode 100644 index 0000000..72929eb --- /dev/null +++ b/.cspell/physics.txt @@ -0,0 +1,15 @@ +Blatt +Breit +Bugg +Clebsch +Dalitz +Flatté +Gordan +helicities +helicity +Jpsi +lineshape +lineshapes +parametrizations +recoupling +Weisskopf diff --git a/.cspell/project.txt b/.cspell/project.txt new file mode 100644 index 0000000..4f74cc9 --- /dev/null +++ b/.cspell/project.txt @@ -0,0 +1,8 @@ +calv +colorbar +latexstring +Mikhasenko +Misha +multline +Semileptonic +textrm diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 90142ba..110d486 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,6 +27,11 @@ repos: args: ["--schemafile", "schema.json"] files: ^models/.*\.(json|yaml|yml)$ + - repo: https://github.com/streetsidesoftware/cspell-cli + rev: v8.8.0 + hooks: + - id: cspell + - repo: https://github.com/pre-commit/mirrors-prettier rev: v4.0.0-alpha.8 hooks: diff --git a/docs/HS3.md b/docs/HS3.md index c6eb3c9..dca0045 100644 --- a/docs/HS3.md +++ b/docs/HS3.md @@ -108,7 +108,7 @@ To sample from the model using the kinematic variables defined in `variable` sec The priors are given in the list of distributions. ```jsonc -"distibutions": [ +"distributions": [ {}, { "name": "my_prior_dist", diff --git a/docs/_quarto.yml b/docs/_quarto.yml index 49a4e2c..94e7a24 100644 --- a/docs/_quarto.yml +++ b/docs/_quarto.yml @@ -1,3 +1,4 @@ +# cspell:ignore pkpi subdir execute: cache: true enabled: true diff --git a/docs/description.md b/docs/description.md index 4e0128c..86d2628 100644 --- a/docs/description.md +++ b/docs/description.md @@ -2,46 +2,45 @@ ## Introduction -### Overview +The Amplitude Model Serialization Format defines a structured, JSON-based specification that is designed to facilitate reproducibility and validation of theoretical frameworks within the hadron physics community. It provides a standardized, minimal approach to describing particle kinematics, lineshapes, and interaction chains. -The model description format delineates a structured, JSON-based specification designed to facilitate the reproducibility and validation of theoretical frameworks within the physics community. It provides a standardized approach to describing particle kinematics, lineshapes, and interaction chains, crucial for interpreting results from amplitude analyses (AmAn) and ensuring the accuracy and consistency of theoretical models. This document targets framework developers and experts engaged in high-energy physics, computational physics, and related fields. +This document targets framework developers and experts engaged in high-energy physics, computational physics, and related fields. The format is designed to be extensible, allowing for the incorporation of new features and enhancements as the field evolves. Feedback can be provided via [our issues page](https://github.com/RUB-EP1/amplitude-serialization/issues) or the [discussions page](https://github.com/RUB-EP1/amplitude-serialization/discussions). ### Objectives -- **Reproducibility and Open Science:** By standardizing model descriptions, this format aims to enhance the reproducibility of computational experiments and theoretical analyses. It supports open science initiatives by making it easier for researchers to share, validate, and build upon each other's work. -- **Inference from Amplitude Analysis Results:** The format is designed to facilitate the interpretation of AmAn results by the theory community. By providing a clear and comprehensive model description, it helps bridge the gap between experimental data and theoretical insights. +- **Reproducibility and Open Science**
+ By standardizing model descriptions, this format aims to enhance the reproducibility of computational experiments and theoretical analyses. It supports open science initiatives by making it easier for researchers to share, validate, and build upon each other's work. +- **Inference from amplitude analysis results**
+ The format is designed to facilitate the interpretation of amplitude analysis results by the theory community. By providing a clear and comprehensive model description, it helps bridge the gap between experimental data and theoretical insights. -- **Correctness/Validity Check for New Frameworks:** As new computational frameworks and models are developed, this format serves as a benchmark for validating their correctness. It ensures that new tools and approaches adhere to established standards, fostering innovation while maintaining scientific rigor. +- **Correctness/Validity check for new Frameworks**
+ As new computational frameworks and models are developed, this format serves as a benchmark check for validating their correctness. It ensures that new tools and approaches adhere to established standards, fostering innovation while maintaining scientific rigor. -- **Integration with Monte Carlo (MC) Generators:** The format is compatible with MC generators, enabling seamless integration and simulation workflows. This compatibility is critical for testing theoretical models against experimental data and for conducting high-fidelity simulations. +- **Integration with Monte Carlo (MC) generators**
+ The format is compatible with MC generators, enabling seamless integration and simulation workflows. This compatibility is critical for testing theoretical models against experimental data and for conducting high-fidelity simulations. -- **Benchmark for New GPU/CPU Extensions:** The structured nature of the model description format makes it an ideal benchmark for new GPU and CPU extensions aimed at computational physics applications. By providing a common material for benchmarking, it aids in evaluating the performance enhancements offered by new hardware and software technologies. +- **Benchmark for new computational devices**
+ The structured nature of the model description format makes it an ideal benchmark for new processing units (GPU, CPU, ...) or accelerated computation techniques. By providing a common material for benchmarking, it aids in evaluating the performance enhancements offered by new hardware and software technologies. This document presents the specifications of the model description format in detail, outlining its structure, components, and applications. It is intended as a comprehensive guide for developers and theorists working at the intersection of computational and theoretical physics, ensuring that the tools and models they develop are both accurate and interoperable. ## Amplitude model and observables -In modeling, the Probability Density Function (PDF) serves as a fundamental concept for predicting and analyzing the outcomes of particle interactions. The PDF is a real, normalizable function that depends on kinematic variables and parameters, providing a quantitative framework to describe the likelihood of observing a particular configuration or outcome in a particle decay or collision event. +In modeling, the Probability Density Function (PDF) serves as a fundamental concept for predicting and analyzing the outcomes of particle interactions. PDFs are real-valued, normalizable functions that depends on kinematic variables and parameters, providing a quantitative framework to describe the likelihood of observing a particular configuration or outcome in a particle decay or collision event. ### Observables -Observables are measurable quantities derived from the model, offering insight into the underlying physics governing particle interactions. In the context of amplitude models, observables are calculated from the transition amplitudes, which represent the probability amplitudes for the system to transition from an initial to a final state. Two primary observables are defined in this framework: +Observables are measurable quantities derived from the model that offer insight into the underlying physics governing particle interactions. In the context of amplitude models, observables are calculated from transition amplitudes, which represent the probability amplitudes of the system to transition from an initial to a final state. Two primary observables are defined in this framework: -1. **Unpolarized Intensity:** - The unpolarized intensity is an observable that represents the overall likelihood of a transition without considering the polarization states of the particles involved. It is computed as the squared magnitude of the transition amplitude, summed over all spin projections. Mathematically, the unpolarized intensity ($I_{unpolarized}$) is given by: +#### Unpolarized Intensity - $$I_{unpolarized}(\tau | \text{pars}) = \sum_{\text{helicities}} |A_{\text{helicities}}(\tau | \text{pars})|^2$$ +The unpolarized intensity is an observable that represents the overall likelihood of a transition without considering the polarization states of the particles involved. It is computed as the squared magnitude of the transition amplitude, summed over all spin projections. Mathematically, the unpolarized is given by - where $A_{\text{helicities}}(\tau | \text{pars})$ denotes the transition amplitude for a given set of helicities, $\tau$ represents the kinematic variables, and $\text{pars}$ symbolizes the model parameters. This observable is crucial for experiments where the polarization of the particles is not measured or considered. - -2. **Polarized Intensity:** - In contrast, the polarized intensity accounts for the polarization states of the particles involved in the interaction. It is computed by contracting the transition amplitude and its complex conjugate with the polarization matrix ($\rho$). This process involves summing over the final helicities while keeping the initial helicity states ($\lambda_0, \lambda_0'$) explicit in the calculation: - - $$ - I_\text{polarized}(\tau | \text{pars}) = \sum_{\text{final\_helicities}} A^*_{\lambda_0, \text{final\_helicities}}(\tau | \text{pars}) \times \rho_{\lambda_0,\lambda_0'} \times A_{\lambda_0', \text{final\_helicities}}(\tau | \text{pars}) - $$ +$$ +I_\text{unpolarized}(\tau | \text{pars}) = \sum_{\text{helicities}} |A_{\text{helicities}}(\tau | \text{pars})|^2, +$$ - Here, $A^*_{\lambda_0', \text{final\_helicities}}$ represents the complex conjugate of the amplitude for initial helicity $\lambda_0'$ and a sum over final helicities. The polarization matrix $\rho_{\lambda_0,\lambda_0'}$ encapsulates the initial polarization states of the system, allowing for a detailed analysis of how polarization affects the transition probabilities. +where $A_{\text{helicities}}(\tau | \text{pars})$ denotes the transition amplitude for a given set of helicities, $\tau$ represents the kinematic variables, and $\text{pars}$ symbolizes the model parameters. This observable is crucial for experiments where the polarization of the particles is not measured or considered. ```json { @@ -62,6 +61,16 @@ Observables are measurable quantities derived from the model, offering insight i } ``` +#### Polarized Intensity + +In contrast, the polarized intensity accounts for the polarization states of the particles involved in the interaction. It is computed by contracting the transition amplitude and its complex conjugate with the polarization matrix ($\rho$). This process involves summing over the final helicities while keeping the initial helicity states ($\lambda_0, \lambda_0'$) explicit in the calculation: + +$$ +I_\text{polarized}(\tau | \text{pars}) = \sum_{\text{final\_helicities}} A^*_{\lambda_0, \text{final\_helicities}}(\tau | \text{pars}) \times \rho_{\lambda_0,\lambda_0'} \times A_{\lambda_0', \text{final\_helicities}}(\tau | \text{pars})\,. +$$ + +Here, $A^*_{\lambda_0', \text{final\_helicities}}$ represents the complex conjugate of the amplitude for initial helicity $\lambda_0'$ and a sum over final helicities. The polarization matrix $\rho_{\lambda_0,\lambda_0'}$ encapsulates the initial polarization states of the system, allowing for a detailed analysis of how polarization affects the transition probabilities. + ## Model Structure Overview The model description is designed to encapsulate all elements of transition models, including the characteristics of particles involved, the shapes of their interaction lines, and the overarching topology of particle interactions. The format's hierarchical nature allows for detailed specification of models while maintaining readability and ease of manipulation by software tools. @@ -70,11 +79,11 @@ The model description is designed to encapsulate all elements of transition mode The model description is organized around several mandatory root-level components, each serving a distinct purpose in defining the physical model: -- **`kinematics`:** This section contains information about the particles involved in the model, including their spins, indices for identification, names, and masses. It establishes the foundational elements of the model by specifying the properties of each particle. +- **[`kinematics`](#kinematics-section):** This section contains information about the particles involved in the model, including their spins, indices for identification, names, and masses. It establishes the foundational elements of the model by specifying the properties of each particle. -- **`reference_topology`:** This array defines the basic interaction structure or topology of the model which is used to define the reference quanzation axes. It outlines the decay chain for which the amplitude is written without a need for the alignment rotations. All other chains that have different decay topology must be aligned to the reference one. +- **[`reference_topology`](#topology-and-reference-topology):** This array defines the basic interaction structure or topology of the model which is used to define the reference quantization axes. It outlines the decay chain for which the amplitude is written without a need for the alignment rotations. All other chains that have different decay topology must be aligned to the reference one. -- **`chains`:** The chains section lists specific interactions within the model, detailing the propagators, vertices with parametrization scheme and a complex coupling. Each chain is a cascade of decays that follows the chain topology. For every node one specifies the vertex propertied, +- **[`chains`](#chains-section):** The chains section lists specific interactions within the model, detailing the propagators, vertices with parametrization scheme and a complex coupling. Each chain is a cascade of decays that follows the chain topology. For every node one specifies the vertex propertied, and a parametrization (the lineshape) of an intermediate resonance that ends on the node. ## Kinematics Section @@ -126,29 +135,34 @@ It species the main properties such as spin, and masses of all particles. ## Topology and Reference Topology -The `reference_topology` array within the model description format serves a pivotal role in defining how helicity amplitude is computed. By specifying the reference topology, one sets quantization axes for particle helicities. Helicity, the projection of a particle's spin along its direction of motion, is a quantity whose precise definition is contingent upon the frame of reference in which it is evaluated. Accurate determination of helicity states is crucial for computing the correct amplitude values, however, the choice does not affect the value of the `unpolarized_intensity` upon a few exceptions. - -In the context of the conventional helicity formalism, the `reference_topology` array implicitly prescribes a method for defining helicities. It comes from the specification of a default quantization frame for each stage of the decay process. The helicity values employed in the indices of Wigner rotations `D_{λ1, λ2}` and couplings `H_{λ1, λ2}` are thus indicative of this frame. When considering a particle's helicity in any other frame, it must be treated as a superposition of the states defined by the default quantization. +Purpose of the `reference_topology` is two folded. First, it defines how kinematics of the decay is parametrized, i.e. which combination of masses and angles is used to describe the phase space. Second, the `reference_topology` plays crucial role in defining how helicity amplitudes are computed. The reference topology is used to fix the quantization axes for particle helicities. Since helicity is the projection of a particle's spin along its direction of motion, its precise definition depends upon the frame of reference in which it is evaluated. +As the `reference_topology` unambiguously defines the path to traverse the decay graph from initial to the final states, it sets a frame for each helicity, where it is defined. The helicity values employed in the indices of Wigner rotations `D_{λ1, λ2}` and couplings `H_{λ1, λ2}` are thus indicative of this frame. ### An example of four-body decay -As as example, let's look into an application of the conventional helicity formalism to a four-body decay topology, specifically `[[[3,1],4],2]`. This topology outlines the decay sequence and the respective frames that define the helicities of the involved particles. Understanding the relation between the decay frames and the helicity definitions is crucial for accurately computing decay amplitudes within this formalism. +Understanding the relation between the decay frames and the helicity definitions is crucial for accurately computing decay amplitudes within the conventional helicity formalism. +As an example, let's investigate a four-body decay topology, specifically `[[[3,1],4],2]`. +This topology outlines the decay sequence and the respective frames that define the helicities of the involved particles. -In the given topology, the decay amplitude calculation involves a series of Wigner D-functions, each corresponding to rotations and boosts that define the helicity states of the particles: +The decay amplitude reads as a series of Wigner $D$-functions, each corresponding to a spacial rotation in the reads frame of particle system indicated by the node of the graph: $$ \begin{align} -A &= n_{j_0} D_{\tau, \lambda_2}^{j_0}(\text{angles}_{[[3,1],4]}) \\ -&\quad \cdot n_{j_{[[3,1],4]}} D_{\nu, \lambda_4}^{j_{[[3,1],4]}}(\text{angles}_{[3,1]}) \\ -&\quad \cdot n_{j_{[3,1]}} D_{\lambda_3, \lambda_1}^{j_{[3,1]}}(\text{angles}_3) +A &= n_{j_0} D_{m_0, \tau-\lambda_2}^{j_0}(\text{angles}_{[[3,1],4]}) \,\, H_{\tau,\lambda_2} \\ +% +&\quad \cdot n_{j_{[[3,1],4]}} D_{\tau, \nu-\lambda_4}^{j_{[[3,1],4]}}(\text{angles}_{[3,1]}) \\ +% +&\quad \cdot n_{j_{[3,1]}} D_{\nu, \lambda_3-\lambda_1}^{j_{[3,1]}}(\text{angles}_3) \,\, H_{\lambda_3,\lambda_1} \end{align} $$ -- $D_{\tau, \lambda_2}^{j_0}(\text{angles}_{[[3,1],4]})$: This function describes the transformation for particle 2's helicity (`λ2`) in the overall rest frame of the system (comprising particles 3, 1, 4, and 2). Here, particle 2's helicity is defined relative to the frame where all other particles are considered, emphasizing its position in the decay sequence. +- $D_{m_0, \tau - \lambda_2}^{j_0}(\text{angles}_{[[3,1],4]})$ describes the decay of particle 0 into a system `[3,1,4]`, and a particle `2` with helicities $\nu$, and $\lambda_2$, respectively. The decay is considered in the overall rest frame of the system (comprising particles `3`, `1`, `4`, and `2`). + Here is the first appearance of the $\lambda_2$, hence the helicity state of particle `2` is defined from its rest frame by boost-z and rotation to the total center of momentum. + The index $m_0$ is the spin projection of the decaying particle (0). It's a canonical state as the particle is at rest. -- $D_{\nu, \lambda_4}^{j_{[[3,1],4]}}(\text{angles}_{[3,1]})$: For particle 4, its helicity (`λ4`) is defined within the rest frame of the (3,1,4) system. This frame is obtained from the overall rest frame by applying a rotation and boost, signifying the progression of the decay sequence and the specific frame where particle 4's helicity is defined. +- $D_{\tau,\nu-\lambda_4}^{j_{[[3,1],4]}}(\text{angles}_{[3,1]})$: For particle `4`, its helicity, $\lambda_4$, is defined within the rest frame of the `[3,1,4]` system. This frame is obtained from the overall rest frame by applying a rotation and boost, signifying the progression of the decay sequence. -- $D_{\lambda_3, \lambda_1}^{j_{[3,1]}}(\text{angles}_3)$: The helicities of particles 3 (`λ3`) and 1 (`λ1`) are defined within the (3,1) rest frame. This frame is reached through successive transformations: first to the (3,1,4) system and then to the (3,1) subsystem. This sequence of boosts and rotations precisely defines the helicity states of particles 3 and 1 in relation to their specific interaction frame. +- $D_{\nu, \lambda_3-\lambda_1}^{j_{[3,1]}}(\text{angles}_3)$: The helicities of particles `3` and `1`, $\lambda_3$ and $\lambda_1$, are defined within the `[3,1]` rest frame. This frame is reached through successive transformations, starting from the overall center-of-momentum frame, first, to the `[3,1,4]` system and then to the `[3,1]` subsystem. ## Chains Section @@ -164,26 +178,32 @@ Vertices define the nodes in the decay graphs, where one particle transits into - **`node`:** Defines a node in the topology graph by specifying the particles involved in the interaction. -- **`type`:** Specifes how the helicity recoupling factor `H_{l1,l2}` is computed. +- **`type`:** Specifies how the helicity recoupling factor `H_{l1,l2}` is computed. Three types are defined: `ls`, `parity`, and `helicity`. - These reflect different ways of relating combinations of the helicity indices to a real-valued factor, the recoupling coefficient. - - $$ - \begin{align} - H^\text{helicity}(\lambda_a,\lambda_b|\lambda_a^0,\lambda_b^0) &= \delta_{\lambda_a,\lambda_a^0}\delta_{\lambda_b,\lambda_b^0}\,, \\ - H^\text{parity}(\lambda_a,\lambda_b|\lambda_a^0,\lambda_b^0, f) &= - \delta_{\lambda_a,\lambda_a^0}\delta_{\lambda_b,\lambda_b^0} + f \delta_{\lambda_a,-\lambda_a^0}\delta_{\lambda_b,-\lambda_b^0}\,, \\ - H^\text{ls}(\lambda_a,\lambda_b|l,s,j_a,j_b,j) &= \sqrt{\frac{2l+1}{2j+1}} - \left\langle j_a,\lambda_a; j_b,-\lambda_b|s,\lambda_a-\lambda_b\right\rangle - \left\langle l,0; s,\lambda_a-\lambda_b|j,\lambda_a-\lambda_b\right\rangle\,. - \end{align} - $$ - - The `helicity` indicated no recoupling, the factor is $1$ for a pair of selected helicities ($\lambda_a^0$ and $\lambda_b^0$) and zero for other combinations. The `ParityRecoupling` is controlled by the controlled by the `parity factor`, $f$, and gives non-zero value for two combination of the helicity pair, the selected one and the opposite. Finally, the `RecouplingLS` computes the value of the recoupling functions from Clebsch–Gordan coefficients. For spin-half particles, this recoupling is equivalent to `ParityRecoupling`, with $f = (-1)^l$. + These reflect different ways of relating combinations of the helicity indices to a real-valued "recoupling coefficient". + + - `helicity` indicates no recoupling: the factor is $1$ for a pair of selected helicities ($\lambda_a^0$ and $\lambda_b^0$) and zero for other combinations. + $$ + H^\text{helicity}(\lambda_a,\lambda_b|\lambda_a^0,\lambda_b^0) = \delta_{\lambda_a,\lambda_a^0}\delta_{\lambda_b,\lambda_b^0} + $$ + - `parity` recoupling is non-zero value for two combination of the helicity pair, the selected one ($\lambda_a^0$ and $\lambda_b^0$), and the opposite ($-\lambda_a^0$ and $-\lambda_b^0$). The recoupling coefficient for the former is 1, while for the latter is equal to the `parity factor`. + $$ + H^\text{parity}(\lambda_a,\lambda_b|\lambda_a^0,\lambda_b^0, f) = + \delta_{\lambda_a,\lambda_a^0}\delta_{\lambda_b,\lambda_b^0} + f \delta_{\lambda_a,-\lambda_a^0}\delta_{\lambda_b,-\lambda_b^0} + $$ + - `ls` computes the value of the recoupling functions from Clebsch–Gordan coefficients. + $$ + \begin{multline} + H^\text{ls}(\lambda_a,\lambda_b|l,s,j_a,j_b,j) = \\ + \sqrt{\frac{2l+1}{2j+1}} + \left\langle j_a,\lambda_a; j_b,-\lambda_b|s,\lambda_a-\lambda_b\right\rangle + \left\langle l,0; s,\lambda_a-\lambda_b|j,\lambda_a-\lambda_b\right\rangle + \end{multline} + $$ ### Propagators -- **`type`:** The `type` field within each propagator specifies the mathematical or physical model used to describe the propagation of a particle between interactions. This type is directly linked to the `lineshapes` section, where the detailed characteristics of each propagator type (e.g., resonance models like Breit-Wigner or Flatte) are defined. The `type` essentially dictates how the propagator influences the chain's overall amplitude, based on its lineshape parameters. +- **`type`:** The `type` field within each propagator specifies the mathematical or physical model used to describe the propagation of a particle between interactions. This type is directly linked to the `lineshapes` section, where the detailed characteristics of each propagator type (e.g., resonance models like Breit-Wigner or Flatté) are defined. The `type` essentially dictates how the propagator influences the chain's overall amplitude, based on its lineshape parameters. - **`spin`:** The `spin` value of a propagator indicates the spin of the particle as it propagates. This is crucial for determining the angular momentum conservation and spin-related effects in the interaction, influencing the selection rules and possible transitions within the chain. diff --git a/docs/index.md b/docs/index.md index 33c53e1..9a3a55d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -72,7 +72,7 @@ Each decay chain is described by a JSON object containing five mandatory fields: ### Topology -Tolopogy of a decay is a tree of intermediate decays given in a compact form using brackets. +Topology of a decay is a tree of intermediate decays given in a compact form using brackets. In this notation, each pair of brackets indicate the node and it's children. The name of the node is simply given by its decay in the same bracket notations. @@ -108,7 +108,7 @@ quantization axes must be adjusted by using appropriate wigner rotations. ### Appendix -The `appendix` gives definition to the text keys used elsewhere in the desciption. These definions are inserted recursively, while processing the json file. +The `appendix` gives definition to the text keys used elsewhere in the description. These definitions are inserted recursively, while processing the json file. ### Complex numbers diff --git a/docs/julia/lb2pkg.qmd b/docs/julia/lb2pkg.qmd index a861685..f98dbd4 100644 --- a/docs/julia/lb2pkg.qmd +++ b/docs/julia/lb2pkg.qmd @@ -4,7 +4,7 @@ jupyter: julia-amplitude-serialization-1.10 # $\Lambda_b^0 \to p K^- \gamma$ -This page demostrates deserialization and evaluation of an amplitude model for the decay $\Lambda_b^0 \to p K^- \gamma$. The resonant structure is studied using proton-proton collision data recorded at centre-of-mass energies of $7$, $8$, and $13$ TeV collected with the LHCb detector, [INSPIRE-HEP 2765817](https://inspirehep.net/literature/2765817). +This page demonstrates deserialization and evaluation of an amplitude model for the decay $\Lambda_b^0 \to p K^- \gamma$. The resonant structure is studied using proton-proton collision data recorded at centre-of-mass energies of $7$, $8$, and $13$ TeV collected with the LHCb detector, [INSPIRE-HEP 2765817](https://inspirehep.net/literature/2765817). ```{julia} #| code-fold: true @@ -50,7 +50,7 @@ end ## Deserialization of Objects to a Workspace -Model components are deserialized from a JSON file into computational objects within a workspace for further manipulation. First, functions representing lineshapes and formfactors are built. Following this, distributions are processed and added to the workspace. +Model components are deserialized from a JSON file into computational objects within a workspace for further manipulation. First, functions representing lineshapes and form factors are built. Following this, distributions are processed and added to the workspace. ```{julia} input = open(joinpath(@__DIR__, "..", "..", "models", "Lb2pKg.json")) do io @@ -77,7 +77,7 @@ end ## Validation The integrity of the model is checked by validating the value of distributions at a few phase space points. -The table lists the validation checkes and their status. The marks "🟢", "🟡", and "🔴" indicate +The table lists the validation checks and their status. The marks "🟢", "🟡", and "🔴" indicate an accuracy of $<10^{-12}$, $<10^{-2}$, or $\ge10^{-2}$, respectively, for the difference between the reference and computed values. ```{julia} @@ -111,7 +111,7 @@ end ## Visualization -The model descibing the decay is fetched from the workspace +The model describing the decay is fetched from the workspace ```{julia} model_dist = [v for (k, v) in workspace if v isa HadronicUnpolarizedIntensity] |> first; diff --git a/docs/julia/lc2pkpi.qmd b/docs/julia/lc2pkpi.qmd index 367e504..492bf2e 100644 --- a/docs/julia/lc2pkpi.qmd +++ b/docs/julia/lc2pkpi.qmd @@ -4,7 +4,7 @@ jupyter: julia-amplitude-serialization-1.10 # $\Lambda_c^+ \to p K^- \pi^+$ -This page demostrates deserialization and evaluation of an amplitude model for the decay $\Lambda_c^+ \to p K^- \pi^+$. The amplitude analysis is performed based on roughly half a millon of $\Lambda_c^{\pm}$ decay candidates by the LHCb collaboration, [INSPIRE-HEP 2683025](https://inspirehep.net/literature/2683025). Detains on the mapped of the ampltude model onto the standard helicity formalism can be found in appendix of [INSPIRE-HEP 2623821](https://inspirehep.net/literature/2623821). +This page demonstrates deserialization and evaluation of an amplitude model for the decay $\Lambda_c^+ \to p K^- \pi^+$. The amplitude analysis is performed based on roughly half a million of $\Lambda_c^{\pm}$ decay candidates by the LHCb collaboration, [INSPIRE-HEP 2683025](https://inspirehep.net/literature/2683025). Details on the mapped of the amplitude model onto the standard helicity formalism can be found in appendix of [INSPIRE-HEP 2623821](https://inspirehep.net/literature/2623821). ```{julia} #| code-fold: true @@ -34,8 +34,8 @@ theme(:wong2, frame=:box, grid=false, minorticks=true, ## Function definitions -Non-standard lineshapes are used to model resonances that do not conform to a simple `BreitWigner` distributions, or a `MultichannelBreitWigner` has to be defined explicitly. -The code below defines a new lineshape, and its deserialization method. +The model contains non-standard lineshapes that do not conform to a simple `BreitWigner` or `MultichannelBreitWigner` distribution, so they have to be defined explicitly. +The code below defines a new lineshape and implements its deserialization method (specializing `dict2instance()` using [multiple dispatch](https://docs.julialang.org/en/v1/manual/methods/#man-method-specializations)). ```{julia} struct BreitWignerWidthExpLikeBugg <: HadronicLineshapes.AbstractFlexFunc @@ -59,7 +59,7 @@ end ## Deserialization of Objects to a Workspace -Model components are deserialized from a JSON file into computational objects within a workspace for further manipulation. First, functions representing lineshapes and formfactors are built. Following this, distributions are processed and added to the workspace. +Model components are deserialized from a JSON file into computational objects within a workspace for further manipulation. First, functions representing lineshapes and form factors are built. Following this, distributions are processed and added to the workspace. ```{julia} input = open(joinpath(@__DIR__, "..", "..", "models", "Lc2ppiK.json")) do io @@ -86,7 +86,7 @@ end ## Validation The integrity of the model is checked by validating the value of distributions at a few phase space points. -The table lists the validation checkes and their status. The marks "🟢", "🟡", and "🔴" indicate +The table lists the validation checks and their status. The marks "🟢", "🟡", and "🔴" indicate an accuracy of $<10^{-10}$, $<10^{-2}$, or $\ge10^{-2}$, respectively, for the difference between the reference and computed values. ```{julia} @@ -120,7 +120,7 @@ end ## Visualization -The model descibing the decay is fetched from the workspace +The model describing the decay is fetched from the workspace ```{julia} model_dist = [v for (k, v) in workspace if v isa HadronicUnpolarizedIntensity] |> first; @@ -145,8 +145,6 @@ let iσx = 2, iσy = 1 end ``` - -c The projection of the model onto a mass variable is shown by black line. Contributions from individual resonances are shown by the colored lines. @@ -202,13 +200,13 @@ let # chain_names = Set(model.names) |> collect |> sort _int_i = map(chain_names) do name - _calv = unpolarized_intensity.(model[model.names.==name] |> Ref, data) - _value = mean(_calv) - _err = sqrt(cov(_calv, _calv) / length(data)) + _intensities = unpolarized_intensity.(model[model.names.==name] |> Ref, data) + _value = mean(_intensities) + _err = sqrt(cov(_intensities, _intensities) / length(data)) _value ± _err end _int0 = sum(unpolarized_intensity.(model |> Ref, data)) / length(data) ff = round.(_int_i ./ _int0 .* 100; digits=2) - DataFrame("Resonance" => chain_names, "Fit Franction [%]" => ff) + DataFrame("Resonance" => chain_names, "Fit Fraction [%]" => ff) end ``` diff --git a/schema.json b/schema.json index ab44eb9..11c8435 100644 --- a/schema.json +++ b/schema.json @@ -54,11 +54,11 @@ "uniqueItems": true }, "topology": { - "description": "Structure of this decay chain represented as nasted particle grouping into intermediate subsystems.", + "description": "Structure of this decay chain represented as nested particle grouping into intermediate subsystems.", "$ref": "#/definitions/Topology" }, "vertices": { - "description": "Vertices define the nodes in the decay graphs denoted by groupping of particle indices.", + "description": "Vertices define the nodes in the decay graphs denoted by grouping of particle indices.", "type": "array", "items": { "$ref": "#/definitions/Vertex" }, "uniqueItems": true