conservation_rules¶
Collection of quantum number conservation rules for particle reactions.
This module is the place where the ‘expert’ defines the rules that verify
quantum numbers of the reaction. The module is therefore strongly typed (both
for the reader of the code and for type checking with mypy). An example is HelicityParityEdgeInput
, which has been
defined to provide type checks on ParityConservationHelicity
.
See more information under Rule
.
-
class
BaryonNumberConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
baryon_number
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.baryon_number], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.baryon_number], _=None) → bool¶ Call self as a function.
-
-
class
BottomnessConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
bottomness
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.bottomness], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.bottomness], _=None) → bool¶ Call self as a function.
-
-
class
CParityConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.conservation_rules.CParityEdgeInput], outgoing_edge_qns: List[expertsystem.reaction.conservation_rules.CParityEdgeInput], interaction_node_qns: expertsystem.reaction.conservation_rules.CParityNodeInput) → bool[source]¶ Check for \(C\)-parity conservation.
Implements \(C_{in} = C_{out}\).
-
-
class
CParityEdgeInput
(spin_mag: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, pid: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.pid, c_parity: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.c_parity] = None)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class CParityEdgeInput.
-
c_parity
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.c_parity]¶
-
-
class
CParityNodeInput
(l_mag: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.l_magnitude, s_mag: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.s_magnitude)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class CParityNodeInput.
-
-
class
ChargeConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
charge
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charge], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charge], _=None) → bool¶ Call self as a function.
-
-
class
CharmConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
charmness
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charmness], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charmness], _=None) → bool¶ Call self as a function.
-
-
class
ClebschGordanCheckHelicityToCanonical
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_spins: List[expertsystem.reaction.conservation_rules.SpinEdgeInput], outgoing_spins: List[expertsystem.reaction.conservation_rules.SpinEdgeInput], interaction_qns: expertsystem.reaction.conservation_rules.SpinNodeInput) → bool[source]¶ Implement Clebsch-Gordan checks.
For \(S_1, S_2\) to \(S\) and the \(L,S\) to \(J\) coupling based on the conversion of helicity to canonical amplitude sums.
-
-
class
ElectronLNConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
electron_lepton_number
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number], _=None) → bool¶ Call self as a function.
-
-
class
GParityConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.conservation_rules.GParityEdgeInput], outgoing_edge_qns: List[expertsystem.reaction.conservation_rules.GParityEdgeInput], interaction_qns: expertsystem.reaction.conservation_rules.GParityNodeInput) → bool[source]¶ Check for \(G\)-parity conservation.
Implements for \(G_{in} = G_{out}\).
-
-
class
GParityEdgeInput
(isospin: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, spin_mag: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, pid: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.pid, g_parity: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.g_parity] = None)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class GParityEdgeInput.
-
g_parity
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.g_parity]¶
-
-
class
GParityNodeInput
(l_mag: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.l_magnitude, s_mag: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.s_magnitude)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class GParityNodeInput.
-
-
class
GellMannNishijimaEdgeInput
(charge: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charge, isospin_proj: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.isospin_projection] = None, strangeness: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.strangeness] = None, charmness: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charmness] = None, bottomness: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.bottomness] = None, topness: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.topness] = None, baryon_number: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.baryon_number] = None, electron_ln: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number] = None, muon_ln: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number] = None, tau_ln: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number] = None)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class GellMannNishijimaEdgeInput.
-
baryon_number
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.baryon_number]¶
-
bottomness
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.bottomness]¶
-
charmness
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.charmness]¶
-
electron_ln
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number]¶
-
isospin_proj
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.isospin_projection]¶
-
muon_ln
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number]¶
-
strangeness
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.strangeness]¶
-
topness
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.topness]¶
-
-
class
GellMannNishijimaRule
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.conservation_rules.GellMannNishijimaEdgeInput], outgoing_edge_qns: List[expertsystem.reaction.conservation_rules.GellMannNishijimaEdgeInput], _=None) → bool[source]¶ Check the Gell-Mann–Nishijima formula.
\(Q=I_3+\frac{Y}{2}\) for each particle.
-
-
class
HelicityConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_spin_mags: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_magnitude], outgoing_helicities: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_projection], _=None) → bool[source]¶ Implementation of helicity conservation.
Check for \(|\lambda_2-\lambda_3| \leq S_1\).
-
-
class
HelicityParityEdgeInput
(parity: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.parity], spin_mag: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, spin_proj: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_projection)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class HelicityParityEdgeInput.
-
parity
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.parity]¶
-
-
class
IdenticalParticleSymmetrization
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.conservation_rules.IdenticalParticleSymmetryEdgeInput], outgoing_edge_qns: List[expertsystem.reaction.conservation_rules.IdenticalParticleSymmetryEdgeInput], _=None) → bool[source]¶ Implementation of particle symmetrization.
-
-
class
IdenticalParticleSymmetryEdgeInput
(parity: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.parity, spin_magnitude: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, spin_projection: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_projection, pid: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.pid)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class IdenticalParticleSymmetryEdgeInput.
-
-
class
IsoSpinConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Check for isospin conservation.
Implements
\[|I_1 - I_2| \leq I \leq |I_1 + I_2|\]Also checks \(I_{1,z} + I_{2,z} = I_z\) and if Clebsch-Gordan coefficients are all 0.
-
__call__
(ingoing_isospins: List[expertsystem.reaction.conservation_rules.IsoSpinEdgeInput], outgoing_isospins: List[expertsystem.reaction.conservation_rules.IsoSpinEdgeInput], _=None) → bool[source]¶ Call self as a function.
-
-
class
IsoSpinEdgeInput
(isospin_mag: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, isospin_proj: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.isospin_projection)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class IsoSpinEdgeInput.
-
-
class
IsoSpinValidity
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Check for valid isospin magnitude and projection.
-
__call__
(ingoing_isospins: List[expertsystem.reaction.conservation_rules.IsoSpinEdgeInput], outgoing_isospins: List[expertsystem.reaction.conservation_rules.IsoSpinEdgeInput], _=None) → bool[source]¶ Call self as a function.
-
-
class
MassConservation
(width_factor: float)[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Mass conservation rule.
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.conservation_rules.MassEdgeInput], outgoing_edge_qns: List[expertsystem.reaction.conservation_rules.MassEdgeInput], _=None) → bool[source]¶ Implements mass conservation.
\(M_{out} - N \cdot W_{out} < M_{in} + N \cdot W_{in}\)
It makes sure that the net mass outgoing state \(M_{out}\) is smaller than the net mass of the ingoing state \(M_{in}\). Also the width \(W\) of the states is taken into account.
-
-
class
MassEdgeInput
(mass: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.mass, width: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.width] = None)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class MassEdgeInput.
-
width
: Optional[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.width]¶
-
-
class
MuonLNConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
muon_lepton_number
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number], _=None) → bool¶ Call self as a function.
-
-
class
ParityConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.parity], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.parity], l_mag: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.l_magnitude) → bool[source]¶ Implement \(P_{in} = P_{out} \cdot (-1)^L\).
-
-
class
ParityConservationHelicity
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.conservation_rules.HelicityParityEdgeInput], outgoing_edge_qns: List[expertsystem.reaction.conservation_rules.HelicityParityEdgeInput], parity_prefactor: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.parity_prefactor) → bool[source]¶ Implements parity conservation for helicity formalism.
Check the following:
\[A_{-\lambda_1-\lambda_2} = P_1 P_2 P_3 (-1)^{S_2+S_3-S_1} A_{\lambda_1\lambda_2}\]Notice that only the special case \(\lambda_1=\lambda_2=0\) may return False.
-
-
class
Rule
[source]¶ Bases:
object
Interface for conservation rules.
A
Rule
performs checks on anInteractionNode
and its attachedEdge
instances. The__call__
method contains actual rule logic and has to be overwritten.Warning
Besides the rule logic itself, a
Rule
also has the responsibility of stating its run conditions. These run conditions must be stated by the type annotations of its__call__
method. The type annotations therefore are not just there for static type checking: they also carry more information about the rule that is extracted dynamically by thereaction
module.Generally, the conditions can be separated into two categories:
variable conditions
toplogical conditions
Currently, only variable conditions are being used. Topological conditions could be created in the form of
Tuple
instead ofList
.For additive quantum numbers, the decorator
additive_quantum_number_rule
can simplify the constrution of the appropriateRule
.
-
class
SpinConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Check for spin conservation.
Implements
\[|S_1 - S_2| \leq S \leq |S_1 + S_2|\]and
\[|L - S| \leq J \leq |L + S|\]Also checks \(M_1 + M_2 = M\) and if Clebsch-Gordan coefficients are all 0.
-
__call__
(ingoing_spins: List[expertsystem.reaction.conservation_rules.SpinEdgeInput], outgoing_spins: List[expertsystem.reaction.conservation_rules.SpinEdgeInput], interaction_qns: expertsystem.reaction.conservation_rules.SpinNodeInput) → bool[source]¶ Call self as a function.
-
-
class
SpinConservationMagnitude
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Check for spin conservation.
Implements
\[|S_1 - S_2| \leq S \leq |S_1 + S_2|\]and
\[|L - S| \leq J \leq |L + S|\]-
__call__
(ingoing_spins: List[expertsystem.reaction.conservation_rules.SpinEdgeInput], outgoing_spins: List[expertsystem.reaction.conservation_rules.SpinEdgeInput], interaction_qns: expertsystem.reaction.conservation_rules.SpinMagnitudeNodeInput) → bool[source]¶ Call self as a function.
-
-
class
SpinEdgeInput
(spin_magnitude: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, spin_projection: expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.spin_projection)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class SpinEdgeInput.
-
-
class
SpinMagnitudeNodeInput
(l_magnitude: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.l_magnitude, s_magnitude: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.s_magnitude)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class SpinMagnitudeNodeInput.
-
-
class
SpinNodeInput
(l_magnitude: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.l_magnitude, l_projection: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.l_projection, s_magnitude: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.s_magnitude, s_projection: expertsystem.reaction.quantum_numbers.NodeQuantumNumbers.s_projection)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class SpinNodeInput.
-
-
class
StrangenessConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
strangeness
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.strangeness], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.strangeness], _=None) → bool¶ Call self as a function.
-
-
class
TauLNConservation
[source]¶ Bases:
expertsystem.reaction.conservation_rules.Rule
Decorated via
additive_quantum_number_rule
.Check for
tau_lepton_number
conservation.-
__call__
(ingoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number], outgoing_edge_qns: List[expertsystem.reaction.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number], _=None) → bool¶ Call self as a function.
-
-
additive_quantum_number_rule
(quantum_number: type) → Callable[[Type[expertsystem.reaction.conservation_rules.Rule]], Type[expertsystem.reaction.conservation_rules.Rule]][source]¶ Class decorator for creating an additive conservation
Rule
.Use this decorator to create a conservation
Rule
for a quantum number to which an additive conservation rule applies:\[\sum q_{in} = \sum q_{out}\]- Parameters
quantum_number – Quantum number to which you want to apply the additive conservation check. An example would be
EdgeQuantumNumbers.charge
.