ARTS  2.3.1285(git:92a29ea9-dirty)
Zeeman Namespace Reference

Implements Zeeman modeling. More...

Classes

struct  AllPolarizationVectors
 PolarizationVector for each Polarization. More...
 
struct  Derived
 Contains derived values useful for Zeeman calculations. More...
 
class  Model
 Main Zeeman Model. More...
 
class  PolarizationVector
 Polarization vector for Zeeman Propagation Matrix. More...
 
struct  SplittingData
 Main storage for Zeeman splitting coefficients. More...
 

Enumerations

enum  Polarization { Polarization::SigmaMinus, Polarization::Pi, Polarization::SigmaPlus }
 Zeeman polarization selection. More...
 

Functions

constexpr Index dM (Polarization type) noexcept
 Gives the change of M given a polarization type. More...
 
constexpr Rational start (Rational Ju, Rational Jl, Polarization type) noexcept
 Gives the lowest M for a polarization type of this transition. More...
 
constexpr Rational end (Rational Ju, Rational Jl, Polarization type) noexcept
 Gives the largest M for a polarization type of this transition. More...
 
constexpr Index nelem (Rational Ju, Rational Jl, Polarization type) noexcept
 Gives the number of elements of the polarization type of this transition. More...
 
constexpr Rational Mu (Rational Ju, Rational Jl, Polarization type, Index n) noexcept
 Gives the upper state M value at an index. More...
 
constexpr Rational Ml (Rational Ju, Rational Jl, Polarization type, Index n) noexcept
 Gives the lower state M value at an index. More...
 
constexpr Numeric PolarizationFactor (Polarization type) noexcept
 The renormalization factor of a polarization type. More...
 
constexpr bool GoodHundData (const QuantumNumbers &qns) noexcept
 Checks if the quantum numbers are good for this transition. More...
 
constexpr Numeric SimpleGCaseB (Rational N, Rational J, Rational Lambda, Rational S, Numeric GS, Numeric GL) noexcept
 Computes the Zeeman splitting coefficient. More...
 
constexpr Numeric SimpleGCaseA (Rational Omega, Rational J, Rational Lambda, Rational Sigma, Numeric GS, Numeric GL) noexcept
 Computes the Zeeman splitting coefficient. More...
 
constexpr Numeric SimpleG (const QuantumNumbers &qns, const Numeric &GS, const Numeric &GL) noexcept
 Computes the Zeeman splitting coefficient. More...
 
Model GetSimpleModel (const QuantumIdentifier &qid) noexcept
 Returns a simple Zeeman model. More...
 
Model GetAdvancedModel (const QuantumIdentifier &qid) noexcept
 Returns an advanced Zeeman model. More...
 
std::ostream & operator<< (std::ostream &os, const Model &m)
 
std::istream & operator>> (std::istream &is, Model &m)
 
std::ostream & operator<< (bofstream &bof, const Model &m)
 
std::istream & operator>> (bifstream &bif, Model &m)
 
AllPolarizationVectors AllPolarization (Numeric theta, Numeric eta) noexcept
 Computes the polarization of each polarization type. More...
 
AllPolarizationVectors AllPolarization_dtheta (Numeric theta, const Numeric eta) noexcept
 The derivative of AllPolarization wrt theta. More...
 
AllPolarizationVectors AllPolarization_deta (Numeric theta, Numeric eta) noexcept
 The derivative of AllPolarization wrt eta. More...
 
const PolarizationVectorSelectPolarization (const AllPolarizationVectors &data, Polarization type) noexcept
 Selects the polarization vector depending on polarization type. More...
 
Derived FromGrids (Numeric u, Numeric v, Numeric w, Numeric z, Numeric a) noexcept
 Computes the derived plane from ARTS grids. More...
 
constexpr Derived FromPreDerived (Numeric H, Numeric theta, Numeric eta) noexcept
 Sets Derived from predefined Derived parameters. More...
 

Detailed Description

Implements Zeeman modeling.

Enumeration Type Documentation

◆ Polarization

enum Zeeman::Polarization
strong

Zeeman polarization selection.

Enumerator
SigmaMinus 
Pi 
SigmaPlus 

Definition at line 43 of file zeemandata.h.

Function Documentation

◆ AllPolarization()

AllPolarizationVectors Zeeman::AllPolarization ( Numeric  theta,
Numeric  eta 
)
inlinenoexcept

Computes the polarization of each polarization type.

Parameters
[in]thetaThe angle along the magnetic field
[in]etaThe angle counter-clockwise in the magnetic field plane
Returns
The polarization vectors of all Zeeman polarization

Definition at line 578 of file zeemandata.h.

References Zeeman::AllPolarizationVectors::pi, Zeeman::AllPolarizationVectors::sm, and Zeeman::AllPolarizationVectors::sp.

Referenced by zeeman_on_the_fly().

◆ AllPolarization_deta()

AllPolarizationVectors Zeeman::AllPolarization_deta ( Numeric  theta,
Numeric  eta 
)
inlinenoexcept

The derivative of AllPolarization wrt eta.

Parameters
[in]thetaThe angle along the magnetic field
[in]etaThe angle counter-clockwise in the magnetic field plane
Returns
The derivative of AllPolarization wrt eta

Definition at line 625 of file zeemandata.h.

References Zeeman::AllPolarizationVectors::pi, Zeeman::AllPolarizationVectors::sm, and Zeeman::AllPolarizationVectors::sp.

Referenced by zeeman_on_the_fly().

◆ AllPolarization_dtheta()

AllPolarizationVectors Zeeman::AllPolarization_dtheta ( Numeric  theta,
const Numeric  eta 
)
inlinenoexcept

The derivative of AllPolarization wrt theta.

Parameters
[in]thetaThe angle along the magnetic field
[in]etaThe angle counter-clockwise in the magnetic field plane
Returns
The derivative of AllPolarization wrt theta

Definition at line 601 of file zeemandata.h.

References Zeeman::AllPolarizationVectors::pi, Zeeman::AllPolarizationVectors::sm, and Zeeman::AllPolarizationVectors::sp.

Referenced by zeeman_on_the_fly().

◆ dM()

constexpr Index Zeeman::dM ( Polarization  type)
noexcept

Gives the change of M given a polarization type.

Parameters
[in]typeThe polarization type
Returns
The change in M

Definition at line 51 of file zeemandata.h.

References max, Pi, SigmaMinus, and SigmaPlus.

Referenced by Ml(), and Zeeman::Model::Strength().

◆ end()

constexpr Rational Zeeman::end ( Rational  Ju,
Rational  Jl,
Polarization  type 
)
noexcept

Gives the largest M for a polarization type of this transition.

Since the polarization determines the change in M, this function gives the last M of interest in the range of M possible for a given transition

The user has to ensure that Ju and Jl is a valid transition

Parameters
[in]JuJ of the upper state
[in]JlJ of the upper state
[in]typeThe polarization type
Returns
The largest M value

Definition at line 108 of file zeemandata.h.

References max, min, Pi, SigmaMinus, and SigmaPlus.

Referenced by abs_lines_per_speciesChangeBaseParameterForSpecies(), abs_lines_per_speciesChangeLineShapeModelParameterForSpecies(), abs_lines_per_speciesSetBaseParameterForSpecies(), abs_lines_per_speciesSetCutoffForSpecies(), abs_lines_per_speciesSetLinemixingLimitForSpecies(), abs_lines_per_speciesSetLineShapeModelParameterForSpecies(), abs_lines_per_speciesSetLineShapeTypeForSpecies(), abs_lines_per_speciesSetMirroringForSpecies(), abs_lines_per_speciesSetNormalizationForSpecies(), abs_lines_per_speciesSetPopulationForSpecies(), abs_lines_per_speciesSetT0ForSpecies(), AgRecord::AgRecord(), Array< QuantumFieldDescription >::Array(), linalg::avg(), linalg::cov(), ConstVectorView::get(), VectorView::get(), ComplexMatrix::get_raw_data(), Matrix::get_raw_data(), get_wsv_id(), ConstComplexVectorView::imag(), ComplexVectorView::imag(), InteractiveWorkspace::InteractiveWorkspace(), lookup_workspace_variable(), nelem(), ComplexIterator1D::operator!=(), ConstComplexIterator1D::operator!=(), Iterator1D::operator!=(), ConstIterator1D::operator!=(), operator<<(), Array< QuantumFieldDescription >::operator=(), option_describe(), option_input(), option_methods(), ArtsParser::parse_generic_input(), ArtsParser::parse_generic_output(), ArtsParser::parse_method_args(), ArtsParser::parse_specific_input(), ArtsParser::parse_specific_output(), ArtsParser::read_name_or_value(), bifstream::seek(), bofstream::seek(), ArtsParser::set_gin_to_default(), Tensor3::Tensor3(), Tensor4::Tensor4(), Tensor5::Tensor5(), Tensor6::Tensor6(), Tensor7::Tensor7(), test_sinc_likes_0limit(), my_basic_string< char >::tolower(), my_basic_string< char >::toupper(), and linalg::var().

◆ FromGrids()

Zeeman::Derived Zeeman::FromGrids ( Numeric  u,
Numeric  v,
Numeric  w,
Numeric  z,
Numeric  a 
)
noexcept

Computes the derived plane from ARTS grids.

When done and if everything is well-defined:

\[ H = \sqrt{u^2 + v^2 + w^2}, \]

\[ \theta = \arccos \left( \vec{n} \cdot \vec{n}_H \right), \]

\[ \eta = \arctan\left( \frac{y}{x} \right), \]

\[ \frac{\partial H}{\partial \vec{H}} = \vec{n}_H, \]

\[ \frac{\partial \theta}{\partial \vec{H}} = \frac{\vec{n}_H \cos{\theta} - \vec{n}}{H\sin\theta}, \]

\[ \frac{\partial \eta}{\partial \vec{H}} = \frac{\vec{n}\times\vec{n}_H}{Hx^2 + Hy^2} \]

With these helpers (some defined, others not):

\[ \vec{H} = \left[v,u,w\right], \]

\[ \vec{n}_H = \left[v,u,w\right] / H, \]

\[ \vec{n} = \left[ \cos a \sin z, \sin a\sin z, \cos z \right], \]

\[ \vec{e}_v = \left[ \cos a \cos z, \sin a\cos z, -\sin z \right], \]

\[ y = \left\{\vec{e}_v \times \left[\vec{n}_H - \left(\vec{n}_H\cdot\vec{n}\right)\vec{n}\right]\right\} \cdot \vec{n}, \]

\[ x = \vec{e}_v \cdot \left[\vec{n}_H - \left(\vec{n}_H\cdot\vec{n}\right)\vec{n}\right] \]

Note that all other values are zero if $ H $ is zero, that $ \frac{\partial \theta}{\partial \vec{H}} $ is zero if $ \sin{\theta} $ is zero, that $ \frac{\partial \eta}{\partial \vec{H}} $ is zero if $ x $ and $ y $ are zero, and that the atan2(y, x) function is used for $ \eta $.

Parameters
[in]uMagnetic field u-parameter
[in]vMagnetic field b-parameter
[in]wMagnetic field w-parameter
[in]zZenith angle
[in]aAzimuth angle
Returns
The derived plane

Definition at line 236 of file zeemandata.cc.

References Zeeman::Derived::deta_du, Zeeman::Derived::deta_dv, Zeeman::Derived::deta_dw, Zeeman::Derived::dH_du, Zeeman::Derived::dH_dv, Zeeman::Derived::dH_dw, Zeeman::Derived::dtheta_du, Zeeman::Derived::dtheta_dv, Zeeman::Derived::dtheta_dw, Zeeman::Derived::eta, ev_xyz_by_za_local(), FromPreDerived(), Zeeman::Derived::H, los_xyz_by_uvw_local(), los_xyz_by_za_local(), n, Constant::pow2(), sqrt(), Zeeman::Derived::theta, and w().

Referenced by zeeman_on_the_fly().

◆ FromPreDerived()

constexpr Derived Zeeman::FromPreDerived ( Numeric  H,
Numeric  theta,
Numeric  eta 
)
noexcept

Sets Derived from predefined Derived parameters.

Parameters
[in]HDerived magnetic field strength
[in]thetaDerived magnetic field theta angle
[in]etaDerived magnetic field eta angle
Returns
The pre-derived plane

Definition at line 712 of file zeemandata.h.

Referenced by FromGrids(), and zeeman_on_the_fly().

◆ GetAdvancedModel()

Zeeman::Model Zeeman::GetAdvancedModel ( const QuantumIdentifier qid)
noexcept

Returns an advanced Zeeman model.

Will look at available Quantum numbers and use best approximation for the model to use. If no good approximation is available, it returns Model({0, 0}).

Parameters
[in]qidTransition type quantum id
Returns
Zeeman model

Definition at line 105 of file zeemandata.cc.

References SpeciesTag::Isotopologue(), and v1.

Referenced by Zeeman::Model::Model(), ReadHITRAN(), ReadJPL(), ReadLBLRTM(), ReadMytran2(), and test_zeeman().

◆ GetSimpleModel()

Zeeman::Model Zeeman::GetSimpleModel ( const QuantumIdentifier qid)
noexcept

Returns a simple Zeeman model.

Will use the simple Hund case provided by input. Throws if the input is bad

Parameters
[in]qidTransition type quantum id
Returns
Zeeman model

Definition at line 33 of file zeemandata.cc.

References get_lande_lambda_constant(), get_lande_spin_constant(), gu, and SimpleG().

Referenced by Zeeman::Model::Model(), and test_zeeman().

◆ GoodHundData()

constexpr bool Zeeman::GoodHundData ( const QuantumNumbers qns)
noexcept

Checks if the quantum numbers are good for this transition.

Given some Hund state, various quantum numbers must be defined to allow the Zeeman calculations to work

Parameters
[in]qnsQuantum numbers of a level
Returns
If the numbers can be used to compute simple Zeeman effect

Definition at line 212 of file zeemandata.h.

References CaseA, CaseB, Hund, J, Lambda, N, Omega, and S.

Referenced by SimpleG().

◆ Ml()

constexpr Rational Zeeman::Ml ( Rational  Ju,
Rational  Jl,
Polarization  type,
Index  n 
)
noexcept

Gives the lower state M value at an index.

The user has to ensure that Ju and Jl is a valid transition

The user has to ensure n is less than the number of elements

Parameters
[in]JuJ of the upper state
[in]JlJ of the upper state
[in]typeThe polarization type
[in]nThe position
Returns
The lower state M

Definition at line 173 of file zeemandata.h.

References dM(), Mu(), and n.

Referenced by Zeeman::Model::Strength().

◆ Mu()

constexpr Rational Zeeman::Mu ( Rational  Ju,
Rational  Jl,
Polarization  type,
Index  n 
)
noexcept

Gives the upper state M value at an index.

The user has to ensure that Ju and Jl is a valid transition

The user has to ensure n is less than the number of elements

Parameters
[in]JuJ of the upper state
[in]JlJ of the upper state
[in]typeThe polarization type
[in]nThe position
Returns
The upper state M

Definition at line 152 of file zeemandata.h.

References n, and start().

Referenced by Ml(), and Zeeman::Model::Strength().

◆ nelem()

constexpr Index Zeeman::nelem ( Rational  Ju,
Rational  Jl,
Polarization  type 
)
noexcept

Gives the number of elements of the polarization type of this transition.

The user has to ensure that Ju and Jl is a valid transition

Parameters
[in]JuJ of the upper state
[in]JlJ of the upper state
[in]typeThe polarization type
Returns
The number of elements

Definition at line 135 of file zeemandata.h.

References end(), and start().

Referenced by Absorption::Lines::ZeemanCount(), and LineRecord::ZeemanModelLineCount().

◆ operator<<() [1/2]

std::ostream& Zeeman::operator<< ( std::ostream &  os,
const Model m 
)
inline

◆ operator<<() [2/2]

std::ostream& Zeeman::operator<< ( bofstream bof,
const Model m 
)
inline

◆ operator>>() [1/2]

std::istream& Zeeman::operator>> ( std::istream &  is,
Model m 
)
inline

◆ operator>>() [2/2]

std::istream& Zeeman::operator>> ( bifstream bif,
Model m 
)
inline

◆ PolarizationFactor()

constexpr Numeric Zeeman::PolarizationFactor ( Polarization  type)
noexcept

The renormalization factor of a polarization type.

The polarization comes from some geometry. This function returns the factor we need to compute that geometry and to turn it into something that normalizes every possible M for this type into some strength that sums to unity

Parameters
[in]typeThe polarization type
Returns
Rescale factor

Definition at line 191 of file zeemandata.h.

References max, Pi, SigmaMinus, and SigmaPlus.

Referenced by Zeeman::Model::Strength().

◆ SelectPolarization()

const PolarizationVector& Zeeman::SelectPolarization ( const AllPolarizationVectors data,
Polarization  type 
)
inlinenoexcept

Selects the polarization vector depending on polarization type.

Parameters
[in]dataThe pre-computed polarization vectors
[in]typeThe type of polarization to select

Definition at line 646 of file zeemandata.h.

References data, Pi, SigmaMinus, and SigmaPlus.

Referenced by zeeman_on_the_fly().

◆ SimpleG()

constexpr Numeric Zeeman::SimpleG ( const QuantumNumbers qns,
const Numeric GS,
const Numeric GL 
)
noexcept

Computes the Zeeman splitting coefficient.

The level should be Hund case a or b type and all the quantum numbers have to be defined

Parameters
[in]qnsQuantum numbers of a level
[in]GSThe spin Landé coefficient of the molecule
[in]GSThe Landé coefficient of the molecule
Returns
If the numbers can be used to compute simple Zeeman effect

Definition at line 315 of file zeemandata.h.

References CaseA, CaseB, GoodHundData(), Hund, J, Lambda, N, Omega, S, SimpleGCaseA(), and SimpleGCaseB().

Referenced by GetSimpleModel().

◆ SimpleGCaseA()

constexpr Numeric Zeeman::SimpleGCaseA ( Rational  Omega,
Rational  J,
Rational  Lambda,
Rational  Sigma,
Numeric  GS,
Numeric  GL 
)
noexcept

Computes the Zeeman splitting coefficient.

The level should be Hund case a type and all the values have to be defined

Parameters
[in]OmegaThe Omega quantum number of the level
[in]JThe J quantum number of the level
[in]LambdaThe Lambda quantum number of the level
[in]SigmaThe Sigma quantum number of the level
[in]GSThe spin Landé coefficient of the molecule
[in]GLThe Landé coefficient of the molecule
Returns
Zeeman splitting coefficient of the level

Definition at line 286 of file zeemandata.h.

References J, Lambda, and Omega.

Referenced by SimpleG().

◆ SimpleGCaseB()

constexpr Numeric Zeeman::SimpleGCaseB ( Rational  N,
Rational  J,
Rational  Lambda,
Rational  S,
Numeric  GS,
Numeric  GL 
)
noexcept

Computes the Zeeman splitting coefficient.

The level should be Hund case b type and all the values have to be defined

Parameters
[in]NThe N quantum number of the level
[in]JThe J quantum number of the level
[in]LambdaThe Lambda quantum number of the level
[in]SThe S quantum number of the level
[in]GSThe spin Landé coefficient of the molecule
[in]GLThe Landé coefficient of the molecule
Returns
Zeeman splitting coefficient of the level

Definition at line 249 of file zeemandata.h.

References J, Lambda, N, and S.

Referenced by SimpleG().

◆ start()

constexpr Rational Zeeman::start ( Rational  Ju,
Rational  Jl,
Polarization  type 
)
noexcept

Gives the lowest M for a polarization type of this transition.

Since the polarization determines the change in M, this function gives the first M of interest in the range of M possible for a given transition

The user has to ensure that Ju and Jl is a valid transition

Parameters
[in]JuJ of the upper state
[in]JlJ of the upper state
[in]typeThe polarization type
Returns
The lowest M value

Definition at line 77 of file zeemandata.h.

References max, min, Pi, SigmaMinus, and SigmaPlus.

Referenced by add_scalar_variance(), check_and_add_block(), ComplexVector::ComplexVector(), covmat_seAddBlock(), Mu(), nelem(), nlinspace(), nlogspace(), Linefunctions::set_cross_section_of_band(), test_sinc_likes_0limit(), and Vector::Vector().