32 #ifndef absorptionlines_h 33 #define absorptionlines_h 59 else if (in ==
"Lorentz")
61 else if (in ==
"Same")
63 else if (in ==
"Manual")
66 throw std::runtime_error(
"Cannot recognize the mirroring type");
83 return "These lines are not mirrored at 0 Hz.\n";
85 return "These lines are mirrored around 0 Hz using the Lorentz line shape.\n";
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";
107 else if (in ==
"VVH")
109 else if (in ==
"VVW")
114 throw std::runtime_error(
"Cannot recognize the normalization type");
131 return "No re-normalization in the far wing will be applied.\n";
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";
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";
159 else if (in ==
"ByHITRANRosenkranzRelmat")
161 else if (in ==
"ByHITRANFullRelmat")
163 else if (in ==
"NLTE-VibrationalTemperatures")
165 else if (in ==
"NLTE")
168 throw std::runtime_error(
"Cannot recognize the population type");
176 return "ByHITRANFullRelmat";
178 return "ByHITRANRosenkranzRelmat";
180 return "NLTE-VibrationalTemperatures";
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";
193 return "The lines requires Relaxation matrix calculations in LTE - HITRAN Rosenkranz method.\n";
195 return "The lines are considered as in NLTE by vibrational temperatures.\n";
197 return "The lines are considered as in pure NLTE.\n";
216 else if (in ==
"ByLine")
218 else if (in ==
"ByBand")
221 throw std::runtime_error(
"Cannot recognize the cutoff type");
237 os <<
"No cut-off will be applied.\n";
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={}) :
309 mlineshape(lineshape),
310 mlowerquanta(lowerquanta),
311 mupperquanta(upperquanta) {}
319 mlineshape(metamodel), mlowerquanta(nquanta), mupperquanta(nquanta) {
320 if(
Index(nbroadeners) not_eq mlineshape.
nelem())
321 throw std::runtime_error(
"Mismatch between broadeners and model");
444 bool SameQuantumNumbers(
const SingleLine& sl)
const noexcept;
458 for(
size_t i=0;
i<keys.size();
i++) {
484 for (
auto& sm : mlineshape.
Data()) {
493 bif >> mF0 >> mI0 >> mE0 >> mglow >> mgupp >> mA >> mzeeman;
496 mlineshape.
read(bif);
499 for (
auto& rat: mlowerquanta) rat.read(bif);
502 for (
auto& rat: mupperquanta) rat.read(bif);
510 bof << mF0 << mI0 << mE0 << mglow << mgupp << mA << mzeeman;
513 mlineshape.
write(bof);
516 for (
auto& rat: mlowerquanta) rat.write(bof);
519 for (
auto& rat: mupperquanta) rat.write(bof);
532 bool selfbroadening=
false;
533 bool bathbroadening=
false;
610 bool bathbroadening=
false,
620 const std::vector<QuantumNumberType>& localquanta={},
622 const std::vector<SingleLine>& lines={}) :
623 mselfbroadening(selfbroadening),
624 mbathbroadening(bathbroadening),
626 mmirroring(mirroring),
627 mpopulation(population),
628 mnormalization(normalization),
629 mlineshapetype(lineshapetype),
631 mcutofffreq(cutofffreq),
632 mlinemixinglimit(linemixinglimit),
633 mquantumidentity(quantumidentity),
634 mlocalquanta(localquanta),
635 mbroadeningspecies(broadeningspecies),
668 const std::vector<QuantumNumberType>& localquanta,
671 mselfbroadening(selfbroadening),
672 mbathbroadening(bathbroadening),
674 mmirroring(mirroring),
675 mpopulation(population),
676 mnormalization(normalization),
677 mlineshapetype(lineshapetype),
679 mcutofffreq(cutofffreq),
680 mlinemixinglimit(linemixinglimit),
681 mquantumidentity(quantumidentity),
682 mlocalquanta(localquanta),
683 mbroadeningspecies(broadeningspecies),
686 localquanta.size(), metamodel)) {};
701 if(NumLocalQuanta() not_eq sl.LowerQuantumElems() or
702 NumLocalQuanta() not_eq sl.UpperQuantumElems())
703 throw std::runtime_error(
"Error calling appending function, bad size of quantum numbers");
705 if(NumLines() not_eq 0 and
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");
729 if(NumLines() not_eq 0 and
731 throw std::runtime_error(
"Error calling appending function, bad size of broadening species");
733 mlines.push_back(sl);
744 else if(sle.selfbroadening not_eq mselfbroadening)
746 else if(sle.bathbroadening not_eq mbathbroadening)
748 else if(sle.cutoff not_eq mcutoff)
750 else if(sle.mirroring not_eq mmirroring)
752 else if(sle.population not_eq mpopulation)
754 else if(sle.normalization not_eq mnormalization)
756 else if(sle.lineshapetype not_eq mlineshapetype)
758 else if(sle.T0 not_eq mT0)
760 else if(sle.cutofffreq not_eq mcutofffreq)
762 else if(sle.linemixinglimit not_eq mlinemixinglimit)
764 else if(quantumidentity not_eq mquantumidentity)
766 else if(not std::equal(sle.species.cbegin(), sle.species.cend(), mbroadeningspecies.cbegin(), mbroadeningspecies.cend()))
768 else if(NumLines() not_eq 0 and not sle.line.LineShape().Match(mlines[0].
LineShape()))
780 if(l.mselfbroadening not_eq mselfbroadening)
782 else if(l.mbathbroadening not_eq mbathbroadening)
784 else if(l.mcutoff not_eq mcutoff)
786 else if(l.mmirroring not_eq mmirroring)
788 else if(l.mpopulation not_eq mpopulation)
790 else if(l.mnormalization not_eq mnormalization)
792 else if(l.mlineshapetype not_eq mlineshapetype)
794 else if(l.mT0 not_eq mT0)
796 else if(l.mcutofffreq not_eq mcutofffreq)
798 else if(l.mlinemixinglimit not_eq mlinemixinglimit)
800 else if(l.mquantumidentity not_eq mquantumidentity)
802 else if(not std::equal(l.mbroadeningspecies.cbegin(), l.mbroadeningspecies.cend(), mbroadeningspecies.cbegin(), mbroadeningspecies.cend()))
804 else if(not std::equal(l.mlocalquanta.cbegin(), l.mlocalquanta.cend(), mlocalquanta.cbegin(), mlocalquanta.cend()))
806 else if(NumLines() not_eq 0 and l.NumLines() not_eq 0 and not l.mlines[0].LineShape().Match(mlines[0].
LineShape()))
814 std::sort(mlines.begin(), mlines.end(),
820 std::sort(mlines.begin(), mlines.end(),
830 String SpeciesName()
const noexcept;
833 String UpperQuantumNumbers()
const noexcept;
836 String LowerQuantumNumbers()
const noexcept;
855 const std::vector<SingleLine>&
AllLines() const noexcept {
return mlines;}
858 std::vector<SingleLine>&
AllLines() noexcept {
return mlines;}
868 void RemoveUnusedLocalQuantums();
872 void RemoveLocalQuantum(
size_t);
961 for(
auto& line: mlines)
962 line.SetAutomaticZeeman(mquantumidentity, mlocalquanta);
970 Numeric F0(
size_t k)
const noexcept {
return mlines[k].F0();}
984 const Numeric val = std::inner_product(mlines.cbegin(), mlines.cend(),
985 mlines.cbegin(), 0.0, std::plus<Numeric>(),
986 [](
const auto& a,
const auto& b){
return a.F0() * b.I0();});
987 const Numeric div = std::accumulate(mlines.cbegin(), mlines.cend(), 0.0,
988 [](
const auto& a,
const auto& b){
return a + b.I0();});
998 const Numeric val = std::inner_product(mlines.cbegin(), mlines.cend(),
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();
1010 Numeric E0(
size_t k)
const noexcept {
return mlines[k].E0();}
1024 Numeric I0(
size_t k)
const noexcept {
return mlines[k].I0();}
1038 Numeric A(
size_t k)
const noexcept {
return mlines[k].A();}
1084 return std::any_of(keys.cbegin(), keys.cend(), [x](
auto y){
return x == y;});
1091 else if (in ==
"Lorentz")
1093 else if (in ==
"Same")
1095 else if (in ==
"Manual")
1110 return std::any_of(keys.cbegin(), keys.cend(), [x](
auto y){
return x == y;});
1117 else if (in ==
"VVH")
1119 else if (in ==
"VVW")
1121 else if (in ==
"RQ")
1136 return std::any_of(keys.cbegin(), keys.cend(), [x](
auto y){
return x == y;});
1143 else if (in ==
"ByLine")
1145 else if (in ==
"ByBand")
1160 return std::any_of(keys.cbegin(), keys.cend(), [x](
auto y){
return x == y;});
1167 else if (in ==
"ByHITRANFullRelmat")
1169 else if (in ==
"ByHITRANRosenkranzRelmat")
1171 else if (in ==
"NLTE-VibrationalTemperatures")
1173 else if (in ==
"NLTE")
1188 return std::any_of(keys.cbegin(), keys.cend(), [x](
auto y){
return x == y;});
1195 else if (type ==
String(
"LP"))
1197 else if (type ==
String(
"VP"))
1199 else if (type ==
String(
"SDVP"))
1201 else if (type ==
String(
"HTP"))
1213 return mlinemixinglimit < 0 ? true : mlinemixinglimit > P;
1241 Index LineShapePos(
const Index& spec)
const noexcept;
1249 return LineShapePos(qid.Species());
1284 return F0(k) + mcutofffreq;
1301 return F0(k) - mcutofffreq;
1303 return mcutofffreq - 2*fmean;
1305 return std::numeric_limits<Numeric>::lowest();
1332 return mlinemixinglimit;
1337 mlinemixinglimit = x;
1342 return mlocalquanta;
1347 return mlocalquanta;
1352 return mbroadeningspecies;
1357 return mbroadeningspecies;
1362 return mselfbroadening;
1367 mselfbroadening = x;
1372 return mbathbroadening;
1377 mbathbroadening = x;
1382 return mquantumidentity;
1387 return mquantumidentity;
1393 for (
size_t i=0;
i<mlocalquanta.size();
i++) {
1404 void RemoveLine(
Index) noexcept;
1416 void ReverseLines() noexcept;
1419 Numeric SpeciesMass()
const noexcept;
1439 for (
auto& line: mlines)
1446 for (
auto& line: mlines)
1451 bool OK()
const noexcept;
1734 const std::vector<QuantumNumberType>& localquantas={},
1735 const std::vector<QuantumNumberType>& globalquantas={});
1854 std::ostream&
operator<<(std::ostream&,
const ArrayOfAbsorptionLines&);
1856 std::ostream&
operator<<(std::ostream&,
const ArrayOfArrayOfAbsorptionLines&);
1858 #endif // absorptionlines_h
std::vector< SingleLine > & AllLines() noexcept
Lines.
void A(Numeric x) noexcept
Einstein spontaneous emission.
INDEX Index
The type to use for all integer numbers and indices.
std::vector< SingleLine > mlines
A list of individual lines.
void AppendSingleLine(const SingleLine &sl)
Appends a single line to the absorption lines.
Computations and data for a single absorption line.
Numeric A(size_t k) const noexcept
Einstein spontaneous emission.
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.
void F0(Numeric x) noexcept
Central frequency.
LineShape::Type mlineshapetype
Type of line shape.
SingleLineExternal ReadFromHitran2001Stream(istream &is)
Read from HITRAN before 2004.
void g_low(Numeric x) noexcept
Lower level statistical weight.
const ArrayOfSpeciesTag & BroadeningSpecies() const noexcept
Returns the broadening species.
Numeric mglow
Lower level statistical weight.
Numeric T0() const noexcept
Returns reference temperature.
Numeric E0(size_t k) const noexcept
Lower level energy.
MirroringType
Describes the type of mirroring line effects.
Index nelem() const
Number of elements.
void Isotopologue(Index iso)
Set the Isotopologue.
bool relaxationtype_relmat(PopulationType in)
bofstream & write(bofstream &os) const
Binary write for Lines.
SingleLineExternal ReadFromArtscat3Stream(istream &is)
Read from ARTSCAT-3.
Rational UpperQuantumNumber(size_t i) const noexcept
Upper quantum number.
Numeric mA
Einstein spontaneous emission coefficient.
NormalizationType
Describes the type of normalization line effects.
Numeric CutoffFreq(size_t k) const noexcept
Returns cutoff frequency or maximum value.
G0 G2 FVC Y DV Numeric E0
Numeric F0() const noexcept
Central frequency.
LineShape::Model & LineShape() noexcept
Line shape model.
MirroringType mmirroring
Mirroring type.
Numeric mgupp
Upper level statistical weight.
SingleLineExternal ReadFromMytran2Stream(istream &is)
Read from Mytran2 The MYTRAN2 format is as follows (directly taken from the abs_my.c documentation):
Index LineShapePos(const QuantumIdentifier &qid) const noexcept
Position among broadening species or -1.
void SetAutomaticZeeman() noexcept
Set Zeeman effect for all lines that have the correct quantum numbers.
static bool validIndexForPopulation(Index x) noexcept
Checks if index is a valid population.
Numeric & g_low(size_t k) noexcept
Lower level statistical weight.
SingleLineExternal ReadFromArtscat4Stream(istream &is)
Read from ARTSCAT-4.
QuantumIdentifier mquantumidentity
Catalog ID.
Model vector2modellm(Vector x, LegacyLineMixingData::TypeLM type)
LineShape::Model from legacy input vector.
Index Isotopologue() const noexcept
Isotopologue Index.
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.
Numeric LinemixingLimit() const noexcept
Returns line mixing limit.
Numeric reduced_magnetic_quadrapole(Rational Jf, Rational Ji, Rational N)
Compute the reduced magnetic quadrapole moment.
bofstream & write(bofstream &bof) const
Binary write for Model.
Main line shape model class.
Numeric F_mean() const noexcept
Mean frequency by weight of line strengt.
bifstream & read(bifstream &bif)
Binary read for Model.
Numeric & F0() noexcept
Central frequency.
Index NumLocalQuanta() const noexcept
Number of local quantum numbers.
String mirroringtype2string(MirroringType in)
MirroringType string2mirroringtype(const String &in)
void SetLineMixing2SecondOrderData(const Vector &d)
Set the line mixing model to 2nd order.
Index NumLines() const noexcept
Number of lines.
Numeric & F0(size_t k) noexcept
Central frequency.
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.
Numeric ZeemanSplitting(size_t k, Zeeman::Polarization type, Index i) const noexcept
Returns the splitting of a Zeeman split line.
Numeric & g_upp() noexcept
Upper level statistical weight.
void Population(PopulationType x) noexcept
Sets population style.
void SetAutomaticZeeman(QuantumIdentifier qid, const std::vector< QuantumNumberType > &keys)
Set Zeeman effect by automatic detection.
void CutoffFreqValue(Numeric x) noexcept
Sets internal cutoff frequency value.
const std::vector< SingleSpeciesModel > & Data() const noexcept
PopulationType Population() const noexcept
Returns population style.
std::vector< Rational > mlowerquanta
Lower level quantum numbers.
static NormalizationType string2Normalization(const String &in) noexcept
QuantumNumberType
Enum for Quantum Numbers used for indexing.
bool Self() const noexcept
Returns self broadening status.
PopulationType mpopulation
Line population distribution.
void Mirroring(MirroringType x) noexcept
Returns mirroring style.
CutoffType
Describes the type of cutoff calculations.
void T0(Numeric x) noexcept
Sets reference temperature.
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.
SingleLineExternal ReadFromArtscat5Stream(istream &is)
Read from ARTSCAT-5.
void Self(bool x) noexcept
Returns self broadening status.
Numeric I0(size_t k) const noexcept
Reference line strength.
Deals with internal derivatives, Jacobian definition, and OEM calculations.
Numeric ZeemanStrength(size_t k, Zeeman::Polarization type, Index i) const noexcept
Returns the strength of a Zeeman split line.
Numeric F_mean(const ConstVectorView wgts) const noexcept
Mean frequency by weight of line strengt.
LineShape::Model mlineshape
Line shape model.
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.
std::istream & operator>>(std::istream &, SingleLine &)
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.
Numeric CutoffFreqMinus(size_t k, Numeric fmean) const noexcept
Returns negative cutoff frequency or lowest value.
Numeric & I0(size_t k) noexcept
Reference line strength.
Computations of line shape derived parameters.
void E0(Numeric x) noexcept
Lower level energy.
Array< AbsorptionLines > ArrayOfAbsorptionLines
void sort_by_einstein()
Sort inner line list by Einstein coefficient.
String normalizationtype2string(NormalizationType in)
Numeric mcutofffreq
cutoff frequency
Numeric & E0() noexcept
Lower level energy.
Numeric & A() noexcept
Einstein spontaneous emission.
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.
Numeric reduced_rovibrational_dipole(Rational Jf, Rational Ji, Rational lf, Rational li, Rational k=Rational(1))
Compute the reduced rovibrational dipole moment.
void I0(Numeric x) noexcept
Reference line strength.
SingleLineExternal ReadFromHitranOnlineStream(istream &is)
Read from HITRAN online.
CutoffType string2cutofftype(const String &in)
const std::vector< QuantumNumberType > & LocalQuanta() const noexcept
Returns local quantum numbers.
String cutofftype2string(CutoffType in)
static bool validIndexForCutoff(Index x) noexcept
Checks if index is a valid cutoff.
void Species(Index sp)
Set the Species.
CutoffType mcutoff
cutoff type, by band or by line
Binary output file stream class.
Implements rational numbers to work with other ARTS types.
This file contains the class declaration of bifstream.
bool Bath() const noexcept
Returns bath broadening status.
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.
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.
This file contains the class declaration of bofstream.
bool Match(const Lines &l) const noexcept
Checks if another line list matches this structure.
Numeric & A(size_t k) noexcept
Einstein spontaneous emission.
Numeric & g_low() noexcept
Lower level statistical weight.
Numeric g_low(size_t k) const noexcept
Lower level statistical weight.
Index Species() const noexcept
Species Index.
String populationtype2string(PopulationType in)
std::vector< QuantumNumberType > & LocalQuanta() noexcept
Returns local quantum numbers.
SingleLineExternal ReadFromLBLRTMStream(istream &is)
Read from LBLRTM.
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.
Numeric mF0
Central frequency.
Coefficients and temperature model for SingleSpeciesModel.
bool DoLineMixing(Numeric P) const noexcept
Returns if the pressure should do line mixing.
void Cutoff(CutoffType x) noexcept
Sets cutoff style.
Numeric g_low() const noexcept
Lower level statistical weight.
void AppendSingleLine(SingleLine &&sl)
Appends a single line to the absorption lines.
SingleLineExternal ReadFromJplStream(istream &is)
Read from JPL.
QuantumIdentifier QuantumIdentityOfLine(Index k) const noexcept
Returns identity status.
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.
Class to identify and match lines by their quantum numbers.
Numeric mI0
Reference intensity.
Index UpperQuantumElems() const noexcept
Number of upper quantum numbers.
Numeric E0() const noexcept
Lower level energy.
bool mbathbroadening
Does the line broadening have bath broadening.
void SetLineMixingModel(SingleSpeciesModel x)
PopulationType string2populationtype(const String &in)
NUMERIC Numeric
The type to use for all floating point numbers.
ArrayOfSpeciesTag mbroadeningspecies
A list of broadening species.
Numeric A() const noexcept
Einstein spontaneous emission.
Contains the line shape namespace.
Numeric mlinemixinglimit
linemixing limit
PopulationType
Describes the type of population level counter.
void g_upp(Numeric x) noexcept
Upper level statistical weight.
Numeric mE0
Lower state energy level.
QuantumIdentifier & QuantumIdentity() noexcept
Returns identity status.
std::ostream & operator<<(std::ostream &, const SingleLine &)
Numeric mT0
Reference temperature for all parameters of the lines.
Numeric CutoffFreqValue() const noexcept
Returns internal cutoff frequency value.
constexpr Rational UpperQuantumNumber(QuantumNumberType X) const noexcept
Return a upper quantum number by copy.
void SetLineMixing2AER(const Vector &d)
Set the line mixing model to AER kind.
basic_ostringstream< char, string_char_traits< char >, alloc > ostringstream
Container class for Quantum Numbers.
Headers and class definition of Zeeman modeling.
static bool validIndexForNormalization(Index x) noexcept
Checks if index is a valid normalization.
std::vector< Rational > & UpperQuantumNumbers() noexcept
Upper level quantum numbers.
constexpr Index nelem(Rational Ju, Rational Jl, Polarization type) noexcept
Gives the number of elements of the polarization type of this transition.
std::vector< Rational > & LowerQuantumNumbers() noexcept
Lower level quantum numbers.
String cutofftype2metadatastring(CutoffType in, Numeric cutoff)
bool mselfbroadening
Does the line broadening have self broadening.
Polarization
Zeeman polarization selection.
SingleLine(size_t nbroadeners, size_t nquanta, const LineShape::Model &metamodel)
Initialization for constant sizes.
Numeric & E0(size_t k) noexcept
Lower level energy.
NormalizationType Normalization() const noexcept
Returns normalization style.
NormalizationType string2normalizationtype(const String &in)
ArrayOfSpeciesTag & BroadeningSpecies() noexcept
Returns the broadening species.
Numeric F0(size_t k) const noexcept
Central frequency.
Index LineShapeElems() const noexcept
Number of lineshape elements.
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.
const std::vector< Rational > & UpperQuantumNumbers() const noexcept
Upper level quantum numbers.
Absorption::Lines AbsorptionLines
std::vector< QuantumNumberType > mlocalquanta
List of local quantum numbers, these must be defined.
A constant view of a Vector.
static LineShape::Type string2LineShapeType(const String &type) noexcept
const std::vector< Rational > & LowerQuantumNumbers() const noexcept
Lower level quantum numbers.
Numeric & g_upp(size_t k) noexcept
Upper level statistical weight.
Index nelem(const Lines &l)
Number of lines.
Absorption::SingleLine AbsorptionSingleLine
MirroringType Mirroring() const noexcept
Returns mirroring style.
void truncate_global_quantum_numbers()
Removes all global quantum numbers.
Lines createEmptyCopy(const Lines &al) noexcept
Creates a copy of the input lines structure.
Binary output file stream class.
Index NumBroadeners() const noexcept
Number of broadening species.
const LineShape::Model & LineShape() const noexcept
Line shape model.
bool MatchWithExternal(const SingleLineExternal &sle, const QuantumIdentifier &quantumidentity) const noexcept
Checks if an external line matches this structure.
bifstream & read(bifstream &bif)
Binary read for AbsorptionLines.
Numeric g_upp(size_t k) const noexcept
Upper level statistical weight.
Rational & UpperQuantumNumber(size_t i) noexcept
Upper quantum number.
Single line reading output.
const QuantumIdentifier & QuantumIdentity() const noexcept
Returns identity status.
void LineShapeType(LineShape::Type x) noexcept
Sets lineshapetype style.
Zeeman::Model Zeeman() const noexcept
Zeeman model.
String populationtype2metadatastring(PopulationType in)
Index ZeemanCount(size_t k, Zeeman::Polarization type) const noexcept
Returns the number of Zeeman split lines.
String normalizationtype2metadatastring(NormalizationType in)
static CutoffType string2Cutoff(const String &in) noexcept
SingleLineExternal ReadFromHitran2004Stream(istream &is)
Read from newer HITRAN.
std::vector< Rational > mupperquanta
Upper level quantum numbers.
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)
static bool validIndexForLineShapeType(Index x) noexcept
Checks if index is a valid lineshapetype.
Rational LowerQuantumNumber(size_t i) const noexcept
Lower quantum number.
void LinemixingLimit(Numeric x) noexcept
Sets line mixing limit.
Numeric & I0() noexcept
Reference line strength.
Namespace to contain things required for absorption calculations.
String LineShapeMetaData() const noexcept
Meta data for the line shape if it exists.
static MirroringType string2Mirroring(const String &in) noexcept
bifstream & read(bifstream &is)
Binary read for Lines.
Array< ArrayOfAbsorptionLines > ArrayOfArrayOfAbsorptionLines
Rational & LowerQuantumNumber(size_t i) noexcept
Lower quantum number.
static PopulationType string2Population(const String &in) noexcept
CutoffType Cutoff() const noexcept
Returns cutoff style.
Index LowerQuantumElems() const noexcept
Number of lower quantum numbers.
void sort_by_frequency()
Sort inner line list by frequency.
Numeric g_upp() const noexcept
Upper level statistical weight.
Zeeman::Model mzeeman
Zeeman model.
bofstream & write(bofstream &bof) const
Binary write for AbsorptionLines.
LineShape::Type LineShapeType() const noexcept
Returns lineshapetype style.
String mirroringtype2metadatastring(MirroringType in)
String ModelShape2MetaData(const Model &m)
Zeeman::Model & Zeeman() noexcept
Zeeman model.
void Normalization(NormalizationType x) noexcept
Returns normalization style.
void Bath(bool x) noexcept
Returns bath broadening status.
static bool validIndexForMirroring(Index x) noexcept
Checks if index is a valid mirroring.
my_basic_string< char > String
The String type for ARTS.
NormalizationType mnormalization
Line normalization type.
ArrayOfSpeciesTag species
Numeric I0() const noexcept
Reference line strength.
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.
const std::vector< SingleLine > & AllLines() const noexcept
Lines.