ARTS 2.5.11 (git: 6827797f)
absorptionlines.h
Go to the documentation of this file.
1
11#ifndef absorptionlines_h
12#define absorptionlines_h
13
14#include "bifstream.h"
15#include "bofstream.h"
16#include "enums.h"
17#include "jacobian.h"
18#include "lineshapemodel.h"
19#include "matpack_concepts.h"
20#include "quantum_numbers.h"
21#include "species_tags.h"
22#include "zeemandata.h"
23
24#include <utility>
25#include <vector>
26
27
29namespace Absorption {
34ENUMCLASS(MirroringType, char,
35 None, // No mirroring
36 Lorentz, // Mirror, but use Lorentz line shape
37 SameAsLineShape, // Mirror using the same line shape
38 Manual // Mirror by having a line in the array of line record with negative F0
39) // MirroringType
40
41constexpr std::string_view mirroringtype2metadatastring(MirroringType in) noexcept {
42 switch (in) {
43 case MirroringType::None:
44 return "These lines are not mirrored at 0 Hz.\n";
45 case MirroringType::Lorentz:
46 return "These lines are mirrored around 0 Hz using the Lorentz line shape.\n";
47 case MirroringType::SameAsLineShape:
48 return "These line are mirrored around 0 Hz using the original line shape.\n";
49 case MirroringType::Manual:
50 return "There are manual line entries in the catalog to mirror this line.\n";
51 case MirroringType::FINAL: break;
52 }
53 return "There's an error";
54}
55
60ENUMCLASS(NormalizationType, char,
61 None, // Do not renormalize the line shape
62 VVH, // Renormalize with Van Vleck and Huber specifications
63 VVW, // Renormalize with Van Vleck and Weiskopf specifications
64 RQ, // Renormalize using Rosenkranz's quadratic specifications
65 SFS // Renormalize using simple frequency scaling of the line strength
66) // NormalizationType
67
68constexpr std::string_view normalizationtype2metadatastring(NormalizationType in) {
69 switch (in) {
70 case NormalizationType::None:
71 return "No re-normalization in the far wing will be applied.\n";
72 case NormalizationType::VVH:
73 return "van Vleck and Huber far-wing renormalization will be applied, "
74 "i.e. F ~ (f tanh(hf/2kT))/(f0 tanh(hf0/2kT))\n";
75 case NormalizationType::VVW:
76 return "van Vleck and Weisskopf far-wing renormalization will be applied, "
77 "i.e. F ~ (f/f0)^2\n";
78 case NormalizationType::RQ:
79 return "Rosenkranz quadratic far-wing renormalization will be applied, "
80 "i.e. F ~ hf0/2kT sinh(hf0/2kT) (f/f0)^2\n";
81 case NormalizationType::SFS:
82 return "Simple frequency scaling of the far-wings will be applied, "
83 "i.e. F ~ (f / f0) * ((1 - exp(- hf / kT)) / (1 - exp(- hf0 / kT)))\n";
84 case NormalizationType::FINAL: break;
85 }
86 return "There's an error";
87}
88
93ENUMCLASS(PopulationType, char,
94 LTE, // Assume band is in LTE
95 NLTE, // Assume band is in NLTE and the upper-to-lower ratio is known
96 VibTemps, // Assume band is in NLTE described by vibrational temperatures and LTE at other levels
97 ByHITRANRosenkranzRelmat, // Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
98 ByHITRANFullRelmat, // Assume band needs to compute and directly use the relaxation matrix according to HITRAN
99 ByMakarovFullRelmat, // Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
100 ByRovibLinearDipoleLineMixing // Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
101) // PopulationType
102
103constexpr std::string_view populationtype2metadatastring(PopulationType in) {
104 switch (in) {
105 case PopulationType::LTE:
106 return "The lines are considered as in pure LTE.\n";
107 case PopulationType::ByMakarovFullRelmat:
108 return "The lines requires relaxation matrix calculations in LTE - Makarov et al 2020 full method.\n";
109 case PopulationType::ByRovibLinearDipoleLineMixing:
110 return "The lines requires relaxation matrix calculations in LTE - Hartmann, Boulet, Robert, 2008, 1st edition method.\n";
111 case PopulationType::ByHITRANFullRelmat:
112 return "The lines requires relaxation matrix calculations in LTE - HITRAN full method.\n";
113 case PopulationType::ByHITRANRosenkranzRelmat:
114 return "The lines requires Relaxation matrix calculations in LTE - HITRAN Rosenkranz method.\n";
115 case PopulationType::VibTemps:
116 return "The lines are considered as in NLTE by vibrational temperatures.\n";
117 case PopulationType::NLTE:
118 return "The lines are considered as in pure NLTE.\n";
119 case PopulationType::FINAL: return "There's an error";
120 }
121 return "There's an error";
122}
123
124constexpr bool relaxationtype_relmat(PopulationType in) noexcept {
125 return in == PopulationType::ByHITRANFullRelmat or
126 in == PopulationType::ByMakarovFullRelmat or
127 in == PopulationType::ByHITRANRosenkranzRelmat or
128 in == PopulationType::ByRovibLinearDipoleLineMixing;
129}
130
132ENUMCLASS(CutoffType, char,
133 None, // No cutoff frequency at all
134 ByLine // The cutoff frequency is at SingleLine::F0 plus the cutoff frequency plus the speed independent pressure shift
135) // CutoffType
136
138
142 Numeric F0{};
143
145 Numeric I0{};
146
148 Numeric E0{};
149
151 Numeric glow{};
152
154 Numeric gupp{};
155
157 Numeric A{};
158
161
163 LineShape::Model lineshape{};
164
167
180 SingleLine(Numeric F0_=0,
181 Numeric I0_=0,
182 Numeric E0_=0,
183 Numeric glow_=0,
184 Numeric gupp_=0,
185 Numeric A_=0,
188 Quantum::Number::LocalState localquanta_={}) :
189 F0(F0_),
190 I0(I0_),
191 E0(E0_),
192 glow(glow_),
193 gupp(gupp_),
194 A(A_),
195 zeeman(zeeman_),
196 lineshape(std::move(lineshape_)),
197 localquanta(std::move(localquanta_)) {}
198
205 lineshape(std::move(metamodel)), localquanta(std::move(metaquanta)) {}
206
210
212 [[nodiscard]] Index LineShapeElems() const noexcept {return lineshape.nelem();}
213
215 [[nodiscard]] Index LocalQuantumElems() const ARTS_NOEXCEPT {return localquanta.val.nelem();}
216
220
227 void SetAutomaticZeeman(QuantumIdentifier qid);
228
233 void SetLineMixing2SecondOrderData(const Vector& d);
234
239 void SetLineMixing2AER(const Vector& d);
240
242 bifstream& read(bifstream& bif);
243
245 bofstream& write(bofstream& bof) const;
246
247 friend std::ostream& operator<<(std::ostream&, const SingleLine&);
248
249 friend std::istream& operator>>(std::istream&, SingleLine&);
250}; // SingleLine
251
254 bool bad=true;
255 bool selfbroadening=false;
256 bool bathbroadening=false;
257 CutoffType cutoff=CutoffType::None;
258 MirroringType mirroring=MirroringType::None;
259 PopulationType population=PopulationType::LTE;
260 NormalizationType normalization=NormalizationType::None;
261 LineShape::Type lineshapetype=LineShape::Type::DP;
262 Numeric T0=0;
263 Numeric cutofffreq=0;
264 Numeric linemixinglimit=-1;
268};
269
270struct Lines {
271 static constexpr Index version = 2;
272
275
278
280 CutoffType cutoff;
281
283 MirroringType mirroring;
284
286 PopulationType population;
287
289 NormalizationType normalization;
290
292 LineShape::Type lineshapetype;
293
295 Numeric T0;
296
298 Numeric cutofffreq;
299
302
305
308
311
328 Lines(bool selfbroadening_=false,
329 bool bathbroadening_=false,
330 CutoffType cutoff_=CutoffType::None,
331 MirroringType mirroring_=MirroringType::None,
332 PopulationType population_=PopulationType::LTE,
333 NormalizationType normalization_=NormalizationType::None,
334 LineShape::Type lineshapetype_=LineShape::Type::DP,
335 Numeric T0_=296,
336 Numeric cutofffreq_=-1,
337 Numeric linemixinglimit_=-1,
338 QuantumIdentifier quantumidentity_=QuantumIdentifier(),
339 ArrayOfSpecies broadeningspecies_={},
340 Array<SingleLine> lines_={}) :
341 selfbroadening(selfbroadening_),
342 bathbroadening(bathbroadening_),
343 cutoff(cutoff_),
344 mirroring(mirroring_),
345 population(population_),
346 normalization(normalization_),
347 lineshapetype(lineshapetype_),
348 T0(T0_),
349 cutofffreq(cutofffreq_),
350 linemixinglimit(linemixinglimit_),
351 quantumidentity(std::move(quantumidentity_)),
352 broadeningspecies(std::move(broadeningspecies_)),
353 lines(std::move(lines_)) {
355 if (bathbroadening) broadeningspecies.back() = Species::Species::Bath;
356 }
357
376 Lines(bool selfbroadening_,
377 bool bathbroadening_,
378 size_t nlines,
379 CutoffType cutoff_,
380 MirroringType mirroring_,
381 PopulationType population_,
382 NormalizationType normalization_,
383 LineShape::Type lineshapetype_,
384 Numeric T0_,
385 Numeric cutofffreq_,
386 Numeric linemixinglimit_,
387 QuantumIdentifier quantumidentity_,
388 ArrayOfSpecies broadeningspecies_,
389 const Quantum::Number::LocalState& metalocalquanta,
390 const LineShape::Model& metamodel) :
391 selfbroadening(selfbroadening_),
392 bathbroadening(bathbroadening_),
393 cutoff(cutoff_),
394 mirroring(mirroring_),
395 population(population_),
396 normalization(normalization_),
397 lineshapetype(lineshapetype_),
398 T0(T0_),
399 cutofffreq(cutofffreq_),
400 linemixinglimit(linemixinglimit_),
401 quantumidentity(std::move(quantumidentity_)),
402 broadeningspecies(std::move(broadeningspecies_)),
403 lines(nlines, SingleLine(metalocalquanta, metamodel)) {
405 if (bathbroadening) broadeningspecies.back() = Species::Species::Bath;
406 }
407
420 void AppendSingleLine(SingleLine&& sl);
421
434 void AppendSingleLine(const SingleLine& sl);
435
441 [[nodiscard]] bool MatchWithExternal(const SingleLineExternal& sle, const QuantumIdentifier& quantumidentity) const ARTS_NOEXCEPT;
442
449 [[nodiscard]] std::pair<bool, bool> Match(const Lines& l) const noexcept;
450
452 void sort_by_frequency();
453
455 void sort_by_einstein();
456
458 [[nodiscard]] String SpeciesName() const noexcept;
459
461 [[nodiscard]] String LineShapeMetaData() const noexcept;
462
464 [[nodiscard]] Species::Species Species() const noexcept;
465
467 [[nodiscard]] Species::IsotopeRecord Isotopologue() const noexcept;
468
470 [[nodiscard]] Index NumLines() const noexcept;
471
474
476 [[nodiscard]] Index NumBroadeners() const ARTS_NOEXCEPT;
477
479 [[nodiscard]] Index NumLocalQuanta() const noexcept;
480
486 [[nodiscard]] Index ZeemanCount(size_t k, Zeeman::Polarization type) const ARTS_NOEXCEPT;
487
494 [[nodiscard]] Numeric ZeemanStrength(size_t k, Zeeman::Polarization type, Index i) const ARTS_NOEXCEPT;
495
502 [[nodiscard]] Numeric ZeemanSplitting(size_t k, Zeeman::Polarization type, Index i) const ARTS_NOEXCEPT;
503
505 void SetAutomaticZeeman() noexcept;
506
512 [[nodiscard]] Numeric F_mean(Numeric T=0) const noexcept;
513
519 [[nodiscard]] Numeric F_mean(const ConstVectorView& wgts) const noexcept;
520
522 [[nodiscard]] bool OnTheFlyLineMixing() const noexcept;
523
529 [[nodiscard]] bool DoLineMixing(Numeric P) const noexcept;
530
531 [[nodiscard]] bool DoVmrDerivative(const QuantumIdentifier& qid) const noexcept;
532
534 [[nodiscard]] bool AnyLinemixing() const noexcept;
535
544 [[nodiscard]] LineShape::Output ShapeParameters(size_t k, Numeric T, Numeric P, const Vector& vmrs) const ARTS_NOEXCEPT;
545
554 [[nodiscard]] LineShape::Output ShapeParameters(size_t k, Numeric T, Numeric P, size_t pos) const ARTS_NOEXCEPT;
555
564 [[nodiscard]] LineShape::Output ShapeParameters_dT(size_t k, Numeric T, Numeric P, const Vector& vmrs) const ARTS_NOEXCEPT;
565
574 [[nodiscard]] LineShape::Output ShapeParameters_dT(size_t k, Numeric T, Numeric P, size_t pos) const ARTS_NOEXCEPT;
575
581 [[nodiscard]] Index LineShapePos(const Species::Species spec) const ARTS_NOEXCEPT;
582
591 [[nodiscard]] LineShape::Output ShapeParameters_dVMR(size_t k, Numeric T, Numeric P,
592 const QuantumIdentifier& vmr_qid) const ARTS_NOEXCEPT;
593
599 [[nodiscard]] Numeric CutoffFreq(size_t k, Numeric shift=0) const noexcept;
600
606 [[nodiscard]] Numeric CutoffFreqMinus(size_t k, Numeric shift=0) const noexcept;
607
609 [[nodiscard]] Index BroadeningSpeciesPosition(Species::Species spec) const noexcept;
610
612 [[nodiscard]] String MetaData() const;
613
615 void RemoveLine(Index) noexcept;
616
618 SingleLine PopLine(Index) noexcept;
619
621 void ReverseLines() noexcept;
622
624 [[nodiscard]] Numeric SpeciesMass() const noexcept;
625
632 [[nodiscard]] Vector BroadeningSpeciesVMR(const ConstVectorView&, const ArrayOfArrayOfSpeciesTag&) const;
633
641 [[nodiscard]] Vector BroadeningSpeciesMass(const ConstVectorView&, const ArrayOfArrayOfSpeciesTag&, const SpeciesIsotopologueRatios&, const Numeric& bath_mass=0) const;
642
649 [[nodiscard]] Numeric SelfVMR(const ConstVectorView&, const ArrayOfArrayOfSpeciesTag&) const;
650
653
655 bofstream& write(bofstream& os) const;
656
657 [[nodiscard]] bool OK() const ARTS_NOEXCEPT;
658
659 [[nodiscard]] Numeric DopplerConstant(Numeric T) const noexcept;
660
661 [[nodiscard]] QuantumIdentifier QuantumIdentityOfLine(Index k) const noexcept;
662
663 [[nodiscard]] Rational max(QuantumNumberType) const;
664
665 friend std::ostream& operator<<(std::ostream&, const Lines&);
666
667 friend std::istream& operator>>(std::istream&, Lines&);
668}; // Lines
669
676
683
690
748
804
819
828
874
885std::vector<Lines> split_list_of_external_lines(std::vector<SingleLineExternal>& external_lines,
886 const std::vector<QuantumNumberType>& localquantas={},
887 const std::vector<QuantumNumberType>& globalquantas={});
888
890Index nelem(const Lines& l);
891
893Index nelem(const Array<Lines>& l);
894
896Index nelem(const Array<Array<Lines>>& l);
897
907Numeric reduced_rovibrational_dipole(Rational Jf, Rational Ji, Rational lf, Rational li, Rational k = Rational(1));
908
916Numeric reduced_magnetic_quadrapole(Rational Jf, Rational Ji, Rational N);
917
923[[nodiscard]] bool any_cutoff(const Array<Array<Lines>>& abs_lines_per_species);
924} // namespace Absorption
925
931
932using AbsorptionNormalizationType = Absorption::NormalizationType;
933using AbsorptionPopulationType = Absorption::PopulationType;
934using AbsorptionMirroringType = Absorption::MirroringType;
935using AbsorptionCutoffType = Absorption::CutoffType;
936
938 bool None{false}, Lorentz{false}, SameAsLineShape{false}, Manual{false};
940 friend std::ostream& operator<<(std::ostream&, AbsorptionMirroringTagTypeStatus);
941};
942
944 bool None{false}, VVH{false}, VVW{false}, RQ{false}, SFS{false};
946 friend std::ostream& operator<<(std::ostream&, AbsorptionNormalizationTagTypeStatus);
947};
948
950 bool LTE{false}, NLTE{false}, VibTemps{false},
951 ByHITRANRosenkranzRelmat{false}, ByHITRANFullRelmat{false},
952 ByMakarovFullRelmat{false}, ByRovibLinearDipoleLineMixing{false};
954 friend std::ostream& operator<<(std::ostream&, AbsorptionPopulationTagTypeStatus);
955};
956
958 bool None{false}, ByLine{false};
960 friend std::ostream& operator<<(std::ostream&, AbsorptionCutoffTagTypeStatus);
961};
962
964 bool DP{false}, LP{false}, VP{false}, SDVP{false}, HTP{false}, SplitLP{false},
965 SplitVP{false}, SplitSDVP{false}, SplitHTP{false};
967 friend std::ostream &operator<<(std::ostream &,
969};
970
977
979 : mirroring(lines),
980 normalization(lines),
981 population(lines),
982 cutoff(lines),
983 lineshapetype(lines) {}
984 friend std::ostream& operator<<(std::ostream&, AbsorptionTagTypesStatus);
985};
986
990 Index ispecies;
991
993 Index iband;
994};
995
1004 Index i,
1005 const ArrayOfArrayOfSpeciesTag& abs_species,
1006 const ArrayOfArrayOfAbsorptionLines& abs_lines_per_species);
1007
1008#endif // absorptionlines_h
std::ostream & operator<<(std::ostream &os, AbsorptionCutoffTagTypeStatus val)
AbsorptionSpeciesBandIndex flat_index(Index i, const ArrayOfArrayOfSpeciesTag &abs_species, const ArrayOfArrayOfAbsorptionLines &abs_lines_per_species)
Get a flat index pair for species and band.
Absorption::CutoffType AbsorptionCutoffType
Absorption::NormalizationType AbsorptionNormalizationType
Absorption::PopulationType AbsorptionPopulationType
Absorption::MirroringType AbsorptionMirroringType
This file contains the class declaration of bifstream.
This file contains the class declaration of bofstream.
Main line shape model class.
Main Zeeman Model.
Definition: zeemandata.h:279
Binary output file stream class.
Definition: bifstream.h:26
Binary output file stream class.
Definition: bofstream.h:25
#define ARTS_NOEXCEPT
Definition: debug.h:81
#define ENUMCLASS(ENUMTYPE, TYPE,...)
Definition: enums.h:142
Routines for setting up the jacobian.
Contains the line shape namespace.
Namespace to contain things required for absorption calculations.
constexpr bool relaxationtype_relmat(PopulationType in) noexcept
SingleLineExternal ReadFromHitranOnlineStream(istream &is)
Read from HITRAN online.
String cutofftype2metadatastring(CutoffType in, Numeric cutoff)
SingleLineExternal ReadFromJplStream(istream &is)
Read from JPL.
Numeric reduced_rovibrational_dipole(Rational Jf, Rational Ji, Rational lf, Rational li, Rational k=Rational(1))
Compute the reduced rovibrational dipole moment.
SingleLineExternal ReadFromArtscat3Stream(istream &is)
Read from ARTSCAT-3.
Index nelem(const Lines &l)
Number of lines.
SingleLineExternal ReadFromLBLRTMStream(istream &is)
Read from LBLRTM.
std::ostream & operator<<(std::ostream &os, const Absorption::Lines &lines)
std::istream & operator>>(std::istream &is, Lines &lines)
Numeric cutoff
SingleLineExternal ReadFromArtscat5Stream(istream &is)
Read from ARTSCAT-5.
bool any_cutoff(const ArrayOfArrayOfAbsorptionLines &abs_lines_per_species)
Numeric reduced_magnetic_quadrapole(Rational Jf, Rational Ji, Rational N)
Compute the reduced magnetic quadrapole moment.
SingleLineExternal ReadFromHitran2004Stream(istream &is)
Read from newer HITRAN.
SingleLineExternal ReadFromHitran2001Stream(istream &is)
Read from HITRAN before 2004.
SingleLineExternal ReadFromArtscat4Stream(istream &is)
Read from ARTSCAT-4.
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.
Computations of line shape derived parameters.
Definition: lineshape.cc:27
Implements Zeeman modeling.
Definition: zeemandata.cc:317
Definition: mystring.h:246
Quantum::Number::GlobalState QuantumIdentifier
Quantum::Number::Type QuantumNumberType
Helper struct for flat_index.
Index iband
The band index in abs_lines_per_species[ispecies].
Index ispecies
The species index in abs_species/abs_lines_per_species.
AbsorptionNormalizationTagTypeStatus normalization
AbsorptionPopulationTagTypeStatus population
AbsorptionLineShapeTagTypeStatus lineshapetype
AbsorptionCutoffTagTypeStatus cutoff
AbsorptionMirroringTagTypeStatus mirroring
AbsorptionTagTypesStatus(const ArrayOfArrayOfAbsorptionLines &lines)
void sort_by_einstein()
Sort inner line list by Einstein coefficient.
void sort_by_frequency()
Sort inner line list by frequency.
Index NumBroadeners() const ARTS_NOEXCEPT
Number of broadening species.
SingleLine PopLine(Index) noexcept
Pops a single line.
Index BroadeningSpeciesPosition(Species::Species spec) const noexcept
Position of species if available or -1 else.
Numeric T0
Reference temperature for all parameters of the lines.
PopulationType population
Line population distribution.
Index NumLocalQuanta() const noexcept
Number of broadening species.
static constexpr Index version
void RemoveLine(Index) noexcept
Removes a single line.
Numeric F_mean(Numeric T=0) const noexcept
Mean frequency by weight of line strength.
void SetAutomaticZeeman() noexcept
Set Zeeman effect for all lines that have the correct quantum numbers.
Vector BroadeningSpeciesVMR(const ConstVectorView &, const ArrayOfArrayOfSpeciesTag &) const
Returns the VMRs of the broadening species.
bool bathbroadening
Does the line broadening have bath broadening.
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_, QuantumIdentifier quantumidentity_, ArrayOfSpecies broadeningspecies_, const Quantum::Number::LocalState &metalocalquanta, const LineShape::Model &metamodel)
XML-tag initialization.
Numeric ZeemanSplitting(size_t k, Zeeman::Polarization type, Index i) const ARTS_NOEXCEPT
Returns the splitting of a Zeeman split line.
Array< SingleLine > lines
A list of individual lines.
Index NumLines() const noexcept
Number of lines.
bofstream & write(bofstream &os) const
Binary write for Lines.
Numeric linemixinglimit
linemixing limit
Numeric DopplerConstant(Numeric T) const noexcept
bool OnTheFlyLineMixing() const noexcept
On-the-fly line mixing.
Numeric ZeemanStrength(size_t k, Zeeman::Polarization type, Index i) const ARTS_NOEXCEPT
Returns the strength of a Zeeman split line.
NormalizationType normalization
Line normalization type.
QuantumIdentifier QuantumIdentityOfLine(Index k) const noexcept
bool OK() const ARTS_NOEXCEPT
bifstream & read(bifstream &is)
Binary read for Lines.
bool MatchWithExternal(const SingleLineExternal &sle, const QuantumIdentifier &quantumidentity) const ARTS_NOEXCEPT
Checks if an external line matches this structure.
Species::IsotopeRecord Isotopologue() const noexcept
Isotopologue Index.
String LineShapeMetaData() const noexcept
Meta data for the line shape if it exists.
LineShape::Type lineshapetype
Type of line shape.
void MakeLineShapeModelCommon()
Make a common line shape if possible.
String SpeciesName() const noexcept
Species Name.
Numeric cutofffreq
cutoff frequency
Index LineShapePos(const Species::Species spec) const ARTS_NOEXCEPT
Position among broadening species or -1.
MirroringType mirroring
Mirroring type.
LineShape::Output ShapeParameters(size_t k, Numeric T, Numeric P, const Vector &vmrs) const ARTS_NOEXCEPT
Line shape parameters.
Index ZeemanCount(size_t k, Zeeman::Polarization type) const ARTS_NOEXCEPT
Returns the number of Zeeman split lines.
CutoffType cutoff
cutoff type, by band or by line
Numeric CutoffFreq(size_t k, Numeric shift=0) const noexcept
Returns cutoff frequency or maximum value.
void ReverseLines() noexcept
Reverses the order of the internal lines.
std::pair< bool, bool > Match(const Lines &l) const noexcept
Checks if another line list matches this structure.
void AppendSingleLine(SingleLine &&sl)
Appends a single line to the absorption lines.
ArrayOfSpecies broadeningspecies
A list of broadening species.
Numeric SelfVMR(const ConstVectorView &, const ArrayOfArrayOfSpeciesTag &) const
Returns the VMR of the species.
Numeric CutoffFreqMinus(size_t k, Numeric shift=0) const noexcept
Returns negative cutoff frequency or lowest value.
bool AnyLinemixing() const noexcept
Lines(bool selfbroadening_=false, bool bathbroadening_=false, CutoffType cutoff_=CutoffType::None, MirroringType mirroring_=MirroringType::None, PopulationType population_=PopulationType::LTE, NormalizationType normalization_=NormalizationType::None, LineShape::Type lineshapetype_=LineShape::Type::DP, Numeric T0_=296, Numeric cutofffreq_=-1, Numeric linemixinglimit_=-1, QuantumIdentifier quantumidentity_=QuantumIdentifier(), ArrayOfSpecies broadeningspecies_={}, Array< SingleLine > lines_={})
Default initialization.
String MetaData() const
Returns a printable statement about the lines.
bool DoLineMixing(Numeric P) const noexcept
Returns if the pressure should do line mixing.
bool selfbroadening
Does the line broadening have self broadening.
Rational max(QuantumNumberType) const
Numeric SpeciesMass() const noexcept
Mass of the molecule.
QuantumIdentifier quantumidentity
Catalog ID.
bool DoVmrDerivative(const QuantumIdentifier &qid) const noexcept
LineShape::Output ShapeParameters_dVMR(size_t k, Numeric T, Numeric P, const QuantumIdentifier &vmr_qid) const ARTS_NOEXCEPT
Line shape parameters vmr derivative.
LineShape::Output ShapeParameters_dT(size_t k, Numeric T, Numeric P, const Vector &vmrs) const ARTS_NOEXCEPT
Line shape parameters temperature derivatives.
Vector BroadeningSpeciesMass(const ConstVectorView &, const ArrayOfArrayOfSpeciesTag &, const SpeciesIsotopologueRatios &, const Numeric &bath_mass=0) const
Returns the mass of the broadening species.
Single line reading output.
Computations and data for a single absorption line.
SingleLine(Quantum::Number::LocalState metaquanta, LineShape::Model metamodel)
Initialization for constant sizes.
Index LineShapeElems() const noexcept
Number of lineshape elements.
SingleLine(Numeric F0_=0, Numeric I0_=0, Numeric E0_=0, Numeric glow_=0, Numeric gupp_=0, Numeric A_=0, Zeeman::Model zeeman_=Zeeman::Model(), LineShape::Model lineshape_=LineShape::Model(), Quantum::Number::LocalState localquanta_={})
Default initialization.
Index LocalQuantumElems() const ARTS_NOEXCEPT
Number of lower quantum numbers.
A logical struct for global quantum numbers with species identifiers.
Species::Species Species() const noexcept
A logical struct for local quantum numbers.
#define d
Headers and class definition of Zeeman modeling.