ARTS 2.5.10 (git: 2f1c442c)
absorptionlines.h
Go to the documentation of this file.
1/* Copyright (C) 2019
2 Richard Larsson <ric.larsson@gmail.com>
3
4
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any
8 later version.
9
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20 USA. */
21
32#ifndef absorptionlines_h
33#define absorptionlines_h
34
35#include "bifstream.h"
36#include "bofstream.h"
37#include "enums.h"
38#include "jacobian.h"
39#include "lineshapemodel.h"
40#include "matpack.h"
41#include "quantum_numbers.h"
42#include "species_tags.h"
43#include "zeemandata.h"
44
45#include <utility>
46#include <vector>
47
48
50namespace Absorption {
55ENUMCLASS(MirroringType, char,
56 None, // No mirroring
57 Lorentz, // Mirror, but use Lorentz line shape
58 SameAsLineShape, // Mirror using the same line shape
59 Manual // Mirror by having a line in the array of line record with negative F0
60) // MirroringType
61
62constexpr std::string_view mirroringtype2metadatastring(MirroringType in) noexcept {
63 switch (in) {
64 case MirroringType::None:
65 return "These lines are not mirrored at 0 Hz.\n";
66 case MirroringType::Lorentz:
67 return "These lines are mirrored around 0 Hz using the Lorentz line shape.\n";
68 case MirroringType::SameAsLineShape:
69 return "These line are mirrored around 0 Hz using the original line shape.\n";
70 case MirroringType::Manual:
71 return "There are manual line entries in the catalog to mirror this line.\n";
72 case MirroringType::FINAL: break;
73 }
74 return "There's an error";
75}
76
81ENUMCLASS(NormalizationType, char,
82 None, // Do not renormalize the line shape
83 VVH, // Renormalize with Van Vleck and Huber specifications
84 VVW, // Renormalize with Van Vleck and Weiskopf specifications
85 RQ, // Renormalize using Rosenkranz's quadratic specifications
86 SFS // Renormalize using simple frequency scaling of the line strength
87) // NormalizationType
88
89constexpr std::string_view normalizationtype2metadatastring(NormalizationType in) {
90 switch (in) {
91 case NormalizationType::None:
92 return "No re-normalization in the far wing will be applied.\n";
93 case NormalizationType::VVH:
94 return "van Vleck and Huber far-wing renormalization will be applied, "
95 "i.e. F ~ (f tanh(hf/2kT))/(f0 tanh(hf0/2kT))\n";
96 case NormalizationType::VVW:
97 return "van Vleck and Weisskopf far-wing renormalization will be applied, "
98 "i.e. F ~ (f/f0)^2\n";
99 case NormalizationType::RQ:
100 return "Rosenkranz quadratic far-wing renormalization will be applied, "
101 "i.e. F ~ hf0/2kT sinh(hf0/2kT) (f/f0)^2\n";
102 case NormalizationType::SFS:
103 return "Simple frequency scaling of the far-wings will be applied, "
104 "i.e. F ~ (f / f0) * ((1 - exp(- hf / kT)) / (1 - exp(- hf0 / kT)))\n";
105 case NormalizationType::FINAL: break;
106 }
107 return "There's an error";
108}
109
114ENUMCLASS(PopulationType, char,
115 LTE, // Assume band is in LTE
116 NLTE, // Assume band is in NLTE and the upper-to-lower ratio is known
117 VibTemps, // Assume band is in NLTE described by vibrational temperatures and LTE at other levels
118 ByHITRANRosenkranzRelmat, // Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
119 ByHITRANFullRelmat, // Assume band needs to compute and directly use the relaxation matrix according to HITRAN
120 ByMakarovFullRelmat, // Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
121 ByRovibLinearDipoleLineMixing // Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
122) // PopulationType
123
124constexpr std::string_view populationtype2metadatastring(PopulationType in) {
125 switch (in) {
126 case PopulationType::LTE:
127 return "The lines are considered as in pure LTE.\n";
128 case PopulationType::ByMakarovFullRelmat:
129 return "The lines requires relaxation matrix calculations in LTE - Makarov et al 2020 full method.\n";
130 case PopulationType::ByRovibLinearDipoleLineMixing:
131 return "The lines requires relaxation matrix calculations in LTE - Hartmann, Boulet, Robert, 2008, 1st edition method.\n";
132 case PopulationType::ByHITRANFullRelmat:
133 return "The lines requires relaxation matrix calculations in LTE - HITRAN full method.\n";
134 case PopulationType::ByHITRANRosenkranzRelmat:
135 return "The lines requires Relaxation matrix calculations in LTE - HITRAN Rosenkranz method.\n";
136 case PopulationType::VibTemps:
137 return "The lines are considered as in NLTE by vibrational temperatures.\n";
138 case PopulationType::NLTE:
139 return "The lines are considered as in pure NLTE.\n";
140 case PopulationType::FINAL: return "There's an error";
141 }
142 return "There's an error";
143}
144
145constexpr bool relaxationtype_relmat(PopulationType in) noexcept {
146 return in == PopulationType::ByHITRANFullRelmat or
147 in == PopulationType::ByMakarovFullRelmat or
148 in == PopulationType::ByHITRANRosenkranzRelmat or
149 in == PopulationType::ByRovibLinearDipoleLineMixing;
150}
151
153ENUMCLASS(CutoffType, char,
154 None, // No cutoff frequency at all
155 ByLine // The cutoff frequency is at SingleLine::F0 plus the cutoff frequency plus the speed independent pressure shift
156) // CutoffType
157
159
164
167
170
172 Numeric glow{};
173
175 Numeric gupp{};
176
179
182
184 LineShape::Model lineshape{};
185
188
202 Numeric I0_=0,
203 Numeric E0_=0,
204 Numeric glow_=0,
205 Numeric gupp_=0,
206 Numeric A_=0,
209 Quantum::Number::LocalState localquanta_={}) :
210 F0(F0_),
211 I0(I0_),
212 E0(E0_),
213 glow(glow_),
214 gupp(gupp_),
215 A(A_),
216 zeeman(zeeman_),
217 lineshape(std::move(lineshape_)),
218 localquanta(std::move(localquanta_)) {}
219
226 lineshape(std::move(metamodel)), localquanta(std::move(metaquanta)) {}
227
231
233 [[nodiscard]] Index LineShapeElems() const noexcept {return lineshape.nelem();}
234
236 [[nodiscard]] Index LocalQuantumElems() const ARTS_NOEXCEPT {return localquanta.val.nelem();}
237
241
248 void SetAutomaticZeeman(QuantumIdentifier qid);
249
254 void SetLineMixing2SecondOrderData(const Vector& d);
255
260 void SetLineMixing2AER(const Vector& d);
261
263 bifstream& read(bifstream& bif);
264
266 bofstream& write(bofstream& bof) const;
267
268 friend std::ostream& operator<<(std::ostream&, const SingleLine&);
269
270 friend std::istream& operator>>(std::istream&, SingleLine&);
271}; // SingleLine
272
275 bool bad=true;
276 bool selfbroadening=false;
277 bool bathbroadening=false;
278 CutoffType cutoff=CutoffType::None;
279 MirroringType mirroring=MirroringType::None;
280 PopulationType population=PopulationType::LTE;
281 NormalizationType normalization=NormalizationType::None;
282 LineShape::Type lineshapetype=LineShape::Type::DP;
289};
290
291struct Lines {
292 static constexpr Index version = 2;
293
296
299
301 CutoffType cutoff;
302
304 MirroringType mirroring;
305
307 PopulationType population;
308
310 NormalizationType normalization;
311
313 LineShape::Type lineshapetype;
314
317
320
323
326
329
332
349 Lines(bool selfbroadening_=false,
350 bool bathbroadening_=false,
351 CutoffType cutoff_=CutoffType::None,
352 MirroringType mirroring_=MirroringType::None,
353 PopulationType population_=PopulationType::LTE,
354 NormalizationType normalization_=NormalizationType::None,
355 LineShape::Type lineshapetype_=LineShape::Type::DP,
356 Numeric T0_=296,
357 Numeric cutofffreq_=-1,
358 Numeric linemixinglimit_=-1,
359 QuantumIdentifier quantumidentity_=QuantumIdentifier(),
360 ArrayOfSpecies broadeningspecies_={},
361 Array<SingleLine> lines_={}) :
362 selfbroadening(selfbroadening_),
363 bathbroadening(bathbroadening_),
364 cutoff(cutoff_),
365 mirroring(mirroring_),
366 population(population_),
367 normalization(normalization_),
368 lineshapetype(lineshapetype_),
369 T0(T0_),
370 cutofffreq(cutofffreq_),
371 linemixinglimit(linemixinglimit_),
372 quantumidentity(std::move(quantumidentity_)),
373 broadeningspecies(std::move(broadeningspecies_)),
374 lines(std::move(lines_)) {
376 if (bathbroadening) broadeningspecies.back() = Species::Species::Bath;
377 }
378
397 Lines(bool selfbroadening_,
398 bool bathbroadening_,
399 size_t nlines,
400 CutoffType cutoff_,
401 MirroringType mirroring_,
402 PopulationType population_,
403 NormalizationType normalization_,
404 LineShape::Type lineshapetype_,
405 Numeric T0_,
406 Numeric cutofffreq_,
407 Numeric linemixinglimit_,
408 QuantumIdentifier quantumidentity_,
409 ArrayOfSpecies broadeningspecies_,
410 const Quantum::Number::LocalState& metalocalquanta,
411 const LineShape::Model& metamodel) :
412 selfbroadening(selfbroadening_),
413 bathbroadening(bathbroadening_),
414 cutoff(cutoff_),
415 mirroring(mirroring_),
416 population(population_),
417 normalization(normalization_),
418 lineshapetype(lineshapetype_),
419 T0(T0_),
420 cutofffreq(cutofffreq_),
421 linemixinglimit(linemixinglimit_),
422 quantumidentity(std::move(quantumidentity_)),
423 broadeningspecies(std::move(broadeningspecies_)),
424 lines(nlines, SingleLine(metalocalquanta, metamodel)) {
426 if (bathbroadening) broadeningspecies.back() = Species::Species::Bath;
427 }
428
441 void AppendSingleLine(SingleLine&& sl);
442
455 void AppendSingleLine(const SingleLine& sl);
456
462 [[nodiscard]] bool MatchWithExternal(const SingleLineExternal& sle, const QuantumIdentifier& quantumidentity) const ARTS_NOEXCEPT;
463
470 [[nodiscard]] std::pair<bool, bool> Match(const Lines& l) const noexcept;
471
473 void sort_by_frequency();
474
476 void sort_by_einstein();
477
479 [[nodiscard]] String SpeciesName() const noexcept;
480
482 [[nodiscard]] String LineShapeMetaData() const noexcept;
483
485 [[nodiscard]] Species::Species Species() const noexcept;
486
488 [[nodiscard]] Species::IsotopeRecord Isotopologue() const noexcept;
489
491 [[nodiscard]] Index NumLines() const noexcept;
492
495
497 [[nodiscard]] Index NumBroadeners() const ARTS_NOEXCEPT;
498
500 [[nodiscard]] Index NumLocalQuanta() const noexcept;
501
507 [[nodiscard]] Index ZeemanCount(size_t k, Zeeman::Polarization type) const ARTS_NOEXCEPT;
508
515 [[nodiscard]] Numeric ZeemanStrength(size_t k, Zeeman::Polarization type, Index i) const ARTS_NOEXCEPT;
516
523 [[nodiscard]] Numeric ZeemanSplitting(size_t k, Zeeman::Polarization type, Index i) const ARTS_NOEXCEPT;
524
526 void SetAutomaticZeeman() noexcept;
527
533 [[nodiscard]] Numeric F_mean(Numeric T=0) const noexcept;
534
540 [[nodiscard]] Numeric F_mean(const ConstVectorView& wgts) const noexcept;
541
543 [[nodiscard]] bool OnTheFlyLineMixing() const noexcept;
544
550 [[nodiscard]] bool DoLineMixing(Numeric P) const noexcept;
551
552 [[nodiscard]] bool DoVmrDerivative(const QuantumIdentifier& qid) const noexcept;
553
555 [[nodiscard]] bool AnyLinemixing() const noexcept;
556
565 [[nodiscard]] LineShape::Output ShapeParameters(size_t k, Numeric T, Numeric P, const Vector& vmrs) const ARTS_NOEXCEPT;
566
575 [[nodiscard]] LineShape::Output ShapeParameters(size_t k, Numeric T, Numeric P, size_t pos) const ARTS_NOEXCEPT;
576
585 [[nodiscard]] LineShape::Output ShapeParameters_dT(size_t k, Numeric T, Numeric P, const Vector& vmrs) const ARTS_NOEXCEPT;
586
595 [[nodiscard]] LineShape::Output ShapeParameters_dT(size_t k, Numeric T, Numeric P, size_t pos) const ARTS_NOEXCEPT;
596
602 [[nodiscard]] Index LineShapePos(const Species::Species spec) const ARTS_NOEXCEPT;
603
612 [[nodiscard]] LineShape::Output ShapeParameters_dVMR(size_t k, Numeric T, Numeric P,
613 const QuantumIdentifier& vmr_qid) const ARTS_NOEXCEPT;
614
620 [[nodiscard]] Numeric CutoffFreq(size_t k, Numeric shift=0) const noexcept;
621
627 [[nodiscard]] Numeric CutoffFreqMinus(size_t k, Numeric shift=0) const noexcept;
628
630 [[nodiscard]] Index BroadeningSpeciesPosition(Species::Species spec) const noexcept;
631
633 [[nodiscard]] String MetaData() const;
634
636 void RemoveLine(Index) noexcept;
637
639 SingleLine PopLine(Index) noexcept;
640
642 void ReverseLines() noexcept;
643
645 [[nodiscard]] Numeric SpeciesMass() const noexcept;
646
653 [[nodiscard]] Vector BroadeningSpeciesVMR(const ConstVectorView&, const ArrayOfArrayOfSpeciesTag&) const;
654
662 [[nodiscard]] Vector BroadeningSpeciesMass(const ConstVectorView&, const ArrayOfArrayOfSpeciesTag&, const SpeciesIsotopologueRatios&, const Numeric& bath_mass=0) const;
663
670 [[nodiscard]] Numeric SelfVMR(const ConstVectorView&, const ArrayOfArrayOfSpeciesTag&) const;
671
674
676 bofstream& write(bofstream& os) const;
677
678 [[nodiscard]] bool OK() const ARTS_NOEXCEPT;
679
680 [[nodiscard]] Numeric DopplerConstant(Numeric T) const noexcept;
681
682 [[nodiscard]] QuantumIdentifier QuantumIdentityOfLine(Index k) const noexcept;
683
684 [[nodiscard]] Rational max(QuantumNumberType) const;
685
686 friend std::ostream& operator<<(std::ostream&, const Lines&);
687
688 friend std::istream& operator>>(std::istream&, Lines&);
689}; // Lines
690
697
704
711
769
825
840
849
895
906std::vector<Lines> split_list_of_external_lines(std::vector<SingleLineExternal>& external_lines,
907 const std::vector<QuantumNumberType>& localquantas={},
908 const std::vector<QuantumNumberType>& globalquantas={});
909
911Index nelem(const Lines& l);
912
914Index nelem(const Array<Lines>& l);
915
917Index nelem(const Array<Array<Lines>>& l);
918
929
938
944[[nodiscard]] bool any_cutoff(const Array<Array<Lines>>& abs_lines_per_species);
945} // namespace Absorption
946
952
953using AbsorptionNormalizationType = Absorption::NormalizationType;
954using AbsorptionPopulationType = Absorption::PopulationType;
955using AbsorptionMirroringType = Absorption::MirroringType;
956using AbsorptionCutoffType = Absorption::CutoffType;
957
959 bool None{false}, Lorentz{false}, SameAsLineShape{false}, Manual{false};
961 friend std::ostream& operator<<(std::ostream&, AbsorptionMirroringTagTypeStatus);
962};
963
965 bool None{false}, VVH{false}, VVW{false}, RQ{false}, SFS{false};
967 friend std::ostream& operator<<(std::ostream&, AbsorptionNormalizationTagTypeStatus);
968};
969
971 bool LTE{false}, NLTE{false}, VibTemps{false},
972 ByHITRANRosenkranzRelmat{false}, ByHITRANFullRelmat{false},
973 ByMakarovFullRelmat{false}, ByRovibLinearDipoleLineMixing{false};
975 friend std::ostream& operator<<(std::ostream&, AbsorptionPopulationTagTypeStatus);
976};
977
979 bool None{false}, ByLine{false};
981 friend std::ostream& operator<<(std::ostream&, AbsorptionCutoffTagTypeStatus);
982};
983
985 bool DP{false}, LP{false}, VP{false}, SDVP{false}, HTP{false}, SplitLP{false},
986 SplitVP{false}, SplitSDVP{false}, SplitHTP{false};
988 friend std::ostream &operator<<(std::ostream &,
990};
991
998
1000 : mirroring(lines),
1001 normalization(lines),
1002 population(lines),
1003 cutoff(lines),
1004 lineshapetype(lines) {}
1005 friend std::ostream& operator<<(std::ostream&, AbsorptionTagTypesStatus);
1006};
1007
1012
1015};
1016
1025 Index i,
1026 const ArrayOfArrayOfSpeciesTag& abs_species,
1027 const ArrayOfArrayOfAbsorptionLines& abs_lines_per_species);
1028
1029#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.
A constant view of a Vector.
Definition: matpackI.h:521
Main line shape model class.
The Vector class.
Definition: matpackI.h:910
Main Zeeman Model.
Definition: zeemandata.h:296
Binary output file stream class.
Definition: bifstream.h:43
Binary output file stream class.
Definition: bofstream.h:42
#define ARTS_NOEXCEPT
Definition: debug.h:99
#define ENUMCLASS(ENUMTYPE, TYPE,...)
Definition: enums.h:142
Routines for setting up the jacobian.
Contains the line shape namespace.
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
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:333
Quantum::Number::GlobalState QuantumIdentifier
Quantum::Number::Type QuantumNumberType
#define N
Definition: rng.cc:164
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.
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.
Implements rational numbers to work with other ARTS types.
Definition: rational.h:43
#define d
Headers and class definition of Zeeman modeling.