Go to the documentation of this file.
32 #ifndef absorptionlines_h
33 #define absorptionlines_h
58 return MirroringType::None;
59 else if (in ==
"Lorentz")
60 return MirroringType::Lorentz;
61 else if (in ==
"Same")
62 return MirroringType::SameAsLineShape;
63 else if (in ==
"Manual")
66 throw std::runtime_error(
"Cannot recognize the mirroring type");
70 if (in == MirroringType::None)
72 else if (in == MirroringType::Lorentz)
74 else if (in == MirroringType::SameAsLineShape)
82 if (in == MirroringType::None)
83 return "These lines are not mirrored at 0 Hz.\n";
84 else if (in == MirroringType::Lorentz)
85 return "These lines are mirrored around 0 Hz using the Lorentz line shape.\n";
86 else if (in == MirroringType::SameAsLineShape)
87 return "These line are mirrored around 0 Hz using the original line shape.\n";
89 return "There are manual line entries in the catalog to mirror this line.\n";
106 return NormalizationType::None;
107 else if (in ==
"VVH")
108 return NormalizationType::VVH;
109 else if (in ==
"VVW")
110 return NormalizationType::VVW;
114 throw std::runtime_error(
"Cannot recognize the normalization type");
118 if (in == NormalizationType::None)
120 else if (in == NormalizationType::VVH)
122 else if (in == NormalizationType::VVW)
130 if (in == NormalizationType::None)
131 return "No re-normalization in the far wing will be applied.\n";
132 else if (in == NormalizationType::VVH)
133 return "van Vleck and Huber far-wing renormalization will be applied, "
134 "i.e. F ~ (f tanh(hf/2kT))/(f0 tanh(hf0/2kT))\n";
135 else if (in == NormalizationType::VVW)
136 return "van Vleck and Weisskopf far-wing renormalization will be applied, "
137 "i.e. F ~ (f/f0)^2\n";
139 return "Rosenkranz quadratic far-wing renormalization will be applied, "
140 "i.e. F ~ hf0/2kT sinh(hf0/2kT) (f/f0)^2\n";
150 ByNLTEVibrationalTemperatures,
151 ByNLTEPopulationDistribution,
152 ByHITRANRosenkranzRelmat,
158 return PopulationType::ByLTE;
159 else if (in ==
"ByHITRANRosenkranzRelmat")
160 return PopulationType::ByHITRANRosenkranzRelmat;
161 else if (in ==
"ByHITRANFullRelmat")
163 else if (in ==
"NLTE-VibrationalTemperatures")
164 return PopulationType::ByNLTEVibrationalTemperatures;
165 else if (in ==
"NLTE")
166 return PopulationType::ByNLTEPopulationDistribution;
168 throw std::runtime_error(
"Cannot recognize the population type");
173 case PopulationType::ByLTE:
176 return "ByHITRANFullRelmat";
177 case PopulationType::ByHITRANRosenkranzRelmat:
178 return "ByHITRANRosenkranzRelmat";
179 case PopulationType::ByNLTEVibrationalTemperatures:
180 return "NLTE-VibrationalTemperatures";
181 case PopulationType::ByNLTEPopulationDistribution:
188 case PopulationType::ByLTE:
189 return "The lines are considered as in pure LTE.\n";
191 return "The lines requires relaxation matrix calculations in LTE - HITRAN full method.\n";
192 case PopulationType::ByHITRANRosenkranzRelmat:
193 return "The lines requires Relaxation matrix calculations in LTE - HITRAN Rosenkranz method.\n";
194 case PopulationType::ByNLTEVibrationalTemperatures:
195 return "The lines are considered as in NLTE by vibrational temperatures.\n";
196 case PopulationType::ByNLTEPopulationDistribution:
197 return "The lines are considered as in pure NLTE.\n";
203 in == PopulationType::ByHITRANRosenkranzRelmat;
215 return CutoffType::None;
216 else if (in ==
"ByLine")
217 return CutoffType::LineByLineOffset;
218 else if (in ==
"ByBand")
221 throw std::runtime_error(
"Cannot recognize the cutoff type");
225 if (in == CutoffType::None)
227 else if (in == CutoffType::LineByLineOffset)
235 std::ostringstream os;
236 if (in == CutoffType::None)
237 os <<
"No cut-off will be applied.\n";
238 else if (in == CutoffType::LineByLineOffset)
239 os <<
"The lines will be cut-off " << cutoff <<
" Hz from the line center.\n";
241 os <<
"All lines are cut-off at " << cutoff <<
" Hz.\n";
300 const std::vector<Rational>& lowerquanta={},
301 const std::vector<Rational>& upperquanta={}) :
321 throw std::runtime_error(
"Mismatch between broadeners and model");
458 for(
size_t i=0; i<keys.size(); i++) {
473 d, LineShape::LegacyLineMixingData::TypeLM::LM_2NDORDER)
525 std::ostream&
operator<<(std::ostream&,
const SingleLine&);
527 std::istream&
operator>>(std::istream&, SingleLine&);
610 bool bathbroadening=
false,
620 const std::vector<QuantumNumberType>& localquanta={},
622 const std::vector<SingleLine>& lines={}) :
668 const std::vector<QuantumNumberType>& localquanta,
686 localquanta.size(), metamodel)) {};
703 throw std::runtime_error(
"Error calling appending function, bad size of quantum numbers");
706 sl.LineShapeElems() not_eq
mlines[0].LineShapeElems())
707 throw std::runtime_error(
"Error calling appending function, bad size of broadening species");
709 mlines.push_back(std::move(sl));
727 throw std::runtime_error(
"Error calling appending function, bad size of quantum numbers");
731 throw std::runtime_error(
"Error calling appending function, bad size of broadening species");
748 else if(sle.cutoff not_eq
mcutoff)
758 else if(sle.T0 not_eq
mT0)
768 else if(
NumLines() not_eq 0 and not sle.line.LineShape().Match(
mlines[0].LineShape()))
784 else if(l.mcutoff not_eq
mcutoff)
794 else if(l.mT0 not_eq
mT0)
806 else if(
NumLines() not_eq 0 and l.NumLines() not_eq 0 and not l.mlines[0].LineShape().Match(
mlines[0].LineShape()))
985 mlines.cbegin(), 0.0, std::plus<Numeric>(),
986 [](
const auto& a,
const auto& b){return a.F0() * b.I0();});
988 [](
const auto& a,
const auto& b){return a + b.I0();});
999 wgts.begin(), 0.0, std::plus<Numeric>(),
1000 [](
const auto& a,
const auto& b){return a.F0() * b;});
1001 const Numeric div = wgts.sum();
1084 return std::any_of(keys.cbegin(), keys.cend(), [
x](
auto y){return x == y;});
1090 return MirroringType::None;
1091 else if (in ==
"Lorentz")
1092 return MirroringType::Lorentz;
1093 else if (in ==
"Same")
1094 return MirroringType::SameAsLineShape;
1095 else if (in ==
"Manual")
1110 return std::any_of(keys.cbegin(), keys.cend(), [
x](
auto y){return x == y;});
1116 return NormalizationType::None;
1117 else if (in ==
"VVH")
1118 return NormalizationType::VVH;
1119 else if (in ==
"VVW")
1120 return NormalizationType::VVW;
1121 else if (in ==
"RQ")
1136 return std::any_of(keys.cbegin(), keys.cend(), [
x](
auto y){return x == y;});
1142 return CutoffType::None;
1143 else if (in ==
"ByLine")
1144 return CutoffType::LineByLineOffset;
1145 else if (in ==
"ByBand")
1160 return std::any_of(keys.cbegin(), keys.cend(), [
x](
auto y){return x == y;});
1166 return PopulationType::ByLTE;
1167 else if (in ==
"ByHITRANFullRelmat")
1169 else if (in ==
"ByHITRANRosenkranzRelmat")
1170 return PopulationType::ByHITRANRosenkranzRelmat;
1171 else if (in ==
"NLTE-VibrationalTemperatures")
1172 return PopulationType::ByNLTEVibrationalTemperatures;
1173 else if (in ==
"NLTE")
1174 return PopulationType::ByNLTEPopulationDistribution;
1188 return std::any_of(keys.cbegin(), keys.cend(), [
x](
auto y){return x == y;});
1194 return LineShape::Type::DP;
1195 else if (type ==
String(
"LP"))
1196 return LineShape::Type::LP;
1197 else if (type ==
String(
"VP"))
1198 return LineShape::Type::VP;
1199 else if (type ==
String(
"SDVP"))
1200 return LineShape::Type::SDVP;
1201 else if (type ==
String(
"HTP"))
1213 return mlinemixinglimit < 0 ? true : mlinemixinglimit > P;
1283 case CutoffType::LineByLineOffset:
1287 case CutoffType::None:
1300 case CutoffType::LineByLineOffset:
1304 case CutoffType::None:
1305 return std::numeric_limits<Numeric>::lowest();
1451 bool OK() const noexcept;
1454 std::ostream& operator<<(
std::ostream&, const
Lines&);
1735 const std::vector<QuantumNumberType>& globalquantas={});
1858 #endif // absorptionlines_h
Absorption::SingleLine AbsorptionSingleLine
Rational LowerQuantumNumber(size_t i) const noexcept
Lower quantum number.
CutoffType Cutoff() const noexcept
Returns cutoff style.
CutoffType mcutoff
cutoff type, by band or by line
Numeric mgupp
Upper level statistical weight.
void Mirroring(MirroringType x) noexcept
Returns mirroring style.
Rational LowerQuantumNumber(size_t k, QuantumNumberType qnt) const noexcept
Quantum number lower level.
void CutoffFreqValue(Numeric x) noexcept
Sets internal cutoff frequency value.
Numeric mF0
Central frequency.
void I0(Numeric x) noexcept
Reference line strength.
void Isotopologue(Index iso)
Set the Isotopologue.
Container class for Quantum Numbers.
Numeric A() const noexcept
Einstein spontaneous emission.
Numeric g_low(size_t k) const noexcept
Lower level statistical weight.
Index UpperQuantumElems() const noexcept
Number of upper quantum numbers.
const std::vector< SingleLine > & AllLines() const noexcept
Lines.
Class to identify and match lines by their quantum numbers.
Numeric F0() const noexcept
Central frequency.
Numeric F_mean(const ConstVectorView wgts) const noexcept
Mean frequency by weight of line strengt.
LineShape::Model & LineShape() noexcept
Line shape model.
std::vector< SingleLine > mlines
A list of individual lines.
Numeric g_upp() const noexcept
Upper level statistical weight.
Vector BroadeningSpeciesVMR(const ConstVectorView, const ArrayOfArrayOfSpeciesTag &) const
Returns the VMRs of the broadening species.
void AppendSingleLine(SingleLine &&sl)
Appends a single line to the absorption lines.
QuantumIdentifier QuantumIdentityOfLine(Index k) const noexcept
Returns identity status.
LineShape::Type LineShapeType() const noexcept
Returns lineshapetype style.
Numeric F_mean() const noexcept
Mean frequency by weight of line strengt.
Numeric mlinemixinglimit
linemixing limit
Numeric & F0() noexcept
Central frequency.
void Normalization(NormalizationType x) noexcept
Returns normalization style.
Numeric I0() const noexcept
Reference line strength.
void sort_by_einstein()
Sort inner line list by Einstein coefficient.
String ModelShape2MetaData(const Model &m)
void truncate_global_quantum_numbers()
Removes all global quantum numbers.
Index NumLines() const noexcept
Number of lines.
SingleLineExternal ReadFromJplStream(istream &is)
Read from JPL.
void SetLineMixing2SecondOrderData(const Vector &d)
Set the line mixing model to 2nd order.
String normalizationtype2string(NormalizationType in)
bool id_in_line(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier match a line's ID.
Numeric T0() const noexcept
Returns reference temperature.
Numeric ZeemanSplitting(size_t k, Zeeman::Polarization type, Index i) const noexcept
Returns the splitting of a Zeeman split line.
LineShape::Type lineshapetype
std::ostream & operator<<(std::ostream &, const SingleLine &)
Numeric mE0
Lower state energy level.
NormalizationType
Describes the type of normalization line effects.
Numeric SelfVMR(const ConstVectorView, const ArrayOfArrayOfSpeciesTag &) const
Returns the VMR of the species.
Numeric CutoffFreq(size_t k) const noexcept
Returns cutoff frequency or maximum value.
bool Bath() const noexcept
Returns bath broadening status.
QuantumNumberType
Enum for Quantum Numbers used for indexing.
void std(VectorView std, const Vector &y, const ArrayOfVector &ys, const Index start=0, const Index end=-1)
Compute the standard deviation of the ranged ys.
Numeric & E0(size_t k) noexcept
Lower level energy.
NormalizationType Normalization() const noexcept
Returns normalization style.
Vector y(Workspace &ws) noexcept
Headers and class definition of Zeeman modeling.
Index LineShapeElems() const noexcept
Number of lineshape elements.
PopulationType mpopulation
Line population distribution.
static PopulationType string2Population(const String &in) noexcept
ArrayOfSpeciesTag & BroadeningSpecies() noexcept
Returns the broadening species.
String UpperQuantumNumbers() const noexcept
Upper quantum numbers string.
Numeric I0(size_t k) const noexcept
Reference line strength.
Numeric reduced_rovibrational_dipole(Rational Jf, Rational Ji, Rational lf, Rational li, Rational k=Rational(1))
Compute the reduced rovibrational dipole moment.
bifstream & read(bifstream &bif)
Binary read for AbsorptionLines.
const std::vector< Rational > & UpperQuantumNumbers() const noexcept
Upper level quantum numbers.
void sort_by_frequency()
Sort inner line list by frequency.
void SetLineMixing2AER(const Vector &d)
Set the line mixing model to AER kind.
bool id_in_line_lower(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier match a line's ID.
std::vector< QuantumNumberType > mlocalquanta
List of local quantum numbers, these must be defined.
bool mbathbroadening
Does the line broadening have bath broadening.
void T0(Numeric x) noexcept
Sets reference temperature.
Computations and data for a single absorption line.
void ReverseLines() noexcept
Reverses the order of the internal lines.
void E0(Numeric x) noexcept
Lower level energy.
bool id_in_line_upper(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier match a line's ID.
Rational & UpperQuantumNumber(size_t i) noexcept
Upper quantum number.
Numeric mcutofffreq
cutoff frequency
SingleLineExternal ReadFromArtscat5Stream(istream &is)
Read from ARTSCAT-5.
LineShape::Model mlineshape
Line shape model.
String populationtype2string(PopulationType in)
constexpr std::array< T, 1+sizeof...(Ts)> stdarrayify(const T &first, const Ts &... the_rest)
Make a std::array of a list of variables (must be 1-long at least)
Numeric ShapeParameter_dInternal(size_t k, Numeric T, Numeric P, const Vector &vmrs, const RetrievalQuantity &derivative) const noexcept
Line shape parameter internal derivative.
Numeric CutoffFreqMinus(size_t k, Numeric fmean) const noexcept
Returns negative cutoff frequency or lowest value.
Index nelem() const
Number of species in Model.
constexpr Index nelem(Rational Ju, Rational Jl, Polarization type) noexcept
Gives the number of elements of the polarization type of this transition.
Numeric SpeciesMass() const noexcept
Mass of the molecule.
Numeric CutoffFreqValue() const noexcept
Returns internal cutoff frequency value.
void LinemixingLimit(Numeric x) noexcept
Sets line mixing limit.
void RemoveLocalQuantum(size_t)
Remove quantum numbers at the given position from all lines.
Lines(bool selfbroadening=false, bool bathbroadening=false, CutoffType cutoff=CutoffType::None, MirroringType mirroring=MirroringType::None, PopulationType population=PopulationType::ByLTE, NormalizationType normalization=NormalizationType::None, LineShape::Type lineshapetype=LineShape::Type::DP, Numeric T0=296, Numeric cutofffreq=-1, Numeric linemixinglimit=-1, const QuantumIdentifier &quantumidentity=QuantumIdentifier(), const std::vector< QuantumNumberType > &localquanta={}, const ArrayOfSpeciesTag &broadeningspecies={}, const std::vector< SingleLine > &lines={})
Default initialization.
Absorption::Lines AbsorptionLines
static bool validIndexForLineShapeType(Index x) noexcept
Checks if index is a valid lineshapetype.
Array< AbsorptionLines > ArrayOfAbsorptionLines
std::vector< Lines > split_list_of_external_lines(std::vector< SingleLineExternal > &external_lines, const std::vector< QuantumNumberType > &localquantas={}, const std::vector< QuantumNumberType > &globalquantas={})
Splits a list of lines into proper Lines.
Numeric E0(size_t k) const noexcept
Lower level energy.
Index nelem(const Lines &l)
Number of lines.
Main line shape model class.
SingleLineExternal ReadFromArtscat3Stream(istream &is)
Read from ARTSCAT-3.
bool mselfbroadening
Does the line broadening have self broadening.
Namespace to contain things required for absorption calculations.
Zeeman::Model mzeeman
Zeeman model.
PopulationType population
SingleLineExternal ReadFromLBLRTMStream(istream &is)
Read from LBLRTM.
void Species(Index sp)
Set the Species.
MirroringType mmirroring
Mirroring type.
void Bath(bool x) noexcept
Returns bath broadening status.
NormalizationType normalization
static bool validIndexForMirroring(Index x) noexcept
Checks if index is a valid mirroring.
bool Match(const Lines &l) const noexcept
Checks if another line list matches this structure.
Numeric & g_low() noexcept
Lower level statistical weight.
static LineShape::Type string2LineShapeType(const String &type) noexcept
Index LineShapePos(const QuantumIdentifier &qid) const noexcept
Position among broadening species or -1.
MirroringType Mirroring() const noexcept
Returns mirroring style.
NormalizationType mnormalization
Line normalization type.
static NormalizationType string2Normalization(const String &in) noexcept
SingleLineExternal ReadFromHitranOnlineStream(istream &is)
Read from HITRAN online.
String mirroringtype2metadatastring(MirroringType in)
void F0(Numeric x) noexcept
Central frequency.
bofstream & write(bofstream &bof) const
Binary write for AbsorptionLines.
LineShape::Output ShapeParameters_dVMR(size_t k, Numeric T, Numeric P, const QuantumIdentifier &vmr_qid) const noexcept
Line shape parameters vmr derivative.
Numeric mI0
Reference intensity.
ArrayOfSpeciesTag species
Numeric & A() noexcept
Einstein spontaneous emission.
Numeric E0() const noexcept
Lower level energy.
bool MatchWithExternal(const SingleLineExternal &sle, const QuantumIdentifier &quantumidentity) const noexcept
Checks if an external line matches this structure.
void SetTransition(const QuantumNumbers &upper, const QuantumNumbers &lower)
Set to transition type identifier.
constexpr Rational LowerQuantumNumber(QuantumNumberType X) const noexcept
Return a lower quantum number by copy.
Coefficients and temperature model for SingleSpeciesModel.
LineShape::Type mlineshapetype
Type of line shape.
void AppendSingleLine(const SingleLine &sl)
Appends a single line to the absorption lines.
Numeric & I0(size_t k) noexcept
Reference line strength.
LineShape::Output ShapeParameters(size_t k, Numeric T, Numeric P, const Vector &vmrs) const noexcept
Line shape parameters.
Numeric mT0
Reference temperature for all parameters of the lines.
NUMERIC Numeric
The type to use for all floating point numbers.
Index NumLocalQuanta() const noexcept
Number of local quantum numbers.
Binary output file stream class.
String mirroringtype2string(MirroringType in)
bool line_upper_in_id(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier match a line's ID.
std::vector< Rational > & UpperQuantumNumbers() noexcept
Upper level quantum numbers.
Numeric & F0(size_t k) noexcept
Central frequency.
static MirroringType string2Mirroring(const String &in) noexcept
void g_low(Numeric x) noexcept
Lower level statistical weight.
Array< ArrayOfAbsorptionLines > ArrayOfArrayOfAbsorptionLines
String normalizationtype2metadatastring(NormalizationType in)
String cutofftype2metadatastring(CutoffType in, Numeric cutoff)
MirroringType
Describes the type of mirroring line effects.
Numeric & A(size_t k) noexcept
Einstein spontaneous emission.
Rational UpperQuantumNumber(size_t i) const noexcept
Upper quantum number.
Numeric mglow
Lower level statistical weight.
void Population(PopulationType x) noexcept
Sets population style.
Index Species() const noexcept
Species Index.
bool SameQuantumNumbers(const SingleLine &sl) const noexcept
Checks if the quantum numbers are the same of the two lines.
Numeric F0(size_t k) const noexcept
Central frequency.
std::istream & operator>>(std::istream &, SingleLine &)
String SpeciesName() const noexcept
Species Name.
This file contains the class declaration of bifstream.
Type
Type of line shape to compute.
This file contains the class declaration of bofstream.
QuantumIdentifier quantumidentity
void Self(bool x) noexcept
Returns self broadening status.
static bool validIndexForPopulation(Index x) noexcept
Checks if index is a valid population.
Numeric & g_low(size_t k) noexcept
Lower level statistical weight.
std::vector< QuantumNumberType > & LocalQuanta() noexcept
Returns local quantum numbers.
SingleLine(size_t nbroadeners, size_t nquanta, const LineShape::Model &metamodel)
Initialization for constant sizes.
PopulationType Population() const noexcept
Returns population style.
const std::vector< Rational > & LowerQuantumNumbers() const noexcept
Lower level quantum numbers.
void SetAutomaticZeeman() noexcept
Set Zeeman effect for all lines that have the correct quantum numbers.
LineShape::Output ShapeParameters_dT(size_t k, Numeric T, Numeric P, const Vector &vmrs) const noexcept
Line shape parameters temperature derivatives.
void Cutoff(CutoffType x) noexcept
Sets cutoff style.
Index Isotopologue() const noexcept
Isotopologue Index.
SingleLine & Line(Index) noexcept
Returns a single line.
Numeric g_low() const noexcept
Lower level statistical weight.
Numeric g_upp(size_t k) const noexcept
Upper level statistical weight.
Numeric ZeemanStrength(size_t k, Zeeman::Polarization type, Index i) const noexcept
Returns the strength of a Zeeman split line.
Index NumBroadeners() const noexcept
Number of broadening species.
Numeric mA
Einstein spontaneous emission coefficient.
const LineShape::Model & LineShape() const noexcept
Line shape model.
Index LineShapePos(const Index &spec) const noexcept
Position among broadening species or -1.
void g_upp(Numeric x) noexcept
Upper level statistical weight.
SingleLine PopLine(Index) noexcept
Pops a single line.
Numeric & g_upp(size_t k) noexcept
Upper level statistical weight.
SingleLineExternal ReadFromArtscat4Stream(istream &is)
Read from ARTSCAT-4.
constexpr Rational UpperQuantumNumber(QuantumNumberType X) const noexcept
Return a upper quantum number by copy.
SingleLineExternal ReadFromHitran2001Stream(istream &is)
Read from HITRAN before 2004.
NormalizationType string2normalizationtype(const String &in)
Computations of line shape derived parameters.
const std::vector< SingleSpeciesModel > & Data() const noexcept
The line shape model data.
SingleLineExternal ReadFromMytran2Stream(istream &is)
Read from Mytran2 The MYTRAN2 format is as follows (directly taken from the abs_my....
static CutoffType string2Cutoff(const String &in) noexcept
Numeric & g_upp() noexcept
Upper level statistical weight.
String populationtype2metadatastring(PopulationType in)
String LowerQuantumNumbers() const noexcept
Lower quantum numbers string.
my_basic_string< char > String
The String type for ARTS.
const QuantumIdentifier & QuantumIdentity() const noexcept
Returns identity status.
void SetAutomaticZeeman(QuantumIdentifier qid, const std::vector< QuantumNumberType > &keys)
Set Zeeman effect by automatic detection.
String LineShapeMetaData() const noexcept
Meta data for the line shape if it exists.
bool relaxationtype_relmat(PopulationType in)
QuantumIdentifier & QuantumIdentity() noexcept
Returns identity status.
void SetLineMixingModel(SingleSpeciesModel x)
Sets the same line mixing model to all species.
Index ZeemanCount(size_t k, Zeeman::Polarization type) const noexcept
Returns the number of Zeeman split lines.
bool line_in_id(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier match a line's ID.
bofstream & write(bofstream &os) const
Binary write for Lines.
static bool validIndexForCutoff(Index x) noexcept
Checks if index is a valid cutoff.
Numeric & I0() noexcept
Reference line strength.
bool Self() const noexcept
Returns self broadening status.
Index LowerQuantumElems() const noexcept
Number of lower quantum numbers.
std::vector< Rational > & LowerQuantumNumbers() noexcept
Lower level quantum numbers.
static bool validIndexForNormalization(Index x) noexcept
Checks if index is a valid normalization.
QuantumIdentifier mquantumidentity
Catalog ID.
Zeeman::Model & Zeeman() noexcept
Zeeman model.
bool DoLineMixing(Numeric P) const noexcept
Returns if the pressure should do line mixing.
std::vector< Rational > mlowerquanta
Lower level quantum numbers.
Lines createEmptyCopy(const Lines &al) noexcept
Creates a copy of the input lines structure.
CutoffType
Describes the type of cutoff calculations.
void RemoveLine(Index) noexcept
Removes a single line.
Vector x(Workspace &ws) noexcept
QuantumIdentifier QuantumIdentifier
Numeric & E0() noexcept
Lower level energy.
INDEX Index
The type to use for all integer numbers and indices.
Rational & LowerQuantumNumber(size_t i) noexcept
Lower quantum number.
Numeric LinemixingLimit() const noexcept
Returns line mixing limit.
Lines(bool selfbroadening, bool bathbroadening, size_t nlines, CutoffType cutoff, MirroringType mirroring, PopulationType population, NormalizationType normalization, LineShape::Type lineshapetype, Numeric T0, Numeric cutofffreq, Numeric linemixinglimit, const QuantumIdentifier &quantumidentity, const std::vector< QuantumNumberType > &localquanta, const ArrayOfSpeciesTag &broadeningspecies, const LineShape::Model &metamodel)
XML-tag initialization.
Deals with internal derivatives, Jacobian definition, and OEM calculations.
CutoffType string2cutofftype(const String &in)
String MetaData() const
Returns a printable statement about the lines.
void A(Numeric x) noexcept
Einstein spontaneous emission.
String cutofftype2string(CutoffType in)
bool line_lower_in_id(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier match a line's ID.
std::vector< SingleLine > & AllLines() noexcept
Lines.
void RemoveUnusedLocalQuantums()
Remove quantum numbers that are not used by even a single line.
Numeric reduced_magnetic_quadrapole(Rational Jf, Rational Ji, Rational N)
Compute the reduced magnetic quadrapole moment.
Rational UpperQuantumNumber(size_t k, QuantumNumberType qnt) const noexcept
Quantum number upper level.
Model vector2modellm(Vector x, LegacyLineMixingData::TypeLM type)
LineShape::Model from legacy input vector.
bofstream & write(bofstream &bof) const
Binary write for Model.
Single line reading output.
PopulationType
Describes the type of population level counter.
Numeric A(size_t k) const noexcept
Einstein spontaneous emission.
SingleLine(Numeric F0=0, Numeric I0=0, Numeric E0=0, Numeric glow=0, Numeric gupp=0, Numeric A=0, Zeeman::Model zeeman=Zeeman::Model(), const LineShape::Model &lineshape=LineShape::Model(), const std::vector< Rational > &lowerquanta={}, const std::vector< Rational > &upperquanta={})
Default initialization.
A constant view of a Vector.
ArrayOfSpeciesTag mbroadeningspecies
A list of broadening species.
PopulationType string2populationtype(const String &in)
SingleLineExternal ReadFromHitran2004Stream(istream &is)
Read from newer HITRAN.
Index nelem() const
Number of elements.
std::vector< Rational > mupperquanta
Upper level quantum numbers.
bool line_is_id(const Lines &band, const QuantumIdentifier &id, size_t line_index)
Checks if the external quantum identifier is equal to a line's identifier.
const ArrayOfSpeciesTag & BroadeningSpecies() const noexcept
Returns the broadening species.
Implements rational numbers to work with other ARTS types.
Polarization
Zeeman polarization selection.
void LineShapeType(LineShape::Type x) noexcept
Sets lineshapetype style.
const std::vector< QuantumNumberType > & LocalQuanta() const noexcept
Returns local quantum numbers.
MirroringType string2mirroringtype(const String &in)
Zeeman::Model Zeeman() const noexcept
Zeeman model.
bifstream & read(bifstream &bif)
Binary read for Model.
Contains the line shape namespace.
bifstream & read(bifstream &is)
Binary read for Lines.
Binary output file stream class.
Vector vmrs(const ConstVectorView &atmospheric_vmrs, const ArrayOfArrayOfSpeciesTag &atmospheric_species, const QuantumIdentifier &self, const ArrayOfSpeciesTag &lineshape_species, bool self_in_list, bool bath_in_list, Type type)
Returns a VMR vector for this model's main calculations.