ARTS  2.4.0(git:4fb77825)
methods.cc
Go to the documentation of this file.
1 /* Copyright (C) 2000-2012
2  Stefan Buehler <sbuehler@uni-bremen.de>
3  Patrick Eriksson <patrick.eriksson@chalmers.se>
4  Oliver Lemke <olemke@ltu.se>
5 
6  This program is free software; you can redistribute it and/or modify it
7  under the terms of the GNU General Public License as published by the
8  Free Software Foundation; either version 2, or (at your option) any
9  later version.
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  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19  USA. */
20 
33 #include <array>
34 #include "methods.h"
35 #include "arts.h"
36 #include "wsv_aux.h"
37 
38 namespace global_data {
40 extern const ArrayOfString wsv_group_names;
41 } // namespace global_data
42 
43 template <typename ... T>
44 std::array<String, sizeof...(T)> string_array(const T&... input)
45 {
46  return {String(input)...};
47 }
48 
49 template <size_t LEN_OF_NAME,
50  size_t LEN_OF_DESCRIPTION,
51  size_t NUM_OF_AUTHORS,
52  size_t NUM_OF_OUTPUTS,
53  size_t NUM_OF_GOUT_ARGS,
54  size_t NUM_OF_GOUT_TYPES,
55  size_t NUM_OF_GOUT_DESCRIPTIONS,
56  size_t NUM_OF_INPUTS,
57  size_t NUM_OF_GIN_ARGS,
58  size_t NUM_OF_GIN_TYPES,
59  size_t NUM_OF_GIN_DEFAULTS,
60  size_t NUM_OF_GIN_DESCRIPTIONS,
61  typename ... Ts>
63  const char (&name) [LEN_OF_NAME],
64  const char (&description) [LEN_OF_DESCRIPTION],
65  const std::array<String, NUM_OF_AUTHORS>& authors,
66  const std::array<String, NUM_OF_OUTPUTS>& output,
67  const std::array<String, NUM_OF_GOUT_ARGS>& gout,
68  const std::array<String, NUM_OF_GOUT_TYPES>& gouttype,
69  const std::array<String, NUM_OF_GOUT_DESCRIPTIONS>& goutdesc,
70  const std::array<String, NUM_OF_INPUTS>& input,
71  const std::array<String, NUM_OF_GIN_ARGS>& gin,
72  const std::array<String, NUM_OF_GIN_TYPES>& gintype,
73  const std::array<String, NUM_OF_GIN_DEFAULTS>& gindefault,
74  const std::array<String, NUM_OF_GIN_DESCRIPTIONS>& gindesc,
75  Ts ... flags)
76 {
77  static_assert(LEN_OF_NAME > 1, "Must have a name");
78  static_assert(LEN_OF_DESCRIPTION > 1, "Must have a description");
79  static_assert(NUM_OF_AUTHORS not_eq 0, "Must have at least one author");
80  static_assert(NUM_OF_GOUT_ARGS == NUM_OF_GOUT_TYPES, "GOUT type(s) count does not match number of GOUT");
81  static_assert(NUM_OF_GOUT_ARGS == NUM_OF_GOUT_DESCRIPTIONS, "GOUT description(s) count does not match number of GOUT");
82  static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_TYPES, "GIN type(s) count does not match number of GIN");
83  static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_DEFAULTS, "GIN default(s) count does not match number of GIN");
84  static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_DESCRIPTIONS, "GIN description(s) count does not match number of GIN");
85 
86  return MdRecord(name,
87  description,
88  ArrayOfString(authors),
89  ArrayOfString(output),
90  ArrayOfString(gout),
91  ArrayOfString(gouttype),
92  ArrayOfString(goutdesc),
93  ArrayOfString(input),
94  ArrayOfString(gin),
95  ArrayOfString(gintype),
96  ArrayOfString(gindefault),
97  ArrayOfString(gindesc),
98  bool(flags) ...);
99 }
100 
101 // Some #defines and typedefs to make the records better readable:
102 #define NAME(x) x
103 #define DESCRIPTION(x) x
104 #define AUTHORS(...) \
105  string_array( __VA_ARGS__ )
106 #define OUT(...) \
107  string_array( __VA_ARGS__ )
108 #define GOUT(...) \
109  string_array( __VA_ARGS__ )
110 #define GOUT_TYPE(...) \
111  string_array( __VA_ARGS__ )
112 #define GOUT_DESC(...) \
113  string_array( __VA_ARGS__ )
114 #define IN(...) \
115  string_array( __VA_ARGS__ )
116 #define GIN(...) \
117  string_array( __VA_ARGS__ )
118 #define GIN_TYPE(...) \
119  string_array( __VA_ARGS__ )
120 #define GIN_DEFAULT(...) \
121  string_array( __VA_ARGS__ )
122 #define GIN_DESC(...) \
123  string_array( __VA_ARGS__ )
124 #define SETMETHOD(x) x
125 #define AGENDAMETHOD(x) x
126 #define USES_TEMPLATES(x) x
127 #define PASSWORKSPACE(x) x
128 #define PASSWSVNAMES(x) x
129 
130 /* Here's a template record entry: (PE 2008-09-20)
131 
132  md_data_raw.push_back
133  ( create_mdrecord
134  ( NAME( "MethodName" ),
135  DESCRIPTION
136  (
137  "A concise summary of the method.\n"
138  "\n"
139  "A more detailed description of the method. Try to describe the\n"
140  "purpose of the method and important considerations. Try to avoid\n"
141  "references to other WSMs as they might change. Refer to the user\n"
142  "guide for more complex information (as long as it exists, or that\n"
143  "you add it to AUG!).\n"
144  "\n"
145  "You do not need to describe workspace variables used. That\n"
146  "information is found in workspace.cc. Generic\n"
147  "output and input variables must be described in GIN_DESC and\n"
148  "GOUT_DESC below.\n"
149  ),
150  AUTHORS( "Your Name" ),
151  OUT(),
152  GOUT(),
153  GOUT_TYPE(),
154  GOUT_DESC(),
155  IN(),
156  GIN( "descriptive_name_for_generic_input1" ),
157  GIN_TYPE( "GenericInput1Type" ),
158  GIN_DEFAULT( NODEF ),
159  GIN_DESC( "Description for Generic Input Variable 1" )
160  ));
161 
162  For variable descriptions longer than one line, use the following format.
163  Don't forget to remove the space in '/ *' and '* /' if you copy this template.
164  I had to put it in there because C++ doesn't allow nested comments.
165 
166  md_data_raw.push_back
167  ( create_mdrecord
168  ( NAME( "MethodName" ),
169  ...
170  ...
171  ...
172  GIN( gin_var1, gin_var2, gin_var3 )
173  GIN_TYPE( "GInput1Type", "GInput2Type", "GInput3Type" ),
174  GIN_DEFAULT( NODEF ),
175  GIN_DESC( / * gin_var1 * /
176  "Long description for Generic Input Variable 1 "
177  "which can span multiple lines like for example "
178  "this one. Don't put any \n in the variable descriptions.",
179  / * gin_var2 * /
180  "Long description for Generic Input Variable 2 "
181  "which can span multiple lines like for example "
182  "this one. Don't put any \n in the variable descriptions.",
183  / * gin_var3 * /
184  "Long description for Generic Input Variable 3 "
185  "which can span multiple lines like for example "
186  "this one. Don't put any \n in the variable descriptions."
187  )
188 
189 */
190 
192  // The variable md_data is defined in file methods_aux.cc.
194 
195  // Initialise to zero, just in case:
196  md_data_raw.resize(0);
197 
198  // String with all array groups
199  const String ARRAY_GROUPS = get_array_groups_as_string();
200  // String with all groups that also exist as an array type
201  const String GROUPS_WITH_ARRAY_TYPE = get_array_groups_as_string(true, true);
202  // String with all array types whose element type is also available as a group
203  const String ARRAY_GROUPS_WITH_BASETYPE =
204  get_array_groups_as_string(true, false);
205 
207 
208  for (ArrayOfString::const_iterator it = wsv_group_names.begin();
209  it != wsv_group_names.end();
210  it++) {
211  if (*it != "Any") {
212  md_data_raw.push_back(MdRecord(
213  NAME(String(*it + "Create").c_str()),
214  DESCRIPTION(
215  String("Creates a variable of group " + *it +
216  ".\n"
217  "\n"
218  "After being created, the variable is uninitialized.\n")
219  .c_str()),
220  ArrayOfString(AUTHORS("Oliver Lemke")),
221  ArrayOfString(OUT()),
222  ArrayOfString(GOUT("out")),
223  ArrayOfString(GOUT_TYPE((*it).c_str())),
224  ArrayOfString(GOUT_DESC("Variable to create.")),
225  ArrayOfString(IN()),
226  ArrayOfString(GIN()),
229  ArrayOfString(GIN_DESC())));
230  }
231  }
232 
234  // Let's put in the functions in alphabetical order. This gives a clear rule
235  // for where to place a new function and this gives a nicer results when
236  // the functions are listed by "arts -m all".
237  // No distinction is made between uppercase and lowercase letters.
238  // Patrick Eriksson 2002-05-08
240 
241  md_data_raw.push_back(create_mdrecord(
242  NAME("AbsInputFromAtmFields"),
243  DESCRIPTION("Initialises the WSVs *abs_p*, *abs_t* and *abs_vmrs* from\n"
244  "*p_grid, *t_field* and *vmr_field*.\n"
245  "\n"
246  "This only works for a 1D atmosphere!\n"),
247  AUTHORS("Stefan Buehler"),
248  OUT("abs_p", "abs_t", "abs_vmrs"),
249  GOUT(),
250  GOUT_TYPE(),
251  GOUT_DESC(),
252  IN("atmosphere_dim", "p_grid", "t_field", "vmr_field"),
253  GIN(),
254  GIN_TYPE(),
255  GIN_DEFAULT(),
256  GIN_DESC()));
257 
258  md_data_raw.push_back(create_mdrecord(
259  NAME("AbsInputFromRteScalars"),
260  DESCRIPTION(
261  "Initialize absorption input WSVs from local atmospheric conditions.\n"
262  "\n"
263  "The purpose of this method is to allow an explicit line-by-line\n"
264  "calculation, e.g., by *abs_coefCalcFromXsec*, to be put inside the\n"
265  "*propmat_clearsky_agenda*. What the method does is to prepare absorption\n"
266  "input parameters (pressure, temperature, VMRs), from the input\n"
267  "parameters to *propmat_clearsky_agenda*.\n"),
268  AUTHORS("Stefan Buehler"),
269  OUT("abs_p", "abs_t", "abs_vmrs"),
270  GOUT(),
271  GOUT_TYPE(),
272  GOUT_DESC(),
273  IN("rtp_pressure", "rtp_temperature", "rtp_vmr"),
274  GIN(),
275  GIN_TYPE(),
276  GIN_DEFAULT(),
277  GIN_DESC()));
278 
279  md_data_raw.push_back(create_mdrecord(
280  NAME("abs_cia_dataAddCIARecord"),
281  DESCRIPTION(
282  "Takes CIARecord as input and appends the results in the appropriate place.\n"
283  "\n"
284  "If CIARecord has same species as species in *abs_cia_data*, then the array\n"
285  "position is used to append all of the CIARecord into the array. If clobber\n"
286  "evaluates as true, cia_record overwrites the appropriate *abs_cia_data*. If\n"
287  "species in cia_record are not in *abs_cia_data*, the CIARecord is pushed back.\n"),
288  AUTHORS("Richard Larsson"),
289  OUT("abs_cia_data"),
290  GOUT(),
291  GOUT_TYPE(),
292  GOUT_DESC(),
293  IN("abs_cia_data"),
294  GIN("cia_record", "clobber"),
295  GIN_TYPE("CIARecord", "Index"),
296  GIN_DEFAULT(NODEF, "0"),
297  GIN_DESC("CIA record to append to *abs_cia_data*.",
298  "If true, the new input clobbers the old cia data.")));
299 
300  md_data_raw.push_back(create_mdrecord(
301  NAME("abs_cia_dataReadFromCIA"),
302  DESCRIPTION(
303  "Read data from a CIA data file for all CIA molecules defined\n"
304  "in *abs_species*.\n"
305  "\n"
306  "The units in the HITRAN file are:\n"
307  "Frequency: cm^(-1)\n"
308  "Binary absorption cross-section: cm^5 molec^(-2)\n"
309  "\n"
310  "Upon reading we convert this to the ARTS internal SI units \n"
311  "of Hz and m^5 molec^(-2).\n"),
312  AUTHORS("Oliver Lemke"),
313  OUT("abs_cia_data"),
314  GOUT(),
315  GOUT_TYPE(),
316  GOUT_DESC(),
317  IN("abs_species"),
318  GIN("catalogpath"),
319  GIN_TYPE("String"),
321  GIN_DESC("Path to the CIA catalog directory.")));
322 
323  md_data_raw.push_back(create_mdrecord(
324  NAME("abs_cia_dataReadFromXML"),
325  DESCRIPTION(
326  "Read data from a CIA XML file and check that all CIA tags defined\n"
327  "in *abs_species* are present in the file.\n"
328  "\n"
329  "The units of the data are described in *abs_cia_dataReadFromCIA*.\n"),
330  AUTHORS("Oliver Lemke"),
331  OUT("abs_cia_data"),
332  GOUT(),
333  GOUT_TYPE(),
334  GOUT_DESC(),
335  IN("abs_species"),
336  GIN("filename"),
337  GIN_TYPE("String"),
338  GIN_DEFAULT(""),
339  GIN_DESC("Name of the XML file.")));
340 
341  md_data_raw.push_back(create_mdrecord(
342  NAME("abs_coefCalcFromXsec"),
343  DESCRIPTION("Calculate absorption coefficients from cross sections.\n"
344  "\n"
345  "This calculates both the total absorption and the\n"
346  "absorption per species.\n"
347  "\n"
348  "Cross sections are multiplied by n*VMR.\n"),
349  AUTHORS("Stefan Buehler", "Axel von Engeln"),
350  OUT("abs_coef",
351  "src_coef",
352  "dabs_coef_dx",
353  "dsrc_coef_dx",
354  "abs_coef_per_species",
355  "src_coef_per_species"),
356  GOUT(),
357  GOUT_TYPE(),
358  GOUT_DESC(),
359  IN("abs_xsec_per_species",
360  "src_xsec_per_species",
361  "dabs_xsec_per_species_dx",
362  "dsrc_xsec_per_species_dx",
363  "abs_species",
364  "jacobian_quantities",
365  "abs_vmrs",
366  "abs_p",
367  "abs_t"),
368  GIN(),
369  GIN_TYPE(),
370  GIN_DEFAULT(),
371  GIN_DESC()));
372 
373  md_data_raw.push_back(create_mdrecord(
374  NAME("abs_cont_descriptionAppend"),
375  DESCRIPTION(
376  "Appends the description of a continuum model or a complete absorption\n"
377  "model to *abs_cont_names* and *abs_cont_parameters*.\n"
378  "\n"
379  "See online documentation for *abs_cont_names* for a list of\n"
380  "allowed models and for information what parameters they require. See\n"
381  "file includes/continua.arts for default parameters for the various models.\n"),
382  AUTHORS("Thomas Kuhn", "Stefan Buehler"),
383  OUT("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
384  GOUT(),
385  GOUT_TYPE(),
386  GOUT_DESC(),
387  IN("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
388  GIN("tagname", "model", "userparam"),
389  GIN_TYPE("String", "String", "Vector"),
390  GIN_DEFAULT(NODEF, NODEF, "[]"),
391  GIN_DESC(
392  "The name (species tag) of a continuum model. Must match one\n"
393  "of the models implemented in ARTS.\n",
394  "A string selecting a particular continuum/full model under this\n"
395  "species tag.\n",
396  "A Vector containing the required parameters for the selected model.\n"
397  "The meaning of the parameters and how many parameters are required\n"
398  "depends on the model.\n")));
399 
400  md_data_raw.push_back(create_mdrecord(
401  NAME("abs_cont_descriptionInit"),
402  DESCRIPTION(
403  "Initializes the two workspace variables for the continuum description,\n"
404  "*abs_cont_names* and *abs_cont_parameters*.\n"
405  "\n"
406  "This method does not really do anything, except setting the two\n"
407  "variables to empty Arrays. It is just necessary because the method\n"
408  "*abs_cont_descriptionAppend* wants to append to the variables.\n"
409  "\n"
410  "Formally, the continuum description workspace variables are required\n"
411  "by the absorption calculation methods (e.g., *abs_coefCalcFromXsec*). Therefore you\n"
412  "always have to call at least *abs_cont_descriptionInit*, even if you do\n"
413  "not want to use any continua.\n"),
414  AUTHORS("Thomas Kuhn", "Stefan Buehler"),
415  OUT("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
416  GOUT(),
417  GOUT_TYPE(),
418  GOUT_DESC(),
419  IN(),
420  GIN(),
421  GIN_TYPE(),
422  GIN_DEFAULT(),
423  GIN_DESC()));
424 
425  md_data_raw.push_back(create_mdrecord(
426  NAME("abs_hitran_relmat_dataReadHitranRelmatDataAndLines"),
427  DESCRIPTION("Reads HITRAN line mixing data from a basedir\n"
428  "The basedir must point at line mixing data as provided by HITRAN.\n"
429  "The lines will be changed such that ALL CO2 lines are truncated\n"
430  "before adding the HITRAN line mixing lines.\n"
431  "\n"
432  "The available modes are such that \"VP*\" uses Voigt profiles and\n"
433  "\"SDVP*\" uses speed-dependent Voigt profiles, where the \"_Y\"\n"
434  "signifies if Rosenkranz-style line mixing is considered or not, and\n"
435  "the \"W\" at the end signifies that full calculations are used. At\n"
436  "the line mixing limit, line mixing is simply turned off.\n"
437  "\n"
438  "The \"FullW\" mode uses Lorentzian calculations with the full relaxation\n"
439  "matrix until the line mixing limit is reached and it switches to Voigt.\n"
440  "\n"
441  "The HITRAN LM data is available for download at:\n"
442  "https://hitran.org/supplementary/\n"
443  ),
444  AUTHORS("Richard Larsson"),
445  OUT("abs_hitran_relmat_data", "abs_lines_per_species"),
446  GOUT(),
447  GOUT_TYPE(),
448  GOUT_DESC(),
449  IN("abs_lines_per_species", "abs_species"),
450  GIN("basedir", "linemixinglimit", "fmin", "fmax", "stot", "mode"),
451  GIN_TYPE("String", "Numeric", "Numeric", "Numeric", "Numeric", "String"),
452  GIN_DEFAULT(NODEF, "-1", "0", "1e99", "0", "VP_W"),
453  GIN_DESC("Direcory where the linemixing data is to be found",
454  "Line mixing limit as defined by *AbsorptionLines*",
455  "Minimum frequency to read from",
456  "Maximum frequency to read until",
457  "Minimum integrated band strength to consider",
458  "Mode of calculations. The options are: \"VP\", \"VP_Y\", \"SDVP\", \"SDVP_Y\", \"FullW\", and \"VP_W\""
459  )));
460 
461  md_data_raw.push_back(create_mdrecord(
462  NAME("abs_linesCleanupEmpty"),
463  DESCRIPTION("Removes empty bands from *abs_lines*.\n"),
464  AUTHORS("Richard Larsson"),
465  OUT("abs_lines"),
466  GOUT(),
467  GOUT_TYPE(),
468  GOUT_DESC(),
469  IN("abs_lines"),
470  GIN(),
471  GIN_TYPE(),
472  GIN_DEFAULT(),
473  GIN_DESC()));
474 
475  md_data_raw.push_back(create_mdrecord(
476  NAME("abs_linesKeepBands"),
477  DESCRIPTION("Keep only *qid*-matches in *abs_lines*\n"
478  "\n"
479  "The ignore values will ignore isotopologue and/or species.\n"
480  "The latter means the isotopologue has to be ignores.\n"),
481  AUTHORS("Richard Larsson"),
482  OUT("abs_lines"),
483  GOUT(),
484  GOUT_TYPE(),
485  GOUT_DESC(),
486  IN("abs_lines"),
487  GIN("qid", "ignore_spec", "ignore_isot"),
488  GIN_TYPE("QuantumIdentifier", "Index", "Index"),
489  GIN_DEFAULT(NODEF, "1", "1"),
490  GIN_DESC("Band ID", "If species is to be ignores", "If isotopologue is to be ignored")));
491 
492  md_data_raw.push_back(create_mdrecord(
493  NAME("abs_linesRemoveBand"),
494  DESCRIPTION("Removes *qid* band from *abs_lines*\n"),
495  AUTHORS("Richard Larsson"),
496  OUT("abs_lines"),
497  GOUT(),
498  GOUT_TYPE(),
499  GOUT_DESC(),
500  IN("abs_lines"),
501  GIN("qid"),
502  GIN_TYPE("QuantumIdentifier"),
504  GIN_DESC("Band ID")));
505 
506  md_data_raw.push_back(create_mdrecord(
507  NAME("abs_linesRemoveUnusedLocalQuantumNumbers"),
508  DESCRIPTION(
509  "Removes unused quantums from local values in the line lists\n"),
510  AUTHORS("Richard Larsson"),
511  OUT("abs_lines"),
512  GOUT(),
513  GOUT_TYPE(),
514  GOUT_DESC(),
515  IN("abs_lines"),
516  GIN(),
517  GIN_TYPE(),
518  GIN_DEFAULT(),
519  GIN_DESC()));
520 
521  md_data_raw.push_back(create_mdrecord(
522  NAME("abs_linesReplaceWithLines"),
523  DESCRIPTION(
524  "Replace all lines in *abs_lines* that match with lines in replacement_lines.\n"
525  "\n"
526  "Each replacement_lines must match excatly a single line in *abs_lines*.\n"
527  "\n"
528  "The matching required identical quantum number signatures to work\n"
529  "\n"
530  "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers.\n"),
531  AUTHORS("Richard Larsson"),
532  OUT("abs_lines"),
533  GOUT(),
534  GOUT_TYPE(),
535  GOUT_DESC(),
536  IN("abs_lines"),
537  GIN("replacing_lines"),
538  GIN_TYPE("ArrayOfAbsorptionLines"),
540  GIN_DESC("Line-array that replace lines in *abs_lines*.")));
541 
542  md_data_raw.push_back(create_mdrecord(
543  NAME("abs_linesAppendWithLines"),
544  DESCRIPTION(
545  "Appends all lines in *abs_lines* that match with lines in replacement_lines if *safe*.\n"
546  "If not *safe*, appends all lines.\n"
547  "\n"
548  "No appended line is allowed to match any line in *abs_lines* if *safe*\n"
549  "\n"
550  "Conditional behavior if *safe*:\n"
551  "\tIf the AbosorptionLines to be appended match no AbsorptionLines\n"
552  "\tin *abs_lines*, then the entire AbsorptionLines is appended.\n"
553  "\tOtherwise, only a single AbsorptionLines can be matched and is not\n"
554  "\tallowed to have any internal matches\n"
555  "\n"
556  "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers\n"
557  "in *safe* mode.\n"),
558  AUTHORS("Richard Larsson"),
559  OUT("abs_lines"),
560  GOUT(),
561  GOUT_TYPE(),
562  GOUT_DESC(),
563  IN("abs_lines"),
564  GIN("appending_lines", "safe"),
565  GIN_TYPE("ArrayOfAbsorptionLines", "Index"),
566  GIN_DEFAULT(NODEF, "1"),
567  GIN_DESC("Line-array that appends lines in *abs_lines*.",
568  "Flag whether to check quantum numbers or not")));
569 
570  md_data_raw.push_back(create_mdrecord(
571  NAME("abs_linesDeleteWithLines"),
572  DESCRIPTION(
573  "Deletes all lines in *abs_lines* that match with lines in replacement_lines.\n"
574  "\n"
575  "If a deleted line has no match, then nothing happens.\n"
576  "\n"
577  "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers.\n"
578  "There is no need to have all values correct.\n"),
579  AUTHORS("Richard Larsson"),
580  OUT("abs_lines"),
581  GOUT(),
582  GOUT_TYPE(),
583  GOUT_DESC(),
584  IN("abs_lines"),
585  GIN("deleting_lines"),
586  GIN_TYPE("ArrayOfAbsorptionLines"),
588  GIN_DESC("Line-array that removes lines from *abs_lines*.")));
589 
590  md_data_raw.push_back(create_mdrecord(
591  NAME("abs_linesDeleteBadF0"),
592  DESCRIPTION(
593  "Deletes all lines in *abs_lines* that have bad central frequencies\n"
594  "\n"
595  "If lower evaluates as true, deletes all lines with a frequency below f0.\n"
596  "Otherwise deletes all lines with a frequency above f0.\n"),
597  AUTHORS("Richard Larsson"),
598  OUT("abs_lines"),
599  GOUT(),
600  GOUT_TYPE(),
601  GOUT_DESC(),
602  IN("abs_lines"),
603  GIN("f0", "lower"),
604  GIN_TYPE("Numeric", "Index"),
605  GIN_DEFAULT(NODEF, "1"),
606  GIN_DESC("Target frequency",
607  "Lower or upper flag (eval as boolean)")));
608 
609  md_data_raw.push_back(create_mdrecord(
610  NAME("abs_linesDeleteLinesWithUndefinedLocalQuanta"),
611  DESCRIPTION(
612  "Deletes all lines in *abs_lines* that have undefined local quanta\n"),
613  AUTHORS("Richard Larsson"),
614  OUT("abs_lines"),
615  GOUT(),
616  GOUT_TYPE(),
617  GOUT_DESC(),
618  IN("abs_lines"),
619  GIN(),
620  GIN_TYPE(),
621  GIN_DEFAULT(),
622  GIN_DESC()));
623 
624  md_data_raw.push_back(create_mdrecord(
625  NAME("abs_linesDeleteLinesWithBadOrHighChangingJs"),
626  DESCRIPTION("Deletes all lines in *abs_lines* that have undefined Js or Js\n"
627  "that change more than 1 between energy levels\n"),
628  AUTHORS("Richard Larsson"),
629  OUT("abs_lines"),
630  GOUT(),
631  GOUT_TYPE(),
632  GOUT_DESC(),
633  IN("abs_lines"),
634  GIN(),
635  GIN_TYPE(),
636  GIN_DEFAULT(),
637  GIN_DESC()));
638 
639  md_data_raw.push_back(create_mdrecord(
640  NAME("abs_linesDeleteLinesWithQuantumNumberAbove"),
641  DESCRIPTION("Deletes all lines in *abs_lines* that have too large quantum number\n"),
642  AUTHORS("Richard Larsson"),
643  OUT("abs_lines"),
644  GOUT(),
645  GOUT_TYPE(),
646  GOUT_DESC(),
647  IN("abs_lines"),
648  GIN("quantumnumber", "quantumnumber_value"),
649  GIN_TYPE("String", "Index"),
651  GIN_DESC("Quantum number identified", "Value")));
652 
653  md_data_raw.push_back(create_mdrecord(
654  NAME("abs_linesPrintDefinedQuantumNumbers"),
655  DESCRIPTION("Print the count of defined quantum numbers in the catalog\n"),
656  AUTHORS("Richard Larsson"),
657  OUT(),
658  GOUT(),
659  GOUT_TYPE(),
660  GOUT_DESC(),
661  IN("abs_lines"),
662  GIN(),
663  GIN_TYPE(),
664  GIN_DEFAULT(),
665  GIN_DESC()));
666 
667  md_data_raw.push_back(create_mdrecord(
668  NAME("abs_lines_per_speciesReadSplitCatalog"),
669  DESCRIPTION("Reads *abs_lines_per_species* split by\n"
670  "*abs_linesWriteSplitXML* or *abs_lines_per_speciesWriteSplitXML*\n"
671  "\n"
672  "Note that this will sort the isotopologue\n"),
673  AUTHORS("Richard Larsson"),
674  OUT("abs_lines_per_species"),
675  GOUT(),
676  GOUT_TYPE(),
677  GOUT_DESC(),
678  IN("abs_species"),
679  GIN("basename"),
680  GIN_TYPE("String"),
682  GIN_DESC("The path to the split catalog files")));
683 
684  md_data_raw.push_back(create_mdrecord(
685  NAME("abs_linesReadSpeciesSplitCatalog"),
686  DESCRIPTION("Reads a catalog of absorption lines files in a directory\n"),
687  AUTHORS("Richard Larsson"),
688  OUT("abs_lines"),
689  GOUT(),
690  GOUT_TYPE(),
691  GOUT_DESC(),
692  IN(),
693  GIN("basename", "robust"),
694  GIN_TYPE("String", "Index"),
695  GIN_DEFAULT(NODEF, "0"),
696  GIN_DESC("The path to the split catalog files",
697  "Flag to continue in case nothing is found [0 throws, 1 continues]")));
698 
699  md_data_raw.push_back(create_mdrecord(
700  NAME("abs_lines_per_speciesReadSpeciesSplitCatalog"),
701  DESCRIPTION("See *abs_lines_per_speciesReadSplitCatalog* but expects\n"
702  "a single file per species of *ArrayOfAbsorptionLines*\n"),
703  AUTHORS("Richard Larsson"),
704  OUT("abs_lines_per_species"),
705  GOUT(),
706  GOUT_TYPE(),
707  GOUT_DESC(),
708  IN("abs_species"),
709  GIN("basename", "robust"),
710  GIN_TYPE("String", "Index"),
711  GIN_DEFAULT(NODEF, "0"),
712  GIN_DESC("The path to the split catalog files",
713  "Flag to continue in case nothing is found [0 throws, 1 continues]")));
714 
715  md_data_raw.push_back(create_mdrecord(
716  NAME("abs_lines_per_speciesSetEmpty"),
717  DESCRIPTION("Empties *abs_lines_per_species* at the correct size.\n"),
718  AUTHORS("Richard Larsson"),
719  OUT("abs_lines_per_species"),
720  GOUT(),
721  GOUT_TYPE(),
722  GOUT_DESC(),
723  IN("abs_species"),
724  GIN(),
725  GIN_TYPE(),
726  GIN_DEFAULT(),
727  GIN_DESC()));
728 
729  md_data_raw.push_back(
730  create_mdrecord(NAME("abs_linesSetEmptyBroadeningParametersToEmpty"),
731  DESCRIPTION("Sets a broadening parameter to empty if it is efficiently empty\n"
732  "\n"
733  "This will not save RAM but it will save disk space (reading time),\n"
734  "and computational time by not doing unecessary calculations\n"),
735  AUTHORS("Richard Larsson"),
736  OUT("abs_lines"),
737  GOUT(),
738  GOUT_TYPE(),
739  GOUT_DESC(),
740  IN("abs_lines"),
741  GIN(),
742  GIN_TYPE(),
743  GIN_DEFAULT(),
744  GIN_DESC()));
745 
746  md_data_raw.push_back(
747  create_mdrecord(NAME("abs_linesSetNormalization"),
748  DESCRIPTION("Sets normalization type for all lines.\n"
749  "\n"
750  "Available options:\n"
751  "\t\"VVH\" \t - \t Van Vleck and Huber\n"
752  "\t\"VVW\" \t - \t Van Vleck and Weisskopf\n"
753  "\t\"RQ\" \t - \t Rosenkranz quadratic\n"
754  "\t\"None\" \t - \t No extra normalization\n"
755  "\n"
756  "See the theory guide for more details.\n"),
757  AUTHORS("Richard Larsson"),
758  OUT("abs_lines"),
759  GOUT(),
760  GOUT_TYPE(),
761  GOUT_DESC(),
762  IN("abs_lines"),
763  GIN("option"),
764  GIN_TYPE("String"),
766  GIN_DESC("Method of line normalizations")));
767 
768  md_data_raw.push_back(
769  create_mdrecord(NAME("abs_lines_per_speciesSetNormalization"),
770  DESCRIPTION("See *abs_linesSetNormalization*\n"),
771  AUTHORS("Richard Larsson"),
772  OUT("abs_lines_per_species"),
773  GOUT(),
774  GOUT_TYPE(),
775  GOUT_DESC(),
776  IN("abs_lines_per_species"),
777  GIN("option"),
778  GIN_TYPE("String"),
780  GIN_DESC("Method of line normalizations")));
781 
782  md_data_raw.push_back(
783  create_mdrecord(NAME("abs_linesSetNormalizationForMatch"),
784  DESCRIPTION("See *abs_linesSetNormalization* for options\n"
785  "\n"
786  "This function only acts on matches between the bands and input ID\n"),
787  AUTHORS("Richard Larsson"),
788  OUT("abs_lines"),
789  GOUT(),
790  GOUT_TYPE(),
791  GOUT_DESC(),
792  IN("abs_lines"),
793  GIN("option", "ID"),
794  GIN_TYPE("String", "QuantumIdentifier"),
796  GIN_DESC("Method of line normalizations",
797  "ID of one or more bands")));
798 
799  md_data_raw.push_back(
800  create_mdrecord(NAME("abs_lines_per_speciesSetNormalizationForMatch"),
801  DESCRIPTION("See *abs_linesSetNormalization* for options\n"
802  "\n"
803  "This function only acts on matches between the bands and input ID\n"),
804  AUTHORS("Richard Larsson"),
805  OUT("abs_lines_per_species"),
806  GOUT(),
807  GOUT_TYPE(),
808  GOUT_DESC(),
809  IN("abs_lines_per_species"),
810  GIN("option", "ID"),
811  GIN_TYPE("String", "QuantumIdentifier"),
813  GIN_DESC("Method of line normalizations",
814  "ID of one or more bands")));
815 
816  md_data_raw.push_back(
817  create_mdrecord(NAME("abs_lines_per_speciesSetNormalizationForSpecies"),
818  DESCRIPTION("See *abs_linesSetNormalization* but for single species\n"),
819  AUTHORS("Richard Larsson"),
820  OUT("abs_lines_per_species"),
821  GOUT(),
822  GOUT_TYPE(),
823  GOUT_DESC(),
824  IN("abs_lines_per_species", "abs_species"),
825  GIN("option", "species_tag"),
826  GIN_TYPE("String", "String"),
828  GIN_DESC("Method of line normalizations",
829  "The species tag from *abs_species* to change")));
830 
831  md_data_raw.push_back(
832  create_mdrecord(NAME("abs_linesSetMirroring"),
833  DESCRIPTION("Sets mirroring type for all lines.\n"
834  "\n"
835  "Available options:\n"
836  "\t\"None\" \t - \t No mirrored line\n"
837  "\t\"Same\" \t - \t Mirrored line broadened by line shape\n"
838  "\t\"Manual\" \t - \t Manually mirrored line (be careful; allows all frequencies)\n"
839  "\t\"Lorentz\" \t - \t Mirrored line broadened by Lorentz\n"
840  "\n"
841  "Note that mirroring is never applied for DP line shape\n"
842  "Also note that Lorentz profile is approached by most line shapes at high frequency offset.\n"
843  "Also note that Manual settings are potentially dangerous as other frequency\n"
844  "offsets might not work as hoped.\n"),
845  AUTHORS("Richard Larsson"),
846  OUT("abs_lines"),
847  GOUT(),
848  GOUT_TYPE(),
849  GOUT_DESC(),
850  IN("abs_lines"),
851  GIN("option"),
852  GIN_TYPE("String"),
854  GIN_DESC("Method of line mirroring")));
855 
856  md_data_raw.push_back(
857  create_mdrecord(NAME("abs_lines_per_speciesSetMirroring"),
858  DESCRIPTION("See *abs_linesSetMirroring*\n"),
859  AUTHORS("Richard Larsson"),
860  OUT("abs_lines_per_species"),
861  GOUT(),
862  GOUT_TYPE(),
863  GOUT_DESC(),
864  IN("abs_lines_per_species"),
865  GIN("option"),
866  GIN_TYPE("String"),
868  GIN_DESC("Method of line mirroring")));
869 
870  md_data_raw.push_back(
871  create_mdrecord(NAME("abs_linesSetMirroringForMatch"),
872  DESCRIPTION("See *abs_linesSetMirroring* for options\n"
873  "\n"
874  "This function only acts on matches between the bands and input ID\n"),
875  AUTHORS("Richard Larsson"),
876  OUT("abs_lines"),
877  GOUT(),
878  GOUT_TYPE(),
879  GOUT_DESC(),
880  IN("abs_lines"),
881  GIN("option", "ID"),
882  GIN_TYPE("String", "QuantumIdentifier"),
884  GIN_DESC("Method of line mirroring",
885  "ID of one or more bands")));
886 
887  md_data_raw.push_back(
888  create_mdrecord(NAME("abs_lines_per_speciesSetMirroringForMatch"),
889  DESCRIPTION("See *abs_linesSetMirroring* for options\n"
890  "\n"
891  "This function only acts on matches between the bands and input ID\n"),
892  AUTHORS("Richard Larsson"),
893  OUT("abs_lines_per_species"),
894  GOUT(),
895  GOUT_TYPE(),
896  GOUT_DESC(),
897  IN("abs_lines_per_species"),
898  GIN("option", "ID"),
899  GIN_TYPE("String", "QuantumIdentifier"),
901  GIN_DESC("Method of line mirroring",
902  "ID of one or more bands")));
903 
904  md_data_raw.push_back(
905  create_mdrecord(NAME("abs_lines_per_speciesSetMirroringForSpecies"),
906  DESCRIPTION("See *abs_linesSetMirroring* but for single species\n"),
907  AUTHORS("Richard Larsson"),
908  OUT("abs_lines_per_species"),
909  GOUT(),
910  GOUT_TYPE(),
911  GOUT_DESC(),
912  IN("abs_lines_per_species", "abs_species"),
913  GIN("option", "species_tag"),
914  GIN_TYPE("String", "String"),
916  GIN_DESC("Method of line mirroring",
917  "The species tag from *abs_species* to change")));
918 
919  md_data_raw.push_back(
920  create_mdrecord(NAME("abs_linesSetPopulation"),
921  DESCRIPTION("Sets population type for all lines.\n"
922  "\n"
923  "Available options:\n"
924  "\t\"LTE\" \t - \t Standard distribution by temperature\n"
925  "\t\"NLTE-VibrationalTemperatures\" \t - \t LTE but with vibrational temperatures\n"
926  "\t\"NLTE\" \t - \t Distribution is given as input\n"
927  "\n"
928  "You must have set *nlte_field* and/or its ilk to use the NLTE methods.\n"),
929  AUTHORS("Richard Larsson"),
930  OUT("abs_lines"),
931  GOUT(),
932  GOUT_TYPE(),
933  GOUT_DESC(),
934  IN("abs_lines"),
935  GIN("option"),
936  GIN_TYPE("String"),
938  GIN_DESC("Method of line population")));
939 
940  md_data_raw.push_back(
941  create_mdrecord(NAME("abs_lines_per_speciesSetPopulation"),
942  DESCRIPTION("See *abs_linesSetPopulation*\n"),
943  AUTHORS("Richard Larsson"),
944  OUT("abs_lines_per_species"),
945  GOUT(),
946  GOUT_TYPE(),
947  GOUT_DESC(),
948  IN("abs_lines_per_species"),
949  GIN("option"),
950  GIN_TYPE("String"),
952  GIN_DESC("Method of line population")));
953 
954  md_data_raw.push_back(
955  create_mdrecord(NAME("abs_linesSetPopulationForMatch"),
956  DESCRIPTION("See *abs_linesSetPopulation* for options\n"
957  "\n"
958  "This function only acts on matches between the bands and input ID\n"),
959  AUTHORS("Richard Larsson"),
960  OUT("abs_lines"),
961  GOUT(),
962  GOUT_TYPE(),
963  GOUT_DESC(),
964  IN("abs_lines"),
965  GIN("option", "ID"),
966  GIN_TYPE("String", "QuantumIdentifier"),
968  GIN_DESC("Method of line population",
969  "ID of one or more bands")));
970 
971  md_data_raw.push_back(
972  create_mdrecord(NAME("abs_lines_per_speciesSetPopulationForMatch"),
973  DESCRIPTION("See *abs_linesSetPopulation* for options\n"
974  "\n"
975  "This function only acts on matches between the bands and input ID\n"),
976  AUTHORS("Richard Larsson"),
977  OUT("abs_lines_per_species"),
978  GOUT(),
979  GOUT_TYPE(),
980  GOUT_DESC(),
981  IN("abs_lines_per_species"),
982  GIN("option", "ID"),
983  GIN_TYPE("String", "QuantumIdentifier"),
985  GIN_DESC("Method of line population",
986  "ID of one or more bands")));
987 
988  md_data_raw.push_back(
989  create_mdrecord(NAME("abs_lines_per_speciesSetPopulationForSpecies"),
990  DESCRIPTION("See *abs_linesSetPopulation* but for single species\n"),
991  AUTHORS("Richard Larsson"),
992  OUT("abs_lines_per_species"),
993  GOUT(),
994  GOUT_TYPE(),
995  GOUT_DESC(),
996  IN("abs_lines_per_species", "abs_species"),
997  GIN("option", "species_tag"),
998  GIN_TYPE("String", "String"),
1000  GIN_DESC("Method of line population",
1001  "The species tag from *abs_species* to change")));
1002 
1003  md_data_raw.push_back(
1004  create_mdrecord(NAME("abs_linesSetLineShapeType"),
1005  DESCRIPTION("Sets shape calculations type for all lines.\n"
1006  "\n"
1007  "Available options:\n"
1008  "\t\"DP\" \t - \t Doppler profile\n"
1009  "\t\"LP\" \t - \t Lorentz profile\n"
1010  "\t\"VP\" \t - \t Voigt profile\n"
1011  "\t\"SDVP\" \t - \t Speed-dependent Voigt profile\n"
1012  "\t\"HTP\" \t - \t Hartman-Tran profile\n"
1013  "\n"
1014  "See the theory guide for more details.\n"),
1015  AUTHORS("Richard Larsson"),
1016  OUT("abs_lines"),
1017  GOUT(),
1018  GOUT_TYPE(),
1019  GOUT_DESC(),
1020  IN("abs_lines"),
1021  GIN("option"),
1022  GIN_TYPE("String"),
1023  GIN_DEFAULT(NODEF),
1024  GIN_DESC("Method of line shape calculations")));
1025 
1026  md_data_raw.push_back(
1027  create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeType"),
1028  DESCRIPTION("See *abs_linesSetLineShapeType*\n"),
1029  AUTHORS("Richard Larsson"),
1030  OUT("abs_lines_per_species"),
1031  GOUT(),
1032  GOUT_TYPE(),
1033  GOUT_DESC(),
1034  IN("abs_lines_per_species"),
1035  GIN("option"),
1036  GIN_TYPE("String"),
1037  GIN_DEFAULT(NODEF),
1038  GIN_DESC("Method of line shape calculations")));
1039 
1040  md_data_raw.push_back(
1041  create_mdrecord(NAME("abs_linesSetLineShapeTypeForMatch"),
1042  DESCRIPTION("See *abs_linesSetLineShapeType* for options\n"
1043  "\n"
1044  "This function only acts on matches between the bands and input ID\n"),
1045  AUTHORS("Richard Larsson"),
1046  OUT("abs_lines"),
1047  GOUT(),
1048  GOUT_TYPE(),
1049  GOUT_DESC(),
1050  IN("abs_lines"),
1051  GIN("option", "ID"),
1052  GIN_TYPE("String", "QuantumIdentifier"),
1054  GIN_DESC("Method of line shape calculations",
1055  "ID of one or more bands")));
1056 
1057  md_data_raw.push_back(
1058  create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeTypeForMatch"),
1059  DESCRIPTION("See *abs_linesSetLineShapeType* for options\n"
1060  "\n"
1061  "This function only acts on matches between the bands and input ID\n"),
1062  AUTHORS("Richard Larsson"),
1063  OUT("abs_lines_per_species"),
1064  GOUT(),
1065  GOUT_TYPE(),
1066  GOUT_DESC(),
1067  IN("abs_lines_per_species"),
1068  GIN("option", "ID"),
1069  GIN_TYPE("String", "QuantumIdentifier"),
1071  GIN_DESC("Method of line shape calculations",
1072  "ID of one or more bands")));
1073 
1074  md_data_raw.push_back(
1075  create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeTypeForSpecies"),
1076  DESCRIPTION("See *abs_linesSetLineShapeType* but for single species\n"),
1077  AUTHORS("Richard Larsson"),
1078  OUT("abs_lines_per_species"),
1079  GOUT(),
1080  GOUT_TYPE(),
1081  GOUT_DESC(),
1082  IN("abs_lines_per_species", "abs_species"),
1083  GIN("option", "species_tag"),
1084  GIN_TYPE("String", "String"),
1086  GIN_DESC("Method of line shape calculations",
1087  "The species tag from *abs_species* to change")));
1088 
1089  md_data_raw.push_back(
1090  create_mdrecord(NAME("abs_linesSetCutoff"),
1091  DESCRIPTION("Sets cutoff type and magnitude for all lines.\n"
1092  "\n"
1093  "The line is cut off when this is active at the given frequency.\n"
1094  "The only non-zero range is from this range to its negative equivalent\n"
1095  "\n"
1096  "Available options:\n"
1097  "\t\"None\" \t - \t No cutoff\n"
1098  "\t\"ByLine\" \t - \t Cutoff relative line center, highest frequency: F0+cutoff\n"
1099  "\t\"ByBand\" \t - \t Absolute frequency, highest frequency: cutoff\n"
1100  "\n"
1101  "For \"ByLine\", the negative frequency is at F0-cutoff\n"
1102  "For \"ByBand\", the negative frequency is at cutoff minus twice the average band frequency\n"),
1103  AUTHORS("Richard Larsson"),
1104  OUT("abs_lines"),
1105  GOUT(),
1106  GOUT_TYPE(),
1107  GOUT_DESC(),
1108  IN("abs_lines"),
1109  GIN("option", "value"),
1110  GIN_TYPE("String", "Numeric"),
1112  GIN_DESC("Method of line shape calculations",
1113  "Value of cutoff")));
1114 
1115  md_data_raw.push_back(
1116  create_mdrecord(NAME("abs_lines_per_speciesSetCutoff"),
1117  DESCRIPTION("See *abs_linesSetCutoff*\n"),
1118  AUTHORS("Richard Larsson"),
1119  OUT("abs_lines_per_species"),
1120  GOUT(),
1121  GOUT_TYPE(),
1122  GOUT_DESC(),
1123  IN("abs_lines_per_species"),
1124  GIN("option", "value"),
1125  GIN_TYPE("String", "Numeric"),
1127  GIN_DESC("Method of line shape calculations",
1128  "Value of cutoff")));
1129 
1130  md_data_raw.push_back(
1131  create_mdrecord(NAME("abs_linesSetCutoffForMatch"),
1132  DESCRIPTION("See *abs_linesSetCutoff* for more options.\n"
1133  "\n"
1134  "This function only acts on matches between the bands and input ID\n"),
1135  AUTHORS("Richard Larsson"),
1136  OUT("abs_lines"),
1137  GOUT(),
1138  GOUT_TYPE(),
1139  GOUT_DESC(),
1140  IN("abs_lines"),
1141  GIN("option", "value", "ID"),
1142  GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1144  GIN_DESC("Method of line shape calculations",
1145  "Value of cutoff",
1146  "ID of one or more bands")));
1147 
1148  md_data_raw.push_back(
1149  create_mdrecord(NAME("abs_lines_per_speciesSetCutoffForMatch"),
1150  DESCRIPTION("See *abs_linesSetCutoff* for more options.\n"
1151  "\n"
1152  "This function only acts on matches between the bands and input ID\n"),
1153  AUTHORS("Richard Larsson"),
1154  OUT("abs_lines_per_species"),
1155  GOUT(),
1156  GOUT_TYPE(),
1157  GOUT_DESC(),
1158  IN("abs_lines_per_species"),
1159  GIN("option", "value", "ID"),
1160  GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1162  GIN_DESC("Method of line shape calculations",
1163  "Value of cutoff",
1164  "ID of one or more bands")));
1165 
1166  md_data_raw.push_back(
1167  create_mdrecord(NAME("abs_lines_per_speciesSetCutoffForSpecies"),
1168  DESCRIPTION("See *abs_linesSetCutoff* but for single species\n"),
1169  AUTHORS("Richard Larsson"),
1170  OUT("abs_lines_per_species"),
1171  GOUT(),
1172  GOUT_TYPE(),
1173  GOUT_DESC(),
1174  IN("abs_lines_per_species", "abs_species"),
1175  GIN("option", "value", "species_tag"),
1176  GIN_TYPE("String", "Numeric", "String"),
1178  GIN_DESC("Method of line shape calculations",
1179  "Value of cutoff",
1180  "The species tag from *abs_species* to change")));
1181 
1182  md_data_raw.push_back(
1183  create_mdrecord(NAME("abs_linesSetLinemixingLimit"),
1184  DESCRIPTION("Sets line mixing limit for all lines.\n"
1185  "\n"
1186  "If value is less than 0, no limit is applied and line mixing is active.\n"
1187  "Otherwise, line mixing is inactive if the pressure is below the limit.\n"),
1188  AUTHORS("Richard Larsson"),
1189  OUT("abs_lines"),
1190  GOUT(),
1191  GOUT_TYPE(),
1192  GOUT_DESC(),
1193  IN("abs_lines"),
1194  GIN("value"),
1195  GIN_TYPE("Numeric"),
1196  GIN_DEFAULT(NODEF),
1197  GIN_DESC("Value of limit")));
1198 
1199  md_data_raw.push_back(
1200  create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimit"),
1201  DESCRIPTION("See *abs_linesSetLinemixingLimit*\n"),
1202  AUTHORS("Richard Larsson"),
1203  OUT("abs_lines_per_species"),
1204  GOUT(),
1205  GOUT_TYPE(),
1206  GOUT_DESC(),
1207  IN("abs_lines_per_species"),
1208  GIN("value"),
1209  GIN_TYPE("Numeric"),
1210  GIN_DEFAULT(NODEF),
1211  GIN_DESC("Value of limit")));
1212 
1213  md_data_raw.push_back(
1214  create_mdrecord(NAME("abs_linesSetLinemixingLimitForMatch"),
1215  DESCRIPTION("See *abs_linesSetLinemixingLimit* for values\n"
1216  "\n"
1217  "This function only acts on matches between the bands and input ID\n"),
1218  AUTHORS("Richard Larsson"),
1219  OUT("abs_lines"),
1220  GOUT(),
1221  GOUT_TYPE(),
1222  GOUT_DESC(),
1223  IN("abs_lines"),
1224  GIN("value","ID"),
1225  GIN_TYPE("Numeric", "QuantumIdentifier"),
1227  GIN_DESC("Value of limit",
1228  "ID of one or more bands")));
1229 
1230  md_data_raw.push_back(
1231  create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimitForMatch"),
1232  DESCRIPTION("See *abs_linesSetLinemixingLimit* for values\n"
1233  "\n"
1234  "This function only acts on matches between the bands and input ID\n"),
1235  AUTHORS("Richard Larsson"),
1236  OUT("abs_lines_per_species"),
1237  GOUT(),
1238  GOUT_TYPE(),
1239  GOUT_DESC(),
1240  IN("abs_lines_per_species"),
1241  GIN("value","ID"),
1242  GIN_TYPE("Numeric", "QuantumIdentifier"),
1244  GIN_DESC("Value of limit",
1245  "ID of one or more bands")));
1246 
1247  md_data_raw.push_back(
1248  create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimitForSpecies"),
1249  DESCRIPTION("See *abs_linesSetLinemixingLimit* but for single species\n"),
1250  AUTHORS("Richard Larsson"),
1251  OUT("abs_lines_per_species"),
1252  GOUT(),
1253  GOUT_TYPE(),
1254  GOUT_DESC(),
1255  IN("abs_lines_per_species", "abs_species"),
1256  GIN("value", "species_tag"),
1257  GIN_TYPE("Numeric", "String"),
1259  GIN_DESC("Value of limit",
1260  "The species tag from *abs_species* to change")));
1261 
1262  md_data_raw.push_back(
1263  create_mdrecord(NAME("abs_linesSetT0"),
1264  DESCRIPTION("Sets reference temperature for all lines.\n"),
1265  AUTHORS("Richard Larsson"),
1266  OUT("abs_lines"),
1267  GOUT(),
1268  GOUT_TYPE(),
1269  GOUT_DESC(),
1270  IN("abs_lines"),
1271  GIN("value"),
1272  GIN_TYPE("Numeric"),
1273  GIN_DEFAULT(NODEF),
1274  GIN_DESC("Value of T0")));
1275 
1276  md_data_raw.push_back(
1277  create_mdrecord(NAME("abs_lines_per_speciesSetT0"),
1278  DESCRIPTION("See *abs_linesSetT0*\n"),
1279  AUTHORS("Richard Larsson"),
1280  OUT("abs_lines_per_species"),
1281  GOUT(),
1282  GOUT_TYPE(),
1283  GOUT_DESC(),
1284  IN("abs_lines_per_species"),
1285  GIN("value"),
1286  GIN_TYPE("Numeric"),
1287  GIN_DEFAULT(NODEF),
1288  GIN_DESC("Value of T0")));
1289 
1290  md_data_raw.push_back(
1291  create_mdrecord(NAME("abs_linesSetT0ForMatch"),
1292  DESCRIPTION("Sets reference temperature\n"
1293  "\n"
1294  "This function only acts on matches between the bands and input ID\n"),
1295  AUTHORS("Richard Larsson"),
1296  OUT("abs_lines"),
1297  GOUT(),
1298  GOUT_TYPE(),
1299  GOUT_DESC(),
1300  IN("abs_lines"),
1301  GIN("value", "ID"),
1302  GIN_TYPE("Numeric", "QuantumIdentifier"),
1304  GIN_DESC("Value of T0",
1305  "ID of one or more bands")));
1306 
1307  md_data_raw.push_back(
1308  create_mdrecord(NAME("abs_lines_per_speciesSetT0ForMatch"),
1309  DESCRIPTION("Sets reference temperature\n"
1310  "\n"
1311  "This function only acts on matches between the bands and input ID\n"),
1312  AUTHORS("Richard Larsson"),
1313  OUT("abs_lines_per_species"),
1314  GOUT(),
1315  GOUT_TYPE(),
1316  GOUT_DESC(),
1317  IN("abs_lines_per_species"),
1318  GIN("value", "ID"),
1319  GIN_TYPE("Numeric", "QuantumIdentifier"),
1321  GIN_DESC("Value of T0",
1322  "ID of one or more bands")));
1323 
1324  md_data_raw.push_back(
1325  create_mdrecord(NAME("abs_lines_per_speciesSetT0ForSpecies"),
1326  DESCRIPTION("See *abs_linesSetT0* but for single species\n"),
1327  AUTHORS("Richard Larsson"),
1328  OUT("abs_lines_per_species"),
1329  GOUT(),
1330  GOUT_TYPE(),
1331  GOUT_DESC(),
1332  IN("abs_lines_per_species", "abs_species"),
1333  GIN("value", "species_tag"),
1334  GIN_TYPE("Numeric", "String"),
1336  GIN_DESC("Value of T0",
1337  "The species tag from *abs_species* to change")));
1338 
1339  md_data_raw.push_back(
1340  create_mdrecord(NAME("abs_linesSetQuantumNumberForMatch"),
1341  DESCRIPTION("Sets a quantum number to a new value\n"
1342  "\n"
1343  "This function only acts on matches between the bands and input ID\n"),
1344  AUTHORS("Richard Larsson"),
1345  OUT("abs_lines"),
1346  GOUT(),
1347  GOUT_TYPE(),
1348  GOUT_DESC(),
1349  IN("abs_lines"),
1350  GIN("quantum_number", "value", "ID"),
1351  GIN_TYPE("String", "Rational", "QuantumIdentifier"),
1353  GIN_DESC("Quantum number key",
1354  "Value of quantum number",
1355  "ID of one or more bands")));
1356 
1357  md_data_raw.push_back(
1358  create_mdrecord(NAME("abs_lines_per_speciesSetQuantumNumberForMatch"),
1359  DESCRIPTION("See *abs_linesSetQuantumNumberForMatch*\n"),
1360  AUTHORS("Richard Larsson"),
1361  OUT("abs_lines_per_species"),
1362  GOUT(),
1363  GOUT_TYPE(),
1364  GOUT_DESC(),
1365  IN("abs_lines_per_species"),
1366  GIN("quantum_number", "value", "ID"),
1367  GIN_TYPE("String", "Rational", "QuantumIdentifier"),
1369  GIN_DESC("Quantum number key",
1370  "Value of quantum number",
1371  "ID of one or more bands")));
1372 
1373  md_data_raw.push_back(create_mdrecord(
1374  NAME("abs_linesChangeBaseParameterForMatchingLevel"),
1375  DESCRIPTION(
1376  "Change parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1377  "Only works for these parameters:\n"
1378  "parameter_name = \"Statistical Weight\"\n"
1379  "parameter_name = \"Zeeman Coefficient\"\n"),
1380  AUTHORS("Richard Larsson"),
1381  OUT("abs_lines"),
1382  GOUT(),
1383  GOUT_TYPE(),
1384  GOUT_DESC(),
1385  IN("abs_lines"),
1386  GIN("QI", "parameter_name", "change", "relative"),
1387  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1388  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1389  GIN_DESC("Information to match the level.",
1390  "Name of parameter to be replaced",
1391  "Value with which to change matching level's value",
1392  "Flag for relative change (0 is absolute change)")));
1393 
1394  md_data_raw.push_back(create_mdrecord(
1395  NAME("abs_linesChangeBaseParameterForMatchingLevels"),
1396  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1397  AUTHORS("Richard Larsson"),
1398  OUT("abs_lines"),
1399  GOUT(),
1400  GOUT_TYPE(),
1401  GOUT_DESC(),
1402  IN("abs_lines"),
1403  GIN("QI", "parameter_name", "change", "relative"),
1404  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1405  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1406  GIN_DESC("Information to match the level.",
1407  "Name of parameter to be replaced",
1408  "Value with which to change matching level's value",
1409  "Flag for relative change (0 is absolute change)")));
1410 
1411  md_data_raw.push_back(create_mdrecord(
1412  NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevel"),
1413  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1414  AUTHORS("Richard Larsson"),
1415  OUT("abs_lines_per_species"),
1416  GOUT(),
1417  GOUT_TYPE(),
1418  GOUT_DESC(),
1419  IN("abs_lines_per_species"),
1420  GIN("QI", "parameter_name", "change", "relative"),
1421  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1422  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1423  GIN_DESC("Information to match the level.",
1424  "Name of parameter to be replaced",
1425  "Value with which to change matching level's value",
1426  "Flag for relative change (0 is absolute change)")));
1427 
1428  md_data_raw.push_back(create_mdrecord(
1429  NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevels"),
1430  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1431  AUTHORS("Richard Larsson"),
1432  OUT("abs_lines_per_species"),
1433  GOUT(),
1434  GOUT_TYPE(),
1435  GOUT_DESC(),
1436  IN("abs_lines_per_species"),
1437  GIN("QI", "parameter_name", "change", "relative"),
1438  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1439  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1440  GIN_DESC("Information to match the level.",
1441  "Name of parameter to be replaced",
1442  "Value with which to change matching level's value",
1443  "Flag for relative change (0 is absolute change)")));
1444 
1445  md_data_raw.push_back(create_mdrecord(
1446  NAME("abs_linesSetBaseParameterForMatchingLevel"),
1447  DESCRIPTION(
1448  "Set parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1449  "Only works for these parameters:\n"
1450  "parameter_name = \"Statistical Weight\"\n"
1451  "parameter_name = \"Zeeman Coefficient\"\n"),
1452  AUTHORS("Richard Larsson"),
1453  OUT("abs_lines"),
1454  GOUT(),
1455  GOUT_TYPE(),
1456  GOUT_DESC(),
1457  IN("abs_lines"),
1458  GIN("QI", "parameter_name", "change"),
1459  GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1461  GIN_DESC("Information to match the level.",
1462  "Name of parameter to be replaced",
1463  "Value with which to set matching level's value")));
1464 
1465  md_data_raw.push_back(create_mdrecord(
1466  NAME("abs_linesSetBaseParameterForMatchingLevels"),
1467  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1468  AUTHORS("Richard Larsson"),
1469  OUT("abs_lines"),
1470  GOUT(),
1471  GOUT_TYPE(),
1472  GOUT_DESC(),
1473  IN("abs_lines"),
1474  GIN("QI", "parameter_name", "change"),
1475  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1477  GIN_DESC("Information to match the level.",
1478  "Name of parameter to be replaced",
1479  "Value with which to set matching level's value")));
1480 
1481  md_data_raw.push_back(create_mdrecord(
1482  NAME("abs_lines_per_speciesSetBaseParameterForMatchingLevel"),
1483  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1484  AUTHORS("Richard Larsson"),
1485  OUT("abs_lines_per_species"),
1486  GOUT(),
1487  GOUT_TYPE(),
1488  GOUT_DESC(),
1489  IN("abs_lines_per_species"),
1490  GIN("QI", "parameter_name", "change"),
1491  GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1493  GIN_DESC("Information to match the level.",
1494  "Name of parameter to be replaced",
1495  "Value with which to set matching level's value")));
1496 
1497  md_data_raw.push_back(create_mdrecord(
1498  NAME("abs_lines_per_speciesSetBaseParameterForMatchingLevels"),
1499  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1500  AUTHORS("Richard Larsson"),
1501  OUT("abs_lines_per_species"),
1502  GOUT(),
1503  GOUT_TYPE(),
1504  GOUT_DESC(),
1505  IN("abs_lines_per_species"),
1506  GIN("QI", "parameter_name", "change"),
1507  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1509  GIN_DESC("Information to match the level.",
1510  "Name of parameter to be replaced",
1511  "Value with which to set matching level's value")));
1512 
1513  md_data_raw.push_back(create_mdrecord(
1514  NAME("abs_linesChangeBaseParameterForMatchingLines"),
1515  DESCRIPTION(
1516  "Change parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1517  "Only works for these parameters:\n"
1518  "parameter_name = \"Central Frequency\"\n"
1519  "parameter_name = \"Line Strength\"\n"
1520  "parameter_name = \"Lower State Energy\"\n"
1521  "parameter_name = \"Einstein Coefficient\"\n"
1522  "parameter_name = \"Lower Statistical Weight\"\n"
1523  "parameter_name = \"Upper Statistical Weight\"\n"
1524  "parameter_name = \"Lower Zeeman Coefficient\"\n"
1525  "parameter_name = \"Upper Zeeman Coefficient\"\n"
1526  "\n"
1527  "Note that loose_matching:=0 means only identical quantum identifiers are accepted,\n"
1528  "otherwise the numbers in QI must just be contained in the line identifier\n"),
1529  AUTHORS("Richard Larsson"),
1530  OUT("abs_lines"),
1531  GOUT(),
1532  GOUT_TYPE(),
1533  GOUT_DESC(),
1534  IN("abs_lines"),
1535  GIN("QI", "parameter_name", "change", "relative", "loose_matching"),
1536  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index"),
1537  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0"),
1538  GIN_DESC("Information to match the line.",
1539  "Name of parameter to be replaced",
1540  "Value with which to change matching line's value",
1541  "Flag for relative change (0 is absolute change)",
1542  "Flag for loose match (0 means only complete matches)")));
1543 
1544  md_data_raw.push_back(create_mdrecord(
1545  NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLines"),
1546  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines*\n"),
1547  AUTHORS("Richard Larsson"),
1548  OUT("abs_lines_per_species"),
1549  GOUT(),
1550  GOUT_TYPE(),
1551  GOUT_DESC(),
1552  IN("abs_lines_per_species"),
1553  GIN("QI", "parameter_name", "change", "relative", "loose_matching"),
1554  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index"),
1555  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0"),
1556  GIN_DESC("Information to match the line.",
1557  "Name of parameter to be replaced",
1558  "Value with which to change matching line's value",
1559  "Flag for relative change (0 is absolute change)",
1560  "Flag for loose match (0 means only complete matches)")));
1561 
1562  md_data_raw.push_back(create_mdrecord(
1563  NAME("abs_lines_per_speciesChangeBaseParameterForSpecies"),
1564  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines* but for single species\n"),
1565  AUTHORS("Richard Larsson"),
1566  OUT("abs_lines_per_species"),
1567  GOUT(),
1568  GOUT_TYPE(),
1569  GOUT_DESC(),
1570  IN("abs_lines_per_species", "abs_species"),
1571  GIN("QI", "parameter_name", "change", "relative", "loose_matching", "species_tag"),
1572  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index", "String"),
1573  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0", NODEF),
1574  GIN_DESC("Information to match the line.",
1575  "Name of parameter to be replaced",
1576  "Value with which to change matching line's value",
1577  "Flag for relative change (0 is absolute change)",
1578  "Flag for loose match (0 means only complete matches)",
1579  "The species tag from *abs_species* to change")));
1580 
1581  md_data_raw.push_back(create_mdrecord(
1582  NAME("abs_linesSetBaseParameterForMatchingLines"),
1583  DESCRIPTION(
1584  "Set parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1585  "Only works for these parameters:\n"
1586  "parameter_name = \"Central Frequency\"\n"
1587  "parameter_name = \"Line Strength\"\n"
1588  "parameter_name = \"Lower State Energy\"\n"
1589  "parameter_name = \"Einstein Coefficient\"\n"
1590  "parameter_name = \"Lower Statistical Weight\"\n"
1591  "parameter_name = \"Upper Statistical Weight\"\n"
1592  "parameter_name = \"Lower Zeeman Coefficient\"\n"
1593  "parameter_name = \"Upper Zeeman Coefficient\"\n"
1594  "\n"
1595  "Note that loose_matching:=0 means only identical quantum identifiers are accepted,\n"
1596  "otherwise the numbers in QI must just be contained in the line identifier\n"),
1597  AUTHORS("Richard Larsson"),
1598  OUT("abs_lines"),
1599  GOUT(),
1600  GOUT_TYPE(),
1601  GOUT_DESC(),
1602  IN("abs_lines"),
1603  GIN("QI", "parameter_name", "change", "loose_matching"),
1604  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1605  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1606  GIN_DESC("Information to match the line.",
1607  "Name of parameter to be replaced",
1608  "Value with which to change matching line's value",
1609  "Flag for loose match (0 means only complete matches)")));
1610 
1611  md_data_raw.push_back(create_mdrecord(
1612  NAME("abs_lines_per_speciesSetBaseParameterForMatchingLines"),
1613  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLines*\n"),
1614  AUTHORS("Richard Larsson"),
1615  OUT("abs_lines_per_species"),
1616  GOUT(),
1617  GOUT_TYPE(),
1618  GOUT_DESC(),
1619  IN("abs_lines_per_species"),
1620  GIN("QI", "parameter_name", "change", "loose_matching"),
1621  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1622  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1623  GIN_DESC("Information to match the line.",
1624  "Name of parameter to be replaced",
1625  "Value with which to change matching line's value",
1626  "Flag for loose match (0 means only complete matches)")));
1627 
1628  md_data_raw.push_back(create_mdrecord(
1629  NAME("abs_lines_per_speciesSetBaseParameterForSpecies"),
1630  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLines* but for single species\n"),
1631  AUTHORS("Richard Larsson"),
1632  OUT("abs_lines_per_species"),
1633  GOUT(),
1634  GOUT_TYPE(),
1635  GOUT_DESC(),
1636  IN("abs_lines_per_species", "abs_species"),
1637  GIN("QI", "parameter_name", "change", "loose_matching", "species_tag"),
1638  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "String"),
1639  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", NODEF),
1640  GIN_DESC("Information to match the line.",
1641  "Name of parameter to be replaced",
1642  "Value with which to change matching line's value",
1643  "Flag for loose match (0 means only complete matches)",
1644  "The species tag from *abs_species* to change")));
1645 
1646  md_data_raw.push_back(create_mdrecord(
1647  NAME("abs_linesSetLineShapeModelParameterForMatchingLines"),
1648  DESCRIPTION("Sets line shape model data parameter in matching lines.\n"
1649  "\n"
1650  "The matching is done so that QI must be in the line identifier\n"
1651  "\n"
1652  "Acceptable parameter(s) are:\n"
1653  "\t\"G0\"\n"
1654  "\t\"D0\"\n"
1655  "\t\"G2\"\n"
1656  "\t\"D2\"\n"
1657  "\t\"FVC\"\n"
1658  "\t\"ETA\"\n"
1659  "\t\"Y\"\n"
1660  "\t\"G\"\n"
1661  "\t\"DV\"\n"
1662  "\n"
1663  "Acceptable coefficient(s) are:\n"
1664  "\t\"X0\"\n"
1665  "\t\"X1\"\n"
1666  "\t\"X2\"\n"
1667  "\t\"X3\"\n"
1668  "\n"
1669  "Acceptable species are:\n"
1670  "\t\"AIR\" (so long as it is the broadening species list)\n"
1671  "\t\"SELF\" (so long as it is the broadening species list)\n"
1672  "\tAny species in the line broadening species\n"
1673  "\n"
1674  "Throws an error if it cannot find any targets to change\n"
1675  ),
1676  AUTHORS("Richard Larsson"),
1677  OUT("abs_lines"),
1678  GOUT(),
1679  GOUT_TYPE(),
1680  GOUT_DESC(),
1681  IN("abs_lines"),
1682  GIN("QI", "parameter", "coefficient", "species", "change"),
1683  GIN_TYPE("QuantumIdentifier",
1684  "String",
1685  "String",
1686  "String",
1687  "Numeric"),
1689  GIN_DESC("Information to match the line.",
1690  "Name of parameter to be replaced",
1691  "Coefficient of the parameter to be changed",
1692  "Species of parameter to be changed",
1693  "Sets the value found")));
1694 
1695  md_data_raw.push_back(create_mdrecord(
1696  NAME("abs_lines_per_speciesSetLineShapeModelParameterForMatchingLines"),
1697  DESCRIPTION("See *abs_linesSetLineShapeModelParameterForMatchingLines*\n"
1698  ),
1699  AUTHORS("Richard Larsson"),
1700  OUT("abs_lines_per_species"),
1701  GOUT(),
1702  GOUT_TYPE(),
1703  GOUT_DESC(),
1704  IN("abs_lines_per_species"),
1705  GIN("QI", "parameter", "coefficient", "species", "change"),
1706  GIN_TYPE("QuantumIdentifier",
1707  "String",
1708  "String",
1709  "String",
1710  "Numeric"),
1712  GIN_DESC("Information to match the line.",
1713  "Name of parameter to be replaced",
1714  "Coefficient of the parameter to be changed",
1715  "Species of parameter to be changed",
1716  "Sets the value found")));
1717 
1718  md_data_raw.push_back(create_mdrecord(
1719  NAME("abs_lines_per_speciesSetLineShapeModelParameterForSpecies"),
1720  DESCRIPTION("See *abs_linesSetLineShapeModelParameterForMatchingLines*\n"
1721  ),
1722  AUTHORS("Richard Larsson"),
1723  OUT("abs_lines_per_species"),
1724  GOUT(),
1725  GOUT_TYPE(),
1726  GOUT_DESC(),
1727  IN("abs_lines_per_species", "abs_species"),
1728  GIN("QI", "parameter", "coefficient", "species", "change", "species_tag"),
1729  GIN_TYPE("QuantumIdentifier",
1730  "String",
1731  "String",
1732  "String",
1733  "Numeric",
1734  "String"),
1736  GIN_DESC("Information to match the line.",
1737  "Name of parameter to be replaced",
1738  "Coefficient of the parameter to be changed",
1739  "Species of parameter to be changed",
1740  "Sets the value found",
1741  "The species tag from *abs_species* to change")));
1742 
1743  md_data_raw.push_back(create_mdrecord(
1744  NAME("abs_linesSetZeemanCoefficients"),
1745  DESCRIPTION("Sets the Zeeman coefficients of the lines by user input\n"),
1746  AUTHORS("Richard Larsson"),
1747  OUT("abs_lines"),
1748  GOUT(),
1749  GOUT_TYPE(),
1750  GOUT_DESC(),
1751  IN("abs_lines"),
1752  GIN("qid", "gs"),
1753  GIN_TYPE("ArrayOfQuantumIdentifier", "Vector"),
1755  GIN_DESC("Information to match an energy level of a/many lines.",
1756  "Corresponding value to set as Zeeman coefficient")));
1757 
1758  md_data_raw.push_back(create_mdrecord(
1759  NAME("abs_lines_per_speciesSetZeemanCoefficients"),
1760  DESCRIPTION("See *abs_linesSetZeemanCoefficients*\n"),
1761  AUTHORS("Richard Larsson"),
1762  OUT("abs_lines_per_species"),
1763  GOUT(),
1764  GOUT_TYPE(),
1765  GOUT_DESC(),
1766  IN("abs_lines_per_species"),
1767  GIN("qid", "gs"),
1768  GIN_TYPE("ArrayOfQuantumIdentifier", "Vector"),
1770  GIN_DESC("Information to match an energy level of a/many lines.",
1771  "Corresponding value to set as Zeeman coefficient")));
1772 
1773  md_data_raw.push_back(create_mdrecord(
1774  NAME("abs_linesChangeLineShapeModelParameterForMatchingLines"),
1775  DESCRIPTION("Change line shape model data parameter in matching lines.\n"
1776  "\n"
1777  "The matching is done so that QI must be in the line identifier\n"
1778  "\n"
1779  "Acceptable parameter(s) are:\n"
1780  "\t\"G0\"\n"
1781  "\t\"D0\"\n"
1782  "\t\"G2\"\n"
1783  "\t\"D2\"\n"
1784  "\t\"FVC\"\n"
1785  "\t\"ETA\"\n"
1786  "\t\"Y\"\n"
1787  "\t\"G\"\n"
1788  "\t\"DV\"\n"
1789  "\n"
1790  "Acceptable coefficient(s) are:\n"
1791  "\t\"X0\"\n"
1792  "\t\"X1\"\n"
1793  "\t\"X2\"\n"
1794  "\t\"X3\"\n"
1795  "\n"
1796  "Acceptable species are:\n"
1797  "\t\"AIR\" (so long as it is the broadening species list)\n"
1798  "\t\"SELF\" (so long as it is the broadening species list)\n"
1799  "\tAny species in the line broadening species\n"
1800  "\n"
1801  "The line parameter will have its old value plus the change if\n"
1802  "relative is false, else it will have its old value times\n"
1803  "(1+change).\n"
1804  "\n"
1805  "Throws an error if it cannot find any targets to change\n"
1806  ),
1807  AUTHORS("Richard Larsson"),
1808  OUT("abs_lines"),
1809  GOUT(),
1810  GOUT_TYPE(),
1811  GOUT_DESC(),
1812  IN("abs_lines"),
1813  GIN("QI", "parameter", "coefficient", "species", "change", "relative"),
1814  GIN_TYPE("QuantumIdentifier",
1815  "String",
1816  "String",
1817  "String",
1818  "Numeric",
1819  "Index"),
1820  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "0"),
1821  GIN_DESC("Information to match the line.",
1822  "Name of parameter to be replaced",
1823  "Coefficient of the parameter to be changed",
1824  "Species of parameter to be changed",
1825  "Change in the value found",
1826  "Flag for relative change (0 is absolute change)")));
1827 
1828  md_data_raw.push_back(create_mdrecord(
1829  NAME("abs_lines_per_speciesChangeLineShapeModelParameterForMatchingLines"),
1830  DESCRIPTION("See *abs_linesChangeLineShapeModelParameterForMatchingLines*\n"
1831  ),
1832  AUTHORS("Richard Larsson"),
1833  OUT("abs_lines_per_species"),
1834  GOUT(),
1835  GOUT_TYPE(),
1836  GOUT_DESC(),
1837  IN("abs_lines_per_species"),
1838  GIN("QI", "parameter", "coefficient", "species", "change", "relative"),
1839  GIN_TYPE("QuantumIdentifier",
1840  "String",
1841  "String",
1842  "String",
1843  "Numeric",
1844  "Index"),
1845  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "0"),
1846  GIN_DESC("Information to match the line.",
1847  "Name of parameter to be replaced",
1848  "Coefficient of the parameter to be changed",
1849  "Species of parameter to be changed",
1850  "Change in the value found",
1851  "Flag for relative change (0 is absolute change)")));
1852 
1853  md_data_raw.push_back(create_mdrecord(
1854  NAME("abs_lines_per_speciesChangeLineShapeModelParameterForSpecies"),
1855  DESCRIPTION("See *abs_linesChangeLineShapeModelParameterForMatchingLines*\n"
1856  ),
1857  AUTHORS("Richard Larsson"),
1858  OUT("abs_lines_per_species"),
1859  GOUT(),
1860  GOUT_TYPE(),
1861  GOUT_DESC(),
1862  IN("abs_lines_per_species", "abs_species"),
1863  GIN("QI", "parameter", "coefficient", "species", "change", "relative", "species_tag"),
1864  GIN_TYPE("QuantumIdentifier",
1865  "String",
1866  "String",
1867  "String",
1868  "Numeric",
1869  "Index",
1870  "String"),
1872  GIN_DESC("Information to match the line.",
1873  "Name of parameter to be replaced",
1874  "Coefficient of the parameter to be changed",
1875  "Species of parameter to be changed",
1876  "Change in the value found",
1877  "Flag for relative change (0 is absolute change)",
1878  "The species tag from *abs_species* to change")));
1879 
1880  md_data_raw.push_back(create_mdrecord(
1881  NAME("abs_linesCompact"),
1882  DESCRIPTION("Removes lines that are unimportant because of their\n"
1883  "cutoff frequency range\n"),
1884  AUTHORS("Stefan Buehler", "Richard Larsson"),
1885  OUT("abs_lines"),
1886  GOUT(),
1887  GOUT_TYPE(),
1888  GOUT_DESC(),
1889  IN("abs_lines", "f_grid"),
1890  GIN(),
1891  GIN_TYPE(),
1892  GIN_DEFAULT(),
1893  GIN_DESC()));
1894 
1895  md_data_raw.push_back(create_mdrecord(
1896  NAME("abs_lines_per_speciesCompact"),
1897  DESCRIPTION("See *abs_linesCompact*\n"),
1898  AUTHORS("Stefan Buehler", "Richard Larsson"),
1899  OUT("abs_lines_per_species"),
1900  GOUT(),
1901  GOUT_TYPE(),
1902  GOUT_DESC(),
1903  IN("abs_lines_per_species", "f_grid"),
1904  GIN(),
1905  GIN_TYPE(),
1906  GIN_DEFAULT(),
1907  GIN_DESC()));
1908 
1909  md_data_raw.push_back(create_mdrecord(
1910  NAME("abs_lines_per_speciesCreateFromLines"),
1911  DESCRIPTION(
1912  "Split lines up into the different species.\n"
1913  "\n"
1914  "The order of the splitting will match the outer layer of *abs_species*\n"
1915  "There will be no respect for the internal layer of *abs_species*\n"),
1916  AUTHORS("Stefan Buehler"),
1917  OUT("abs_lines_per_species"),
1918  GOUT(),
1919  GOUT_TYPE(),
1920  GOUT_DESC(),
1921  IN("abs_lines", "abs_species"),
1922  GIN(),
1923  GIN_TYPE(),
1924  GIN_DEFAULT(),
1925  GIN_DESC()));
1926 
1927  md_data_raw.push_back(create_mdrecord(
1928  NAME("abs_lookupAdapt"),
1929  DESCRIPTION(
1930  "Adapts a gas absorption lookup table to the current calculation.\n"
1931  "\n"
1932  "The lookup table can contain more species and more frequencies than\n"
1933  "are needed for the current calculation. This method cuts down the\n"
1934  "table in memory, so that it contains just what is needed. Also, the\n"
1935  "species in the table are brought in the same order as the species in\n"
1936  "the current calculation.\n"
1937  "\n"
1938  "Of course, the method also performs quite a lot of checks on the\n"
1939  "table. If something is not ok, a runtime error is thrown.\n"
1940  "\n"
1941  "The method sets a flag *abs_lookup_is_adapted* to indicate that the\n"
1942  "table has been checked and that it is ok. Never set this by hand,\n"
1943  "always use this method to set it!\n"),
1944  AUTHORS("Stefan Buehler"),
1945  OUT("abs_lookup", "abs_lookup_is_adapted"),
1946  GOUT(),
1947  GOUT_TYPE(),
1948  GOUT_DESC(),
1949  IN("abs_lookup", "abs_species", "f_grid"),
1950  GIN(),
1951  GIN_TYPE(),
1952  GIN_DEFAULT(),
1953  GIN_DESC()));
1954 
1955  md_data_raw.push_back(create_mdrecord(
1956  NAME("abs_lookupCalc"),
1957  DESCRIPTION(
1958  "Creates a gas absorption lookup table.\n"
1959  "\n"
1960  "The lookup table stores absorption cross-sections as a function of\n"
1961  "pressure. Additionally, absorption can be stored as a function of\n"
1962  "temperature for temperature perturbations from a reference\n"
1963  "profile.\n"
1964  "\n"
1965  "Additionally, absorption can be stored as a function of water vapor\n"
1966  "VMR perturbations from a reference profile. The variable *abs_nls*\n"
1967  "specifies, for which species water vapor perturbations should be\n"
1968  "generated.\n"
1969  "\n"
1970  "Note, that the absorbing gas can be any gas, but the perturbing gas is\n"
1971  "always H2O.\n"),
1972  AUTHORS("Stefan Buehler"),
1973  OUT("abs_lookup", "abs_lookup_is_adapted"),
1974  GOUT(),
1975  GOUT_TYPE(),
1976  GOUT_DESC(),
1977  IN("abs_species",
1978  "abs_nls",
1979  "f_grid",
1980  "abs_p",
1981  "abs_vmrs",
1982  "abs_t",
1983  "abs_t_pert",
1984  "abs_nls_pert",
1985  "abs_xsec_agenda"),
1986  GIN(),
1987  GIN_TYPE(),
1988  GIN_DEFAULT(),
1989  GIN_DESC()));
1990 
1991  md_data_raw.push_back(create_mdrecord(
1992  NAME("abs_lookupInit"),
1993  DESCRIPTION(
1994  "Creates an empty gas absorption lookup table.\n"
1995  "\n"
1996  "This is mainly there to help developers. For example, you can write\n"
1997  "the empty table to an XML file, to see the file format.\n"),
1998  AUTHORS("Stefan Buehler"),
1999  OUT("abs_lookup"),
2000  GOUT(),
2001  GOUT_TYPE(),
2002  GOUT_DESC(),
2003  IN(),
2004  GIN(),
2005  GIN_TYPE(),
2006  GIN_DEFAULT(),
2007  GIN_DESC()));
2008 
2009  md_data_raw.push_back(create_mdrecord(
2010  NAME("abs_lookupSetup"),
2011  DESCRIPTION(
2012  "Set up input parameters for abs_lookupCalc.\n"
2013  "\n"
2014  "More information can be found in the documentation for method\n"
2015  "*abs_lookupSetupBatch*\n"
2016  "\n"
2017  "Max and min values of H2O and temperature are adjusted to allow for\n"
2018  "numerical perturbations in Jacobian calculation.\n"
2019  "\n"
2020  "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
2021  "are used to make sure that there are enough points in *abs_nls_pert*\n"
2022  "and *abs_t_pert* for the chosen interpolation order.\n"
2023  "\n"
2024  "Note: For homogeneous 1D cases, it can be advantageous to calculate\n"
2025  "*abs_lookup* from the 1D atmosphere, and to expand the atmosphere\n"
2026  "to 3D only after that. This particularly if nonlinear species\n"
2027  "(i.e., H2O) are involved."
2028  "\n"
2029  "See also:\n"
2030  " *abs_lookupSetupBatch*\n"),
2031  AUTHORS("Stefan Buehler"),
2032  OUT("abs_p",
2033  "abs_t",
2034  "abs_t_pert",
2035  "abs_vmrs",
2036  "abs_nls",
2037  "abs_nls_pert"),
2038  GOUT(),
2039  GOUT_TYPE(),
2040  GOUT_DESC(),
2041  IN("atmosphere_dim",
2042  "p_grid",
2043  // "lat_grid",
2044  // "lon_grid",
2045  "t_field",
2046  "vmr_field",
2047  "atmfields_checked",
2048  "abs_species",
2049  "abs_p_interp_order",
2050  "abs_t_interp_order",
2051  "abs_nls_interp_order"),
2052  GIN("p_step", "t_step", "h2o_step"),
2053  GIN_TYPE("Numeric", "Numeric", "Numeric"),
2054  GIN_DEFAULT("0.05", "100", "100"),
2055  GIN_DESC(/* p_step */
2056  "Maximum step in log10(p[Pa]). If the pressure grid is "
2057  "coarser than this, additional points are added until each "
2058  "log step is smaller than this.",
2059  /* t_step */
2060  "The temperature variation grid step in Kelvin, "
2061  "for a 2D or 3D atmosphere. For a 1D atmosphere this "
2062  "parameter is not used.",
2063  /* h2o_step */
2064  "The H2O variation grid step [fractional], if "
2065  "H2O variations are done (which is determined automatically, "
2066  "based on abs_species and the atmospheric dimension). For a "
2067  "1D atmosphere this parameter is not used.")));
2068 
2069  md_data_raw.push_back(create_mdrecord(
2070  NAME("abs_lookupSetupBatch"),
2071  DESCRIPTION(
2072  "Set up input parameters for abs_lookupCalc for batch calculations.\n"
2073  "\n"
2074  "This method performs a similar task as *abs_lookupSetup*, with the\n"
2075  "difference that the lookup table setup is not for a single\n"
2076  "atmospheric state, but for a whole batch of them, stored in\n"
2077  "*batch_atm_fields_compact*.\n"
2078  "\n"
2079  "The method checks *abs_species* to decide which species require\n"
2080  "nonlinear treatment in the lookup table.\n"
2081  "\n"
2082  "The method also checks which range of pressures, temperatures, and\n"
2083  "VMRs occurs, and sets *abs_p*, *abs_t*, *abs_t_pert*, and *abs_vmrs*\n"
2084  "accordingly.\n"
2085  "\n"
2086  "If nonlinear species are present, *abs_nls* and *abs_nls_pert* are also\n"
2087  "generated.\n"
2088  "\n"
2089  "Max and min values of H2O and temperature are adjusted to allow for\n"
2090  "numerical perturbations in Jacobian calculation.\n"
2091  "\n"
2092  "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
2093  "are used to make sure that there are enough points in *abs_nls_pert*\n"
2094  "and *abs_t_pert* for the chosen interpolation order.\n"
2095  "\n"
2096  "The method checks each given field using *atmfields_checkedCalc*.\n"
2097  "If a field does not pass the check, a run-time error is thrown.\n"
2098  "To prevent this, the parameter *robust* can be set to one: Invalid \n"
2099  "atmospheres are skipped, but the run continues. This matches the \n"
2100  "robust behaviour of *ybatchCalc*.\n"
2101  "\n"
2102  "See also:\n"
2103  " *abs_lookupSetup*\n"),
2104  AUTHORS("Stefan Buehler"),
2105  OUT("abs_p",
2106  "abs_t",
2107  "abs_t_pert",
2108  "abs_vmrs",
2109  "abs_nls",
2110  "abs_nls_pert"),
2111  GOUT(),
2112  GOUT_TYPE(),
2113  GOUT_DESC(),
2114  IN("abs_species",
2115  "batch_atm_fields_compact",
2116  "abs_p_interp_order",
2117  "abs_t_interp_order",
2118  "abs_nls_interp_order",
2119  "atmosphere_dim"),
2120  GIN("p_step",
2121  "t_step",
2122  "h2o_step",
2123  "extremes",
2124  "robust",
2125  "check_gridnames"),
2126  GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Index", "Index"),
2127  GIN_DEFAULT("0.05", "20", "100", "[]", "0", "0"),
2128  GIN_DESC(/* p_step */
2129  "Grid step in log10(p[Pa]) (base 10 logarithm).",
2130  /* t_step */
2131  "The temperature variation grid step in Kelvin. The true "
2132  "step can become finer than this, if required by the "
2133  "interpolation order.",
2134  /* h2o_step */
2135  "The H2O variation grid step [fractional], if H2O variations "
2136  "are done (which is determined automatically, based on "
2137  "abs_species and the atmospheric dimension). As for T, the true "
2138  "step can turn out finer if required by the interpolation order.",
2139  /* extremes */
2140  "You can give here explicit extreme values to add to "
2141  "abs_t_pert and abs_nls_pert. The order is [t_pert_min, "
2142  "t_pert_max, nls_pert_min, nls_pert_max].",
2143  /* robust */
2144  "A flag with value 1 or 0. If set to one, the batch\n"
2145  "setup will continue, even if individual fields are invalid.\n"
2146  "This is consistent with the behaviour of *ybatchCalc*.",
2147  /* check_gridnames */
2148  "A flag with value 1 or 0. If set to one, the gridnames of \n"
2149  " every *atm_fields_compact* are checked.")));
2150 
2151  md_data_raw.push_back(create_mdrecord(
2152  NAME("abs_lookupSetupWide"),
2153  DESCRIPTION(
2154  "Set up input parameters for abs_lookupCalc for a wide range of\n"
2155  "atmospheric conditions.\n"
2156  "\n"
2157  "This method can be used to set up parameters for a lookup table that\n"
2158  "really covers all reasonable atmospheric conditions.\n"
2159  "\n"
2160  "Reference profiles of T and H2O will be constant, so that the\n"
2161  "different dimensions in the lookup table are actually \"orthogonal\",\n"
2162  "unlike the traditional case where we have pressure dependent reference\n"
2163  "profiles. This makes the table numerically somewhat more robust then\n"
2164  "the traditional ones, and it makes it straightforward to calculate the\n"
2165  "accuracy for the different interpolations with abs_lookupTestAccuracy.\n"
2166  "\n"
2167  "You can give min an max values for the atmospheric conditions. The\n"
2168  "default values are chosen such that they cover the value range over\n"
2169  "the complete Chevallier91L data set, and a bit more. The statistics\n"
2170  "of the Chevallier91L data are:\n"
2171  "\n"
2172  "min(p) / max(p) [Pa]: 1 / 104960\n"
2173  "min(T) / max(T) [K]: 158.21 / 320.39\n"
2174  "min(H2O) / max(H2O) [VMR]: -5.52e-07 / 0.049\n"),
2175  AUTHORS("Stefan Buehler"),
2176  OUT("abs_p",
2177  "abs_t",
2178  "abs_t_pert",
2179  "abs_vmrs",
2180  "abs_nls",
2181  "abs_nls_pert"),
2182  GOUT(),
2183  GOUT_TYPE(),
2184  GOUT_DESC(),
2185  IN("abs_species",
2186  "abs_p_interp_order",
2187  "abs_t_interp_order",
2188  "abs_nls_interp_order"),
2189  GIN("p_min", "p_max", "p_step", "t_min", "t_max", "h2o_min", "h2o_max"),
2190  GIN_TYPE("Numeric",
2191  "Numeric",
2192  "Numeric",
2193  "Numeric",
2194  "Numeric",
2195  "Numeric",
2196  "Numeric"),
2197  GIN_DEFAULT("0.5", "110000", "0.05", "100", "400", "0", "0.05"),
2198  GIN_DESC("Pressure grid minimum [Pa].",
2199  "Pressure grid maximum [Pa].",
2200  "Pressure grid step in log10(p[Pa]) (base 10 logarithm).",
2201  "Temperature grid minimum [K].",
2202  "Temperature grid maximum [K].",
2203  "Humidity grid minimum [fractional].",
2204  "Humidity grid maximum [fractional].")));
2205 
2206  md_data_raw.push_back(create_mdrecord(
2207  NAME("abs_lookupTestAccuracy"),
2208  DESCRIPTION(
2209  "Test accuracy of absorption lookup table.\n"
2210  "\n"
2211  "Explicitly compare absorption from the lookup table with line-by-line\n"
2212  "calculations for strategically selected conditions (in-between the\n"
2213  "lookup table grid points).\n"
2214  "\n"
2215  "For error units see *abs_lookupTestAccMC*\n"
2216  "\n"
2217  "Produces no workspace output, only output to the output streams.\n"),
2218  AUTHORS("Stefan Buehler"),
2219  OUT(),
2220  GOUT(),
2221  GOUT_TYPE(),
2222  GOUT_DESC(),
2223  IN("abs_lookup",
2224  "abs_lookup_is_adapted",
2225  "abs_p_interp_order",
2226  "abs_t_interp_order",
2227  "abs_nls_interp_order",
2228  "abs_xsec_agenda"),
2229  GIN(),
2230  GIN_TYPE(),
2231  GIN_DEFAULT(),
2232  GIN_DESC()));
2233 
2234  md_data_raw.push_back(create_mdrecord(
2235  NAME("abs_lookupTestAccMC"),
2236  DESCRIPTION(
2237  "Test accuracy of absorption lookup table with Monte Carlo Algorithm.\n"
2238  "\n"
2239  "Explicitly compare absorption from the lookup table with line-by-line\n"
2240  "calculations for random conditions.\n"
2241  "\n"
2242  "The quantities returned are the mean value and standard deviation of\n"
2243  "the absolute value of the relative error in percent.\n"
2244  "The relative error itself is computed for a large number of cases\n"
2245  "(pressure, temperature, and H2O VMR combinations). In the frequency\n"
2246  "dimension the maximum value is taken for each case.\n"
2247  "\n"
2248  "Produces no workspace output, only output to the output streams.\n"),
2249  AUTHORS("Stefan Buehler"),
2250  OUT(),
2251  GOUT(),
2252  GOUT_TYPE(),
2253  GOUT_DESC(),
2254  IN("abs_lookup",
2255  "abs_lookup_is_adapted",
2256  "abs_p_interp_order",
2257  "abs_t_interp_order",
2258  "abs_nls_interp_order",
2259  "mc_seed",
2260  "abs_xsec_agenda"),
2261  GIN(),
2262  GIN_TYPE(),
2263  GIN_DEFAULT(),
2264  GIN_DESC()));
2265 
2266  md_data_raw.push_back(create_mdrecord(
2267  NAME("abs_nlteFromRaw"),
2268  DESCRIPTION("Sets NLTE values manually\n"
2269  "\n"
2270  "Touch\n"),
2271  AUTHORS("Richard Larsson"),
2272  OUT("abs_nlte"),
2273  GOUT(),
2274  GOUT_TYPE(),
2275  GOUT_DESC(),
2276  IN("nlte_level_identifiers",
2277  "nlte_vibrational_energies"),
2278  GIN("data"),
2279  GIN_TYPE("Matrix"),
2280  GIN_DEFAULT(NODEF),
2281  GIN_DESC("Vibrational data [nlevels, np]")));
2282 
2283  md_data_raw.push_back(create_mdrecord(
2284  NAME("abs_speciesAdd"),
2285  DESCRIPTION(
2286  "Adds species tag groups to the list of absorption species.\n"
2287  "\n"
2288  "This WSM is similar to *abs_speciesSet*, the only difference is that\n"
2289  "this method appends species to an existing list of absorption species instead\n"
2290  "of creating the whole list.\n"
2291  "\n"
2292  "See *abs_speciesSet* for details on how tags are defined and examples of\n"
2293  "how to input them in the control file.\n"),
2294  AUTHORS("Stefan Buehler"),
2295  OUT("abs_species",
2296  "propmat_clearsky_agenda_checked",
2297  "abs_xsec_agenda_checked"),
2298  GOUT(),
2299  GOUT_TYPE(),
2300  GOUT_DESC(),
2301  IN("abs_species"),
2302  GIN("species"),
2303  GIN_TYPE("ArrayOfString"),
2304  GIN_DEFAULT(NODEF),
2305  GIN_DESC("Specify one String for each tag group that you want to\n"
2306  "add. Inside the String, separate the tags by commas\n"
2307  "(plus optional blanks).\n")));
2308 
2309  md_data_raw.push_back(create_mdrecord(
2310  NAME("abs_speciesAdd2"),
2311  DESCRIPTION(
2312  "Adds a species tag group to the list of absorption species and\n"
2313  "jacobian quantities.\n"
2314  "\n"
2315  "The method is basically a combined call of *abs_speciesAdd* and\n"
2316  "*jacobianAddAbsSpecies*. In this way it is not needed to specify a\n"
2317  "tag group in two different places.\n"
2318  "\n"
2319  "Arguments exactly as for *jacobianAddAbsSpecies*. Note that this\n"
2320  "method only handles a single tag group, in contrast to\n"
2321  "*abs_speciesAdd*.\n"),
2322  AUTHORS("Patrick Eriksson"),
2323  OUT("abs_species",
2324  "jacobian_quantities",
2325  "jacobian_agenda",
2326  "propmat_clearsky_agenda_checked",
2327  "abs_xsec_agenda_checked"),
2328  GOUT(),
2329  GOUT_TYPE(),
2330  GOUT_DESC(),
2331  IN("abs_species", "atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
2332  GIN("gin1", "gin2", "gin3", "species", "unit"),
2333  GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
2334  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "vmr"),
2335  GIN_DESC("Pressure retrieval grid.",
2336  "Latitude retrieval grid.",
2337  "Longitude retreival grid.",
2338  "The species tag of the retrieval quantity.",
2339  "Retrieval unit. See above."),
2340  SETMETHOD(false),
2341  AGENDAMETHOD(false),
2342  USES_TEMPLATES(false),
2343  PASSWORKSPACE(true)));
2344 
2345  md_data_raw.push_back(create_mdrecord(
2346  NAME("abs_speciesDefineAllInScenario"),
2347  DESCRIPTION(
2348  "Define one tag group for each species known to ARTS and included in an\n"
2349  "atmospheric scenario.\n"
2350  "\n"
2351  "You can use this as an alternative to *abs_speciesSet* if you want to make an\n"
2352  "absorption calculation that is as complete as possible. The method\n"
2353  "goes through all defined species and tries to open the VMR file. If\n"
2354  "this works the tag is included, otherwise it is skipped.\n"),
2355  AUTHORS("Stefan Buehler"),
2356  OUT("abs_species",
2357  "propmat_clearsky_agenda_checked",
2358  "abs_xsec_agenda_checked"),
2359  GOUT(),
2360  GOUT_TYPE(),
2361  GOUT_DESC(),
2362  IN(),
2363  GIN("basename"),
2364  GIN_TYPE("String"),
2365  GIN_DEFAULT(NODEF),
2366  GIN_DESC(
2367  "The name and path of a particular atmospheric scenario.\n"
2368  "For example: /pool/lookup2/arts-data/atmosphere/fascod/tropical")));
2369 
2370  md_data_raw.push_back(create_mdrecord(
2371  NAME("abs_speciesDefineAll"),
2372  DESCRIPTION("Sets *abs_species*[i][0] to all species in ARTS\n"),
2373  AUTHORS("Richard Larsson"),
2374  OUT("abs_species",
2375  "propmat_clearsky_agenda_checked",
2376  "abs_xsec_agenda_checked"),
2377  GOUT(),
2378  GOUT_TYPE(),
2379  GOUT_DESC(),
2380  IN(),
2381  GIN(),
2382  GIN_TYPE(),
2383  GIN_DEFAULT(),
2384  GIN_DESC()));
2385 
2386  md_data_raw.push_back(
2387  create_mdrecord(NAME("abs_speciesInit"),
2388  DESCRIPTION("Sets *abs_species* to be empty.\n"),
2389  AUTHORS("Stefan Buehler"),
2390  OUT("abs_species"),
2391  GOUT(),
2392  GOUT_TYPE(),
2393  GOUT_DESC(),
2394  IN(),
2395  GIN(),
2396  GIN_TYPE(),
2397  GIN_DEFAULT(),
2398  GIN_DESC()));
2399 
2400  md_data_raw.push_back(create_mdrecord(
2401  NAME("abs_speciesSet"),
2402  DESCRIPTION(
2403  "Set up a list of absorption species tag groups.\n"
2404  "\n"
2405  "Workspace variables like *abs_species* contain several tag\n"
2406  "groups. Each tag group contains one or more tags. This method converts\n"
2407  "descriptions of tag groups given in the keyword to the ARTS internal\n"
2408  "representation (an *ArrayOfArrayOfSpeciesTag*). A tag group selects\n"
2409  "spectral features which belong to the same species.\n"
2410  "\n"
2411  "A tag is defined in terms of the name of the species, isotopologue, and a\n"
2412  "range of frequencies. Species are named after the standard chemical\n"
2413  "names, e.g., \"O3\". Isotopologues are given by the last digit of the atomic\n"
2414  "weight, i.g., \"O3-668\" for the asymmetric ozone molecule including an\n"
2415  "oxygen 18 atom. Groups of transitions are specified by giving a lower\n"
2416  "and upper limit of a frequency range, e.g., \"O3-666-500e9-501e9\".\n"
2417  "\n"
2418  "To turn on Zeeman calculation for a species, \"-Z\" may be appended\n"
2419  "to its name: \"O2-Z\" or \"O2-Z-66\"\n"
2420  "\n"
2421  "To turn on line mixing calculation for a species, \"-LM\" may be appended\n"
2422  "to its name (or after the Zeeman tag): \"O2-LM\" or \"O2-Z-LM-66\"\n"
2423  "\n"
2424  "The symbol \"*\" acts as a wild card. Furthermore, frequency range or\n"
2425  "frequency range and isotopologue may be omitted.\n"
2426  "\n"
2427  "Finally, instead of the isotopologue the special letter \"nl\" may be given,\n"
2428  "e.g., \"H2O-nl\". This means that no absorption at all is associated\n"
2429  "with this tag. (It is not quite clear if this feature is useful for\n"
2430  "anything right now.)\n"
2431  "\n"
2432  "Example:\n"
2433  "\n"
2434  " species = [ \"O3-666-500e9-501e9, O3-686\",\n"
2435  " \"O3\",\n"
2436  " \"H2O-PWR98\" ]\n"
2437  "\n"
2438  " The first tag group selects all O3-666 lines between 500 and\n"
2439  " 501 GHz plus all O3-686 lines. \n"
2440  "\n"
2441  " The second tag group selects all remaining O3 transitions.\n"
2442  "\n"
2443  " The third tag group selects H2O, with one of the complete\n"
2444  " absorption models (Rosenkranz 98). No spectrocopic line catalogue\n"
2445  " data will be used for that third tag group.\n"
2446  "\n"
2447  " Note that order of tag groups in the species list matters. In our\n"
2448  " example, changing the order of the first two tag group will give\n"
2449  " different results: as \"O3\" already selects all O3 transitions,\n"
2450  " no lines will remain to be selected by the\n"
2451  " \"O3-666-500e9-501e9, O3-686\" tag.\n"
2452  "\n"
2453  "For CIA species the tag consists of the two involved species and\n"
2454  "a dataset index. CIA species can be defined for multiple regions\n"
2455  "The dataset index determines which region to use from the corresponding\n"
2456  "CIARecord in *abs_cia_data*.\n"
2457  "\n"
2458  "Example\n"
2459  "\n"
2460  "species = [ \"N2-CIA-N2-0, N2-CIA-N2-1\" ]\n"
2461  "\n"
2462  "For Hitran cross section species the tag consists of the species and\n"
2463  "the tagtype HXSEC, e.g. CFC11-HXSEC. The data for the species must be\n"
2464  "available in the *hitran_xsec_data* variable."
2465  "\n"
2466  "*abs_xsec_agenda_checked* and *propmat_clearsky_agenda_checked*\n"
2467  "are set to be false.\n"),
2468  AUTHORS("Stefan Buehler"),
2469  OUT("abs_species",
2470  "abs_xsec_agenda_checked",
2471  "propmat_clearsky_agenda_checked"),
2472  GOUT(),
2473  GOUT_TYPE(),
2474  GOUT_DESC(),
2475  IN(),
2476  GIN("species"),
2477  GIN_TYPE("ArrayOfString"),
2478  GIN_DEFAULT(NODEF),
2479  GIN_DESC("Specify one String for each tag group that you want to\n"
2480  "create. Inside the String, separate the tags by commas\n"
2481  "(plus optional blanks).\n")));
2482 
2483  md_data_raw.push_back(create_mdrecord(
2484  NAME("abs_vecAddGas"),
2485  DESCRIPTION(
2486  "Add gas absorption to first element of absorption vector.\n"
2487  "\n"
2488  "The task of this method is to sum up the gas absorption of the\n"
2489  "different gas species and add the result to the first element of the\n"
2490  "absorption vector.\n"),
2491  AUTHORS("Stefan Buehler"),
2492  OUT("abs_vec"),
2493  GOUT(),
2494  GOUT_TYPE(),
2495  GOUT_DESC(),
2496  IN("abs_vec", "propmat_clearsky"),
2497  GIN(),
2498  GIN_TYPE(),
2499  GIN_DEFAULT(),
2500  GIN_DESC()));
2501 
2502  md_data_raw.push_back(create_mdrecord(
2503  NAME("abs_xsec_agenda_checkedCalc"),
2504  DESCRIPTION(
2505  "Checks if the *abs_xsec_agenda* contains all necessary\n"
2506  "methods to calculate all the species in *abs_species*.\n"
2507  "\n"
2508  "This method should be called just before the *abs_xsec_agenda*\n"
2509  "is used, e.g. *abs_lookupCalc*, *ybatchCalc*, *yCalc*\n"),
2510  AUTHORS("Oliver Lemke"),
2511  OUT("abs_xsec_agenda_checked"),
2512  GOUT(),
2513  GOUT_TYPE(),
2514  GOUT_DESC(),
2515  IN("abs_species", "abs_xsec_agenda"),
2516  GIN(),
2517  GIN_TYPE(),
2518  GIN_DEFAULT(),
2519  GIN_DESC()));
2520 
2521  md_data_raw.push_back(create_mdrecord(
2522  NAME("abs_xsec_per_speciesAddCIA"),
2523  DESCRIPTION(
2524  "Calculate absorption cross sections per tag group for HITRAN CIA continua.\n"
2525  "\n"
2526  "This interpolates the cross sections from *abs_cia_data*.\n"
2527  "\n"
2528  "The robust option is intended only for testing. Do not use for normal\n"
2529  "runs, since subsequent functions will not be able to deal with NAN values.\n"),
2530  AUTHORS("Stefan Buehler"),
2531  OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2532  GOUT(),
2533  GOUT_TYPE(),
2534  GOUT_DESC(),
2535  IN("abs_xsec_per_species",
2536  "dabs_xsec_per_species_dx",
2537  "abs_species",
2538  "jacobian_quantities",
2539  "abs_species_active",
2540  "f_grid",
2541  "abs_p",
2542  "abs_t",
2543  "abs_vmrs",
2544  "abs_cia_data"),
2545  GIN("T_extrapolfac", "robust"),
2546  GIN_TYPE("Numeric", "Index"),
2547  GIN_DEFAULT("0.5", "0"),
2548  GIN_DESC(
2549  "Temperature extrapolation factor (relative to grid spacing).",
2550  "Set to 1 to suppress runtime errors (and return NAN values instead).")));
2551 
2552  md_data_raw.push_back(create_mdrecord(
2553  NAME("abs_xsec_per_speciesAddHitranXsec"),
2554  DESCRIPTION(
2555  "Calculate absorption cross sections per tag group for HITRAN xsec species.\n"
2556  "\n"
2557  "This broadens the cross section data from *hitran_xsec_data* and\n"
2558  "interpolates it onto the current f_grid.\n"
2559  "\n"
2560  "apply_tfit turns of the temperature fit. It is only meant for testing\n"
2561  "and should alwasy be kept on for real calculations.\n"
2562  "\n"
2563  "This method depends on the FFTW-3 library.\n"),
2564  AUTHORS("Oliver Lemke"),
2565  OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2566  GOUT(),
2567  GOUT_TYPE(),
2568  GOUT_DESC(),
2569  IN("abs_xsec_per_species",
2570  "dabs_xsec_per_species_dx",
2571  "abs_species",
2572  "jacobian_quantities",
2573  "abs_species_active",
2574  "f_grid",
2575  "abs_p",
2576  "abs_t",
2577  "hitran_xsec_data"),
2578  GIN("apply_tfit", "force_p", "force_t"),
2579  GIN_TYPE("Index", "Numeric", "Numeric"),
2580  GIN_DEFAULT("1", "-1", "-1"),
2581  GIN_DESC("Apply temperature fit.",
2582  "Positive value forces constant pressure [Pa].",
2583  "Positive value forces constant temperature [K].")));
2584 
2585  md_data_raw.push_back(create_mdrecord(
2586  NAME("abs_xsec_per_speciesAddConts"),
2587  DESCRIPTION(
2588  "Calculate absorption cross sections per tag group for continua.\n"),
2589  AUTHORS("Stefan Buehler"),
2590  OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2591  GOUT(),
2592  GOUT_TYPE(),
2593  GOUT_DESC(),
2594  IN("abs_xsec_per_species",
2595  "dabs_xsec_per_species_dx",
2596  "abs_species",
2597  "jacobian_quantities",
2598  "abs_species_active",
2599  "f_grid",
2600  "abs_p",
2601  "abs_t",
2602  "abs_vmrs",
2603  "abs_cont_names",
2604  "abs_cont_parameters",
2605  "abs_cont_models"),
2606  GIN(),
2607  GIN_TYPE(),
2608  GIN_DEFAULT(),
2609  GIN_DESC()));
2610 
2611  md_data_raw.push_back(create_mdrecord(
2612  NAME("abs_xsec_per_speciesAddLines"),
2613  DESCRIPTION(
2614  "Calculates the line spectrum for both attenuation and phase\n"
2615  "for each tag group and adds it to abs_xsec_per_species.\n"),
2616  AUTHORS("Richard Larsson"),
2617  OUT("abs_xsec_per_species",
2618  "src_xsec_per_species",
2619  "dabs_xsec_per_species_dx",
2620  "dsrc_xsec_per_species_dx"),
2621  GOUT(),
2622  GOUT_TYPE(),
2623  GOUT_DESC(),
2624  IN("abs_xsec_per_species",
2625  "src_xsec_per_species",
2626  "dabs_xsec_per_species_dx",
2627  "dsrc_xsec_per_species_dx",
2628  "abs_species",
2629  "jacobian_quantities",
2630  "abs_species_active",
2631  "f_grid",
2632  "abs_p",
2633  "abs_t",
2634  "abs_nlte",
2635  "abs_vmrs",
2636  "abs_lines_per_species",
2637  "isotopologue_ratios",
2638  "partition_functions",
2639  "lbl_checked"),
2640  GIN(),
2641  GIN_TYPE(),
2642  GIN_DEFAULT(),
2643  GIN_DESC()));
2644 
2645  md_data_raw.push_back(create_mdrecord(
2646  NAME("abs_xsec_per_speciesAddPredefinedO2MPM2020"),
2647  DESCRIPTION("Reimplementation of published O2 absorption line cross-section algorithm\n"
2648  "\n"
2649  "Based on:\n"
2650  "\tDmitriy S. Makarov, Mikhail Yu. Tretyakov, Philip W. Rosenkranz, JQSRT 243, 2020,\n"
2651  "\tRevision of the 60-GHz atmospheric oxygen absorption band models for practical use,\n"
2652  "\thttps://doi.org/10.1016/j.jqsrt.2019.106798\n"
2653  "\n"
2654  "Note that this is only really applicable to Earth and at lower altitudes.\n"
2655  "The only two tested derivatives are for frequency and for temperature but\n"
2656  "other untested derivatives are available for all model parameters except a2\n"
2657  ),
2658  AUTHORS("Richard Larsson"),
2659  OUT("abs_xsec_per_species",
2660  "dabs_xsec_per_species_dx"),
2661  GOUT(),
2662  GOUT_TYPE(),
2663  GOUT_DESC(),
2664  IN("abs_xsec_per_species",
2665  "dabs_xsec_per_species_dx",
2666  "abs_species",
2667  "jacobian_quantities",
2668  "f_grid",
2669  "abs_p",
2670  "abs_t",
2671  "abs_vmrs"),
2672  GIN(),
2673  GIN_TYPE(),
2674  GIN_DEFAULT(),
2675  GIN_DESC()));
2676 
2677  md_data_raw.push_back(create_mdrecord(
2678  NAME("abs_xsec_per_speciesInit"),
2679  DESCRIPTION(
2680  "Initialize *abs_xsec_per_species*.\n"
2681  "\n"
2682  "The initialization is\n"
2683  "necessary, because methods *abs_xsec_per_speciesAddLines*\n"
2684  "and *abs_xsec_per_speciesAddConts* just add to *abs_xsec_per_species*.\n"
2685  "The size is determined from *abs_species*.\n"),
2686  AUTHORS("Stefan Buehler"),
2687  OUT("abs_xsec_per_species",
2688  "src_xsec_per_species",
2689  "dabs_xsec_per_species_dx",
2690  "dsrc_xsec_per_species_dx"),
2691  GOUT(),
2692  GOUT_TYPE(),
2693  GOUT_DESC(),
2694  IN("abs_species",
2695  "jacobian_quantities",
2696  "abs_species_active",
2697  "f_grid",
2698  "abs_p",
2699  "abs_xsec_agenda_checked",
2700  "nlte_do"),
2701  GIN(),
2702  GIN_TYPE(),
2703  GIN_DEFAULT(),
2704  GIN_DESC()));
2705 
2706  md_data_raw.push_back(create_mdrecord(
2707  NAME("AddZaAa"),
2708  DESCRIPTION(
2709  "Adds zenith and azimuth angles.\n"
2710  "\n"
2711  "Adds up line-of-sights (LOS). In short, *dlos* is added to *ref_los*,\n"
2712  "assuming that a unit changes in zenith and azimuth are equal where\n"
2713  "dlos=(0,0).\n"),
2714  AUTHORS("Patrick Eriksson"),
2715  OUT(),
2716  GOUT("new_los"),
2717  GOUT_TYPE("Matrix"),
2718  GOUT_DESC("End line-of-sights."),
2719  IN(),
2720  GIN("ref_los", "dlos"),
2721  GIN_TYPE("Vector", "Matrix"),
2723  GIN_DESC("Reference line-of-sight (a single LOS).",
2724  "Change in line-of-sight (can be multiple LOS).")));
2725 
2726  md_data_raw.push_back(create_mdrecord(
2727  NAME("AgendaAppend"),
2728  DESCRIPTION(
2729  "Append methods to an agenda.\n"
2730  "\n"
2731  "An agenda is used to store a list of methods that are meant to be\n"
2732  "executed sequentially.\n"
2733  "\n"
2734  "This method takes the methods given in the body (in the curly braces)\n"
2735  "and appends them to the agenda given by the output argument (in the round\n"
2736  "braces).\n"
2737  "\n"
2738  "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
2739  "check, whether the given methods use the right input WSVs and produce\n"
2740  "the right output WSVs.\n"),
2741  AUTHORS("Oliver Lemke"),
2742  OUT(),
2743  GOUT("out"),
2744  GOUT_TYPE("Agenda"),
2745  GOUT_DESC("Target agenda."),
2746  IN(),
2747  GIN("in"),
2748  GIN_TYPE("Agenda"),
2749  GIN_DEFAULT(NODEF),
2750  GIN_DESC("Source agenda."),
2751  SETMETHOD(false),
2752  AGENDAMETHOD(true),
2753  USES_TEMPLATES(false),
2754  PASSWORKSPACE(false),
2755  PASSWSVNAMES(true)));
2756 
2757  md_data_raw.push_back(create_mdrecord(NAME("AgendaExecute"),
2758  DESCRIPTION("Execute an agenda.\n"),
2759  AUTHORS("Oliver Lemke"),
2760  OUT(),
2761  GOUT(),
2762  GOUT_TYPE(),
2763  GOUT_DESC(),
2764  IN(),
2765  GIN("a"),
2766  GIN_TYPE("Agenda"),
2767  GIN_DEFAULT(NODEF),
2768  GIN_DESC("Agenda to be executed."),
2769  SETMETHOD(false),
2770  AGENDAMETHOD(false)));
2771 
2772  md_data_raw.push_back(create_mdrecord(
2773  NAME("AgendaExecuteExclusive"),
2774  DESCRIPTION(
2775  "Execute an agenda exclusively.\n"
2776  "\n"
2777  "Only one call to *AgendaExecuteExclusive* is executed at a time.\n"
2778  "Other calls to this function are blocked until the current one\n"
2779  "finishes. WARNING: Can cause deadlocks! Use with care.\n"),
2780  AUTHORS("Oliver Lemke"),
2781  OUT(),
2782  GOUT(),
2783  GOUT_TYPE(),
2784  GOUT_DESC(),
2785  IN(),
2786  GIN("a"),
2787  GIN_TYPE("Agenda"),
2788  GIN_DEFAULT(NODEF),
2789  GIN_DESC("Agenda to be executed."),
2790  SETMETHOD(false),
2791  AGENDAMETHOD(false)));
2792 
2793  md_data_raw.push_back(create_mdrecord(
2794  NAME("AgendaSet"),
2795  DESCRIPTION(
2796  "Set up an agenda.\n"
2797  "\n"
2798  "An agenda is used to store a list of methods that are meant to be\n"
2799  "executed sequentially.\n"
2800  "\n"
2801  "This method takes the methods given in the body (in the curly braces)\n"
2802  "and puts them in the agenda given by the output argument (in the round\n"
2803  "braces).\n"
2804  "\n"
2805  "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
2806  "check, whether the given methods use the right input WSVs and\n"
2807  "produce the right output WSVs.\n"),
2808  AUTHORS("Oliver Lemke"),
2809  OUT(),
2810  GOUT("out"),
2811  GOUT_TYPE("Agenda"),
2812  GOUT_DESC("The new agenda."),
2813  IN(),
2814  GIN(),
2815  GIN_TYPE(),
2816  GIN_DEFAULT(),
2817  GIN_DESC(),
2818  SETMETHOD(false),
2819  AGENDAMETHOD(true),
2820  USES_TEMPLATES(false),
2821  PASSWORKSPACE(false),
2822  PASSWSVNAMES(true)));
2823 
2824  md_data_raw.push_back(create_mdrecord(
2825  NAME("AngularGridsSetFluxCalc"),
2826  DESCRIPTION(
2827  "Sets the angular grids for the calculation of radiation fluxes\n"
2828  "(irradiance) per hemispheres and heating rates\n"
2829  "\n"
2830  "This method sets the angular grids for the radiation fluxes type\n"
2831  "calculations and calculates the integration weights *za_grid_weights*\n"
2832  "for the zenith angle integration. For down- und up-looking\n"
2833  "geometries it suffices to define *N_za_grid* and\n"
2834  "*N_aa_grid*. From *N_aa_grid* an equally spaced grid is\n"
2835  "created and stored in the WSV*aa_grid*.\n"
2836  "Depending on the desired *za_grid_type* *za_grid* will be\n"
2837  "equally spaced ('linear') or unequally ('linear_mu','double_gauss')\n"
2838  "Important, *N_za_grid* must be an even number because for the \n"
2839  "integration over each hemisphere *N_za_grid* / 2 zenith angles are needed.\n"
2840  "\n"
2841  "Possible zenith angle grid types are:\n"
2842  "double_gauss: The zenith grid and the integration weights are set according\n"
2843  " to a gauss-legendre integration for each hemispheres.\n"
2844  "linear: Equally space grid between 0 deg and 180 deg including the poles\n"
2845  "linear_mu: Similar to 'linear' but equally spaced for cos(180 deg) to cos(0 deg),\n"
2846  " which results a unequally spaced angular grid\n"
2847 
2848  ),
2849  AUTHORS("Manfred Brath"),
2850  OUT("za_grid", "aa_grid", "za_grid_weights"),
2851  GOUT(),
2852  GOUT_TYPE(),
2853  GOUT_DESC(),
2854  IN(),
2855  GIN("N_za_grid", "N_aa_grid", "za_grid_type"),
2856  GIN_TYPE("Index", "Index", "String"),
2857  GIN_DEFAULT("2", "1", "linear_mu"),
2858  GIN_DESC("Number of zenith angles",
2859  "Number of azimuth angles",
2860  "Zenith angle grid type")));
2861 
2862  md_data_raw.push_back(create_mdrecord(
2863  NAME("ArrayOfAgendaAppend"),
2864  DESCRIPTION("Set up an agenda and append it to the array of agendas.\n"
2865  "\n"
2866  "See *AgendaSet* for details.\n"),
2867  AUTHORS("Oliver Lemke"),
2868  OUT(),
2869  GOUT("out"),
2870  GOUT_TYPE("ArrayOfAgenda"),
2871  GOUT_DESC("The new agenda."),
2872  IN(),
2873  GIN(),
2874  GIN_TYPE(),
2875  GIN_DEFAULT(),
2876  GIN_DESC(),
2877  SETMETHOD(false),
2878  AGENDAMETHOD(true),
2879  USES_TEMPLATES(false),
2880  PASSWORKSPACE(false),
2881  PASSWSVNAMES(true)));
2882 
2883  md_data_raw.push_back(
2884  create_mdrecord(NAME("ArrayOfAgendaExecute"),
2885  DESCRIPTION("Execute an agenda from an ArrayOfAgenda.\n"),
2886  AUTHORS("Oliver Lemke"),
2887  OUT(),
2888  GOUT(),
2889  GOUT_TYPE(),
2890  GOUT_DESC(),
2891  IN("agenda_array_index"),
2892  GIN("agendas"),
2893  GIN_TYPE("ArrayOfAgenda"),
2894  GIN_DEFAULT(NODEF),
2895  GIN_DESC("Array of agendas."),
2896  SETMETHOD(false),
2897  AGENDAMETHOD(false)));
2898 
2899  md_data_raw.push_back(create_mdrecord(
2900  NAME("AntennaConstantGaussian1D"),
2901  DESCRIPTION(
2902  "Sets up a 1D gaussian antenna response and a matching\n"
2903  "*mblock_dlos_grid*.\n"
2904  "\n"
2905  "As *antenna_responseGaussian*, but also creates *mblock_dlos_grid*.\n"
2906  "For returned antenna response, see *antenna_responseGaussian*.\n"
2907  "\n"
2908  "The size of *mblock_dlos_grid* is determined by *n_za_grid*.\n"
2909  "The end points of the grid are set to be the same as for the\n"
2910  "antenna response. The spacing of the grid follows the magnitude of\n"
2911  "the response; the spacing is smaller where the response is high.\n"
2912  "More precisely, the grid points are determined by dividing\n"
2913  "the cumulative sum of the response in equal steps. This makes sense\n"
2914  "if the representation error of the radiance (as a function of\n"
2915  "zenith angle) increases linearly with the grid spacing.\n"
2916  "\n"
2917  "The WSV *antenna_dlos* is set to [0].\n"
2918  "\n"
2919  "The antenna repsonse is not normalised.\n"),
2920  AUTHORS("Patrick Eriksson"),
2921  OUT("antenna_dim",
2922  "mblock_dlos_grid",
2923  "antenna_response",
2924  "antenna_dlos"),
2925  GOUT(),
2926  GOUT_TYPE(),
2927  GOUT_DESC(),
2928  IN(),
2929  GIN("n_za_grid", "fwhm", "xwidth_si", "dx_si"),
2930  GIN_TYPE("Index", "Numeric", "Numeric", "Numeric"),
2931  GIN_DEFAULT(NODEF, NODEF, "3", "0.1"),
2932  GIN_DESC("Number of points to include in *mblock_dlos_grid*.",
2933  "Full width at half-maximum of antenna beam [deg].",
2934  "Half-width of response, in terms of std. dev.",
2935  "Grid spacing, in terms of std. dev.")));
2936 
2937  md_data_raw.push_back(create_mdrecord(
2938  NAME("AntennaMultiBeamsToPencilBeams"),
2939  DESCRIPTION(
2940  "Maps a multi-beam case to a matching pencil beam case.\n"
2941  "\n"
2942  "Cases with overlapping beams are most efficiently handled by\n"
2943  "letting *antenna_dlos* have several rows. That is, there are\n"
2944  "multiple beams for each measurement block. The drawback is that\n"
2945  "many variables must be adjusted if the corresponding pencil beam\n"
2946  "spectra shall be calculated. This method makes this adjustment.\n"
2947  "That is, if you have a control file for a multiple beam case and\n"
2948  "for some reason want to avoid the antenna weighting, you add this\n"
2949  "method before *sensor_responseInit*, and remove the call of\n"
2950  "*sensor_responseAntenna* and you will get the matching pencil beam\n"
2951  "spectra.\n"),
2952  AUTHORS("Patrick Eriksson"),
2953  OUT("sensor_pos",
2954  "sensor_los",
2955  "antenna_dlos",
2956  "antenna_dim",
2957  "mblock_dlos_grid"),
2958  GOUT(),
2959  GOUT_TYPE(),
2960  GOUT_DESC(),
2961  IN("sensor_pos",
2962  "sensor_los",
2963  "antenna_dlos",
2964  "antenna_dim",
2965  "mblock_dlos_grid",
2966  "atmosphere_dim"),
2967  GIN(),
2968  GIN_TYPE(),
2969  GIN_DEFAULT(),
2970  GIN_DESC()));
2971 
2972  md_data_raw.push_back(create_mdrecord(
2973  NAME("AntennaOff"),
2974  DESCRIPTION(
2975  "Sets some antenna related variables\n"
2976  "\n"
2977  "Use this method to set *antenna_dim* and *mblock_dlos_grid* to\n"
2978  "suitable values (1 and [0], respectively) for cases when a\n"
2979  "sensor is included, but the antenna pattern is neglected.\n"),
2980  AUTHORS("Patrick Eriksson"),
2981  OUT("antenna_dim", "mblock_dlos_grid"),
2982  GOUT(),
2983  GOUT_TYPE(),
2984  GOUT_DESC(),
2985  IN(),
2986  GIN(),
2987  GIN_TYPE(),
2988  GIN_DEFAULT(),
2989  GIN_DESC()));
2990 
2991  md_data_raw.push_back(create_mdrecord(
2992  NAME("antenna_responseGaussian"),
2993  DESCRIPTION(
2994  "Sets up a gaussian antenna response.\n"
2995  "\n"
2996  "The method assumes that the response is the same for all\n"
2997  "frequencies and polarisations, and that it can be modelled as\n"
2998  "gaussian.\n"
2999  "\n"
3000  "The grid generated is approximately\n"
3001  " si * [-xwidth_si:dx_si:xwidth_si]\n"
3002  "where si is the standard deviation corresponding to the FWHM.\n"
3003  "That is, width and spacing of the grid is specified in terms of\n"
3004  "number of standard deviations. If xwidth_si is set to 2, the\n"
3005  "response will cover about 95% the complete response. For\n"
3006  "xwidth_si=3, about 99% is covered. If xwidth_si/dx_si is not\n"
3007  "an integer, the end points of the grid are kept and the spacing\n"
3008  "of the grid is reduced (ie. spacing is equal or smaller *dx_si*).\n"
3009  "\n"
3010  "If the 2D option is selected (*do_2d*), a circular antenna is\n"
3011  "assumed and the response is any direction follows the 1D case.\n"
3012  "\n"
3013  "The antenna repsonse is not normalised.\n"),
3014  AUTHORS("Patrick Eriksson"),
3015  OUT("antenna_response"),
3016  GOUT(),
3017  GOUT_TYPE(),
3018  GOUT_DESC(),
3019  IN(),
3020  GIN("fwhm", "xwidth_si", "dx_si", "do_2d"),
3021  GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
3022  GIN_DEFAULT(NODEF, "3", "0.1", "0"),
3023  GIN_DESC("Full width at half-maximum",
3024  "Half-width of response, in terms of std. dev.",
3025  "Grid spacing, in terms of std. dev.",
3026  "Set to 1 to create a 2D antenna pattern.")));
3027 
3028  md_data_raw.push_back(create_mdrecord(
3029  NAME("antenna_responseVaryingGaussian"),
3030  DESCRIPTION(
3031  "Sets up gaussian antenna responses.\n"
3032  "\n"
3033  "Similar to *antenna_responseGaussian* but allows to set up\n"
3034  "responses that varies with frequency. That is, the method assumes\n"
3035  "that the response is the same for all polarisations, and that it\n"
3036  "can be modelled as a gaussian function varying with frequency.\n"
3037  "\n"
3038  "The full width at half maximum (FWHM in radians) is calculated as:\n"
3039  " fwhm = lambda / leff\n"
3040  "where lambda is the wavelength and *leff* is the effective size of\n"
3041  "the antenna. Normally, *leff* is smaller than the physical antenna\n"
3042  "size.\n"
3043  "\n"
3044  "Antenna responses are created for *nf* frequencies spanning the\n"
3045  "range [*fstart*,*fstop*], with a logarithmic spacing. That is, the\n"
3046  "frequency grid of the responses is taken from *VectorNLogSpace*.\n"
3047  "\n"
3048  "The responses have a common angular grid. The width, determined by\n"
3049  "*xwidth_si*, is set for the lowest frequency, while the spacing\n"
3050  "(*dx_si*) is set for the highest frequency. This ensures that both\n"
3051  "the width and spacing are equal or better than *xwidth_si* and\n"
3052  "*dx_si*, respectively, for all frequencies.\n"
3053  "\n"
3054  "If the 2D option is selected (*do_2d*), a circular antenna is\n"
3055  "assumed and the response is any direction follows the 1D case.\n"
3056  "\n"
3057  "The antenna repsonse is not normalised.\n"),
3058  AUTHORS("Patrick Eriksson"),
3059  OUT("antenna_response"),
3060  GOUT(),
3061  GOUT_TYPE(),
3062  GOUT_DESC(),
3063  IN(),
3064  GIN("leff", "xwidth_si", "dx_si", "nf", "fstart", "fstop", "do_2d"),
3065  GIN_TYPE("Numeric",
3066  "Numeric",
3067  "Numeric",
3068  "Index",
3069  "Numeric",
3070  "Numeric",
3071  "Index"),
3072  GIN_DEFAULT(NODEF, "3", "0.1", NODEF, NODEF, NODEF, "0"),
3073  GIN_DESC("Effective size of the antenna",
3074  "Half-width of response, in terms of std. dev.",
3075  "Grid spacing, in terms of std. dev.",
3076  "Number of points in frequency grid (must be >= 2)",
3077  "Start point of frequency grid",
3078  "End point of frequency grid",
3079  "Set to 1 to create a 2D antenna pattern.")));
3080 
3081  md_data_raw.push_back(create_mdrecord(
3082  NAME("Append"),
3083  DESCRIPTION(
3084  "Append one workspace variable to another.\n"
3085  "\n"
3086  "This method can append an array to another array of the same type,\n"
3087  "e.g. ArrayOfIndex to ArrayOfIndex. Or a single element to an array\n"
3088  "such as a Tensor3 to an ArrayOfTensor3.\n"
3089  "\n"
3090  "Appending two vectors or a numeric to a vector works as for array\n"
3091  "variables.\n"
3092  "\n"
3093  "Both another matrix or a vector can be appended to a matrix. In\n"
3094  "addition, for matrices, the 'append dimension' can be selected.\n"
3095  "The third argument, *dimension*, indicates how to append, where\n"
3096  "\"leading\" means to append row-wise, and \"trailing\" means\n"
3097  "column-wise.\n"
3098  "\n"
3099  "Other types (TensorX) are currently only implemented for\n"
3100  "appending to the leading dimension.\n"
3101  "\n"
3102  "This method is not implemented for all types, just for those that\n"
3103  "were thought or found to be useful. (See variable list below.).\n"),
3104  AUTHORS("Stefan Buehler, Oliver Lemke"),
3105  OUT(),
3106  GOUT("out"),
3107  GOUT_TYPE("Vector, Vector,"
3108  "Matrix, Matrix,"
3109  "Tensor3, Tensor3,"
3110  "Tensor4, Tensor4,"
3111  "String, " +
3112  ARRAY_GROUPS + ", " + ARRAY_GROUPS_WITH_BASETYPE),
3113  GOUT_DESC("The variable to append to."),
3114  IN(),
3115  GIN("in", "dimension"),
3116  GIN_TYPE("Numeric, Vector,"
3117  "Matrix, Vector,"
3118  "Matrix, Tensor3,"
3119  "Tensor3, Tensor4,"
3120  "String, " +
3121  ARRAY_GROUPS + "," + GROUPS_WITH_ARRAY_TYPE,
3122  "String"),
3123  GIN_DEFAULT(NODEF, "leading"),
3124  GIN_DESC(
3125  "The variable to append.",
3126  "Where to append. Could be either the \"leading\" or \"trailing\" dimension."),
3127  SETMETHOD(false),
3128  AGENDAMETHOD(false),
3129  USES_TEMPLATES(true),
3130  PASSWORKSPACE(false),
3131  PASSWSVNAMES(true)));
3132 
3133  md_data_raw.push_back(create_mdrecord(
3134  NAME("ArrayOfGriddedFieldGetNames"),
3135  DESCRIPTION("Get the names of all GriddedFields stored in an Array.\n"
3136  "\n"
3137  "See *GriddedFieldGetName*.\n"),
3138  AUTHORS("Lukas Kluft"),
3139  OUT(),
3140  GOUT("names"),
3141  GOUT_TYPE("ArrayOfString"),
3142  GOUT_DESC("Names of the GriddedFields in the ArrayOfGriddedField."),
3143  IN(),
3144  GIN("griddedfields"),
3145  GIN_TYPE("ArrayOfGriddedField1, ArrayOfGriddedField2,"
3146  "ArrayOfGriddedField3, ArrayOfGriddedField4"),
3147  GIN_DEFAULT(NODEF),
3148  GIN_DESC("Array of GriddedFields."),
3149  SETMETHOD(false),
3150  AGENDAMETHOD(false),
3151  USES_TEMPLATES(true)));
3152 
3153  md_data_raw.push_back(create_mdrecord(
3154  NAME("ArrayOfIndexLinSpace"),
3155  DESCRIPTION(
3156  "Initializes an ArrayOfIndex with linear spacing.\n"
3157  "\n"
3158  "The first element equals always the start value, and the spacing\n"
3159  "equals always the step value, but the last value can deviate from\n"
3160  "the stop value. *step* can be both positive and negative.\n"
3161  "\n"
3162  "The created array is [start, start+step, start+2*step, ...]\n "),
3163  AUTHORS("Oliver Lemke"),
3164  OUT(),
3165  GOUT("out"),
3166  GOUT_TYPE("ArrayOfIndex"),
3167  GOUT_DESC("Output array."),
3168  IN(),
3169  GIN("start", "stop", "step"),
3170  GIN_TYPE("Index", "Index", "Index"),
3172  GIN_DESC("Start value.",
3173  "Maximum/minimum value of the end value",
3174  "Spacing of the array.")));
3175 
3176  md_data_raw.push_back(create_mdrecord(
3177  NAME("ArrayOfIndexSet"),
3178  DESCRIPTION("Creates an ArrayOfIndex from the given list of numbers.\n"),
3179  AUTHORS("Oliver Lemke"),
3180  OUT(),
3181  GOUT("out"),
3182  GOUT_TYPE("ArrayOfIndex"),
3183  GOUT_DESC("Variable to initialize."),
3184  IN(),
3185  GIN("value"),
3186  GIN_TYPE("ArrayOfIndex"),
3187  GIN_DEFAULT(NODEF),
3188  GIN_DESC("Indexes for initializiation."),
3189  SETMETHOD(true)));
3190 
3191  md_data_raw.push_back(create_mdrecord(
3192  NAME("ArrayOfIndexSetConstant"),
3193  DESCRIPTION("Creates an ArrayOfIndex of length *nelem*, with all values\n"
3194  "identical.\n"),
3195  AUTHORS("Patrick Eriksson"),
3196  OUT(),
3197  GOUT("out"),
3198  GOUT_TYPE("ArrayOfIndex"),
3199  GOUT_DESC("Variable to initialize."),
3200  IN("nelem"),
3201  GIN("value"),
3202  GIN_TYPE("Index"),
3203  GIN_DEFAULT(NODEF),
3204  GIN_DESC("Array value.."),
3205  SETMETHOD(true)));
3206 
3207  md_data_raw.push_back(create_mdrecord(
3208  NAME("ArrayOfStringSet"),
3209  DESCRIPTION("Sets a String array according the given text.\n"
3210  "The format is text = [\"String1\",\"String2\",...]\n"),
3211  AUTHORS("Oliver Lemke"),
3212  OUT(),
3213  GOUT("out"),
3214  GOUT_TYPE("ArrayOfString"),
3215  GOUT_DESC("Variable to initialize."),
3216  IN(),
3217  GIN("value"),
3218  GIN_TYPE("ArrayOfString"),
3219  GIN_DEFAULT(NODEF),
3220  GIN_DESC("Strings for initialization."),
3221  SETMETHOD(true)));
3222 
3223  md_data_raw.push_back(create_mdrecord(
3224  NAME("Arts"),
3225  DESCRIPTION(
3226  "Runs the agenda that is specified inside the curly braces. ARTS\n"
3227  "controlfiles must define this method. It is executed automatically\n"
3228  "when ARTS is run on the controlfile and cannot be called by the user.\n"
3229  "This methods was used for Arts 1 controlfiles and is now obsolete.\n"
3230  "See *Arts2*\n"),
3231  AUTHORS("Stefan Buehler"),
3232  OUT(),
3233  GOUT(),
3234  GOUT_TYPE(),
3235  GOUT_DESC(),
3236  IN(),
3237  GIN(),
3238  GIN_TYPE(),
3239  GIN_DEFAULT(),
3240  GIN_DESC(),
3241  SETMETHOD(false),
3242  AGENDAMETHOD(true)));
3243 
3244  md_data_raw.push_back(create_mdrecord(
3245  NAME("Arts2"),
3246  DESCRIPTION(
3247  "Runs the agenda that is specified inside the curly braces. ARTS\n"
3248  "controlfiles must define this method. It is executed automatically\n"
3249  "when ARTS is run on the controlfile and cannot be called by the user.\n"),
3250  AUTHORS("Oliver Lemke"),
3251  OUT(),
3252  GOUT(),
3253  GOUT_TYPE(),
3254  GOUT_DESC(),
3255  IN(),
3256  GIN(),
3257  GIN_TYPE(),
3258  GIN_DEFAULT(),
3259  GIN_DESC(),
3260  SETMETHOD(false),
3261  AGENDAMETHOD(true)));
3262 
3263  md_data_raw.push_back(create_mdrecord(
3264  NAME("AtmFieldPerturb"),
3265  DESCRIPTION(
3266  "Adds a perturbation to an atmospheric field.\n"
3267  "\n"
3268  "The shape and position of the perturbation follow the retrieval grids.\n"
3269  "That is, the shape of the perturbation has a traingular shape, \n"
3270  "with breake points at the retrieval grid points. The position is\n"
3271  "given as an index. This index matches the column in the Jacobian\n"
3272  "for the selected grid position.\n"
3273  "\n"
3274  "If the retrieval grids fully match the atmospheric grids, you can\n"
3275  "use *AtmFieldPerturbAtmGrids*, that is faster. The description of\n"
3276  "that method can help to understand this method.\n"),
3277  AUTHORS("Patrick Eriksson"),
3278  OUT(),
3279  GOUT("perturbed_field"),
3280  GOUT_TYPE("Tensor3"),
3281  GOUT_DESC("Perturbed/modified field."),
3282  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3283  GIN("original_field",
3284  "p_ret_grid",
3285  "lat_ret_grid",
3286  "lon_ret_grid",
3287  "pert_index",
3288  "pert_size",
3289  "pert_mode"),
3290  GIN_TYPE("Tensor3",
3291  "Vector",
3292  "Vector",
3293  "Vector",
3294  "Index",
3295  "Numeric",
3296  "String"),
3297  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
3298  GIN_DESC("Original field, e.g. *t_field*.",
3299  "Pressure retrieval grid.",
3300  "Latitude retrieval grid.",
3301  "Longitude retrieval grid.",
3302  "Index of position where the perturbation shall be performed.",
3303  "Size of perturbation.",
3304  "Type of perturbation, "
3305  "absolute"
3306  " or "
3307  "relative"
3308  ".")));
3309 
3310  md_data_raw.push_back(create_mdrecord(
3311  NAME("AtmFieldPerturbAtmGrids"),
3312  DESCRIPTION(
3313  "As *AtmFieldPerturb*, but perturbation follows the atmospheric grids.\n"
3314  "\n"
3315  "The method effectively performs this\n"
3316  " perturbed_field = original_field\n"
3317  " perturbed_field(p_index,lat_index,lon_index) += pert_size\n"
3318  "if not *pert_mode* is set to "
3319  "relative"
3320  " when this is done\n"
3321  " perturbed_field = original_field\n"
3322  " perturbed_field(p_index,lat_index,lon_index) *= 1*pert_size\n"
3323  "where p_index etc. are derived from *pert_index*.\n"),
3324  AUTHORS("Patrick Eriksson"),
3325  OUT(),
3326  GOUT("perturbed_field"),
3327  GOUT_TYPE("Tensor3"),
3328  GOUT_DESC("Perturbed/modified field."),
3329  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3330  GIN("original_field", "pert_index", "pert_size", "pert_mode"),
3331  GIN_TYPE("Tensor3", "Index", "Numeric", "String"),
3332  GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
3333  GIN_DESC("Original field, e.g. *t_field*.",
3334  "Index of position where the perturbation shall be performed.",
3335  "Size of perturbation.",
3336  "Type of perturbation, "
3337  "ansolute"
3338  " or "
3339  "relative"
3340  ".")));
3341 
3342  md_data_raw.push_back(create_mdrecord(
3343  NAME("AtmFieldPRegrid"),
3344  DESCRIPTION(
3345  "Interpolates the input field along the pressure dimension from\n"
3346  "*p_grid_old* to to *p_grid_new*.\n"
3347  "\n"
3348  "Extrapolation is allowed within the common 0.5grid-step margin.\n"
3349  "in and out fields can be the same variable.\n"),
3350  AUTHORS("Jana Mendrok"),
3351  OUT(),
3352  GOUT("out"),
3353  GOUT_TYPE("Tensor3, Tensor4"),
3354  GOUT_DESC("Regridded atmospheric field."),
3355  IN(),
3356  GIN("in", "p_grid_new", "p_grid_old", "interp_order"),
3357  GIN_TYPE("Tensor3, Tensor4", "Vector", "Vector", "Index"),
3358  GIN_DEFAULT(NODEF, NODEF, NODEF, "1"),
3359  GIN_DESC("Input atmospheric field.",
3360  "Pressure grid to regrid to",
3361  "Pressure grid of input field",
3362  "Interpolation order.")));
3363 
3364  md_data_raw.push_back(create_mdrecord(
3365  NAME("AtmFieldsCalc"),
3366  DESCRIPTION(
3367  "Interpolation of raw atmospheric T, z, VMR, and NLTE T/r fields to\n"
3368  "calculation grids.\n"
3369  "\n"
3370  "An atmospheric scenario includes the following data for each\n"
3371  "position (pressure, latitude, longitude) in the atmosphere:\n"
3372  " 1. temperature field\n"
3373  " 2. the corresponding altitude field\n"
3374  " 3. vmr fields for the gaseous species\n"
3375  "This method interpolates the fields of raw data (*t_field_raw*,\n"
3376  "*z_field_raw*, *vmr_field_raw*) which can be stored on arbitrary\n"
3377  "grids to the calculation grids (*p_grid*, *lat_grid*, *lon_grid*).\n"
3378  "If *nlte_field_raw* is empty, it is assumed to be so because LTE is\n"
3379  "assumed by the user and *nlte_field* will be empty.\n"
3380  "\n"
3381  "Internally, *AtmFieldsCalc* applies *GriddedFieldPRegrid* and\n"
3382  "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
3383  "is allowed and applied. However, if *vmr_zeropadding*=1 then VMRs at\n"
3384  "*p_grid* levels exceeding the raw VMRs' pressure grid are set to 0\n"
3385  "(applying the *vmr_zeropadding* option of *GriddedFieldPRegrid*).\n"
3386  "\n"
3387  "Default is to just accept obtained VMRs. If you want to enforce\n"
3388  "that all VMR created are >= 0, set *vmr_nonegative* to 1. Negative\n"
3389  "values are then set 0. Beside being present in input data, negative\n"
3390  "VMR can be generated from the interpolation if *interp_order* is\n"
3391  "above 1.\n"),
3392  AUTHORS("Claudia Emde", "Stefan Buehler"),
3393  OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3394  GOUT(),
3395  GOUT_TYPE(),
3396  GOUT_DESC(),
3397  IN("p_grid",
3398  "lat_grid",
3399  "lon_grid",
3400  "t_field_raw",
3401  "z_field_raw",
3402  "vmr_field_raw",
3403  "nlte_field_raw",
3404  "nlte_level_identifiers",
3405  "nlte_vibrational_energies",
3406  "atmosphere_dim"),
3407  GIN("interp_order",
3408  "vmr_zeropadding",
3409  "vmr_nonegative",
3410  "nlte_when_negative"),
3411  GIN_TYPE("Index", "Index", "Index", "Index"),
3412  GIN_DEFAULT("1", "0", "0", "0"),
3413  GIN_DESC("Interpolation order (1=linear interpolation).",
3414  "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3415  "If set to 1, negative VMRs are set to 0.",
3416  "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3417 
3418  md_data_raw.push_back(create_mdrecord(
3419  NAME("AtmFieldsCalcExpand1D"),
3420  DESCRIPTION(
3421  "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
3422  "homogeneous atmospheric fields.\n"
3423  "\n"
3424  "The method works as *AtmFieldsCalc*, but accepts only raw 1D\n"
3425  "atmospheres. The raw atmosphere is interpolated to *p_grid* and\n"
3426  "the obtained values are applied for all latitudes, and also\n"
3427  "longitudes for 3D, to create a homogeneous atmosphere.\n"
3428  "\n"
3429  "The method deals only with the atmospheric fields, and to create\n"
3430  "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3431  "ellipsoid is set to be a sphere.\n"),
3432  AUTHORS("Patrick Eriksson", "Claudia Emde", "Stefan Buehler"),
3433  OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3434  GOUT(),
3435  GOUT_TYPE(),
3436  GOUT_DESC(),
3437  IN("p_grid",
3438  "lat_grid",
3439  "lon_grid",
3440  "t_field_raw",
3441  "z_field_raw",
3442  "vmr_field_raw",
3443  "nlte_field_raw",
3444  "nlte_level_identifiers",
3445  "nlte_vibrational_energies",
3446  "atmosphere_dim"),
3447  GIN("interp_order",
3448  "vmr_zeropadding",
3449  "vmr_nonegative",
3450  "nlte_when_negative"),
3451  GIN_TYPE("Index", "Index", "Index", "Index"),
3452  GIN_DEFAULT("1", "0", "0", "0"),
3453  GIN_DESC("Interpolation order (1=linear interpolation).",
3454  "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3455  "If set to 1, negative VMRs are set to 0.",
3456  "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3457 
3458  md_data_raw.push_back(create_mdrecord(
3459  NAME("AtmFieldsExpand1D"),
3460  DESCRIPTION(
3461  "Maps a 1D case to 2D or 3D homogeneous atmospheric fields.\n"
3462  "\n"
3463  "This method takes a 1D atmospheric case and converts it to the\n"
3464  "corresponding case for 2D or 3D. The atmospheric fields (t_field,\n"
3465  "z_field and vmr_field) must be 1D and match *p_grid*. The size of\n"
3466  "the new data is determined by *atmosphere_dim*, *lat_grid* and\n"
3467  "*lon_grid*. That is, these later variables have been changed since\n"
3468  "the original fields were created.\n"
3469  "\n"
3470  "The method deals only with the atmospheric fields, and to create\n"
3471  "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3472  "ellipsoid is set to be a sphere.\n"),
3473  AUTHORS("Patrick Eriksson"),
3474  OUT("t_field", "z_field", "vmr_field"),
3475  GOUT(),
3476  GOUT_TYPE(),
3477  GOUT_DESC(),
3478  IN("t_field",
3479  "z_field",
3480  "vmr_field",
3481  "p_grid",
3482  "lat_grid",
3483  "lon_grid",
3484  "atmosphere_dim"),
3485  GIN("chk_vmr_nan"),
3486  GIN_TYPE("Index"),
3487  GIN_DEFAULT("1"),
3488  GIN_DESC(
3489  "Flag to determine if a search for NaN shall be performed or not.")));
3490 
3491  md_data_raw.push_back(create_mdrecord(
3492  NAME("AtmFieldsExtract1D"),
3493  DESCRIPTION(
3494  "Converts 2D or 3D homogeneous atmospheric fields to a 1D case.\n"
3495  "\n"
3496  "The method extracts data for given latitude and longitude index\n"
3497  "to create a 1D atmosphere. *AtmosphereSet1D* is called to set\n"
3498  "output values of *atmosphere_dim*, *lat_grid* and *lon_grid*.\n"
3499  "Nothing is done if *atmosphere_dim* alöready is 1.\n"),
3500  AUTHORS("Patrick Eriksson"),
3501  OUT("atmosphere_dim",
3502  "lat_grid",
3503  "lon_grid",
3504  "t_field",
3505  "z_field",
3506  "vmr_field"),
3507  GOUT(),
3508  GOUT_TYPE(),
3509  GOUT_DESC(),
3510  IN("atmosphere_dim",
3511  "lat_grid",
3512  "lon_grid",
3513  "t_field",
3514  "z_field",
3515  "vmr_field"),
3516  GIN("ilat", "ilon"),
3517  GIN_TYPE("Index", "Index"),
3518  GIN_DEFAULT("0", "0"),
3519  GIN_DESC("Pick data having this latitude index (0-based).",
3520  "Pick data having this longitude index (0-based).")));
3521 
3522  md_data_raw.push_back(create_mdrecord(
3523  NAME("AtmFieldsRefinePgrid"),
3524  DESCRIPTION(
3525  "Refines the pressure grid and regrids the clearsky atmospheric\n"
3526  "fields accordingly.\n"
3527  "\n"
3528  "This method is, e.g., used for absorption lookup table testing. It\n"
3529  "can also be used to refine the *p_grid* and atmospheric fields from\n"
3530  "compact state atmospheres.\n"
3531  "\n"
3532  "It adds additional vertical grid points to the atmospheric fields, by\n"
3533  "interpolating them in the usual ARTS way (linear in log pressure).\n"
3534  "\n"
3535  "How fine the new grid will be is determined by the keyword parameter\n"
3536  "p_step. The definition of p_step, and the default interpolation\n"
3537  "behavior, is consistent with *abs_lookupSetup* and\n"
3538  "*abs_lookupSetupBatch* (new points are added between the original\n"
3539  "ones, so that the spacing is always below p_step.)\n"
3540  "\n"
3541  "Internally, *AtmFieldsRefinePgrid* applies *p_gridRefine* and\n"
3542  "*AtmFieldPRegrid* to the clearsky atmospheric fields (T, z, vmr).\n"
3543  "\n"
3544  "Atmospheric field related check WSV are reset to 0 (unchecked),\n"
3545  "i.e., the corresponding checkedCalc methods have to be performed\n"
3546  "(again) before *yCalc* or similar methods can be executed.\n"),
3547  AUTHORS("Stefan Buehler"),
3548  OUT("p_grid",
3549  "t_field",
3550  "z_field",
3551  "vmr_field",
3552  "atmfields_checked",
3553  "atmgeom_checked",
3554  "cloudbox_checked"),
3555  GOUT(),
3556  GOUT_TYPE(),
3557  GOUT_DESC(),
3558  IN("p_grid",
3559  "lat_grid",
3560  "lon_grid",
3561  "t_field",
3562  "z_field",
3563  "vmr_field",
3564  "atmosphere_dim"),
3565  GIN("p_step", "interp_order"),
3566  GIN_TYPE("Numeric", "Index"),
3567  GIN_DEFAULT(NODEF, "1"),
3568  GIN_DESC("Maximum step in log(p[Pa]) (natural logarithm, as always). If\n"
3569  "the pressure grid is coarser than this, additional points\n"
3570  "are added until each log step is smaller than this.\n",
3571  "Interpolation order.")));
3572 
3573  md_data_raw.push_back(create_mdrecord(
3574  NAME("AtmFieldsAndParticleBulkPropFieldFromCompact"),
3575  DESCRIPTION(
3576  "Extract pressure grid and atmospheric fields from\n"
3577  "*atm_fields_compact*.\n"
3578  "\n"
3579  "An atmospheric scenario includes the following data for each\n"
3580  "position (pressure, latitude, longitude) in the atmosphere:\n"
3581  " 1. temperature field\n"
3582  " 2. the corresponding altitude field\n"
3583  " 3. vmr fields for the gaseous species\n"
3584  " 4. scattering species fields\n"
3585  "\n"
3586  "This method splits up the data found in *atm_fields_compact* to\n"
3587  "p_grid, lat_grid, lon_grid, vmr_field, particle_bulkprop_field,\n"
3588  "and particle_bulkprop_names.\n"
3589  "See documentation of *atm_fields_compact* for a definition of the\n"
3590  "data.\n"
3591  "\n"
3592  "Compact states are characterized by having all atmospheric fields\n"
3593  "already given on identical grids. That is, no interpolation needs\n"
3594  "to be and is performed. Keyword *p_min* allows to remove atmospheric\n"
3595  "levels with pressures lower than the given value (default: no\n"
3596  "removal). This reduces computational burden and is useful when\n"
3597  "upper atmospheric contributions are negligible.\n"
3598  "\n"
3599  "Possible future extensions: Add a keyword parameter to refine the\n"
3600  "pressure grid if it is too coarse. Or a version that interpolates\n"
3601  "onto given grids, instead of using and returning the original grids.\n"),
3602  AUTHORS("Jana Mendrok, Manfred Brath"),
3603  OUT("p_grid",
3604  "lat_grid",
3605  "lon_grid",
3606  "t_field",
3607  "z_field",
3608  "vmr_field",
3609  "particle_bulkprop_field",
3610  "particle_bulkprop_names"),
3611  GOUT(),
3612  GOUT_TYPE(),
3613  GOUT_DESC(),
3614  IN("abs_species", "atm_fields_compact", "atmosphere_dim"),
3615  GIN("delim", "p_min", "check_gridnames"),
3616  GIN_TYPE("String", "Numeric", "Index"),
3617  GIN_DEFAULT("-", "0", "0"),
3618  GIN_DESC(/* delim */
3619  "Delimiter string of *scat_species* elements.",
3620  /* p_min */
3621  "Minimum-pressure level to consider (for TOA).",
3622  /* check_gridnames */
3623  "A flag with value 1 or 0. If set to one, the gridnames of \n"
3624  " the *atm_fields_compact* are checked.")));
3625 
3626  md_data_raw.push_back(create_mdrecord(
3627  NAME("atmfields_checkedCalc"),
3628  DESCRIPTION(
3629  "Checks consistency of (clear sky) atmospheric fields.\n"
3630  "\n"
3631  "The following WSVs are treated: *p_grid*, *lat_grid*, *lon_grid*,\n"
3632  "*t_field*, *vmr_field*, wind_u/v/w_field and mag_u/v/w_field.\n"
3633  "\n"
3634  "If any of the variables above is changed, then this method shall be\n"
3635  "called again (no automatic check that this is fulfilled!).\n"
3636  "\n"
3637  "The tests include that:\n"
3638  " 1. Atmospheric grids (p/lat/lon_grid) are OK with respect to\n"
3639  " *atmosphere_dim* (and vmr_field also regarding *abs_species*).\n"
3640  " 2. Atmospheric fields have sizes consistent with the atmospheric\n"
3641  " grids.\n"
3642  " 3. *abs_f_interp_order* is not zero if any wind is nonzero.\n"
3643  " 4. All values in *t_field* are > 0.\n"
3644  "\n"
3645  "Default is that values in *vmr_field* are demanded to be >= 0\n"
3646  "(ie. zero allowed, in contrast to *t_field*), but this\n"
3647  "requirement can be removed by the *negative_vmr_ok* argument.\n"
3648  "\n"
3649  "If any test fails, there is an error. Otherwise,\n"
3650  "*atmfields_checked* is set to 1.\n"
3651  "\n"
3652  "The cloudbox is covered by *cloudbox_checked*, *z_field* is\n"
3653  "part of the checks done around *atmgeom_checked*.\n"
3654  "\n"
3655  "If you choose to use *bad_partition_functions_ok* please note that\n"
3656  "this is done on your own risk and that it could introduce hard-to-\n"
3657  "track errors into your calculations. Do not use this for anything\n"
3658  "important.\n"),
3659  AUTHORS("Patrick Eriksson"),
3660  OUT("atmfields_checked"),
3661  GOUT(),
3662  GOUT_TYPE(),
3663  GOUT_DESC(),
3664  IN("atmosphere_dim",
3665  "p_grid",
3666  "lat_grid",
3667  "lon_grid",
3668  "abs_species",
3669  "t_field",
3670  "vmr_field",
3671  "wind_u_field",
3672  "wind_v_field",
3673  "wind_w_field",
3674  "mag_u_field",
3675  "mag_v_field",
3676  "mag_w_field",
3677  "partition_functions",
3678  "abs_f_interp_order"),
3679  GIN("negative_vmr_ok", "bad_partition_functions_ok"),
3680  GIN_TYPE("Index", "Index"),
3681  GIN_DEFAULT("0", "0"),
3682  GIN_DESC("Flag whether to accept vmr_field < 0.",
3683  "Flag whether to accept partition functions not covering"
3684  " *t_field* range.")));
3685 
3686  md_data_raw.push_back(create_mdrecord(
3687  NAME("atmgeom_checkedCalc"),
3688  DESCRIPTION(
3689  "Checks consistency of geometric considerations of the atmosphere.\n"
3690  "\n"
3691  "The following WSVs are checked: *z_field*, *refellipsoid*, *z_surface*,\n"
3692  "*lat_true* and *lon_true*. If any of the variables above is changed,\n"
3693  "then this method shall be called again (no automatic check that this is\n"
3694  "fulfilled!).\n"
3695  "\n"
3696  "The tests include that:\n"
3697  " 1. *refellipsoid* has correct size, and that eccentricity is\n"
3698  " set to zero if 1D atmosphere.\n"
3699  " 2. *z_field* and *z_surface* have sizes consistent with the\n"
3700  " atmospheric grids.\n"
3701  " 3. There is no gap between *z_surface* and *z_field*.\n"
3702  "\n"
3703  "*lat_true* and *lon_true* are allowed to be empty.\n"
3704  "\n"
3705  "If any test fails, there is an error. Otherwise, *atmgeom_checked*\n"
3706  "is set to 1.\n"
3707  "\n"
3708  "See further *atmgeom_checkedCalc*.\n"),
3709  AUTHORS("Patrick Eriksson"),
3710  OUT("atmgeom_checked"),
3711  GOUT(),
3712  GOUT_TYPE(),
3713  GOUT_DESC(),
3714  IN("atmosphere_dim",
3715  "p_grid",
3716  "lat_grid",
3717  "lon_grid",
3718  "z_field",
3719  "refellipsoid",
3720  "z_surface",
3721  "lat_true",
3722  "lon_true"),
3723  GIN(),
3724  GIN_TYPE(),
3725  GIN_DEFAULT(),
3726  GIN_DESC()));
3727 
3728  md_data_raw.push_back(create_mdrecord(
3729  NAME("AtmosphereSet1D"),
3730  DESCRIPTION(
3731  "Sets the atmospheric dimension to 1D.\n"
3732  "\n"
3733  "Sets *atmosphere_dim* to 1, and the latitude and longitude grids\n"
3734  "are set to be empty.\n"),
3735  AUTHORS("Patrick Eriksson"),
3736  OUT("atmosphere_dim", "lat_grid", "lon_grid"),
3737  GOUT(),
3738  GOUT_TYPE(),
3739  GOUT_DESC(),
3740  IN(),
3741  GIN(),
3742  GIN_TYPE(),
3743  GIN_DEFAULT(),
3744  GIN_DESC()));
3745 
3746  md_data_raw.push_back(create_mdrecord(
3747  NAME("AtmosphereSet2D"),
3748  DESCRIPTION(
3749  "Sets the atmospheric dimension to be 2D.\n"
3750  "\n"
3751  "Sets *atmosphere_dim* to 2 and the longitude grid to be empty.\n"),
3752  AUTHORS("Patrick Eriksson"),
3753  OUT("atmosphere_dim", "lon_grid"),
3754  GOUT(),
3755  GOUT_TYPE(),
3756  GOUT_DESC(),
3757  IN(),
3758  GIN(),
3759  GIN_TYPE(),
3760  GIN_DEFAULT(),
3761  GIN_DESC()));
3762 
3763  md_data_raw.push_back(create_mdrecord(
3764  NAME("AtmosphereSet3D"),
3765  DESCRIPTION(
3766  "Sets the atmospheric dimension to 3D.\n"
3767  "\n"
3768  "Sets *atmosphere_dim* to 3, and *lat_true* and *lon_true* are\n"
3769  "set to be empty.\n"),
3770  AUTHORS("Patrick Eriksson"),
3771  OUT("atmosphere_dim", "lat_true", "lon_true"),
3772  GOUT(),
3773  GOUT_TYPE(),
3774  GOUT_DESC(),
3775  IN(),
3776  GIN(),
3777  GIN_TYPE(),
3778  GIN_DEFAULT(),
3779  GIN_DESC()));
3780 
3781  md_data_raw.push_back(create_mdrecord(
3782  NAME("AtmRawRead"),
3783  DESCRIPTION(
3784  "Reads atmospheric data from a scenario.\n"
3785  "\n"
3786  "An atmospheric scenario includes the following data for each\n"
3787  "position (pressure, latitude, longitude) in the atmosphere:\n"
3788  " 1. temperature field\n"
3789  " 2. the corresponding altitude field\n"
3790  " 3. vmr fields for the absorption species\n"
3791  "The vmr fields read are governed by the species given in\n"
3792  "*abs_species*. Beside gaseous species, these can also contain\n"
3793  "purely absorbing particulate matter. In the latter case the\n"
3794  "profiles are supposed to provide the mass content (unit kg/m3) for\n"
3795  "clouds and precipitation rate (unit kg/m2/s) for precipitation\n"
3796  "instead of the vmr.\n"
3797  "\n"
3798  "The data is stored in different files. This methods reads all\n"
3799  "files and creates the variables *t_field_raw*, *z_field_raw* and\n"
3800  "*vmr_field_raw*. *nlte_field_raw* is set to empty.\n"
3801  "\n"
3802  "Files in a scenarios should be named matching the pattern of:\n"
3803  "basename.speciesname.xml\n (for temperature and altitude the\n"
3804  "expected 'speciesname' are 't' and'z', respectivly)."
3805  "\n"
3806  "The files can be anywhere, but they must all be in the same\n"
3807  "directory, selected by 'basename'. The files are chosen by the\n"
3808  "species name. If you have more than one tag group for the same\n"
3809  "species, the same profile will be used.\n"),
3810  AUTHORS("Claudia Emde"),
3811  OUT("t_field_raw",
3812  "z_field_raw",
3813  "vmr_field_raw",
3814  "nlte_field_raw",
3815  "nlte_level_identifiers",
3816  "nlte_vibrational_energies"),
3817  GOUT(),
3818  GOUT_TYPE(),
3819  GOUT_DESC(),
3820  IN("abs_species"),
3821  GIN("basename"),
3822  GIN_TYPE("String"),
3823  GIN_DEFAULT(NODEF),
3824  GIN_DESC("Name of scenario, probably including the full path. For "
3825  "example: \"/smiles_local/arts-data/atmosphere/fascod/"
3826  "tropical\"")));
3827 
3828  md_data_raw.push_back(create_mdrecord(
3829  NAME("AtmWithNLTERawRead"),
3830  DESCRIPTION(
3831  "Reads atmospheric data from a scenario.\n"
3832  "\n"
3833  "An atmospheric scenario includes the following data for each\n"
3834  "position (pressure, latitude, longitude) in the atmosphere:\n"
3835  " 1. temperature field\n"
3836  " 2. the corresponding altitude field\n"
3837  " 3. vmr fields for the gaseous species\n"
3838  " 4. Non-LTE temperature fields and matching identifiers\n"
3839  "The data is stored in different files. This method reads all\n"
3840  "files and creates the variables *t_field_raw*, *z_field_raw*,\n"
3841  "*vmr_field_raw*, *nlte_field_raw*, and *nlte_level_identifiers*.\n"
3842  "\n"
3843  "Files in a scenarios should be named matching the pattern of:\n"
3844  "tropical.H2O.xml\n"
3845  "\n"
3846  "The files can be anywhere, but they must be all in the same\n"
3847  "directory, selected by 'basename'. The files are chosen by the\n"
3848  "species name. If you have more than one tag group for the same\n"
3849  "species, the same profile will be used.\n"),
3850  AUTHORS("Claudia Emde", "Richard Larsson"),
3851  OUT("t_field_raw",
3852  "z_field_raw",
3853  "vmr_field_raw",
3854  "nlte_field_raw",
3855  "nlte_level_identifiers",
3856  "nlte_vibrational_energies"),
3857  GOUT(),
3858  GOUT_TYPE(),
3859  GOUT_DESC(),
3860  IN("abs_species"),
3861  GIN("basename", "expect_vibrational_energies"),
3862  GIN_TYPE("String", "Index"),
3863  GIN_DEFAULT(NODEF, "0"),
3864  GIN_DESC("Name of scenario, probably including the full path. For "
3865  "example: \"/smiles_local/arts-data/atmosphere/fascod/"
3866  "tropical\"",
3867  "Should ev.xml be read?")));
3868 
3869  md_data_raw.push_back(create_mdrecord(
3870  NAME("atm_fields_compactAddConstant"),
3871  DESCRIPTION(
3872  "Adds a constant field to atm_fields_compact.\n"
3873  "\n"
3874  "This is handy, e.g., for nitrogen or oxygen. The constant value can\n"
3875  "be appended or prepended as an additional field to the already\n"
3876  "existing collection of fields. All dimensions (pressure, latitude,\n"
3877  "longitude) are filled up, so this works for 1D, 2D, or 3D\n"
3878  "atmospheres.\n"
3879  "\n"
3880  "The passed *name* of the field has to be in accordance with the\n"
3881  "tagging structure described for *atm_fields_compact*.\n"
3882  "\n"
3883  "A list of condensibles can be optionally specified if the VMR of\n"
3884  "the added species is assuming dry air. The VMR of the added species\n"
3885  "is then scaled down by the sum of the condensibles' VMR:\n"
3886  "VMR * (1 - VMR_sum_of_condensibles).\n"
3887  "For Earth this should be set to [\"abs_species-H2O\"]\n"),
3888  AUTHORS("Stefan Buehler, Oliver Lemke"),
3889  OUT("atm_fields_compact"),
3890  GOUT(),
3891  GOUT_TYPE(),
3892  GOUT_DESC(),
3893  IN("atm_fields_compact"),
3894  GIN("name", "value", "prepend", "condensibles"),
3895  GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
3896  GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
3897  GIN_DESC(
3898  "Name of additional atmospheric field, with constant value.",
3899  "Constant value of additional field.",
3900  "0 = Append to the end, 1 = insert at the beginning.",
3901  "List of condensibles used to scale down the VMR of the added species.")));
3902 
3903  md_data_raw.push_back(create_mdrecord(
3904  NAME("atm_fields_compactAddSpecies"),
3905  DESCRIPTION(
3906  "Adds a field to atm_fields_compact, with interpolation.\n"
3907  "\n"
3908  "This method appends or prepends a *GriddedField3* to *atm_fields_compact*.\n"
3909  "The *GriddedField3* is interpolated upon the grid of\n"
3910  "*atm_fields_compact*. A typical use case for this method may be to\n"
3911  "add a climatology of some gas when this gas is needed for radiative\n"
3912  "transfer calculations, but not yet present in *atm_fields_compact*.\n"
3913  "One case where this happens is when using the Chevalier91L dataset\n"
3914  "for infrared simulations.\n"
3915  "\n"
3916  "The grids in *atm_fields_compact* must fully encompass the grids in\n"
3917  "the *GriddedField3* to be added, for interpolation to succeed. If\n"
3918  "this is not the case, a RuntimeError is thrown.\n"
3919  "\n"
3920  "The passed *name* of the field has to be in accordance with the\n"
3921  "tagging structure described for *atm_fields_compact*.\n"),
3922  AUTHORS("Gerrit Holl"),
3923  OUT("atm_fields_compact"),
3924  GOUT(),
3925  GOUT_TYPE(),
3926  GOUT_DESC(),
3927  IN("atm_fields_compact"),
3928  GIN("name", "value", "prepend"),
3929  GIN_TYPE("String", "GriddedField3", "Index"),
3930  GIN_DEFAULT(NODEF, NODEF, "0"),
3931  GIN_DESC("Name of additional atmospheric field.",
3932  "Value of additional atmospheric field.",
3933  "0 = Append to the end, 1 = insert at the beginning.")));
3934 
3935  md_data_raw.push_back(create_mdrecord(
3936  NAME("atm_fields_compactCleanup"),
3937  DESCRIPTION(
3938  "Removes unrealistically small or erroneous data from\n"
3939  "*atm_fields_compact* (or other GriddedField4 data)\n"
3940  "\n"
3941  "This WSM checks if the data in *atm_fields_compact* contains\n"
3942  "values smaller than the given *threshold*. In this case, these\n"
3943  "values will be set to zero.\n"
3944  "\n"
3945  "The method should be applied if *atm_fields_compact* contains\n"
3946  "unrealistically small or erroneous data (NWP/GCM model data\n"
3947  "occassionally contains negative values, which are numerical\n"
3948  "artefacts rather than physical values.)\n"),
3949  AUTHORS("Jana Mendrok"),
3950  OUT("atm_fields_compact"),
3951  GOUT(),
3952  GOUT_TYPE(),
3953  GOUT_DESC(),
3954  IN("atm_fields_compact"),
3955  GIN("threshold"),
3956  GIN_TYPE("Numeric"),
3957  GIN_DEFAULT(NODEF),
3958  GIN_DESC(
3959  "Threshold below which *atm_fields_compact* values are set to zero.")));
3960 
3961  md_data_raw.push_back(create_mdrecord(
3962  NAME("atm_fields_compactCreateFromField"),
3963  DESCRIPTION(
3964  "Initiates *atm_fields_compact* from a field.\n"
3965  "\n"
3966  "*atm_fields_compact* will have the same size and grids as the GriddedField3,\n"
3967  "but with one dimension as length 1.\n"),
3968  AUTHORS("Richard Larsson"),
3969  OUT("atm_fields_compact"),
3970  GOUT(),
3971  GOUT_TYPE(),
3972  GOUT_DESC(),
3973  IN(),
3974  GIN("name", "field"),
3975  GIN_TYPE("String", "GriddedField3"),
3977  GIN_DESC("Name atmospheric field.", "The atmospheric field.")));
3978 
3979  md_data_raw.push_back(create_mdrecord(
3980  NAME("atm_fields_compactFromMatrix"),
3981  DESCRIPTION(
3982  "Sets *atm_fields_compact* from 1D fields given in form of a matrix.\n"
3983  "\n"
3984  "For batch calculations it is handy to store atmospheric\n"
3985  "profiles in an array of matrix. We take such a matrix, and create\n"
3986  "*atm_fields_compact* from it.\n"
3987  "\n"
3988  "The matrix must contain one row for each pressure level.\n"
3989  "\n"
3990  "Not all fields contained in the matrix must be selected into\n"
3991  "*atm_fields_compact*, but the selection must at least contain\n"
3992  "fields of pressure, temperature, altitude and one absorption\n"
3993  "species.\n"
3994  "The matrix can contain some additional fields which are not\n"
3995  "directly used by ARTS for calculations but can be required for\n"
3996  "further processing, e.g. wind speed and direction. These fields do\n"
3997  "not need to be transfered into the *atm_fields_compact* variable.\n"
3998  "\n"
3999  "Selection of fields into *atm_fields_compact* works by providing a\n"
4000  "field name tag in *field_names* for the selected fields, while\n"
4001  "unselected fields are tagged by 'ignore'. Order of tags in\n"
4002  "*field_names* is strictly taken as corresponding to column order in\n"
4003  "the matrix.\n"
4004  "The pressure fields are by convention the first column of the\n"
4005  "matrix, hence must not be tagged. That is, there must be given one\n"
4006  "field name tag less than matrix columns.\n"
4007  "\n"
4008  "For detailed tagging conventions see *atm_fields_compact*.\n"
4009  "\n"
4010  "Works only for *atmosphere_dim==1.*\n"),
4011  AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4012  OUT("atm_fields_compact"),
4013  GOUT(),
4014  GOUT_TYPE(),
4015  GOUT_DESC(),
4016  IN("atmosphere_dim"),
4017  GIN("gin1", "field_names"),
4018  GIN_TYPE("Matrix", "ArrayOfString"),
4020  GIN_DESC("One atmosphere matrix from batch input ArrayOfMatrix.",
4021  "Order/names of atmospheric fields.")));
4022 
4023  md_data_raw.push_back(create_mdrecord(
4024  NAME("backend_channel_responseFlat"),
4025  DESCRIPTION(
4026  "Sets up a rectangular channel response.\n"
4027  "\n"
4028  "The response of the backend channels is hee assumed to be constant\n"
4029  "inside the resolution width, and zero outside.\n"
4030  "\n"
4031  "The method assumes that all channels have the same response.\n"),
4032  AUTHORS("Patrick Eriksson"),
4033  OUT("backend_channel_response"),
4034  GOUT(),
4035  GOUT_TYPE(),
4036  GOUT_DESC(),
4037  IN(),
4038  GIN("resolution"),
4039  GIN_TYPE("Numeric"),
4040  GIN_DEFAULT(NODEF),
4041  GIN_DESC("The spectrometer resolution.")));
4042 
4043  md_data_raw.push_back(create_mdrecord(
4044  NAME("backend_channel_responseGaussian"),
4045  DESCRIPTION(
4046  "Sets up a gaussian backend channel response.\n"
4047  "\n"
4048  "The method assumes that all channels can be modelled as gaussian.\n"
4049  "\n"
4050  "If *fwhm* has only one element, all channels are assumed to be equal.\n"
4051  "If *fwhm* has multiple elements, *xwidth_si* and *dx_si* must have one\n"
4052  "element or the same number of elements as *fwhm*. If one element is given,\n"
4053  "this value will be used for all channels.\n"
4054  "\n"
4055  "The grid generated can be written as\n"
4056  " si * [-xwidth_si:dx_si:xwidth_si]\n"
4057  "where si is the standard deviation corresponding to the FWHM.\n"
4058  "That is, width and spacing of the grid is specified in terms of\n"
4059  "number of standard deviations. If xwidth_si is set to 2, the\n"
4060  "response will cover about 95% the complete response. For\n"
4061  "xwidth_si=3, about 99% is covered. If xwidth_si/dx_si is not\n"
4062  "an integer, the end points of the grid are kept and the spacing\n"
4063  "if the grid is adjusted in the downward direction (ie. spacing is.\n"
4064  "is max *dx_si*).\n"),
4065  AUTHORS("Patrick Eriksson, Oliver Lemke"),
4066  OUT("backend_channel_response"),
4067  GOUT(),
4068  GOUT_TYPE(),
4069  GOUT_DESC(),
4070  IN(),
4071  GIN("fwhm", "xwidth_si", "dx_si"),
4072  GIN_TYPE("Vector", "Vector", "Vector"),
4073  GIN_DEFAULT(NODEF, "[3]", "[0.1]"),
4074  GIN_DESC("Full width at half-maximum",
4075  "Half-width of response, in terms of std. dev.",
4076  "Grid spacing, in terms of std. dev.")));
4077 
4078  md_data_raw.push_back(create_mdrecord(
4079  NAME("batch_atm_fields_compactAddConstant"),
4080  DESCRIPTION("Adds a constant field to batch_atm_fields_compact.\n"
4081  "\n"
4082  "Applies *atm_fields_compactAddConstant* to each batch.\n"
4083  "The format is equal to that WSM.\n"),
4084  AUTHORS("Gerrit Holl"),
4085  OUT("batch_atm_fields_compact"),
4086  GOUT(),
4087  GOUT_TYPE(),
4088  GOUT_DESC(),
4089  IN("batch_atm_fields_compact"),
4090  GIN("name", "value", "prepend", "condensibles"),
4091  GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
4092  GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
4093  GIN_DESC(
4094  "Name of additional atmospheric field, with constant value.",
4095  "Constant value of additional field.",
4096  "0 = Append to the end, 1 = insert at the beginning.",
4097  "List of condensibles used to scale down the VMR of the added species.")));
4098 
4099  md_data_raw.push_back(create_mdrecord(
4100  NAME("batch_atm_fields_compactAddSpecies"),
4101  DESCRIPTION(
4102  "Adds a field to *batch_atm_fields_compact*, with interpolation.\n"
4103  "\n"
4104  "This method appends or prepends a *GriddedField3* to each *atm_fields_compact*.\n"
4105  "in *batch_atm_fields_compact*. For details, see *atm_fields_compactAddSpecies*.\n"),
4106  AUTHORS("Gerrit Holl"),
4107  OUT("batch_atm_fields_compact"),
4108  GOUT(),
4109  GOUT_TYPE(),
4110  GOUT_DESC(),
4111  IN("batch_atm_fields_compact"),
4112  GIN("name", "value", "prepend"),
4113  GIN_TYPE("String", "GriddedField3", "Index"),
4114  GIN_DEFAULT(NODEF, NODEF, "0"),
4115  GIN_DESC(
4116  "Name of additional atmospheric field. Use, e.g., vmr_ch4 for methane VMR",
4117  "Value of additional atmospheric field.",
4118  "0 = Append to the end, 1 = insert at the beginning.")));
4119 
4120  md_data_raw.push_back(create_mdrecord(
4121  NAME("batch_atm_fields_compactCleanup"),
4122  DESCRIPTION(
4123  "Removes unrealistically small or erroneous data from each data field\n"
4124  "of *batch_atm_fields_compact* (or other AerrayOfGriddedField4 data)\n"
4125  "\n"
4126  "This WSM checks if the data in *batch_atm_fields_compact* contains\n"
4127  "values smaller than the given *threshold*. In this case, these\n"
4128  "values will be set to zero.\n"
4129  "\n"
4130  "The method should be applied if *batch_atm_fields_compact* contains\n"
4131  "unrealistically small or erroneous data (NWP/GCM model data\n"
4132  "occassionally contains negative values, which are numerical\n"
4133  "artefacts rather than physical values.)\n"),
4134  AUTHORS("Jana Mendrok"),
4135  OUT("batch_atm_fields_compact"),
4136  GOUT(),
4137  GOUT_TYPE(),
4138  GOUT_DESC(),
4139  IN("batch_atm_fields_compact"),
4140  GIN("threshold"),
4141  GIN_TYPE("Numeric"),
4142  GIN_DEFAULT(NODEF),
4143  GIN_DESC(
4144  "Threshold below which *atm_fields_compact* values are set to zero.")));
4145 
4146  md_data_raw.push_back(create_mdrecord(
4147  NAME("batch_atm_fields_compactFromArrayOfMatrix"),
4148  DESCRIPTION(
4149  "Expand batch of 1D atmospheric state matrices to batch_atm_fields_compact.\n"
4150  "\n"
4151  "This is used to handle 1D batch cases, e.g. from NWP/GCM model like\n"
4152  "the Chevallier91L data set, stored in a matrix (it is preferred,\n"
4153  "though, to immediatedly store the model fields as\n"
4154  "*ArrayOfGriddedField4* and use *ReadXML* to load them directly into\n"
4155  "*batch_atm_fields_compact*).\n"
4156  "\n"
4157  "Works only for *atmosphere_dim==1.*\n"
4158  "\n"
4159  "See *atm_fields_compactFromMatrix* for basic documentation.\n"
4160  "\n"
4161  "See *batch_atm_fields_compactAddConstant* and\n"
4162  "batch_atm_fields_compactAddSpecies* for adding additional fields.\n"),
4163  AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4164  OUT("batch_atm_fields_compact"),
4165  GOUT(),
4166  GOUT_TYPE(),
4167  GOUT_DESC(),
4168  IN("atmosphere_dim"),
4169  GIN("atmospheres_fields", "field_names"),
4170  GIN_TYPE("ArrayOfMatrix", "ArrayOfString"),
4172  GIN_DESC("Batch of atmospheres stored in one array of matrix",
4173  "Order/names of atmospheric fields.")));
4174 
4175  md_data_raw.push_back(create_mdrecord(
4176  NAME("CIAInfo"),
4177  DESCRIPTION(
4178  "Display information about the given CIA tags.\n"
4179  "The CIA tags shown are in the same format as needed by *abs_speciesSet*.\n"),
4180  AUTHORS("Oliver Lemke"),
4181  OUT(),
4182  GOUT(),
4183  GOUT_TYPE(),
4184  GOUT_DESC(),
4185  IN(),
4186  GIN("catalogpath", "cia_tags"),
4187  GIN_TYPE("String", "ArrayOfString"),
4189  GIN_DESC("Path to the CIA catalog directory.",
4190  "Array of CIA tags to view, e.g. [ \"N2-N2\", \"H2-H2\" ]")));
4191 
4192  md_data_raw.push_back(create_mdrecord(
4193  NAME("CIARecordReadFromFile"),
4194  DESCRIPTION("Reads CIARecord from Hitran-style file.\n"),
4195  AUTHORS("Richard Larsson"),
4196  OUT(),
4197  GOUT("cia_record"),
4198  GOUT_TYPE("CIARecord"),
4199  GOUT_DESC("CIARecord type variable for input and output."),
4200  IN(),
4201  GIN("species_tag", "filename"),
4202  GIN_TYPE("String", "String"),
4204  GIN_DESC("SpeciesTag string to associate with this CIARecord. See "
4205  "*abs_speciesSet* for correct format.",
4206  "Filename of HITRAN CIA data file.")));
4207 
4208  md_data_raw.push_back(create_mdrecord(
4209  NAME("cloudboxOff"),
4210  DESCRIPTION(
4211  "Deactivates the cloud box.\n"
4212  "\n"
4213  "Use this method if no scattering calculations shall be performed.\n"
4214  "\n"
4215  "The function sets *cloudbox_on* to 0, *cloudbox_limits*,\n"
4216  "*pnd_field*, *scat_data*, *scat_data_raw*, *iy_cloudbox_agenda*\n"
4217  "and *particle_masses* to be empty and sizes *dpnd_field_dx* to be\n"
4218  "consitent with *jacobian_quantities*.\n"),
4219  AUTHORS("Patrick Eriksson"),
4220  OUT("cloudbox_on",
4221  "ppath_inside_cloudbox_do",
4222  "cloudbox_limits",
4223  "iy_cloudbox_agenda",
4224  "pnd_field",
4225  "dpnd_field_dx",
4226  "scat_species",
4227  "scat_data",
4228  "scat_data_raw",
4229  "scat_data_checked",
4230  "particle_masses"),
4231  GOUT(),
4232  GOUT_TYPE(),
4233  GOUT_DESC(),
4234  IN("jacobian_quantities"),
4235  GIN(),
4236  GIN_TYPE(),
4237  GIN_DEFAULT(),
4238  GIN_DESC()));
4239 
4240  md_data_raw.push_back(create_mdrecord(
4241  NAME("cloudboxSetAutomatically"),
4242  DESCRIPTION(
4243  "Sets the cloud box to encompass the cloud given by the entries\n"
4244  "in *particle_field*.\n"
4245  "\n"
4246  "This WSM handles one *Tensor4* type *particle_field* at a time. It can\n"
4247  "be used to determine the cloudbox from *particle_bulkprop_field*\n"
4248  "\n"
4249  "The function must be called before executing any WSM that applies\n"
4250  "*cloudbox_limits*.\n"
4251  "\n"
4252  "The function iterates over all 3D fields in *particle_field* (which\n"
4253  "might correspond to different particle bulk properties as in\n"
4254  "*particle_bulkprop_field*). Each field is searched for the first\n"
4255  "and last pressure index, where the value is unequal to zero. This\n"
4256  "index is then copied to *cloudbox_limits*.\n"
4257  "If *particle_field* is empty, the cloudbox is switched off\n"
4258  "(*cloudbox_on*=0).\n"
4259  "\n"
4260  "Additionaly the lower cloudbox_limit is altered by *cloudbox_margin*.\n"
4261  "The margin is given as a height difference in meters and transformed\n"
4262  "into a pressure (via isothermal barometric height formula). This\n"
4263  "alteration is to ensure covering photons that leave the cloud, but\n"
4264  "reenter through a limb path.\n"
4265  "If *cloudbox_margin* is set to -1 (default), the cloudbox will extend\n"
4266  "to the surface. Hence, the lower cloudbox_limit is set to 0 (index\n"
4267  "of first pressure level).\n"
4268  "*cloudbox_margin* will be applied on each call of the WSM.\n"
4269  "\n"
4270  "Works only for *atmosphere_dim==1.*\n"),
4271  AUTHORS("Jana Mendrok, Daniel Kreyling"),
4272  OUT("cloudbox_on", "cloudbox_limits"),
4273  GOUT(),
4274  GOUT_TYPE(),
4275  GOUT_DESC(),
4276  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4277  GIN("particle_field", "cloudbox_limits_old", "cloudbox_margin"),
4278  GIN_TYPE("Tensor4", "ArrayOfIndex", "Numeric"),
4279  GIN_DEFAULT(NODEF, "[-1]", "-1"),
4280  GIN_DESC("A collection of particle property fields (e.g."
4281  " *particle_bulkprop_field*).",
4282  "Preset cloudbox limits, e.g. resulting from a previous run"
4283  " of *cloudboxSetAutomatically*.",
4284  "Minimum distance [m] between lowest 'cloudy' level and"
4285  " cloudbox lower limit. If set to *-1* (default), the"
4286  " cloudbox lower limit is fixed to 0, i.e., corresponds to"
4287  " the lowest atmospheric level (or the surface).")));
4288 
4289  md_data_raw.push_back(
4290  create_mdrecord(NAME("cloudboxSetFullAtm"),
4291  DESCRIPTION("Sets the cloudbox to cover the full atmosphere.\n"),
4292  AUTHORS("Claudia Emde, Jana Mendrok"),
4293  OUT("cloudbox_on", "cloudbox_limits"),
4294  GOUT(),
4295  GOUT_TYPE(),
4296  GOUT_DESC(),
4297  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4298  GIN(),
4299  GIN_TYPE(),
4300  GIN_DEFAULT(),
4301  GIN_DESC()));
4302 
4303  md_data_raw.push_back(create_mdrecord(
4304  NAME("cloudboxSetManually"),
4305  DESCRIPTION(
4306  "Sets the cloud box to encompass the given positions.\n"
4307  "\n"
4308  "The function sets *cloudbox_on* to 1 and sets *cloudbox_limits*\n"
4309  "following the given pressure, latitude and longitude positions.\n"
4310  "The index limits in *cloudbox_limits* are selected to give the\n"
4311  "smallest possible cloud box that encompass the given points.\n"
4312  "\n"
4313  "The points must be given in the same order as used in\n"
4314  "*cloudbox_limits*. That means that the first keyword argument\n"
4315  "shall be a higher pressure than argument two, while the latitude\n"
4316  "and longitude points are given in increasing order. Positions\n"
4317  "given for dimensions not used by the selected atmospheric\n"
4318  "dimensionality are ignored.\n"
4319  "\n"
4320  "The given pressure points can be outside the range of *p_grid*.\n"
4321  "The pressure limit is then set to the end point of *p_grid*.\n"
4322  "The given latitude and longitude points must be inside the range\n"
4323  "of the corresponding grid. In addition, the latitude and longitude\n"
4324  "points cannot be inside the outermost grid ranges as the latitude\n"
4325  "and longitude limits in *cloudbox_limits* are not allowed to be\n"
4326  "grid end points.\n"),
4327  AUTHORS("Patrick Eriksson"),
4328  OUT("cloudbox_on", "cloudbox_limits"),
4329  GOUT(),
4330  GOUT_TYPE(),
4331  GOUT_DESC(),
4332  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4333  GIN("p1", "p2", "lat1", "lat2", "lon1", "lon2"),
4334  GIN_TYPE(
4335  "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4337  GIN_DESC("Upper pressure point.",
4338  "Lower pressure point.",
4339  "Lower latitude point.",
4340  "Upper latitude point.",
4341  "Lower longitude point.",
4342  "Upper longitude point.")));
4343 
4344  md_data_raw.push_back(create_mdrecord(
4345  NAME("cloudboxSetManuallyAltitude"),
4346  DESCRIPTION(
4347  "Sets the cloud box to encompass the given positions.\n"
4348  "\n"
4349  "As *cloudboxSetManually* but uses altitudes instead of pressure.\n"
4350  "The given altitude points can be outside the range of *z_field*.\n"
4351  "The altitude limit is then set to the end point of *p_grid*.\n"),
4352  AUTHORS("Claudia Emde"),
4353  OUT("cloudbox_on", "cloudbox_limits"),
4354  GOUT(),
4355  GOUT_TYPE(),
4356  GOUT_DESC(),
4357  IN("atmosphere_dim", "z_field", "lat_grid", "lon_grid"),
4358  GIN("z1", "z2", "lat1", "lat2", "lon1", "lon2"),
4359  GIN_TYPE(
4360  "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4362  GIN_DESC("Lower altitude point.",
4363  "Upper altitude point.",
4364  "Lower latitude point.",
4365  "Upper latitude point.",
4366  "Lower longitude point.",
4367  "Upper longitude point.")));
4368 
4369  md_data_raw.push_back(create_mdrecord(
4370  NAME("cloudbox_checkedCalc"),
4371  DESCRIPTION(
4372  "Checks consistency and validity of the cloudbox governing variables.\n"
4373  "\n"
4374  "The following WSVs are treated: *cloudbox_on*, *cloudbox_limits*,\n"
4375  "*pnd_field*, *scat_data*, *scat_species*, *abs_species*, *particle_masses*\n"
4376  "*particle_bulkprop_field*, *particle_bulkprop_names* and wind_u/v/w_field.\n"
4377  "\n"
4378  "If any of these variables is changed, then this method shall be\n"
4379  "called again (no automatic check that this is fulfilled!).\n"
4380  "\n"
4381  "The main checks are if the cloudbox limits are OK with respect to\n"
4382  "the atmospheric dimensionality and the limits of the atmosphere,\n"
4383  "and that the scattering element variables *pnd_field* and\n"
4384  "*scat_data* match in size.\n"
4385  "\n"
4386  "Further checks on *scat_data* are performed in *scat_data_checkedCalc*\n"
4387  "\n"
4388  "*scat_species* and *particle_masses* must either be empty or have a\n"
4389  "size that matches the other data. If non-empty, some check of these\n"
4390  "variables are performed.\n"
4391  "\n"
4392  "If any test fails, there is an error. Otherwise, *cloudbox_checked*\n"
4393  "is set to 1.\n"),
4394  AUTHORS("Patrick Eriksson, Jana Mendrok"),
4395  OUT("cloudbox_checked"),
4396  GOUT(),
4397  GOUT_TYPE(),
4398  GOUT_DESC(),
4399  IN("atmfields_checked",
4400  "atmosphere_dim",
4401  "p_grid",
4402  "lat_grid",
4403  "lon_grid",
4404  "z_field",
4405  "z_surface",
4406  "wind_u_field",
4407  "wind_v_field",
4408  "wind_w_field",
4409  "cloudbox_on",
4410  "cloudbox_limits",
4411  "pnd_field",
4412  "dpnd_field_dx",
4413  "jacobian_quantities",
4414  "scat_data",
4415  "scat_species",
4416  "particle_masses",
4417  "abs_species"),
4418  GIN("negative_pnd_ok"),
4419  GIN_TYPE("Index"),
4420  GIN_DEFAULT("0"),
4421  GIN_DESC("Flag whether to accept pnd_field < 0.")));
4422 
4423  md_data_raw.push_back(create_mdrecord(
4424  NAME("cloudbox_field_monoIterate"),
4425  DESCRIPTION(
4426  "Iterative solution of the VRTE (DOIT method).\n"
4427  "\n"
4428  "A solution for the RTE with scattering is found using the\n"
4429  "DOIT method:\n"
4430  " 1. Calculate scattering integral using *doit_scat_field_agenda*.\n"
4431  " 2. Calculate RT with fixed scattered field using\n"
4432  " *doit_rte_agenda*.\n"
4433  " 3. Convergence test using *doit_conv_test_agenda*.\n"
4434  "\n"
4435  "Note: The atmospheric dimensionality *atmosphere_dim* can be\n"
4436  " either 1 or 3. To these dimensions the method adapts\n"
4437  " automatically. 2D scattering calculations are not\n"
4438  " supported.\n"),
4439  AUTHORS("Claudia Emde, Jakob Doerr"),
4440  OUT("cloudbox_field_mono"),
4441  GOUT(),
4442  GOUT_TYPE(),
4443  GOUT_DESC(),
4444  IN("cloudbox_field_mono",
4445  "doit_scat_field_agenda",
4446  "doit_rte_agenda",
4447  "doit_conv_test_agenda"),
4448  GIN("accelerated"),
4449  GIN_TYPE("Index"),
4450  GIN_DEFAULT("0"),
4451  GIN_DESC(
4452  "Index wether to accelerate only the intensity (1) or the whole Stokes Vector (4)")));
4453 
4454  md_data_raw.push_back(create_mdrecord(
4455  NAME("cloudbox_fieldCrop"),
4456  DESCRIPTION(
4457  "Extracts a part of an existing *cloudbox_field*.\n"
4458  "\n"
4459  "The cropping is defined by defining new cloudbox limits. Note that\n"
4460  "*new_limit0* is an index with respect to *p_grid*, etc.\n"
4461  "\n"
4462  "The following must be valid:\n"
4463  " new_limit0 >= cloudbox_limits[0]\n"
4464  " new_limit1 <= cloudbox_limits[1]\n"
4465  " new_limit2 >= cloudbox_limits[2]\n"
4466  " new_limit3 <= cloudbox_limits[3]\n"
4467  " new_limit4 >= cloudbox_limits[4]\n"
4468  " new_limit5 <= cloudbox_limits[5]\n"
4469  "\n"
4470  "Indexes for dimensions not used are ignored.\n"),
4471  AUTHORS("Patrick Eriksson"),
4472  OUT("cloudbox_field", "cloudbox_limits"),
4473  GOUT(),
4474  GOUT_TYPE(),
4475  GOUT_DESC(),
4476  IN("atmosphere_dim", "cloudbox_on", "cloudbox_limits", "cloudbox_field"),
4477  GIN("new_limit0",
4478  "new_limit1",
4479  "new_limit2",
4480  "new_limit3",
4481  "new_limit4",
4482  "new_limit5"),
4483  GIN_TYPE("Index", "Index", "Index", "Index", "Index", "Index"),
4484  GIN_DEFAULT("0", "0", "0", "0", "0", "0"),
4485  GIN_DESC("New value for cloudbox_limits[0].",
4486  "New value for cloudbox_limits[1].",
4487  "New value for cloudbox_limits[2].",
4488  "New value for cloudbox_limits[3].",
4489  "New value for cloudbox_limits[4].",
4490  "New value for cloudbox_limits[5].")));
4491 
4492  md_data_raw.push_back(create_mdrecord(
4493  NAME("cloudbox_fieldSetFromPrecalc"),
4494  DESCRIPTION(
4495  "Sets the initial cloudbox intensity field *cloudbox_field* from a\n"
4496  "precalculated field.\n"
4497  "\n"
4498  "This method sets the (monochromatic) first guess radiation field\n"
4499  "inside the cloudbox from a precalculated *cloudbox_field_precalc*,\n"
4500  "e.g., from the solution of a similar atmospheric scenario. The\n"
4501  "dimensions of *cloudbox_field_precalc* have to be consistent with\n"
4502  "the DOIT setup in terms of frequencies, pressure levels inside the\n"
4503  "cloudbox, polar angles used as well as the stokes dimension.\n"
4504  "Incoming field on the cloudbox boundaries is adapted to the actual\n"
4505  "clearsky incoming field as, e.g., calculated by *DoitGetIncoming*.\n"),
4506  AUTHORS("Jana Mendrok"),
4507  OUT("cloudbox_field"),
4508  GOUT(),
4509  GOUT_TYPE(),
4510  GOUT_DESC(),
4511  IN("cloudbox_field",
4512  "za_grid",
4513  "f_grid",
4514  "atmosphere_dim",
4515  "stokes_dim",
4516  "cloudbox_limits",
4517  "doit_is_initialized"),
4518  GIN("cloudbox_field_precalc"),
4519  GIN_TYPE("Tensor7"),
4520  GIN_DEFAULT(NODEF),
4521  GIN_DESC("Precalculated radiation field (of type *cloudbox_field*)")));
4522 
4523  md_data_raw.push_back(create_mdrecord(
4524  NAME("cloudbox_fieldSetClearsky"),
4525  DESCRIPTION(
4526  "Interpolate clearsky field on all gridpoints in cloudbox.\n"
4527  "\n"
4528  "This method uses a linear 1D/3D interpolation scheme to obtain the\n"
4529  "radiation field on all grid points inside the cloud box from the\n"
4530  "clear sky field on the cloudbox boundary. This radiation field\n"
4531  "is taken as the first guess radiation field in the DOIT module.\n"
4532  "\n"
4533  "Set the *all_frequencies* to 1 if the clearsky field shall be used\n"
4534  "as initial field for all frequencies. Set it to 0 if the clear sky\n"
4535  "field shall be used only for the first frequency in *f_grid*. For\n"
4536  "later frequencies, *cloudbox_field* of the previous frequency is then\n"
4537  "used.\n"),
4538  AUTHORS("Sreerekha T.R. and Claudia Emde"),
4539  OUT("cloudbox_field"),
4540  GOUT(),
4541  GOUT_TYPE(),
4542  GOUT_DESC(),
4543  IN("cloudbox_field",
4544  "p_grid",
4545  "lat_grid",
4546  "lon_grid",
4547  "cloudbox_limits",
4548  "atmosphere_dim",
4549  "cloudbox_on",
4550  "doit_is_initialized"),
4551  GIN("all_frequencies"),
4552  GIN_TYPE("Index"),
4553  GIN_DEFAULT("1"),
4554  GIN_DESC("See above.")));
4555 
4556  md_data_raw.push_back(create_mdrecord(
4557  NAME("cloudbox_field_monoSetConst"),
4558  DESCRIPTION(
4559  "This method sets the initial field inside the cloudbox to a\n"
4560  "constant value. The method works only for monochromatic\n"
4561  "calculations (number of elements in f_grid=1).\n"
4562  "\n"
4563  "The user can specify a value for each Stokes dimension in the\n"
4564  "control file by *value*.\n"),
4565  AUTHORS("Claudia Emde"),
4566  OUT("cloudbox_field_mono"),
4567  GOUT(),
4568  GOUT_TYPE(),
4569  GOUT_DESC(),
4570  IN("cloudbox_field_mono",
4571  "p_grid",
4572  "lat_grid",
4573  "lon_grid",
4574  "cloudbox_limits",
4575  "atmosphere_dim",
4576  "stokes_dim"),
4577  GIN("value"),
4578  GIN_TYPE("Vector"),
4579  GIN_DEFAULT(NODEF),
4580  GIN_DESC("A vector containing 4 elements with the value of the "
4581  "initial field for each Stokes dimension.")));
4582 
4583  md_data_raw.push_back(create_mdrecord(
4584  NAME("cloudbox_fieldSetConst"),
4585  DESCRIPTION(
4586  "This method sets the initial field inside the cloudbox to a\n"
4587  "constant value.\n"
4588  "\n"
4589  "The user has to specify a value for each Stokes dimension in the\n"
4590  "control file by *value*.\n"),
4591  AUTHORS("Claudia Emde"),
4592  OUT("cloudbox_field"),
4593  GOUT(),
4594  GOUT_TYPE(),
4595  GOUT_DESC(),
4596  IN("cloudbox_field",
4597  "p_grid",
4598  "lat_grid",
4599  "lon_grid",
4600  "cloudbox_limits",
4601  "atmosphere_dim",
4602  "stokes_dim"),
4603  GIN("value"),
4604  GIN_TYPE("Vector"),
4605  GIN_DEFAULT(NODEF),
4606  GIN_DESC("A vector containing *stokes_dim* elements with the value of"
4607  " the initial field for each Stokes dimension.")));
4608 
4609  md_data_raw.push_back(create_mdrecord(
4610  NAME("cloudbox_fieldSetConstPerFreq"),
4611  DESCRIPTION(
4612  "This method sets the initial field inside the cloudbox to a\n"
4613  "constant value per frequency slice.\n"
4614  "\n"
4615  "The user has specify a value for each frequency and Stokes\n"
4616  "dimension in the control file by *value*.\n"),
4617  AUTHORS("Jana Mendrok"),
4618  OUT("cloudbox_field"),
4619  GOUT(),
4620  GOUT_TYPE(),
4621  GOUT_DESC(),
4622  IN("cloudbox_field",
4623  "p_grid",
4624  "lat_grid",
4625  "lon_grid",
4626  "cloudbox_limits",
4627  "atmosphere_dim",
4628  "stokes_dim"),
4629  GIN("value"),
4630  GIN_TYPE("Matrix"),
4631  GIN_DEFAULT(NODEF),
4632  GIN_DESC("A matrix containing *stokes_dim* elements per frequency"
4633  " (row) with the value of the initial field for each"
4634  " frequency and Stokes dimension.")));
4635 
4636  md_data_raw.push_back(create_mdrecord(
4637  NAME("cloudbox_fieldUpdate1D"),
4638  DESCRIPTION(
4639  "RT calculation in cloudbox with fixed scattering integral (1D).\n"
4640  "\n"
4641  "Updates the radiation field (DOIT method). The method loops\n"
4642  "through the cloudbox to update the radiation field for all\n"
4643  "positions and directions in the 1D cloudbox.\n"
4644  "\n"
4645  "Note: This method is very inefficient, because the number of\n"
4646  "iterations scales with the number of cloudbox pressure levels.\n"
4647  "It is recommended to use *cloudbox_fieldUpdateSeq1D*.\n"),
4648  AUTHORS("Claudia Emde"),
4649  OUT("cloudbox_field_mono"),
4650  GOUT(),
4651  GOUT_TYPE(),
4652  GOUT_DESC(),
4653  IN("cloudbox_field_mono",
4654  "doit_scat_field",
4655  "cloudbox_limits",
4656  "propmat_clearsky_agenda",
4657  "vmr_field",
4658  "spt_calc_agenda",
4659  "za_grid",
4660  "pnd_field",
4661  "ppath_step_agenda",
4662  "ppath_lmax",
4663  "ppath_lraytrace",
4664  "p_grid",
4665  "z_field",
4666  "refellipsoid",
4667  "t_field",
4668  "f_grid",
4669  "f_index",
4670  "surface_rtprop_agenda",
4671  "doit_za_interp"),
4672  GIN(),
4673  GIN_TYPE(),
4674  GIN_DEFAULT(),
4675  GIN_DESC()));
4676 
4677  md_data_raw.push_back(create_mdrecord(
4678  NAME("cloudbox_fieldUpdateSeq1D"),
4679  DESCRIPTION(
4680  "RT calculation in cloudbox with fixed scattering integral.\n"
4681  "\n"
4682  "Updates radiation field (*cloudbox_field*) in DOIT module.\n"
4683  "This method loops through the cloudbox to update the\n"
4684  "radiation field for all positions and directions in the 1D\n"
4685  "cloudbox. The method applies the sequential update. For more\n"
4686  "information refer to AUG.\n"),
4687  AUTHORS("Claudia Emde"),
4688  OUT("cloudbox_field_mono", "doit_scat_field"),
4689  GOUT(),
4690  GOUT_TYPE(),
4691  GOUT_DESC(),
4692  IN("cloudbox_field_mono",
4693  "doit_scat_field",
4694  "cloudbox_limits",
4695  "propmat_clearsky_agenda",
4696  "vmr_field",
4697  "spt_calc_agenda",
4698  "za_grid",
4699  "aa_grid",
4700  "pnd_field",
4701  "ppath_step_agenda",
4702  "ppath_lmax",
4703  "ppath_lraytrace",
4704  "p_grid",
4705  "z_field",
4706  "refellipsoid",
4707  "t_field",
4708  "f_grid",
4709  "f_index",
4710  "surface_rtprop_agenda",
4711  "doit_za_interp"),
4712  GIN("normalize", "norm_error_threshold", "norm_debug"),
4713  GIN_TYPE("Index", "Numeric", "Index"),
4714  GIN_DEFAULT("1", "1.0", "0"),
4715  GIN_DESC(
4716  "Apply normalization to scattered field.",
4717  "Error threshold for scattered field correction factor.",
4718  "Debugging flag. Set to 1 to output normalization factor to out0.")));
4719 
4720  md_data_raw.push_back(create_mdrecord(
4721  NAME("cloudbox_fieldUpdateSeq1DPP"),
4722  DESCRIPTION(
4723  "RT calculation in cloudbox with fixed scattering integral.\n"
4724  "\n "
4725  "Update radiation field (*cloudbox_field*) in DOIT module.\n"
4726  "This method loops through the cloudbox to update the\n"
4727  "radiation field for all\n"
4728  "positions and directions in the 1D cloudbox. The method applies\n"
4729  "the sequential update and the plane parallel approximation.\n"
4730  "This method is only slightly faster than\n"
4731  "*cloudbox_fieldUpdateSeq1D* and it is less accurate. It can not\n"
4732  "be used for limb simulations.\n"),
4733  AUTHORS("Sreerekha T.R."),
4734  OUT("cloudbox_field_mono", "za_index"),
4735  GOUT(),
4736  GOUT_TYPE(),
4737  GOUT_DESC(),
4738  IN("cloudbox_field_mono",
4739  "doit_scat_field",
4740  "cloudbox_limits",
4741  "propmat_clearsky_agenda",
4742  "vmr_field",
4743  "spt_calc_agenda",
4744  "za_grid",
4745  "pnd_field",
4746  "p_grid",
4747  "z_field",
4748  "t_field",
4749  "f_grid",
4750  "f_index"),
4751  GIN(),
4752  GIN_TYPE(),
4753  GIN_DEFAULT(),
4754  GIN_DESC()));
4755 
4756  md_data_raw.push_back(create_mdrecord(
4757  NAME("cloudbox_fieldUpdateSeq3D"),
4758  DESCRIPTION(
4759  "RT calculation in cloudbox with fixed scattering integral.\n"
4760  "\n"
4761  "Update radiation field (*cloudbox_field*) in DOIT module.\n"
4762  "This method loops through the cloudbox to update the\n"
4763  "radiation field for all positions and directions in the 3D\n"
4764  "cloudbox. The method applies the sequential update. For more\n"
4765  "information please refer to AUG.\n"
4766  "Surface reflections are not yet implemented in 3D scattering\n"
4767  "calculations.\n"),
4768  AUTHORS("Claudia Emde"),
4769  OUT("cloudbox_field_mono"),
4770  GOUT(),
4771  GOUT_TYPE(),
4772  GOUT_DESC(),
4773  IN("cloudbox_field_mono",
4774  "doit_scat_field",
4775  "cloudbox_limits",
4776  "propmat_clearsky_agenda",
4777  "vmr_field",
4778  "spt_calc_agenda",
4779  "za_grid",
4780  "aa_grid",
4781  "pnd_field",
4782  "ppath_step_agenda",
4783  "ppath_lmax",
4784  "ppath_lraytrace",
4785  "p_grid",
4786  "lat_grid",
4787  "lon_grid",
4788  "z_field",
4789  "refellipsoid",
4790  "t_field",
4791  "f_grid",
4792  "f_index",
4793  "doit_za_interp"),
4794  GIN(),
4795  GIN_TYPE(),
4796  GIN_DEFAULT(),
4797  GIN_DESC()));
4798 
4799  md_data_raw.push_back(create_mdrecord(
4800  NAME("cloudbox_field_monoOptimizeReverse"),
4801  DESCRIPTION(
4802  "Interpolate *cloudbox_field_mono* back to the original p_grid.\n"
4803  "For detailed description, see *OptimizeDoitPressureGrid*. \n"),
4804  AUTHORS("Jakob Doerr"),
4805  OUT("cloudbox_field_mono"),
4806  GOUT(),
4807  GOUT_TYPE(),
4808  GOUT_DESC(),
4809  IN("cloudbox_field_mono", "p_grid_orig", "p_grid", "cloudbox_limits"),
4810  GIN(),
4811  GIN_TYPE(),
4812  GIN_DEFAULT(),
4813  GIN_DESC()));
4814 
4815  md_data_raw.push_back(create_mdrecord(
4816  NAME("Compare"),
4817  DESCRIPTION(
4818  "Checks the consistency between two variables.\n"
4819  "\n"
4820  "The two variables are checked to not deviate outside the specified\n"
4821  "value (*maxabsdiff*). An error is issued if this is not fulfilled.\n"
4822  "\n"
4823  "The main application of this method is to be part of the test\n"
4824  "control files, and then used to check that a calculated value\n"
4825  "is consistent with an old, reference, value.\n"),
4826  AUTHORS("Oliver Lemke"),
4827  OUT(),
4828  GOUT(),
4829  GOUT_TYPE(),
4830  GOUT_DESC(),
4831  IN(),
4832  GIN("var1", "var2", "maxabsdiff", "error_message"),
4833  GIN_TYPE( // INPUT 1
4834  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor7,"
4835  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor7, GriddedField3,"
4836  "Sparse, SingleScatteringData",
4837  // INPUT 2
4838  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor7,"
4839  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor7, GriddedField3,"
4840  "Sparse, SingleScatteringData",
4841  // OTHER INPUT
4842  "Numeric",
4843  "String"),
4844  GIN_DEFAULT(NODEF, NODEF, "", ""),
4845  GIN_DESC("A first variable",
4846  "A second variable",
4847  "Threshold for maximum absolute difference.",
4848  "Additional error message."),
4849  SETMETHOD(false),
4850  AGENDAMETHOD(false),
4851  USES_TEMPLATES(false),
4852  PASSWORKSPACE(false),
4853  PASSWSVNAMES(true)));
4854 
4855  md_data_raw.push_back(create_mdrecord(
4856  NAME("CompareRelative"),
4857  DESCRIPTION(
4858  "Checks the consistency between two variables by their relative values.\n"
4859  "\n"
4860  "The two variables are checked to not deviate outside the specified\n"
4861  "relative value (*maxabsreldiff*). An error is issued if this is not\n"
4862  "fulfilled.\n"
4863  "\n"
4864  "The main application of this method is to be part of the test\n"
4865  "control files, and then used to check that a calculated value\n"
4866  "is consistent with an old, reference, value.\n"
4867  "\n"
4868  "If either value is 0.0, the relative error is considered as 0\n"
4869  "for easier use. This really means infinite differences, though\n"
4870  "allowing zero-crossings is useful for plenty of tests. So Be Aware!\n"
4871  "\n"
4872  "If both *var1* and *var2* are non-zero, the difference is evaluated\n"
4873  "as: abs(var1/var2-1)\n"
4874  "That is, *var2* is taken as the reference value.\n"),
4875  AUTHORS("Oliver Lemke", "Richard Larsson"),
4876  OUT(),
4877  GOUT(),
4878  GOUT_TYPE(),
4879  GOUT_DESC(),
4880  IN(),
4881  GIN("var1", "var2", "maxabsreldiff", "error_message"),
4882  GIN_TYPE(
4883  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
4884  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor3, ArrayOfTensor4,"
4885  "ArrayOfTensor6, ArrayOfTensor7, ArrayOfArrayOfVector,"
4886  "ArrayOfArrayOfMatrix, ArrayOfArrayOfTensor3, ArrayOfArrayOfTensor6,"
4887  "ArrayOfPropagationMatrix, ArrayOfArrayOfPropagationMatrix,"
4888  "ArrayOfStokesVector, ArrayOfArrayOfStokesVector,EnergyLevelMap,",
4889  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
4890  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor3, ArrayOfTensor4,"
4891  "ArrayOfTensor6, ArrayOfTensor7, ArrayOfArrayOfVector,"
4892  "ArrayOfArrayOfMatrix, ArrayOfArrayOfTensor3, ArrayOfArrayOfTensor6,"
4893  "ArrayOfPropagationMatrix, ArrayOfArrayOfPropagationMatrix,"
4894  "ArrayOfStokesVector, ArrayOfArrayOfStokesVector,EnergyLevelMap,",
4895  "Numeric",
4896  "String"),
4897  GIN_DEFAULT(NODEF, NODEF, NODEF, ""),
4898  GIN_DESC("A first variable",
4899  "A second variable",
4900  "Threshold for maximum relative difference.",
4901  "Additional error message."),
4902  SETMETHOD(false),
4903  AGENDAMETHOD(false),
4904  USES_TEMPLATES(false),
4905  PASSWORKSPACE(false),
4906  PASSWSVNAMES(true)));
4907 
4908  md_data_raw.push_back(create_mdrecord(
4909  NAME("complex_refr_indexConstant"),
4910  DESCRIPTION(
4911  "Set complex refractive index to a constant value.\n"
4912  "\n"
4913  "Frequency and temperature grids are set to have length 1 (and\n"
4914  "set to the value 0).\n"),
4915  AUTHORS("Oliver Lemke"),
4916  OUT("complex_refr_index"),
4917  GOUT(),
4918  GOUT_TYPE(),
4919  GOUT_DESC(),
4920  IN(),
4921  GIN("refr_index_real", "refr_index_imag"),
4922  GIN_TYPE("Numeric", "Numeric"),
4924  GIN_DESC("Real part of refractive index",
4925  "Imag part of refractive index")));
4926 
4927  md_data_raw.push_back(create_mdrecord(
4928  NAME("complex_refr_indexIceMatzler06"),
4929  DESCRIPTION(
4930  "Refractive index of ice following Matzler06 parameterization.\n"
4931  "\n"
4932  "Calculates temperature dependent complex refractive index of\n"
4933  "hexagonal ice at microwave and sub-mm frequencies (10MHz-3Tz).\n"
4934  "\n"
4935  "This parametrization is also applied by the microwave and\n"
4936  "submm-wave part of the Warren08 model.\n"
4937  "\n"
4938  "References:\n"
4939  "Matzler, C., 2006: Thermal Microwave Radiation: Application for\n"
4940  "Remote Sensing, Microwave dielectric properties of ice, pp. 455-462,\n"
4941  "Inst. Eng. Technol., Stevenage, U. K.\n"
4942  "Warren, S. G., and R. E. Brandt, 2008: Optical constants of ice\n"
4943  "from the ultraviolet to the microwave: A revised compilation,\n"
4944  "J. Geophys. Res., 113, D14220, doi:10.1029/2007JD009744.\n"),
4945  AUTHORS("Jana Mendrok"),
4946  OUT("complex_refr_index"),
4947  GOUT(),
4948  GOUT_TYPE(),
4949  GOUT_DESC(),
4950  IN(),
4951  GIN("data_f_grid", "data_T_grid"),
4952  GIN_TYPE("Vector", "Vector"),
4954  GIN_DESC("Frequency grid for refractive index calculation",
4955  "Temperature grid for refractive index calculation")));
4956 
4957  md_data_raw.push_back(create_mdrecord(
4958  NAME("complex_refr_indexIceWarren84"),
4959  DESCRIPTION(
4960  "Refractive index of ice following Warren84 parameterization.\n"
4961  "\n"
4962  "Calculates complex refractive index of Ice 1H for wavelengths\n"
4963  "between 45 nm and 8.6 m.\n"
4964  "For wavelengths above 167 microns, temperature dependence is\n"
4965  "included for temperatures between 213 and 272K.\n"
4966  "Mainly intended for applications in Earth ice\n"
4967  "clouds and snow, not other planets or interstellar space;\n"
4968  "the temperature dependence or crystalline form of ice may be\n"
4969  "incorrect for these latter applications.\n"
4970  "\n"
4971  "Authors of Fortran function:\n"
4972  "Stephen Warren, Univ. of Washington (1983)\n"
4973  "Bo-Cai Gao, JCESS, Univ. of Maryland (1995)\n"
4974  "Warren Wiscombe, NASA Goddard (1995)\n"
4975  "\n"
4976  "References:\n"
4977  "Warren, S., 1984: Optical Constants of Ice from the Ultraviolet\n"
4978  "to the Microwave, Appl. Opt. 23, 1206-1225\n"
4979  "\n"
4980  "Kou, L., D. Labrie, and P. Chylek, 1994: Refractive indices\n"
4981  "of water and ice in the 0.65- to 2.5-micron spectral range,\n"
4982  "Appl. Opt. 32, 3531-3540\n"
4983  "\n"
4984  "Perovich, D., and J. Govoni, 1991: Absorption Coefficients\n"
4985  "of Ice from 250 to 400 nm, Geophys. Res. Lett. 18, 1233-1235\n"),
4986  AUTHORS("Oliver Lemke"),
4987  OUT("complex_refr_index"),
4988  GOUT(),
4989  GOUT_TYPE(),
4990  GOUT_DESC(),
4991  IN(),
4992  GIN("data_f_grid", "data_T_grid"),
4993  GIN_TYPE("Vector", "Vector"),
4995  GIN_DESC("Frequency grid for refractive index calculation",
4996  "Temperature grid for refractive index calculation")));
4997 
4998  md_data_raw.push_back(create_mdrecord(
4999  NAME("complex_refr_indexWaterLiebe93"),
5000  DESCRIPTION(
5001  "Complex refractive index of liquid water according to Liebe 1993.\n"
5002  "\n"
5003  "The method treats liquid water without salt. Thus, not valid below\n"
5004  "10 GHz. Upper frequency limit not known, here set to 1000 GHz.\n"
5005  "Model parameters taken from Atmlab function epswater93 (by\n"
5006  "C. Maetzler), which refer to Liebe 1993 without closer\n"
5007  "specifications.\n"
5008  "\n"
5009  "Temperatures must be between -40 and 100 degrees Celsius. The\n"
5010  "accuracy of the parametrization below 0 C is not known by us.\n"),
5011  AUTHORS("Patrick Eriksson", "Oliver Lemke"),
5012  OUT("complex_refr_index"),
5013  GOUT(),
5014  GOUT_TYPE(),
5015  GOUT_DESC(),
5016  IN(),
5017  GIN("data_f_grid", "data_T_grid"),
5018  GIN_TYPE("Vector", "Vector"),
5020  GIN_DESC("Frequency grid for refractive index calculation",
5021  "Temperature grid for refractive index calculation")));
5022 
5023  md_data_raw.push_back(create_mdrecord(
5024  NAME("Copy"),
5025  DESCRIPTION(
5026  "Copy a workspace variable.\n"
5027  "\n"
5028  "This method can copy any workspace variable\n"
5029  "to another workspace variable of the same group. (E.g., a Matrix to\n"
5030  "another Matrix.)\n"
5031  "\n"
5032  "As always, output comes first in the argument list!\n"
5033  "\n"
5034  "Usage example:\n"
5035  "\n"
5036  "Copy(f_grid, p_grid)\n"
5037  "\n"
5038  "Will copy the content of *p_grid* to *f_grid*. The size of *f_grid*\n"
5039  "is adjusted automatically (the normal behaviour for workspace\n"
5040  "methods).\n"),
5041  AUTHORS("Stefan Buehler"),
5042  OUT(),
5043  GOUT("out"),
5044  GOUT_TYPE("Any"),
5045  GOUT_DESC("Destination variable."),
5046  IN(),
5047  GIN("in"),
5048  GIN_TYPE("Any"),
5049  GIN_DEFAULT(NODEF),
5050  GIN_DESC("Source variable."),
5051  SETMETHOD(false),
5052  AGENDAMETHOD(false),
5053  USES_TEMPLATES(true),
5054  PASSWORKSPACE(false),
5055  PASSWSVNAMES(true)));
5056 
5057  md_data_raw.push_back(create_mdrecord(
5058  NAME("covmat1D"),
5059  DESCRIPTION(
5060  "Create 1D covariance matrix.\n"
5061  "\n"
5062  "Creates a 1D covariance matrix for two retrieval quantities on given \n"
5063  " grids from a given functional form. Elements of the covariance matrix\n"
5064  "are computed as\n"
5065  " S_{i,j} = sigma_i * sigma_j * f(d_{i,j} / l_{i,j}) \n"
5066  " where d_{i,j} is the distance between the two grid points and l_{i,j}\n"
5067  " the mean of the correlation lengths of the grid points.\n"
5068  "\n"
5069  " If a cutoff value co is given elements with absolute value less than this \n"
5070  " are set to zero.\n"
5071  "\n"
5072  "The following functional forms are available:\n"
5073  " \"exp\": f(x) = exp(-x) \n"
5074  " \"lin\": f(x) = 1.0 - x, for x > 1.0, 0.0 otherwise \n"
5075  " \"gauss\": f(x) = exp(-x^2) \n"),
5076  AUTHORS("Simon Pfreundschuh"),
5077  OUT(),
5078  GOUT("out"),
5079  GOUT_TYPE("Matrix, Sparse"),
5080  GOUT_DESC("The matrix in which to store the covariance matrix."),
5081  IN(),
5082  GIN("grid_1",
5083  "grid_2",
5084  "sigma_1",
5085  "sigma_2",
5086  "cls_1",
5087  "cls_2",
5088  "co",
5089  "fname"),
5090  GIN_TYPE("Vector",
5091  "Vector",
5092  "Vector",
5093  "Vector",
5094  "Vector",
5095  "Vector",
5096  "Numeric",
5097  "String"),
5098  GIN_DEFAULT(NODEF, "[]", NODEF, "[]", NODEF, "[]", "0.0", NODEF),
5099  GIN_DESC("The retrieval grid for the first retrieval quantity.",
5100  "The retrieval grid for the second retrieval quantity."
5101  " (If empty taken as grid_1)",
5102  "The variances of the first retrieval quantity.",
5103  "The variances of the second retrieval quantity."
5104  "(If empty taken as sigma_1)",
5105  "The correlations lengths of the first retrieval quantity.",
5106  "The correlations lengths of the second retrieval quantity."
5107  "(If empty taken as cls_1)",
5108  "The cutoff value for covariance matrix elements.",
5109  "The name of the functional form to use."),
5110  PASSWORKSPACE(false),
5111  SETMETHOD(false),
5112  USES_TEMPLATES(true)));
5113 
5114  md_data_raw.push_back(create_mdrecord(
5115  NAME("covmat1DMarkov"),
5116  DESCRIPTION(
5117  "Create Markov Process Covariance Matrix.\n"
5118  "\n"
5119  "Create a markov process covariance matrix for a retrieval quantity on \n"
5120  " evenly spaced 1D grid. The correlation between two grid points i,j is \n"
5121  " is computed as \n"
5122  " cov(i,j) = sigma[i] * sigma[j] * exp(- d(i,j) / lc)\n"
5123  " where d(i,j) = abs(grid[i] - grid[j]).\n"
5124  "\n"
5125  "This function also sets covmat_inv_block to the analytically computed inverse\n"
5126  "of the covariance matrix of the markov provess, which is tri-diagonal. Note\n"
5127  "that this requires the retrieval grid to be evenly spaced.\n"),
5128  AUTHORS("Simon Pfreundschuh"),
5129  OUT(),
5130  GOUT("out", "out_inverse"),
5131  GOUT_TYPE("Matrix, Sparse", "Matrix, Sparse"),
5132  GOUT_DESC(
5133  "The matrix in which to store the covariance matrix.",
5134  "The matrix in which to store the inverse of the covariance matrix."),
5135  IN(),
5136  GIN("grid", "sigma", "lc", "co"),
5137  GIN_TYPE("Vector", "Vector", "Numeric", "Numeric"),
5138  GIN_DEFAULT(NODEF, NODEF, NODEF, "0.0"),
5139  GIN_DESC("The retrieval grid.",
5140  "The vairance for each grid point.",
5141  "The correlation length of the Markov process.",
5142  "The cutoff value below which elements will be set to 0.0"),
5143  PASSWORKSPACE(false),
5144  SETMETHOD(false),
5145  USES_TEMPLATES(true)));
5146 
5147  md_data_raw.push_back(create_mdrecord(
5148  NAME("covmatDiagonal"),
5149  DESCRIPTION(
5150  "Sets the matrix in covmat_block to a diagonal matrix with the variances\n"
5151  "provided in *vars* as diagonal elements."
5152  "\n"
5153  "Also sets covmat_block_inv to the inverse of the block so that the\n"
5154  "computation of the inverse is avoided.\n"),
5155  AUTHORS("Simon Pfreundschuh"),
5156  OUT(),
5157  GOUT("out", "out_inverse"),
5158  GOUT_TYPE("Matrix, Sparse", "Matrix, Sparse"),
5159  GOUT_DESC(
5160  "The matrix in which to store the covariance matrix.",
5161  "The matrix in which to store the inverse of the covariance matrix."),
5162  IN(),
5163  GIN("vars"),
5164  GIN_TYPE("Vector"),
5165  GIN_DEFAULT(NODEF),
5166  GIN_DESC("Variances to be used as diagonal elements of covmat_block."),
5167  PASSWORKSPACE(false),
5168  SETMETHOD(false),
5169  USES_TEMPLATES(true)));
5170 
5171  md_data_raw.push_back(create_mdrecord(
5172  NAME("covmat_seAddBlock"),
5173  DESCRIPTION(
5174  "Add a block to the measurement covariance matrix *covmat_se*\n"
5175  "\n"
5176  "This functions adds a given dense or sparse matrix as block to the covariance\n"
5177  "matrix *covmat_sx*. The position of the block can be given by the generic\n"
5178  "arguments *i* and *j*. Note that diagonal blocks must be added in order starting from\n"
5179  " in the top left corner. If an off-diagonal block is added it must have corresponding\n"
5180  " existing blocks on the diagonal and these must be consistent with the dimensions\n"
5181  " of the block. If *i* and *j* are not provided, the blok will be added\n"
5182  "at the first free spot on the diagonal.\n"),
5183  AUTHORS("Simon Pfreundschuh"),
5184  OUT("covmat_se"),
5185  GOUT(),
5186  GOUT_TYPE(),
5187  GOUT_DESC(),
5188  IN("covmat_se"),
5189  GIN("block", "i", "j"),
5190  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5191  GIN_DEFAULT(NODEF, "-1", "-1"),
5192  GIN_DESC("The block to add to the covariance matrix",
5193  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5194  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5195  PASSWORKSPACE(false),
5196  SETMETHOD(false),
5197  USES_TEMPLATES(true)));
5198 
5199  md_data_raw.push_back(create_mdrecord(
5200  NAME("covmat_seAddInverseBlock"),
5201  DESCRIPTION(
5202  "Add the inverse of a block to covariance matrix *covmat_se*\n"
5203  "\n"
5204  "This functions adds a given matrix as the inverse of a block in the covariance\n"
5205  "matrix *covmat_se*. The purpose of this function is to allow the user to\n"
5206  "to use a precomputed inverse for this block in the covariance matrix, that may\n"
5207  "for example have been obtained analytically.\n"
5208  "\n"
5209  "This function requires the corresponding non-inverse block to already be present in *covmat_se*"
5210  "\n"
5211  "\n Note that for this to work this retrieval quantity must be independent from\n"
5212  "other retrieval quantities that do not have an inverse. Otherwise the inverse\n"
5213  "will be ignored and recomputed numerically.\n"
5214  "\n"
5215  "For the rest, the same requirements as for *covmat_seAddBlock* apply.\n"),
5216  AUTHORS("Simon Pfreundschuh"),
5217  OUT("covmat_se"),
5218  GOUT(),
5219  GOUT_TYPE(),
5220  GOUT_DESC(),
5221  IN("covmat_se"),
5222  GIN("block", "i", "j"),
5223  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5224  GIN_DEFAULT(NODEF, "-1", "-1"),
5225  GIN_DESC("The inverse block to add to the covariance matrix",
5226  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5227  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5228  PASSWORKSPACE(false),
5229  SETMETHOD(false),
5230  USES_TEMPLATES(true)));
5231 
5232  md_data_raw.push_back(create_mdrecord(
5233  NAME("covmat_seSet"),
5234  DESCRIPTION(
5235  "Set covmat_se to a given matrix.\n"
5236  "\n"
5237  "This sets the measurement covariance matrix *covmat_se* to\n"
5238  "the matrix given by the generic input *covmat*. The covariance\n"
5239  "matrix can be of type CovarianceMatrix, Matrix or Sparse.\n"),
5240  AUTHORS("Simon Pfreundschuh"),
5241  OUT("covmat_se"),
5242  GOUT(),
5243  GOUT_TYPE(),
5244  GOUT_DESC(),
5245  IN(),
5246  GIN("covmat"),
5247  GIN_TYPE("CovarianceMatrix, Matrix, Sparse"),
5248  GIN_DEFAULT(NODEF),
5249  GIN_DESC("The matrix to set as the covariance matrix."),
5250  PASSWORKSPACE(false),
5251  SETMETHOD(false),
5252  USES_TEMPLATES(true)));
5253 
5254  md_data_raw.push_back(create_mdrecord(
5255  NAME("covmat_sxSet"),
5256  DESCRIPTION(
5257  "Set covmat_sx to a given matrix.\n"
5258  "\n"
5259  "This sets the measurement covariance matrix *covmat_sx* to\n"
5260  "the matrix given by the generic input *covmat*. The covariance\n"
5261  "matrix can be of type CovarianceMatrix, Matrix or Sparse.\n"),
5262  AUTHORS("Simon Pfreundschuh"),
5263  OUT("covmat_sx"),
5264  GOUT(),
5265  GOUT_TYPE(),
5266  GOUT_DESC(),
5267  IN(),
5268  GIN("covmat"),
5269  GIN_TYPE("CovarianceMatrix, Matrix, Sparse"),
5270  GIN_DEFAULT(NODEF),
5271  GIN_DESC("The matrix to set as the covariance matrix."),
5272  PASSWORKSPACE(false),
5273  SETMETHOD(false),
5274  USES_TEMPLATES(true)));
5275 
5276  md_data_raw.push_back(create_mdrecord(
5277  NAME("covmat_sxAddBlock"),
5278  DESCRIPTION(
5279  "Add a block to the a priori covariance matrix *covmat_sx*\n"
5280  "\n"
5281  "This functions adds a given matrix as a block in the covariance\n"
5282  "matrix *covmat_sx*. The position of the block can be given by the generic\n"
5283  "arguments *i* and *j*, which should give the index of the retrieval quantity in\n"
5284  "*jacobian_quantities*, which is given just by the order the quantities have been\n"
5285  "added to the retrieval.\n"
5286  "\n"
5287  "If arguments *i* and *j* are omitted, the block will be added as diagonal block\n"
5288  "for the last added retrieval quantity.\n"
5289  "\n"
5290  "If provided, the index *i* must be less than or equal to *j*. Also the provided\n"
5291  "block must be consistent with the corresponding retrieval quantities.\n"),
5292  AUTHORS("Simon Pfreundschuh"),
5293  OUT("covmat_sx"),
5294  GOUT(),
5295  GOUT_TYPE(),
5296  GOUT_DESC(),
5297  IN("covmat_sx", "jacobian_quantities"),
5298  GIN("block", "i", "j"),
5299  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5300  GIN_DEFAULT(NODEF, "-1", "-1"),
5301  GIN_DESC("The block to add to the covariance matrix",
5302  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5303  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5304  PASSWORKSPACE(false),
5305  SETMETHOD(false),
5306  USES_TEMPLATES(true)));
5307 
5308  md_data_raw.push_back(create_mdrecord(
5309  NAME("covmat_sxAddInverseBlock"),
5310  DESCRIPTION(
5311  "Add the inverse of a block in covariance matrix *covmat_sx*\n"
5312  "\n"
5313  "This functions adds a given matrix as the inverse of a block in the covariance\n"
5314  "matrix *covmat_sx*. The purpose of this function is to allow the user to\n"
5315  "to use a precomputed inverse for this block in the covariance matrix, the may\n"
5316  "for example by obtained analytically.\n"
5317  "\n"
5318  "This function requires the non-inverse block to already be present in *covmat_sx*"
5319  "\n"
5320  "\n Note that for this to work this retrieval quantity must be independent from\n"
5321  "other retrieval quantities that do not have an inverse. Otherwise the inverse\n"
5322  "will be ignored and recomputed numerically.\n"
5323  "\n"
5324  "For the rest, the same requirements as for *covmat_sxAddBlock* apply.\n"),
5325  AUTHORS("Simon Pfreundschuh"),
5326  OUT("covmat_sx"),
5327  GOUT(),
5328  GOUT_TYPE(),
5329  GOUT_DESC(),
5330  IN("covmat_sx", "jacobian_quantities"),
5331  GIN("block", "i", "j"),
5332  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5333  GIN_DEFAULT(NODEF, "-1", "-1"),
5334  GIN_DESC("The inverse block to add to the covariance matrix",
5335  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5336  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5337  PASSWORKSPACE(false),
5338  SETMETHOD(false),
5339  USES_TEMPLATES(true)));
5340 
5341  md_data_raw.push_back(create_mdrecord(
5342  NAME("covmat_sxExtractSqrtDiagonal"),
5343  DESCRIPTION(
5344  "Extract the square root of the diagonal of the state space covariance matrix."
5345  "\n"
5346  "This function extracts the diagonal of the state space covariance matrix\n"
5347  "*covmat_sx* and computes its square root. The resulting vector can then\n"
5348  "be used as *x_norm* argument for the OEM method to avoid scaling problems.\n"),
5349  AUTHORS("Simon Pfreundschuh"),
5350  OUT(),
5351  GOUT("x_norm"),
5352  GOUT_TYPE("Vector"),
5353  GOUT_DESC("The vector containing the square root of the diagonal elements"
5354  " of *covmat_sx*"),
5355  IN("covmat_sx"),
5356  GIN(),
5357  GIN_TYPE(),
5358  GIN_DEFAULT(),
5359  GIN_DESC(),
5360  PASSWORKSPACE(false),
5361  SETMETHOD(false)));
5362 
5363  md_data_raw.push_back(create_mdrecord(
5364  NAME("Delete"),
5365  DESCRIPTION(
5366  "Deletes a workspace variable.\n"
5367  "\n"
5368  "The variable is marked as uninitialized and its memory freed.\n"
5369  "It is not removed from the workspace though, therefore you\n"
5370  "don't need to/can't call Create for this variable again.\n"),
5371  AUTHORS("Oliver Lemke"),
5372  OUT(),
5373  GOUT(),
5374  GOUT_TYPE(),
5375  GOUT_DESC(),
5376  IN(),
5377  GIN("v"),
5378  GIN_TYPE("Any"),
5379  GIN_DEFAULT(NODEF),
5380  GIN_DESC("Variable to be deleted."),
5381  SETMETHOD(false),
5382  AGENDAMETHOD(false),
5383  USES_TEMPLATES(true),
5384  PASSWORKSPACE(true),
5385  PASSWSVNAMES(true)));
5386 
5387  md_data_raw.push_back(create_mdrecord(
5388  NAME("diameter_maxFromDiameter_volume_equ"),
5389  DESCRIPTION(
5390  "Calculates maximum and area equivalent diameters from volume\n"
5391  "equivalent diameter.\n"
5392  "\n"
5393  "This is primarily a help function for using the T-matrix method\n"
5394  "and only a few particle shapes are handled. "
5395  "\n"
5396  "For shapes handled and further comments on the input arguments, see\n"
5397  "*scat_data_singleTmatrix*.\n"
5398  "\n"
5399  "Area equivalent diameter is the equivalent sphere diameter\n"
5400  "corresponding to the \"maximum axial area\". This is the largest\n"
5401  "cross-sectional area of the particle, observed either along the\n"
5402  "particle's main axis or in the perpendicular direction. That is,\n"
5403  "for a cylinder having diameter d and thickness h, this area is\n"
5404  "either (pi*d^2)/4 or (h*d).\n"),
5405  AUTHORS("Johan Strandgren", "Patrick Eriksson"),
5406  OUT(),
5407  GOUT("diameter_max", "diameter_area_equ"),
5408  GOUT_TYPE("Numeric", "Numeric"),
5409  GOUT_DESC(
5410  "Maximum dimension of the particle.",
5411  "Maximum axial area equivalent diameter of the particle, see above."),
5412  IN(),
5413  GIN("shape", "diameter_volume_equ", "aspect_ratio"),
5414  GIN_TYPE("String", "Numeric", "Numeric"),
5416  GIN_DESC("Particle shape.",
5417  "Particle equivalent volume diameter.",
5418  "Particle aspect ratio.")));
5419 
5420  md_data_raw.push_back(create_mdrecord(
5421  NAME("diameter_volume_equFromDiameter_max"),
5422  DESCRIPTION(
5423  "Converts from maximum to volume equivalent diameter.\n"
5424  "\n"
5425  "This is primarily a help function for using the T-matrix part\n"
5426  "and only a few particle shapes are handled. "
5427  "\n"
5428  "For shapes handled and further comments on the input arguments,\n"
5429  "see *scat_data_singleTmatrix*.\n"
5430  "\n"
5431  "Also the volume is provided. It is simply sqrt(pi*dveq^3/6).\n"),
5432  AUTHORS("Johan Strandgren", "Patrick Eriksson"),
5433  OUT(),
5434  GOUT("diameter_volume_equ", "volume"),
5435  GOUT_TYPE("Numeric", "Numeric"),
5436  GOUT_DESC("Particle volume equivalent diameter.",
5437  "Volume of the particle."),
5438  IN(),
5439  GIN("shape", "diameter_max", "aspect_ratio"),
5440  GIN_TYPE("String", "Numeric", "Numeric"),
5442  GIN_DESC("Particle shape.",
5443  "Maximum dimension of the particle.",
5444  "Particle aspect ratio.")));
5445 
5446  md_data_raw.push_back(create_mdrecord(
5447  NAME("DiagonalMatrix"),
5448  DESCRIPTION(
5449  "Create a diagonal matrix from a vector."
5450  "\n"
5451  "This creates a dense or sparse diagonal matrix with the elements of the given vector\n"
5452  " on the diagonal.\n"),
5453  AUTHORS("Simon Pfreundschuh"),
5454  OUT(),
5455  GOUT("out"),
5456  GOUT_TYPE("Matrix, Sparse"),
5457  GOUT_DESC("The diagonal matrix"),
5458  IN(),
5459  GIN("v"),
5460  GIN_TYPE("Vector"),
5461  GIN_DEFAULT(NODEF),
5462  GIN_DESC("The vector containing the diagonal elements.")));
5463 
5464  md_data_raw.push_back(create_mdrecord(
5465  NAME("DiffZaAa"),
5466  DESCRIPTION(
5467  "Derives the difference betwenn zenith and azimuth angles.\n"
5468  "\n"
5469  "Determines the difference between a set of angles (*other_los*)\n"
5470  "and a reference direction (*ref_los*). This method reverses the\n"
5471  "addition made by *AddZaAa*.\n"),
5472  AUTHORS("Patrick Eriksson"),
5473  OUT(),
5474  GOUT("dlos"),
5475  GOUT_TYPE("Matrix"),
5476  GOUT_DESC("Derived differences in line-of-sight."),
5477  IN(),
5478  GIN("ref_los", "other_los"),
5479  GIN_TYPE("Vector", "Matrix"),
5481  GIN_DESC("Reference line-of-sight (a single LOS).",
5482  "Other line-of-sights (can be multiple LOS).")));
5483 
5484  md_data_raw.push_back(create_mdrecord(
5485  NAME("DisortCalc"),
5486  DESCRIPTION(
5487  "Interface to the DISORT scattering solver (by Stamnes et al.).\n"
5488  "\n"
5489  "DISCLAIMER: There is a couple of known issues with the current\n"
5490  "implementation (see below). Use this WSM with care and only if\n"
5491  "these limitations/requirements are fulfilled. Results might be\n"
5492  "erroneous otherwise.\n"
5493  "\n"
5494  "DISORT provides the radiation field (*cloudbox_field*) from a scalar\n"
5495  "1D scattering solution assuming a plane-parallel atmosphere (flat\n"
5496  "Earth). Only totally randomly oriented particles are allowed.\n"
5497  "Refraction is not taken into account. Only Lambertian surface\n"
5498  "reflection is handled.\n"
5499  "\n"
5500  "*nstreams* is the number of polar angles taken into account\n"
5501  "internally in the scattering solution, *za_grid* is the\n"
5502  "polar angle grid on which *cloudbox_field* is provided.\n"
5503  "*nstreams* determines the angular resolution, hence the accuracy,\n"
5504  "of the scattering solution. The more anisotropic the bulk scattering\n"
5505  "matrix, the more streams are required. The computational burden\n"
5506  "increases approximately linearly with *nstreams*. The default value\n"
5507  "(8) is sufficient for most microwave scattering calculations. It is\n"
5508  "likely insufficient for IR calculations involving ice clouds,\n"
5509  "though.\n"
5510  "\n"
5511  "Further, *za_grid* determines the resolution of the output\n"
5512  "radiation field. The size of *za_grid* has no practical\n"
5513  "impact on computation time in the case of Disort and higher\n"
5514  "resolution generally improves the interpolation results, hence\n"
5515  "larger *za_grid* are recommended. To ensure sufficient\n"
5516  "interpolation accuracy, we require a (hardcoded) minimum size of 38.\n"
5517  "\n"
5518  "Different sphericity levels are emulated here by embedding DISORT\n"
5519  "in different ways and using different output. The available options\n"
5520  "(from low to high sphericity level) are:\n"
5521  "- Cloudbox extends over whole atmosphere (e.g. by setting cloudbox\n"
5522  " from *cloudboxSetFullAtm*).\n"
5523  "- Cloudbox extends over a limited part of the atmosphere only (e.g.\n"
5524  " by setting cloudbox from *cloudboxSetAutomatically* or\n"
5525  " *cloudboxSetManually*). Internally, DISORT is run over the whole\n"
5526  " atmosphere, but only the radiation field within the cloudbox is\n"
5527  " passed on and used further in ARTS (e.g. by *yCalc*).\n"
5528  "\n"
5529  "Known issues of ARTS implementation:\n"
5530  "- Surface altitude is not an interface parameter. Surface is\n"
5531  " implicitly assumed to be at the lowest atmospheric level.\n"
5532  "- Scattering angle grids of all scattering elements have to be\n"
5533  " identical (except if *pfct_method* is 'interpolate').\n"
5534  "\n"
5535  "Keyword *pfct_method* allows to chose the method to extract phase\n"
5536  "function. 'interpolate' considers temperature dependence. Others\n"
5537  "neglect it by chosing one specific temperature grid point from the\n"
5538  "single scattering data: 'low' choses the lowest T-point, 'high' the\n"
5539  "highest T-point, and 'median' the median T-point. As different\n"
5540  "scattering elements can have different temperature grids, the actual\n"
5541  "temperature value used can differ between the scattering elements.\n"
5542  "Currently, other methods than 'interpolate' require all scattering\n"
5543  "elements to be given on identical scattering angle grids.\n"
5544  "Note that this keyword solely affects the phase function;\n"
5545  "extinction/absorption/scattering cross sections are always\n"
5546  "interpolated to the actual temperature.\n"),
5547  AUTHORS("Claudia Emde, Jana Mendrok"),
5548  OUT("cloudbox_field"),
5549  GOUT(),
5550  GOUT_TYPE(),
5551  GOUT_DESC(),
5552  IN("atmfields_checked",
5553  "atmgeom_checked",
5554  "scat_data_checked",
5555  "cloudbox_checked",
5556  "cloudbox_on",
5557  "cloudbox_limits",
5558  "propmat_clearsky_agenda",
5559  "atmosphere_dim",
5560  "pnd_field",
5561  "t_field",
5562  "z_field",
5563  "vmr_field",
5564  "p_grid",
5565  "scat_data",
5566  "f_grid",
5567  "za_grid",
5568  "stokes_dim",
5569  "z_surface",
5570  "surface_skin_t",
5571  "surface_scalar_reflectivity"),
5572  GIN("nstreams", "pfct_method", "Npfct", "quiet"),
5573  GIN_TYPE("Index", "String", "Index", "Index"),
5574  GIN_DEFAULT("8", "median", "181", "0"),
5575  GIN_DESC("Number of polar angle directions (streams) in DISORT "
5576  "solution (must be an even number).",
5577  "Flag which method to apply to derive phase function.",
5578  "Number of angular grid points to calculate bulk phase"
5579  " function on (and derive Legendre polnomials from). If <0,"
5580  " the finest za_grid from scat_data will be used.",
5581  "Silence C Disort warnings.")));
5582 
5583  md_data_raw.push_back(create_mdrecord(
5584  NAME("DisortCalcWithARTSSurface"),
5585  DESCRIPTION(
5586  "DISORT with surface.\n"
5587  ),
5588  AUTHORS("Claudia Emde, Jana Mendrok"),
5589  OUT("cloudbox_field"),
5590  GOUT(),
5591  GOUT_TYPE(),
5592  GOUT_DESC(),
5593  IN("atmfields_checked",
5594  "atmgeom_checked",
5595  "scat_data_checked",
5596  "cloudbox_checked",
5597  "cloudbox_on",
5598  "cloudbox_limits",
5599  "propmat_clearsky_agenda",
5600  "surface_rtprop_agenda",
5601  "atmosphere_dim",
5602  "pnd_field",
5603  "t_field",
5604  "z_field",
5605  "vmr_field",
5606  "p_grid",
5607  "scat_data",
5608  "f_grid",
5609  "za_grid",
5610  "stokes_dim"),
5611  GIN("nstreams", "pfct_method", "Npfct", "quiet"),
5612  GIN_TYPE("Index", "String", "Index", "Index"),
5613  GIN_DEFAULT("8", "median", "181", "0"),
5614  GIN_DESC("Number of polar angle directions (streams) in DISORT "
5615  "solution (must be an even number).",
5616  "Flag which method to apply to derive phase function.",
5617  "Number of angular grid points to calculate bulk phase"
5618  " function on (and derive Legendre polnomials from). If <0,"
5619  " the finest za_grid from scat_data will be used.",
5620  "Silence C Disort warnings.")));
5621 
5622  md_data_raw.push_back(create_mdrecord(
5623  NAME("DisortCalcClearsky"),
5624  DESCRIPTION(
5625  "Interface to DISORT for running clear-sky cases.\n"
5626  "\n"
5627  "The method runs DISORT with *pnd_field* set to zero.\n"
5628  "\n"
5629  "Note that this version returns *spectral_radiance_field*, i.e.\n"
5630  "the solution for the full atmosphere. The standard *DisortCalc*\n"
5631  "only returns the field inside the cloudbox.\n"),
5632  AUTHORS("Patrick Eriksson"),
5633  OUT("spectral_radiance_field"),
5634  GOUT(),
5635  GOUT_TYPE(),
5636  GOUT_DESC(),
5637  IN("atmfields_checked",
5638  "atmgeom_checked",
5639  "propmat_clearsky_agenda",
5640  "atmosphere_dim",
5641  "t_field",
5642  "z_field",
5643  "vmr_field",
5644  "p_grid",
5645  "f_grid",
5646  "za_grid",
5647  "stokes_dim",
5648  "z_surface",
5649  "surface_skin_t",
5650  "surface_scalar_reflectivity"),
5651  GIN("nstreams", "quiet"),
5652  GIN_TYPE("Index", "Index"),
5653  GIN_DEFAULT("8", "0"),
5654  GIN_DESC("Number of polar angle directions (streams) in DISORT "
5655  "solution (must be an even number).",
5656  "Silence C Disort warnings.")));
5657 
5658  md_data_raw.push_back(create_mdrecord(
5659  NAME("DOBatchCalc"),
5660  DESCRIPTION(
5661  "Performs batch calculations for radiation fields.\n"
5662  "\n"
5663  "We perform *ybatch_n* jobs, starting at index *ybatch_start*. (Zero\n"
5664  "based indexing, as usual.) The output arrays will have\n"
5665  "ybatch_n elements. Indices in the output array start\n"
5666  "with zero, independent of *ybatch_start*.\n"
5667  "\n"
5668  "WARNING, MEMORY INTENSIVE!!!: Since the outputs of this methods can\n"
5669  "be very large, make sure you only pass back output you need.\n"
5670  "Estimate the size of your output by looking at the dimensions\n"
5671  "beforehand. If you only want to pass back some fields, make sure to\n"
5672  "empty the others at the end of your *dobatch_calc_agenda*. E.g.:\n"
5673  "Tensor7SetConstant(cloudbox_field, 0, 0, 0, 0, 0, 0, 0, 0.)\n"
5674  "\n"
5675  "The method performs the following:\n"
5676  " 1. Sets *ybatch_index* = *ybatch_start*.\n"
5677  " 2. Performs a-d until\n"
5678  " *ybatch_index* = *ybatch_start* + *ybatch_n*.\n"
5679  " a. Executes *dobatch_calc_agenda*.\n"
5680  " b. If *ybatch_index* = *ybatch_start*, resizes the output\n"
5681  " arrays based on *ybatch_n*.\n"
5682  " c. Copies calculated fields to *ybatch_index* - *ybatch_start*\n"
5683  " of output arrays.\n"
5684  " d. Adds 1 to *ybatch_index*.\n"
5685  "\n"
5686  "Beside the *dobatch_calc_agenda*, the WSVs *ybatch_start*\n"
5687  "and *ybatch_n* must be set before calling this method.\n"
5688  "\n"
5689  "The input variable *ybatch_start* is set to a default of zero in\n"
5690  "*general.arts*.\n"),
5691  AUTHORS("Oliver Lemke"),
5692  OUT("dobatch_cloudbox_field",
5693  "dobatch_radiance_field",
5694  "dobatch_irradiance_field",
5695  "dobatch_spectral_irradiance_field"),
5696  GOUT(),
5697  GOUT_TYPE(),
5698  GOUT_DESC(),
5699  IN("ybatch_start", "ybatch_n", "dobatch_calc_agenda"),
5700  GIN("robust"),
5701  GIN_TYPE("Index"),
5702  GIN_DEFAULT("0"),
5703  GIN_DESC("A flag with value 1 or 0. If set to one, the batch\n"
5704  "calculation will continue, even if individual jobs fail. In\n"
5705  "that case, a warning message is written to screen and file\n"
5706  "(out1 output stream), and the output array entry for the\n"
5707  "failed job in the output fields is left empty.")));
5708 
5709  md_data_raw.push_back(create_mdrecord(
5710  NAME("DOAngularGridsSet"),
5711  DESCRIPTION(
5712  "Sets the angular grids for Discrete Ordinate type scattering\n"
5713  "calculations.\n"
5714  "\n"
5715  "This method sets the angular grids for the Discrete Ordinate type\n"
5716  "scattering calculations (DOIT, DISORT). For down- und up-looking\n"
5717  "geometries it suffices to define *N_za_grid* (both solvers) and\n"
5718  "*N_aa_grid* (DOIT). From these numbers equally spaced grids are\n"
5719  "created and stored in the WSVs *za_grid* and *aa_grid*.\n"
5720  "\n"
5721  "For limb simulations it is important to use an optimized zenith\n"
5722  "angle grid with a very fine resolution around the horizon\n"
5723  "(za=90 degrees). Such a grid can be generated using\n"
5724  "*doit_za_grid_optCalc*. To be applied, the name of the file holding\n"
5725  "the optimized angle grid has to be given (*za_grid_opt_file*).\n"
5726  "\n"
5727  "When an optimized grid is present, the equidistant grid is used for\n"
5728  "the calculation of the scattering integrals, while the optimized\n"
5729  "grid is applied for the integration of the radiative transfer\n"
5730  "equation. Otherwise the equidistant grid is used throughout. For\n"
5731  "down-looking cases using the equidistant grid typically suffices\n"
5732  "and speeds up the calculations.\n"),
5733  AUTHORS("Claudia Emde"),
5734  OUT("doit_za_grid_size", "aa_grid", "za_grid"),
5735  GOUT(),
5736  GOUT_TYPE(),
5737  GOUT_DESC(),
5738  IN(),
5739  GIN("N_za_grid", "N_aa_grid", "za_grid_opt_file"),
5740  GIN_TYPE("Index", "Index", "String"),
5741  GIN_DEFAULT(NODEF, "1", ""),
5742  GIN_DESC("Number of grid points in zenith angle grid. "
5743  "Recommended value is 19.",
5744  "Number of grid points in azimuth angle grid. "
5745  "Recommended value is 37.",
5746  "Name of special grid for RT part.")));
5747 
5748  md_data_raw.push_back(create_mdrecord(
5749  NAME("DoitCalc"),
5750  DESCRIPTION(
5751  "Main DOIT method.\n"
5752  "\n"
5753  "This method executes *doit_mono_agenda* for each frequency\n"
5754  "in *f_grid*. The output is the radiation field inside the cloudbox\n"
5755  "(*cloudbox_field*).\n"),
5756  AUTHORS("Claudia Emde"),
5757  OUT("cloudbox_field"),
5758  GOUT(),
5759  GOUT_TYPE(),
5760  GOUT_DESC(),
5761  IN("cloudbox_field",
5762  "atmfields_checked",
5763  "atmgeom_checked",
5764  "cloudbox_checked",
5765  "scat_data_checked",
5766  "cloudbox_on",
5767  "f_grid",
5768  "doit_mono_agenda",
5769  "doit_is_initialized"),
5770  GIN(),
5771  GIN_TYPE(),
5772  GIN_DEFAULT(),
5773  GIN_DESC()));
5774 
5775  md_data_raw.push_back(create_mdrecord(
5776  NAME("DoitGetIncoming"),
5777  DESCRIPTION(
5778  "Calculates incoming radiation field of the cloudbox by repeated\n"
5779  "radiative transfer calculations.\n"
5780  "\n"
5781  "The method performs monochromatic pencil beam calculations for\n"
5782  "all grid positions on the cloudbox boundary, and all directions\n"
5783  "given by scattering angle grids (*scat_za/aa_grid*). Found radiances\n"
5784  "are stored in *cloudbox_field* which can be used as boundary\n"
5785  "conditions when scattering inside the cloud box is solved by the\n"
5786  "*DoitCalc* method.\n"
5787  "\n"
5788  "Note that *cloudbox_field* will always hold intensity in terms of\n"
5789  "radiances, regardless of the setting of *iy_unit* (unit conversion\n"
5790  "is done within *yCalc* or *iyCalc*, which will provide their output\n"
5791  "in terms of the specified *iy_unit*; no explicit unit conversion by\n"
5792  "the user necessary.).\n"),
5793  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
5794  OUT("cloudbox_field"),
5795  GOUT(),
5796  GOUT_TYPE(),
5797  GOUT_DESC(),
5798  IN("cloudbox_field",
5799  "atmfields_checked",
5800  "atmgeom_checked",
5801  "cloudbox_checked",
5802  "doit_is_initialized",
5803  "iy_main_agenda",
5804  "atmosphere_dim",
5805  "lat_grid",
5806  "lon_grid",
5807  "z_field",
5808  "nlte_field",
5809  "cloudbox_on",
5810  "cloudbox_limits",
5811  "f_grid",
5812  "stokes_dim",
5813  "za_grid",
5814  "aa_grid"),
5815  GIN("rigorous", "maxratio"),
5816  GIN_TYPE("Index", "Numeric"),
5817  GIN_DEFAULT("1", "100"),
5818  GIN_DESC(
5819  "Fail if incoming field is not safely interpolable.",
5820  "Maximum allowed ratio of two radiances regarded as interpolable.")));
5821 
5822  md_data_raw.push_back(create_mdrecord(
5823  NAME("DoitGetIncoming1DAtm"),
5824  DESCRIPTION(
5825  "As *DoitGetIncoming* but assumes clear sky part to be 1D."
5826  "\n"
5827  "The incoming field is calculated only for one position and azimuth\n"
5828  "angle for each cloud box boundary, and obtained values are used\n"
5829  "for all other postions and azimuth angles. This works if a 3D\n"
5830  "cloud box is put into an 1D background atmosphere.\n"
5831  "\n"
5832  "This method can only be used for 3D cases.\n"),
5833  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
5834  OUT("cloudbox_field", "cloudbox_on"),
5835  GOUT(),
5836  GOUT_TYPE(),
5837  GOUT_DESC(),
5838  IN("cloudbox_field",
5839  "atmfields_checked",
5840  "atmgeom_checked",
5841  "cloudbox_checked",
5842  "doit_is_initialized",
5843  "iy_main_agenda",
5844  "atmosphere_dim",
5845  "lat_grid",
5846  "lon_grid",
5847  "z_field",
5848  "nlte_field",
5849  "cloudbox_on",
5850  "cloudbox_limits",
5851  "f_grid",
5852  "stokes_dim",
5853  "za_grid",
5854  "aa_grid"),
5855  GIN(),
5856  GIN_TYPE(),
5857  GIN_DEFAULT(),
5858  GIN_DESC()));
5859 
5860  md_data_raw.push_back(create_mdrecord(
5861  NAME("DoitInit"),
5862  DESCRIPTION(
5863  "Initialises variables for DOIT scattering calculations.\n"
5864  "\n"
5865  "Note that multi-dimensional output variables (Tensors, specifically)\n"
5866  "are NaN-initialized. That is, this methods needs to be called\n"
5867  "BEFORE other WSMs that provide input to *DoitCalc*, e.g. before\n"
5868  "*DoitGetIncoming*.\n"),
5869  AUTHORS("Claudia Emde"),
5870  OUT("doit_scat_field", "cloudbox_field", "doit_is_initialized"),
5871  GOUT(),
5872  GOUT_TYPE(),
5873  GOUT_DESC(),
5874  IN("stokes_dim",
5875  "atmosphere_dim",
5876  "f_grid",
5877  "za_grid",
5878  "aa_grid",
5879  "doit_za_grid_size",
5880  "cloudbox_on",
5881  "cloudbox_limits"),
5882  GIN(),
5883  GIN_TYPE(),
5884  GIN_DEFAULT(),
5885  GIN_DESC()));
5886 
5887  md_data_raw.push_back(create_mdrecord(
5888  NAME("DoitScatteringDataPrepare"),
5889  DESCRIPTION(
5890  "Prepares single scattering data for a DOIT scattering calculation.\n"
5891  "\n"
5892  "First the scattering data is interpolated in frequency using\n"
5893  "*scat_data_monoCalc*. Then the phase matrix data is\n"
5894  "transformed or interpolated from the raw data to the laboratory frame\n"
5895  "for all possible combinations of the angles contained in the angular\n"
5896  "grids which are set in *DOAngularGridsSet*. The resulting phase\n"
5897  "matrices are stored in *pha_mat_sptDOITOpt*.\n"),
5898  AUTHORS("Claudia Emde"),
5899  OUT("pha_mat_sptDOITOpt", "scat_data_mono", "pha_mat_doit", "aa_grid"),
5900  GOUT(),
5901  GOUT_TYPE(),
5902  GOUT_DESC(),
5903  IN("doit_za_grid_size",
5904  "aa_grid",
5905  "scat_data",
5906  "scat_data_checked",
5907  "f_index",
5908  "atmosphere_dim",
5909  "stokes_dim",
5910  "t_field",
5911  "cloudbox_limits",
5912  "pnd_field",
5913  "pha_mat_spt_agenda"),
5914  GIN(),
5915  GIN_TYPE(),
5916  GIN_DEFAULT(),
5917  GIN_DESC()));
5918 
5919  md_data_raw.push_back(create_mdrecord(
5920  NAME("DoitWriteIterationFields"),
5921  DESCRIPTION(
5922  "Writes DOIT iteration fields.\n"
5923  "\n"
5924  "This method writes intermediate iteration fields to xml-files. The\n"
5925  "method can be used as a part of *doit_conv_test_agenda*.\n"
5926  "\n"
5927  "The iterations to be stored are specified by *iterations*, e.g.:\n"
5928  " iterations = [3, 6, 9]\n"
5929  "In this case the 3rd, 6th and 9th iterations are stored.\n"
5930  "If a number is larger than the total number of iterations, this\n"
5931  "number is ignored. If all iterations should be stored set\n"
5932  " iterations = [-1]\n"
5933  "\n"
5934  "The frequencies to be stored are specified by *frequencies* in the\n"
5935  "same way as the iterations. The frequency index corresponds to the\n"
5936  "order of frequencies in *f_grid*.\n"
5937  "\n"
5938  "The output files are named doit_iteration_fX_iY.xml with X being the\n"
5939  "frequency index and iY the iteration counter.\n"),
5940  AUTHORS("Claudia Emde"),
5941  OUT(),
5942  GOUT(),
5943  GOUT_TYPE(),
5944  GOUT_DESC(),
5945  IN("doit_iteration_counter", "cloudbox_field_mono", "f_index"),
5946  GIN("iterations", "frequencies"),
5947  GIN_TYPE("ArrayOfIndex", "ArrayOfIndex"),
5948  GIN_DEFAULT("[-1]", "[-1]"),
5949  GIN_DESC("Selection of iterations to store.",
5950  "Selection of frequencies to store.")));
5951 
5952  md_data_raw.push_back(create_mdrecord(
5953  NAME("doit_conv_flagAbs"),
5954  DESCRIPTION(
5955  "DOIT convergence test (maximum absolute difference).\n"
5956  "\n"
5957  "The function calculates the absolute differences for two successive\n"
5958  "iteration fields. It picks out the maximum values for each Stokes\n"
5959  "component separately. The convergence test is fullfilled under the\n"
5960  "following conditions:\n"
5961  " |I(m+1) - I(m)| < epsilon_1 Intensity.\n"
5962  " |Q(m+1) - Q(m)| < epsilon_2 The other Stokes components.\n"
5963  " |U(m+1) - U(m)| < epsilon_3 \n"
5964  " |V(m+1) - V(m)| < epsilon_4 \n"
5965  "These conditions have to be valid for all positions in the\n"
5966  "cloudbox and for all directions.\n"),
5967  AUTHORS("Claudia Emde"),
5968  OUT("doit_conv_flag", "doit_iteration_counter", "cloudbox_field_mono"),
5969  GOUT(),
5970  GOUT_TYPE(),
5971  GOUT_DESC(),
5972  IN("doit_conv_flag",
5973  "doit_iteration_counter",
5974  "cloudbox_field_mono",
5975  "cloudbox_field_mono_old"),
5976  GIN("epsilon", "max_iterations", "nonconv_return_nan"),
5977  GIN_TYPE("Vector", "Index", "Index"),
5978  GIN_DEFAULT(NODEF, "100", "0"),
5979  GIN_DESC("Limits for convergence. A vector with length matching "
5980  "*stokes_dim* with unit [W / (m^2 Hz sr)].",
5981  "Maximum number of iterations allowed to reach convergence"
5982  "limit.",
5983  "Flag whether to accept result at max_iterations (0=default)"
5984  "or whether to return NaNs in case of non-convergence at"
5985  "max_iterations")));
5986 
5987  md_data_raw.push_back(create_mdrecord(
5988  NAME("doit_conv_flagAbsBT"),
5989  DESCRIPTION(
5990  "DOIT convergence test (maximum absolute difference in Rayleigh Jeans "
5991  "BT)\n"
5992  "\n"
5993  "As *doit_conv_flagAbs* but convergence limits are specified in\n"
5994  "Rayleigh-Jeans brighntess temperatures.\n"),
5995  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
5996  OUT("doit_conv_flag", "doit_iteration_counter", "cloudbox_field_mono"),
5997  GOUT(),
5998  GOUT_TYPE(),
5999  GOUT_DESC(),
6000  IN("doit_conv_flag",
6001  "doit_iteration_counter",
6002  "cloudbox_field_mono",
6003  "cloudbox_field_mono_old",
6004  "f_grid",
6005  "f_index"),
6006  GIN("epsilon", "max_iterations", "nonconv_return_nan"),
6007  GIN_TYPE("Vector", "Index", "Index"),
6008  GIN_DEFAULT(NODEF, "100", "0"),
6009  GIN_DESC("Limits for convergence. A vector with length matching "
6010  "*stokes_dim* with unit [K].",
6011  "Maximum number of iterations allowed to reach convergence"
6012  "limit.",
6013  "Flag whether to accept result at max_iterations (0=default)"
6014  "or whether to return NaNs in case of non-convergence at"
6015  "max_iterations")));
6016 
6017  md_data_raw.push_back(create_mdrecord(
6018  NAME("doit_conv_flagLsq"),
6019  DESCRIPTION(
6020  "DOIT convergence test (least squares).\n"
6021  "\n"
6022  "As *doit_conv_flagAbsBT* but applies a least squares convergence\n"
6023  "test between two successive iteration fields.\n"
6024  "\n"
6025  "Warning: This method is not recommended because this kind of\n"
6026  "convergence test is not sufficiently strict, so that the\n"
6027  "DOIT result might be wrong.\n"),
6028  AUTHORS("Claudia Emde"),
6029  OUT("doit_conv_flag", "doit_iteration_counter", "cloudbox_field_mono"),
6030  GOUT(),
6031  GOUT_TYPE(),
6032  GOUT_DESC(),
6033  IN("doit_conv_flag",
6034  "doit_iteration_counter",
6035  "cloudbox_field_mono",
6036  "cloudbox_field_mono_old",
6037  "f_grid",
6038  "f_index"),
6039  GIN("epsilon", "max_iterations", "nonconv_return_nan"),
6040  GIN_TYPE("Vector", "Index", "Index"),
6041  GIN_DEFAULT(NODEF, "100", "0"),
6042  GIN_DESC("Limits for convergence. A vector with length matching "
6043  "*stokes_dim* with unit [K].",
6044  "Maximum number of iterations allowed to reach convergence"
6045  "limit.",
6046  "Flag whether to accept result at max_iterations (0=default)"
6047  "or whether to return NaNs in case of non-convergence at"
6048  "max_iterations")));
6049 
6050  md_data_raw.push_back(create_mdrecord(
6051  NAME("OptimizeDoitPressureGrid"),
6052  DESCRIPTION(
6053  "Optimization of the pressure grid for RT calculation.\n"
6054  "The methods consists of three parts:\n"
6055  "1) Calculate the single scattering albedo and the scattering optical"
6056  "thickness from the scattering and absorption species. \n"
6057  "2) Enhance z_field according to the two thresholds sgl_alb_max and tau_scat_max."
6058  "If the resulting cloudbox size is bigger than cloudbox_size_max, this step is \n"
6059  "repeated with a higher threshold of tau_scat_max. \n"
6060  "3) Interpolate all variables used in doit_mono_agenda to the new z_field \n"
6061  "This method should be called inside\n"
6062  "*doit_mono_agenda*, right before *cloudbox_field_monoIterate*. It can \n"
6063  "only be used if *ScatSpeciesMerge* has been called and if it is\n"
6064  "called, *cloudbox_field_monoOptimizeReverse* has to be\n"
6065  "called right after *cloudbox_field_monoIterate* to interpolate\n"
6066  "*cloudbox_field_mono* back to the original size.\n"
6067  "Optimization currently only works with *stokes_dim* = 1 .\n"),
6068  AUTHORS("Jakob Doerr"),
6069  OUT("p_grid",
6070  "pnd_field",
6071  "t_field",
6072  "scat_data_mono",
6073  "z_field",
6074  "cloudbox_limits",
6075  "cloudbox_field_mono",
6076  "pha_mat_doit",
6077  "vmr_field",
6078  "p_grid_orig"),
6079  GOUT(),
6080  GOUT_TYPE(),
6081  GOUT_DESC(),
6082  IN("p_grid",
6083  "pnd_field",
6084  "t_field",
6085  "scat_data_mono",
6086  "z_field",
6087  "cloudbox_limits",
6088  "cloudbox_field_mono",
6089  "pha_mat_doit",
6090  "vmr_field",
6091  "f_grid",
6092  "f_index",
6093  "propmat_clearsky_agenda"),
6094  GIN("tau_scat_max", "sgl_alb_max", "cloudbox_size_max"),
6095  GIN_TYPE("Numeric", "Numeric", "Index"),
6096  GIN_DEFAULT("0.1", "0.9", "200"),
6097  GIN_DESC("Maximum scattering optical thickness",
6098  "Maximum single scattering albedo",
6099  "Maximum cloudbox size")));
6100 
6101  md_data_raw.push_back(create_mdrecord(
6102  NAME("doit_scat_fieldCalc"),
6103  DESCRIPTION(
6104  "Calculates the scattering integral field in the DOIT module.\n"
6105  "\n"
6106  "The scattering integral field is generated by integrating\n"
6107  "the product of phase matrix and Stokes vector over all incident\n"
6108  "angles. For more information please refer to AUG.\n"),
6109  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
6110  OUT("doit_scat_field"),
6111  GOUT(),
6112  GOUT_TYPE(),
6113  GOUT_DESC(),
6114  IN("doit_scat_field",
6115  "pha_mat_spt_agenda",
6116  "cloudbox_field_mono",
6117  "pnd_field",
6118  "t_field",
6119  "atmosphere_dim",
6120  "cloudbox_limits",
6121  "za_grid",
6122  "aa_grid",
6123  "doit_za_grid_size",
6124  "pha_mat_doit"),
6125  GIN(),
6126  GIN_TYPE(),
6127  GIN_DEFAULT(),
6128  GIN_DESC()));
6129 
6130  md_data_raw.push_back(create_mdrecord(
6131  NAME("doit_scat_fieldCalcLimb"),
6132  DESCRIPTION(
6133  "Calculates the scattering integral field in the DOIT module (limb).\n"
6134  "\n"
6135  "The scattering integral field is the field generated by integrating\n"
6136  "the product of phase matrix and the Stokes vector over all incident\n"
6137  "angles.\n"
6138  "\n"
6139  "For limb simulations it makes sense to use different\n"
6140  "zenith angle grids for the scattering integral part and the RT part,\n"
6141  "because the latter part requires a much finer resolution near\n"
6142  "90 degrees. Taking an optimized grid for the RT part and an equidistant\n"
6143  "grid for the scattering integral part saves very much CPU time.\n"
6144  "This method uses the equidistant za_grid defined in\n"
6145  "*DOAngularGridsSet* and it should always be used for limb\n"
6146  "simulations.\n"
6147  "\n"
6148  "For more information please refer to AUG.\n"),
6149  AUTHORS("Claudia Emde"),
6150  OUT("doit_scat_field"),
6151  GOUT(),
6152  GOUT_TYPE(),
6153  GOUT_DESC(),
6154  IN("doit_scat_field",
6155  "pha_mat_spt_agenda",
6156  "cloudbox_field_mono",
6157  "pnd_field",
6158  "t_field",
6159  "atmosphere_dim",
6160  "cloudbox_limits",
6161  "za_grid",
6162  "aa_grid",
6163  "doit_za_grid_size",
6164  "doit_za_interp",
6165  "pha_mat_doit"),
6166  GIN(),
6167  GIN_TYPE(),
6168  GIN_DEFAULT(),
6169  GIN_DESC()));
6170 
6171  md_data_raw.push_back(create_mdrecord(
6172  NAME("doit_za_grid_optCalc"),
6173  DESCRIPTION(
6174  "Zenith angle grid optimization for scattering calculation.\n"
6175  "\n"
6176  "This method optimizes the zenith angle grid. As input it requires\n"
6177  "a radiation field (*cloudbox_field*) which is calculated on a very\n"
6178  "fine zenith angle grid (*za_grid*). Based on this field\n"
6179  "zenith angle grid points are selected, such that the maximum\n"
6180  "difference between the radiation field represented on the very\n"
6181  "fine zenith angle grid and the radiation field represented on the\n"
6182  "optimized grid (*doit_za_grid_opt*) is less than the accuracy\n"
6183  "(*acc*). Between the grid points the radiation field is interpolated\n"
6184  "linearly or polynomially depending on *doit_za_interp*.\n"
6185  "\n"
6186  "Note: The method works only for a 1D atmosphere and for one\n"
6187  "frequency.\n"),
6188  AUTHORS("Claudia Emde"),
6189  OUT("doit_za_grid_opt"),
6190  GOUT(),
6191  GOUT_TYPE(),
6192  GOUT_DESC(),
6193  IN("cloudbox_field_mono", "za_grid", "doit_za_interp"),
6194  GIN("acc"),
6195  GIN_TYPE("Numeric"),
6196  GIN_DEFAULT(NODEF),
6197  GIN_DESC("Accuracy to achieve [%].")));
6198 
6199  md_data_raw.push_back(create_mdrecord(
6200  NAME("doit_za_interpSet"),
6201  DESCRIPTION(
6202  "Define interpolation method for zenith angle dimension.\n"
6203  "\n"
6204  "You can use this method to choose the interpolation method for\n"
6205  "interpolations in the zenith angle dimension.\n"),
6206  AUTHORS("Claudia Emde"),
6207  OUT("doit_za_interp"),
6208  GOUT(),
6209  GOUT_TYPE(),
6210  GOUT_DESC(),
6211  IN("atmosphere_dim"),
6212  GIN("interp_method"),
6213  GIN_TYPE("String"),
6214  GIN_DEFAULT("linear"),
6215  GIN_DESC("Interpolation method (\"linear\" or \"polynomial\").")));
6216 
6217  md_data_raw.push_back(create_mdrecord(
6218  NAME("Duration"),
6219  DESCRIPTION("Sets the seconds between two times.\n"),
6220  AUTHORS("Richard Larsson"),
6221  OUT(),
6222  GOUT("duration"),
6223  GOUT_TYPE("Numeric"),
6224  GOUT_DESC("Time in seconds between *start* and *end*"),
6225  IN(),
6226  GIN("start", "end"),
6227  GIN_TYPE("Time", "Time"),
6229  GIN_DESC("Start time", "End time")));
6230 
6231  md_data_raw.push_back(create_mdrecord(
6232  NAME("EnergyLevelMapSet"),
6233  DESCRIPTION("Sets an EnergyLevelMap\n"),
6234  AUTHORS("Richard Larsson"),
6235  OUT(),
6236  GOUT("x"),
6237  GOUT_TYPE("EnergyLevelMap"),
6238  GOUT_DESC("out"),
6239  IN(),
6240  GIN("y"),
6241  GIN_TYPE("EnergyLevelMap"),
6242  GIN_DEFAULT(NODEF),
6243  GIN_DESC("in")));
6244 
6245  md_data_raw.push_back(create_mdrecord(
6246  NAME("Error"),
6247  DESCRIPTION(
6248  "Issues an error and exits ARTS.\n"
6249  "\n"
6250  "This method can be placed in agendas that must be specified, but\n"
6251  "are expected not to be used for the particular case. An inclusion\n"
6252  "in *surface_rtprop_agenda* could look like:\n "
6253  "Error{\"Surface interceptions of propagation path not expected.\"}\n"
6254  "\n"
6255  "Ignore and other dummy method calls must still be included.\n"),
6256  AUTHORS("Patrick Eriksson"),
6257  OUT(),
6258  GOUT(),
6259  GOUT_TYPE(),
6260  GOUT_DESC(),
6261  IN(),
6262  GIN("msg"),
6263  GIN_TYPE("String"),
6264  GIN_DEFAULT(NODEF),
6265  GIN_DESC("String describing the error.")));
6266 
6267  md_data_raw.push_back(create_mdrecord(
6268  NAME("Exit"),
6269  DESCRIPTION(
6270  "Stops the execution and exits ARTS.\n"
6271  "\n"
6272  "This method is handy if you want to debug one of your control\n"
6273  "files. You can insert it anywhere in the control file. When\n"
6274  "it is reached, it will terminate the program.\n"),
6275  AUTHORS("Patrick Eriksson"),
6276  OUT(),
6277  GOUT(),
6278  GOUT_TYPE(),
6279  GOUT_DESC(),
6280  IN(),
6281  GIN(),
6282  GIN_TYPE(),
6283  GIN_DEFAULT(),
6284  GIN_DESC()));
6285 
6286  md_data_raw.push_back(create_mdrecord(
6287  NAME("Extract"),
6288  DESCRIPTION(
6289  "Extracts an element from an array.\n"
6290  "\n"
6291  "Copies the element with the given Index from the input\n"
6292  "variable to the output variable.\n"
6293  "\n"
6294  "For a Tensor3 as an input, it copies the page with the given\n"
6295  "Index from the input Tensor3 variable to the output Matrix.\n"
6296  "\n"
6297  "In other words, the selection is always done on the first dimension.\n"),
6298  AUTHORS("Oliver Lemke"),
6299  OUT(),
6300  GOUT("needle"),
6301  GOUT_TYPE("Index, ArrayOfIndex, Numeric, Vector,"
6302  "Matrix, Matrix,"
6303  "Tensor3, Tensor4, Tensor4,"
6304  "GriddedField3, ArrayOfGriddedField3,"
6305  "GriddedField4, String,"
6306  "SingleScatteringData, ArrayOfSingleScatteringData,"
6307  "TelsemAtlas,"
6308  "QuantumIdentifier"),
6309  GOUT_DESC("Extracted element."),
6310  IN(),
6311  GIN("haystack", "index"),
6312  GIN_TYPE("ArrayOfIndex, ArrayOfArrayOfIndex, Vector, ArrayOfVector,"
6313  "ArrayOfMatrix, Tensor3,"
6314  "Tensor4, ArrayOfTensor4, Tensor5,"
6315  "ArrayOfGriddedField3, ArrayOfArrayOfGriddedField3,"
6316  "ArrayOfGriddedField4, ArrayOfString,"
6317  "ArrayOfSingleScatteringData,"
6318  "ArrayOfArrayOfSingleScatteringData,"
6319  "ArrayOfTelsemAtlas,"
6320  "ArrayOfQuantumIdentifier",
6321  "Index"),
6323  GIN_DESC("Variable to extract from.",
6324  "Position of the element which should be extracted."),
6325  SETMETHOD(false),
6326  AGENDAMETHOD(false),
6327  USES_TEMPLATES(true)));
6328 
6329  md_data_raw.push_back(create_mdrecord(
6330  NAME("ExtractFromMetaSingleScatSpecies"),
6331  DESCRIPTION(
6332  "Extract (numeric) parameters from scat_meta of a single scattering\n"
6333  "species.\n"
6334  "\n"
6335  "...\n"),
6336  AUTHORS("Jana Mendrok"),
6337  OUT(),
6338  GOUT("meta_param"),
6339  GOUT_TYPE("Vector"),
6340  GOUT_DESC("The extracted meta parameter values."),
6341  IN("scat_meta"),
6342  GIN("meta_name", "scat_species_index"),
6343  GIN_TYPE("String", "Index"),
6345  GIN_DESC("Name of the meta parameter to extract.",
6346  "Array index of scattering species from which to extract.")));
6347 
6348  md_data_raw.push_back(create_mdrecord(
6349  NAME("ext_matAddGas"),
6350  DESCRIPTION(
6351  "Add gas absorption to all diagonal elements of extinction matrix.\n"
6352  "\n"
6353  "The task of this method is to sum up the gas absorption of the\n"
6354  "different gas species and add the result to the extinction matrix.\n"),
6355  AUTHORS("Stefan Buehler"),
6356  OUT("ext_mat"),
6357  GOUT(),
6358  GOUT_TYPE(),
6359  GOUT_DESC(),
6360  IN("ext_mat", "propmat_clearsky"),
6361  GIN(),
6362  GIN_TYPE(),
6363  GIN_DEFAULT(),
6364  GIN_DESC()));
6365 
6366  md_data_raw.push_back(create_mdrecord(
6367  NAME("FastemStandAlone"),
6368  DESCRIPTION(
6369  "Stand-alone usage of FASTEM.\n"
6370  "\n"
6371  "FASTEM is a parameterisation of the emissivity of water surfaces\n"
6372  "including the impact of waves, salinity and non-specular effects.\n"
6373  "This is more or less direct interface to FASTEM, but slightly\n"
6374  "adopted to fit with ARTS. The unit of frequency and salinity\n"
6375  "differ, and this version is \"vectorised\" in frequency.\n"
6376  "\n"
6377  "The output is four emissivity and reflectivity values for each\n"
6378  "frequency. These values are defined in Eq. 13 of \"An Improved\n"
6379  "Fast Microwave Water Emissivity Model\" by Liu, Weng and English,\n"
6380  "I3TRGS, 2011. Note that emissivity and reflectivity do not add up\n"
6381  "to 1, which is the way FASTEM compensates for non-specular effects.\n"
6382  "\n"
6383  "There is an error if any frequency is above 250 GHz, or if the skin\n"
6384  "temperature is below 260 K. If the skin temperature is below 270 K,\n"
6385  "it is adjusted to 270 K.\n"
6386  "\n"
6387  "FASTEM returns unphysical values for propagation close to the\n"
6388  "horizon, here emissivity and reflectivity can be outside [0,1].\n"
6389  "If either emissivity or reflectivity is below/above 0/1, it is\n"
6390  "set to 0/1, and the other value is set to 1/0. That is, e+r=1\n"
6391  "is enforced. These problems start about 15 degrees from the horizon.\n"),
6392  AUTHORS("Oliver Lemke, Patrick Eriksson"),
6393  OUT(),
6394  GOUT("emissivity", "reflectivity"),
6395  GOUT_TYPE("Matrix", "Matrix"),
6396  GOUT_DESC("Emission values. One row for each frequency. See above.",
6397  "Reflectivity values. One row for each frequency. See above."),
6398  IN("f_grid", "surface_skin_t"),
6399  GIN("za",
6400  "salinity",
6401  "wind_speed",
6402  "rel_aa",
6403  "transmittance",
6404  "fastem_version"),
6405  GIN_TYPE("Numeric", "Numeric", "Numeric", "Numeric", "Vector", "Index"),
6406  GIN_DEFAULT(NODEF, "0.035", NODEF, NODEF, NODEF, "6"),
6407  GIN_DESC("Zenith angle of line-of-sigh, 90 to 180 deg.",
6408  "Salinity, 0-1. That is, 3% is given as 0.03.",
6409  "Wind speed.",
6410  "Azimuth angle between wind direction and line-of-sight. "
6411  "This angle is measured clockwise from north, i.e. E=90deg.",
6412  "The transmission of the atmosphere, along the propagation "
6413  "path of the downwelling radiation. One value per frequency.",
6414  "The version of FASTEM to use.")));
6415 
6416  md_data_raw.push_back(create_mdrecord(
6417  NAME("FieldFromGriddedField"),
6418  DESCRIPTION("Extract the data from a GriddedField.\n"
6419  "\n"
6420  "A check is performed that the grids from the\n"
6421  "GriddedField match *p_grid*, *lat_grid* and *lon_grid*.\n"),
6422  AUTHORS("Oliver Lemke"),
6423  OUT(),
6424  GOUT("out"),
6425  GOUT_TYPE("Matrix, Tensor3, Tensor4, Tensor4"),
6426  GOUT_DESC("Extracted field."),
6427  IN("p_grid", "lat_grid", "lon_grid"),
6428  GIN("in"),
6429  GIN_TYPE(
6430  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6431  GIN_DEFAULT(NODEF),
6432  GIN_DESC("Raw input gridded field.")));
6433 
6434  md_data_raw.push_back(create_mdrecord(
6435  NAME("FlagOff"),
6436  DESCRIPTION("Sets an index variable that acts as an on/off flag to 0.\n"),
6437  AUTHORS("Patrick Eriksson"),
6438  OUT(),
6439  GOUT("flag"),
6440  GOUT_TYPE("Index"),
6441  GOUT_DESC("Variable to set to 0."),
6442  IN(),
6443  GIN(),
6444  GIN_TYPE(),
6445  GIN_DEFAULT(),
6446  GIN_DESC()));
6447 
6448  md_data_raw.push_back(create_mdrecord(
6449  NAME("FlagOn"),
6450  DESCRIPTION("Sets an index variable that acts as an on/off flag to 1.\n"),
6451  AUTHORS("Patrick Eriksson"),
6452  OUT(),
6453  GOUT("flag"),
6454  GOUT_TYPE("Index"),
6455  GOUT_DESC("Variable to set to 1."),
6456  IN(),
6457  GIN(),
6458  GIN_TYPE(),
6459  GIN_DEFAULT(),
6460  GIN_DESC()));
6461 
6462  md_data_raw.push_back(create_mdrecord(
6463  NAME("Flatten"),
6464  DESCRIPTION("Flattens an ArrayOfArray<T> to Array<T> or an Array\n"
6465  "of matpack-types to a larger dimension matpack (if dimensions agree)\n"
6466  "\n"
6467  "The intended transformation for arrays is (sub-arrays can have different sizes):\n"
6468  " {{a, b, c}, {d, e}} -> {a, b, c, d, e}\n"
6469  "\n"
6470  "The intended transformation for arrays to matpack types is (sub-types must have same size):\n"
6471  " {{a, b, c}, {d, e, f}} -> {a, b, c, d, e, f}\n"),
6472  AUTHORS("Richard Larsson"),
6473  OUT(),
6474  GOUT("out"),
6475  GOUT_TYPE("ArrayOfTime,ArrayOfVector,Matrix,Tensor3,Tensor4,Tensor5,Tensor6,Tensor7"),
6476  GOUT_DESC("Flatter array/matpack-type"),
6477  IN(),
6478  GIN("in"),
6479  GIN_TYPE("ArrayOfArrayOfTime,ArrayOfArrayOfVector,ArrayOfVector,ArrayOfMatrix,ArrayOfTensor3,ArrayOfTensor4,ArrayOfTensor5,ArrayOfTensor6"),
6480  GIN_DEFAULT(NODEF),
6481  GIN_DESC("An array")));
6482 
6483  md_data_raw.push_back(create_mdrecord(
6484  NAME("ForLoop"),
6485  DESCRIPTION(
6486  "A simple for-loop.\n"
6487  "\n"
6488  "This method is handy when you quickly want to test out a calculation\n"
6489  "with a set of different settings.\n"
6490  "\n"
6491  "It does a for-loop from start to stop in steps of step (who would\n"
6492  "have guessed that). For each iteration, the agenda *forloop_agenda* is\n"
6493  "executed. Inside the agenda, the variable *forloop_index* is available\n"
6494  "as index counter.\n"
6495  "\n"
6496  "There are no other inputs to *forloop_agenda*, and also no outputs. That\n"
6497  "means, if you want to get any results out of this loop, you have to\n"
6498  "save it to files (for example with *WriteXMLIndexed*), since\n"
6499  "variables used inside the agenda will only be local.\n"
6500  "\n"
6501  "Note that this kind of for loop is not parallel.\n"
6502  "\n"
6503  "The method is intended for simple testing, not as a replacement of\n"
6504  "*ybatchCalc*. However, it is compatible with *ybatchCalc*, in the sense\n"
6505  "that *ybatchCalc* may occur inside *forloop_agenda*.\n"),
6506  AUTHORS("Stefan Buehler"),
6507  OUT(),
6508  GOUT(),
6509  GOUT_TYPE(),
6510  GOUT_DESC(),
6511  IN("forloop_agenda"),
6512  GIN("start", "stop", "step"),
6513  GIN_TYPE("Index", "Index", "Index"),
6515  GIN_DESC("Start value.", "End value.", "Step size.")));
6516 
6517  md_data_raw.push_back(create_mdrecord(
6518  NAME("FrequencyFromWavelength"),
6519  DESCRIPTION(
6520  "Convert from wavelength [m] to frequency [Hz].\n"
6521  "\n"
6522  "This is a generic method. It can take a single wavelength value or a wavelength vector as input.\n"),
6523  AUTHORS("Claudia Emde"),
6524  OUT(),
6525  GOUT("frequency"),
6526  GOUT_TYPE("Numeric, Vector"),
6527  GOUT_DESC("frequency [Hz]"),
6528  IN(),
6529  GIN("wavelength"),
6530  GIN_TYPE("Numeric, Vector"),
6531  GIN_DEFAULT(NODEF),
6532  GIN_DESC("wavelength [m]")));
6533 
6534  md_data_raw.push_back(create_mdrecord(
6535  NAME("FrequencyFromCGSAngularWavenumber"),
6536  DESCRIPTION(
6537  "Convert from angular wavenumber [cm^-1] to frequency [Hz].\n"
6538  "\n"
6539  "This converts angular wavenumber (2*PI/wavelength) into frequency.\n"),
6540  AUTHORS("Richard Larsson"),
6541  OUT(),
6542  GOUT("frequency"),
6543  GOUT_TYPE("Numeric, Vector"),
6544  GOUT_DESC("frequency [Hz]"),
6545  IN(),
6546  GIN("angular_wavenumber"),
6547  GIN_TYPE("Numeric, Vector"),
6548  GIN_DEFAULT(NODEF),
6549  GIN_DESC("angular wavenumber [cm^-1]")));
6550 
6551  md_data_raw.push_back(create_mdrecord(
6552  NAME("FrequencyFromCGSKayserWavenumber"),
6553  DESCRIPTION(
6554  "Convert from Kayser wavenumber [cm^-1] to frequency [Hz].\n"
6555  "\n"
6556  "This converts Kayser wavenumber (1/wavelength) into frequency.\n"),
6557  AUTHORS("Richard Larsson"),
6558  OUT(),
6559  GOUT("frequency"),
6560  GOUT_TYPE("Numeric, Vector"),
6561  GOUT_DESC("frequency [Hz]"),
6562  IN(),
6563  GIN("kayser_wavenumber"),
6564  GIN_TYPE("Numeric, Vector"),
6565  GIN_DEFAULT(NODEF),
6566  GIN_DESC("Kayser wavenumber [cm^-1]")));
6567 
6568  md_data_raw.push_back(create_mdrecord(
6569  NAME("f_gridFromAbsorptionLines"),
6570  DESCRIPTION("Sets *f_grid* to a grid relative to *abs_lines_per_species*\n"
6571  "\n"
6572  "Each line will have *abs_lines_per_species* will have a grid\n"
6573  "of *num_freqs* grid points in [f0+*delta_f_low*, f0+*delta_f_upp*],\n"
6574  "where f0 is the line center.\n"
6575  "\n"
6576  "Before leaving the function, *f_grid* is sorted.\n"
6577  "\n"
6578  "Note that this method could generate significantly large *f_grid*\n"
6579  "if used carelessly\n"),
6580  AUTHORS("Richard Larsson"),
6581  OUT("f_grid"),
6582  GOUT(),
6583  GOUT_TYPE(),
6584  GOUT_DESC(),
6585  IN("abs_lines_per_species"),
6586  GIN("delta_f_low", "delta_f_upp", "num_freqs"),
6587  GIN_TYPE("Numeric", "Numeric", "Index"),
6588  GIN_DEFAULT("-5e6", "5e6", NODEF),
6589  GIN_DESC("Lower range of delta f",
6590  "Upper range of delta f",
6591  "Number of frequencies")));
6592 
6593  md_data_raw.push_back(create_mdrecord(
6594  NAME("f_gridFromGasAbsLookup"),
6595  DESCRIPTION(
6596  "Sets *f_grid* to the frequency grid of *abs_lookup*.\n"
6597  "\n"
6598  "Must be called between importing/creating raw absorption table and\n"
6599  "call of *abs_lookupAdapt*.\n"),
6600  AUTHORS("Stefan Buehler"),
6601  OUT("f_grid"),
6602  GOUT(),
6603  GOUT_TYPE(),
6604  GOUT_DESC(),
6605  IN("abs_lookup"),
6606  GIN(),
6607  GIN_TYPE(),
6608  GIN_DEFAULT(),
6609  GIN_DESC()));
6610 
6611  md_data_raw.push_back(create_mdrecord(
6612  NAME("f_gridFromSensorAMSU"),
6613  DESCRIPTION(
6614  "Automatically calculate f_grid to match the sensor.\n"
6615  "\n"
6616  "This method is handy if you are simulating an AMSU-type instrument,\n"
6617  "consisting of a few discrete channels. The case that channels touch,\n"
6618  "as for MHS, is handled correctly. But the case that channels overlap\n"
6619  "is not (yet) handled and results in an error message.\n"
6620  "\n"
6621  "The method calculates *f_grid* to match the instrument, as given by\n"
6622  "the local oscillator frequencies *lo_multi*, the backend\n"
6623  "frequencies *f_backend_multi*, and the backend channel\n"
6624  "responses *backend_channel_response_multi*.\n"
6625  "\n"
6626  "You have to specify the desired spacing in the keyword *spacing*,\n"
6627  "which has a default value of 100 MHz. (The actual value is 0.1e9,\n"
6628  "since our unit is Hz.)\n"
6629  "\n"
6630  "The produced grid will not have exactly the requested spacing, but\n"
6631  "will not be coarser than requested. The algorithm starts with the band\n"
6632  "edges, then adds additional points until the spacing is at least as\n"
6633  "fine as requested.\n"
6634  "\n"
6635  "There is a similar method for HIRS-type instruments,\n"
6636  "see *f_gridFromSensorHIRS*.\n"),
6637  AUTHORS("Stefan Buehler, Mathias Milz"),
6638  OUT("f_grid"),
6639  GOUT(),
6640  GOUT_TYPE(),
6641  GOUT_DESC(),
6642  IN("lo_multi", "f_backend_multi", "backend_channel_response_multi"),
6643  GIN("spacing"),
6644  GIN_TYPE("Numeric"),
6645  GIN_DEFAULT(".1e9"),
6646  GIN_DESC("Desired grid spacing in Hz.")));
6647 
6648  md_data_raw.push_back(create_mdrecord(
6649  NAME("f_gridFromSensorAMSUgeneric"),
6650  DESCRIPTION(
6651  "Automatcially calculate f_grid to match the sensor. \n"
6652  "This function is based on 'f_gridFromSensorAMSU' \n"
6653  "\n"
6654  "The method calculates *f_grid* to match the instrument, as given by\n"
6655  "the backend frequencies *f_backend*, and the backend channel\n"
6656  "responses *backend_channel_response*.\n"
6657  "\n"
6658  "You have to specify the desired spacing in the keyword *spacing*,\n"
6659  "which has a default value of 100 MHz. (The actual value is 0.1e9,\n"
6660  "since our unit is Hz.)"
6661  "\n"
6662  "The produced grid will not have exactly the requested spacing, but\n"
6663  "it will not be coarser than requested. The algorithm starts with the band\n"
6664  "edges, then adds additional points until the spacing is at least as\n"
6665  "fine as requested.\n"),
6666  AUTHORS("Oscar Isoz"),
6667  OUT("f_grid"),
6668  GOUT(),
6669  GOUT_TYPE(),
6670  GOUT_DESC(),
6671  IN("f_backend_multi", "backend_channel_response_multi"),
6672  GIN("spacing", "verbosityVect"),
6673  GIN_TYPE("Numeric", "Vector"),
6674  GIN_DEFAULT(".1e9", "[]"),
6675  GIN_DESC("Desired grid spacing in Hz.", "Bandwidth adjusted spacing")));
6676 
6677  md_data_raw.push_back(create_mdrecord(
6678  NAME("f_gridFromSensorHIRS"),
6679  DESCRIPTION(
6680  "Automatically calculate f_grid to match the sensor.\n"
6681  "\n"
6682  "This method is handy if you are simulating a HIRS-type instrument,\n"
6683  "consisting of a few discrete channels.\n"
6684  "\n"
6685  "It calculates f_grid to match the instrument, as given by the nominal\n"
6686  "band frequencies *f_backend* and the spectral channel response\n"
6687  "functions given by *backend_channel_response*.\n"
6688  "\n"
6689  "You have to specify the desired spacing in the keyword *spacing*, which\n"
6690  "has a default value of 5e8 Hz.\n"
6691  "\n"
6692  "The produced grid will not have exactly the requested spacing, but\n"
6693  "will not be coarser than requested. The algorithm starts with the band\n"
6694  "edges, then adds additional points until the spacing is at least as\n"
6695  "fine as requested.\n"
6696  "\n"
6697  "There is a similar method for AMSU-type instruments, see\n"
6698  "*f_gridFromSensorAMSU*.\n"),
6699  AUTHORS("Stefan Buehler"),
6700  OUT("f_grid"),
6701  GOUT(),
6702  GOUT_TYPE(),
6703  GOUT_DESC(),
6704  IN("f_backend", "backend_channel_response"),
6705  GIN("spacing"),
6706  GIN_TYPE("Numeric"),
6707  GIN_DEFAULT("5e8"),
6708  GIN_DESC("Desired grid spacing in Hz.")));
6709 
6710  md_data_raw.push_back(create_mdrecord(
6711  NAME("f_gridMetMM"),
6712  DESCRIPTION(
6713  "Sets *f_grid* and associated variables match MetMM settings.\n"
6714  "\n"
6715  "The method calculates *f_grid* to match the specifications of a\n"
6716  "*met_mm_backend* table and method arguments.\n"
6717  "\n"
6718  "You have to specify the desired spacing using the keyword *freq_spacing*.\n"
6719  "You can pass a *Vector* with one element to apply the same spacing to all\n"
6720  "channels or pass a spacing value for each channel separately.\n"
6721  "\n"
6722  "Optionally, *freq_number* can be set to specify the mininum number of\n"
6723  "frequencies per passband for each channel. The frequencies are placed\n"
6724  "equally spaced in each passband. The minimum spacing resulting from\n"
6725  "*freq_number* and *freq_spacing* will be used for the calculation. To\n"
6726  "explicitly use *freq_spacing* for a channel, *freq_number* can be set\n"
6727  "to -1 for this channel.\n"
6728  "\n"
6729  "The number of elements in *freq_number* can either be the number of\n"
6730  "channels or 1. If only one element is given, this number is used for\n"
6731  "all channels. If *freq_number* is 1 and *freq_spacing* is wider than\n"
6732  "the bandwidth of the channel, one frequency is placed in the middle of\n"
6733  "each passband.\n"
6734  "\n"
6735  "Frequencies that would be closer than *freq_merge_threshold* in the\n"
6736  "generated *f_grid* are merged together. This value should be left at\n"
6737  "the default value. This is only meant to compensate for numerical\n"
6738  "inaccuracies in the frequency calculation to merge frequency that are\n"
6739  "supposed to be identical.\n"),
6740  AUTHORS("Oliver Lemke", "Patrick Eriksson"),
6741  OUT("f_grid",
6742  "f_backend",
6743  "channel2fgrid_indexes",
6744  "channel2fgrid_weights"),
6745  GOUT(),
6746  GOUT_TYPE(),
6747  GOUT_DESC(),
6748  IN("met_mm_backend"),
6749  GIN("freq_spacing", "freq_number", "freq_merge_threshold"),
6750  GIN_TYPE("Vector", "ArrayOfIndex", "Numeric"),
6751  GIN_DEFAULT("[.1e9]", "[-1]", "1"),
6752  GIN_DESC("Desired grid spacing in Hz.",
6753  "Number of frequencies per passband for each channel.",
6754  "Merge frequencies that are closer than this value in Hz.")));
6755 
6756  md_data_raw.push_back(create_mdrecord(
6757  NAME("g0Earth"),
6758  DESCRIPTION(
6759  "Gravity at zero altitude on Earth.\n"
6760  "\n"
6761  "Sets *g0* for the given latitude using a standard parameterisation.\n"),
6762  AUTHORS("Patrick Eriksson"),
6763  OUT("g0"),
6764  GOUT(),
6765  GOUT_TYPE(),
6766  GOUT_DESC(),
6767  IN("lat"),
6768  GIN(),
6769  GIN_TYPE(),
6770  GIN_DEFAULT(),
6771  GIN_DESC()));
6772 
6773  md_data_raw.push_back(create_mdrecord(NAME("g0Io"),
6774  DESCRIPTION("Gravity at zero altitude on Io.\n"
6775  "\n"
6776  "Numeric from Wikipedia.\n"),
6777  AUTHORS("Richard Larsson"),
6778  OUT("g0"),
6779  GOUT(),
6780  GOUT_TYPE(),
6781  GOUT_DESC(),
6782  IN(),
6783  GIN(),
6784  GIN_TYPE(),
6785  GIN_DEFAULT(),
6786  GIN_DESC()));
6787 
6788  md_data_raw.push_back(create_mdrecord(
6789  NAME("g0Jupiter"),
6790  DESCRIPTION(
6791  "Gravity at zero altitude on Jupiter.\n"
6792  "\n"
6793  "Sets *g0* to mean equatorial gravity on Jupiter. Value provided by\n"
6794  "MPS under ESA-planetary study (TN1).\n"),
6795  AUTHORS("Jana Mendrok"),
6796  OUT("g0"),
6797  GOUT(),
6798  GOUT_TYPE(),
6799  GOUT_DESC(),
6800  IN(),
6801  GIN(),
6802  GIN_TYPE(),
6803  GIN_DEFAULT(),
6804  GIN_DESC()));
6805 
6806  md_data_raw.push_back(create_mdrecord(
6807  NAME("g0Mars"),
6808  DESCRIPTION(
6809  "Gravity at zero altitude on Mars.\n"
6810  "\n"
6811  "Sets *g0* to mean equatorial gravity on Mars. Value provided by\n"
6812  "MPS under ESA-planetary study (TN1).\n"),
6813  AUTHORS("Jana Mendrok"),
6814  OUT("g0"),
6815  GOUT(),
6816  GOUT_TYPE(),
6817  GOUT_DESC(),
6818  IN(),
6819  GIN(),
6820  GIN_TYPE(),
6821  GIN_DEFAULT(),
6822  GIN_DESC()));
6823 
6824  md_data_raw.push_back(create_mdrecord(
6825  NAME("g0Venus"),
6826  DESCRIPTION(
6827  "Gravity at zero altitude on Venus.\n"
6828  "\n"
6829  "Sets *g0* to mean equatorial gravity on Venus. Value from Ahrens\n"
6830  "(1995), provided by MPS under ESA-planetary study (TN1).\n"),
6831  AUTHORS("Jana Mendrok"),
6832  OUT("g0"),
6833  GOUT(),
6834  GOUT_TYPE(),
6835  GOUT_DESC(),
6836  IN(),
6837  GIN(),
6838  GIN_TYPE(),
6839  GIN_DEFAULT(),
6840  GIN_DESC()));
6841 
6842  md_data_raw.push_back(create_mdrecord(
6843  NAME("geo_posEndOfPpath"),
6844  DESCRIPTION("Sets geo-position based on *ppath*.\n"
6845  "\n"
6846  "The geo-position is set to the position of the last point\n"
6847  "of the present propagation path. This will be the surface,\n"
6848  "top-of-the atmosphere or cloudbox position, depending of\n"
6849  "observation geometry and if the cloudbox is active.\n"),
6850  AUTHORS("Patrick Eriksson"),
6851  OUT("geo_pos"),
6852  GOUT(),
6853  GOUT_TYPE(),
6854  GOUT_DESC(),
6855  IN("ppath"),
6856  GIN(),
6857  GIN_TYPE(),
6858  GIN_DEFAULT(),
6859  GIN_DESC()));
6860 
6861  md_data_raw.push_back(create_mdrecord(
6862  NAME("geo_posLowestAltitudeOfPpath"),
6863  DESCRIPTION(
6864  "Sets geo-position based on *ppath*.\n"
6865  "\n"
6866  "The geo-position is set to the position of the last point\n"
6867  "of the present propagation path having the lowest altitude.\n"),
6868  AUTHORS("Patrick Eriksson"),
6869  OUT("geo_pos"),
6870  GOUT(),
6871  GOUT_TYPE(),
6872  GOUT_DESC(),
6873  IN("ppath"),
6874  GIN(),
6875  GIN_TYPE(),
6876  GIN_DEFAULT(),
6877  GIN_DESC()));
6878 
6879  md_data_raw.push_back(create_mdrecord(
6880  NAME("geo_posWherePpathPassesZref"),
6881  DESCRIPTION(
6882  "Sets geo-position based on *ppath*.\n"
6883  "\n"
6884  "The geo-position is set to the position where the propagation\n"
6885  "path passes the reference altitude. If this altitude is passes\n"
6886  "more than once, the passing closest to the sensor is selected.\n"
6887  "If the reference altitude is not passed at all, *geo_pos* is\n"
6888  "set to NaN.\n"),
6889  AUTHORS("Patrick Eriksson"),
6890  OUT("geo_pos"),
6891  GOUT(),
6892  GOUT_TYPE(),
6893  GOUT_DESC(),
6894  IN("ppath"),
6895  GIN("z_ref"),
6896  GIN_TYPE("Numeric"),
6897  GIN_DEFAULT(NODEF),
6898  GIN_DESC("Reference altitude.")));
6899 
6900  md_data_raw.push_back(create_mdrecord(
6901  NAME("GetEnvironmentVariable"),
6902  DESCRIPTION(
6903  "Copy the contents of an environment variable to an ARTS String or Index.\n"),
6904  AUTHORS("Oliver Lemke"),
6905  OUT(),
6906  GOUT("out"),
6907  GOUT_TYPE("String, Index"),
6908  GOUT_DESC("Contents of environment variable."),
6909  IN(),
6910  GIN("in"),
6911  GIN_TYPE("String"),
6912  GIN_DEFAULT(NODEF),
6913  GIN_DESC("Name of environment variable.")));
6914 
6915  md_data_raw.push_back(
6916  create_mdrecord(NAME("GetNumberOfThreads"),
6917  DESCRIPTION("Returns the number of threads used by ARTS.\n"),
6918  AUTHORS("Oliver Lemke"),
6919  OUT(),
6920  GOUT("nthreads"),
6921  GOUT_TYPE("Index"),
6922  GOUT_DESC("Number of threads."),
6923  IN(),
6924  GIN(),
6925  GIN_TYPE(),
6926  GIN_DEFAULT(),
6927  GIN_DESC()));
6928 
6929  md_data_raw.push_back(
6930  create_mdrecord(NAME("GriddedFieldGetName"),
6931  DESCRIPTION("Get the name of a GriddedField.\n"
6932  "\n"
6933  "See *ArrayOfGriddedFieldGetNames*.\n"),
6934  AUTHORS("Lukas Kluft"),
6935  OUT(),
6936  GOUT("name"),
6937  GOUT_TYPE("String"),
6938  GOUT_DESC("Name of the GriddedField."),
6939  IN(),
6940  GIN("griddedfield"),
6941  GIN_TYPE("GriddedField1, GriddedField2, GriddedField3, "
6942  "GriddedField4, GriddedField5, GriddedField6 "),
6943  GIN_DEFAULT(NODEF),
6944  GIN_DESC("GriddedField."),
6945  SETMETHOD(false),
6946  AGENDAMETHOD(false),
6947  USES_TEMPLATES(true)));
6948 
6949  md_data_raw.push_back(create_mdrecord(
6950  NAME("GriddedFieldLatLonExpand"),
6951  DESCRIPTION(
6952  "Expands the latitude and longitude grid of the GriddedField to\n"
6953  "[-90, 90] and [0,360], respectively. Expansion is only done in\n"
6954  "the dimension(s), where the grid size is 1.\n"
6955  "The values from the input data will be duplicated to accomodate\n"
6956  "for the larger size of the output field.\n"
6957  "gfield_raw_out and gfield_raw_in can be the same variable.\n"),
6958  AUTHORS("Oliver Lemke"),
6959  OUT(),
6960  GOUT("out"),
6961  GOUT_TYPE(
6962  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6963  GOUT_DESC("Expanded gridded field."),
6964  IN(),
6965  GIN("in"),
6966  GIN_TYPE(
6967  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6968  GIN_DEFAULT(NODEF),
6969  GIN_DESC("Raw input gridded field.")));
6970 
6971  md_data_raw.push_back(create_mdrecord(
6972  NAME("GriddedFieldLatLonRegrid"),
6973  DESCRIPTION(
6974  "Interpolates the input field along the latitude and longitude dimensions\n"
6975  "to *lat_true* and *lon_true*.\n"
6976  "\n"
6977  "If the input longitude grid is outside of *lon_true* it will be shifted\n"
6978  "left or right by 360. If it covers 360 degrees, a cyclic interpolation\n"
6979  "will be performed.\n"
6980  "in and out fields can be the same variable.\n"),
6981  AUTHORS("Oliver Lemke"),
6982  OUT(),
6983  GOUT("out"),
6984  GOUT_TYPE(
6985  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6986  GOUT_DESC("Regridded gridded field."),
6987  IN("lat_true", "lon_true"),
6988  GIN("in", "interp_order"),
6989  GIN_TYPE(
6990  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3",
6991  "Index"),
6992  GIN_DEFAULT(NODEF, "1"),
6993  GIN_DESC("Raw input gridded field.", "Interpolation order.")));
6994 
6995  md_data_raw.push_back(create_mdrecord(
6996  NAME("GriddedFieldPRegrid"),
6997  DESCRIPTION(
6998  "Interpolates the input field along the pressure dimension to *p_grid*.\n"
6999  "\n"
7000  "If zero-padding is applied (zeropadding=1), pressures that are\n"
7001  "outside the *p_grid* are set to 0. This is thought, e.g., for VMR\n"
7002  "fields that outside the given pressure can safely be assumed to be\n"
7003  "zero.\n"
7004  "Note: Using zeropadding for altitude and temperature fields is\n"
7005  "strongly discouraged (it will work here, though, but likely trigger\n"
7006  "errors later on).\n"
7007  "Extrapolation is allowed within the common 0.5grid-step margin,\n"
7008  "but is overruled by zeropadding.\n"
7009  "in and out fields can be the same variable.\n"),
7010  AUTHORS("Oliver Lemke"),
7011  OUT(),
7012  GOUT("out"),
7013  GOUT_TYPE("GriddedField3, GriddedField4, ArrayOfGriddedField3"),
7014  GOUT_DESC("Regridded gridded field."),
7015  IN("p_grid"),
7016  GIN("in", "interp_order", "zeropadding"),
7017  GIN_TYPE("GriddedField3, GriddedField4, ArrayOfGriddedField3",
7018  "Index",
7019  "Index"),
7020  GIN_DEFAULT(NODEF, "1", "0"),
7021  GIN_DESC("Raw input gridded field.",
7022  "Interpolation order.",
7023  "Apply zero-padding.")));
7024 
7025  md_data_raw.push_back(create_mdrecord(
7026  NAME("GriddedFieldZToPRegrid"),
7027  DESCRIPTION(
7028  "Interpolates the input field along the vertical dimension to *p_grid*.\n"
7029  "\n"
7030  "This is done from z_field, and thus requires the atmosphere to be set \n"
7031  "beforehand.\n"
7032  "\n"
7033  "The latitude and longitude grid of the input field must match *lat_grid*\n"
7034  "and *lon_grid* for the method to work.\n"
7035  "\n"
7036  "BETA mode.\n"),
7037  AUTHORS("Richard Larsson"),
7038  OUT(),
7039  GOUT("out"),
7040  GOUT_TYPE("GriddedField3"),
7041  GOUT_DESC("Regridded output; Pressure-gridded field."),
7042  IN("p_grid", "lat_grid", "lon_grid", "z_field"),
7043  GIN("in", "interp_order", "zeropadding"),
7044  GIN_TYPE("GriddedField3", "Index", "Index"),
7045  GIN_DEFAULT(NODEF, "1", "0"),
7046  GIN_DESC("Raw input; Altitude-gridded field.",
7047  "Interpolation order.",
7048  "Apply zero-padding.")));
7049  md_data_raw.push_back(create_mdrecord(
7050  NAME("heating_ratesFromIrradiance"),
7051  DESCRIPTION(
7052  "Calculates heating rates. It assumes that the heating rates\n"
7053  "depend only on the vertical derivation of the net flux.\n"
7054  "The net flux is the sum of the irradiance field in upward \n"
7055  " direction and the irradiance field in downward direction\n"),
7056  AUTHORS("Manfred Brath"),
7057  OUT("heating_rates"),
7058  GOUT(),
7059  GOUT_TYPE(),
7060  GOUT_DESC(),
7061  IN("p_grid", "irradiance_field", "specific_heat_capacity", "g0"),
7062  GIN(),
7063  GIN_TYPE(),
7064  GIN_DEFAULT(),
7065  GIN_DESC()));
7066 
7067  md_data_raw.push_back(create_mdrecord(
7068  NAME("Ignore"),
7069  DESCRIPTION(
7070  "Ignore a workspace variable.\n"
7071  "\n"
7072  "This method is handy for use in agendas in order to suppress warnings\n"
7073  "about unused input workspace variables. What it does is: Nothing!\n"
7074  "In other words, it just ignores the variable it is called on.\n"
7075  "\n"
7076  "This method can ignore any workspace variable you want.\n"
7077  "\n"
7078  "Usage example:\n"
7079  "\n"
7080  "AgendaSet(els_agenda){\n"
7081  " Ignore(ls_sigma)\n"
7082  " elsLorentz\n"
7083  "}\n"
7084  "\n"
7085  "Without Ignore you would get an error message, because 'els_agenda' is\n"
7086  "supposed to use the Doppler width 'ls_sigma', but the Lorentz lineshape\n"
7087  "'elsLorentz' does not need it.\n"),
7088  AUTHORS("Stefan Buehler"),
7089  OUT(),
7090  GOUT(),
7091  GOUT_TYPE(),
7092  GOUT_DESC(),
7093  IN(),
7094  GIN("in"),
7095  GIN_TYPE("Any"),
7096  GIN_DEFAULT(NODEF),
7097  GIN_DESC("Variable to be ignored."),
7098  SETMETHOD(false),
7099  AGENDAMETHOD(false),
7100  USES_TEMPLATES(true)));
7101 
7102  md_data_raw.push_back(create_mdrecord(
7103  NAME("INCLUDE"),
7104  DESCRIPTION(
7105  "Includes the contents of another controlfile.\n"
7106  "\n"
7107  "The INCLUDE statement inserts the contents of the controlfile\n"
7108  "with the given name into the current controlfile.\n"
7109  "If the filename is given without path information, ARTS will\n"
7110  "first search for the file in all directories specified with the\n"
7111  "-I (see arts -h) commandline option and then in directories given\n"
7112  "in the environment variable ARTS_INCLUDE_PATH. In the environment\n"
7113  "variable multiple paths have to be separated by colons.\n"
7114  "\n"
7115  "Note that INCLUDE is not a workspace method and thus the\n"
7116  "syntax is different:\n"
7117  "\n"
7118  "Arts {\n"
7119  " INCLUDE \"general.arts\"\n"
7120  "}\n"
7121  "\n"
7122  "Includes can also be nested. In the example above general.arts\n"
7123  "can contain further includes which will then be treated\n"
7124  "the same way.\n"
7125  "\n"
7126  "The idea behind this mechanism is that you can write common settings\n"
7127  "for a bunch of calculations into one file. Then, you can create\n"
7128  "several controlfiles which include the basic settings and tweak them\n"
7129  "for different cases. When you decide to make changes to your setup\n"
7130  "that should apply to all calculations, you only have to make a\n"
7131  "single change in the include file instead of modifying all your\n"
7132  "controlfiles.\n"),
7133  AUTHORS("Oliver Lemke"),
7134  OUT(),
7135  GOUT(),
7136  GOUT_TYPE(),
7137  GOUT_DESC(),
7138  IN(),
7139  GIN(),
7140  GIN_TYPE(),
7141  GIN_DEFAULT(),
7142  GIN_DESC()));
7143 
7144  md_data_raw.push_back(create_mdrecord(
7145  NAME("IndexAdd"),
7146  DESCRIPTION(
7147  "Adds a index and a value (out = in+value).\n"
7148  "\n"
7149  "The result can either be stored in the same or another index.\n"
7150  "(in and out can be the same variable, but not out and value)\n"),
7151  AUTHORS("Patrick Eriksson, Oliver Lemke"),
7152  OUT(),
7153  GOUT("out"),
7154  GOUT_TYPE("Index"),
7155  GOUT_DESC("Output numeric."),
7156  IN(),
7157  GIN("in", "value"),
7158  GIN_TYPE("Index", "Index"),
7160  GIN_DESC("Input Index.", "Value to add.")));
7161 
7162  md_data_raw.push_back(create_mdrecord(
7163  NAME("IndexNumberOfAtmosphericPoints"),
7164  DESCRIPTION(
7165  "Counts number of points in the atmosphere.\n"
7166  "\n"
7167  "For a 3D atmosphere the method sets *n* to:\n"
7168  " p_grid.nelem()*lat_grid.nelem()*lon_grid.nelem()\n"
7169  "For 1D and 2D the same calculation is done, but ignoring dimensions\n"
7170  "not active.\n"),
7171  AUTHORS("Patrick Eriksson"),
7172  OUT(),
7173  GOUT("n"),
7174  GOUT_TYPE("Index"),
7175  GOUT_DESC("Variable to set with number of points."),
7176  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
7177  GIN(),
7178  GIN_TYPE(),
7179  GIN_DEFAULT(),
7180  GIN_DESC()));
7181 
7182  md_data_raw.push_back(create_mdrecord(
7183  NAME("IndexSet"),
7184  DESCRIPTION("Sets an index workspace variable to the given value.\n"),
7185  AUTHORS("Patrick Eriksson"),
7186  OUT(),
7187  GOUT("out"),
7188  GOUT_TYPE("Index"),
7189  GOUT_DESC("Variable to initialize."),
7190  IN(),
7191  GIN("value"),
7192  GIN_TYPE("Index"),
7193  GIN_DEFAULT(NODEF),
7194  GIN_DESC("Value."),
7195  SETMETHOD(true)));
7196 
7197  md_data_raw.push_back(create_mdrecord(
7198  NAME("IndexSetToLast"),
7199  DESCRIPTION(
7200  "Set an Index to point towards last position of array-type variables.\n"
7201  "\n"
7202  "This method works as nelemGet, but gives the index number of the last\n"
7203  "element (which equals nelem-1).\n"),
7204  AUTHORS("Patrick Eriksson", "Oliver Lemke"),
7205  OUT("nelem"),
7206  GOUT(),
7207  GOUT_TYPE(),
7208  GOUT_DESC(),
7209  IN(),
7210  GIN("v"),
7211  GIN_TYPE(ARRAY_GROUPS + ", Vector"),
7212  GIN_DEFAULT(NODEF),
7213  GIN_DESC("The method is defined for these groups."),
7214  SETMETHOD(false),
7215  AGENDAMETHOD(false),
7216  USES_TEMPLATES(true)));
7217 
7218  md_data_raw.push_back(
7219  create_mdrecord(NAME("IndexStepDown"),
7220  DESCRIPTION("Performas: out = in - 1\n"
7221  "\n"
7222  "Input and output can be same variable.\n"),
7223  AUTHORS("Patrick Eriksson"),
7224  OUT(),
7225  GOUT("out"),
7226  GOUT_TYPE("Index"),
7227  GOUT_DESC("Output index variable."),
7228  IN(),
7229  GIN("in"),
7230  GIN_TYPE("Index"),
7231  GIN_DEFAULT(NODEF),
7232  GIN_DESC("Input index variable.")));
7233 
7234  md_data_raw.push_back(
7235  create_mdrecord(NAME("IndexStepUp"),
7236  DESCRIPTION("Performas: out = in + 1\n"
7237  "\n"
7238  "Input and output can be same variable.\n"),
7239  AUTHORS("Patrick Eriksson"),
7240  OUT(),
7241  GOUT("out"),
7242  GOUT_TYPE("Index"),
7243  GOUT_DESC("Output index variable."),
7244  IN(),
7245  GIN("in"),
7246  GIN_TYPE("Index"),
7247  GIN_DEFAULT(NODEF),
7248  GIN_DESC("Input index variable.")));
7249 
7250  md_data_raw.push_back(create_mdrecord(
7251  NAME("InterpAtmFieldToPosition"),
7252  DESCRIPTION("Point interpolation of atmospheric fields.\n"
7253  "\n"
7254  "The default way to specify the position is by *rtp_pos*.\n"
7255  "\n"
7256  "Linear interpolation is applied.\n"),
7257  AUTHORS("Patrick Eriksson"),
7258  OUT(),
7259  GOUT("out"),
7260  GOUT_TYPE("Numeric"),
7261  GOUT_DESC("Value obtained by the interpolation."),
7262  IN("atmosphere_dim",
7263  "p_grid",
7264  "lat_grid",
7265  "lon_grid",
7266  "z_field",
7267  "rtp_pos"),
7268  GIN("field"),
7269  GIN_TYPE("Tensor3"),
7270  GIN_DEFAULT(NODEF),
7271  GIN_DESC("Field to interpolate.")));
7272 
7273  md_data_raw.push_back(create_mdrecord(
7274  NAME("InterpGriddedField2ToPosition"),
7275  DESCRIPTION(
7276  "Latitude and longitude interpolation of a GriddedField2.\n"
7277  "\n"
7278  "The default way to specify the position is by *rtp_pos*.\n"
7279  "\n"
7280  "The interpolation is done for the latitude and longitude in\n"
7281  "*rtp_pos*. The altitude in *rtp_pos* is completely ignored.\n"
7282  "Linear interpolation is applied.\n"
7283  "\n"
7284  "The input field (*gfield2*) is expected to have latitude and\n"
7285  "longitude as first and second dimension.\n"),
7286  AUTHORS("Patrick Eriksson"),
7287  OUT(),
7288  GOUT("out"),
7289  GOUT_TYPE("Numeric"),
7290  GOUT_DESC("Value obtained by interpolation."),
7291  IN("atmosphere_dim", "lat_grid", "lat_true", "lon_true", "rtp_pos"),
7292  GIN("gfield2"),
7293  GIN_TYPE("GriddedField2"),
7294  GIN_DEFAULT(NODEF),
7295  GIN_DESC("Gridded field to interpolate.")));
7296 
7297  md_data_raw.push_back(create_mdrecord(
7298  NAME("InterpSurfaceFieldToPosition"),
7299  DESCRIPTION(
7300  "Point interpolation of surface fields.\n"
7301  "\n"
7302  "The default way to specify the position is by *rtp_pos*.\n"
7303  "\n"
7304  "Linear interpolation is applied.\n"
7305  "\n"
7306  "The interpolation is done for the latitude and longitude in\n"
7307  "*rtp_pos*, while the altitude in *rtp_pos* is not part of the\n"
7308  "calculations. However, it is checked that the altitude of *rtp_pos*\n"
7309  "is inside the range covered by *z_surface* with a 1 m margin, to\n"
7310  "give a warning when the specified position is not consistent with\n"
7311  "the surface altitudes.\n"),
7312  AUTHORS("Patrick Eriksson"),
7313  OUT(),
7314  GOUT("out"),
7315  GOUT_TYPE("Numeric"),
7316  GOUT_DESC("Value obtained by interpolation."),
7317  IN("atmosphere_dim", "lat_grid", "lon_grid", "rtp_pos", "z_surface"),
7318  GIN("field"),
7319  GIN_TYPE("Matrix"),
7320  GIN_DEFAULT(NODEF),
7321  GIN_DESC("Field to interpolate.")));
7322 
7323  md_data_raw.push_back(create_mdrecord(
7324  NAME("irradiance_fieldFromRadiance"),
7325  DESCRIPTION(
7326  "Calculate the irradiance also known as flux density from the *radiance_field* .\n"
7327  "by integrating over the angular grids according to the grids set\n"
7328  "by *AngularGridsSetFluxCalc* \n"
7329  "See *AngularGridsSetFluxCalc to set \n"
7330  "*za_grid, aa_grid, and za_grid_weights*\n"),
7331  AUTHORS("Manfred Brath"),
7332  OUT("irradiance_field"),
7333  GOUT(),
7334  GOUT_TYPE(),
7335  GOUT_DESC(),
7336  IN("radiance_field", "za_grid", "aa_grid", "za_grid_weights"),
7337  GIN(),
7338  GIN_TYPE(),
7339  GIN_DEFAULT(),
7340  GIN_DESC()));
7341 
7342  md_data_raw.push_back(create_mdrecord(
7343  NAME("isotopologue_ratiosInitFromBuiltin"),
7344  DESCRIPTION(
7345  "Initialize isotopologue ratios with default values from built-in\n"
7346  "species data.\n"),
7347  AUTHORS("Oliver Lemke"),
7348  OUT("isotopologue_ratios"),
7349  GOUT(),
7350  GOUT_TYPE(),
7351  GOUT_DESC(),
7352  IN(),
7353  GIN(),
7354  GIN_TYPE(),
7355  GIN_DEFAULT(),
7356  GIN_DESC()));
7357 
7358  md_data_raw.push_back(create_mdrecord(
7359  NAME("iyActiveSingleScat"),
7360  DESCRIPTION(
7361  "Simulation of radar/lidar, restricted to single scattering.\n"
7362  "\n"
7363  "The WSM treats e.g. radar measurements of cloud and precipitation,\n"
7364  "on the condition that multiple scattering can be ignored. Beside\n"
7365  "the direct backsacttering, the two-way attenuation by gases and\n"
7366  "particles is considered. Surface scattering is ignored.\n"
7367  "\n"
7368  "The method could potentially be used for lidars, but multiple\n"
7369  "scattering poses here a must stronger constrain for the range of\n"
7370  "applications.\n"
7371  "\n"
7372  "The method can be used with *iyCalc*, but not with *yCalc*. In the\n"
7373  "later case, use instead *yActive*.\n"
7374  "\n"
7375  "The method returns the backscattering for each point of *ppath*.\n"
7376  "Several frequencies can be treated in parallel. The size of *iy*\n"
7377  "is [ nf*np, stokes_dim ], where nf is the length of *f_grid* and\n"
7378  "np is the number of path points. The data are stored in blocks\n"
7379  "of [ np, stokes_dim ]. That is, all the results for the first\n"
7380  "frequency occupy the np first rows of *iy* etc.\n"
7381  "\n"
7382  "The polarisation state of the transmitted pulse is taken from\n"
7383  "*iy_transmitter_agenda*. If the radar transmits several polarisations\n"
7384  "at the same frequency, you need to handle this by using two frequencies\n"
7385  "in *f_grid*, but these can be almost identical.\n"
7386  "\n"
7387  "This method does not consider *iy_unit*. Unit changes are insted applied\n"
7388  "in *yActive. The output of this method matches the option \"1\".\n"
7389  "\n"
7390  "Transmission is handled in a slightly simplified manner for efficiency\n"
7391  "reasons. First of all, the transmission matrix is assumed to be the same\n"
7392  "in both directions between the sensor and the point of back-scattering.\n"
7393  "This should in general be true, but exceptions could exist. The extinction\n"
7394  "due to particles can also be scaled, which could be of interest when e.g.\n"
7395  "characterising inversions.\n"
7396  "\n"
7397  "Further, for Jacobian calculations the default is to assume that the\n"
7398  "transmission is unaffected by the retrieval quantities. This is done\n"
7399  "to save computational time, and should be a valid approximation for the\n"
7400  "single-scattering conditions. Set *trans_in_jacobian* to 1 to obtain\n"
7401  "the more accurate Jacobian.\n"
7402  "\n"
7403  "Some auxiliary radiative transfer quantities can be obtained. Auxiliary\n"
7404  "quantities are selected by *iy_aux_vars* and returned by *iy_aux*.\n"
7405  "Valid choices for auxiliary data are:\n"
7406  " \"Radiative background\": Index value flagging the radiative\n"
7407  " background. The following coding is used: 0=space, 1=surface\n"
7408  " and 2=cloudbox.\n"
7409  " \"Backscattering\": The unattenuated backscattering. That is, as\n"
7410  " *iy* but with no attenuated applied. Here all columns are filled.\n"
7411  " \"Optical depth\": Scalar, total and two-way, optical depth between\n"
7412  " sensor and each point of the propagation path. Calculated based on\n"
7413  " the (1,1)-element of the transmission matrix (1-based indexing),\n"
7414  " i.e. only fully valid for scalar RT.\n"
7415  " \"Particle extinction\": As \"Optical depth\", but only with particle\n"
7416  " attenuation included. That is, gas absorption is ignored.\n"
7417  "If nothing else is stated, only the first column of *iy_aux* is filled,\n"
7418  "i.e. the column matching Stokes element I, while remaing columns are\n"
7419  "are filled with zeros.\n"),
7420  AUTHORS("Patrick Eriksson"),
7421  OUT("iy",
7422  "iy_aux",
7423  "diy_dx",
7424  "ppvar_p",
7425  "ppvar_t",
7426  "ppvar_nlte",
7427  "ppvar_vmr",
7428  "ppvar_wind",
7429  "ppvar_mag",
7430  "ppvar_pnd",
7431  "ppvar_f",
7432  "ppvar_trans_cumulat"),
7433  GOUT(),
7434  GOUT_TYPE(),
7435  GOUT_DESC(),
7436  IN("diy_dx",
7437  "stokes_dim",
7438  "f_grid",
7439  "atmosphere_dim",
7440  "p_grid",
7441  "t_field",
7442  "nlte_field",
7443  "vmr_field",
7444  "abs_species",
7445  "wind_u_field",
7446  "wind_v_field",
7447  "wind_w_field",
7448  "mag_u_field",
7449  "mag_v_field",
7450  "mag_w_field",
7451  "cloudbox_on",
7452  "cloudbox_limits",
7453  "pnd_field",
7454  "dpnd_field_dx",
7455  "scat_species",
7456  "scat_data",
7457  "scat_data_checked",
7458  "iy_aux_vars",
7459  "jacobian_do",
7460  "jacobian_quantities",
7461  "ppath",
7462  "propmat_clearsky_agenda",
7463  "water_p_eq_agenda",
7464  "iy_transmitter_agenda",
7465  "iy_agenda_call1",
7466  "iy_transmission",
7467  "rte_alonglos_v"),
7468  GIN("trans_in_jacobian", "pext_scaling", "t_interp_order"),
7469  GIN_TYPE("Index", "Numeric", "Index"),
7470  GIN_DEFAULT("0", "1", "1"),
7471  GIN_DESC("Flag determining if change in transmission is considered"
7472  " in calculation of the Jacobian or not.",
7473  "Particle extinction is scaled with this value. A value"
7474  " inside [0,2]. Set it to 0 if you want to remove particle"
7475  " extinction totally.",
7476  "Interpolation order of temperature for scattering data (so"
7477  " far only applied in phase matrix, not in extinction and"
7478  " absorption.")));
7479 
7480  md_data_raw.push_back(create_mdrecord(
7481  NAME("iyActiveSingleScat2"),
7482  DESCRIPTION("TESTING\n"),
7483  AUTHORS("Patrick Eriksson", "Richard Larsson"),
7484  OUT("iy",
7485  "iy_aux",
7486  "diy_dx",
7487  "ppvar_p",
7488  "ppvar_t",
7489  "ppvar_nlte",
7490  "ppvar_vmr",
7491  "ppvar_wind",
7492  "ppvar_mag",
7493  "ppvar_pnd",
7494  "ppvar_f",
7495  "ppvar_trans_cumulat"),
7496  GOUT(),
7497  GOUT_TYPE(),
7498  GOUT_DESC(),
7499  IN("diy_dx",
7500  "stokes_dim",
7501  "f_grid",
7502  "atmosphere_dim",
7503  "p_grid",
7504  "t_field",
7505  "nlte_field",
7506  "vmr_field",
7507  "abs_species",
7508  "wind_u_field",
7509  "wind_v_field",
7510  "wind_w_field",
7511  "mag_u_field",
7512  "mag_v_field",
7513  "mag_w_field",
7514  "cloudbox_on",
7515  "cloudbox_limits",
7516  "pnd_field",
7517  "dpnd_field_dx",
7518  "scat_species",
7519  "scat_data",
7520  "scat_data_checked",
7521  "iy_aux_vars",
7522  "jacobian_do",
7523  "jacobian_quantities",
7524  "ppath",
7525  "propmat_clearsky_agenda",
7526  "water_p_eq_agenda",
7527  "iy_transmitter_agenda",
7528  "iy_agenda_call1",
7529  "iy_transmission",
7530  "rte_alonglos_v"),
7531  GIN("trans_in_jacobian", "pext_scaling", "t_interp_order"),
7532  GIN_TYPE("Index", "Numeric", "Index"),
7533  GIN_DEFAULT("0", "1", "1"),
7534  GIN_DESC("Flag determining if change in transmission is considered"
7535  " in calculation of the Jacobian or not.",
7536  "Particle extinction is scaled with this value. A value"
7537  " inside [0,2]. Set it to 0 if you want to remove particle"
7538  " extinction totally.",
7539  "Interpolation order of temperature for scattering data (so"
7540  " far only applied in phase matrix, not in extinction and"
7541  " absorption.")));
7542 
7543  md_data_raw.push_back(create_mdrecord(
7544  NAME("iyApplyUnit"),
7545  DESCRIPTION(
7546  "Conversion of *iy* to other spectral units.\n"
7547  "\n"
7548  "The method allows a change of unit, as a post-processing step,\n"
7549  "ignoring the n2-law of radiance.\n"
7550  "\n"
7551  "The conversion made inside *iyEmissionStandard* is mimiced,\n"
7552  "see that method for constraints and selection of output units.\n"
7553  "Restricted to that the n2-law can be ignored. This assumption\n"
7554  "is valid if the sensor is placed in space, or if the refractive\n"
7555  "index only deviates slightly from unity.\n"
7556  "\n"
7557  "It is stressed that there is no automatic check that the method is\n"
7558  "applied correctly, it is up to the user to ensure that the input\n"
7559  "data are suitable for the conversion.\n"
7560  "\n"
7561  "Beside *iy*, these auxilary quantities are modified:\n"
7562  " \"iy\", \"Error\" and \"Error (uncorrelated)\"\n"
7563  "\n"
7564  "Please note that *diy_dx* is not handled.\n"),
7565  AUTHORS("Patrick Eriksson"),
7566  OUT("iy", "iy_aux"),
7567  GOUT(),
7568  GOUT_TYPE(),
7569  GOUT_DESC(),
7570  IN("iy", "iy_aux", "stokes_dim", "f_grid", "iy_aux_vars", "iy_unit"),
7571  GIN(),
7572  GIN_TYPE(),
7573  GIN_DEFAULT(),
7574  GIN_DESC()));
7575 
7576  md_data_raw.push_back(
7578 
7579  (NAME("iyCalc"),
7580  DESCRIPTION(
7581  "A single monochromatic pencil beam calculation.\n"
7582  "\n"
7583  "Performs monochromatic radiative transfer calculations for the\n"
7584  "specified position (*rte_pos*) and line-of-sight (*rte_pos*).\n"
7585  "See *iy* and associated variables for format of output.\n"
7586  "\n"
7587  "Please note that Jacobian type calculations not are supported.\n"
7588  "For this use *yCalc*.\n"
7589  "\n"
7590  "No sensor characteristics are applied. These are most easily\n"
7591  "incorporated by using *yCalc*\n"),
7592  AUTHORS("Patrick Eriksson"),
7593  OUT("iy", "iy_aux", "ppath"),
7594  GOUT(),
7595  GOUT_TYPE(),
7596  GOUT_DESC(),
7597  IN("atmgeom_checked",
7598  "atmfields_checked",
7599  "iy_aux_vars",
7600  "iy_id",
7601  "cloudbox_on",
7602  "cloudbox_checked",
7603  "scat_data_checked",
7604  "f_grid",
7605  "nlte_field",
7606  "rte_pos",
7607  "rte_los",
7608  "rte_pos2",
7609  "iy_unit",
7610  "iy_main_agenda"),
7611  GIN(),
7612  GIN_TYPE(),
7613  GIN_DEFAULT(),
7614  GIN_DESC()));
7615 
7616  md_data_raw.push_back(create_mdrecord(
7617  NAME("iyEmissionStandard"),
7618  DESCRIPTION(
7619  "Standard method for radiative transfer calculations with emission.\n"
7620  "\n"
7621  "Designed to be part of *iy_main_agenda*. That is, only valid\n"
7622  "outside the cloudbox (no scattering). For details se the user guide.\n"
7623  "\n"
7624  "The possible choices for *iy_unit* are\n"
7625  " \"1\" : No conversion, i.e. [W/(m^2 Hz sr)] (radiance per\n"
7626  " frequency unit).\n"
7627  " \"RJBT\" : Conversion to Rayleigh-Jean brightness\n"
7628  " temperature.\n"
7629  " \"PlanckBT\" : Conversion to Planck brightness temperature.\n"
7630  " \"W/(m^2 m sr)\" : Conversion to [W/(m^2 m sr)] (radiance per\n"
7631  " wavelength unit).\n"
7632  " \"W/(m^2 m-1 sr)\": Conversion to [W/(m^2 m-1 sr)] (radiance per\n"
7633  " wavenumber unit).\n"
7634  "Expressions applied and considerations for the unit conversion of\n"
7635  "radiances are discussed in Sec. 5.7 of the ARTS-2.0 article.\n"
7636  "\n"
7637  "*iy_unit* is only applied if *iy_agenda_call1* is 1. This means that\n"
7638  "no unit ocnversion is applied for internal iterative calls.\n"
7639  "\n"
7640  "Some auxiliary radiative transfer quantities can be obtained. Auxiliary\n"
7641  "quantities are selected by *iy_aux_vars* and returned by *iy_aux*.\n"
7642  "Valid choices for auxiliary data are:\n"
7643  " \"Radiative background\": Index value flagging the radiative\n"
7644  " background. The following coding is used: 0=space, 1=surface\n"
7645  " and 2=cloudbox.\n"
7646  " \"Optical depth\": Scalar optical depth between the observation point\n"
7647  " and the end of the present propagation path. Calculated based on\n"
7648  " the (1,1)-element of the transmission matrix (1-based indexing),\n"
7649  " i.e. only fully valid for scalar RT.\n"
7650  "If nothing else is stated, only the first column of *iy_aux* is filled,\n"
7651  "i.e. the column matching Stokes element I, while remaing columns are\n"
7652  "are filled with zeros.\n"),
7653  AUTHORS("Patrick Eriksson", "Richard Larsson", "Oliver Lemke"),
7654  OUT("iy",
7655  "iy_aux",
7656  "diy_dx",
7657  "ppvar_p",
7658  "ppvar_t",
7659  "ppvar_nlte",
7660  "ppvar_vmr",
7661  "ppvar_wind",
7662  "ppvar_mag",
7663  "ppvar_f",
7664  "ppvar_iy",
7665  "ppvar_trans_cumulat",
7666  "ppvar_trans_partial"),
7667  GOUT(),
7668  GOUT_TYPE(),
7669  GOUT_DESC(),
7670  IN("diy_dx",
7671  "iy_id",
7672  "stokes_dim",
7673  "f_grid",
7674  "atmosphere_dim",
7675  "p_grid",
7676  "t_field",
7677  "nlte_field",
7678  "vmr_field",
7679  "abs_species",
7680  "wind_u_field",
7681  "wind_v_field",
7682  "wind_w_field",
7683  "mag_u_field",
7684  "mag_v_field",
7685  "mag_w_field",
7686  "cloudbox_on",
7687  "iy_unit",
7688  "iy_aux_vars",
7689  "jacobian_do",
7690  "jacobian_quantities",
7691  "ppath",
7692  "rte_pos2",
7693  "propmat_clearsky_agenda",
7694  "water_p_eq_agenda",
7695  "iy_main_agenda",
7696  "iy_space_agenda",
7697  "iy_surface_agenda",
7698  "iy_cloudbox_agenda",
7699  "iy_agenda_call1",
7700  "iy_transmission",
7701  "rte_alonglos_v",
7702  "surface_props_data"),
7703  GIN(),
7704  GIN_TYPE(),
7705  GIN_DEFAULT(),
7706  GIN_DESC()));
7707 
7708  md_data_raw.push_back(create_mdrecord(
7709  NAME("iyEmissionStandardSequential"),
7710  DESCRIPTION(
7711  "DEPRECATED! Should go away soon\n"
7712  "Sequential version of *iyEmissionStandard*\n"
7713  "\n"
7714  "For documentation see *iyEmissionStandard*.\n"),
7715  AUTHORS("Patrick Eriksson", "Richard Larsson"),
7716  OUT("iy",
7717  "iy_aux",
7718  "diy_dx",
7719  "ppvar_p",
7720  "ppvar_t",
7721  "ppvar_nlte",
7722  "ppvar_vmr",
7723  "ppvar_wind",
7724  "ppvar_mag",
7725  "ppvar_f",
7726  "ppvar_iy",
7727  "ppvar_trans_cumulat",
7728  "ppvar_trans_partial"),
7729  GOUT(),
7730  GOUT_TYPE(),
7731  GOUT_DESC(),
7732  IN("diy_dx",
7733  "iy_id",
7734  "stokes_dim",
7735  "f_grid",
7736  "atmosphere_dim",
7737  "p_grid",
7738  "t_field",
7739  "nlte_field",
7740  "vmr_field",
7741  "abs_species",
7742  "wind_u_field",
7743  "wind_v_field",
7744  "wind_w_field",
7745  "mag_u_field",
7746  "mag_v_field",
7747  "mag_w_field",
7748  "cloudbox_on",
7749  "iy_unit",
7750  "iy_aux_vars",
7751  "jacobian_do",
7752  "jacobian_quantities",
7753  "ppath",
7754  "rte_pos2",
7755  "propmat_clearsky_agenda",
7756  "water_p_eq_agenda",
7757  "iy_main_agenda",
7758  "iy_space_agenda",
7759  "iy_surface_agenda",
7760  "iy_cloudbox_agenda",
7761  "iy_agenda_call1",
7762  "iy_transmission",
7763  "rte_alonglos_v",
7764  "surface_props_data"),
7765  GIN(),
7766  GIN_TYPE(),
7767  GIN_DEFAULT(),
7768  GIN_DESC()));
7769  /*
7770  md_data_raw.push_back
7771  ( create_mdrecord
7772  ( NAME( "iyFOS" ),
7773  DESCRIPTION
7774  (
7775  "Method in development. Don't use without contacting Patrick.\n"
7776  "\n"
7777  "Regarding radiance unit, works exactly as *iyEmissionStandard*.\n"
7778  "\n"
7779  "The *fos_n* argument determines the maximum scattering order that\n"
7780  "will be considered. For example, 1 corresponds to that only single\n"
7781  "scattering is considered. The value 0 is accepted and results\n"
7782  "in calculations of clear-sky type. In the later case, particle\n"
7783  "absorption/emission is considered if cloudbox is active. If\n"
7784  "cloudbox is not active,clear-sky results are returned for all\n"
7785  "values of *fos_n*.\n"
7786  "\n"
7787  "The following auxiliary data can be obtained:\n"
7788  " \"Pressure\": The pressure along the propagation path.\n"
7789  " Size: [1,1,1,np].\n"
7790  " \"Temperature\": The temperature along the propagation path.\n"
7791  " Size: [1,1,1,np].\n"
7792  " \"VMR, species X\": VMR of the species with index X (zero based).\n"
7793  " For example, adding the string \"VMR, species 0\" extracts the\n"
7794  " VMR of the first species. Size: [1,1,1,np].\n"
7795  " \"Absorption, summed\": The total absorption matrix along the\n"
7796  " path. Size: [nf,ns,ns,np].\n"
7797  " \"Absorption, species X\": The absorption matrix along the path\n"
7798  " for an individual species (X works as for VMR).\n"
7799  " Size: [nf,ns,ns,np].\n"
7800  " \"PND, type X\": The particle number density for scattering element\n"
7801  " type X (ie. corresponds to book X in pnd_field).\n"
7802  " Size: [1,1,1,np].\n"
7803  " \"Mass content, X\": The mass content for scattering element X.\n"
7804  " This corresponds to column X in *particle_masses* (zero-\n"
7805  " based indexing). Size: [1,1,1,np].\n"
7806  "* \"Radiative background\": Index value flagging the radiative\n"
7807  " background. The following coding is used: 0=space and\n"
7808  " and 1=surface. Size: [nf,1,1,1].\n"
7809  " \"iy\": The radiance at each point along the path (*iy_unit* is.\n"
7810  " considered). Size: [nf,ns,1,np].\n"
7811  "* \"Optical depth\": The scalar optical depth between the\n"
7812  " observation point and the end of the primary propagation path\n"
7813  " (ie. the optical depth to the surface or space.). Calculated\n"
7814  " in a pure scalar manner, and not dependent on direction.\n"
7815  " Size: [nf,1,1,1].\n"
7816  "where\n"
7817  " nf: Number of frequencies.\n"
7818  " ns: Number of Stokes elements.\n"
7819  " np: Number of propagation path points.\n"
7820  "\n"
7821  "The auxiliary data are returned in *iy_aux* with quantities\n"
7822  "selected by *iy_aux_vars*. Most variables require that the method\n"
7823  "is called directly or by *iyCalc*. For calculations using *yCalc*,\n"
7824  "the selection is restricted to the variables marked with *.\n"
7825  ),
7826  AUTHORS( "Patrick Eriksson" ),
7827  OUT( "iy", "iy_aux", "ppath", "diy_dx" ),
7828  GOUT(),
7829  GOUT_TYPE(),
7830  GOUT_DESC(),
7831  IN( "diy_dx", "stokes_dim", "f_grid", "atmosphere_dim",
7832  "p_grid", "z_field", "t_field", "vmr_field", "abs_species",
7833  "wind_u_field", "wind_v_field", "wind_w_field", "mag_u_field",
7834  "mag_v_field", "mag_w_field", "cloudbox_on", "cloudbox_limits",
7835  "pnd_field", "scat_data",
7836  "particle_masses", "iy_unit", "iy_aux_vars", "jacobian_do",
7837  "ppath_agenda",
7838  "propmat_clearsky_agenda", "iy_main_agenda", "iy_space_agenda",
7839  "iy_surface_agenda", "iy_agenda_call1", "iy_transmission",
7840  "rte_pos", "rte_los", "rte_pos2", "rte_alonglos_v",
7841  "ppath_lmax", "ppath_lraytrace",
7842  "fos_scatint_angles", "fos_iyin_za_angles"
7843  ),
7844  GIN( "fos_za_interporder", "fos_n" ),
7845  GIN_TYPE( "Index", "Index" ),
7846  GIN_DEFAULT( "1", "1" ),
7847  GIN_DESC( "Polynomial order for zenith angle interpolation.",
7848  "Max scattering order to consider." )
7849  ));
7850  */
7851 
7852  md_data_raw.push_back(create_mdrecord(
7853  NAME("iyHybrid"),
7854  DESCRIPTION("So far just for testing.\n"),
7855  AUTHORS("Patrick Eriksson", "Jana Mendrok", "Richard Larsson"),
7856  OUT("iy",
7857  "iy_aux",
7858  "diy_dx",
7859  "ppvar_p",
7860  "ppvar_t",
7861  "ppvar_nlte",
7862  "ppvar_vmr",
7863  "ppvar_wind",
7864  "ppvar_mag",
7865  "ppvar_pnd",
7866  "ppvar_f",
7867  "ppvar_iy",
7868  "ppvar_trans_cumulat"),
7869  GOUT(),
7870  GOUT_TYPE(),
7871  GOUT_DESC(),
7872  IN("diy_dx",
7873  "iy_id",
7874  "stokes_dim",
7875  "f_grid",
7876  "atmosphere_dim",
7877  "p_grid",
7878  "t_field",
7879  "nlte_field",
7880  "vmr_field",
7881  "abs_species",
7882  "wind_u_field",
7883  "wind_v_field",
7884  "wind_w_field",
7885  "mag_u_field",
7886  "mag_v_field",
7887  "mag_w_field",
7888  "cloudbox_on",
7889  "cloudbox_limits",
7890  "pnd_field",
7891  "dpnd_field_dx",
7892  "scat_species",
7893  "scat_data",
7894  "iy_unit",
7895  "iy_aux_vars",
7896  "jacobian_do",
7897  "jacobian_quantities",
7898  "propmat_clearsky_agenda",
7899  "water_p_eq_agenda",
7900  "iy_main_agenda",
7901  "iy_space_agenda",
7902  "iy_surface_agenda",
7903  "iy_cloudbox_agenda",
7904  "iy_agenda_call1",
7905  "iy_transmission",
7906  "ppath",
7907  "rte_pos2",
7908  "rte_alonglos_v",
7909  "surface_props_data",
7910  "cloudbox_field",
7911  "za_grid"),
7912  GIN("Naa_grid", "t_interp_order"),
7913  GIN_TYPE("Index", "Index"),
7914  GIN_DEFAULT("19", "1"),
7915  GIN_DESC("Number of azimuth angles to consider in scattering source term"
7916  " integral.",
7917  "Interpolation order of temperature for scattering data (so"
7918  " far only applied in phase matrix, not in extinction and"
7919  " absorption.")));
7920 
7921  md_data_raw.push_back(create_mdrecord(
7922  NAME("iyHybrid2"),
7923  DESCRIPTION("So far just for even more testing.\n"),
7924  AUTHORS("Patrick Eriksson", "Jana Mendrok", "Richard Larsson"),
7925  OUT("iy",
7926  "iy_aux",
7927  "diy_dx",
7928  "ppvar_p",
7929  "ppvar_t",
7930  "ppvar_nlte",
7931  "ppvar_vmr",
7932  "ppvar_wind",
7933  "ppvar_mag",
7934  "ppvar_pnd",
7935  "ppvar_f",
7936  "ppvar_iy",
7937  "ppvar_trans_cumulat"),
7938  GOUT(),
7939  GOUT_TYPE(),
7940  GOUT_DESC(),
7941  IN("diy_dx",
7942  "iy_id",
7943  "stokes_dim",
7944  "f_grid",
7945  "atmosphere_dim",
7946  "p_grid",
7947  "t_field",
7948  "nlte_field",
7949  "vmr_field",
7950  "abs_species",
7951  "wind_u_field",
7952  "wind_v_field",
7953  "wind_w_field",
7954  "mag_u_field",
7955  "mag_v_field",
7956  "mag_w_field",
7957  "cloudbox_on",
7958  "cloudbox_limits",
7959  "pnd_field",
7960  "dpnd_field_dx",
7961  "scat_species",
7962  "scat_data",
7963  "iy_unit",
7964  "iy_aux_vars",
7965  "jacobian_do",
7966  "jacobian_quantities",
7967  "propmat_clearsky_agenda",
7968  "water_p_eq_agenda",
7969  "iy_main_agenda",
7970  "iy_space_agenda",
7971  "iy_surface_agenda",
7972  "iy_cloudbox_agenda",
7973  "iy_agenda_call1",
7974  "iy_transmission",
7975  "ppath",
7976  "rte_pos2",
7977  "rte_alonglos_v",
7978  "surface_props_data",
7979  "cloudbox_field",
7980  "za_grid"),
7981  GIN("Naa_grid", "t_interp_order"),
7982  GIN_TYPE("Index", "Index"),
7983  GIN_DEFAULT("19", "1"),
7984  GIN_DESC("Number of azimuth angles to consider in scattering source term"
7985  " integral.",
7986  "Interpolation order of temperature for scattering data (so"
7987  " far only applied in phase matrix, not in extinction and"
7988  " absorption.")));
7989 
7990  md_data_raw.push_back(create_mdrecord(
7991  NAME("iyIndependentBeamApproximation"),
7992  DESCRIPTION("In development ....\n"
7993  "\n"
7994  "Describe how *atm_fields_compact* is filled.\n"),
7995  AUTHORS("Patrick Eriksson"),
7996  OUT("iy", "iy_aux", "ppath", "diy_dx", "atm_fields_compact"),
7997  GOUT(),
7998  GOUT_TYPE(),
7999  GOUT_DESC(),
8000  IN("diy_dx",
8001  "iy_id",
8002  "f_grid",
8003  "atmosphere_dim",
8004  "p_grid",
8005  "lat_grid",
8006  "lon_grid",
8007  "lat_true",
8008  "lon_true",
8009  "t_field",
8010  "z_field",
8011  "vmr_field",
8012  "nlte_field",
8013  "wind_u_field",
8014  "wind_v_field",
8015  "wind_w_field",
8016  "mag_u_field",
8017  "mag_v_field",
8018  "mag_w_field",
8019  "cloudbox_on",
8020  "cloudbox_limits",
8021  "pnd_field",
8022  "particle_masses",
8023  "ppath_agenda",
8024  "ppath_lmax",
8025  "ppath_lraytrace",
8026  "iy_agenda_call1",
8027  "iy_unit",
8028  "iy_transmission",
8029  "rte_pos",
8030  "rte_los",
8031  "rte_pos2",
8032  "jacobian_do",
8033  "iy_aux_vars",
8034  "iy_independent_beam_approx_agenda"),
8035  GIN("return_atm1d", "skip_vmr", "skip_pnd", "return_masses"),
8036  GIN_TYPE("Index", "Index", "Index", "Index"),
8037  GIN_DEFAULT("0", "0", "0", "0"),
8038  GIN_DESC(
8039  "Flag to trigger that *atm_fields_compact* is filled. ",
8040  "Flag to not include vmr data in *atm_fields_compact*.",
8041  "Flag to not include pnd data in *atm_fields_compact*.",
8042  "Flag to include particle category masses in *atm_fields_compact*."
8043  "Conversion is done by *particle_masses*.")));
8044 
8045  md_data_raw.push_back(create_mdrecord(
8046  NAME("iyInterpCloudboxField"),
8047  DESCRIPTION(
8048  "Interpolates the intensity field of the cloud box.\n"
8049  "\n"
8050  "Determines the intensity field at the position and direction\n"
8051  "specified by *rte_pos* and *rte_los*. The position can be both\n"
8052  "inside the cloud box or at its edge.\n"
8053  "\n"
8054  "The interpolation in the spatial dimensions is linear.\n"
8055  "\n"
8056  "For the zenith angle dimensions several options for controlling\n"
8057  "the interpolation are at hand. Default is linear interpolation.\n"
8058  "Higher order polynomial interpolation is activated by setting\n"
8059  "*za_interp_order* to a value > 1. Default is to perform the\n"
8060  "interpolation separately for [0,90[ and ]90,180]. To handle\n"
8061  "90 degree or use the full range ([0,180]) as basis for the\n"
8062  "interpolation, set *za_restrict* to 0. You can select to use\n"
8063  "cos(za) as the independent variable (instead of za) by setting\n"
8064  "*cos_za_interp* to 1.\n"
8065  "\n"
8066  "For the azimuth dimension the interpolation order can be\n"
8067  "selected, in the same manner as for zenith.\n"),
8068  AUTHORS("Claudia Emde", "Patrick Eriksson", "Jana Mendrok"),
8069  OUT("iy"),
8070  GOUT(),
8071  GOUT_TYPE(),
8072  GOUT_DESC(),
8073  IN("cloudbox_field",
8074  "rtp_pos",
8075  "rtp_los",
8076  "jacobian_do",
8077  "cloudbox_on",
8078  "cloudbox_limits",
8079  "atmosphere_dim",
8080  "p_grid",
8081  "lat_grid",
8082  "lon_grid",
8083  "z_field",
8084  "z_surface",
8085  "stokes_dim",
8086  "za_grid",
8087  "aa_grid",
8088  "f_grid"),
8089  GIN("za_interp_order",
8090  "za_restrict",
8091  "cos_za_interp",
8092  "za_extpolfac",
8093  "aa_interp_order"),
8094  GIN_TYPE("Index", "Index", "Index", "Numeric", "Index"),
8095  GIN_DEFAULT("1", "1", "0", "0.5", "1"),
8096  GIN_DESC("Zenith angle interpolation order.",
8097  "Flag whether to restric zenith angle interpolation to one "
8098  "hemisphere.",
8099  "Flag whether to do zenith angle interpolation in cosine space.",
8100  "Maximum allowed extrapolation range in zenith angle.",
8101  "Azimuth angle interpolation order.")));
8102 
8103  md_data_raw.push_back(create_mdrecord(
8104  NAME("iyLoopFrequencies"),
8105  DESCRIPTION(
8106  "Radiative transfer calculations one frequency at the time.\n"
8107  "\n"
8108  "The method loops the frequencies in *f_grid* and calls\n"
8109  "*iy_loop_freqs_agenda* for each individual value. This method is\n"
8110  "placed in *iy_main_agenda*, and the actual radiative transfer\n"
8111  " method is put in *iy_loop_freqs_agenda*.\n"
8112  "\n"
8113  "A common justification for using the method should be to consider\n"
8114  "dispersion. By using this method it is ensured that the propagation\n"
8115  "path for each individual frequency is calculated.\n"),
8116  AUTHORS("Patrick Eriksson"),
8117  OUT("iy", "iy_aux", "ppath", "diy_dx"),
8118  GOUT(),
8119  GOUT_TYPE(),
8120  GOUT_DESC(),
8121  IN("iy_aux_vars",
8122  "iy_agenda_call1",
8123  "iy_transmission",
8124  "rte_pos",
8125  "rte_los",
8126  "rte_pos2",
8127  "stokes_dim",
8128  "f_grid",
8129  "iy_loop_freqs_agenda"),
8130  GIN(),
8131  GIN_TYPE(),
8132  GIN_DEFAULT(),
8133  GIN_DESC()));
8134 
8135  md_data_raw.push_back(create_mdrecord(
8136  NAME("iyMC"),
8137  DESCRIPTION(
8138  "Interface to Monte Carlo part for *iy_main_agenda*.\n"
8139  "\n"
8140  "Basically an interface to *MCGeneral* for doing monochromatic\n"
8141  "pencil beam calculations. This functions allows Monte Carlo (MC)\n"
8142  "calculations for sets of frequencies and sensor pos/los in a single\n"
8143  "run. Sensor responses can be included in the standard manner\n"
8144  "(through *yCalc*).\n"
8145  "\n"
8146  "This function does not apply the MC approach when it comes\n"
8147  "to sensor properties. These properties are not considered when\n"
8148  "tracking photons, which is done in *MCGeneral* (but then only for\n"
8149  "the antenna pattern).\n"
8150  "\n"
8151  "Output unit options (*iy_unit*) exactly as for *MCGeneral*.\n"
8152  "\n"
8153  "The MC calculation errors are all assumed be uncorrelated and each\n"
8154  "have a normal distribution. These properties are of relevance when\n"
8155  "weighting the errors with the sensor repsonse matrix. The seed is\n"
8156  "reset for each call of *MCGeneral* to obtain uncorrelated errors.\n"
8157  "\n"
8158  "MC control arguments (mc_std_err, mc_max_time, mc_min_iter, mc_max_iter\n"
8159  "mc_taustep_limit) as for *MCGeneral*. The arguments are applied\n"
8160  "for each monochromatic pencil beam calculation individually.\n"
8161  "As for *MCGeneral*, the value of *mc_error* shall be adopted to\n"
8162  "*iy_unit*.\n"
8163  "\n"
8164  "The following auxiliary data can be obtained:\n"
8165  " \"Error (uncorrelated)\": Calculation error. Size: [nf,ns,1,1].\n"
8166  " (The later part of the text string is required. It is used as\n"
8167  " a flag to yCalc for how to apply the sensor data.)\n"
8168  "where\n"
8169  " nf: Number of frequencies.\n"
8170  " ns: Number of Stokes elements.\n"),
8171  AUTHORS("Patrick Eriksson"),
8172  OUT("iy", "iy_aux", "diy_dx"),
8173  GOUT(),
8174  GOUT_TYPE(),
8175  GOUT_DESC(),
8176  IN("iy_agenda_call1",
8177  "iy_transmission",
8178  "rte_pos",
8179  "rte_los",
8180  "iy_aux_vars",
8181  "jacobian_do",
8182  "atmosphere_dim",
8183  "p_grid",
8184  "lat_grid",
8185  "lon_grid",
8186  "z_field",
8187  "t_field",
8188  "vmr_field",
8189  "refellipsoid",
8190  "z_surface",
8191  "cloudbox_on",
8192  "cloudbox_limits",
8193  "stokes_dim",
8194  "f_grid",
8195  "scat_data",
8196  "iy_space_agenda",
8197  "surface_rtprop_agenda",
8198  "propmat_clearsky_agenda",
8199  "ppath_step_agenda",
8200  "ppath_lmax",
8201  "ppath_lraytrace",
8202  "pnd_field",
8203  "iy_unit",
8204  "mc_std_err",
8205  "mc_max_time",
8206  "mc_max_iter",
8207  "mc_min_iter",
8208  "mc_taustep_limit"),
8209  GIN("t_interp_order"),
8210  GIN_TYPE("Index"),
8211  GIN_DEFAULT("1"),
8212  GIN_DESC("Interpolation order of temperature for scattering data (so"
8213  " far only applied in phase matrix, not in extinction and"
8214  " absorption.")));
8215 
8216  /*
8217  md_data_raw.push_back
8218  ( create_mdrecord
8219  ( NAME( "iyRadioLink" ),
8220  DESCRIPTION
8221  (
8222  "Radiative transfer for (active) radio links.\n"
8223  "\n"
8224  "The method assumes that *ppath_agenda* is set up to return the\n"
8225  "propagation path between the transmitter and the receiver. The\n"
8226  "position of the transmitter is given as *rte_pos*, and the\n"
8227  "\"sensor\" is taken as the receiver.\n"
8228  "\n"
8229  "The primary output (*y*) is the received signal, where the signal\n"
8230  "transmitted is taken from *iy_transmitter_agenda*. That is, *y*\n"
8231  "is a Stokes vector for each frequency considered. Several other\n"
8232  "possible measurements quantities, such as the bending angle, can\n"
8233  "be obtained as the auxiliary data (see lost below).\n"
8234  "\n"
8235  "If it is found that no link can be obtained due to intersection of\n"
8236  "the ground, all data are set to zero. If no link could be\n"
8237  "determined for other reasons (due to critical refraction or\n"
8238  "numerical problems), all data are set to NaN.\n"
8239  "\n"
8240  "This method is just intended for approximative calculations for\n"
8241  "cases corresponding to relatively simple ray tracing. A detailed,\n"
8242  "and more exact, treatment of several effects require more advanced\n"
8243  "calculation approaches. Here a simple geometrical optics approach\n"
8244  "is followed. See the user guide for details.\n"
8245  "\n"
8246  "Defocusing is a special consideration for radio links. Two\n"
8247  "algorithms are at hand for estimating defocusing, simply denoted\n"
8248  "as method 1 and 2:\n"
8249  " 1: This algorithm is of general character. Defocusing is estimated\n"
8250  " by making two path calculations with slightly shifted zenith\n"
8251  " angles.\n"
8252  " 2: This method is restricted to satellite-to-satellite links, and\n"
8253  " using a standard expression for such links, based on the\n"
8254  " vertical gradient of the bending angle.\n"
8255  "Both methods are described more in detail in the user guide.\n"
8256  "The argument *defocus_shift* is used by both methods.\n"
8257  "\n"
8258  "The following auxiliary data can be obtained:\n"
8259  " \"Pressure\": The pressure along the propagation path.\n"
8260  " Size: [1,1,1,np].\n"
8261  " \"Temperature\": The temperature along the propagation path.\n"
8262  " Size: [1,1,1,np].\n"
8263  " \"VMR, species X\": VMR of the species with index X (zero based).\n"
8264  " For example, adding the string \"VMR, species 0\" extracts the\n"
8265  " VMR of the first species. Size: [1,1,1,np].\n"
8266  " \"Absorption, summed\": The total absorption matrix along the\n"
8267  " path. Size: [nf,ns,ns,np].\n"
8268  " \"Absorption, species X\": The absorption matrix along the path\n"
8269  " for an individual species (X works as for VMR).\n"
8270  " Size: [nf,ns,ns,np].\n"
8271  " \"Particle extinction, summed\": The total extinction matrix over\n"
8272  " all scattering elements along the path. Size: [nf,ns,ns,np].\n"
8273  " \"PND, type X\": The particle number density for scattering element\n"
8274  " type X (ie. corresponds to book X in pnd_field).\n"
8275  " Size: [1,1,1,np].\n"
8276  " \"Mass content, X\": The mass content for scattering element X.\n"
8277  " This corresponds to column X in *particle_masses* (zero-\n"
8278  " based indexing). Size: [1,1,1,np].\n"
8279  "* \"Impact parameter\": As normally defined for GNRSS radio\n"
8280  " occultations (this equals the propagation path constant,\n"
8281  " r*n*sin(theta)). Size: [1,1,1,1].\n"
8282  "* \"Free space loss\": The total loss due to the inverse square\n"
8283  " law. Size: [1,1,1,1].\n"
8284  " \"Free space attenuation\": The local attenuation due to the\n"
8285  " inverse square law. Size: [1,1,1,np].\n"
8286  "* \"Atmospheric loss\": Total atmospheric attenuation, reported as\n"
8287  " the transmission. Size: [nf,1,1,1].\n"
8288  "* \"Defocusing loss\": The total loss between the transmitter and\n"
8289  " receiver due to defocusing. Given as a transmission.\n"
8290  " Size: [1,1,1,1].\n"
8291  "* \"Faraday rotation\": Total rotation [deg] along the path, for\n"
8292  " each frequency. Size: [nf,1,1,1].\n"
8293  "* \"Faraday speed\": The rotation per length unit [deg/m], at each\n"
8294  " path point and each frequency. Size: [nf,1,1,np].\n"
8295  "* \"Extra path delay\": The time delay of the signal [s], compared\n"
8296  " to the case of propagation through vacuum. Size: [1,1,1,1].\n"
8297  "* \"Bending angle\": As normally defined for GNRSS radio\n"
8298  " occultations, in [deg]. Size: [1,1,1,1].\n"
8299  "where\n"
8300  " nf: Number of frequencies.\n"
8301  " ns: Number of Stokes elements.\n"
8302  " np: Number of propagation path points.\n"
8303  "\n"
8304  "The auxiliary data are returned in *iy_aux* with quantities\n"
8305  "selected by *iy_aux_vars*. Most variables require that the method\n"
8306  "is called directly or by *iyCalc*. For calculations using *yCalc*,\n"
8307  "the selection is restricted to the variables marked with *.\n"
8308  ),
8309  AUTHORS( "Patrick Eriksson" ),
8310  OUT( "iy", "iy_aux", "ppath", "diy_dx" ),
8311  GOUT(),
8312  GOUT_TYPE(),
8313  GOUT_DESC(),
8314  IN( "stokes_dim", "f_grid", "atmosphere_dim",
8315  "p_grid", "lat_grid", "lon_grid",
8316  "z_field", "t_field", "vmr_field", "abs_species",
8317  "wind_u_field", "wind_v_field", "wind_w_field", "mag_u_field",
8318  "mag_v_field", "mag_w_field",
8319  "refellipsoid", "z_surface", "cloudbox_on", "cloudbox_limits",
8320  "pnd_field", "scat_data",
8321  "particle_masses", "iy_aux_vars", "jacobian_do",
8322  "ppath_agenda", "ppath_step_agenda",
8323  "propmat_clearsky_agenda", "iy_transmitter_agenda",
8324  "iy_agenda_call1", "iy_transmission", "rte_pos", "rte_los",
8325  "rte_pos2", "rte_alonglos_v", "ppath_lmax", "ppath_lraytrace" ),
8326  GIN( "defocus_method", "defocus_shift" ),
8327  GIN_TYPE( "Index", "Numeric" ),
8328  GIN_DEFAULT( "1", "3e-3" ),
8329  GIN_DESC( "Selection of defocusing calculation method. See above.",
8330  "Angular shift to apply in defocusing estimates." )
8331  ));
8332  */
8333 
8334  md_data_raw.push_back(create_mdrecord(
8335  NAME("iyReplaceFromAux"),
8336  DESCRIPTION(
8337  "Change of main output variable.\n"
8338  "\n"
8339  "With this method you can replace the content of *iy* with one of\n"
8340  "the auxiliary variables. The selected variable (by *aux_var*) must\n"
8341  "be part of *iy_aux_vars*. The corresponding data from *iy_aux* are\n"
8342  "copied to form a new *iy* (*iy_aux* is left unchanged). Elements of\n"
8343  "*iy* correponding to Stokes elements not covered by the auxiliary\n"
8344  "variable are just set to zero.\n"
8345  "\n"
8346  "Jacobian variables are not handled.\n"),
8347  AUTHORS("Patrick Eriksson"),
8348  OUT("iy"),
8349  GOUT(),
8350  GOUT_TYPE(),
8351  GOUT_DESC(),
8352  IN("iy", "iy_aux", "iy_aux_vars", "jacobian_do"),
8353  GIN("aux_var"),
8354  GIN_TYPE("String"),
8355  GIN_DEFAULT(NODEF),
8356  GIN_DESC("Auxiliary variable to insert as *iy*.")));
8357 
8358  md_data_raw.push_back(create_mdrecord(
8359  NAME("iySurfaceCallAgendaX"),
8360  DESCRIPTION(
8361  "Switch between the elements of *iy_surface_agenda_array*.\n"
8362  "\n"
8363  "This method simply calls the agenda matching *surface_type* and\n"
8364  "returns the results. That is, the agenda in *iy_surface_agenda_array*\n"
8365  "with index *surface_type* (0-based) is called.\n"),
8366  AUTHORS("Patrick Eriksson"),
8367  OUT("iy", "diy_dx"),
8368  GOUT(),
8369  GOUT_TYPE(),
8370  GOUT_DESC(),
8371  IN("diy_dx",
8372  "iy_unit",
8373  "iy_transmission",
8374  "iy_id",
8375  "cloudbox_on",
8376  "jacobian_do",
8377  "f_grid",
8378  "iy_main_agenda",
8379  "rtp_pos",
8380  "rtp_los",
8381  "rte_pos2",
8382  "iy_surface_agenda_array",
8383  "surface_type",
8384  "surface_type_aux"),
8385  GIN(),
8386  GIN_TYPE(),
8387  GIN_DEFAULT(),
8388  GIN_DESC()));
8389 
8390  md_data_raw.push_back(create_mdrecord(
8391  NAME("iySurfaceFastem"),
8392  DESCRIPTION(
8393  "Usage of FASTEM for emissivity and reflectivity of water surfaces.\n"
8394  "\n"
8395  "This method allows usage of the FASTEM model inside\n"
8396  "*iy_surface_agenda*. The aim is to use FASTEM in the exact same\n"
8397  "way as done in RTTOV. For example, the transmittance for down-\n"
8398  "welling radiation is considered. RTTOV os just 1D. Here 2D and 3D\n"
8399  "are handled as the 1D case, the down-welling radiation is just\n"
8400  "calculated for the directuon matching specular reflection.\n"
8401  "\n"
8402  "The wind direction is given as the azimuth angle, counted\n"
8403  "clockwise from north (i.e. an easterly wind is at 90 deg).\n"
8404  "This matches the general definition of azimuth inside ARTS.\n"
8405  "For 1D and 2D, the wind direction must be adjusted to match the\n"
8406  "fact that the line-of-sight is locked to be at 0 deg (180 for 2D\n"
8407  "in the case of a negative zenith angle). For 3D, the true wind\n"
8408  "direction shall be used.\n"
8409  "\n"
8410  "FASTEM is called by *FastemStandAlone*. See that WSM for further\n"
8411  "comments on variables and limitations.\n"),
8412  AUTHORS("Patrick Eriksson"),
8413  OUT("iy", "diy_dx"),
8414  GOUT(),
8415  GOUT_TYPE(),
8416  GOUT_DESC(),
8417  IN("diy_dx",
8418  "iy_transmission",
8419  "iy_id",
8420  "jacobian_do",
8421  "atmosphere_dim",
8422  "nlte_field",
8423  "cloudbox_on",
8424  "stokes_dim",
8425  "f_grid",
8426  "rtp_pos",
8427  "rtp_los",
8428  "rte_pos2",
8429  "iy_unit",
8430  "iy_main_agenda",
8431  "surface_skin_t"),
8432  GIN("salinity", "wind_speed", "wind_direction", "fastem_version"),
8433  GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
8434  GIN_DEFAULT("0.035", NODEF, "0", "6"),
8435  GIN_DESC("Salinity, 0-1. That is, 3% is given as 0.03.",
8436  "Wind speed.",
8437  "Wind direction. See further above.",
8438  "The version of FASTEM to use.")));
8439 
8440  md_data_raw.push_back(create_mdrecord(
8441  NAME("iySurfaceRtpropAgenda"),
8442  DESCRIPTION(
8443  "Interface to *surface_rtprop_agenda* for *iy_surface_agenda*.\n"
8444  "\n"
8445  "This method is designed to be part of *iy_surface_agenda*. It\n"
8446  "determines the radiative properties of the surface by\n"
8447  "*surface_rtprop_agenda* and calculates the downwelling radiation\n"
8448  "by *iy_main_agenda*, and sums up the terms as described in AUG.\n"
8449  "That is, this WSM uses the output from *surface_rtprop_agenda*\n"
8450  "in a straightforward fashion.\n"),
8451  AUTHORS("Patrick Eriksson"),
8452  OUT("iy", "diy_dx"),
8453  GOUT(),
8454  GOUT_TYPE(),
8455  GOUT_DESC(),
8456  IN("diy_dx",
8457  "iy_transmission",
8458  "iy_id",
8459  "jacobian_do",
8460  "atmosphere_dim",
8461  "nlte_field",
8462  "cloudbox_on",
8463  "stokes_dim",
8464  "f_grid",
8465  "rtp_pos",
8466  "rtp_los",
8467  "rte_pos2",
8468  "iy_unit",
8469  "iy_main_agenda",
8470  "surface_rtprop_agenda"),
8471  GIN(),
8472  GIN_TYPE(),
8473  GIN_DEFAULT(),
8474  GIN_DESC()));
8475 
8476  md_data_raw.push_back(create_mdrecord(
8477  NAME("iySurfaceRtpropCalc"),
8478  DESCRIPTION(
8479  "Applies *surface_los*, *surface_rmatrix* and *surface_emission*.\n"
8480  "\n"
8481  "This method is designed to be part of *iy_surface_agenda* and\n"
8482  "should be mandatory when using methods describing the surface\n"
8483  "radiative transfer properties by *surface_los*, *surface_rmatrix*\n"
8484  "and *surface_emission*. The task of this method is to apply these\n"
8485  "three WSVs to obtain the upwelling radiation from the surface.\n"
8486  "This upwelling radiation is the sum of surface emission and\n"
8487  "reflected downwelling radiation. The later part is calculated\n"
8488  "by calling *iy_main_agenda*. See further AUG.\n"),
8489  AUTHORS("Patrick Eriksson"),
8490  OUT("iy", "diy_dx"),
8491  GOUT(),
8492  GOUT_TYPE(),
8493  GOUT_DESC(),
8494  IN("diy_dx",
8495  "surface_los",
8496  "surface_rmatrix",
8497  "surface_emission",
8498  "dsurface_names",
8499  "dsurface_rmatrix_dx",
8500  "dsurface_emission_dx",
8501  "iy_transmission",
8502  "iy_id",
8503  "jacobian_do",
8504  "jacobian_quantities",
8505  "atmosphere_dim",
8506  "nlte_field",
8507  "cloudbox_on",
8508  "stokes_dim",
8509  "f_grid",
8510  "rtp_pos",
8511  "rtp_los",
8512  "rte_pos2",
8513  "iy_unit",
8514  "iy_main_agenda"),
8515  GIN(),
8516  GIN_TYPE(),
8517  GIN_DEFAULT(),
8518  GIN_DESC()));
8519 
8520  md_data_raw.push_back(create_mdrecord(
8521  NAME("iyTransmissionStandard"),
8522  DESCRIPTION(
8523  "Standard method for handling transmission measurements.\n"
8524  "\n"
8525  "Designed to be part of *iy_main_agenda*. Treatment of the cloudbox\n"
8526  "is incorporated (that is, no need to define *iy_cloudbox_agenda*).\n"
8527  "\n"
8528  "The transmitter is assumed to be placed at the end of provided *ppath*.\n"
8529  "The transmitted signal is taken from *iy_transmitter_agenda*. This\n"
8530  "signal is propagated along the path, considering attenuation alone.\n"
8531  "That is, the result of the method (*iy*) is the output of\n"
8532  "*iy_transmitter_agenda* multiplied with the transmission along the\n"
8533  "propagation path.\n"
8534  "\n"
8535  "As mentioned, the given *ppath* determines the position of the\n"
8536  "transmitter. For clear-sky and no modification of *ppath*, this\n"
8537  "means that the transitter will either be found at the surface or\n"
8538  "at the top-of-the-atmosphere. If you want to maintain this even with\n"
8539  "an active cloudbox, calculate *ppath* as\n"
8540  " ppathCalc( cloudbox_on=0 )\n"
8541  "Without setting cloudbox_on=0, the transmitter will end up inside or\n"
8542  "at the boundary of the cloudbox.\n"
8543  "\n"
8544  "Some auxiliary radiative transfer quantities can be obtained. Auxiliary\n"
8545  "quantities are selected by *iy_aux_vars* and returned by *iy_aux*.\n"
8546  "Valid choices for auxiliary data are:\n"
8547  " \"Radiative background\": Index value flagging the radiative\n"
8548  " background. The following coding is used: 0=space, 1=surface\n"
8549  " and 2=cloudbox. The value is added to each column.\n"
8550  " \"Optical depth\": Scalar optical depth between the observation point\n"
8551  " and the end of the present propagation path. Calculated based on\n"
8552  " the (1,1)-element of the transmission matrix (1-based indexing),\n"
8553  " i.e. only fully valid for scalar RT. The value is added to each\n"
8554  " column.\n"),
8555  AUTHORS("Patrick Eriksson", "Richard Larsson"),
8556  OUT("iy",
8557  "iy_aux",
8558  "diy_dx",
8559  "ppvar_p",
8560  "ppvar_t",
8561  "ppvar_nlte",
8562  "ppvar_vmr",
8563  "ppvar_wind",
8564  "ppvar_mag",
8565  "ppvar_pnd",
8566  "ppvar_f",
8567  "ppvar_iy",
8568  "ppvar_trans_cumulat"),
8569  GOUT(),
8570  GOUT_TYPE(),
8571  GOUT_DESC(),
8572  IN("diy_dx",
8573  "stokes_dim",
8574  "f_grid",
8575  "atmosphere_dim",
8576  "p_grid",
8577  "t_field",
8578  "nlte_field",
8579  "vmr_field",
8580  "abs_species",
8581  "wind_u_field",
8582  "wind_v_field",
8583  "wind_w_field",
8584  "mag_u_field",
8585  "mag_v_field",
8586  "mag_w_field",
8587  "cloudbox_on",
8588  "cloudbox_limits",
8589  "pnd_field",
8590  "dpnd_field_dx",
8591  "scat_species",
8592  "scat_data",
8593  "iy_aux_vars",
8594  "jacobian_do",
8595  "jacobian_quantities",
8596  "ppath",
8597  "propmat_clearsky_agenda",
8598  "water_p_eq_agenda",
8599  "iy_transmitter_agenda",
8600  "iy_agenda_call1",
8601  "iy_transmission",
8602  "rte_alonglos_v"),
8603  GIN(),
8604  GIN_TYPE(),
8605  GIN_DEFAULT(),
8606  GIN_DESC()));
8607 
8608  md_data_raw.push_back(create_mdrecord(
8609  NAME("iy_transmitterMultiplePol"),
8610  DESCRIPTION(
8611  "Transmitted signal having multiple polarisations.\n"
8612  "\n"
8613  "The method is intended to be part of *iy_transmitter_agenda*. It\n"
8614  "sets *iy* to describe the transmitted signal/pulses. The polarisation\n"
8615  "state is taken from *instrument_pol*, where *instrument_pol* must\n"
8616  "contain an element for each frequency in *f_grid*. The transmitted\n"
8617  "signal/pulses are set to be of unit magnitude, such as [1,1,0,0].\n"),
8618  AUTHORS("Patrick Eriksson"),
8619  OUT("iy"),
8620  GOUT(),
8621  GOUT_TYPE(),
8622  GOUT_DESC(),
8623  IN("stokes_dim", "f_grid", "instrument_pol"),
8624  GIN(),
8625  GIN_TYPE(),
8626  GIN_DEFAULT(),
8627  GIN_DESC()));
8628 
8629  md_data_raw.push_back(create_mdrecord(
8630  NAME("iy_transmitterSinglePol"),
8631  DESCRIPTION(
8632  "Transmitted signal having a single polarisations.\n"
8633  "\n"
8634  "The method is intended to be part of *iy_transmitter_agenda*. It\n"
8635  "sets *iy* to describe the transmitted pulses/signal. The polarisation\n"
8636  "state is taken from *instrument_pol*, where *instrument_pol* must contain\n"
8637  "a single value. This polarisation state is applied for all\n"
8638  "frequencies. The transmitted pulses/signals are set to be of unit\n"
8639  "magnitude, such as [1,1,0,0].\n"),
8640  AUTHORS("Patrick Eriksson"),
8641  OUT("iy"),
8642  GOUT(),
8643  GOUT_TYPE(),
8644  GOUT_DESC(),
8645  IN("stokes_dim", "f_grid", "instrument_pol"),
8646  GIN(),
8647  GIN_TYPE(),
8648  GIN_DEFAULT(),
8649  GIN_DESC()));
8650 
8651  md_data_raw.push_back(create_mdrecord(
8652  NAME("jacobianAddAbsSpecies"),
8653  DESCRIPTION(
8654  "Includes an absorption species in the Jacobian.\n"
8655  "\n"
8656  "For 1D or 2D calculations the latitude and/or longitude grid of\n"
8657  "the retrieval field should set to have zero length.\n"
8658  "\n"
8659  "These retrieval units are at hand for all gas species:\n"
8660  " \"vmr\" : Volume mixing ratio.\n"
8661  " \"nd\" : Number density.\n"
8662  " \"rel\" : Relative unit (e.g. 1.1 means 10% more of the gas).\n"
8663  "\n"
8664  "For water vapour, also these units are at hand:\n"
8665  " \"rh\" : Relative humidity.\n"
8666  " \"q\" : Specific humidity.\n"
8667  "\n"
8668  "Note that *for_species_tag* is used to indicate if species tag VMR,\n"
8669  "rather than atmospheric gas VMR is calculated. Set it to 0 and we\n"
8670  "calculate the atmospheric gas VMR, but this only works for \"analytical\".\n"
8671  "\n"
8672  "Note that the Jacobian is set to zero where volume mixing ratio equals zero.\n"
8673  "\n"
8674  "The number of elements added to the state vector (*x*) is:\n"
8675  " n_g1 * n_g2 * n_g3\n"
8676  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
8677  "respectively. Here empty vectors should be considered to have a length 1.\n"
8678  "The elements are sorted with pressure as innermost loop, followed by\n"
8679  "latitude and longitude as outermost loop.\n"),
8680  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
8681  OUT("jacobian_quantities", "jacobian_agenda"),
8682  GOUT(),
8683  GOUT_TYPE(),
8684  GOUT_DESC(),
8685  IN("jacobian_quantities",
8686  "jacobian_agenda",
8687  "atmosphere_dim",
8688  "p_grid",
8689  "lat_grid",
8690  "lon_grid"),
8691  GIN("g1", "g2", "g3", "species", "unit", "for_species_tag"),
8692  GIN_TYPE("Vector", "Vector", "Vector", "String", "String", "Index"),
8693  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "vmr", "1"),
8694  GIN_DESC("Pressure retrieval grid.",
8695  "Latitude retrieval grid.",
8696  "Longitude retreival grid.",
8697  "The species tag of the retrieval quantity.",
8698  "Retrieval unit. See above.",
8699  "Index-bool for acting on species tags or species."),
8700  SETMETHOD(false),
8701  AGENDAMETHOD(false),
8702  USES_TEMPLATES(false),
8703  PASSWORKSPACE(true)));
8704 
8705  md_data_raw.push_back(create_mdrecord(
8706  NAME("jacobianAddBasicCatalogParameter"),
8707  DESCRIPTION(
8708  "Includes a basic catalog parameter in the Jacobian. These are constant\n"
8709  "over all layers and so only a single vector output is returned.\n"
8710  "\n"
8711  "The only basic catalog parameters currently supported are:\n"
8712  " \"Line Strength\"\n"
8713  " \"Line Center\"\n"
8714  "\n"
8715  "The *catalog_identity* should be able to identify one or many\n"
8716  "lines in the catalog used for calculating the spectral absorption.\n"
8717  "Note that partial matching for energy levels are allowed but not\n"
8718  "recommended, as it is somewhat nonsensical to add multiple parameters\n"
8719  "\n"
8720  "Also note *jacobianAddShapeCatalogParameter* as this allows addition\n"
8721  "of shape parameters, e.g., pressure broadening coefficients\n"
8722  "\n"
8723  "Each call to this function adds just a single value to *x*.\n"
8724  "\n"
8725  "Example given the catalog_identity=\"O2-66 TR UP v1 0 J 1 LO v1 0 J 0\",\n"
8726  "only the O2 ground-level 119 GHz line can be accessed and only its\n"
8727  "catalog_parameter will be accessed. However, the more lenient\n"
8728  "catalog_identity=\"O2-66 TR UP J 1 LO J 0\" may be used, but then the\n"
8729  "118 GHz line belonging to v1=1 branch will be added to the same *x*.\n"),
8730  AUTHORS("Richard Larsson"),
8731  OUT("jacobian_quantities", "jacobian_agenda"),
8732  GOUT(),
8733  GOUT_TYPE(),
8734  GOUT_DESC(),
8735  IN("jacobian_quantities", "jacobian_agenda"),
8736  GIN("catalog_identity", "catalog_parameter"),
8737  GIN_TYPE("QuantumIdentifier", "String"),
8739  GIN_DESC("The catalog line matching information.",
8740  "The catalog parameter of the retrieval quantity.")));
8741 
8742  md_data_raw.push_back(create_mdrecord(
8743  NAME("jacobianAddBasicCatalogParameters"),
8744  DESCRIPTION(
8745  "See *jacobianAddBasicCatalogParameter*.\n"
8746  "\n"
8747  "This adds a multiple of parameters for first each catalog_identity in\n"
8748  "catalog_identities and then for each catalog_parameter in catalog_parameters\n"
8749  "by looping calls to *jacobianAddBasicCatalogParameter* over these input\n"),
8750  AUTHORS("Richard Larsson"),
8751  OUT("jacobian_quantities", "jacobian_agenda"),
8752  GOUT(),
8753  GOUT_TYPE(),
8754  GOUT_DESC(),
8755  IN("jacobian_quantities", "jacobian_agenda"),
8756  GIN("catalog_identities", "catalog_parameters"),
8757  GIN_TYPE("ArrayOfQuantumIdentifier", "ArrayOfString"),
8759  GIN_DESC("The catalog line matching information.",
8760  "The catalog parameter of the retrieval quantity.")));
8761 
8762  md_data_raw.push_back(create_mdrecord(
8763  NAME("jacobianAddFreqShift"),
8764  DESCRIPTION(
8765  "Includes a frequency fit of shift type in the Jacobian.\n"
8766  "\n"
8767  "Retrieval of deviations between nominal and actual backend\n"
8768  "frequencies can be included by this method. The assumption here is\n"
8769  "that the deviation is a constant off-set, a shift, common for all\n"
8770  "frequencies (and not varying between measurement blocks).\n"
8771  "\n"
8772  "This method adds one element to the state vector (*x*).\n"),
8773  AUTHORS("Patrick Eriksson"),
8774  OUT("jacobian_quantities", "jacobian_agenda"),
8775  GOUT(),
8776  GOUT_TYPE(),
8777  GOUT_DESC(),
8778  IN("jacobian_quantities", "jacobian_agenda", "f_grid"),
8779  GIN("df"),
8780  GIN_TYPE("Numeric"),
8781  GIN_DEFAULT("100e3"),
8782  GIN_DESC("Size of perturbation to apply.")));
8783 
8784  md_data_raw.push_back(create_mdrecord(
8785  NAME("jacobianAddFreqStretch"),
8786  DESCRIPTION(
8787  "Includes a frequency fit of stretch type in the Jacobian.\n"
8788  "\n"
8789  "Retrieval of deviations between nominal and actual backend\n"
8790  "frequencies can be included by this method. The assumption here is\n"
8791  "that the deviation varies linearly over the frequency range\n"
8792  "(following ARTS basis function for polynomial order 1).\n"
8793  "\n"
8794  "This method adds one element to the state vector (*x*).\n"),
8795  AUTHORS("Patrick Eriksson"),
8796  OUT("jacobian_quantities", "jacobian_agenda"),
8797  GOUT(),
8798  GOUT_TYPE(),
8799  GOUT_DESC(),
8800  IN("jacobian_quantities", "jacobian_agenda", "f_grid"),
8801  GIN("df"),
8802  GIN_TYPE("Numeric"),
8803  GIN_DEFAULT("100e3"),
8804  GIN_DESC("Size of perturbation to apply.")));
8805 
8806  md_data_raw.push_back(create_mdrecord(
8807  NAME("jacobianAddShapeCatalogParameter"),
8808  DESCRIPTION(
8809  "Adds a line shape parameter to the Jacobian calculations. These\n"
8810  "are constant over all levels so only a single *x*-value is added\n"
8811  "\n"
8812  "Line function parameter assume the derivatives\n"
8813  "of internal pressure broadening and line mixing\n"
8814  "functionality follows a simply f(T, T0, X0, X1, X2)\n"
8815  "format. The shape of the function f() is determined by\n"
8816  "input catalog; please see the ARTS documentation for more\n"
8817  "details\n"
8818  "\n"
8819  "The input are as follows:\n"
8820  " line_identity: Identifier of preferably a single line\n"
8821  " species: A SpeciesTag, e.g., \"O2\" or \"H2O\" for common species.\n"
8822  " Note that \"SELF\" and \"AIR\" tags are used for shape parameters\n"
8823  " affected by self and air-broadening, respectively.\n"
8824  " variable: A variable supported by the line, these can be\n"
8825  " \"G0\": Speed-independent pressure broadening\n"
8826  " \"G2\": Speed-dependent pressure broadening\n"
8827  " \"D0\": Speed-independent pressure shift\n"
8828  " \"D2\": Speed-dependent pressure shift\n"
8829  " \"FVC\": Frequency of velocity changing collisions\n"
8830  " \"ETA\": partial correlation between velocity and\n"
8831  " rotational state changes due to collisions\n"
8832  " \"Y\": First order line-mixing parameter\n"
8833  " \"G\": Second order line-mixing parameter for strength\n"
8834  " \"DV\": Second order line-mixing parameter for shifting\n"
8835  " coefficient: A coefficient in the model to compute the above parameters.\n"
8836  "\n"
8837  "Note that we cannot test if the line in question supports the variable and\n"
8838  "coefficient at the level of this function, so many errors will only be reported\n"
8839  "at a later stage\n"
8840  "\n"
8841  "For other spectroscopic parameters, see *jacobianAddBasicCatalogParameter*.\n"
8842  "Also see said function for an example of how to set the QuantumIdentifier\n"),
8843  AUTHORS("Richard Larsson"),
8844  OUT("jacobian_quantities", "jacobian_agenda"),
8845  GOUT(),
8846  GOUT_TYPE(),
8847  GOUT_DESC(),
8848  IN("jacobian_quantities", "jacobian_agenda"),
8849  GIN("line_identity", "species", "variable", "coefficient"),
8850  GIN_TYPE("QuantumIdentifier", "String", "String", "String"),
8852  GIN_DESC("Line identifier",
8853  "Species of interest",
8854  "Variable of interest",
8855  "Coefficient of interest")));
8856 
8857  md_data_raw.push_back(create_mdrecord(
8858  NAME("jacobianAddShapeCatalogParameters"),
8859  DESCRIPTION(
8860  "See *jacobianAddShapeCatalogParameter* for information on\n"
8861  "the GIN parameters\n"
8862  "\n"
8863  "This function accepts the same input but for lists of data.\n"
8864  "The function loops over each input list\n"
8865  "individually and appends the information to *jacobian_quantities*.\n"
8866  "\n"
8867  "Special \"ALL\" for 1 length *variables* and *coefficients* are\n"
8868  "allowed to compute all variables/coefficients in the order described\n"
8869  "in the description of *jacobianAddShapeCatalogParameter*\n"
8870  "\n"
8871  "For example, if *line_identities* have length 5, *species* length 4,\n"
8872  "*variables* length 3, and *coefficients* length 2, there will be\n"
8873  "5*4x3x2 = 120 new additions to *jacobian_quantities* in the order:\n"
8874  "\t[{line_identities[0], species[0], variables[0] coefficients[0]}]\n"
8875  "\t[{line_identities[0], species[0], variables[0] coefficients[1]}]\n"
8876  "\t[{line_identities[0], species[0], variables[1] coefficients[0]}]\n"
8877  "\t[{line_identities[0], species[0], variables[1] coefficients[1]}]\n"
8878  "\t[{line_identities[0], species[0], variables[2] coefficients[0]}]\n"
8879  "\t[{line_identities[0], species[0], variables[2] coefficients[1]}]\n"
8880  "\t[{line_identities[0], species[1], variables[0] coefficients[0]}]\n"
8881  "\t...\n"
8882  "\t[{line_identities[4], species[3], variables[1] coefficients[1]}]\n"
8883  "\t[{line_identities[4], species[3], variables[2] coefficients[0]}]\n"
8884  "\t[{line_identities[4], species[3], variables[2] coefficients[1]}]\n"
8885  "or in words: lines first, then species, then variables, then coefficients\n"),
8886  AUTHORS("Richard Larsson"),
8887  OUT("jacobian_quantities", "jacobian_agenda"),
8888  GOUT(),
8889  GOUT_TYPE(),
8890  GOUT_DESC(),
8891  IN("jacobian_quantities", "jacobian_agenda"),
8892  GIN("line_identities", "species", "variables", "coefficients"),
8893  GIN_TYPE("ArrayOfQuantumIdentifier",
8894  "ArrayOfString",
8895  "ArrayOfString",
8896  "ArrayOfString"),
8898  GIN_DESC("List of line identifiers",
8899  "List of species of interest",
8900  "List of variables of interest",
8901  "List of coefficients of interest")));
8902 
8903  md_data_raw.push_back(create_mdrecord(
8904  NAME("jacobianAddMagField"),
8905  DESCRIPTION(
8906  "Includes one magnetic field component in the Jacobian.\n"
8907  "\n"
8908  "The method follows the pattern of other Jacobian methods. The\n"
8909  "calculations can only be performed by analytic expressions.\n"
8910  "\n"
8911  "The magnetic field components are retrieved separately, and,\n"
8912  "hence, the argument *component* can be \"u\", \"v\", \"w\",\n"
8913  "and \"strength\".\n"
8914  "\n"
8915  "The number of elements added to the state vector (*x*) is:\n"
8916  " n_g1 * n_g2 * n_g3\n"
8917  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
8918  "respectively. Here empty vectors should be considered to have a length 1.\n"
8919  "The elements are sorted with pressure as innermost loop, followed by\n"
8920  "latitude and longitude as outermost loop.\n"
8921  "\n"
8922  "The dB-parameter is only used for Faraday rotation\n"),
8923  AUTHORS("Patrick Eriksson", "Richard Larsson"),
8924  OUT("jacobian_quantities", "jacobian_agenda"),
8925  GOUT(),
8926  GOUT_TYPE(),
8927  GOUT_DESC(),
8928  IN("jacobian_quantities",
8929  "jacobian_agenda",
8930  "atmosphere_dim",
8931  "p_grid",
8932  "lat_grid",
8933  "lon_grid"),
8934  GIN("g1", "g2", "g3", "component", "dB"),
8935  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
8936  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "1.0e-7"),
8937  GIN_DESC("Pressure retrieval grid.",
8938  "Latitude retrieval grid.",
8939  "Longitude retreival grid.",
8940  "Magnetic field component to retrieve",
8941  "Magnetic field perturbation")));
8942 
8943  md_data_raw.push_back(create_mdrecord(
8944  NAME("jacobianAddNLTE"),
8945  DESCRIPTION(
8946  "Experimental NLTE Jacobian.\n"
8947  "\n"
8948  "Intention: Adds the nlte_field level distribution per atmospheric grid\n"
8949  "to the Jacobian.\n"
8950  "\n"
8951  "The number of elements added to the state vector (*x*) is:\n"
8952  " n_g1 * n_g2 * n_g3\n"
8953  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
8954  "respectively. Here empty vectors should be considered to have a length 1.\n"
8955  "The elements are sorted with pressure as innermost loop, followed by\n"
8956  "latitude and longitude as outermost loop.\n"
8957  "\n"
8958  "The QuantumIdentifier should identify a single energy level, such as:\n"
8959  "\"H2O-161 EN J 1 Ka 0 Kc 1\", for one of the lower levels in the chains\n"
8960  "of transitions of water. Note that using this method directly is not\n"
8961  "best practice, as the quantum identifiers of the levels have to be known\n"
8962  "at an early stage in NLTE calculations, and will usually populate the\n"
8963  "*nlte_level_identifiers* variable, meaning it is better to use *jacobianAddNLTE*\n"
8964  "directly than to individually call this function\n"),
8965  AUTHORS("Richard Larsson"),
8966  OUT("jacobian_quantities", "jacobian_agenda"),
8967  GOUT(),
8968  GOUT_TYPE(),
8969  GOUT_DESC(),
8970  IN("jacobian_quantities",
8971  "jacobian_agenda",
8972  "atmosphere_dim",
8973  "p_grid",
8974  "lat_grid",
8975  "lon_grid"),
8976  GIN("g1", "g2", "g3", "energy_level_identity", "dx"),
8977  GIN_TYPE("Vector", "Vector", "Vector", "QuantumIdentifier", "Numeric"),
8978  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "1.0e-3"),
8979  GIN_DESC("Pressure retrieval grid.",
8980  "Latitude retrieval grid.",
8981  "Longitude retreival grid.",
8982  "Identifier to the eneregy level",
8983  "Perturbation of value if required by method")));
8984 
8985  md_data_raw.push_back(create_mdrecord(
8986  NAME("jacobianAddNLTEs"),
8987  DESCRIPTION(
8988  "Experimental NLTE Jacobian. Same as *jacobianAddNLTE* but for\n"
8989  "many levels\n"
8990  "\n"
8991  "Adds energy_level_identities.nelem() times as many arguments to *x*\n"
8992  "as *jacobianAddNLTE*, ordered as energy_level_identities describes\n"
8993  "\n"
8994  "This method is preferred to *jacobianAddNLTE*, since *energy_level_identities*\n"
8995  "is conveniently almost always the same as *nlte_level_identifiers*\n"),
8996  AUTHORS("Richard Larsson"),
8997  OUT("jacobian_quantities", "jacobian_agenda"),
8998  GOUT(),
8999  GOUT_TYPE(),
9000  GOUT_DESC(),
9001  IN("jacobian_quantities",
9002  "jacobian_agenda",
9003  "atmosphere_dim",
9004  "p_grid",
9005  "lat_grid",
9006  "lon_grid"),
9007  GIN("g1", "g2", "g3", "energy_level_identities", "dx"),
9008  GIN_TYPE(
9009  "Vector", "Vector", "Vector", "ArrayOfQuantumIdentifier", "Numeric"),
9010  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "1.0e-3"),
9011  GIN_DESC("Pressure retrieval grid.",
9012  "Latitude retrieval grid.",
9013  "Longitude retreival grid.",
9014  "Identifiers to the eneregy level",
9015  "Perturbation of value if required by method")));
9016 
9017  md_data_raw.push_back(create_mdrecord(
9018  NAME("jacobianAddPointingZa"),
9019  DESCRIPTION(
9020  "Adds sensor pointing zenith angle off-set jacobian.\n"
9021  "\n"
9022  "Retrieval of deviations between nominal and actual zenith angle of\n"
9023  "the sensor can be included by this method. The weighing functions\n"
9024  "can be calculated in several ways:\n"
9025  " calcmode = \"recalc\": Recalculation of pencil beam spectra,\n"
9026  " shifted with *dza* from nominal values. A single-sided\n"
9027  " perturbation is applied (towards higher zenith angles).\n"
9028  " calcmode = \"interp\": Inter/extrapolation of existing pencil\n"
9029  " beam spectra. For this option, allow some extra margins for\n"
9030  " zenith angle grids, to avoid artifacts when extrapolating\n"
9031  " the data (to shifted zenith angles). The average of a\n"
9032  " negative and a positive shift is taken."
9033  "\n"
9034  "The interp option is recommended. It should in general be both\n"
9035  "faster and more accurate (due to the double sided disturbance).\n"
9036  "In addition, it is less sensitive to the choice of dza (as long\n"
9037  "as a small value is applied).\n"
9038  "\n"
9039  "The pointing off-set can be modelled to be time varying. The time\n"
9040  "variation is then described by a polynomial (with standard base\n"
9041  "functions). For example, a polynomial order of 0 means that the\n"
9042  "off-set is constant in time. If the off-set is totally uncorrelated\n"
9043  "between the spectra, set the order to -1.\n"
9044  "\n"
9045  "The number of elements added to the state vector (*x*) is\n"
9046  " if poly_order < 0 : length of *sensor_time*\n"
9047  " otherwise : poly_order+1\n"
9048  "In the first case, the order in *x* matches *sensor_time*. In the second\n"
9049  "case, the coefficient for polynomial order 0 comes first etc.\n"),
9050  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
9051  OUT("jacobian_quantities", "jacobian_agenda"),
9052  GOUT(),
9053  GOUT_TYPE(),
9054  GOUT_DESC(),
9055  IN("jacobian_quantities", "jacobian_agenda", "sensor_pos", "sensor_time"),
9056  GIN("poly_order", "calcmode", "dza"),
9057  GIN_TYPE("Index", "String", "Numeric"),
9058  GIN_DEFAULT("0", "recalc", "0.01"),
9059  GIN_DESC("Order of polynomial to describe the time variation of "
9060  "pointing off-sets.",
9061  "Calculation method. See above",
9062  "Size of perturbation to apply (when applicable).")));
9063 
9064  md_data_raw.push_back(create_mdrecord(
9065  NAME("jacobianAddPolyfit"),
9066  DESCRIPTION(
9067  "Includes polynomial baseline fit in the Jacobian.\n"
9068  "\n"
9069  "This method deals with retrieval of disturbances of the spectra\n"
9070  "that can be described by an additive term, a baseline off-set.\n"
9071  "\n"
9072  "The baseline off-set is here modelled as a polynomial. The\n"
9073  "polynomial spans the complete frequency range spanned by\n"
9074  "*sensor_response_f_grid* and the method should only of interest for\n"
9075  "cases with no frequency gap in the spectra. The default assumption\n"
9076  "is that the off-set differs between all spectra, but it can also be\n"
9077  "assumed that the off-set is common for all e.g. line-of-sights.\n"
9078  "\n"
9079  "If the simulation/retrieval deals with a single spectrum, the number\n"
9080  "of elements added to the state vector (*x*) is poly_order+1. The\n"
9081  "coefficient for polynomial order 0 comes first etc. The same is true\n"
9082  "if *no_pol_variation*, *no_los_variation* and *no_mblock_variation*\n"
9083  "all are set to 1, even if several spectra are involved. Otherwise the"
9084  "number of elements added to *x* depends on the number of spectra and\n"
9085  "the settings of *no_pol_variation*, *no_los_variation* and \n"
9086  "*no_mblock_variation*. The coefficients of the different polynomial\n"
9087  "orders are treated as separate retrieval quantities. That is, the\n"
9088  "the elements associated with polynomial order 0 are grouped and form\n"
9089  "together a retrieval quantity. The coefficients for higher polynomial\n"
9090  "orders are treated in the same way.\n"),
9091  AUTHORS("Patrick Eriksson"),
9092  OUT("jacobian_quantities", "jacobian_agenda"),
9093  GOUT(),
9094  GOUT_TYPE(),
9095  GOUT_DESC(),
9096  IN("jacobian_quantities",
9097  "jacobian_agenda",
9098  "sensor_response_pol_grid",
9099  "sensor_response_dlos_grid",
9100  "sensor_pos"),
9101  GIN("poly_order",
9102  "no_pol_variation",
9103  "no_los_variation",
9104  "no_mblock_variation"),
9105  GIN_TYPE("Index", "Index", "Index", "Index"),
9106  GIN_DEFAULT(NODEF, "0", "0", "0"),
9107  GIN_DESC("Polynomial order to use for the fit.",
9108  "Set to 1 if the baseline off-set is the same for all "
9109  "Stokes components.",
9110  "Set to 1 if the baseline off-set is the same for all "
9111  "line-of-sights (inside each measurement block).",
9112  "Set to 1 if the baseline off-set is the same for all "
9113  "measurement blocks.")));
9114 
9115  md_data_raw.push_back(create_mdrecord(
9116  NAME("jacobianAddScatSpecies"),
9117  DESCRIPTION(
9118  "Includes a scattering species in the Jacobian.\n"
9119  "\n"
9120  "For 1D or 2D calculations the latitude and/or longitude grid of\n"
9121  "the retrieval field should set to have zero length.\n"
9122  "\n"
9123  "The number of elements added to the state vector (*x*) is:\n"
9124  " n_g1 * n_g2 * n_g3\n"
9125  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9126  "respectively. Here empty vectors should be considered to have a length 1.\n"
9127  "The elements are sorted with pressure as innermost loop, followed by\n"
9128  "latitude and longitude as outermost loop.\n"),
9129  AUTHORS("Patrick Eriksson"),
9130  OUT("jacobian_quantities", "jacobian_agenda"),
9131  GOUT(),
9132  GOUT_TYPE(),
9133  GOUT_DESC(),
9134  IN("jacobian_quantities",
9135  "jacobian_agenda",
9136  "atmosphere_dim",
9137  "p_grid",
9138  "lat_grid",
9139  "lon_grid"),
9140  GIN("g1", "g2", "g3", "species", "quantity"),
9141  GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
9143  GIN_DESC(
9144  "Pressure retrieval grid.",
9145  "Latitude retrieval grid.",
9146  "Longitude retreival grid.",
9147  "Name of scattering species, must match one element in *scat_species*.",
9148  "Retrieval quantity, e.g. \"IWC\"."),
9149  SETMETHOD(false),
9150  AGENDAMETHOD(false),
9151  USES_TEMPLATES(false),
9152  PASSWORKSPACE(true)));
9153 
9154  md_data_raw.push_back(create_mdrecord(
9155  NAME("jacobianAddSinefit"),
9156  DESCRIPTION(
9157  "Includes sinusoidal baseline fit in the Jacobian.\n"
9158  "\n"
9159  "Works as *jacobianAddPolyfit*, beside that a series of sine and\n"
9160  "cosine terms are used for the baseline fit.\n"
9161  "\n"
9162  "For each value in *period_lengths one sine and one cosine term are\n"
9163  "included (in mentioned order). By these two terms the amplitude and\n"
9164  "\"phase\" for each period length can be determined. The sine and\n"
9165  "cosine terms have value 0 and 1, respectively, for first frequency.\n"
9166  "\n"
9167  "If the simulation/retrieval deals with a single spectrum, the number\n"
9168  "of elements added to the state vector (*x*) is 2*nperiods, where\n"
9169  "nperiods is the length of *period_lengths*. The same is true\n"
9170  "if *no_pol_variation*, *no_los_variation* and *no_mblock_variation*\n"
9171  "all are set to 1, even if several spectra are involved. Otherwise the"
9172  "number of elements added to *x* depends on the number of spectra and\n"
9173  "the settings of *no_pol_variation*, *no_los_variation* and \n"
9174  "*no_mblock_variation*. The sine and cosine terms for each period\n"
9175  "length are treated as a separate retrieval quantities. That is, the\n"
9176  "the elements associated with the first period length are grouped and\n"
9177  "form together a retrieval quantity, etc. Inside each retrieval quantity\n"
9178  "the pairs of sine and cosine terms are kept together, in given order.\n"),
9179  AUTHORS("Patrick Eriksson"),
9180  OUT("jacobian_quantities", "jacobian_agenda"),
9181  GOUT(),
9182  GOUT_TYPE(),
9183  GOUT_DESC(),
9184  IN("jacobian_quantities",
9185  "jacobian_agenda",
9186  "sensor_response_pol_grid",
9187  "sensor_response_dlos_grid",
9188  "sensor_pos"),
9189  GIN("period_lengths",
9190  "no_pol_variation",
9191  "no_los_variation",
9192  "no_mblock_variation"),
9193  GIN_TYPE("Vector", "Index", "Index", "Index"),
9194  GIN_DEFAULT(NODEF, "0", "0", "0"),
9195  GIN_DESC("Period lengths of the fit.",
9196  "Set to 1 if the baseline off-set is the same for all "
9197  "Stokes components.",
9198  "Set to 1 if the baseline off-set is the same for all "
9199  "line-of-sights (inside each measurement block).",
9200  "Set to 1 if the baseline off-set is the same for all "
9201  "measurement blocks.")));
9202 
9203  md_data_raw.push_back(create_mdrecord(
9204  NAME("jacobianAddSpecialSpecies"),
9205  DESCRIPTION(
9206  "Includes a special absorption species in the Jacobian.\n"
9207  "\n"
9208  "Similar to *jacobianAddAbsSpecies* but only for number densities.\n"
9209  "\n"
9210  "Species allowed are:\n"
9211  " \"electrons\"\n"
9212  " \"particulates\"\n"
9213  "\n"
9214  "Note that the average of all particulates are used to scale its\n"
9215  "*jacobian*, so this method works best when only one type of\n"
9216  "particulate is being used, i.e., when *scat_data* has only one\n"
9217  "scattering species.\n"
9218  "\n"
9219  "The number of elements added to the state vector (*x*) is:\n"
9220  " n_g1 * n_g2 * n_g3\n"
9221  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9222  "respectively. Here empty vectors should be considered to have a length 1.\n"
9223  "The elements are sorted with pressure as innermost loop, followed by\n"
9224  "latitude and longitude as outermost loop.\n"),
9225  AUTHORS("Richard Larsson"),
9226  OUT("jacobian_quantities", "jacobian_agenda"),
9227  GOUT(),
9228  GOUT_TYPE(),
9229  GOUT_DESC(),
9230  IN("jacobian_quantities",
9231  "jacobian_agenda",
9232  "atmosphere_dim",
9233  "p_grid",
9234  "lat_grid",
9235  "lon_grid"),
9236  GIN("g1", "g2", "g3", "species"),
9237  GIN_TYPE("Vector", "Vector", "Vector", "String"),
9239  GIN_DESC("Pressure retrieval grid.",
9240  "Latitude retrieval grid.",
9241  "Longitude retreival grid.",
9242  "The species of the retrieval quantity."),
9243  SETMETHOD(false),
9244  AGENDAMETHOD(false),
9245  USES_TEMPLATES(false),
9246  PASSWORKSPACE(true)));
9247 
9248  md_data_raw.push_back(create_mdrecord(
9249  NAME("jacobianAddSurfaceQuantity"),
9250  DESCRIPTION(
9251  "Includes a surface quantity in the Jacobian.\n"
9252  "\n"
9253  "The quantity is specified by the GIN-variable *quantity*. The name\n"
9254  "of the quantity must match the name used in *surface_props_names*.\n"
9255  "\n"
9256  "For 1D or 2D calculations the latitude and/or longitude grid of\n"
9257  "the retrieval field should set to have zero length.\n"
9258  "\n"
9259  "The number of elements added to the state vector (*x*) is:\n"
9260  " n_g1 * n_g2\n"
9261  "where n_g1 and n_g2 are the length of GIN *g1* and *g2*, respectively.\n"
9262  "Here empty vectors should be considered to have a length 1.\n"
9263  "The elements are sorted with latitude as innermost loop and longitude\n"
9264  "as outermost loop.\n"),
9265  AUTHORS("Patrick Eriksson"),
9266  OUT("jacobian_quantities", "jacobian_agenda"),
9267  GOUT(),
9268  GOUT_TYPE(),
9269  GOUT_DESC(),
9270  IN("jacobian_quantities",
9271  "jacobian_agenda",
9272  "atmosphere_dim",
9273  "lat_grid",
9274  "lon_grid"),
9275  GIN("g1", "g2", "quantity"),
9276  GIN_TYPE("Vector", "Vector", "String"),
9278  GIN_DESC("Latitude retrieval grid.",
9279  "Longitude retreival grid.",
9280  "Retrieval quantity, e.g. \"Wind speed\"."),
9281  SETMETHOD(false),
9282  AGENDAMETHOD(false),
9283  USES_TEMPLATES(false),
9284  PASSWORKSPACE(true)));
9285 
9286  md_data_raw.push_back(create_mdrecord(
9287  NAME("jacobianAddTemperature"),
9288  DESCRIPTION(
9289  "Includes atmospheric temperatures in the Jacobian.\n"
9290  "\n"
9291  "The calculations are performed by (semi-)analytical expressions.\n"
9292  "Hydrostatic equilibrium (HSE) can be included.\n"
9293  "\n"
9294  "The analytical calculation approach neglects so far refraction\n"
9295  "totally, but considers the local effect of HSE.\n"
9296  "The later should be accaptable for observations around zenith and\n"
9297  "nadir. There is no warning if the method is applied incorrectly, \n"
9298  "with respect to these issues. Note that the argument *hse* of this\n"
9299  "WSM only refers to the Jacobian calculation, if the model and/or\n"
9300  "retrieved atmosphere actually fulfils HSE or not is governed in\n"
9301  "other manners.\n"
9302  "\n"
9303  "The calculations (both options) assume that gas species are defined\n"
9304  "in VMR (a change in temperature then changes the number density). \n"
9305  "This has the consequence that retrieval of temperatures and number\n"
9306  "density can not be mixed. Neither any warning here!\n"
9307  "\n"
9308  "The number of elements added to the state vector (*x*) is:\n"
9309  " n_g1 * n_g2 * n_g3\n"
9310  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9311  "respectively. Here empty vectors should be considered to have a length 1.\n"
9312  "The elements are sorted with pressure as innermost loop, followed by\n"
9313  "latitude and longitude as outermost loop.\n"),
9314  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
9315  OUT("jacobian_quantities", "jacobian_agenda"),
9316  GOUT(),
9317  GOUT_TYPE(),
9318  GOUT_DESC(),
9319  IN("jacobian_quantities",
9320  "jacobian_agenda",
9321  "atmosphere_dim",
9322  "p_grid",
9323  "lat_grid",
9324  "lon_grid"),
9325  GIN("g1", "g2", "g3", "hse"),
9326  GIN_TYPE("Vector", "Vector", "Vector", "String"),
9327  GIN_DEFAULT(NODEF, NODEF, NODEF, "on"),
9328  GIN_DESC("Pressure retrieval grid.",
9329  "Latitude retrieval grid.",
9330  "Longitude retreival grid.",
9331  "Flag to assume HSE or not (\"on\" or \"off\").")));
9332 
9333  md_data_raw.push_back(create_mdrecord(
9334  NAME("jacobianAddWind"),
9335  DESCRIPTION(
9336  "Includes one atmospheric wind component in the Jacobian.\n"
9337  "\n"
9338  "The method follows the pattern of other Jacobian methods. The\n"
9339  "calculations can only be performed by analytic expressions.\n"
9340  "Some lower level function depends on frequency perturbations,\n"
9341  "however, so therefore a frequency perturbation df is required\n"
9342  "and as a consequence *abs_f_interp_order* must be > 0.\n"
9343  "\n"
9344  "The wind field components are retrieved separately, and,\n"
9345  "hence, the argument *component* can be \"u\", \"v\" or \"w\" \n"
9346  "for vector components, or just \"strength\" for total wind speed.\n"
9347  "\n"
9348  "The number of elements added to the state vector (*x*) is:\n"
9349  " n_g1 * n_g2 * n_g3\n"
9350  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9351  "respectively. Here empty vectors should be considered to have a length 1.\n"
9352  "The elements are sorted with pressure as innermost loop, followed by\n"
9353  "latitude and longitude as outermost loop.\n"),
9354  AUTHORS("Patrick Eriksson"),
9355  OUT("jacobian_quantities", "jacobian_agenda"),
9356  GOUT(),
9357  GOUT_TYPE(),
9358  GOUT_DESC(),
9359  IN("jacobian_quantities",
9360  "jacobian_agenda",
9361  "atmosphere_dim",
9362  "p_grid",
9363  "lat_grid",
9364  "lon_grid"),
9365  GIN("g1", "g2", "g3", "component", "dfrequency"),
9366  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
9367  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "0.1"),
9368  GIN_DESC("Pressure retrieval grid.",
9369  "Latitude retrieval grid.",
9370  "Longitude retrieval grid.",
9371  "Wind component to retrieve",
9372  "This is the frequency perturbation")));
9373 
9374  md_data_raw.push_back(create_mdrecord(
9375  NAME("jacobianAdjustAndTransform"),
9376  DESCRIPTION(
9377  "Applies adjustments and transformations on *jacobian*.\n"
9378  "\n"
9379  "The method handles two tasks:\n"
9380  "1. The retrieval transformations set by the user can not be applied\n"
9381  "onthe Jacobian inside *yCalc*. Transformations are instead applied\n"
9382  "by calling this method.\n"
9383  "2. It applies required adjustments of the Jacoboan. So far there is\n"
9384  "only one possible adjustment. If any absorption species uses the \"rel\"\n"
9385  "unit, an adjustment is needed for later iterations of the inversion.\n"
9386  "\n"
9387  "If no tranformations are selected and the \"rel\" option is not used at\n"
9388  "all, there is no need to call this method(, but you can still include it\n"
9389  "without causing any error, the calculations will just be a bit slower).\n"
9390  "Otherwise, this method should be called, typically as part of\n"
9391  "*inversion_iterate_agenda*.\n"
9392  "\n"
9393  "The method accepts if *jacobian* is empty, and then does, nothing.\n"),
9394  AUTHORS("Patrick Eriksson"),
9395  OUT("jacobian"),
9396  GOUT(),
9397  GOUT_TYPE(),
9398  GOUT_DESC(),
9399  IN("jacobian", "jacobian_quantities", "x"),
9400  GIN(),
9401  GIN_TYPE(),
9402  GIN_DEFAULT(),
9403  GIN_DESC()));
9404 
9405  md_data_raw.push_back(create_mdrecord(
9406  NAME("jacobianCalcDoNothing"),
9407  DESCRIPTION(
9408  "This function doesn't do anything. It just exists to satisfy\n"
9409  "the input and output requirement of the *jacobian_agenda*.\n"
9410  "\n"
9411  "This method is added to *jacobian_agenda* by *jacobianAddAbsSpecies*\n"
9412  "and some similar methods, and it should normally not be called by\n"
9413  "the user.\n"),
9414  AUTHORS("Oliver Lemke"),
9415  OUT("jacobian"),
9416  GOUT(),
9417  GOUT_TYPE(),
9418  GOUT_DESC(),
9419  IN("jacobian", "mblock_index", "iyb", "yb"),
9420  GIN(),
9421  GIN_TYPE(),
9422  GIN_DEFAULT(),
9423  GIN_DESC()));
9424 
9425  md_data_raw.push_back(create_mdrecord(
9426  NAME("jacobianCalcFreqShift"),
9427  DESCRIPTION(
9428  "Calculates frequency shift jacobians by interpolation\n"
9429  "of *iyb*.\n"
9430  "\n"
9431  "This function is added to *jacobian_agenda* by jacobianAddFreqShift\n"
9432  "and should normally not be called by the user.\n"),
9433  AUTHORS("Patrick Eriksson"),
9434  OUT("jacobian"),
9435  GOUT(),
9436  GOUT_TYPE(),
9437  GOUT_DESC(),
9438  IN("jacobian",
9439  "mblock_index",
9440  "iyb",
9441  "yb",
9442  "stokes_dim",
9443  "f_grid",
9444  "mblock_dlos_grid",
9445  "sensor_response",
9446  "jacobian_quantities"),
9447  GIN(),
9448  GIN_TYPE(),
9449  GIN_DEFAULT(),
9450  GIN_DESC()));
9451 
9452  md_data_raw.push_back(create_mdrecord(
9453  NAME("jacobianCalcFreqStretch"),
9454  DESCRIPTION(
9455  "Calculates frequency stretch jacobians by interpolation\n"
9456  "of *iyb*.\n"
9457  "\n"
9458  "This function is added to *jacobian_agenda* by jacobianAddFreqStretch\n"
9459  "and should normally not be called by the user.\n"),
9460  AUTHORS("Patrick Eriksson"),
9461  OUT("jacobian"),
9462  GOUT(),
9463  GOUT_TYPE(),
9464  GOUT_DESC(),
9465  IN("jacobian",
9466  "mblock_index",
9467  "iyb",
9468  "yb",
9469  "stokes_dim",
9470  "f_grid",
9471  "mblock_dlos_grid",
9472  "sensor_response",
9473  "sensor_response_pol_grid",
9474  "sensor_response_f_grid",
9475  "sensor_response_dlos_grid",
9476  "jacobian_quantities"),
9477  GIN(),
9478  GIN_TYPE(),
9479  GIN_DEFAULT(),
9480  GIN_DESC()));
9481 
9482  md_data_raw.push_back(create_mdrecord(
9483  NAME("jacobianCalcPointingZaInterp"),
9484  DESCRIPTION("Calculates zenith angle pointing deviation jacobians by\n"
9485  "inter-extrapolation of *iyb*.\n"
9486  "\n"
9487  "This function is added to *jacobian_agenda* by\n"
9488  "jacobianAddPointingZa and should normally not be\n"
9489  "called by the user.\n"),
9490  AUTHORS("Patrick Eriksson"),
9491  OUT("jacobian"),
9492  GOUT(),
9493  GOUT_TYPE(),
9494  GOUT_DESC(),
9495  IN("jacobian",
9496  "mblock_index",
9497  "iyb",
9498  "yb",
9499  "stokes_dim",
9500  "f_grid",
9501  "sensor_los",
9502  "mblock_dlos_grid",
9503  "sensor_response",
9504  "sensor_time",
9505  "jacobian_quantities"),
9506  GIN(),
9507  GIN_TYPE(),
9508  GIN_DEFAULT(),
9509  GIN_DESC()));
9510 
9511  md_data_raw.push_back(create_mdrecord(
9512  NAME("jacobianCalcPointingZaRecalc"),
9513  DESCRIPTION("Calculates zenith angle pointing deviation jacobians by\n"
9514  "recalulation of *iyb*.\n"
9515  "\n"
9516  "This function is added to *jacobian_agenda* by\n"
9517  "jacobianAddPointingZa and should normally not be\n"
9518  "called by the user.\n"),
9519  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
9520  OUT("jacobian"),
9521  GOUT(),
9522  GOUT_TYPE(),
9523  GOUT_DESC(),
9524  IN("jacobian",
9525  "mblock_index",
9526  "iyb",
9527  "yb",
9528  "atmosphere_dim",
9529  "nlte_field",
9530  "cloudbox_on",
9531  "stokes_dim",
9532  "f_grid",
9533  "sensor_pos",
9534  "sensor_los",
9535  "transmitter_pos",
9536  "mblock_dlos_grid",
9537  "sensor_response",
9538  "sensor_time",
9539  "iy_unit",
9540  "iy_main_agenda",
9541  "geo_pos_agenda",
9542  "jacobian_quantities"),
9543  GIN(),
9544  GIN_TYPE(),
9545  GIN_DEFAULT(),
9546  GIN_DESC()));
9547 
9548  md_data_raw.push_back(create_mdrecord(
9549  NAME("jacobianCalcPolyfit"),
9550  DESCRIPTION(
9551  "Calculates jacobians for polynomial baseline fit.\n"
9552  "\n"
9553  "This function is added to *jacobian_agenda* by jacobianAddPolyfit\n"
9554  "and should normally not be called by the user.\n"),
9555  AUTHORS("Patrick Eriksson"),
9556  OUT("jacobian"),
9557  GOUT(),
9558  GOUT_TYPE(),
9559  GOUT_DESC(),
9560  IN("jacobian",
9561  "mblock_index",
9562  "iyb",
9563  "yb",
9564  "sensor_response",
9565  "sensor_response_pol_grid",
9566  "sensor_response_f_grid",
9567  "sensor_response_dlos_grid",
9568  "jacobian_quantities"),
9569  GIN("poly_coeff"),
9570  GIN_TYPE("Index"),
9571  GIN_DEFAULT(NODEF),
9572  GIN_DESC("Polynomial coefficient to handle."),
9573  SETMETHOD(true)));
9574 
9575  md_data_raw.push_back(create_mdrecord(
9576  NAME("jacobianCalcSinefit"),
9577  DESCRIPTION(
9578  "Calculates jacobians for sinusoidal baseline fit.\n"
9579  "\n"
9580  "This function is added to *jacobian_agenda* by jacobianAddPolyfit\n"
9581  "and should normally not be called by the user.\n"),
9582  AUTHORS("Patrick Eriksson"),
9583  OUT("jacobian"),
9584  GOUT(),
9585  GOUT_TYPE(),
9586  GOUT_DESC(),
9587  IN("jacobian",
9588  "mblock_index",
9589  "iyb",
9590  "yb",
9591  "sensor_response",
9592  "sensor_response_pol_grid",
9593  "sensor_response_f_grid",
9594  "sensor_response_dlos_grid",
9595  "jacobian_quantities"),
9596  GIN("period_index"),
9597  GIN_TYPE("Index"),
9598  GIN_DEFAULT(NODEF),
9599  GIN_DESC("Index among the period length specified for add-method."),
9600  SETMETHOD(true)));
9601 
9602  md_data_raw.push_back(create_mdrecord(
9603  NAME("jacobianClose"),
9604  DESCRIPTION(
9605  "Closes the array of retrieval quantities and prepares for\n"
9606  "calculation of the Jacobian matrix.\n"
9607  "\n"
9608  "This function closes the *jacobian_quantities* array and sets\n"
9609  "*jacobian_do* to 1.\n"
9610  "\n"
9611  "Retrieval quantities should not be added after a call to this WSM.\n"
9612  "No calculations are performed here.\n"),
9613  AUTHORS("Mattias Ekstrom"),
9614  OUT("jacobian_do", "jacobian_agenda"),
9615  GOUT(),
9616  GOUT_TYPE(),
9617  GOUT_DESC(),
9618  IN("jacobian_agenda", "jacobian_quantities"),
9619  GIN(),
9620  GIN_TYPE(),
9621  GIN_DEFAULT(),
9622  GIN_DESC()));
9623 
9624  md_data_raw.push_back(create_mdrecord(
9625  NAME("jacobianFromTwoY"),
9626  DESCRIPTION(
9627  "Sets *jacobian* based on the difference vetween two measurement vectors.\n"
9628  "\n"
9629  "This function assumes that *y_pert* contains a measurement calculated\n"
9630  "with some variable perturbed, in comparison to the calculation\n"
9631  "behind *y*. The function takes the differences between *y_pert*\n"
9632  "and *y* to form a numerical derived estimate of *jacobian*.\n"
9633  "This gives a Jacobian wit a single column.\n"
9634  "\n"
9635  "*jacobian* equals here: (y_pert-y)/pert_size.\n"),
9636  AUTHORS("Patrick Eriksson"),
9637  OUT("jacobian"),
9638  GOUT(),
9639  GOUT_TYPE(),
9640  GOUT_DESC(),
9641  IN("y"),
9642  GIN("y_pert", "pert_size"),
9643  GIN_TYPE("Vector", "Numeric"),
9645  GIN_DESC("Perturbed measurement vector",
9646  "Size of perturbation behind spectra in *ybatch*.")));
9647 
9648  md_data_raw.push_back(create_mdrecord(
9649  NAME("jacobianFromYbatch"),
9650  DESCRIPTION(
9651  "Sets *jacobian* based on perturbation calcuations.\n"
9652  "\n"
9653  "This function assumes that *ybatch* contains spectra calculated\n"
9654  "with some variable perturbed, in comparison to the calculation\n"
9655  "behind *y*. The function takes the differences between *ybatch*\n"
9656  "and *y* to form a numerical derived estimate of *jacobian*.\n"
9657  "\n"
9658  "Column i of *jacobian* equals: (ybatch[i]-y)/pert_size.\n"),
9659  AUTHORS("Patrick Eriksson"),
9660  OUT("jacobian"),
9661  GOUT(),
9662  GOUT_TYPE(),
9663  GOUT_DESC(),
9664  IN("ybatch", "y"),
9665  GIN("pert_size"),
9666  GIN_TYPE("Numeric"),
9667  GIN_DEFAULT(NODEF),
9668  GIN_DESC("Size of perturbation behind spectra in *ybatch*.")));
9669 
9670  md_data_raw.push_back(create_mdrecord(
9671  NAME("jacobianInit"),
9672  DESCRIPTION(
9673  "Initialises the variables connected to the Jacobian matrix.\n"
9674  "\n"
9675  "This function initialises the *jacobian_quantities* array so\n"
9676  "that retrieval quantities can be added to it. Accordingly, it has\n"
9677  "to be called before any calls to jacobianAddTemperature or\n"
9678  "similar methods.\n"
9679  "\n"
9680  "The Jacobian quantities are initialised to be empty.\n"),
9681  AUTHORS("Mattias Ekstrom"),
9682  OUT("jacobian_quantities", "jacobian_agenda"),
9683  GOUT(),
9684  GOUT_TYPE(),
9685  GOUT_DESC(),
9686  IN(),
9687  GIN(),
9688  GIN_TYPE(),
9689  GIN_DEFAULT(),
9690  GIN_DESC()));
9691 
9692  md_data_raw.push_back(create_mdrecord(
9693  NAME("jacobianOff"),
9694  DESCRIPTION(
9695  "Makes mandatory initialisation of some jacobian variables.\n"
9696  "\n"
9697  "Some clear-sky jacobian WSVs must be initialised even if no such\n"
9698  "calculations will be performed. This is handled with this method.\n"
9699  "That is, this method must be called when no clear-sky jacobians\n"
9700  "will be calculated (even if cloudy-sky jacobians are calculated!).\n"
9701  "\n"
9702  "Sets *jacobian_do* to 0.\n"),
9703  AUTHORS("Patrick Eriksson"),
9704  OUT("jacobian_do", "jacobian_agenda", "jacobian_quantities"),
9705  GOUT(),
9706  GOUT_TYPE(),
9707  GOUT_DESC(),
9708  IN(),
9709  GIN(),
9710  GIN_TYPE(),
9711  GIN_DEFAULT(),
9712  GIN_DESC()));
9713 
9714  md_data_raw.push_back(create_mdrecord(
9715  NAME("jacobianSetAffineTransformation"),
9716  DESCRIPTION(
9717  "Adds an affine transformation of the last element of\n"
9718  "*jacobian_quantities*.\n"
9719  "\n"
9720  "See *jacobianSetFuncTransformation* for a general description of how\n"
9721  "retrieval transformations are defined. Transformations are not applied by\n"
9722  "methods such as*yCalc*. Instead, the method *jacobianAdjustAndTransform*\n"
9723  "must be called to activate the transformations.\n"
9724  "\n"
9725  "The affine transformation is specified by a transformation matrix, A,\n"
9726  "and an offset vector, b. These two are applied as described in\n"
9727  "*jacobianSetFuncTransformation*.\n"
9728  "\n"
9729  "The transformations is applied as\n"
9730  " x = A * ( z - b )\n"
9731  "where z is the retrieval quantity on the standard retrieval grids\n"
9732  "and x is the final state vector.\n"
9733  "\n"
9734  "So far, the following must be true for valid A-matrices\n"
9735  " z = A'*x + b\n"
9736  "That is, the reversed transformation is given by A transposed.\n"
9737  "\n"
9738  "This method must only be called if an affine transformation is wanted.\n"
9739  "Default is to make no such tranformation at all.\n"),
9740  AUTHORS("Simon Pfreundschuh"),
9741  OUT("jacobian_quantities"),
9742  GOUT(),
9743  GOUT_TYPE(),
9744  GOUT_DESC(),
9745  IN("jacobian_quantities"),
9746  GIN("transformation_matrix", "offset_vector"),
9747  GIN_TYPE("Matrix", "Vector"),
9749  GIN_DESC("The transformation matrix A", "The offset vector b")));
9750 
9751  md_data_raw.push_back(create_mdrecord(
9752  NAME("jacobianSetFuncTransformation"),
9753  DESCRIPTION(
9754  "Sets the functional transformation of the last element of\n"
9755  "*jacobian_quantities*.\n"
9756  "\n"
9757  "See below for a general description of how retrieval transformations\n"
9758  "are defined. Transformations are not applied by methods such as*yCalc*.\n"
9759  "Instead, the method *jacobianAdjustAndTransform* must be called to\n"
9760  "activate the transformations.\n"
9761  "\n"
9762  "The following transformations can be selected (by *transformation_func*):\n"
9763  " log : The natural logarithm\n"
9764  " log10 : The base-10 logarithm\n"
9765  " atanh : Area hyperbolic tangent \n"
9766  " none : No transformation at all\n"
9767  "\n"
9768  "This method needs only to be called if a functional transformation\n"
9769  "is wanted. Default is to make no such tranformation at all (i.e.\n"
9770  "the option \"none\" exists only for reasons of flexibility).\n"
9771  "\n"
9772  "The log-options are applied as log(z-z_min) and log10(z-z_min).\n"
9773  "The default for *z_min* is zero, but by changing it the lower limit\n"
9774  "for z can be changed. Note that *z_min* becomes the lower limit for\n"
9775  "allowed values of z. The GIN *z_max* is here ignored.\n"
9776  "\n"
9777  "For the atanh-option, also *z_max* is considered. This transformation\n"
9778  "is applied as atanh((2(z-z_min)/(z_max-z_min))-1). As above,*z_min*\n"
9779  "is lower limit for allowed values of z. On the other hand, *z_max*\n"
9780  "eines the upper limit for z.\n"
9781  "\n"
9782  "The GIN *transformation_func* is so far only used for atanh. The parameter\n"
9783  "specifies the maximum allowed value allowed for u. That is, the valid\n"
9784  "range for u becomes ]0,tfunc_parameter[. Note that log and log10\n"
9785  "demands/ensures that u > 0, but implies no upper limit.\n"
9786  "\n"
9787  "General handling of retrieval units and transformations:\n"
9788  "---\n"
9789  "Default is that quantities are retrieved as defined in ARTS, but\n"
9790  "both some unit conversion and transformations are provided. These\n"
9791  "operations are applied as:\n"
9792  " x = A * ( f(u(z)) - b ) \n"
9793  "where\n"
9794  " z is the quantity as defined ARTS\n"
9795  " u represents the change of unit\n"
9796  " f is the transformation function\n"
9797  " A and b define together an affine transformation\n"
9798  " x is the retrieved quantity\n"
9799  "For example, this systen allows to retrive a principal component\n"
9800  "representation (A and b) of the log (f) of relative humidity (u).\n"
9801  "\n"
9802  "Change of unit is selected by the quantity specific jacobian-add\n"
9803  "methods (so far only at hand for gas species). \n"
9804  "\n"
9805  "Activating a transformation function is done by this method. Note\n"
9806  "that the functions are defined as the transformation from z to x.\n"
9807  "For more details on affine transformations, see\n"
9808  "*jacobianSetAffineTransformation*.\n"),
9809  AUTHORS("Patrick Eriksson", "Simon Pfreundschuh"),
9810  OUT("jacobian_quantities"),
9811  GOUT(),
9812  GOUT_TYPE(),
9813  GOUT_DESC(),
9814  IN("jacobian_quantities"),
9815  GIN("transformation_func", "z_min", "z_max"),
9816  GIN_TYPE("String", "Numeric", "Numeric"),
9817  GIN_DEFAULT(NODEF, "0", "-99e99"),
9818  GIN_DESC("The transformation function.",
9819  "Lower limit of z.",
9820  "Upper limit of z.")));
9821 
9822  md_data_raw.push_back(create_mdrecord(
9823  NAME("lat_gridFromRawField"),
9824  DESCRIPTION(
9825  "Sets *lat_grid* according to given raw atmospheric field's lat_grid.\n"
9826  "Similar to *p_gridFromZRaw*, but acting on a generic *GriddedField3*\n"
9827  "(e.g., a wind or magnetic field component).\n"),
9828  AUTHORS("Jana Mendrok"),
9829  OUT("lat_grid"),
9830  GOUT(),
9831  GOUT_TYPE(),
9832  GOUT_DESC(),
9833  IN(),
9834  GIN("field_raw"),
9835  GIN_TYPE("GriddedField3"),
9836  GIN_DEFAULT(NODEF),
9837  GIN_DESC("A raw atmospheric field.")));
9838 
9839  md_data_raw.push_back(create_mdrecord(
9840  NAME("lbl_checkedCalc"),
9841  DESCRIPTION("Checks that the line-by-line parameters are OK.\n"
9842  "\n"
9843  "On failure, will throw. On success, lbl_checked evals as true\n"
9844  "\n"
9845  "Note that checks may become more stringent as ARTS evolves, especially for\n"
9846  "\"new\" options. This test might succeed in one version of ARTS but fail\n"
9847  "in later versions\n"),
9848  AUTHORS("Richard Larsson"),
9849  OUT("lbl_checked"),
9850  GOUT(),
9851  GOUT_TYPE(),
9852  GOUT_DESC(),
9853  IN("abs_lines_per_species", "abs_species", "isotopologue_ratios", "partition_functions"),
9854  GIN(),
9855  GIN_TYPE(),
9856  GIN_DEFAULT(),
9857  GIN_DESC()));
9858 
9859  md_data_raw.push_back(create_mdrecord(
9860  NAME("LocalTimeOffset"),
9861  DESCRIPTION("Sets the seconds between localtime and gmtime representation of now().\n"),
9862  AUTHORS("Richard Larsson"),
9863  OUT(),
9864  GOUT("dt"),
9865  GOUT_TYPE("Numeric"),
9866  GOUT_DESC("Time in seconds between local and gmt"),
9867  IN(),
9868  GIN(),
9869  GIN_TYPE(),
9870  GIN_DEFAULT(),
9871  GIN_DESC()));
9872 
9873  md_data_raw.push_back(create_mdrecord(
9874  NAME("lon_gridFromRawField"),
9875  DESCRIPTION(
9876  "Sets *lon_grid* according to given raw atmospheric field's lat_grid.\n"
9877  "Similar to *p_gridFromZRaw*, but acting on a generic *GriddedField3*\n"
9878  "(e.g., a wind or magnetic field component).\n"),
9879  AUTHORS("Jana Mendrok"),
9880  OUT("lon_grid"),
9881  GOUT(),
9882  GOUT_TYPE(),
9883  GOUT_DESC(),
9884  IN(),
9885  GIN("field_raw"),
9886  GIN_TYPE("GriddedField3"),
9887  GIN_DEFAULT(NODEF),
9888  GIN_DESC("A raw atmospheric field.")));
9889 
9890  md_data_raw.push_back(create_mdrecord(
9891  NAME("MagFieldsCalc"),
9892  DESCRIPTION(
9893  "Interpolation of raw magnetic fields to calculation grids.\n"
9894  "Heritage from *AtmFieldsCalc*\n"
9895  "\n"
9896  "Internally, *MagFieldsCalc* applies *GriddedFieldPRegrid* and\n"
9897  "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
9898  "is allowed and applied.\n"),
9899  AUTHORS("Richard Larsson"),
9900  OUT("mag_u_field", "mag_v_field", "mag_w_field"),
9901  GOUT(),
9902  GOUT_TYPE(),
9903  GOUT_DESC(),
9904  IN("p_grid",
9905  "lat_grid",
9906  "lon_grid",
9907  "mag_u_field_raw",
9908  "mag_v_field_raw",
9909  "mag_w_field_raw",
9910  "atmosphere_dim"),
9911  GIN("interp_order"),
9912  GIN_TYPE("Index"),
9913  GIN_DEFAULT("1"),
9914  GIN_DESC("Interpolation order (1=linear interpolation).")));
9915 
9916  md_data_raw.push_back(create_mdrecord(
9917  NAME("MagFieldsCalcExpand1D"),
9918  DESCRIPTION(
9919  "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
9920  "homogeneous magnetic fields. Derived from *AtmFieldsCalcExpand1D*\n"
9921  "\n"
9922  "The method works as *MagFieldsCalc*, but accepts only raw 1D\n"
9923  "magnetic fields. The raw data is interpolated to *p_grid* and\n"
9924  "the obtained values are applied for all latitudes, and also\n"
9925  "longitudes for 3D, to create a homogeneous atmosphere.\n"),
9926  AUTHORS("Richard Larsson"),
9927  OUT("mag_u_field", "mag_v_field", "mag_w_field"),
9928  GOUT(),
9929  GOUT_TYPE(),
9930  GOUT_DESC(),
9931  IN("p_grid",
9932  "lat_grid",
9933  "lon_grid",
9934  "mag_u_field_raw",
9935  "mag_v_field_raw",
9936  "mag_w_field_raw",
9937  "atmosphere_dim"),
9938  GIN("interp_order"),
9939  GIN_TYPE("Index"),
9940  GIN_DEFAULT("1"),
9941  GIN_DESC("Interpolation order (1=linear interpolation).")));
9942 
9943  md_data_raw.push_back(create_mdrecord(
9944  NAME("MagFieldsFromAltitudeRawCalc"),
9945  DESCRIPTION(
9946  "Regrids the rawfield by lat-lon and interpolates to z_field.\n"),
9947  AUTHORS("Richard Larsson"),
9948  OUT("mag_u_field", "mag_v_field", "mag_w_field"),
9949  GOUT(),
9950  GOUT_TYPE(),
9951  GOUT_DESC(),
9952  IN("lat_grid",
9953  "lon_grid",
9954  "z_field",
9955  "mag_u_field_raw",
9956  "mag_v_field_raw",
9957  "mag_w_field_raw"),
9958  GIN("interp_order", "extrapolating"),
9959  GIN_TYPE("Index", "Numeric"),
9960  GIN_DEFAULT("1", "1e99"),
9961  GIN_DESC("Interpolation order (1=linear interpolation).",
9962  "Extrapolation allowed in interpolation of altitude.")));
9963 
9964  md_data_raw.push_back(create_mdrecord(
9965  NAME("MagRawRead"),
9966  DESCRIPTION(
9967  "Reads magnetic field data from a scenario.\n"
9968  "\n"
9969  "A full set of field components is read (NOTE: fails if scenario\n"
9970  "only contains selected field components). The files can be\n"
9971  "anywhere, but must all be in the same directory specified by\n"
9972  "'basename'. Naming convention for the field component files is\n"
9973  "basename.mag_u.xml for the u-component, v- and w-components\n"
9974  "accordingly.\n"),
9975  AUTHORS("Richard Larsson"),
9976  OUT("mag_u_field_raw", "mag_v_field_raw", "mag_w_field_raw"),
9977  GOUT(),
9978  GOUT_TYPE(),
9979  GOUT_DESC(),
9980  IN(),
9981  GIN("basename"),
9982  GIN_TYPE("String"),
9983  GIN_DEFAULT(NODEF),
9984  GIN_DESC("Name of scenario, probably including the full path. For "
9985  "example: \"/data/magnetic_field\"")));
9986 
9987  md_data_raw.push_back(create_mdrecord(
9988  NAME("MatrixAddScalar"),
9989  DESCRIPTION(
9990  "Adds a scalar to all elements of a matrix.\n"
9991  "\n"
9992  "The result can either be stored in the same or another matrix.\n"),
9993  AUTHORS("Patrick Eriksson"),
9994  OUT(),
9995  GOUT("out"),
9996  GOUT_TYPE("Matrix"),
9997  GOUT_DESC("Output matrix"),
9998  IN(),
9999  GIN("in", "value"),
10000  GIN_TYPE("Matrix", "Numeric"),
10002  GIN_DESC("Input matrix.", "The value to be added to the matrix.")));
10003 
10004  md_data_raw.push_back(create_mdrecord(
10005  NAME("MatrixCBR"),
10006  DESCRIPTION(
10007  "Sets a matrix to hold cosmic background radiation (CBR).\n"
10008  "\n"
10009  "The CBR is assumed to be un-polarized and Stokes components 2-4\n"
10010  "are zero. Number of Stokes components, that equals the number\n"
10011  "of columns in the created matrix, is determined by *stokes_dim*.\n"
10012  "The number of rows in the created matrix equals the length of the\n"
10013  "given frequency vector.\n"
10014  "\n"
10015  "The cosmic radiation is modelled as blackbody radiation for the\n"
10016  "temperature given by the global constant COSMIC_BG_TEMP, set in\n"
10017  "the file constants.cc. The frequencies are taken from the generic\n"
10018  "input vector.\n"
10019  "\n"
10020  "The standard definition, in ARTS, of the Planck function is\n"
10021  "followed and the unit of the returned data is W/(m3 * Hz * sr).\n"),
10022  AUTHORS("Patrick Eriksson"),
10023  OUT(),
10024  GOUT("out"),
10025  GOUT_TYPE("Matrix"),
10026  GOUT_DESC("Variable to initialize."),
10027  IN("stokes_dim"),
10028  GIN("f"),
10029  GIN_TYPE("Vector"),
10030  GIN_DEFAULT(NODEF),
10031  GIN_DESC("Frequency vector.")));
10032 
10033  md_data_raw.push_back(create_mdrecord(
10034  NAME("MatrixCopySparse"),
10035  DESCRIPTION("Creates a matrix by copying a variable of type Sparse.\n"),
10036  AUTHORS("Patrick Eriksson"),
10037  OUT(),
10038  GOUT("out"),
10039  GOUT_TYPE("Matrix"),
10040  GOUT_DESC("Created (full) matrix."),
10041  IN(),
10042  GIN("in"),
10043  GIN_TYPE("Sparse"),
10044  GIN_DEFAULT(NODEF),
10045  GIN_DESC("The sparse matrix to be copied.")));
10046 
10047  md_data_raw.push_back(create_mdrecord(
10048  NAME("MatrixExtractFromTensor3"),
10049  DESCRIPTION(
10050  "Extracts a Matrix from a Tensor3.\n"
10051  "\n"
10052  "Copies page or row or column with given Index from input Tensor3\n"
10053  "variable to output Matrix.\n"
10054  "Higher order equivalent of *VectorExtractFromMatrix*.\n"),
10055  AUTHORS("Jana Mendrok"),
10056  OUT(),
10057  GOUT("out"),
10058  GOUT_TYPE("Matrix"),
10059  GOUT_DESC("Extracted matrix."),
10060  IN(),
10061  GIN("in", "i", "direction"),
10062  GIN_TYPE("Tensor3", "Index", "String"),
10064  GIN_DESC("Input matrix.",
10065  "Index of page or row or column to extract.",
10066  "Direction. \"page\" or \"row\" or \"column\".")));
10067 
10068  md_data_raw.push_back(
10069  create_mdrecord(NAME("MatrixFromCovarianceMatrix"),
10070  DESCRIPTION("Turns a covariance matrix into a Matrix.\n"),
10071  AUTHORS("Richard Larsson"),
10072  OUT(),
10073  GOUT("out"),
10074  GOUT_TYPE("Matrix"),
10075  GOUT_DESC("Dense Matrix."),
10076  IN(),
10077  GIN("in"),
10078  GIN_TYPE("CovarianceMatrix"),
10079  GIN_DEFAULT(NODEF),
10080  GIN_DESC("Input covariance matrix.")));
10081 
10082  md_data_raw.push_back(create_mdrecord(
10083  NAME("MatrixIdentity"),
10084  DESCRIPTION(
10085  "Returns an identity matrix.\n"
10086  "\n"
10087  "The size if the matrix created is n x n. Default is to return a\n"
10088  "true identity matrix (I), but you can also select another value\n"
10089  "along the diagonal by setting *value*. That is, the output is\n"
10090  "value*I.\n"),
10091  AUTHORS("Patrick Eriksson"),
10092  OUT(),
10093  GOUT("out"),
10094  GOUT_TYPE("Matrix"),
10095  GOUT_DESC("Output matrix"),
10096  IN(),
10097  GIN("n", "value"),
10098  GIN_TYPE("Index", "Numeric"),
10099  GIN_DEFAULT(NODEF, "1"),
10100  GIN_DESC("Size of the matrix", "The value along the diagonal.")));
10101 
10102  md_data_raw.push_back(create_mdrecord(
10103  NAME("MatrixMatrixMultiply"),
10104  DESCRIPTION(
10105  "Multiply a Matrix with another Matrix and store the result in the result\n"
10106  "Matrix.\n"
10107  "\n"
10108  "This just computes the normal Matrix-Matrix product, Y=M*X. It is ok\n"
10109  "if Y and X are the same Matrix.\n"),
10110  AUTHORS("Stefan Buehler"),
10111  OUT(),
10112  GOUT("out"),
10113  GOUT_TYPE("Matrix"),
10114  GOUT_DESC("The result of the multiplication (dimension mxc)."),
10115  IN(),
10116  GIN("m", "x"),
10117  GIN_TYPE("Matrix", "Matrix"),
10119  GIN_DESC("The Matrix to multiply (dimension mxn).",
10120  "The original Matrix (dimension nxc).")));
10121 
10122  md_data_raw.push_back(create_mdrecord(
10123  NAME("MatrixPlanck"),
10124  DESCRIPTION(
10125  "Sets a matrix to hold blackbody radiation.\n"
10126  "\n"
10127  "The radiation is assumed to be un-polarized and Stokes components\n"
10128  "2-4 are zero. Number of Stokes components, that equals the number\n"
10129  "of columns in the created matrix, is determined by *stokes_dim*.\n"
10130  "The number of rows in the created matrix equals the length of the\n"
10131  "given frequency vector.\n"
10132  "\n"
10133  "The standard definition, in ARTS, of the Planck function is\n"
10134  "followed and the unit of the returned data is W/(m3 * Hz * sr).\n"),
10135  AUTHORS("Patrick Eriksson"),
10136  OUT(),
10137  GOUT("out"),
10138  GOUT_TYPE("Matrix"),
10139  GOUT_DESC("Variable to initialize."),
10140  IN("stokes_dim"),
10141  GIN("f", "t"),
10142  GIN_TYPE("Vector", "Numeric"),
10144  GIN_DESC("Frequency vector.", "Temperature [K].")));
10145 
10146  md_data_raw.push_back(create_mdrecord(
10147  NAME("MatrixScale"),
10148  DESCRIPTION("Scales all elements of a matrix with the specified value.\n"
10149  "\n"
10150  "The result can either be stored in the same or another\n"
10151  "variable.\n"),
10152  AUTHORS("Patrick Eriksson"),
10153  OUT(),
10154  GOUT("out"),
10155  GOUT_TYPE("Matrix"),
10156  GOUT_DESC("Output matrix"),
10157  IN(),
10158  GIN("in", "value"),
10159  GIN_TYPE("Matrix", "Numeric"),
10161  GIN_DESC("Input matrix.",
10162  "The value to be multiplied with the matrix.")));
10163 
10164  md_data_raw.push_back(create_mdrecord(
10165  NAME("MatrixSet"),
10166  DESCRIPTION("Initialize a Matrix from the given list of numbers.\n"
10167  "\n"
10168  "Usage:\n"
10169  " MatrixSet(m1, [1, 2, 3; 4, 5, 6])\n"),
10170  AUTHORS("Oliver Lemke"),
10171  OUT(),
10172  GOUT("out"),
10173  GOUT_TYPE("Matrix"),
10174  GOUT_DESC("The newly created matrix"),
10175  IN(),
10176  GIN("value"),
10177  GIN_TYPE("Matrix"),
10178  GIN_DEFAULT(NODEF),
10179  GIN_DESC("The values of the newly created matrix. Elements are separated "
10180  "by commas, rows by semicolons."),
10181  SETMETHOD(true)));
10182 
10183  md_data_raw.push_back(create_mdrecord(
10184  NAME("MatrixSetConstant"),
10185  DESCRIPTION(
10186  "Creates a matrix and sets all elements to the specified value.\n"
10187  "\n"
10188  "The size is determined by *ncols* and *nrows*.\n"),
10189  AUTHORS("Patrick Eriksson"),
10190  OUT(),
10191  GOUT("out"),
10192  GOUT_TYPE("Matrix"),
10193  GOUT_DESC("Variable to initialize."),
10194  IN("nrows", "ncols"),
10195  GIN("value"),
10196  GIN_TYPE("Numeric"),
10197  GIN_DEFAULT(NODEF),
10198  GIN_DESC("Matrix value.")));
10199 
10200  md_data_raw.push_back(create_mdrecord(
10201  NAME("MatrixUnitIntensity"),
10202  DESCRIPTION(
10203  "Sets a matrix to hold unpolarised radiation with unit intensity.\n"
10204  "\n"
10205  "Works as MatrixPlanck where the radiation is set to 1.\n"),
10206  AUTHORS("Patrick Eriksson"),
10207  OUT(),
10208  GOUT("out"),
10209  GOUT_TYPE("Matrix"),
10210  GOUT_DESC("Variable to initialize."),
10211  IN("stokes_dim"),
10212  GIN("f"),
10213  GIN_TYPE("Vector"),
10214  GIN_DEFAULT(NODEF),
10215  GIN_DESC("Frequency vector.")));
10216 
10217  md_data_raw.push_back(create_mdrecord(
10218  NAME("MatrixVectorMultiply"),
10219  DESCRIPTION(
10220  "Multiply a Matrix with a Vector\n"
10221  "\n"
10222  "Computes the normal Matrix-Vector product, out=m*v. It is ok if out and v\n"
10223  "are the same Vector.\n"),
10224  AUTHORS("Stefan Buehler and Patrick Eriksson"),
10225  OUT(),
10226  GOUT("out"),
10227  GOUT_TYPE("Vector"),
10228  GOUT_DESC("The result of the multiplication (length m)."),
10229  IN(),
10230  GIN("m", "v"),
10231  GIN_TYPE("Matrix", "Vector"),
10233  GIN_DESC("The Matrix to multiply (dimension mxn).",
10234  "The original Vector (length n).")));
10235 
10236  md_data_raw.push_back(create_mdrecord(
10237  NAME("Matrix1ColFromVector"),
10238  DESCRIPTION("Forms a matrix containing one column from a vector.\n"),
10239  AUTHORS("Mattias Ekstrom"),
10240  OUT(),
10241  GOUT("out"),
10242  GOUT_TYPE("Matrix"),
10243  GOUT_DESC("Variable to initialize."),
10244  IN(),
10245  GIN("v"),
10246  GIN_TYPE("Vector"),
10247  GIN_DEFAULT(NODEF),
10248  GIN_DESC("The vector to be copied.")));
10249 
10250  md_data_raw.push_back(create_mdrecord(
10251  NAME("Matrix2ColFromVectors"),
10252  DESCRIPTION(
10253  "Forms a matrix containing two columns from two vectors.\n"
10254  "\n"
10255  "The vectors are included as columns in the matrix in the same order\n"
10256  "as they are given.\n"),
10257  AUTHORS("Mattias Ekstrom"),
10258  OUT(),
10259  GOUT("out"),
10260  GOUT_TYPE("Matrix"),
10261  GOUT_DESC("Variable to initialize."),
10262  IN(),
10263  GIN("v1", "v2"),
10264  GIN_TYPE("Vector", "Vector"),
10266  GIN_DESC("The vector to be copied into the first column.",
10267  "The vector to be copied into the second column.")));
10268 
10269  md_data_raw.push_back(create_mdrecord(
10270  NAME("Matrix3ColFromVectors"),
10271  DESCRIPTION(
10272  "Forms a matrix containing three columns from three vectors.\n"
10273  "\n"
10274  "The vectors are included as columns in the matrix in the same order\n"
10275  "as they are given.\n"),
10276  AUTHORS("Mattias Ekstrom"),
10277  OUT(),
10278  GOUT("out"),
10279  GOUT_TYPE("Matrix"),
10280  GOUT_DESC("Variable to initialize."),
10281  IN(),
10282  GIN("v1", "v2", "v3"),
10283  GIN_TYPE("Vector", "Vector", "Vector"),
10285  GIN_DESC("The vector to be copied into the first column.",
10286  "The vector to be copied into the second column.",
10287  "The vector to be copied into the third column.")));
10288 
10289  md_data_raw.push_back(create_mdrecord(
10290  NAME("Matrix1RowFromVector"),
10291  DESCRIPTION("Forms a matrix containing one row from a vector.\n"),
10292  AUTHORS("Mattias Ekstrom"),
10293  OUT(),
10294  GOUT("out"),
10295  GOUT_TYPE("Matrix"),
10296  GOUT_DESC("Variable to initialize."),
10297  IN(),
10298  GIN("v"),
10299  GIN_TYPE("Vector"),
10300  GIN_DEFAULT(NODEF),
10301  GIN_DESC("The vector to be copied.")));
10302 
10303  md_data_raw.push_back(create_mdrecord(
10304  NAME("Matrix2RowFromVectors"),
10305  DESCRIPTION(
10306  "Forms a matrix containing two rows from two vectors.\n"
10307  "\n"
10308  "The vectors are included as rows in the matrix in the same order\n"
10309  "as they are given.\n"),
10310  AUTHORS("Mattias Ekstrom"),
10311  OUT(),
10312  GOUT("out"),
10313  GOUT_TYPE("Matrix"),
10314  GOUT_DESC("Variable to initialize."),
10315  IN(),
10316  GIN("v1", "v2"),
10317  GIN_TYPE("Vector", "Vector"),
10319  GIN_DESC("The vector to be copied into the first row.",
10320  "The vector to be copied into the second row.")));
10321 
10322  md_data_raw.push_back(create_mdrecord(
10323  NAME("Matrix3RowFromVectors"),
10324  DESCRIPTION(
10325  "Forms a matrix containing three rows from three vectors.\n"
10326  "\n"
10327  "The vectors are included as rows in the matrix in the same order\n"
10328  "as they are given.\n"),
10329  AUTHORS("Mattias Ekstrom"),
10330  OUT(),
10331  GOUT("out"),
10332  GOUT_TYPE("Matrix"),
10333  GOUT_DESC("Variable to initialize."),
10334  IN(),
10335  GIN("v1", "v2", "v3"),
10336  GIN_TYPE("Vector", "Vector", "Vector"),
10338  GIN_DESC("The vector to be copied into the first row.",
10339  "The vector to be copied into the second row.",
10340  "The vector to be copied into the third row.")));
10341 
10342  md_data_raw.push_back(create_mdrecord(
10343  NAME("mblock_dlos_gridUniformCircular"),
10344  DESCRIPTION(
10345  "Gives *mblock_dlos_grid* roughly circular coverage, with uniform spacing.\n"
10346  "\n"
10347  "The method considers points on a regular grid with a spacing set by\n"
10348  "GIN *spacing*. All points inside a radius from (0,0) are included in\n"
10349  "*mblock_dlos_grid*. The positions in *mblock_dlos_grid* thus covers\n"
10350  "a roughly circular domain, and cover the same solid beam angle.\n"
10351  "The radius is adjusted according to *spacing' and *centre*, but is\n"
10352  "ensured to be >= *width*.\n"
10353  "\n"
10354  "Note that the method assumes that width is small and the solid beam\n"
10355  "angle does not change with distance from (0.0).\n"
10356  "\n"
10357  "Defualt is to consider grid positions of ..., -spacing/2, spacing/2, ...\n"
10358  "If you want to have (0,0) as a point in *mblock_dlos_grid*, change\n"
10359  "*centre* from its default value.\n"),
10360  AUTHORS("Patrick Eriksson"),
10361  OUT("mblock_dlos_grid"),
10362  GOUT(),
10363  GOUT_TYPE(),
10364  GOUT_DESC(),
10365  IN(),
10366  GIN("spacing", "width", "centre"),
10367  GIN_TYPE("Numeric", "Numeric", "Index"),
10368  GIN_DEFAULT(NODEF, NODEF, "0"),
10369  GIN_DESC("The angular spacing between points.",
10370  "The minimum distance from (0,0) to cover.",
10371  "Set to 1 to place a point at (0,0).")));
10372 
10373  md_data_raw.push_back(create_mdrecord(
10374  NAME("mblock_dlos_gridUniformRectangular"),
10375  DESCRIPTION(
10376  "Gives *mblock_dlos_grid* rectangular coverage, with uniform spacing.\n"
10377  "\n"
10378  "The method creates an equidistant rectangular grid. The width in zenith\n"
10379  "and azimuth can differ. Note that selected widths are half-widths (i.e.\n"
10380  "distance from (0,0), and refers to the mimumum value allowed. The actual\n"
10381  "width depends on values selected for *spacing* and *centre*.\n"
10382  "\n"
10383  "Defualt is to consider grid positions of ..., -spacing/2, spacing/2, ...\n"
10384  "If you want to have (0,0) as a point in *mblock_dlos_grid*, change\n"
10385  "*centre* from its default value.\n"),
10386  AUTHORS("Patrick Eriksson"),
10387  OUT("mblock_dlos_grid"),
10388  GOUT(),
10389  GOUT_TYPE(),
10390  GOUT_DESC(),
10391  IN(),
10392  GIN("spacing", "za_width", "aa_width", "centre"),
10393  GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
10394  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
10395  GIN_DESC("The angular spacing between points.",
10396  "Min value of half-width in zenith angle direction.",
10397  "Min value of half-width in azimuth angle direction.",
10398  "Set to 1 to place a point at (0,0).")));
10399 
10400  md_data_raw.push_back(create_mdrecord(
10401  NAME("mc_antennaSetGaussian"),
10402  DESCRIPTION(
10403  "Makes mc_antenna (used by MCGeneral) a 2D Gaussian pattern.\n"
10404  "\n"
10405  "The gaussian antenna pattern is determined by *za_sigma* and\n"
10406  "*aa_sigma*, which represent the standard deviations in the\n"
10407  "uncorrelated bivariate normal distribution.\n"),
10408  AUTHORS("Cory Davis"),
10409  OUT("mc_antenna"),
10410  GOUT(),
10411  GOUT_TYPE(),
10412  GOUT_DESC(),
10413  IN(),
10414  GIN("za_sigma", "aa_sigma"),
10415  GIN_TYPE("Numeric", "Numeric"),
10417  GIN_DESC("Width in the zenith angle dimension as described above.",
10418  "Width in the azimuth angle dimension as described above.")));
10419 
10420  md_data_raw.push_back(create_mdrecord(
10421  NAME("mc_antennaSetGaussianByFWHM"),
10422  DESCRIPTION(
10423  "Makes mc_antenna (used by MCGeneral) a 2D Gaussian pattern.\n"
10424  "\n"
10425  "The gaussian antenna pattern is determined by *za_fwhm* and\n"
10426  "*aa_fwhm*, which represent the full width half maximum (FWHM)\n"
10427  "of the antenna response, in the zenith and azimuthal planes.\n"),
10428  AUTHORS("Cory Davis"),
10429  OUT("mc_antenna"),
10430  GOUT(),
10431  GOUT_TYPE(),
10432  GOUT_DESC(),
10433  IN(),
10434  GIN("za_fwhm", "aa_fwhm"),
10435  GIN_TYPE("Numeric", "Numeric"),
10437  GIN_DESC("Width in the zenith angle dimension as described above.",
10438  "Width in the azimuth angle dimension as described above.")));
10439 
10440  md_data_raw.push_back(create_mdrecord(
10441  NAME("mc_antennaSetPencilBeam"),
10442  DESCRIPTION(
10443  "Makes mc_antenna (used by MCGeneral) a pencil beam.\n"
10444  "\n"
10445  "This WSM makes the subsequent MCGeneral WSM perform pencil beam\n"
10446  "RT calculations.\n"),
10447  AUTHORS("Cory Davis"),
10448  OUT("mc_antenna"),
10449  GOUT(),
10450  GOUT_TYPE(),
10451  GOUT_DESC(),
10452  IN(),
10453  GIN(),
10454  GIN_TYPE(),
10455  GIN_DEFAULT(),
10456  GIN_DESC()));
10457 
10458  md_data_raw.push_back(create_mdrecord(
10459  NAME("MCGeneral"),
10460  DESCRIPTION(
10461  "A generalised 3D reversed Monte Carlo radiative algorithm, that\n"
10462  "allows for 2D antenna patterns, surface reflection and arbitrary\n"
10463  "sensor positions.\n"
10464  "\n"
10465  "The main output variables *y* and *mc_error* represent the\n"
10466  "Stokes vector integrated over the antenna function, and the\n"
10467  "estimated error in this vector, respectively.\n"
10468  "\n"
10469  "The WSV *mc_max_iter* describes the maximum number of `photons\'\n"
10470  "used in the simulation (more photons means smaller *mc_error*).\n"
10471  "*mc_std_err* is the desired value of mc_error. *mc_max_time* is\n"
10472  "the maximum allowed number of seconds for MCGeneral. The method\n"
10473  "will terminate once any of the max_iter, std_err, max_time\n"
10474  "criteria are met. If negative values are given for these\n"
10475  "parameters then it is ignored.\n"
10476  "\n"
10477  "The WSV *mc_min_iter* sets the minimum number of photons to apply\n"
10478  "before the condition set by *mc_std_err* is considered. Values\n"
10479  "of *mc_min_iter* below 100 are not accepted.\n"
10480  "\n"
10481  "Only \"1\" and \"RJBT\" are allowed for *iy_unit*. The value of\n"
10482  "*mc_error* follows the selection for *iy_unit* (both for in- and\n"
10483  "output.\n"),
10484  AUTHORS("Cory Davis"),
10485  OUT("y",
10486  "mc_iteration_count",
10487  "mc_error",
10488  "mc_points",
10489  "mc_source_domain",
10490  "mc_scat_order"),
10491  GOUT(),
10492  GOUT_TYPE(),
10493  GOUT_DESC(),
10494  IN("mc_antenna",
10495  "f_grid",
10496  "f_index",
10497  "sensor_pos",
10498  "sensor_los",
10499  "stokes_dim",
10500  "atmosphere_dim",
10501  "ppath_step_agenda",
10502  "ppath_lmax",
10503  "ppath_lraytrace",
10504  "iy_space_agenda",
10505  "surface_rtprop_agenda",
10506  "propmat_clearsky_agenda",
10507  "p_grid",
10508  "lat_grid",
10509  "lon_grid",
10510  "z_field",
10511  "refellipsoid",
10512  "z_surface",
10513  "t_field",
10514  "vmr_field",
10515  "cloudbox_on",
10516  "cloudbox_limits",
10517  "pnd_field",
10518  "scat_data",
10519  "atmfields_checked",
10520  "atmgeom_checked",
10521  "scat_data_checked",
10522  "cloudbox_checked",
10523  "iy_unit",
10524  "mc_seed",
10525  "mc_std_err",
10526  "mc_max_time",
10527  "mc_max_iter",
10528  "mc_min_iter",
10529  "mc_taustep_limit"),
10530  GIN("l_mc_scat_order", "t_interp_order"),
10531  GIN_TYPE("Index", "Index"),
10532  GIN_DEFAULT("11", "1"),
10533  GIN_DESC("The length to be given to *mc_scat_order*. Note that"
10534  " scattering orders equal and above this value will not"
10535  " be counted.",
10536  "Interpolation order of temperature for scattering data (so"
10537  " far only applied in phase matrix, not in extinction and"
10538  " absorption.")));
10539 
10540  md_data_raw.push_back(create_mdrecord(
10541  NAME("MCRadar"),
10542  DESCRIPTION(
10543  "A radar 3D foward Monte Carlo radiative algorithm, that allows \n"
10544  "for 2D antenna patterns and arbitrary sensor positions.\n"
10545  "Surface reflections are currently ignored.\n"
10546  "\n"
10547  "The main output variable *y* and *mc_error* represent the\n"
10548  "radar reflectivity integrated over the antenna function, and the\n"
10549  "estimated error in this vector, respectively.\n"
10550  "\n"
10551  "Unlike with yActive, the range bins gives the boundaries of \n"
10552  "the range bins as either round-trip time or distance from radar.\n"
10553  "\n"
10554  "The WSV *mc_y_tx* gives the polarization state of the \n"
10555  "transmitter.\n"
10556  "\n"
10557  "The WSV *mc_max_scatorder* prescribes the maximum scattering \n"
10558  "order to consider, after which `photon\'-tracing will be\n"
10559  "terminated. A value of one calculates only single scattering.\n"
10560  "\n"
10561  "The WSV *mc_max_iter* describes the maximum number of `photons\'\n"
10562  "used in the simulation (more photons means smaller *mc_error*).\n"
10563  "The method will terminate once the max_iter criterium is met.\n"
10564  "If negative values are given for these parameters then it is\n"
10565  "ignored.\n"
10566  "\n"
10567  "Only \"1\" and \"Ze\" are allowed for *iy_unit*. The value of\n"
10568  "*mc_error* follows the selection for *iy_unit* (both for in- and\n"
10569  "output.\n"),
10570  AUTHORS("Ian S. Adams"),
10571  OUT("y", "mc_error"),
10572  GOUT(),
10573  GOUT_TYPE(),
10574  GOUT_DESC(),
10575  IN("mc_antenna",
10576  "f_grid",
10577  "f_index",
10578  "sensor_pos",
10579  "sensor_los",
10580  "stokes_dim",
10581  "atmosphere_dim",
10582  "ppath_lmax",
10583  "ppath_step_agenda",
10584  "ppath_lraytrace",
10585  "propmat_clearsky_agenda",
10586  "p_grid",
10587  "lat_grid",
10588  "lon_grid",
10589  "z_field",
10590  "refellipsoid",
10591  "z_surface",
10592  "t_field",
10593  "vmr_field",
10594  "cloudbox_on",
10595  "cloudbox_limits",
10596  "pnd_field",
10597  "scat_data",
10598  "mc_y_tx",
10599  "range_bins",
10600  "atmfields_checked",
10601  "atmgeom_checked",
10602  "scat_data_checked",
10603  "cloudbox_checked",
10604  "iy_unit",
10605  "mc_max_scatorder",
10606  "mc_seed",
10607  "mc_max_iter"),
10608  GIN("ze_tref", "k2", "t_interp_order"),
10609  GIN_TYPE("Numeric", "Numeric", "Index"),
10610  GIN_DEFAULT("273.15", "-1", "1"),
10611  GIN_DESC("Reference temperature for conversion to Ze.",
10612  "Reference dielectric factor.",
10613  "Interpolation order of temperature for scattering data (so"
10614  " far only applied in phase matrix, not in extinction and"
10615  " absorption.")));
10616 
10617  md_data_raw.push_back(
10618  create_mdrecord(NAME("MCSetSeedFromTime"),
10619  DESCRIPTION("Sets the value of mc_seed from system time\n"),
10620  AUTHORS("Cory Davis"),
10621  OUT("mc_seed"),
10622  GOUT(),
10623  GOUT_TYPE(),
10624  GOUT_DESC(),
10625  IN(),
10626  GIN(),
10627  GIN_TYPE(),
10628  GIN_DEFAULT(),
10629  GIN_DESC()));
10630 
10631  md_data_raw.push_back(create_mdrecord(
10632  NAME("nlte_fieldRescalePopulationLevels"),
10633  DESCRIPTION(
10634  "Rescale NLTE field to expected total distribution amongst levels\n"),
10635  AUTHORS("Richard Larsson"),
10636  OUT("nlte_field"),
10637  GOUT(),
10638  GOUT_TYPE(),
10639  GOUT_DESC(),
10640  IN("nlte_field"),
10641  GIN("s"),
10642  GIN_TYPE("Numeric"),
10643  GIN_DEFAULT(NODEF),
10644  GIN_DESC("Scaling (e.g., 0.75 for only orth-water on Earth)")));
10645 
10646  md_data_raw.push_back(create_mdrecord(
10647  NAME("nlte_fieldForSingleSpeciesNonOverlappingLines"),
10648  DESCRIPTION(
10649  "NLTE field for a simple setup.\n"
10650  "\n"
10651  "This will solve for *nlte_field* in the input atmosphere.\n"
10652  "The solver depends on the lines not overlapping and that there\n"
10653  "is only a single species in the atmosphere.\n"),
10654  AUTHORS("Richard Larsson"),
10655  OUT("nlte_field"),
10656  GOUT(),
10657  GOUT_TYPE(),
10658  GOUT_DESC(),
10659  IN("nlte_field",
10660  "abs_species",
10661  "abs_lines_per_species",
10662  "collision_coefficients",
10663  "collision_line_identifiers",
10664  "isotopologue_ratios",
10665  "iy_main_agenda",
10666  "ppath_agenda",
10667  "iy_space_agenda",
10668  "iy_surface_agenda",
10669  "iy_cloudbox_agenda",
10670  "propmat_clearsky_agenda",
10671  "water_p_eq_agenda",
10672  "vmr_field",
10673  "t_field",
10674  "z_field",
10675  "p_grid",
10676  "atmosphere_dim",
10677  "refellipsoid",
10678  "surface_props_data",
10679  "nlte_do"),
10680  GIN("df", "convergence_limit", "nz", "nf", "dampened", "iteration_limit"),
10681  GIN_TYPE("Numeric", "Numeric", "Index", "Index", "Index", "Index"),
10682  GIN_DEFAULT(NODEF, "1e-6", NODEF, NODEF, NODEF, "20"),
10683  GIN_DESC("relative frequency to line center",
10684  "max relative change in ratio of level to stop iterations",
10685  "number of zenith angles",
10686  "number of frequency grid-points per line",
10687  "use transmission dampening or not",
10688  "max number of iterations before defaul break of iterations")));
10689 
10690  md_data_raw.push_back(create_mdrecord(
10691  NAME("collision_coefficientsFromSplitFiles"),
10692  DESCRIPTION(
10693  "Reads *collision_coefficients* and *collision_line_identifiers* from location on filesystem\n"
10694  "with many species. The species in this location must match *abs_species*. The location\n"
10695  "must also contain an ArrayOfQuantumIdentifier file ending with qid.xml\n"),
10696  AUTHORS("Richard Larsson"),
10697  OUT("collision_coefficients", "collision_line_identifiers"),
10698  GOUT(),
10699  GOUT_TYPE(),
10700  GOUT_DESC(),
10701  IN("abs_species"),
10702  GIN("basename"),
10703  GIN_TYPE("String"),
10704  GIN_DEFAULT("./"),
10705  GIN_DESC("path to files to read")));
10706 
10707  md_data_raw.push_back(create_mdrecord(
10708  NAME("NumericAdd"),
10709  DESCRIPTION(
10710  "Adds a numeric and a value (out = in+value).\n"
10711  "\n"
10712  "The result can either be stored in the same or another numeric.\n"
10713  "(in and out can be the same varible, but not out and value)\n"),
10714  AUTHORS("Patrick Eriksson"),
10715  OUT(),
10716  GOUT("out"),
10717  GOUT_TYPE("Numeric"),
10718  GOUT_DESC("Output numeric."),
10719  IN(),
10720  GIN("in", "value"),
10721  GIN_TYPE("Numeric", "Numeric"),
10723  GIN_DESC("Input numeric.", "Value to add.")));
10724 
10725  md_data_raw.push_back(create_mdrecord(
10726  NAME("NumericFromVector"),
10727  DESCRIPTION(
10728  "Derivs a numeric from a vector, following selected operation.\n"
10729  "\n"
10730  "The following operations can be selected:\n"
10731  " first : Selects the first element of the vector.\n"
10732  " last : Selects the last element of the vector.\n"
10733  " max : Selects the maximum element of the vector.\n"
10734  " min : Selects the minimum element of the vector.\n"
10735  " mean : Calculates the mean of the vector.\n"),
10736  AUTHORS("Patrick Eriksson"),
10737  OUT(),
10738  GOUT("out"),
10739  GOUT_TYPE("Numeric"),
10740  GOUT_DESC("Output numeric."),
10741  IN(),
10742  GIN("in", "op"),
10743  GIN_TYPE("Vector", "String"),
10745  GIN_DESC("Input vector.", "Selected operation.")));
10746 
10747  md_data_raw.push_back(create_mdrecord(
10748  NAME("NumericInvScale"),
10749  DESCRIPTION(
10750  "Inversely scales/divides a numeric with a value (out = in/value).\n"
10751  "\n"
10752  "The result can either be stored in the same or another numeric.\n"
10753  "(in and out can be the same varible, but not out and value)\n"),
10754  AUTHORS("Jana Mendrok"),
10755  OUT(),
10756  GOUT("out"),
10757  GOUT_TYPE("Numeric"),
10758  GOUT_DESC("Output numeric."),
10759  IN(),
10760  GIN("in", "value"),
10761  GIN_TYPE("Numeric", "Numeric"),
10763  GIN_DESC("Input numeric.", "Scaling value.")));
10764 
10765  md_data_raw.push_back(create_mdrecord(
10766  NAME("NumericScale"),
10767  DESCRIPTION(
10768  "Scales/multiplies a numeric with a value (out = in*value).\n"
10769  "\n"
10770  "The result can either be stored in the same or another numeric.\n"
10771  "(in and out can be the same varible, but not out and value)\n"),
10772  AUTHORS("Patrick Eriksson"),
10773  OUT(),
10774  GOUT("out"),
10775  GOUT_TYPE("Numeric"),
10776  GOUT_DESC("Output numeric."),
10777  IN(),
10778  GIN("in", "value"),
10779  GIN_TYPE("Numeric", "Numeric"),
10781  GIN_DESC("Input numeric.", "Scaling value.")));
10782 
10783  md_data_raw.push_back(create_mdrecord(
10784  NAME("NumericSet"),
10785  DESCRIPTION("Sets a numeric workspace variable to the given value.\n"),
10786  AUTHORS("Patrick Eriksson"),
10787  OUT(),
10788  GOUT("out"),
10789  GOUT_TYPE("Numeric"),
10790  GOUT_DESC("Variable to initialize."),
10791  IN(),
10792  GIN("value"),
10793  GIN_TYPE("Numeric"),
10794  GIN_DEFAULT(NODEF),
10795  GIN_DESC("The value."),
10796  SETMETHOD(true)));
10797 
10798  md_data_raw.push_back(create_mdrecord(
10799  NAME("QuantumIdentifierSet"),
10800  DESCRIPTION(
10801  "Sets a QuantumIdentifier workspace variable to the given value\n"
10802  "by converting the input String\n"),
10803  AUTHORS("Richard Larsson"),
10804  OUT(),
10805  GOUT("out"),
10806  GOUT_TYPE("QuantumIdentifier"),
10807  GOUT_DESC("Variable to initialize."),
10808  IN(),
10809  GIN("string_initializer"),
10810  GIN_TYPE("String"),
10811  GIN_DEFAULT(NODEF),
10812  GIN_DESC("The string representing the value."),
10813  SETMETHOD(false)));
10814 
10815  md_data_raw.push_back(create_mdrecord(
10816  NAME("ArrayOfQuantumIdentifierSet"),
10817  DESCRIPTION(
10818  "Sets an ArrayOfQuantumIdentifier workspace variable to the given value\n"
10819  "by converting the input ArrayOfString\n"),
10820  AUTHORS("Richard Larsson"),
10821  OUT(),
10822  GOUT("out"),
10823  GOUT_TYPE("ArrayOfQuantumIdentifier"),
10824  GOUT_DESC("Variables to initialize."),
10825  IN(),
10826  GIN("string_initializers"),
10827  GIN_TYPE("ArrayOfString"),
10828  GIN_DEFAULT(NODEF),
10829  GIN_DESC("The array of string representing the values of the array."),
10830  SETMETHOD(false)));
10831 
10832  md_data_raw.push_back(create_mdrecord(
10833  NAME("nelemGet"),
10834  DESCRIPTION(
10835  "Retrieve nelem from given variable and store the value in the\n"
10836  "variable *nelem*.\n"),
10837  AUTHORS("Oliver Lemke"),
10838  OUT("nelem"),
10839  GOUT(),
10840  GOUT_TYPE(),
10841  GOUT_DESC(),
10842  IN(),
10843  GIN("v"),
10844  GIN_TYPE(ARRAY_GROUPS + ", Vector"),
10845  GIN_DEFAULT(NODEF),
10846  GIN_DESC("Variable to get the number of elements from."),
10847  SETMETHOD(false),
10848  AGENDAMETHOD(false),
10849  USES_TEMPLATES(true)));
10850 
10851  md_data_raw.push_back(create_mdrecord(
10852  NAME("ncolsGet"),
10853  DESCRIPTION(
10854  "Retrieve ncols from given variable and store the value in the\n"
10855  "workspace variable *ncols*\n"),
10856  AUTHORS("Oliver Lemke"),
10857  OUT("ncols"),
10858  GOUT(),
10859  GOUT_TYPE(),
10860  GOUT_DESC(),
10861  IN(),
10862  GIN("v"),
10863  GIN_TYPE("Matrix, Sparse, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7"),
10864  GIN_DEFAULT(NODEF),
10865  GIN_DESC("Variable to get the number of columns from."),
10866  SETMETHOD(false),
10867  AGENDAMETHOD(false),
10868  USES_TEMPLATES(true)));
10869 
10870  md_data_raw.push_back(create_mdrecord(
10871  NAME("nrowsGet"),
10872  DESCRIPTION(
10873  "Retrieve nrows from given variable and store the value in the\n"
10874  "workspace variable *nrows*\n"),
10875  AUTHORS("Oliver Lemke"),
10876  OUT("nrows"),
10877  GOUT(),
10878  GOUT_TYPE(),
10879  GOUT_DESC(),
10880  IN(),
10881  GIN("v"),
10882  GIN_TYPE("Matrix, Sparse, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7"),
10883  GIN_DEFAULT(NODEF),
10884  GIN_DESC("Variable to get the number of rows from."),
10885  SETMETHOD(false),
10886  AGENDAMETHOD(false),
10887  USES_TEMPLATES(true)));
10888 
10889  md_data_raw.push_back(create_mdrecord(
10890  NAME("npagesGet"),
10891  DESCRIPTION(
10892  "Retrieve npages from given variable and store the value in the\n"
10893  "workspace variable *npages*\n"),
10894  AUTHORS("Oliver Lemke"),
10895  OUT("npages"),
10896  GOUT(),
10897  GOUT_TYPE(),
10898  GOUT_DESC(),
10899  IN(),
10900  GIN("v"),
10901  GIN_TYPE("Tensor3, Tensor4, Tensor5, Tensor6, Tensor7"),
10902  GIN_DEFAULT(NODEF),
10903  GIN_DESC("Variable to get the number of pages from."),
10904  SETMETHOD(false),
10905  AGENDAMETHOD(false),
10906  USES_TEMPLATES(true)));
10907 
10908  md_data_raw.push_back(create_mdrecord(
10909  NAME("nbooksGet"),
10910  DESCRIPTION(
10911  "Retrieve nbooks from given variable and store the value in the\n"
10912  "workspace variable *nbooks*\n"),
10913  AUTHORS("Oliver Lemke"),
10914  OUT("nbooks"),
10915  GOUT(),
10916  GOUT_TYPE(),
10917  GOUT_DESC(),
10918  IN(),
10919  GIN("v"),
10920  GIN_TYPE("Tensor4, Tensor5, Tensor6, Tensor7"),
10921  GIN_DEFAULT(NODEF),
10922  GIN_DESC("Variable to get the number of books from."),
10923  SETMETHOD(false),
10924  AGENDAMETHOD(false),
10925  USES_TEMPLATES(true)));
10926 
10927  md_data_raw.push_back(create_mdrecord(
10928  NAME("nshelvesGet"),
10929  DESCRIPTION(
10930  "Retrieve nshelves from given variable and store the value in the\n"
10931  "workspace variable *nshelves*\n"),
10932  AUTHORS("Oliver Lemke"),
10933  OUT("nshelves"),
10934  GOUT(),
10935  GOUT_TYPE(),
10936  GOUT_DESC(),
10937  IN(),
10938  GIN("v"),
10939  GIN_TYPE("Tensor5, Tensor6, Tensor7"),
10940  GIN_DEFAULT(NODEF),
10941  GIN_DESC("Variable to get the number of shelves from."),
10942  SETMETHOD(false),
10943  AGENDAMETHOD(false),
10944  USES_TEMPLATES(true)));
10945 
10946  md_data_raw.push_back(create_mdrecord(
10947  NAME("nvitrinesGet"),
10948  DESCRIPTION(
10949  "Retrieve nvitrines from given variable and store the value in the\n"
10950  "workspace variable *nvitrines*\n"),
10951  AUTHORS("Oliver Lemke"),
10952  OUT("nvitrines"),
10953  GOUT(),
10954  GOUT_TYPE(),
10955  GOUT_DESC(),
10956  IN(),
10957  GIN("v"),
10958  GIN_TYPE("Tensor6, Tensor7"),
10959  GIN_DEFAULT(NODEF),
10960  GIN_DESC("Variable to get the number of vitrines from."),
10961  SETMETHOD(false),
10962  AGENDAMETHOD(false),
10963  USES_TEMPLATES(true)));
10964 
10965  md_data_raw.push_back(create_mdrecord(
10966  NAME("nlibrariesGet"),
10967  DESCRIPTION(
10968  "Retrieve nlibraries from given variable and store the value in the\n"
10969  "workspace variable *nlibraries*\n"),
10970  AUTHORS("Oliver Lemke"),
10971  OUT("nlibraries"),
10972  GOUT(),
10973  GOUT_TYPE(),
10974  GOUT_DESC(),
10975  IN(),
10976  GIN("v"),
10977  GIN_TYPE("Tensor7"),
10978  GIN_DEFAULT(NODEF),
10979  GIN_DESC("Variable to get the number of libraries from."),
10980  SETMETHOD(false),
10981  AGENDAMETHOD(false),
10982  USES_TEMPLATES(true)));
10983 
10984  md_data_raw.push_back(create_mdrecord(
10985  NAME("nlte_sourceFromTemperatureAndSrcCoefPerSpecies"),
10986  DESCRIPTION(
10987  "Turn NLTE absorption per species into the source function by multiplying\n"
10988  "NLTE absorption per species with the LTE Planck source function.\n"),
10989  AUTHORS("Richard Larsson"),
10990  OUT("nlte_source", "dnlte_dx_source", "nlte_dsource_dx"),
10991  GOUT(),
10992  GOUT_TYPE(),
10993  GOUT_DESC(),
10994  IN("src_coef_per_species",
10995  "dsrc_coef_dx",
10996  "jacobian_quantities",
10997  "f_grid",
10998  "rtp_temperature"),
10999  GIN(),
11000  GIN_TYPE(),
11001  GIN_DEFAULT(),
11002  GIN_DESC()));
11003 
11004  md_data_raw.push_back(
11005  create_mdrecord(NAME("nlteOff"),
11006  DESCRIPTION("Disable Non-LTE calculations.\n"
11007  "\n"
11008  "The variables are set as follows:\n"
11009  " nlte_field : Empty.\n"
11010  " nlte_level_identifiers : Empty.\n"),
11011  AUTHORS("Oliver Lemke"),
11012  OUT("nlte_do", "nlte_field", "nlte_level_identifiers"),
11013  GOUT(),
11014  GOUT_TYPE(),
11015  GOUT_DESC(),
11016  IN(),
11017  GIN(),
11018  GIN_TYPE(),
11019  GIN_DEFAULT(),
11020  GIN_DESC()));
11021 
11022  md_data_raw.push_back(create_mdrecord(
11023  NAME("nlteSetByQuantumIdentifiers"),
11024  DESCRIPTION(
11025  "Turns on NTLE calculations.\n"
11026  "\n"
11027  "Takes the quantum identifers for NLTE temperatures and matches it to\n"
11028  "lines in *abs_lines_per_species*. *abs_species* must be set and is used\n"
11029  "to speed up calculations. After the function is done, all affected\n"
11030  "lines in *abs_lines_per_species* will have an internal tag to the relevant\n"
11031  "quantum identifier, which is a requirement for deeper code.\n"
11032  "\n"
11033  "If vibrational_energies is input it must match *nlte_level_identifiers*\n"
11034  "in length. The vibrational energies of the affected lines will then be\n"
11035  "set by the function. Otherwise, it is assumed the vibrational energies\n"
11036  "are set by another method. If they are not set, calculations will complain\n"
11037  "later on while running deeper code.\n"
11038  "\n"
11039  "For now only vibrational energy states are assumed to be able to be in\n"
11040  "non-LTE conditions. The *QuantumIdentifier* for an energy state in ARTS\n"
11041  "can look like:\n"
11042  "\t\"CO2-626 EN v1 0/1 v2 1/1 l2 1/1 v3 0/1 r 1/1\"\n"
11043  "and the matching will match ALL lines with the above. Note then that if, e.g.,\n"
11044  "the \"v1 0/1\" term was removed from the above, then ARTS will assume that\n"
11045  "\"v1\" is not part of the level of energy state of interest, so lines\n"
11046  "of different \"v1\" will be matched as the same state. If a line is matched\n"
11047  "to more than one energy state, errors should be thrown, but be careful.\n"
11048  "\n"
11049  "Set type of population to change computations and expected input as:\n"
11050  "\tLTE: Compute population by ratios found from LTE temperatures\n"
11051  "\tTV: Compute population by ratios found from NLTE vibrational temperatures\n"
11052  "\tND: Compute population by ratios found from NLTE number densities\n"),
11053  AUTHORS("Richard Larsson"),
11054  OUT("nlte_do", "abs_lines_per_species"),
11055  GOUT(),
11056  GOUT_TYPE(),
11057  GOUT_DESC(),
11058  IN("abs_lines_per_species", "nlte_field"),
11059  GIN(),
11060  GIN_TYPE(),
11061  GIN_DEFAULT(),
11062  GIN_DESC()));
11063 
11064  md_data_raw.push_back(create_mdrecord(
11065  NAME("nlte_fieldFromRaw"),
11066  DESCRIPTION("Sets NLTE values manually\n"
11067  "\n"
11068  "Touch\n"),
11069  AUTHORS("Richard Larsson"),
11070  OUT("nlte_field"),
11071  GOUT(),
11072  GOUT_TYPE(),
11073  GOUT_DESC(),
11074  IN("nlte_level_identifiers",
11075  "nlte_vibrational_energies"),
11076  GIN("data"),
11077  GIN_TYPE("Tensor4"),
11078  GIN_DEFAULT(NODEF),
11079  GIN_DESC("Vibrational data [nlevels, np, nlat, nlon]")));
11080 
11081  md_data_raw.push_back(create_mdrecord(
11082  NAME("nlte_fieldSetLteExternalPartitionFunction"),
11083  DESCRIPTION("Turns on NTLE calculations.\n"
11084  "\n"
11085  "Sets NLTE ratios to those expected for LTE calculations\n"
11086  "with a known partition function\n"),
11087  AUTHORS("Richard Larsson"),
11088  OUT("nlte_do", "nlte_field", "abs_lines_per_species"),
11089  GOUT(),
11090  GOUT_TYPE(),
11091  GOUT_DESC(),
11092  IN("abs_lines_per_species",
11093  "nlte_level_identifiers",
11094  "partition_functions",
11095  "t_field"),
11096  GIN(),
11097  GIN_TYPE(),
11098  GIN_DEFAULT(),
11099  GIN_DESC()));
11100 
11101  md_data_raw.push_back(create_mdrecord(
11102  NAME("ArrayOfQuantumIdentifierFromLines"),
11103  DESCRIPTION(
11104  "Sets an ArrayOfQuantumIdentifier to all levels in *abs_lines_per_species*\n"
11105  "with defined quantum numbers\n"
11106  "\n"
11107  "Lines without defined quantum numbers are ignored\n"),
11108  AUTHORS("Richard Larsson"),
11109  OUT(),
11110  GOUT("out"),
11111  GOUT_TYPE("ArrayOfQuantumIdentifier"),
11112  GOUT_DESC("Identifiers to all levels in *abs_lines_per_species*"),
11113  IN("abs_lines_per_species"),
11114  GIN("global"),
11115  GIN_TYPE("Index"),
11116  GIN_DEFAULT("1"),
11117  GIN_DESC("Only look at global quantum numbers")));
11118 
11119  md_data_raw.push_back(create_mdrecord(
11120  NAME("nlte_fieldSetLteInternalPartitionFunction"),
11121  DESCRIPTION(
11122  "Turns on NTLE calculations.\n"
11123  "\n"
11124  "Sets NLTE ratios to those expected for LTE calculations\n"
11125  "with estimation of the partition function as the sum of all\n"
11126  "states of a species\n"),
11127  AUTHORS("Richard Larsson"),
11128  OUT("nlte_do", "nlte_field", "abs_lines_per_species"),
11129  GOUT(),
11130  GOUT_TYPE(),
11131  GOUT_DESC(),
11132  IN("abs_lines_per_species", "nlte_level_identifiers", "t_field"),
11133  GIN(),
11134  GIN_TYPE(),
11135  GIN_DEFAULT(),
11136  GIN_DESC()));
11137 
11138  md_data_raw.push_back(create_mdrecord(
11139  NAME("timeNow"),
11140  DESCRIPTION("Sets time to system_clock::now().\n"),
11141  AUTHORS("Richard Larsson"),
11142  OUT("time"),
11143  GOUT(),
11144  GOUT_TYPE(),
11145  GOUT_DESC(),
11146  IN(),
11147  GIN(),
11148  GIN_TYPE(),
11149  GIN_DEFAULT(),
11150  GIN_DESC()));
11151 
11152  md_data_raw.push_back(create_mdrecord(
11153  NAME("timeOffset"),
11154  DESCRIPTION("Offsets time for some seconds\n"),
11155  AUTHORS("Richard Larsson"),
11156  OUT("time"),
11157  GOUT(),
11158  GOUT_TYPE(),
11159  GOUT_DESC(),
11160  IN("time"),
11161  GIN("offset"),
11162  GIN_TYPE("Numeric"),
11163  GIN_DEFAULT(NODEF),
11164  GIN_DESC("Time in seconds")));
11165 
11166  md_data_raw.push_back(create_mdrecord(
11167  NAME("OEM"),
11168  DESCRIPTION(
11169  "Inversion by the so called optimal estimation method (OEM).\n"
11170  "\n"
11171  "Work in progress ...\n"
11172  "\n"
11173  "The cost function to minimise, including a normalisation with length"
11174  "of *y*, is:\n"
11175  " cost = cost_y + cost_x\n"
11176  "where\n"
11177  " cost_y = 1/m * [y-yf]' * covmat_se_inv * [y-yf]\n"
11178  " cost_x = 1/m * [x-xa]' * covmat_sx_inv * [x-xa]\n"
11179  "\n"
11180  " The current implementation provides 3 methods for the minimization of\n"
11181  "the cost functional: Linear, Gauss-Newton and Levenberg-Marquardt.\n"
11182  "The Gauss-Newton minimizer attempts to find a minimum solution by \n"
11183  "fitting a quadratic function to the cost functional. The linear minimizer\n"
11184  "is a special case of the Gauss-Newton method, since for a linear forward\n"
11185  "model the exact solution of the minimization problem is obtained after\n"
11186  "the first step. The Levenberg-Marquardt method adaptively constrains the\n"
11187  "search region for the next iteration step by means of the so-called gamma-factor.\n"
11188  "This makes the method more suitable for strongly non-linear problems.\n"
11189  "If the gamma-factor is 0, Levenberg-Marquardt and Gauss-Newton method\n"
11190  "are identical. Each minimization method (li,gn,lm) has an indirect\n"
11191  "variant (li_cg,gn_cg,lm_cg), which uses the conjugate gradient solver\n"
11192  "for the linear system that has to be solved in each minimzation step.\n"
11193  "This of advantage for very large problems, that would otherwise require\n"
11194  "the computation of expensive matrix products.\n"
11195  "\n"
11196  "Description of the special input arguments:\n"
11197  "\n"
11198  "*method*\n"
11199  " \"li\": A linear problem is assumed and a single iteration is performed.\n"
11200  " \"li_cg\": A linear problem is assumed and solved using the CG solver.\n"
11201  " \"gn\": Non-linear, with Gauss-Newton iteration scheme.\n"
11202  " \"gn_cg\": Non-linear, with Gauss-Newton and conjugate gradient solver.\n"
11203  " \"lm\": Non-linear, with Levenberg-Marquardt (LM) iteration scheme.\n"
11204  " \"lm_cg\": Non-linear, with Levenberg-Marquardt (LM) iteration scheme and conjugate gradient solver.\n"
11205  "*max_start_cost*\n"
11206  " No inversion is done if the cost matching the a priori state is above\n"
11207  " this value. If set to a negative value, all values are accepted.\n"
11208  " This argument also controls if the start cost is calculated. If\n"
11209  " set to <= 0, the start cost in *oem_diagnostics* is set to NaN\n"
11210  " when using \"li\" and \"gn\".\n"
11211  "*x_norm*\n"
11212  " A normalisation vector for *x*. A normalisation of *x* can be needed\n"
11213  " due to limited numerical precision. If this vector is set to be empty\n"
11214  " no normalisation is done (defualt case). Otherwise, this must be a\n"
11215  " vector with same length as *x*, just having values above zero.\n"
11216  " Elementwise division between *x* and *x_norm* (x./x_norm) shall give\n"
11217  " a vector where all values are in the order of unity. Maybe the best\n"
11218  " way to set *x_norm* is x_norm = sqrt( diag( Sx ) ).\n"
11219  "*max_iter*\n"
11220  " Maximum number of iterations to perform. No effect for \"li\".\n"
11221  "*stop_dx*\n"
11222  " Iteration stop criterion. The criterion used is the same as given\n"
11223  " in Rodgers\' \"Inverse Methods for Atmospheric Sounding\"\n"
11224  "*lm_ga_settings*\n"
11225  " Settings controlling the gamma factor, part of the \"LM\" method.\n"
11226  " This is a vector of length 6, having the elements (0-based index):\n"
11227  " 0: Start value.\n"
11228  " 1: Fractional decrease after succesfull iteration.\n"
11229  " 2: Fractional increase after unsuccessful iteration.\n"
11230  " 3: Maximum allowed value. If the value is passed, the inversion\n"
11231  " is halted.\n"
11232  " 4: Lower treshold. If the threshold is passed, gamma is set to zero.\n"
11233  " If gamma must be increased from zero, gamma is set to this value.\n"
11234  " 5: Gamma limit. This is an additional stop criterion. Convergence\n"
11235  " is not considered until there has been one succesful iteration\n"
11236  " having a gamma <= this value.\n"
11237  " The default setting triggers an error if \"lm\" is selected.\n"
11238  "*clear matrices*\n"
11239  " With this flag set to 1, *jacobian* and *dxdy* are returned as empty\n"
11240  " matrices.\n"
11241  "*display_progress*\n"
11242  " Controls if there is any screen output. The overall report level\n"
11243  " is ignored by this WSM.\n"),
11244  AUTHORS("Patrick Eriksson"),
11245  OUT("x",
11246  "yf",
11247  "jacobian",
11248  "dxdy",
11249  "oem_diagnostics",
11250  "lm_ga_history",
11251  "oem_errors"),
11252  GOUT(),
11253  GOUT_TYPE(),
11254  GOUT_DESC(),
11255  IN("xa",
11256  "x",
11257  "covmat_sx",
11258  "yf",
11259  "y",
11260  "covmat_se",
11261  "jacobian",
11262  "jacobian_quantities",
11263  "inversion_iterate_agenda"),
11264  GIN("method",
11265  "max_start_cost",
11266  "x_norm",
11267  "max_iter",
11268  "stop_dx",
11269  "lm_ga_settings",
11270  "clear_matrices",
11271  "display_progress"),
11272  GIN_TYPE("String",
11273  "Numeric",
11274  "Vector",
11275  "Index",
11276  "Numeric",
11277  "Vector",
11278  "Index",
11279  "Index"),
11280  GIN_DEFAULT(NODEF, "Inf", "[]", "10", "0.01", "[]", "0", "0"),
11281  GIN_DESC("Iteration method. For this and all options below, see "
11282  "further above.",
11283  "Maximum allowed value of cost function at start.",
11284  "Normalisation of Sx.",
11285  "Maximum number of iterations.",
11286  "Stop criterion for iterative inversions.",
11287  "Settings associated with the ga factor of the LM method.",
11288  "An option to save memory.",
11289  "Flag to control if inversion diagnostics shall be printed "
11290  "on the screen.")));
11291 
11292  md_data_raw.push_back(create_mdrecord(
11293  NAME("avkCalc"),
11294  DESCRIPTION(
11295  "Calculates the averaging kernel matrix describing the sensitivity of the\n"
11296  "OEM retrieval with respect to the true state of the system. A prerequisite\n"
11297  "for the calculation of the averaging kernel matrix is a successful OEM\n"
11298  "calculation in which the jacobian and the gain matrix dxdy have been calculated.\n"),
11299  AUTHORS("Simon Pfreundschuh"),
11300  OUT("avk"),
11301  GOUT(),
11302  GOUT_TYPE(),
11303  GOUT_DESC(),
11304  IN("dxdy", "jacobian"),
11305  GIN(),
11306  GIN_TYPE(),
11307  GIN_DEFAULT(),
11308  GIN_DESC()));
11309 
11310  md_data_raw.push_back(create_mdrecord(
11311  NAME("covmat_soCalc"),
11312  DESCRIPTION(
11313  "Calculates the covariance matrix describing the error due to uncertainties\n"
11314  "in the observation system. The uncertainties of the observation system are\n"
11315  "described by *covmat_se*, which must be set by the user to include the\n"
11316  "relevant contributions from the measurement and the forward model.\n"
11317  "\n"
11318  "Prerequisite for the calculation of *covmat_so* is a successful OEM\n"
11319  "computation where also the gain matrix has been computed.\n"),
11320  AUTHORS("Simon Pfreundschuh"),
11321  OUT("covmat_so"),
11322  GOUT(),
11323  GOUT_TYPE(),
11324  GOUT_DESC(),
11325  IN("dxdy", "covmat_se"),
11326  GIN(),
11327  GIN_TYPE(),
11328  GIN_DEFAULT(),
11329  GIN_DESC()));
11330 
11331  md_data_raw.push_back(create_mdrecord(
11332  NAME("covmat_ssCalc"),
11333  DESCRIPTION(
11334  "Calculates the covariance matrix describing the error due to smoothing.\n"
11335  ""
11336  "The calculation of *covmat_ss* also requires the averaging kernel matrix *avk*\n"
11337  "to be computed after a successful OEM calculation.\n"),
11338  AUTHORS("Simon Pfreundschuh"),
11339  OUT("covmat_ss"),
11340  GOUT(),
11341  GOUT_TYPE(),
11342  GOUT_DESC(),
11343  IN("avk", "covmat_sx"),
11344  GIN(),
11345  GIN_TYPE(),
11346  GIN_DEFAULT(),
11347  GIN_DESC()));
11348 
11349  md_data_raw.push_back(create_mdrecord(
11350  NAME("opt_prop_bulkCalc"),
11351  DESCRIPTION(
11352  "Calculates bulk absorption extinction at one atmospheric grid point.\n"
11353  "\n"
11354  "This WSM sums up the monochromatic absorption vectors and\n"
11355  "extinction matrices of all scattering elements (*abs_vec_spt* and\n"
11356  "*ext_mat_spt*, respectively) weighted by their respective\n"
11357  "particle number density given by *pnd_field*, for a single location\n"
11358  "within the cloudbox, given by *scat_p_index*, *scat_lat_index*, and\n"
11359  "*scat_lon_index*.\n"
11360  "The resulting extinction matrix is added to the workspace variable\n"
11361  "*ext_mat*.\n"),
11362  AUTHORS("Jana Mendrok, Sreerekha T.R."),
11363  OUT("ext_mat", "abs_vec"),
11364  GOUT(),
11365  GOUT_TYPE(),
11366  GOUT_DESC(),
11367  IN("ext_mat",
11368  "abs_vec",
11369  "ext_mat_spt",
11370  "abs_vec_spt",
11371  "pnd_field",
11372  "scat_p_index",
11373  "scat_lat_index",
11374  "scat_lon_index"),
11375  GIN(),
11376  GIN_TYPE(),
11377  GIN_DEFAULT(),
11378  GIN_DESC()));
11379 
11380  md_data_raw.push_back(create_mdrecord(
11381  NAME("opt_prop_sptFromData"),
11382  DESCRIPTION(
11383  "Calculates monochromatic optical properties for all scattering\n"
11384  "elements.\n"
11385  "\n"
11386  "In this function the extinction matrix and the absorption vector\n"
11387  "are calculated in the laboratory frame. An interpolation of the\n"
11388  "data on the actual frequency is the first step in this function.\n"
11389  "The next step is a transformation from the database coordinate\n"
11390  "system to the laboratory coordinate system.\n"
11391  "\n"
11392  "Output of the function are *ext_mat_spt* and *abs_vec_spt*, which\n"
11393  "hold the optical properties for a specified propagation direction\n"
11394  "for each scattering element.\n"),
11395  AUTHORS("Claudia Emde"),
11396  OUT("ext_mat_spt", "abs_vec_spt"),
11397  GOUT(),
11398  GOUT_TYPE(),
11399  GOUT_DESC(),
11400  IN("ext_mat_spt",
11401  "abs_vec_spt",
11402  "scat_data",
11403  "za_grid",
11404  "aa_grid",
11405  "za_index",
11406  "aa_index",
11407  "f_index",
11408  "f_grid",
11409  "rtp_temperature",
11410  "pnd_field",
11411  "scat_p_index",
11412  "scat_lat_index",
11413  "scat_lon_index"),
11414  GIN(),
11415  GIN_TYPE(),
11416  GIN_DEFAULT(),
11417  GIN_DESC()));
11418 
11419  md_data_raw.push_back(create_mdrecord(
11420  NAME("opt_prop_sptFromScat_data"),
11421  DESCRIPTION(
11422  "Derives monochromatic optical properties for all scattering\n"
11423  "elements.\n"
11424  "\n"
11425  "As *opt_prop_sptFromData*, but using frequency pre-interpolated\n"
11426  "data (as produced by *scat_dataCalc*), i.e. in here no frequency\n"
11427  "interpolation is done anymore.\n"),
11428  AUTHORS("Jana Mendrok, Claudia Emde"),
11429  OUT("ext_mat_spt", "abs_vec_spt"),
11430  GOUT(),
11431  GOUT_TYPE(),
11432  GOUT_DESC(),
11433  IN("ext_mat_spt",
11434  "abs_vec_spt",
11435  "scat_data",
11436  "scat_data_checked",
11437  "za_grid",
11438  "aa_grid",
11439  "za_index",
11440  "aa_index",
11441  "f_index",
11442  "rtp_temperature",
11443  "pnd_field",
11444  "scat_p_index",
11445  "scat_lat_index",
11446  "scat_lon_index"),
11447  GIN(),
11448  GIN_TYPE(),
11449  GIN_DEFAULT(),
11450  GIN_DESC()));
11451 
11452  md_data_raw.push_back(create_mdrecord(
11453  NAME("opt_prop_sptFromMonoData"),
11454  DESCRIPTION(
11455  "Calculates optical properties for the scattering elements.\n"
11456  "\n"
11457  "As *opt_prop_sptFromData* but no frequency interpolation is\n"
11458  "performed. The single scattering data is here obtained from\n"
11459  "*scat_data_mono*, instead of *scat_data*.\n"),
11460  AUTHORS("Cory Davis"),
11461  OUT("ext_mat_spt", "abs_vec_spt"),
11462  GOUT(),
11463  GOUT_TYPE(),
11464  GOUT_DESC(),
11465  IN("ext_mat_spt",
11466  "abs_vec_spt",
11467  "scat_data_mono",
11468  "za_grid",
11469  "aa_grid",
11470  "za_index",
11471  "aa_index",
11472  "rtp_temperature",
11473  "pnd_field",
11474  "scat_p_index",
11475  "scat_lat_index",
11476  "scat_lon_index"),
11477  GIN(),
11478  GIN_TYPE(),
11479  GIN_DEFAULT(),
11480  GIN_DESC()));
11481 
11482  md_data_raw.push_back(
11483  create_mdrecord(NAME("output_file_formatSetAscii"),
11484  DESCRIPTION("Sets the output file format to ASCII.\n"),
11485  AUTHORS("Oliver Lemke"),
11486  OUT("output_file_format"),
11487  GOUT(),
11488  GOUT_TYPE(),
11489  GOUT_DESC(),
11490  IN(),
11491  GIN(),
11492  GIN_TYPE(),
11493  GIN_DEFAULT(),
11494  GIN_DESC()));
11495 
11496  md_data_raw.push_back(
11497  create_mdrecord(NAME("output_file_formatSetBinary"),
11498  DESCRIPTION("Sets the output file format to binary.\n"),
11499  AUTHORS("Oliver Lemke"),
11500  OUT("output_file_format"),
11501  GOUT(),
11502  GOUT_TYPE(),
11503  GOUT_DESC(),
11504  IN(),
11505  GIN(),
11506  GIN_TYPE(),
11507  GIN_DEFAULT(),
11508  GIN_DESC()));
11509 
11510  md_data_raw.push_back(
11511  create_mdrecord(NAME("output_file_formatSetZippedAscii"),
11512  DESCRIPTION("Sets the output file format to zipped ASCII.\n"),
11513  AUTHORS("Oliver Lemke"),
11514  OUT("output_file_format"),
11515  GOUT(),
11516  GOUT_TYPE(),
11517  GOUT_DESC(),
11518  IN(),
11519  GIN(),
11520  GIN_TYPE(),
11521  GIN_DEFAULT(),
11522  GIN_DESC()));
11523 
11524  md_data_raw.push_back(create_mdrecord(
11525  NAME("particle_bulkprop_fieldClip"),
11526  DESCRIPTION(
11527  "Clipping of *particle_bulkprop_field*.\n"
11528  "\n"
11529  "The method allows you to apply hard limits the values of\n"
11530  "*particle_bulkprop_field*. All values, of the property selected,\n"
11531  "below *limit_low*, are simply set to *limit_low*. And the same\n"
11532  "is performed with respect to *limit_high*. That is, the data in x\n"
11533  "for the retrieval quantity are forced to be inside the range\n"
11534  "[limit_low,limit_high].\n"
11535  "\n"
11536  "Setting species=\"ALL\", is a shortcut for applying the limits on all\n"
11537  "properties.\n"),
11538  AUTHORS("Patrick Eriksson"),
11539  OUT("particle_bulkprop_field"),
11540  GOUT(),
11541  GOUT_TYPE(),
11542  GOUT_DESC(),
11543  IN("particle_bulkprop_field", "particle_bulkprop_names"),
11544  GIN("bulkprop_name", "limit_low", "limit_high"),
11545  GIN_TYPE("String", "Numeric", "Numeric"),
11546  GIN_DEFAULT(NODEF, "-Inf", "Inf"),
11547  GIN_DESC("Name of bulk property to consider, or \"ALL\".",
11548  "Lower limit for clipping.",
11549  "Upper limit for clipping.")));
11550 
11551  md_data_raw.push_back(create_mdrecord(
11552  NAME("particle_bulkprop_fieldPerturb"),
11553  DESCRIPTION(
11554  "Adds a perturbation to *particle_bulkprop_field*.\n"
11555  "\n"
11556  "Works as *AtmFieldPerturb* but acts on *particle_bulkprop_field*.\n"),
11557  AUTHORS("Patrick Eriksson"),
11558  OUT("particle_bulkprop_field"),
11559  GOUT(),
11560  GOUT_TYPE(),
11561  GOUT_DESC(),
11562  IN("particle_bulkprop_field",
11563  "atmosphere_dim",
11564  "p_grid",
11565  "lat_grid",
11566  "lon_grid",
11567  "particle_bulkprop_names"),
11568  GIN("particle_type",
11569  "p_ret_grid",
11570  "lat_ret_grid",
11571  "lon_ret_grid",
11572  "pert_index",
11573  "pert_size",
11574  "pert_mode"),
11575  GIN_TYPE(
11576  "String", "Vector", "Vector", "Vector", "Index", "Numeric", "String"),
11577  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
11578  GIN_DESC("Name of field to perturb, such as "
11579  "IWC"
11580  ".",
11581  "Pressure retrieval grid.",
11582  "Latitude retrieval grid.",
11583  "Longitude retrieval grid.",
11584  "Index of position where the perturbation shall be performed.",
11585  "Size of perturbation.",
11586  "Type of perturbation, "
11587  "ansolute"
11588  " or "
11589  "relative"
11590  ".")));
11591 
11592  md_data_raw.push_back(create_mdrecord(
11593  NAME("particle_bulkprop_fieldPerturbAtmGrids"),
11594  DESCRIPTION(
11595  "Adds a perturbation to *particle_bulkprop_field*.\n"
11596  "\n"
11597  "Works as *AtmFieldPerturbAtmGrids* but acts on *particle_bulkprop_field*.\n"),
11598  AUTHORS("Patrick Eriksson"),
11599  OUT("particle_bulkprop_field"),
11600  GOUT(),
11601  GOUT_TYPE(),
11602  GOUT_DESC(),
11603  IN("particle_bulkprop_field",
11604  "atmosphere_dim",
11605  "p_grid",
11606  "lat_grid",
11607  "lon_grid",
11608  "particle_bulkprop_names"),
11609  GIN("particle_type", "pert_index", "pert_size", "pert_mode"),
11610  GIN_TYPE("String", "Index", "Numeric", "String"),
11611  GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
11612  GIN_DESC("Name of field to perturb, such as "
11613  "IWC"
11614  ".",
11615  "Index of position where the perturbation shall be performed.",
11616  "Size of perturbation.",
11617  "Type of perturbation, "
11618  "ansolute"
11619  " or "
11620  "relative"
11621  ".")));
11622 
11623  md_data_raw.push_back(create_mdrecord(
11624  NAME("particle_massesFromMetaDataSingleCategory"),
11625  DESCRIPTION(
11626  "Sets *particle_masses* based on *scat_meta* assuming\n"
11627  "all particles are of the same mass category.\n"
11628  "\n"
11629  "This method derives the particle masses from the mass entry\n"
11630  "of each scattering element. It is assumed that all scattering\n"
11631  "elements represent particles of the same (bulk) matter\n"
11632  "(e.g. water or ice). With other words, a single mass category\n"
11633  "is assumed (see *particle_masses* for a definition of \"mass\n"
11634  "category\").\n"
11635  "\n"
11636  "To be clear, the above are assumptions of the method, the user\n"
11637  "is free to work with any scattering element. For Earth and just having\n"
11638  "cloud and particles, the resulting mass category can be seen as\n"
11639  "the total cloud water content, with possible contribution from\n"
11640  "both ice and liquid phase.\n"),
11641  AUTHORS("Jana Mendrok", "Patrick Eriksson"),
11642  OUT("particle_masses"),
11643  GOUT(),
11644  GOUT_TYPE(),
11645  GOUT_DESC(),
11646  IN("scat_meta"),
11647  GIN(),
11648  GIN_TYPE(),
11649  GIN_DEFAULT(),
11650  GIN_DESC()));
11651 
11652  md_data_raw.push_back(create_mdrecord(
11653  NAME("particle_massesFromMetaData"),
11654  DESCRIPTION(
11655  "Derives *particle_masses* from *scat_meta*.\n"
11656  "\n"
11657  "This method is supposed to be used to derive *particle_masses*\n"
11658  "when *pnd_field* is internally calculated using\n"
11659  "*pnd_fieldCalcFromParticleBulkProps* (in contrast to reading it\n"
11660  "from external sources using *ScatElementsPndAndScatAdd* and\n"
11661  "*pnd_fieldCalcFrompnd_field_raw*).\n"
11662  "It extracts the mass information of the scattering elements from\n"
11663  "*scat_meta*. Each scattering species is taken as a separate\n"
11664  "category of particle_masses, i.e., the resulting\n"
11665  "*particle_masses* matrix will contain as many columns as\n"
11666  "scattering species are present in *scat_meta*.\n"),
11667  AUTHORS("Jana Mendrok"),
11668  OUT("particle_masses"),
11669  GOUT(),
11670  GOUT_TYPE(),
11671  GOUT_DESC(),
11672  IN("scat_meta"),
11673  GIN(),
11674  GIN_TYPE(),
11675  GIN_DEFAULT(),
11676  GIN_DESC()));
11677 
11678  md_data_raw.push_back(create_mdrecord(
11679  NAME("partition_functionsInitFromBuiltin"),
11680  DESCRIPTION(
11681  "Initialize partition functions with default values from built-in\n"
11682  "species data.\n"),
11683  AUTHORS("Oliver Lemke"),
11684  OUT("partition_functions"),
11685  GOUT(),
11686  GOUT_TYPE(),
11687  GOUT_DESC(),
11688  IN(),
11689  GIN(),
11690  GIN_TYPE(),
11691  GIN_DEFAULT(),
11692  GIN_DESC()));
11693 
11694  md_data_raw.push_back(create_mdrecord(
11695  NAME("pha_matCalc"),
11696  DESCRIPTION(
11697  "Calculates the total phase matrix of all scattering elements.\n"
11698  "\n"
11699  "This function sums up the monochromatic phase matrices of all\n"
11700  "scattering elements *pha_mat_spt* weighted with their respective\n"
11701  "particle number density, given by *pnd_field*, for a single location\n"
11702  "within the cloudbox, given by *scat_p_index*, *scat_lat_index*, and\n"
11703  "*scat_lon_index*.\n"),
11704  AUTHORS("Sreerekha T.R."),
11705  OUT("pha_mat"),
11706  GOUT(),
11707  GOUT_TYPE(),
11708  GOUT_DESC(),
11709  IN("pha_mat_spt",
11710  "pnd_field",
11711  "atmosphere_dim",
11712  "scat_p_index",
11713  "scat_lat_index",
11714  "scat_lon_index"),
11715  GIN(),
11716  GIN_TYPE(),
11717  GIN_DEFAULT(),
11718  GIN_DESC()));
11719 
11720  md_data_raw.push_back(create_mdrecord(
11721  NAME("pha_mat_sptFromData"),
11722  DESCRIPTION(
11723  "Calculation of the phase matrix of the individual scattering elements.\n"
11724  "\n"
11725  "This function can be used in *pha_mat_spt_agenda* as part of\n"
11726  "the calculation of the scattering integral.\n"
11727  "\n"
11728  "First, data at the requested frequency (given by *f_grid* and\n"
11729  "*f_index*) and temperature (given by *rtp_temperature*) is\n"
11730  "extracted. This is followed by a transformation from the database\n"
11731  "coordinate system to the laboratory coordinate system.\n"
11732  "\n"
11733  "Frequency extraction is always done by (linear) interpolation.\n"
11734  "Temperature is (linearly) interpolated when at least two\n"
11735  "temperature grid points are present in the *scat_data* and\n"
11736  "*rtp_temperature* is positive. If only a single temperature point\n"
11737  "is available, data for this point is used without modification. In\n"
11738  "order to speed up calculations, temperature interpolation can be\n"
11739  "avoided by passing a *rtp_temperature*<0. In this case, a specific\n"
11740  "temperature grid from the *scat_data* grid is used without\n"
11741  "modification. The selection is as follows:\n"
11742  " -10 < *rtp_temperature * < 0 T_grid[0] lowest temperature\n"
11743  " -20 < *rtp_temperature * < -10 T_grid[nT-1] highest temperature\n"
11744  " *rtp_temperature* < -20 T_grid[nT/2] median grid point\n"),
11745  AUTHORS("Claudia Emde"),
11746  OUT("pha_mat_spt"),
11747  GOUT(),
11748  GOUT_TYPE(),
11749  GOUT_DESC(),
11750  IN("pha_mat_spt",
11751  "scat_data",
11752  "za_grid",
11753  "aa_grid",
11754  "za_index",
11755  "aa_index",
11756  "f_index",
11757  "f_grid",
11758  "rtp_temperature",
11759  "pnd_field",
11760  "scat_p_index",
11761  "scat_lat_index",
11762  "scat_lon_index"),
11763  GIN(),
11764  GIN_TYPE(),
11765  GIN_DEFAULT(),
11766  GIN_DESC()));
11767 
11768  md_data_raw.push_back(create_mdrecord(
11769  NAME("pha_mat_sptFromDataDOITOpt"),
11770  DESCRIPTION(
11771  "Calculation of the phase matrix of the individual scattering elements.\n"
11772  "\n"
11773  "In this function the phase matrix is extracted from\n"
11774  "*pha_mat_sptDOITOpt*. It can be used in the agenda\n"
11775  "*pha_mat_spt_agenda*. This method must be used in combination with\n"
11776  "*DoitScatteringDataPrepare*.\n"
11777  "\n"
11778  "Temperature is considered as described for *pha_mat_sptFromData*\n"),
11779  AUTHORS("Claudia Emde"),
11780  OUT("pha_mat_spt"),
11781  GOUT(),
11782  GOUT_TYPE(),
11783  GOUT_DESC(),
11784  IN("pha_mat_spt",
11785  "pha_mat_sptDOITOpt",
11786  "scat_data_mono",
11787  "doit_za_grid_size",
11788  "aa_grid",
11789  "za_index",
11790  "aa_index",
11791  "rtp_temperature",
11792  "pnd_field",
11793  "scat_p_index",
11794  "scat_lat_index",
11795  "scat_lon_index"),
11796  GIN(),
11797  GIN_TYPE(),
11798  GIN_DEFAULT(),
11799  GIN_DESC()));
11800 
11801  md_data_raw.push_back(create_mdrecord(
11802  NAME("pha_mat_sptFromMonoData"),
11803  DESCRIPTION(
11804  "Calculation of the phase matrix of the individual scattering elements.\n"
11805  "\n"
11806  "This function is the monochromatic version of *pha_mat_sptFromData*.\n"),
11807  AUTHORS("Claudia Emde"),
11808  OUT("pha_mat_spt"),
11809  GOUT(),
11810  GOUT_TYPE(),
11811  GOUT_DESC(),
11812  IN("pha_mat_spt",
11813  "scat_data_mono",
11814  "doit_za_grid_size",
11815  "aa_grid",
11816  "za_index",
11817  "aa_index",
11818  "rtp_temperature",
11819  "pnd_field",
11820  "scat_p_index",
11821  "scat_lat_index",
11822  "scat_lon_index"),
11823  GIN(),
11824  GIN_TYPE(),
11825  GIN_DEFAULT(),
11826  GIN_DESC()));
11827 
11828  md_data_raw.push_back(create_mdrecord(
11829  NAME("pha_mat_sptFromScat_data"),
11830  DESCRIPTION(
11831  "Calculation of the phase matrix of the individual scattering elements.\n"
11832  "\n"
11833  "As *pha_mat_sptFromData*, but using frequency pre-interpolated\n"
11834  "data (as produced by *scat_dataCalc*), i.e. in here no frequency\n"
11835  "interpolation is done anymore.\n"),
11836  AUTHORS("Jana Mendrok, Claudia Emde"),
11837  OUT("pha_mat_spt"),
11838  GOUT(),
11839  GOUT_TYPE(),
11840  GOUT_DESC(),
11841  IN("pha_mat_spt",
11842  "scat_data",
11843  "scat_data_checked",
11844  "za_grid",
11845  "aa_grid",
11846  "za_index",
11847  "aa_index",
11848  "f_index",
11849  "rtp_temperature",
11850  "pnd_field",
11851  "scat_p_index",
11852  "scat_lat_index",
11853  "scat_lon_index"),
11854  GIN(),
11855  GIN_TYPE(),
11856  GIN_DEFAULT(),
11857  GIN_DESC()));
11858 
11859  md_data_raw.push_back(create_mdrecord(
11860  NAME("pndFromPsd"),
11861  DESCRIPTION(
11862  "Calculates *pnd_data* from given *psd_data* for one scattering species.\n"
11863  "\n"
11864  "Performs integration of the size distribution over the size grid\n"
11865  "bin deriving pnd (units #/m3) from psd (units #/m3/m). Some checks\n"
11866  "on the sufficiency of the size grid range and coverage are applied.\n"
11867  "\n"
11868  "*quad_order* can be 0 for rectangular or 1 for trapezoidal\n"
11869  "integration. The only difference is the treatment of the start and\n"
11870  "end nodes. For trapezoidal their corresponding bins end exactly at\n"
11871  "the nodes, while for rectangular they extend further out by the half\n"
11872  "distance to the neighbor node (but not beyond 0).\n"
11873  "\n"
11874  "Attempts to check that the size grids and *scat_data* represent the\n"
11875  "bulk extinction sufficiently. Specifically, it is tested that\n"
11876  " (a) psd*ext is decreasing at the small and large particle size\n"
11877  " ends of the size grid - but only if scattering species bulk\n"
11878  " extinction exceeds 1% of *threshold_ss_ext*.\n"
11879  " (b) removing the smallest and largest particles changes the\n"
11880  " resulting bulk extinction by less then a fraction of\n"
11881  " *threshold_se_ext* - but only if scattering species bulk\n"
11882  " extinction exceeds *threshold_ss_ext* and number density (pnd)\n"
11883  " of the edge size point at this atmospheric level is larger\n"
11884  " than *threshold_se_pnd* times the maximum pnd of this\n"
11885  " scattering element over all atmospheric levels.\n"
11886  "Skipping tests in case of low extinction is done in order to\n"
11887  "minimize issues arising from very low mass densities,\n"
11888  "particularly at single atmospheric levels, and very low bulk\n"
11889  "extinctions, i.e. in cases where the effects on the radiance fields\n"
11890  "are estimated to be low."
11891  "\n"
11892  "NOTE: The tests are only approximate and do not guarantee the\n"
11893  "validity of the resulting bulk properties (and increasing the\n"
11894  "thresholds will decrease the reliability of the bulk properties).\n"),
11895  AUTHORS("Jana Mendrok, Patrick Eriksson"),
11896  OUT("pnd_data", "dpnd_data_dx"),
11897  GOUT(),
11898  GOUT_TYPE(),
11899  GOUT_DESC(),
11900  IN("pnd_size_grid",
11901  "psd_data",
11902  "psd_size_grid",
11903  "dpsd_data_dx",
11904  "scat_data",
11905  "f_grid",
11906  "scat_data_checked"),
11907  GIN("quad_order",
11908  "scat_index",
11909  "threshold_se_ext",
11910  "threshold_ss_ext",
11911  "threshold_se_pnd"),
11912  GIN_TYPE("Index", "Index", "Numeric", "Numeric", "Numeric"),
11913  GIN_DEFAULT("1", NODEF, "0.02", "1e-8", "0.02"),
11914  GIN_DESC("Order of bin quadrature.",
11915  "Take data from scattering species of this index (0-based) in"
11916  " *scat_data*.",
11917  "Maximum allowed extinction fraction in each of the edge size"
11918  " bins.",
11919  "Minimum bulk extinction in the processed scattering species"
11920  " for which to apply size grid representation checks.",
11921  "Minimum ratio of edge point pnd to maximum pnd of this"
11922  " scattering element over all pressure levels.")));
11923 
11924  md_data_raw.push_back(create_mdrecord(
11925  NAME("pndFromPsdBasic"),
11926  DESCRIPTION(
11927  "Calculates *pnd_data* from given *psd_data*.\n"
11928  "\n"
11929  "As *pndFromPsdBasic*, but without bulk extinction representation\n"
11930  "checks.\n"),
11931  AUTHORS("Jana Mendrok, Patrick Eriksson"),
11932  OUT("pnd_data", "dpnd_data_dx"),
11933  GOUT(),
11934  GOUT_TYPE(),
11935  GOUT_DESC(),
11936  IN("pnd_size_grid", "psd_data", "psd_size_grid", "dpsd_data_dx"),
11937  GIN("quad_order"),
11938  GIN_TYPE("Index"),
11939  GIN_DEFAULT("1"),
11940  GIN_DESC("Order of bin quadrature.")));
11941 
11942  md_data_raw.push_back(create_mdrecord(
11943  NAME("pnd_fieldCalcFromParticleBulkProps"),
11944  DESCRIPTION(
11945  "Converts particle bulk property data to *pnd_field*.\n"
11946  "\n"
11947  "In short, the method combines *scat_species*, *pnd_agenda_array*,\n"
11948  "*particle_bulkprop_field* and their associated variables to derive\n"
11949  "*pnd_field*.\n"
11950  "\n"
11951  "The method does nothing if cloudbox is inactive.\n"
11952  "\n"
11953  "Otherwise, cloudbox limits must be set before calling the method,\n"
11954  "and *particle_bulkprop_field* is checked to have non-zero elements\n"
11955  "just inside the cloudbox.\n"),
11956  AUTHORS("Patrick Eriksson, Jana Mendrok"),
11957  OUT("pnd_field", "dpnd_field_dx"),
11958  GOUT(),
11959  GOUT_TYPE(),
11960  GOUT_DESC(),
11961  IN("atmosphere_dim",
11962  "p_grid",
11963  "lat_grid",
11964  "lon_grid",
11965  "t_field",
11966  "cloudbox_on",
11967  "cloudbox_limits",
11968  "scat_species",
11969  "scat_data",
11970  "scat_meta",
11971  "particle_bulkprop_field",
11972  "particle_bulkprop_names",
11973  "pnd_agenda_array",
11974  "pnd_agenda_array_input_names",
11975  "jacobian_do",
11976  "jacobian_quantities"),
11977  GIN(),
11978  GIN_TYPE(),
11979  GIN_DEFAULT(),
11980  GIN_DESC()));
11981 
11982  md_data_raw.push_back(create_mdrecord(
11983  NAME("pnd_fieldCalcFrompnd_field_raw"),
11984  DESCRIPTION(
11985  "Interpolation of particle number density fields to calculation grid\n"
11986  "inside cloudbox.\n"
11987  "\n"
11988  "This method interpolates the particle number density field\n"
11989  "from the raw data *pnd_field_raw* to obtain *pnd_field*.\n"
11990  "For 1D cases, where internally *GriddedFieldPRegrid* and\n"
11991  "*GriddedFieldLatLonRegrid* are applied, *zeropadding*=1 sets the\n"
11992  "*pnd_field* at pressure levels levels exceeding pnd_field_raw's\n"
11993  "pressure grid to 0 (not implemented for 2D and 3D yet). Default:\n"
11994  "zeropadding=0, which throws an error if the calculation pressure grid\n"
11995  "*p_grid* is not completely covered by pnd_field_raw's pressure grid.\n"),
11996  AUTHORS("Sreerekha T.R.", "Claudia Emde", "Oliver Lemke"),
11997  OUT("pnd_field", "dpnd_field_dx"),
11998  GOUT(),
11999  GOUT_TYPE(),
12000  GOUT_DESC(),
12001  IN("p_grid",
12002  "lat_grid",
12003  "lon_grid",
12004  "pnd_field_raw",
12005  "atmosphere_dim",
12006  "cloudbox_limits",
12007  "jacobian_quantities"),
12008  GIN("zeropadding"),
12009  GIN_TYPE("Index"),
12010  GIN_DEFAULT("0"),
12011  GIN_DESC("Allow zeropadding of pnd_field.")));
12012 
12013  md_data_raw.push_back(create_mdrecord(
12014  NAME("pnd_fieldExpand1D"),
12015  DESCRIPTION(
12016  "Maps a 1D pnd_field to a (homogeneous) 2D or 3D pnd_field.\n"
12017  "\n"
12018  "This method takes a 1D *pnd_field* and converts it to a 2D or 3D\n"
12019  "\"cloud\". It is assumed that a complete 1D case has been created,\n"
12020  "and after this *atmosphere_dim*, *lat_grid*, *lon_grid* and\n"
12021  "*cloudbox_limits* have been changed to a 2D or 3D case (without\n"
12022  "changing the vertical extent of the cloudbox.\n"
12023  "\n"
12024  "No modification of *pnd_field* is made for the pressure dimension.\n"
12025  "At the latitude and longitude cloudbox edge points *pnd_field* is set to\n"
12026  "zero. This corresponds to nzero=1. If you want a larger margin between\n"
12027  "the lat and lon cloudbox edges and the \"cloud\" you increase\n"
12028  "*nzero*, where *nzero* is the number of grid points for which\n"
12029  "*pnd_field* shall be set to 0, counted from each lat and lon edge.\n"
12030  "\n"
12031  "See further *AtmFieldsExpand1D*.\n"),
12032  AUTHORS("Patrick Eriksson"),
12033  OUT("pnd_field"),
12034  GOUT(),
12035  GOUT_TYPE(),
12036  GOUT_DESC(),
12037  IN("pnd_field", "atmosphere_dim", "cloudbox_on", "cloudbox_limits"),
12038  GIN("nzero"),
12039  GIN_TYPE("Index"),
12040  GIN_DEFAULT("1"),
12041  GIN_DESC("Number of zero values inside lat and lon limits.")));
12042 
12043  md_data_raw.push_back(create_mdrecord(
12044  NAME("pnd_fieldZero"),
12045  DESCRIPTION(
12046  "Sets *pnd_field* to zero.\n"
12047  "\n"
12048  "Creates an empty *pnd_field* of cloudbox size according to\n"
12049  "*cloudbox_limits* and with number of scattering elemements\n"
12050  "according to *scat_data*. If *scat_data* is not set yet, it will be\n"
12051  "filled with one dummy scattering element.\n"
12052  "\n"
12053  "The method works with both *scat_data* and *scat_data_raw*."
12054  "\n"
12055  "This method primarily exists for testing purposes.\n"
12056  "On the one hand, empty *pnd_field* runs can be used to test the\n"
12057  "agreement between true clear-sky (*cloudboxOff*) solutions and the\n"
12058  "scattering solver solution in factual clear-sky conditions. It is\n"
12059  "important to avoid discontinuities when switching from thin-cloud\n"
12060  "to clear-sky conditions.\n"
12061  "Moreover, scattering calculations using the DOIT method include\n"
12062  "interpolation errors. If one is interested in this effect, one\n"
12063  "should compare the DOIT result with an empty cloudbox to a clearsky\n"
12064  "calculation. That means that the iterative method is performed for\n"
12065  "a cloudbox with no particles.\n"),
12066  AUTHORS("Claudia Emde, Jana Mendrok"),
12067  OUT("pnd_field", "dpnd_field_dx", "scat_data"),
12068  GOUT(),
12069  GOUT_TYPE(),
12070  GOUT_DESC(),
12071  IN("scat_data",
12072  "atmosphere_dim",
12073  "f_grid",
12074  "cloudbox_limits",
12075  "jacobian_quantities"),
12076  GIN(),
12077  GIN_TYPE(),
12078  GIN_DEFAULT(),
12079  GIN_DESC()));
12080 
12081  md_data_raw.push_back(create_mdrecord(
12082  NAME("ppath_fieldFromDownUpLimbGeoms"),
12083  DESCRIPTION(
12084  "Computes ppath_field from \"standalone\" sensors looking upwards from\n"
12085  "0 m altitude with zenith angles range [0, 90], downwards from the top\n"
12086  "of the atmosphere covering the zenith angle range from 180 degrees to\n"
12087  "the surface tangent minus 1e-4 degrees, and through the limb covering\n"
12088  "at the same position as the downwards looking sensor covering the zenith\n"
12089  "angle range from the surface tangent plus 1e-4 degrees to 90 degrees minus\n"
12090  "1e-4 degrees.\n"
12091  "\n"
12092  "The top of the atmosphere is from *z_field*(-1, 0, 0) [python range notation].\n"
12093  "\n"
12094  "The field will consist of 3*nz arrays structured as [up, limb, down]\n"
12095  "\n"
12096  "The intent of this function is to generate a field so that calculations\n"
12097  "of *ppvar_iy* of all the fields will cover the zenith angle space\n"
12098  "of all positions in *z_field*.\n"
12099  "\n"
12100  "Only works for *atmosphere_dim* 1, spherical planets, and *ppath_lmax*<0\n"),
12101  AUTHORS("Richard Larsson"),
12102  OUT("ppath_field"),
12103  GOUT(),
12104  GOUT_TYPE(),
12105  GOUT_DESC(),
12106  IN("ppath_agenda",
12107  "ppath_lmax",
12108  "ppath_lraytrace",
12109  "atmgeom_checked",
12110  "z_field",
12111  "f_grid",
12112  "cloudbox_on",
12113  "cloudbox_checked",
12114  "ppath_inside_cloudbox_do",
12115  "rte_pos",
12116  "rte_los",
12117  "rte_pos2",
12118  "refellipsoid",
12119  "atmosphere_dim"),
12120  GIN("nz"),
12121  GIN_TYPE("Index"),
12122  GIN_DEFAULT("3"),
12123  GIN_DESC("Number of zenith angles per position")));
12124 
12125  md_data_raw.push_back(create_mdrecord(
12126  NAME("ppathCalc"),
12127  DESCRIPTION(
12128  "Stand-alone calculation of propagation paths.\n"
12129  "\n"
12130  "Beside a few checks of input data, the only operation of this\n"
12131  "method is to execute *ppath_agenda*.\n"
12132  "\n"
12133  "Propagation paths are normally calculated as part of the radiative\n"
12134  "transfer calculations, and this method is not part of the control\n"
12135  "file. A reason to call this function directly would be to obtain a\n"
12136  "propagation path for plotting. Anyhow, use this method instead\n"
12137  "of calling e.g.*ppathStepByStep directly.\n"),
12138  AUTHORS("Patrick Eriksson"),
12139  OUT("ppath"),
12140  GOUT(),
12141  GOUT_TYPE(),
12142  GOUT_DESC(),
12143  IN("ppath_agenda",
12144  "ppath_lmax",
12145  "ppath_lraytrace",
12146  "atmgeom_checked",
12147  "f_grid",
12148  "cloudbox_on",
12149  "cloudbox_checked",
12150  "ppath_inside_cloudbox_do",
12151  "rte_pos",
12152  "rte_los",
12153  "rte_pos2"),
12154  GIN(),
12155  GIN_TYPE(),
12156  GIN_DEFAULT(),
12157  GIN_DESC()));
12158 
12159  md_data_raw.push_back(create_mdrecord(
12160  NAME("ppath_fieldCalc"),
12161  DESCRIPTION(
12162  "Stand-alone calculation of propagation path field from sensors.\n"
12163  "\n"
12164  "Uses *ppathCalc* internally.\n"),
12165  AUTHORS("Richard Larsson"),
12166  OUT("ppath_field"),
12167  GOUT(),
12168  GOUT_TYPE(),
12169  GOUT_DESC(),
12170  IN("ppath_agenda",
12171  "ppath_lmax",
12172  "ppath_lraytrace",
12173  "atmgeom_checked",
12174  "f_grid",
12175  "cloudbox_on",
12176  "cloudbox_checked",
12177  "ppath_inside_cloudbox_do",
12178  "sensor_pos",
12179  "sensor_los",
12180  "rte_pos2"),
12181  GIN(),
12182  GIN_TYPE(),
12183  GIN_DEFAULT(),
12184  GIN_DESC()));
12185 
12186  md_data_raw.push_back(create_mdrecord(
12187  NAME("ppathCalcFromAltitude"),
12188  DESCRIPTION(
12189  "Moves *rte_pos* forwards to near altitude before calling *ppathCalc*\n"
12190  "to compute a different *ppath*. The accuracy-variable gives minimum\n"
12191  "distance before the input altitude.\n"
12192  "\n"
12193  "The forward-moving algorithm calls *ppathCalc* several\n"
12194  "times at reduced maximum distances. The intention is to maintain\n"
12195  "the correct *rte_los* for a given *rte_pos* at all altitudes. The\n"
12196  "method is thus relatively slow, and VERY memory intense at low\n"
12197  "accuracy.\n"
12198  "\n"
12199  "Intended to be used with \"tropospheric corrections\" from ground\n"
12200  "geometry. Not well-tested\n"
12201  "\n"
12202  "Throws error if no altitude is in line of sight.\n"),
12203  AUTHORS("Richard Larsson"),
12204  OUT("ppath"),
12205  GOUT(),
12206  GOUT_TYPE(),
12207  GOUT_DESC(),
12208  IN("ppath_agenda",
12209  "ppath_lmax",
12210  "ppath_lraytrace",
12211  "atmgeom_checked",
12212  "f_grid",
12213  "cloudbox_on",
12214  "cloudbox_checked",
12215  "ppath_inside_cloudbox_do",
12216  "rte_pos",
12217  "rte_los",
12218  "rte_pos2"),
12219  GIN("altitude", "accuracy"),
12220  GIN_TYPE("Numeric", "Numeric"),
12221  GIN_DEFAULT(NODEF, "0.5"),
12222  GIN_DESC("Altitude to move forward towards", "Accuracy of altitude")));
12223 
12224  md_data_raw.push_back(create_mdrecord(
12225  NAME("ppathFromRtePos2"),
12226  DESCRIPTION(
12227  "Determines the propagation path from *rte_pos2* to *rte_pos*.\n"
12228  "\n"
12229  "The propagation path linking *rte_pos* and *rte_pos2* is calculated\n"
12230  "and returned. The method determines the path in a pure numerical\n"
12231  "manner, where a simple algorithm is applied. The task is to find\n"
12232  "the value of *rte_los* (at *rte_pos*) linking the two positions.\n"
12233  "\n"
12234  "See the user guide for a description of the search algorithm,\n"
12235  "including a more detailed definition of *za_accuracy*, \n"
12236  "*pplrt_factor* and *pplrt_lowest*.\n"
12237  "\n"
12238  "The standard application of this method should be to radio link\n"
12239  "calculations, where *rte_pos2* corresponds to a transmitter, and\n"
12240  "*rte_pos* to the receiver/sensor.\n"
12241  "\n"
12242  "The details of the ray tracing is controlled by *ppath_step_agenda*\n"
12243  "as usual.\n"),
12244  AUTHORS("Patrick Eriksson"),
12245  OUT("ppath", "rte_los", "ppath_lraytrace"),
12246  GOUT(),
12247  GOUT_TYPE(),
12248  GOUT_DESC(),
12249  IN("ppath_step_agenda",
12250  "atmosphere_dim",
12251  "p_grid",
12252  "lat_grid",
12253  "lon_grid",
12254  "z_field",
12255  "f_grid",
12256  "refellipsoid",
12257  "z_surface",
12258  "rte_pos",
12259  "rte_pos2",
12260  "rte_los",
12261  "ppath_lmax",
12262  "ppath_lraytrace"),
12263  GIN("za_accuracy", "pplrt_factor", "pplrt_lowest"),
12264  GIN_TYPE("Numeric", "Numeric", "Numeric"),
12265  GIN_DEFAULT("2e-5", "5", "0.5"),
12266  GIN_DESC("Required accuracy, in form of the maximum allowed angular "
12267  "off-set [deg].",
12268  "The factor with which ppath_lraytrace is decreased if "
12269  "no solution is found.",
12270  "Lowest value ppath_lraytrace to consider. The calculations "
12271  "are halted if this length is passed.")));
12272 
12273  md_data_raw.push_back(create_mdrecord(
12274  NAME("ppathPlaneParallel"),
12275  DESCRIPTION(
12276  "Propagation path calculations for a plane parallel atmosphere.\n"
12277  "\n"
12278  "This method basically assumes that the planet's radius is infinite,\n"
12279  "i.e. the planet surface has no curvature. Some consequences of this\n"
12280  "assumption:\n"
12281  " - the mathod can only be used for 1D\n"
12282  " - zenith angles between 89.9 and 90.1 deg are not allowed\n"
12283  " - refraction is always neglected\n"
12284  " - radii in ppath are set to Inf\n"
12285  "\n"
12286  "Notice that the method provides full propagation paths. This means\n"
12287  "that *ppath_step_agenda* is ignored (and thus also refraction).\n"
12288  "On the other hand, the method considers the cloudbox exactly as\n"
12289  "the standard path calculations.\n"),
12290  AUTHORS("Patrick Eriksson"),
12291  OUT("ppath"),
12292  GOUT(),
12293  GOUT_TYPE(),
12294  GOUT_DESC(),
12295  IN("atmosphere_dim",
12296  "z_field",
12297  "z_surface",
12298  "cloudbox_on",
12299  "cloudbox_limits",
12300  "ppath_inside_cloudbox_do",
12301  "rte_pos",
12302  "rte_los",
12303  "ppath_lmax"),
12304  GIN(),
12305  GIN_TYPE(),
12306  GIN_DEFAULT(),
12307  GIN_DESC()));
12308 
12309  md_data_raw.push_back(create_mdrecord(
12310  NAME("ppathStepByStep"),
12311  DESCRIPTION(
12312  "Standard method for calculation of propagation paths.\n"
12313  "\n"
12314  "This method calculates complete propagation paths in a stepwise\n"
12315  "manner. Each step is denoted as a \"ppath_step\" and is the path\n"
12316  "through/inside a single grid box.\n"
12317  "\n"
12318  "The definition of a propgation path cannot be accommodated here.\n"
12319  "For more information read the chapter on propagation paths in the\n"
12320  "ARTS user guide.\n"
12321  "\n"
12322  "This method should never be called directly. Use *ppathCalc* instead\n"
12323  "if you want to extract propagation paths.\n"),
12324  AUTHORS("Patrick Eriksson"),
12325  OUT("ppath"),
12326  GOUT(),
12327  GOUT_TYPE(),
12328  GOUT_DESC(),
12329  IN("ppath_step_agenda",
12330  "ppath_inside_cloudbox_do",
12331  "atmosphere_dim",
12332  "p_grid",
12333  "lat_grid",
12334  "lon_grid",
12335  "z_field",
12336  "f_grid",
12337  "refellipsoid",
12338  "z_surface",
12339  "cloudbox_on",
12340  "cloudbox_limits",
12341  "rte_pos",
12342  "rte_los",
12343  "ppath_lmax",
12344  "ppath_lraytrace"),
12345  GIN(),
12346  GIN_TYPE(),
12347  GIN_DEFAULT(),
12348  GIN_DESC()));
12349 
12350  md_data_raw.push_back(create_mdrecord(
12351  NAME("ppathWriteXMLPartial"),
12352  DESCRIPTION(
12353  "WSM to only write a reduced Ppath, omitting grid positions.\n"
12354  "\n"
12355  "The following fields are set to be empty: gp_p, gp_lat and gp_lon.\n"
12356  "This cam drastically decrease the time for reading the structure\n"
12357  "by some external software.\n"
12358  "\n"
12359  "If *file_index is >= 0, the variable is written to a file with name:\n"
12360  " <filename>.<file_index>.xml.\n"
12361  "where <file_index> is the value of *file_index*.\n"
12362  "\n"
12363  "This means that *filename* shall here not include the .xml\n"
12364  "extension. Omitting filename works as for *WriteXML*.\n"),
12365  AUTHORS("Oliver Lemke"),
12366  OUT(),
12367  GOUT(),
12368  GOUT_TYPE(),
12369  GOUT_DESC(),
12370  IN("output_file_format", "ppath"),
12371  GIN("filename", "file_index"),
12372  GIN_TYPE("String", "Index"),
12373  GIN_DEFAULT("", "-1"),
12374  GIN_DESC("File name. See above.",
12375  "Optional file index to append to filename.")));
12376 
12377  md_data_raw.push_back(create_mdrecord(
12378  NAME("ppath_stepGeometric"),
12379  DESCRIPTION(
12380  "Calculates a geometrical propagation path step.\n"
12381  "\n"
12382  "This function determines a propagation path step by pure\n"
12383  "geometrical calculations. That is, refraction is neglected. Path\n"
12384  "points are always included for crossings with the grids, tangent\n"
12385  "points and intersection points with the surface. The WSV *ppath_lmax*\n"
12386  "gives the option to include additional points to ensure that the\n"
12387  "distance along the path between the points does not exceed the\n"
12388  "selected maximum length. No additional points are included if\n"
12389  "*ppath_lmax* is set to <= 0.\n"
12390  "\n"
12391  "For further information, type see the on-line information for\n"
12392  "*ppath_step_agenda*.\n"),
12393  AUTHORS("Patrick Eriksson"),
12394  OUT("ppath_step"),
12395  GOUT(),
12396  GOUT_TYPE(),
12397  GOUT_DESC(),
12398  IN("ppath_step",
12399  "atmosphere_dim",
12400  "lat_grid",
12401  "lon_grid",
12402  "z_field",
12403  "refellipsoid",
12404  "z_surface",
12405  "ppath_lmax"),
12406  GIN(),
12407  GIN_TYPE(),
12408  GIN_DEFAULT(),
12409  GIN_DESC()));
12410 
12411  md_data_raw.push_back(create_mdrecord(
12412  NAME("ppath_stepRefractionBasic"),
12413  DESCRIPTION(
12414  "Calculates a propagation path step, considering refraction by a\n"
12415  "basic approach.\n"
12416  "\n"
12417  "Refraction is taken into account by probably the simplest approach\n"
12418  "possible. The path is treated to consist of piece-wise geometric\n"
12419  "steps. A geometric path step is calculated from each point by\n"
12420  "using the local line-of-sight. Snell's law for spherical symmetry\n"
12421  "is used for 1D to determine the zenith angle at the new point.\n"
12422  "For 2D and 3D, the zenith angle is calculated using the average\n"
12423  "gradient of the refractive index between the two points. For 3D,\n"
12424  "the azimuth angle is treated in the same way as the zenith one.\n"
12425  "\n"
12426  "The maximum length of each ray tracing step is given by the WSV\n"
12427  "*ppath_lraytrace*. The length will never exceed the given maximum,\n"
12428  "but it can be smaller. The ray tracing steps are only used to\n"
12429  "determine the path. Points to describe the path are included as\n"
12430  "for *ppath_stepGeometric*, this including the functionality of\n"
12431  "*ppath_lmax*.\n"),
12432  AUTHORS("Patrick Eriksson"),
12433  OUT("ppath_step"),
12434  GOUT(),
12435  GOUT_TYPE(),
12436  GOUT_DESC(),
12437  IN("refr_index_air_agenda",
12438  "ppath_step",
12439  "atmosphere_dim",
12440  "p_grid",
12441  "lat_grid",
12442  "lon_grid",
12443  "z_field",
12444  "t_field",
12445  "vmr_field",
12446  "refellipsoid",
12447  "z_surface",
12448  "f_grid",
12449  "ppath_lmax",
12450  "ppath_lraytrace"),
12451  GIN(),
12452  GIN_TYPE(),
12453  GIN_DEFAULT(),
12454  GIN_DESC()));
12455 
12456  md_data_raw.push_back(create_mdrecord(
12457  NAME("ppvar_optical_depthFromPpvar_trans_cumulat"),
12458  DESCRIPTION(
12459  "Sets *ppvar_optical_depth* according to provided transmission data.\n"
12460  "\n"
12461  "The values in ppvar_optical_depth are set to\n"
12462  "-log( ppvar_trans_cumulat(joker,joker,0,0) ).\n"),
12463  AUTHORS("Patrick Eriksson"),
12464  OUT("ppvar_optical_depth"),
12465  GOUT(),
12466  GOUT_TYPE(),
12467  GOUT_DESC(),
12468  IN("ppvar_trans_cumulat"),
12469  GIN(),
12470  GIN_TYPE(),
12471  GIN_DEFAULT(),
12472  GIN_DESC()));
12473 
12474  md_data_raw.push_back(
12475  create_mdrecord(NAME("Print"),
12476  DESCRIPTION("Prints a variable on the screen.\n"),
12477  AUTHORS("Oliver Lemke"),
12478  OUT(),
12479  GOUT(),
12480  GOUT_TYPE(),
12481  GOUT_DESC(),
12482  IN(),
12483  GIN("in", "level"),
12484  GIN_TYPE("Any", "Index"),
12485  GIN_DEFAULT(NODEF, "1"),
12486  GIN_DESC("Variable to be printed.", "Output level to use."),
12487  SETMETHOD(false),
12488  AGENDAMETHOD(false),
12489  USES_TEMPLATES(true)));
12490 
12491  md_data_raw.push_back(
12492  create_mdrecord(NAME("PrintPhysicalConstants"),
12493  DESCRIPTION("Prints (most) physical constants used in ARTS.\n"),
12494  AUTHORS("Richard Larsson"),
12495  OUT(),
12496  GOUT(),
12497  GOUT_TYPE(),
12498  GOUT_DESC(),
12499  IN(),
12500  GIN(),
12501  GIN_TYPE(),
12502  GIN_DEFAULT(),
12503  GIN_DESC()));
12504 
12505  md_data_raw.push_back(
12506  create_mdrecord(NAME("PrintWorkspace"),
12507  DESCRIPTION("Prints a list of the workspace variables.\n"),
12508  AUTHORS("Oliver Lemke"),
12509  OUT(),
12510  GOUT(),
12511  GOUT_TYPE(),
12512  GOUT_DESC(),
12513  IN(),
12514  GIN("only_allocated", "level"),
12515  GIN_TYPE("Index", "Index"),
12516  GIN_DEFAULT("1", "1"),
12517  GIN_DESC("Flag for printing either all variables (0) or only "
12518  "allocated ones (1).",
12519  "Output level to use."),
12520  SETMETHOD(false),
12521  AGENDAMETHOD(false),
12522  USES_TEMPLATES(true),
12523  PASSWORKSPACE(true)));
12524 
12525  md_data_raw.push_back(create_mdrecord(
12526  NAME("ZFromPSimple"),
12527  DESCRIPTION(
12528  "Simple conversion from pressure to altitude.\n"
12529  "\n"
12530  "This function converts a vector of pressure values to an approximate vector\n"
12531  "of corresponding heights. The formula used to convert pressure to height is:\n"
12532  "z = 16000 * (5.0 - log10(p))"
12533  "That is, a pressure is assumed to decrease by a factor of 10 every 16km.\n"
12534  "\n"
12535  "Note that all pressure values in the vector must be greater than 0.01.\n"),
12536  AUTHORS("Simon Pfreundschuh"),
12537  OUT(),
12538  GOUT("z_grid"),
12539  GOUT_TYPE("Vector"),
12540  GOUT_DESC("Approximate heights of pressure grid points."),
12541  IN(),
12542  GIN("p_grid"),
12543  GIN_TYPE("Vector"),
12544  GIN_DEFAULT(NODEF),
12545  GIN_DESC("Pressure grid."),
12546  SETMETHOD(false),
12547  AGENDAMETHOD(false)));
12548 
12549  md_data_raw.push_back(create_mdrecord(
12550  NAME("PFromZSimple"),
12551  DESCRIPTION(
12552  "Simple conversion from altitude to pressure.\n"
12553  "\n"
12554  "This function converts a vector of altitudes to an approximate vector\n"
12555  "of corresponding pressures. The formula used to convert altitide z to height\n"
12556  " is:\n"
12557  "p = 10.0^(5.0 - z / 1600)\n"
12558  "\n"
12559  "Note that all altitude values in the vector must be less than 120 km, \n"
12560  " otherwise an error will be thrown.\n"),
12561  AUTHORS("Simon Pfreundschuh"),
12562  OUT(),
12563  GOUT("p_grid"),
12564  GOUT_TYPE("Vector"),
12565  GOUT_DESC("Approximate pressures of corresponding to given altitudes."),
12566  IN(),
12567  GIN("z_grid"),
12568  GIN_TYPE("Vector"),
12569  GIN_DEFAULT(NODEF),
12570  GIN_DESC("Altitude grid."),
12571  SETMETHOD(false),
12572  AGENDAMETHOD(false)));
12573 
12574  md_data_raw.push_back(create_mdrecord(
12575  NAME("propmat_clearskyAddFaraday"),
12576  DESCRIPTION(
12577  "Calculates absorption matrix describing Faraday rotation.\n"
12578  "\n"
12579  "Faraday rotation is a change of polarization state of an\n"
12580  "electromagnetic wave propagating through charged matter by\n"
12581  "interaction with a magnetic field. Hence, this method requires\n"
12582  "*abs_species* to contain 'free_electrons' and electron content field\n"
12583  "(as part of *vmr_field*) as well as magnetic field (*mag_u_field*,\n"
12584  "*mag_v_field*, *mag_w_field*) to be specified.\n"
12585  "\n"
12586  "Faraday rotation affects Stokes parameters 2 and 3 (but not\n"
12587  "intensity!). Therefore, this method requires stokes_dim>2.\n"
12588  "\n"
12589  "Like all 'propmat_clearskyAdd*' methods, the method is additive,\n"
12590  "i.e., does not overwrite the propagation matrix *propmat_clearsky*,\n"
12591  "but adds further contributions.\n"),
12592  AUTHORS("Patrick Eriksson"),
12593  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12594  GOUT(),
12595  GOUT_TYPE(),
12596  GOUT_DESC(),
12597  IN("propmat_clearsky",
12598  "dpropmat_clearsky_dx",
12599  "stokes_dim",
12600  "atmosphere_dim",
12601  "f_grid",
12602  "abs_species",
12603  "jacobian_quantities",
12604  "rtp_vmr",
12605  "rtp_los",
12606  "rtp_mag"),
12607  GIN(),
12608  GIN_TYPE(),
12609  GIN_DEFAULT(),
12610  GIN_DESC()));
12611 
12612  md_data_raw.push_back(create_mdrecord(
12613  NAME("propmat_clearskyAddFromAbsCoefPerSpecies"),
12614  DESCRIPTION(
12615  "Copy *propmat_clearsky* from *abs_coef_per_species*. This is handy for putting an\n"
12616  "explicit line-by-line calculation into the\n"
12617  "*propmat_clearsky_agenda*. This method is also used internally by.\n"
12618  "*propmat_clearskyAddOnTheFly*.\n"
12619  "Like all other propmat_clearsky methods, this method does not overwrite\n"
12620  "prior content of *propmat_clearsky*, but adds to it.\n"),
12621  AUTHORS("Stefan Buehler"),
12622  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12623  GOUT(),
12624  GOUT_TYPE(),
12625  GOUT_DESC(),
12626  IN("propmat_clearsky", "abs_coef_per_species", "dabs_coef_dx"),
12627  GIN(),
12628  GIN_TYPE(),
12629  GIN_DEFAULT(),
12630  GIN_DESC()));
12631 
12632  md_data_raw.push_back(create_mdrecord(
12633  NAME("propmat_clearskyAddFromLookup"),
12634  DESCRIPTION(
12635  "Extract gas absorption coefficients from lookup table.\n"
12636  "\n"
12637  "This extracts the absorption coefficient for all species from the\n"
12638  "lookup table, and adds them to the propagation matrix. Extraction is\n"
12639  "for one specific atmospheric condition, i.e., a set of pressure,\n"
12640  "temperature, and VMR values.\n"
12641  "\n"
12642  "Some special species are ignored, for example Zeeman species and free\n"
12643  "electrons, since their absorption properties are not simple scalars\n"
12644  "and cannot be handled by the lookup table.\n"
12645  "\n"
12646  "The interpolation order in T and H2O is given by *abs_t_interp_order*\n"
12647  "and *abs_nls_interp_order*, respectively.\n"
12648  "\n"
12649  "Extraction is done for the frequencies in f_grid. Frequency\n"
12650  "interpolation is controlled by *abs_f_interp_order*. If this is zero,\n"
12651  "then f_grid must either be the same as the internal frequency grid of\n"
12652  "the lookup table (for efficiency reasons, only the first and last\n"
12653  "element of f_grid are checked), or must have only a single element.\n"
12654  "If *abs_f_interp_order* is above zero, then frequency is interpolated\n"
12655  "along with the other interpolation dimensions. This is useful for\n"
12656  "calculations with Doppler shift.\n"
12657  "\n"
12658  "For Doppler calculations, you should generate the table with a\n"
12659  "somewhat larger frequency grid than the calculation itself has, since\n"
12660  "the Doppler shift will push the frequency grid out of the table range\n"
12661  "on one side.\n"
12662  "\n"
12663  "Some extrapolation is allowed. For pressure and frequency interpolation\n"
12664  "the standard extrapolation factor of 0.5 is applied. The factor is the\n"
12665  "default for temperature and VMR interpolation, but the extrapolation\n"
12666  "limit can here be adjusted by the *extpolfac* argument.\n"
12667  "\n"
12668  "See also: *propmat_clearskyAddOnTheFly*.\n"),
12669  AUTHORS("Stefan Buehler, Richard Larsson"),
12670  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12671  GOUT(),
12672  GOUT_TYPE(),
12673  GOUT_DESC(),
12674  IN("propmat_clearsky",
12675  "dpropmat_clearsky_dx",
12676  "abs_lookup",
12677  "abs_lookup_is_adapted",
12678  "abs_p_interp_order",
12679  "abs_t_interp_order",
12680  "abs_nls_interp_order",
12681  "abs_f_interp_order",
12682  "f_grid",
12683  "rtp_pressure",
12684  "rtp_temperature",
12685  "rtp_vmr",
12686  "jacobian_quantities"),
12687  GIN("extpolfac"),
12688  GIN_TYPE("Numeric"),
12689  GIN_DEFAULT("0.5"),
12690  GIN_DESC("Extrapolation factor (for temperature and VMR grid edges).")));
12691 
12692  md_data_raw.push_back(create_mdrecord(
12693  NAME("propmat_clearskyAddHitranLineMixingLines"),
12694  DESCRIPTION(
12695  "Calculates gas absorption coefficients line-by-line for HITRAN line mixed data.\n"
12696  "\n"
12697  "*Wigner6Init* or *Wigner3Init* must be called before this function.\n"
12698  "\n"
12699  "\n"
12700  "Please ensure you cite the original authors when you use this function:\n"
12701  "\tJ. Lamouroux, L. Realia, X. Thomas, et al., J.Q.S.R.T. 151 (2015), 88-96\n"),
12702  AUTHORS("Richard Larsson"),
12703  OUT("propmat_clearsky"),
12704  GOUT(),
12705  GOUT_TYPE(),
12706  GOUT_DESC(),
12707  IN("propmat_clearsky",
12708  "abs_hitran_relmat_data",
12709  "abs_lines_per_species",
12710  "f_grid",
12711  "abs_species",
12712  "jacobian_quantities",
12713  "partition_functions",
12714  "rtp_pressure",
12715  "rtp_temperature",
12716  "rtp_vmr"),
12717  GIN(),
12718  GIN_TYPE(),
12719  GIN_DEFAULT(),
12720  GIN_DESC()));
12721 
12722  md_data_raw.push_back(create_mdrecord(
12723  NAME("propmat_clearskyAddOnTheFly"),
12724  DESCRIPTION(
12725  "Calculates gas absorption coefficients line-by-line.\n"
12726  "\n"
12727  "This method can be used inside *propmat_clearsky_agenda* just like\n"
12728  "*propmat_clearskyAddFromLookup*. It is a shortcut for putting in some\n"
12729  "other methods explicitly, namely:\n"
12730  "\n"
12731  " 1. *AbsInputFromRteScalars*\n"
12732  " 2. Execute *abs_xsec_agenda*\n"
12733  " 3. *abs_coefCalcFromXsec*\n"
12734  " 4. *propmat_clearskyAddFromAbsCoefPerSpecies*\n"
12735  "\n"
12736  "The calculation is for one specific atmospheric condition, i.e., a set\n"
12737  "of pressure, temperature, and VMR values.\n"),
12738  AUTHORS("Stefan Buehler, Richard Larsson"),
12739  OUT("propmat_clearsky",
12740  "nlte_source",
12741  "dpropmat_clearsky_dx",
12742  "dnlte_dx_source",
12743  "nlte_dsource_dx"),
12744  GOUT(),
12745  GOUT_TYPE(),
12746  GOUT_DESC(),
12747  IN("propmat_clearsky",
12748  "nlte_source",
12749  "dpropmat_clearsky_dx",
12750  "dnlte_dx_source",
12751  "nlte_dsource_dx",
12752  "f_grid",
12753  "abs_species",
12754  "jacobian_quantities",
12755  "rtp_pressure",
12756  "rtp_temperature",
12757  "rtp_nlte",
12758  "rtp_vmr",
12759  "abs_xsec_agenda"),
12760  GIN(),
12761  GIN_TYPE(),
12762  GIN_DEFAULT(),
12763  GIN_DESC()));
12764 
12765  md_data_raw.push_back(create_mdrecord(
12766  NAME("propmat_clearskyAddParticles"),
12767  DESCRIPTION(
12768  "Calculates absorption coefficients of particles to be used in\n"
12769  "clearsky (non-cloudbox) calculations.\n"
12770  "\n"
12771  "This is a method to include particles (neglecting possible\n"
12772  "scattering components) in a clearsky calculation, i.e. without\n"
12773  "applying the cloudbox and scattering solvers. Particles are handled\n"
12774  "as absorbing species with one instance of 'particles' per scattering\n"
12775  "element considered added to *abs_species*. Particle absorption cross-\n"
12776  "sections at current atmospheric conditions are extracted from the\n"
12777  "single scattering data stored in *scat_data*, i.e., one array\n"
12778  "element per 'particles' instance in *abs_species* is required. Number\n"
12779  "densities are stored in *vmr_field_raw* or *vmr_field* as for all\n"
12780  "*abs_species*, but can be taken from (raw) pnd_field type data.\n"
12781  "\n"
12782  "Note that the absorption coefficient is applied both in the\n"
12783  "extinction term (neglecting scattering out of the line of sight)\n"
12784  "and the emission term (neglecting the scattering source term, i.e.\n"
12785  "scattering into the line of sight).\n"
12786  "\n"
12787  "Optionally, particle extinction (sum of absorption and scattering\n"
12788  "coefficient) can be used instead of absorption only. To choose this\n"
12789  "case, set the *use_abs_as_ext* flag to 0. However, be aware that\n"
12790  "this creates some unphysical emission term, hence is only suitable,\n"
12791  "where the source term is negligible anyways, e.g. for occultation\n"
12792  "simulations.\n"
12793  "\n"
12794  "A line-of-sight direction *rtp_los* is required as particles can\n"
12795  "exhibit directional dependent absorption properties, which is taken\n"
12796  "into account by this method."
12797  "\n"
12798  "*ScatElementsToabs_speciesAdd* can be used to add all required\n"
12799  "settings/data for individual scattering elements at once, i.e. a\n"
12800  " 'particles' tag to *abs_species*, a set of single scattering data to\n"
12801  "*scat_data* and a number density field to *vmr_field_raw*\n"
12802  "(*vmr_field* is derived applying AtmFieldsCalc once VMRs for all\n"
12803  "*abs_species* have been added) is appended for each scattering\n"
12804  "element.\n"
12805  "\n"
12806  "Like all 'propmat_clearskyAdd*' methods, the method is additive,\n"
12807  "i.e., does not overwrite the propagation matrix *propmat_clearsky*,\n"
12808  "but adds further contributions.\n"),
12809  AUTHORS("Jana Mendrok"),
12810  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12811  GOUT(),
12812  GOUT_TYPE(),
12813  GOUT_DESC(),
12814  IN("propmat_clearsky",
12815  "dpropmat_clearsky_dx",
12816  "stokes_dim",
12817  "atmosphere_dim",
12818  "f_grid",
12819  "abs_species",
12820  "jacobian_quantities",
12821  "rtp_vmr",
12822  "rtp_los",
12823  "rtp_temperature",
12824  "scat_data",
12825  "scat_data_checked"),
12826  GIN("use_abs_as_ext"),
12827  GIN_TYPE("Index"),
12828  GIN_DEFAULT("1"),
12829  GIN_DESC("A flag with value 1 or 0. If set to one, particle absorption\n"
12830  "is used in extinction and emission parts of the RT equation,\n"
12831  "and scattering out of LOS as well as into LOS is neglected.\n"
12832  "Otherwise, particle extinction (absorption+scattering) is\n"
12833  "applied in both the extinction as well as the emission part\n"
12834  "of the RT equation. That is, true extinction is applied, but\n"
12835  "emission also includes a pseudo-emission contribution from\n"
12836  "the scattering coefficient.\n")));
12837 
12838  md_data_raw.push_back(create_mdrecord(
12839  NAME("propmat_clearskyAddZeeman"),
12840  DESCRIPTION(
12841  "Calculates Zeeman-affected polarized propagation matrix and its\n"
12842  "derivatives.\n"
12843  "\n"
12844  "Otherwise as *propmat_clearskyAddFromLookup*\n"),
12845  AUTHORS("Richard Larsson"),
12846  OUT("propmat_clearsky",
12847  "nlte_source",
12848  "dpropmat_clearsky_dx",
12849  "dnlte_dx_source",
12850  "nlte_dsource_dx"),
12851  GOUT(),
12852  GOUT_TYPE(),
12853  GOUT_DESC(),
12854  IN("propmat_clearsky",
12855  "nlte_source",
12856  "dpropmat_clearsky_dx",
12857  "dnlte_dx_source",
12858  "nlte_dsource_dx",
12859  "abs_lines_per_species",
12860  "f_grid",
12861  "abs_species",
12862  "jacobian_quantities",
12863  "isotopologue_ratios",
12864  "partition_functions",
12865  "rtp_pressure",
12866  "rtp_temperature",
12867  "rtp_nlte",
12868  "rtp_vmr",
12869  "rtp_mag",
12870  "rtp_los",
12871  "atmosphere_dim",
12872  "lbl_checked"),
12873  GIN("manual_zeeman_tag",
12874  "manual_zeeman_magnetic_field_strength",
12875  "manual_zeeman_theta",
12876  "manual_zeeman_eta"),
12877  GIN_TYPE("Index", "Numeric", "Numeric", "Numeric"),
12878  GIN_DEFAULT("0", "1.0", "0.0", "0.0"),
12879  GIN_DESC("Manual angles tag",
12880  "Manual Magnetic Field Strength",
12881  "Manual theta given positive tag",
12882  "Manual eta given positive tag")));
12883 
12884  md_data_raw.push_back(create_mdrecord(
12885  NAME("propmat_clearskyInit"),
12886  DESCRIPTION(
12887  "Initialize *propmat_clearsky* and *nlte_source*.\n"
12888  "\n"
12889  "This method must be used inside *propmat_clearsky_agenda* and then\n"
12890  "be called first.\n"),
12891  AUTHORS("Oliver Lemke, Richard Larsson"),
12892  OUT("propmat_clearsky",
12893  "nlte_source",
12894  "dpropmat_clearsky_dx",
12895  "dnlte_dx_source",
12896  "nlte_dsource_dx"),
12897  GOUT(),
12898  GOUT_TYPE(),
12899  GOUT_DESC(),
12900  IN("abs_species",
12901  "jacobian_quantities",
12902  "f_grid",
12903  "stokes_dim",
12904  "propmat_clearsky_agenda_checked",
12905  "nlte_do"),
12906  GIN(),
12907  GIN_TYPE(),
12908  GIN_DEFAULT(),
12909  GIN_DESC()));
12910 
12911  md_data_raw.push_back(create_mdrecord(
12912  NAME("propmat_clearskyZero"),
12913  DESCRIPTION(
12914  "Sets *propmat_clearsky* to match zero attenuation.\n"
12915  "\n"
12916  "Use this method just if you know what you are doing!\n"
12917  "\n"
12918  "If you want to make a calculation with no clear-sky attenuation at\n"
12919  "all, fill *propmat_clearsky_agenda* with this method and required\n"
12920  "Ignore statements (don't include *propmat_clearskyInit*).\n"),
12921  AUTHORS("Patrick Eriksson"),
12922  OUT("propmat_clearsky"),
12923  GOUT(),
12924  GOUT_TYPE(),
12925  GOUT_DESC(),
12926  IN("f_grid", "stokes_dim"),
12927  GIN(),
12928  GIN_TYPE(),
12929  GIN_DEFAULT(),
12930  GIN_DESC()));
12931 
12932  md_data_raw.push_back(create_mdrecord(
12933  NAME("propmat_clearskyForceNegativeToZero"),
12934  DESCRIPTION("Sets *propmat_clearsky* to match zero attenuation\n"
12935  "if negative value. Useful for line mixing in some cases.\n"
12936  "\n"
12937  "Use this method just if you know what you are doing!\n"),
12938  AUTHORS("Richard Larsson"),
12939  OUT("propmat_clearsky"),
12940  GOUT(),
12941  GOUT_TYPE(),
12942  GOUT_DESC(),
12943  IN("propmat_clearsky"),
12944  GIN(),
12945  GIN_TYPE(),
12946  GIN_DEFAULT(),
12947  GIN_DESC()));
12948 
12949  md_data_raw.push_back(create_mdrecord(
12950  NAME("propmat_clearsky_agenda_checkedCalc"),
12951  DESCRIPTION(
12952  "Checks if the *propmat_clearsky_agenda* contains all necessary\n"
12953  "methods to calculate all the species in *abs_species*.\n"
12954  "\n"
12955  "This method should be called just before the *propmat_clearsky_agenda*\n"
12956  "is used, e.g. *DoitGetIncoming*, *ybatchCalc*, *yCalc*\n"),
12957  AUTHORS("Oliver Lemke"),
12958  OUT("propmat_clearsky_agenda_checked"),
12959  GOUT(),
12960  GOUT_TYPE(),
12961  GOUT_DESC(),
12962  IN("abs_species", "propmat_clearsky_agenda"),
12963  GIN(),
12964  GIN_TYPE(),
12965  GIN_DEFAULT(),
12966  GIN_DESC()));
12967 
12968  md_data_raw.push_back(create_mdrecord(
12969  NAME("propmat_clearsky_fieldCalc"),
12970  DESCRIPTION(
12971  "Calculate (vector) gas absorption coefficients for all points in the\n"
12972  "atmosphere.\n"
12973  "\n"
12974  "This is useful in two different contexts:\n"
12975  "\n"
12976  "1. For testing and plotting gas absorption. (For RT calculations, gas\n"
12977  "absorption is calculated or extracted locally, therefore there is no\n"
12978  "need to calculate a global field. But this method is handy for easy\n"
12979  "plotting of absorption vs. pressure, for example.)\n"
12980  "\n"
12981  "2. Inside the scattering region, monochromatic absorption is\n"
12982  "pre-calculated for the entire atmospheric field.\n"
12983  "\n"
12984  "The calculation itself is performed by the\n"
12985  "*propmat_clearsky_agenda*.\n"),
12986  AUTHORS("Stefan Buehler, Richard Larsson"),
12987  OUT("propmat_clearsky_field", "nlte_source_field"),
12988  GOUT(),
12989  GOUT_TYPE(),
12990  GOUT_DESC(),
12991  IN("atmfields_checked",
12992  "f_grid",
12993  "stokes_dim",
12994  "p_grid",
12995  "lat_grid",
12996  "lon_grid",
12997  "t_field",
12998  "vmr_field",
12999  "nlte_field",
13000  "mag_u_field",
13001  "mag_v_field",
13002  "mag_w_field",
13003  "propmat_clearsky_agenda"),
13004  GIN("doppler", "los"),
13005  GIN_TYPE("Vector", "Vector"),
13006  GIN_DEFAULT("[]", "[]"),
13007  GIN_DESC("A vector of doppler shift values in Hz. Must either be "
13008  "empty or have same dimension as p_grid.",
13009  "Line of sight")));
13010 
13011  md_data_raw.push_back(create_mdrecord(
13012  NAME("psdAbelBoutle12"),
13013  DESCRIPTION(
13014  "Abel and Boutle [2012] particle size distribution for rain.\n"
13015  "\n"
13016  "Reference: Abel and Boutle, An improved representation of the \n"
13017  "raindrop size distribution for single-moment microphysics schemes,\n"
13018  "QJRMS, 2012.\n"
13019  "\n"
13020  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13021  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13022  "The input data in *pnd_agenda_input* shall be rain mass content in\n"
13023  "unit of [kg/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13024  "but the same name must be used in *particle_bulkprop_names* and\n"
13025  "*dpnd_data_dx_names*.\n"
13026  "\n"
13027  "Particles are assumed to be near-spherical, ie. *psd_size_grid* can\n"
13028  "either be in terms of volume (or mass) equivalent diameter or\n"
13029  "maximum diameter.\n"
13030  "\n"
13031  "Derivatives are obtained analytically.\n"
13032  "\n"
13033  "The validity range of mass content is not limited. Negative mass\n"
13034  "contents will produce negative psd values following a distribution\n"
13035  "given by abs(RWC), ie. abs(psd)=f(abs(RWC)).\n"
13036  "\n"
13037  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13038  "picky=0, or an error is thrown if picky=1.\n"),
13039  AUTHORS("Patrick Eriksson"),
13040  OUT("psd_data", "dpsd_data_dx"),
13041  GOUT(),
13042  GOUT_TYPE(),
13043  GOUT_DESC(),
13044  IN("psd_size_grid",
13045  "pnd_agenda_input_t",
13046  "pnd_agenda_input",
13047  "pnd_agenda_input_names",
13048  "dpnd_data_dx_names",
13049  "scat_species_a",
13050  "scat_species_b"),
13051  GIN("t_min", "t_max", "picky"),
13052  GIN_TYPE("Numeric", "Numeric", "Index"),
13053  GIN_DEFAULT("273", "373", "0"),
13054  GIN_DESC(
13055  "Low temperature limit to calculate a psd.",
13056  "High temperature limit to calculate a psd.",
13057  "Flag whether to be strict with parametrization value checks.")));
13058 
13059  md_data_raw.push_back(create_mdrecord(
13060  NAME("psdDelanoeEtAl14"),
13061  DESCRIPTION(
13062  "Normalized PSD as proposed in Delanoë et al. ((2014)),\n"
13063  "\n"
13064  "Title and journal:\n"
13065  "'Normalized particle size distribution for remote sensing\n"
13066  "application', J. Geophys. Res. Atmos., 119, 4204–422.\n"
13067  "\n"
13068  "The PSD has two independent parameters *n0Star*, the intercept\n"
13069  "parameter, and *Dm*, the volume-weighted diameter.\n"
13070  "This implementation expects as input two out of the following\n"
13071  "three quantities: *iwc*, *n0Star*, *Dm*. In this case one of\n"
13072  "the input parameters *iwc*, *n0Star*, *Dm* must be set to -999.\n*"
13073  "It is also possible to provide only *iwc*, in which case an a\n"
13074  "priori assumption will be used to deduce *n0Star* from temperature.\n"
13075  "In this case both *n0Star* and *Dm* must be set to -999.0.\n"
13076  "\n"
13077  "This PSD is not defined for vanishing concentrations of\n"
13078  "scatterers as it requires normalization by *Dm*. It is up\n"
13079  "to the user to ensure that the value of *Dm* is sufficiently\n"
13080  "large. An error is thrown if *Dm* is zero or below the value\n"
13081  "provided by *dm_min*.\n"),
13082  AUTHORS("Simon Pfreundschuh"),
13083  OUT("psd_data", "dpsd_data_dx"),
13084  GOUT(),
13085  GOUT_TYPE(),
13086  GOUT_DESC(),
13087  IN("psd_size_grid",
13088  "pnd_agenda_input_t",
13089  "pnd_agenda_input",
13090  "pnd_agenda_input_names",
13091  "dpnd_data_dx_names"),
13092  GIN("iwc",
13093  "n0Star",
13094  "Dm",
13095  "rho",
13096  "alpha",
13097  "beta",
13098  "t_min",
13099  "t_max",
13100  "dm_min",
13101  "picky"),
13102  GIN_TYPE("Numeric",
13103  "Numeric",
13104  "Numeric",
13105  "Numeric",
13106  "Numeric",
13107  "Numeric",
13108  "Numeric",
13109  "Numeric",
13110  "Numeric",
13111  "Index"),
13112  GIN_DEFAULT("NaN",
13113  "NaN",
13114  "NaN",
13115  "917.6",
13116  "-0.237",
13117  "1.839",
13118  NODEF,
13119  NODEF,
13120  "-1.0",
13121  "0"),
13122  GIN_DESC(
13123  "Ice water content",
13124  "Intercept parameter",
13125  "Volume weighted diameter",
13126  "Density of ice",
13127  "*alpha* parameter of the shape function",
13128  "*beta* paramter of the shape function",
13129  "Low temperature limit to calculate a psd.",
13130  "High temperature limit to calculate a psd.",
13131  "Lower threshold for *Dm* below which an error is thrown.",
13132  "Flag whether to be strict with parametrization value checks.")));
13133 
13134  md_data_raw.push_back(create_mdrecord(
13135  NAME("psdFieldEtAl07"),
13136  DESCRIPTION(
13137  "The Field et al. [2007] particle size distribution for snow and\n"
13138  "cloud ice.\n"
13139  "\n"
13140  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13141  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13142  "The input data in *pnd_agenda_input* shall be ice hydrometeor mass\n"
13143  "content in unit of [kg/m3]. The naming used is *pnd_agenda_input_names*\n"
13144  "is free but the same name must be used in *particle_bulkprop_names* and\n"
13145  "*dpnd_data_dx_names*.\n"
13146  "\n"
13147  "*psd_size_grid* shall contain size in terms of maximum diameter.\n"
13148  "\n"
13149  "Derivatives are obtained by perturbation of 0.1%, but not less than\n"
13150  "1e-9 kg/m3.\n"
13151  "\n"
13152  "Both parametrization for tropics and midlatitudes are handled,\n"
13153  "governed by setting of *regime*, where \"TR\" selectes the tropical\n"
13154  "case, and \"ML\" the midlatitude one.\n"
13155  "\n"
13156  "The validity range of mass content is not limited. Negative mass\n"
13157  "contents will produce negative psd values following a distribution\n"
13158  "given by abs(IWC), ie. abs(psd)=f(abs(IWC)).\n"
13159  "\n"
13160  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13161  "picky=0, or an error is thrown if picky=1.\n"
13162  "\n"
13163  "For temperatures below *t_min_psd*, the size distribution is\n"
13164  "calculated for T = *t_min_psd*. Likewise, for temperatures above\n"
13165  "*t_max_psd*, the distribution is derived for T = *t_max_psd*.\n"
13166  "\n"
13167  "Defaults of *t_min_psd* and *t_max_psd* were set considering that\n"
13168  "the parametrization has been derived from measurements over\n"
13169  "temperatures of -60C to 0C."
13170  "\n"
13171  "Checks of the sanity of the mass-dimension relationship are performed\n"
13172  "Errors are thrown if:\n"
13173  "- Mass-dimension relation exponent *scat_species_b* is outside\n"
13174  " [*beta_min*, *beta_max*].\n"),
13175  AUTHORS("Jana Mendrok"),
13176  OUT("psd_data", "dpsd_data_dx"),
13177  GOUT(),
13178  GOUT_TYPE(),
13179  GOUT_DESC(),
13180  IN("psd_size_grid",
13181  "pnd_agenda_input_t",
13182  "pnd_agenda_input",
13183  "pnd_agenda_input_names",
13184  "dpnd_data_dx_names",
13185  "scat_species_a",
13186  "scat_species_b"),
13187  GIN("regime",
13188  "t_min",
13189  "t_max",
13190  "t_min_psd",
13191  "t_max_psd",
13192  "beta_min",
13193  "beta_max",
13194  "picky"),
13195  GIN_TYPE("String",
13196  "Numeric",
13197  "Numeric",
13198  "Numeric",
13199  "Numeric",
13200  "Numeric",
13201  "Numeric",
13202  "Index"),
13203  GIN_DEFAULT(NODEF, "0", "290.", "200.", "273.15", "1.01", "4", "0"),
13204  GIN_DESC(
13205  "Parametrization regime (\"TR\"=tropical or \"ML\"=midlatitude).",
13206  "Low temperature limit to calculate a psd.",
13207  "High temperature limit to calculate a psd.",
13208  "Low temperature limit to use as paramtrization temperature.",
13209  "High temperature limit to use as paramtrization temperature.",
13210  "Low *b* limit (only if picky).",
13211  "High *b* limit (only if picky).",
13212  "Flag whether to be strict with parametrization value checks.")));
13213 
13214  md_data_raw.push_back(create_mdrecord(
13215  NAME("psdFieldEtAl19"),
13216  DESCRIPTION(
13217  "The Field [2019] particle size distribution for hail.\n"
13218  "\n"
13219  "Reference: Field, Normalized hail particle size distributions from the T-28\n"
13220  "storm-penetrating aircraft, JAMC, 2019\n"
13221  "\n"
13222  "This is a 1-parmater PSD i.e. *pnd_agenda_input* shall have one column and\n"
13223  "*pnd_agenda_input_names* shall contain a single string.\n"
13224  "The input data in *pnd_agenda_input* shall be hail mass content in\n"
13225  "unit of [kg/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13226  "but the same name must be used in *particle_bulkprop_names* and\n"
13227  "*dpnd_data_dx_names*.\n"
13228  "The parameters assume a constant effective density, i.e. scat_species_b \approx 3\n"
13229  "\n"
13230  "Derivatives are obtained analytically.\n"
13231  "\n"
13232  "The validity range of mass content is not limited. Negative mass\n"
13233  "contents will produce negative psd values following a distribution\n"
13234  "given by abs(HWC), ie. abs(psd)=f(abs(HWC)).\n"
13235  "\n"
13236  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13237  "picky=0, or an error is thrown if picky=1.\n"),
13238  AUTHORS("Stuart Fox"),
13239  OUT("psd_data", "dpsd_data_dx"),
13240  GOUT(),
13241  GOUT_TYPE(),
13242  GOUT_DESC(),
13243  IN("psd_size_grid",
13244  "pnd_agenda_input_t",
13245  "pnd_agenda_input",
13246  "pnd_agenda_input_names",
13247  "dpnd_data_dx_names",
13248  "scat_species_a",
13249  "scat_species_b"),
13250  GIN("t_min", "t_max", "picky"),
13251  GIN_TYPE("Numeric", "Numeric", "Index"),
13252  GIN_DEFAULT(NODEF, NODEF, "0"),
13253  GIN_DESC(
13254  "Low temperature limit to calculate a psd.",
13255  "High temperature limit to calculate a psd.",
13256  "Flag whether to be strict with parametrization value checks.")));
13257 
13258  md_data_raw.push_back(create_mdrecord(
13259  NAME("psdMcFarquaharHeymsfield97"),
13260  DESCRIPTION(
13261  "McFarquahar and Heymsfield [1997] particle size distribution\n"
13262  "for cloud ice.\n"
13263  "\n"
13264  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13265  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13266  "The input data in *pnd_agenda_input* shall be ice hydrometeor mass\n"
13267  "content in unit of [kg/m3]. The naming used is *pnd_agenda_input_names*\n"
13268  "is free but the same name must be used in *particle_bulkprop_names* and\n"
13269  "*dpnd_data_dx_names*.\n"
13270  "\n"
13271  "*psd_size_grid* shall contain size in terms of volume equivalent diameter.\n"
13272  "\n"
13273  "Derivatives are obtained by perturbation of 0.1%, but not less than\n"
13274  "1e-9 kg/m3.\n"
13275  "\n"
13276  "The validity range of mass content is not limited. Negative mass\n"
13277  "contents will produce negative psd values following a distribution\n"
13278  "given by abs(IWC), ie. abs(psd)=f(abs(IWC)).\n"
13279  "\n"
13280  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13281  "picky=0, or an error is thrown if picky=1.\n"
13282  "\n"
13283  "For temperatures below *t_min_psd*, the size distribution is\n"
13284  "calculated for T = *t_min_psd*. Likewise, for temperatures above\n"
13285  "*t_max_psd*, the distribution is derived for T = *t_max_psd*.\n"
13286  "\n"
13287  "Defaults of *t_min_psd* and *t_max_psd* were set considering that\n"
13288  "the parametrization has been derived from measurements over\n"
13289  "temperatures of -70C to -20C."
13290  "\n"
13291  "The noisy option can not be used together with calculation of\n"
13292  "derivatives (ie. when *dpnd_data_dx_names* is not empty).\n"),
13293  AUTHORS("Patrick Eriksson, Jana Mendrok"),
13294  OUT("psd_data", "dpsd_data_dx"),
13295  GOUT(),
13296  GOUT_TYPE(),
13297  GOUT_DESC(),
13298  IN("psd_size_grid",
13299  "pnd_agenda_input_t",
13300  "pnd_agenda_input",
13301  "pnd_agenda_input_names",
13302  "dpnd_data_dx_names",
13303  "scat_species_a",
13304  "scat_species_b"),
13305  GIN("t_min", "t_max", "t_min_psd", "t_max_psd", "picky", "noisy"),
13306  GIN_TYPE("Numeric", "Numeric", "Numeric", "Numeric", "Index", "Index"),
13307  GIN_DEFAULT("0", "280.", "180", "273.15", "0", "0"),
13308  GIN_DESC("Low temperature limit to calculate a psd.",
13309  "High temperature limit to calculate a psd.",
13310  "Low temperature limit to use as paramtrization temperature.",
13311  "High temperature limit to use as paramtrization temperature.",
13312  "Flag whether to be strict with parametrization value checks.",
13313  "Distribution parameter perturbance flag")));
13314 
13315  md_data_raw.push_back(create_mdrecord(
13316  NAME("psdMilbrandtYau05"),
13317  DESCRIPTION(
13318  "Calculates *psd_data* and *dpsd_data_dx* following Milbrandt and Yau (2005)\n"
13319  "two moment particle size distribution for cloud water, cloud ice,\n"
13320  "rain, snow, graupel and hail, which is used in the GEM model.\n"
13321  "\n"
13322  "WSM for use in *pnd_agenda_array* for mapping *particle_bulkprop_field*\n"
13323  "to *pnd_field* using *pnd_fieldCalcFromParticleBulkProps*.\n"
13324  "Produces the particle size distribution values (dN/dD) and their\n"
13325  "derivates with respect to independent variables x by *dpnd_data_dx_names*\n"
13326  "over multiple particle sizes and atmospheric levels (or SWC/T\n"
13327  "combinations).\n"
13328  "\n"
13329  "*psd_size_grid* is considered to be in terms of maximum diameter.\n"
13330  "WC is considered to be in terms of mass content (or mass density),\n"
13331  "ie. units of [kg/m3]. N_tot in terms of number density, ie. units of [1/m3] ."
13332  "\n"
13333  "Derivatives with respect to WC and N_tot are obtained analytically.\n"
13334  "\n"
13335  "Six particle size distributions for the different hydrometeors are handled,\n"
13336  "governed by setting of *hydrometeor_type*, where \n"
13337  " \"cloud_water\" selects cloud liquid water , \n"
13338  " \"cloud_ice\" selects cloud ice, \n"
13339  " \"snow\" selects snow, \n"
13340  " \"rain\" selects rain, \n"
13341  " \"graupel\" selects graupel, and \n"
13342  " \"hail\" selects hail, \n"
13343  "\n"
13344  "Requirements:\n"
13345  "\n"
13346  "*pnd_agenda_input_names* must include :\n"
13347  " [\"X-mass_density\", \"X-number_density\" ]. \"X\" is an arbitrary name\n"
13348  "The entries in *dpnd_data_dx_names* (ie. the allowed\n"
13349  "independent variablea ) can be \"X-mass_density\" and\\or \n"
13350  "\"X-number_density\".\n"
13351  "\n"
13352  "The validity range of WC is not limited. Negative WC will produce\n"
13353  "negative psd values following a distribution given by abs(WC), ie.\n"
13354  "abs(psd)=f(abs(WC)).\n"
13355  "\n"
13356  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13357  "picky=0, or an error is thrown if picky=1.\n"
13358 
13359  ),
13360  AUTHORS("Manfred Brath"),
13361  OUT("psd_data", "dpsd_data_dx"),
13362  GOUT(),
13363  GOUT_TYPE(),
13364  GOUT_DESC(),
13365  IN("psd_size_grid",
13366  "pnd_agenda_input_t",
13367  "pnd_agenda_input",
13368  "pnd_agenda_input_names",
13369  "dpnd_data_dx_names"),
13370  GIN("hydrometeor_type", "t_min", "t_max", "picky"),
13371  GIN_TYPE("String", "Numeric", "Numeric", "Index"),
13372  GIN_DEFAULT(NODEF, "0", "999", "0"),
13373  GIN_DESC(
13374  "Hydrometeor type (see above description).",
13375  "Low temperature limit to calculate a psd.",
13376  "High temperature limit to calculate a psd.",
13377  "Flag whether to be strict with parametrization value checks.")));
13378 
13379  md_data_raw.push_back(create_mdrecord(
13380  NAME("psdModifiedGamma"),
13381  DESCRIPTION(
13382  "Modified gamma distribution PSD using n0, mu, la and ga as parameters.\n"
13383  "\n"
13384  "The modified gamma distribution is a 4-parameter (n0, mu, la and ga)\n"
13385  "distribution [Petty & Huang, JAS, 2011)]:\n"
13386  " n(x) = n0 * x^mu * exp( -la*x^ga )\n"
13387  "where x is particle size or mass.\n"
13388  "\n"
13389  "The parameters can be given in two ways, either by *pnd_agenda_input* or\n"
13390  "as GIN arguments. The first option allows the parameter to vary, while\n"
13391  "in the second case the parameter gets a constant value. If a parameter is\n"
13392  "part of *pnd_agenda_input*, the corresponding GIN argument must be set\n"
13393  "to NaN (which is default). This means that the number of columns in\n"
13394  "*pnd_agenda_input* and the number of non-NaN choices for n0, mu, la and\n"
13395  "ga must add up to four.\n"
13396  "\n"
13397  "Data in *pnd_agenda_input* are linked to the MGD parameters in term of\n"
13398  "order, the naming in *pnd_agenda_input_names* is free. If all four\n"
13399  "parameteras are specified by *pnd_agenda_input*, the data in the first\n"
13400  "column are taken as n0, the second column as mu etc. If a parameter is\n"
13401  "given as a GIN argument, the columns are just shifted with one position.\n"
13402  "For example, if mu and ga are specified as GIN arguments, *pnd_agenda_input*\n"
13403  "shall have two columns, with n0-values in the first one and la-values in\n"
13404  "the second one.\n"
13405  "\n"
13406  "The GIN route is especially suitable for selecting special cases of MGD.\n"
13407  "For example, by setting mu=0 and ga=1, an exponential PSD is obtained:\n"
13408  " n(x) = n0 * exp( -la*x )\n"
13409  "With mu=1 and ga=1, the gamma PSD is obtained:\n"
13410  " n(x) = n0 * x^mu *exp( -la*x )\n"
13411  "There should be little overhead in using the method for exponential\n"
13412  "and gamma PSDs, there is an internal switch to dedicated expressions\n"
13413  "for those PSDs.\n"
13414  "\n"
13415  "Derivatives can only be obtained for parameters that are specified by\n"
13416  "*pnd_agenda_input*.\n"
13417  "\n"
13418  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13419  "picky=0, or an error is thrown if picky=1.\n"
13420  "\n"
13421  "These requirements apply to the MGD parameters:\n"
13422  " la > 0\n"
13423  " ga > 0\n"),
13424  AUTHORS("Patrick Eriksson"),
13425  OUT("psd_data", "dpsd_data_dx"),
13426  GOUT(),
13427  GOUT_TYPE(),
13428  GOUT_DESC(),
13429  IN("psd_size_grid",
13430  "pnd_agenda_input_t",
13431  "pnd_agenda_input",
13432  "pnd_agenda_input_names",
13433  "dpnd_data_dx_names"),
13434  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13435  GIN_TYPE("Numeric",
13436  "Numeric",
13437  "Numeric",
13438  "Numeric",
13439  "Numeric",
13440  "Numeric",
13441  "Index"),
13442  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13443  GIN_DESC(
13444  "n0",
13445  "mu",
13446  "la",
13447  "ga",
13448  "Low temperature limit to calculate a psd.",
13449  "High temperature limit to calculate a psd.",
13450  "Flag whether to be strict with parametrization value checks.")));
13451 
13452  md_data_raw.push_back(create_mdrecord(
13453  NAME("psdModifiedGammaMass"),
13454  DESCRIPTION(
13455  "Modified gamma distribution (MGD) PSD, with mass content as input.\n"
13456  "\n"
13457  "See *psdModifiedGamma* for a defintion of MGD parameters and how\n"
13458  "this PSD is handled in ARTS. Only deviations with respect to\n"
13459  "*psdModifiedGamma* are described here.\n"
13460  "\n"
13461  "This version of MGD PSD takes mass content as first input argument.\n"
13462  "This means that the first column of *pnd_agenda_input* shall hold\n"
13463  "mass content data.\n"
13464  "\n"
13465  "The mass content basically replaces one of the standard parameters\n"
13466  "(n0, mu, la and ga). This parameter is denoted as the dependent one.\n"
13467  "The dependent parameter is selected by setting the corresponding GIN\n"
13468  "to -999. So far only n0 and la are allowed to be dependent.\n"
13469  "\n"
13470  "Regarding remaining columns in *pnd_agenda_input* and constant\n"
13471  "parameter values (by GIN) follows the same principle as for\n"
13472  "*psdModifiedGamma* except that mass is always in column one (as\n"
13473  "mentioned) and that there is no position in *pnd_agenda_input*\n"
13474  "for the dependent parameter.\n"
13475  "\n"
13476  "These requirements apply to the MGD parameters:\n"
13477  " mu + scat_species_b + 1 > 0\n"
13478  " la > 0\n"
13479  " ga > 0\n"
13480  " If la is the dependent parameter, mass content must be > 0.\n"),
13481  AUTHORS("Patrick Eriksson"),
13482  OUT("psd_data", "dpsd_data_dx"),
13483  GOUT(),
13484  GOUT_TYPE(),
13485  GOUT_DESC(),
13486  IN("psd_size_grid",
13487  "pnd_agenda_input_t",
13488  "pnd_agenda_input",
13489  "pnd_agenda_input_names",
13490  "dpnd_data_dx_names",
13491  "scat_species_a",
13492  "scat_species_b"),
13493  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13494  GIN_TYPE("Numeric",
13495  "Numeric",
13496  "Numeric",
13497  "Numeric",
13498  "Numeric",
13499  "Numeric",
13500  "Index"),
13501  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13502  GIN_DESC(
13503  "n0",
13504  "mu",
13505  "la",
13506  "ga",
13507  "Low temperature limit to calculate a psd.",
13508  "High temperature limit to calculate a psd.",
13509  "Flag whether to be strict with parametrization value checks.")));
13510 
13511  md_data_raw.push_back(create_mdrecord(
13512  NAME("psdModifiedGammaMassNtot"),
13513  DESCRIPTION(
13514  "Modified gamma distribution PSD, with mass content and total number\n"
13515  "density (Ntot) as inputs.\n"
13516  "\n"
13517  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13518  "mass content and total number density as first two arguments. This\n"
13519  "means that the first and second column of *pnd_agenda_input* shall\n"
13520  "hold mass content and Ntot, respectively. Accordingly, the number\n"
13521  "of dependent parameters is two.\n"
13522  "\n"
13523  "These requirements apply:\n"
13524  " mu + 1 > 0\n"
13525  " la > 0\n"
13526  " ga > 0\n"
13527  " Ntot must be > 0.\n"),
13528  AUTHORS("Patrick Eriksson"),
13529  OUT("psd_data", "dpsd_data_dx"),
13530  GOUT(),
13531  GOUT_TYPE(),
13532  GOUT_DESC(),
13533  IN("psd_size_grid",
13534  "pnd_agenda_input_t",
13535  "pnd_agenda_input",
13536  "pnd_agenda_input_names",
13537  "dpnd_data_dx_names",
13538  "scat_species_a",
13539  "scat_species_b"),
13540  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13541  GIN_TYPE("Numeric",
13542  "Numeric",
13543  "Numeric",
13544  "Numeric",
13545  "Numeric",
13546  "Numeric",
13547  "Index"),
13548  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13549  GIN_DESC(
13550  "n0",
13551  "mu",
13552  "la",
13553  "ga",
13554  "Low temperature limit to calculate a psd.",
13555  "High temperature limit to calculate a psd.",
13556  "Flag whether to be strict with parametrization value checks.")));
13557 
13558  md_data_raw.push_back(create_mdrecord(
13559  NAME("psdModifiedGammaMassMeanParticleMass"),
13560  DESCRIPTION(
13561  "Modified gamma distribution PSD, with mass content and mean particle\n"
13562  "mass (Mmean) as inputs.\n"
13563  "\n"
13564  "\"Mean particle mass\" is here defined as the mass content divided with\n"
13565  "the total number density.\n"
13566  "\n"
13567  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13568  "mass content and mean particle mass as first two arguments. This\n"
13569  "means that the first and second column of *pnd_agenda_input* shall\n"
13570  "hold mass content and Mmean, respectively. Accordingly, the number\n"
13571  "of dependent parameters is two.\n"
13572  "\n"
13573  "These requirements apply to the MGD parameters:\n"
13574  " mu + 1 > 0\n"
13575  " la > 0\n"
13576  " ga > 0\n"
13577  " Mmean must be > 0.\n"),
13578  AUTHORS("Patrick Eriksson"),
13579  OUT("psd_data", "dpsd_data_dx"),
13580  GOUT(),
13581  GOUT_TYPE(),
13582  GOUT_DESC(),
13583  IN("psd_size_grid",
13584  "pnd_agenda_input_t",
13585  "pnd_agenda_input",
13586  "pnd_agenda_input_names",
13587  "dpnd_data_dx_names",
13588  "scat_species_a",
13589  "scat_species_b"),
13590  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13591  GIN_TYPE("Numeric",
13592  "Numeric",
13593  "Numeric",
13594  "Numeric",
13595  "Numeric",
13596  "Numeric",
13597  "Index"),
13598  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13599  GIN_DESC(
13600  "n0",
13601  "mu",
13602  "la",
13603  "ga",
13604  "Low temperature limit to calculate a psd.",
13605  "High temperature limit to calculate a psd.",
13606  "Flag whether to be strict with parametrization value checks.")));
13607 
13608  md_data_raw.push_back(create_mdrecord(
13609  NAME("psdModifiedGammaMassSingleMoment"),
13610  DESCRIPTION(
13611  "Modified gamma distribution PSD, with mass content as input.\n"
13612  "\n"
13613  "The intercept parameter N0 is assumed dependent on the slope parameter\n"
13614  "lambda, such that N0=N_alpha*lambda^n_b with fixed N_alpha and n_b.\n"
13615  "This is a common form for many PSD parametrizations for use with\n"
13616  "single-moment mass-based schemes.\n"
13617  "\n"
13618  "This version of MGD PSD takes mass content as first input argument.\n"
13619  "This means that the first column of *pnd_agenda_input* shall hold\n"
13620  "mass content data. The dependent parameter is assumed to be lambda.\n"),
13621  AUTHORS("Stuart Fox"),
13622  OUT("psd_data", "dpsd_data_dx"),
13623  GOUT(),
13624  GOUT_TYPE(),
13625  GOUT_DESC(),
13626  IN("psd_size_grid",
13627  "pnd_agenda_input_t",
13628  "pnd_agenda_input",
13629  "pnd_agenda_input_names",
13630  "dpnd_data_dx_names",
13631  "scat_species_a",
13632  "scat_species_b"),
13633  GIN("n_alpha", "n_b", "mu", "gamma", "t_min", "t_max", "picky"),
13634  GIN_TYPE("Numeric",
13635  "Numeric",
13636  "Numeric",
13637  "Numeric",
13638  "Numeric",
13639  "Numeric",
13640  "Index"),
13642  GIN_DESC(
13643  "n_alpha",
13644  "n_b",
13645  "mu",
13646  "gamma",
13647  "Low temperature limit to calculate a psd.",
13648  "High temperature limit to calculate a psd.",
13649  "Flag whether to be strict with parametrization value checks.")));
13650 
13651  md_data_raw.push_back(create_mdrecord(
13652  NAME("psdModifiedGammaMassXmean"),
13653  DESCRIPTION(
13654  "Modified gamma distribution PSD, with mass content and mean size\n"
13655  "(Xmean) as inputs.\n"
13656  "\n"
13657  "\"Mean size\" is here defined as mass weighted size. Remembering that\n"
13658  "mass is a*x^b, this mean size can be expressed as M_b+1/M_b where M_b\n"
13659  "is b:th moment of the PSD (see e.g. Eq. 17 in Petty&Huang, JAS, 2011).\n"
13660  "\n"
13661  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13662  "mass content and mass size as first two arguments. This means that\n"
13663  "the first and second column of *pnd_agenda_input* shall hold mass\n"
13664  "content and Xmean, respectively. Accordingly, the number of dependent\n"
13665  "parameters is two.\n"
13666  "\n"
13667  "These requirements apply to the MGD parameters:\n"
13668  " mu + scat_species_b + 1 > 0\n"
13669  " la > 0\n"
13670  " ga > 0\n"
13671  " Xmean must be > 0.\n"),
13672  AUTHORS("Patrick Eriksson"),
13673  OUT("psd_data", "dpsd_data_dx"),
13674  GOUT(),
13675  GOUT_TYPE(),
13676  GOUT_DESC(),
13677  IN("psd_size_grid",
13678  "pnd_agenda_input_t",
13679  "pnd_agenda_input",
13680  "pnd_agenda_input_names",
13681  "dpnd_data_dx_names",
13682  "scat_species_a",
13683  "scat_species_b"),
13684  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13685  GIN_TYPE("Numeric",
13686  "Numeric",
13687  "Numeric",
13688  "Numeric",
13689  "Numeric",
13690  "Numeric",
13691  "Index"),
13692  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13693  GIN_DESC(
13694  "n0",
13695  "mu",
13696  "la",
13697  "ga",
13698  "Low temperature limit to calculate a psd.",
13699  "High temperature limit to calculate a psd.",
13700  "Flag whether to be strict with parametrization value checks.")));
13701 
13702  md_data_raw.push_back(create_mdrecord(
13703  NAME("psdModifiedGammaMassXmedian"),
13704  DESCRIPTION(
13705  "Modified gamma distribution PSD, with mass content and median size\n"
13706  "(Xmedian) as inputs.\n"
13707  "\n"
13708  "\n"
13709  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13710  "mass content and median size as first two arguments. This means that\n"
13711  "the first and second column of *pnd_agenda_input* shall hold mass\n"
13712  "content and Xmedian, respectively. Accordingly, the number of\n"
13713  "dependent parameters is two.\n"
13714  "\n"
13715  "These requirements apply to the MGD parameters:\n"
13716  " mu + scat_species_b + 1 > 0\n"
13717  " la > 0\n"
13718  " ga > 0\n"
13719  " Xmedian must be > 0.\n"),
13720  AUTHORS("Patrick Eriksson"),
13721  OUT("psd_data", "dpsd_data_dx"),
13722  GOUT(),
13723  GOUT_TYPE(),
13724  GOUT_DESC(),
13725  IN("psd_size_grid",
13726  "pnd_agenda_input_t",
13727  "pnd_agenda_input",
13728  "pnd_agenda_input_names",
13729  "dpnd_data_dx_names",
13730  "scat_species_a",
13731  "scat_species_b"),
13732  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13733  GIN_TYPE("Numeric",
13734  "Numeric",
13735  "Numeric",
13736  "Numeric",
13737  "Numeric",
13738  "Numeric",
13739  "Index"),
13740  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13741  GIN_DESC(
13742  "n0",
13743  "mu",
13744  "la",
13745  "ga",
13746  "Low temperature limit to calculate a psd.",
13747  "High temperature limit to calculate a psd.",
13748  "Flag whether to be strict with parametrization value checks.")));
13749 
13750  md_data_raw.push_back(create_mdrecord(
13751  NAME("psdMonoDispersive"),
13752  DESCRIPTION(
13753  "Mono-dispersive PSD, with number density given.\n"
13754  "\n"
13755  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13756  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13757  "The input data in *pnd_agenda_input* shall be number densities, in\n"
13758  "unit of [#/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13759  "but the same name must be used in *particle_bulkprop_names* and\n"
13760  "*dpnd_data_dx_names*.\n"
13761  "\n"
13762  "The method checks that the scattering species indicated (by\n"
13763  "*species_index*) has a single element, and just inserts the provided\n"
13764  "number density in *psd_data*.\n"
13765  "\n"
13766  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13767  "picky=0, or an error is thrown if picky=1.\n"),
13768  AUTHORS("Patrick Eriksson"),
13769  OUT("psd_data", "dpsd_data_dx"),
13770  GOUT(),
13771  GOUT_TYPE(),
13772  GOUT_DESC(),
13773  IN("pnd_agenda_input_t",
13774  "pnd_agenda_input",
13775  "pnd_agenda_input_names",
13776  "dpnd_data_dx_names",
13777  "scat_meta"),
13778  GIN("species_index", "t_min", "t_max", "picky"),
13779  GIN_TYPE("Index", "Numeric", "Numeric", "Index"),
13780  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
13781  GIN_DESC(
13782  "The index of the scattering species of concern (0-based).",
13783  "Low temperature limit to calculate a psd.",
13784  "High temperature limit to calculate a psd.",
13785  "Flag whether to be strict with parametrization value checks.")));
13786 
13787  md_data_raw.push_back(create_mdrecord(
13788  NAME("psdMonoMass"),
13789  DESCRIPTION(
13790  "Mono-dispersive PSD, with mass content given.\n"
13791  "\n"
13792  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13793  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13794  "The input data in *pnd_agenda_input* shall be mass contents, in\n"
13795  "unit of [#/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13796  "but the same name must be used in *particle_bulkprop_names* and\n"
13797  "*dpnd_data_dx_names*.\n"
13798  "\n"
13799  "The method checks that the scattering species indicated (by\n"
13800  "*species_index*) has a single element, and sets *psd_data* based\n"
13801  "on the mass contents given and the particle mass (derived from\n"
13802  "*scat_meta*).\n"
13803  "\n"
13804  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13805  "picky=0, or an error is thrown if picky=1.\n"),
13806  AUTHORS("Patrick Eriksson"),
13807  OUT("psd_data", "dpsd_data_dx"),
13808  GOUT(),
13809  GOUT_TYPE(),
13810  GOUT_DESC(),
13811  IN("pnd_agenda_input_t",
13812  "pnd_agenda_input",
13813  "pnd_agenda_input_names",
13814  "dpnd_data_dx_names",
13815  "scat_meta"),
13816  GIN("species_index", "t_min", "t_max", "picky"),
13817  GIN_TYPE("Index", "Numeric", "Numeric", "Index"),
13818  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
13819  GIN_DESC(
13820  "The index of the scattering species of concern (0-based).",
13821  "Low temperature limit to calculate a psd.",
13822  "High temperature limit to calculate a psd.",
13823  "Flag whether to be strict with parametrization value checks.")));
13824 
13825  md_data_raw.push_back(create_mdrecord(
13826  NAME("psdSeifertBeheng06"),
13827  DESCRIPTION(
13828  "Calculates *psd_data* and *dpsd_data_dx* following Seifert and Beheng (2006)\n"
13829  "two moment particle size distribution for cloud water, cloud ice,\n"
13830  "rain, snow, graupel and hail, which is used in the ICON model.\n"
13831  "\n"
13832  "WSM for use in *pnd_agenda_array* for mapping *particle_bulkprop_field*\n"
13833  "to *pnd_field* using *pnd_fieldCalcFromParticleBulkProps*.\n"
13834  "Produces the particle size distribution values (dN/dD) and their\n"
13835  "derivates with respect to independent variables x by *dpnd_data_dx_names*\n"
13836  "over multiple particle sizes and atmospheric levels (or SWC/T\n"
13837  "combinations).\n"
13838  "\n"
13839  "*psd_size_grid* is considered to be in terms of mass.\n"
13840  "WC is considered to be in terms of mass content (or mass density),\n"
13841  "ie. units of [kg/m3]. N_tot in terms of number density, ie. units of [1/m3] ."
13842  "\n"
13843  "Derivatives with respect to WC and N_tot are obtained analytically.\n"
13844  "\n"
13845  "Six particle size distributions for the different hydrometeors are handled,\n"
13846  "governed by setting of *hydrometeor_type*, where \n"
13847  " \"cloud_water\" selects cloud liquid water , \n"
13848  " \"cloud_ice\" selects cloud ice, \n"
13849  " \"snow\" selects snow, \n"
13850  " \"rain\" selects rain, \n"
13851  " \"graupel\" selects graupel, and \n"
13852  " \"hail\" selects hail, \n"
13853  "\n"
13854  "Requirements:\n"
13855  "\n"
13856  "*pnd_agenda_input_names* must include :\n"
13857  " [\"X-mass_density\", \"X-number_density\" ]. \"X\" is an arbitrary name\n"
13858  "The entries in *dpnd_data_dx_names* (ie. the allowed\n"
13859  "independent variablea ) can be \"X-mass_density\" and\\or \n"
13860  "\"X-number_density\".\n"
13861  "\n"
13862  "The validity range of WC is not limited. Negative WC will produce\n"
13863  "negative psd values following a distribution given by abs(WC), ie.\n"
13864  "abs(psd)=f(abs(WC)).\n"
13865  "\n"
13866  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13867  "picky=0, or an error is thrown if picky=1.\n"
13868 
13869  ),
13870  AUTHORS("Manfred Brath"),
13871  OUT("psd_data", "dpsd_data_dx"),
13872  GOUT(),
13873  GOUT_TYPE(),
13874  GOUT_DESC(),
13875  IN("psd_size_grid",
13876  "pnd_agenda_input_t",
13877  "pnd_agenda_input",
13878  "pnd_agenda_input_names",
13879  "dpnd_data_dx_names"),
13880  GIN("hydrometeor_type", "t_min", "t_max", "picky"),
13881  GIN_TYPE("String", "Numeric", "Numeric", "Index"),
13882  GIN_DEFAULT(NODEF, "0", "999", "0"),
13883  GIN_DESC(
13884  "Hydrometeor type (see above description).",
13885  "Low temperature limit to calculate a psd.",
13886  "High temperature limit to calculate a psd.",
13887  "Flag whether to be strict with parametrization value checks.")));
13888 
13889  md_data_raw.push_back(create_mdrecord(
13890  NAME("psdWangEtAl16"),
13891  DESCRIPTION(
13892  "Wang et al. [2016] particle size distribution for rain.\n"
13893  "\n"
13894  "Reference: Wang et al., Investigation of liquid cloud microphysical\n"
13895  "properties of deep convective systems: 1. Parameterization raindrop\n"
13896  "size distribution and its application ..., 2016.\n"
13897  "\n"
13898  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13899  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13900  "The input data in *pnd_agenda_input* shall be rain mass content in\n"
13901  "unit of [kg/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13902  "but the same name must be used in *particle_bulkprop_names* and\n"
13903  "*dpnd_data_dx_names*.\n"
13904  "\n"
13905  "Particles are assumed to be near-spherical, ie. *psd_size_grid* can\n"
13906  "either be in terms of volume (or mass) equivalent diameter or\n"
13907  "maximum diameter.\n"
13908  "\n"
13909  "Derivatives are obtained analytically.\n"
13910  "\n"
13911  "The validity range of mass content is not limited. Negative mass\n"
13912  "contents will produce negative psd values following a distribution\n"
13913  "given by abs(RWC), ie. abs(psd)=f(abs(RWC)).\n"
13914  "\n"
13915  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13916  "picky=0, or an error is thrown if picky=1.\n"),
13917  AUTHORS("Jana Mendrok, Patrick Eriksson"),
13918  OUT("psd_data", "dpsd_data_dx"),
13919  GOUT(),
13920  GOUT_TYPE(),
13921  GOUT_DESC(),
13922  IN("psd_size_grid",
13923  "pnd_agenda_input_t",
13924  "pnd_agenda_input",
13925  "pnd_agenda_input_names",
13926  "dpnd_data_dx_names",
13927  "scat_species_a",
13928  "scat_species_b"),
13929  GIN("t_min", "t_max", "picky"),
13930  GIN_TYPE("Numeric", "Numeric", "Index"),
13931  GIN_DEFAULT("273", "373", "0"),
13932  GIN_DESC(
13933  "Low temperature limit to calculate a psd.",
13934  "High temperature limit to calculate a psd.",
13935  "Flag whether to be strict with parametrization value checks.")));
13936 
13937  md_data_raw.push_back(create_mdrecord(
13938  NAME("p_gridDensify"),
13939  DESCRIPTION(
13940  "A simple way to make *p_grid* more dense.\n"
13941  "\n"
13942  "The method includes new values in *p_grid*. For each intermediate\n"
13943  "pressure range, *nfill* points are added. That is, setting *nfill*\n"
13944  "to zero returns an unmodified copy of *p_grid_old*. The number of\n"
13945  "elements of the new *p_grid* is (n0-1)*(1+nfill)+1, where n0 is the\n"
13946  "length of *p_grid_old*.\n"
13947  "\n"
13948  "The new points are distributed equidistant in log(p).\n"
13949  "\n"
13950  "For safety, new grid and old grid Vectors are not allowed to be the\n"
13951  "same variable (both will be needed later on for regridding of the\n"
13952  "atmospheric fields), and atmospheric field related *checked WSV are\n"
13953  "reset to 0 (unchecked).\n"),
13954  AUTHORS("Patrick Eriksson, Jana Mendrok"),
13955  OUT("p_grid", "atmfields_checked", "atmgeom_checked", "cloudbox_checked"),
13956  GOUT(),
13957  GOUT_TYPE(),
13958  GOUT_DESC(),
13959  IN(),
13960  GIN("p_grid_old", "nfill"),
13961  GIN_TYPE("Vector", "Index"),
13962  GIN_DEFAULT(NODEF, "-1"),
13963  GIN_DESC(/* p_grid_old */
13964  "A copy of the current (the old) p_grid. Not allowed to be "
13965  "the same variable as the output *p_grid*.",
13966  /* nfill */
13967  "Number of points to add between adjacent pressure points."
13968  "The default value (-1) results in an error.")));
13969 
13970  md_data_raw.push_back(create_mdrecord(
13971  NAME("p_gridFromZRaw"),
13972  DESCRIPTION(
13973  "Sets *p_grid* according to input atmosphere's raw z_field, derived\n"
13974  "e.g. from *AtmRawRead*.\n"
13975  "Attention: as default only pressure values for altitudes >= 0 are\n"
13976  "extracted. If negative altitudes shall also be selected, set no_neg=0.\n"),
13977  AUTHORS("Claudia Emde, Jana Mendrok"),
13978  OUT("p_grid"),
13979  GOUT(),
13980  GOUT_TYPE(),
13981  GOUT_DESC(),
13982  IN("z_field_raw"),
13983  GIN("no_negZ"),
13984  GIN_TYPE("Index"),
13985  GIN_DEFAULT("1"),
13986  GIN_DESC("Exclude negative altitudes.")));
13987 
13988  md_data_raw.push_back(create_mdrecord(
13989  NAME("lat_gridFromZRaw"),
13990  DESCRIPTION(
13991  "Sets *lat_grid* according to input atmosphere's *z_field_raw*\n"),
13992  AUTHORS("Richard Larsson"),
13993  OUT("lat_grid"),
13994  GOUT(),
13995  GOUT_TYPE(),
13996  GOUT_DESC(),
13997  IN("z_field_raw"),
13998  GIN(),
13999  GIN_TYPE(),
14000  GIN_DEFAULT(),
14001  GIN_DESC()));
14002 
14003  md_data_raw.push_back(create_mdrecord(
14004  NAME("lon_gridFromZRaw"),
14005  DESCRIPTION(
14006  "Sets *lon_grid* according to input atmosphere's *z_field_raw*\n"),
14007  AUTHORS("Richard Larsson"),
14008  OUT("lon_grid"),
14009  GOUT(),
14010  GOUT_TYPE(),
14011  GOUT_DESC(),
14012  IN("z_field_raw"),
14013  GIN(),
14014  GIN_TYPE(),
14015  GIN_DEFAULT(),
14016  GIN_DESC()));
14017 
14018  md_data_raw.push_back(create_mdrecord(
14019  NAME("atm_gridsFromZRaw"),
14020  DESCRIPTION(
14021  "Calls *p_gridFromZRaw*, *lat_gridFromZRaw* and *lon_gridFromZRaw*\n"),
14022  AUTHORS("Richard Larsson"),
14023  OUT("p_grid", "lat_grid", "lon_grid"),
14024  GOUT(),
14025  GOUT_TYPE(),
14026  GOUT_DESC(),
14027  IN("z_field_raw"),
14028  GIN("no_negZ"),
14029  GIN_TYPE("Index"),
14030  GIN_DEFAULT("1"),
14031  GIN_DESC("Exclude negative altitudes.")));
14032 
14033  md_data_raw.push_back(create_mdrecord(
14034  NAME("p_gridFromGasAbsLookup"),
14035  DESCRIPTION("Sets *p_grid* to the pressure grid of *abs_lookup*.\n"),
14036  AUTHORS("Patrick Eriksson"),
14037  OUT("p_grid"),
14038  GOUT(),
14039  GOUT_TYPE(),
14040  GOUT_DESC(),
14041  IN("abs_lookup"),
14042  GIN(),
14043  GIN_TYPE(),
14044  GIN_DEFAULT(),
14045  GIN_DESC()));
14046 
14047  md_data_raw.push_back(create_mdrecord(
14048  NAME("p_gridRefine"),
14049  DESCRIPTION(
14050  "Provides refined pressure grid.\n"
14051  "\n"
14052  "Created new pressure grid has (log10) spacings below a given\n"
14053  "threshold.\n"
14054  "\n"
14055  "For safety, new grid and old grid Vectors are not allowed to be the\n"
14056  "same variable (both will be needed later on for regridding of the\n"
14057  "atmospheric fields), and atmospheric field related *checked WSV are\n"
14058  "reset to 0 (unchecked).\n"),
14059  AUTHORS("Stefan Buehler, Jana Mendrok"),
14060  OUT("p_grid", "atmfields_checked", "atmgeom_checked", "cloudbox_checked"),
14061  GOUT(),
14062  GOUT_TYPE(),
14063  GOUT_DESC(),
14064  IN(),
14065  GIN("p_grid_old", "p_step"),
14066  GIN_TYPE("Vector", "Numeric"),
14068  GIN_DESC(/* p_grid_old */
14069  "A copy of the current (the old) p_grid. Not allowed to be "
14070  "the same variable as the output *p_grid*.",
14071  /* p_step */
14072  "Maximum step in log10(p[Pa]). If the pressure grid is "
14073  "coarser than this, additional points are added until each "
14074  "log step is smaller than this.")));
14075 
14076  md_data_raw.push_back(create_mdrecord(
14077  NAME("RadiationFieldSpectralIntegrate"),
14078  DESCRIPTION(
14079  "Integrates fields like *spectral_irradiance_field* or *cloudbox_field*\n"
14080  "over frequency.\n"
14081  "Important, the first dimension must be the frequency dimension!\n"
14082  "If a field like *cloudbox_field* is input, the stokes dimension\n"
14083  "is also removed.\n"),
14084  AUTHORS("Manfred Brath"),
14085  OUT(),
14086  GOUT("radiation_field"),
14087  GOUT_TYPE("Tensor4, Tensor5"),
14088  GOUT_DESC("TBD"),
14089  IN("f_grid"),
14090  GIN("spectral_radiation_field"),
14091  GIN_TYPE("Tensor5, Tensor7"),
14092  GIN_DEFAULT(NODEF),
14093  GIN_DESC("TBD")));
14094 
14095  md_data_raw.push_back(create_mdrecord(
14096  NAME("line_irradianceCalcForSingleSpeciesNonOverlappingLinesPseudo2D"),
14097  DESCRIPTION("Computes the line irradiance and line transmission\n"
14098  "\n"
14099  "Presently only works for 1D atmospheres\n"),
14100  AUTHORS("Richard Larsson"),
14101  OUT("line_irradiance", "line_transmission"),
14102  GOUT(),
14103  GOUT_TYPE(),
14104  GOUT_DESC(),
14105  IN("abs_species",
14106  "abs_lines_per_species",
14107  "nlte_field",
14108  "vmr_field",
14109  "t_field",
14110  "z_field",
14111  "p_grid",
14112  "refellipsoid",
14113  "surface_props_data",
14114  "iy_main_agenda",
14115  "ppath_agenda",
14116  "iy_space_agenda",
14117  "iy_surface_agenda",
14118  "iy_cloudbox_agenda",
14119  "propmat_clearsky_agenda"),
14120  GIN("df", "nz", "nf", "r"),
14121  GIN_TYPE("Numeric", "Index", "Index", "Numeric"),
14122  GIN_DEFAULT(NODEF, NODEF, NODEF, "1.0"),
14123  GIN_DESC("relative frequency to line center",
14124  "number of zeniths",
14125  "number of frequencies per line",
14126  "Distance assumed when computing local (1-T)")));
14127 
14128  md_data_raw.push_back(create_mdrecord(
14129  NAME("RationalAdd"),
14130  DESCRIPTION(
14131  "Adds a Rational and a value (out = in+value).\n"
14132  "\n"
14133  "The result can either be stored in the same or another Rational.\n"
14134  "(in and out can be the same varible, but not out and value)\n"),
14135  AUTHORS("Richard Larsson"),
14136  OUT(),
14137  GOUT("out"),
14138  GOUT_TYPE("Rational"),
14139  GOUT_DESC("Output Rational."),
14140  IN(),
14141  GIN("in", "value"),
14142  GIN_TYPE("Rational", "Rational"),
14144  GIN_DESC("Input Rational.", "Value to add.")));
14145 
14146  md_data_raw.push_back(create_mdrecord(
14147  NAME("RationalInvScale"),
14148  DESCRIPTION(
14149  "Inversely scales/divides a Rational with a value (out = in/value).\n"
14150  "\n"
14151  "The result can either be stored in the same or another Rational.\n"
14152  "(in and out can be the same varible, but not out and value)\n"),
14153  AUTHORS("Richard Larsson"),
14154  OUT(),
14155  GOUT("out"),
14156  GOUT_TYPE("Rational"),
14157  GOUT_DESC("Output Rational."),
14158  IN(),
14159  GIN("in", "value"),
14160  GIN_TYPE("Rational", "Rational"),
14162  GIN_DESC("Input Rational.", "Scaling Rational.")));
14163 
14164  md_data_raw.push_back(create_mdrecord(
14165  NAME("RationalScale"),
14166  DESCRIPTION(
14167  "Scales/multiplies a Rational with a value (out = in*value).\n"
14168  "\n"
14169  "The result can either be stored in the same or another Rational.\n"
14170  "(in and out can be the same varible, but not out and value)\n"),
14171  AUTHORS("Richard Larsson"),
14172  OUT(),
14173  GOUT("out"),
14174  GOUT_TYPE("Rational"),
14175  GOUT_DESC("Output Rational."),
14176  IN(),
14177  GIN("in", "value"),
14178  GIN_TYPE("Rational", "Rational"),
14180  GIN_DESC("Input Rational.", "Scaling value.")));
14181 
14182  md_data_raw.push_back(create_mdrecord(
14183  NAME("RationalSet"),
14184  DESCRIPTION("Sets a Rational workspace variable to the given value.\n"),
14185  AUTHORS("Richard Larsson"),
14186  OUT(),
14187  GOUT("out"),
14188  GOUT_TYPE("Rational"),
14189  GOUT_DESC("Variable to initialize."),
14190  IN(),
14191  GIN("numerator", "denominator"),
14192  GIN_TYPE("Index", "Index"),
14193  GIN_DEFAULT(NODEF, "1"),
14194  GIN_DESC("The numerator.", "The denominator.")));
14195 
14196  md_data_raw.push_back(create_mdrecord(
14197  NAME("ReadArrayOfARTSCAT"),
14198  DESCRIPTION("Reads an old Array<ArrayOfLineRecord> ARTSCAT file.\n"
14199  "\n"
14200  "Note that the ARTSCAT-5 had quantum numbers and options\n"
14201  "stored inside it but that the options will overwrite that\n"
14202  "information. Be careful setting the options!\n"),
14203  AUTHORS("Stefan Buehler", "Richard Larsson"),
14204  OUT("abs_lines"),
14205  GOUT(),
14206  GOUT_TYPE(),
14207  GOUT_DESC(),
14208  IN(),
14209  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14210  "localquantumnumbers", "normalization_option", "mirroring_option",
14211  "population_option", "lineshapetype_option", "cutoff_option",
14212  "cutoff_value", "linemixinglimit_value"),
14213  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14214  "String", "String", "String", "String", "Numeric", "Numeric"),
14215  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14216  "None", "750e9", "-1"),
14217  GIN_DESC("Name of the ARTSCAT file",
14218  "Minimum frequency of read lines",
14219  "Maximum frequency of read lines",
14220  "Global quantum number list (space-separated)",
14221  "Local quantum number list (space-separated)",
14222  "Normalization option, see *abs_linesSetNormalization*",
14223  "Mirroring option, see *abs_linesSetMirroring*",
14224  "Population option, see *abs_linesSetPopulation*",
14225  "Lineshape option, see *abs_linesSetLineShapeType*",
14226  "Cutoff option, see *abs_linesSetCutoff*",
14227  "Cutoff value, see *abs_linesSetCutoff*",
14228  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14229 
14230  md_data_raw.push_back(create_mdrecord(
14231  NAME("ReadSplitARTSCAT"),
14232  DESCRIPTION("Reads several old ArrayOfLineRecord ARTSCAT file\n"
14233  "\n"
14234  "Note that the ARTSCAT-5 had quantum numbers and options\n"
14235  "stored inside it but that the options will overwrite that\n"
14236  "information. Be careful setting the options!\n"),
14237  AUTHORS("Oliver Lemke", "Richard Larsson"),
14238  OUT("abs_lines"),
14239  GOUT(),
14240  GOUT_TYPE(),
14241  GOUT_DESC(),
14242  IN("abs_species"),
14243  GIN("basename", "fmin", "fmax", "globalquantumnumbers", "localquantumnumbers",
14244  "ignore_missing", "normalization_option", "mirroring_option",
14245  "population_option", "lineshapetype_option", "cutoff_option",
14246  "cutoff_value", "linemixinglimit_value"),
14247  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "Index", "String",
14248  "String", "String", "String", "String", "Numeric", "Numeric"),
14249  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "0", "None", "None", "LTE", "VP",
14250  "None", "750e9", "-1"),
14251  GIN_DESC("Path to the files",
14252  "Minimum frequency of read lines",
14253  "Maximum frequency of read lines",
14254  "Global quantum number list (space-separated)",
14255  "Local quantum number list (space-separated)",
14256  "Ignores instead of throws if an *abs_species* is missing",
14257  "Normalization option, see *abs_linesSetNormalization*",
14258  "Mirroring option, see *abs_linesSetMirroring*",
14259  "Population option, see *abs_linesSetPopulation*",
14260  "Lineshape option, see *abs_linesSetLineShapeType*",
14261  "Cutoff option, see *abs_linesSetCutoff*",
14262  "Cutoff value, see *abs_linesSetCutoff*",
14263  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14264 
14265  md_data_raw.push_back(create_mdrecord(
14266  NAME("ReadARTSCAT"),
14267  DESCRIPTION("Reads an old ArrayOfLineRecord ARTSCAT file\n"
14268  "\n"
14269  "Note that the ARTSCAT-5 had quantum numbers and options\n"
14270  "stored inside it but that the options will overwrite that\n"
14271  "information. Be careful setting the options!\n"),
14272  AUTHORS("Stefan Buehler", "Richard Larsson"),
14273  OUT("abs_lines"),
14274  GOUT(),
14275  GOUT_TYPE(),
14276  GOUT_DESC(),
14277  IN(),
14278  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14279  "localquantumnumbers", "normalization_option", "mirroring_option",
14280  "population_option", "lineshapetype_option", "cutoff_option",
14281  "cutoff_value", "linemixinglimit_value"),
14282  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14283  "String", "String", "String", "String", "Numeric", "Numeric"),
14284  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14285  "None", "750e9", "-1"),
14286  GIN_DESC("Name of the ARTSCAT file",
14287  "Minimum frequency of read lines",
14288  "Maximum frequency of read lines",
14289  "Global quantum number list (space-separated)",
14290  "Local quantum number list (space-separated)",
14291  "Normalization option, see *abs_linesSetNormalization*",
14292  "Mirroring option, see *abs_linesSetMirroring*",
14293  "Population option, see *abs_linesSetPopulation*",
14294  "Lineshape option, see *abs_linesSetLineShapeType*",
14295  "Cutoff option, see *abs_linesSetCutoff*",
14296  "Cutoff value, see *abs_linesSetCutoff*",
14297  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14298 
14299  md_data_raw.push_back(create_mdrecord(
14300  NAME("ReadHITRAN"),
14301  DESCRIPTION("Reads a HITRAN .par file.\n"
14302  "\n"
14303  "The HITRAN type switch can be:\n"
14304  "\t\"Pre2004\"\t-\tfor old format\n"
14305  "\t\"Post2004\"\t-\tfor new format\n"
14306  "\t\"Online\"\t-\tfor the online format with quantum numbers (highly experimental)\n"
14307  "\n"
14308  "Be careful setting the options!\n"
14309  ),
14310  AUTHORS("Hermann Berg", "Thomas Kuhn", "Richard Larsson"),
14311  OUT("abs_lines"),
14312  GOUT(),
14313  GOUT_TYPE(),
14314  GOUT_DESC(),
14315  IN(),
14316  GIN("filename", "fmin", "fmax", "globalquantumnumbers", "localquantumnumbers",
14317  "hitran_type", "normalization_option", "mirroring_option",
14318  "population_option", "lineshapetype_option", "cutoff_option",
14319  "cutoff_value", "linemixinglimit_value"),
14320  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String", "String",
14321  "String", "String", "String", "String", "Numeric", "Numeric"),
14322  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "Post2004", "None", "None", "LTE", "VP",
14323  "None", "750e9", "-1"),
14324  GIN_DESC("Name of the HITRAN file",
14325  "Minimum frequency of read lines",
14326  "Maximum frequency of read lines",
14327  "Global quantum number list (space-separated)",
14328  "Local quantum number list (space-separated)",
14329  "Method to use to read the line data",
14330  "Normalization option, see *abs_linesSetNormalization*",
14331  "Mirroring option, see *abs_linesSetMirroring*",
14332  "Population option, see *abs_linesSetPopulation*",
14333  "Lineshape option, see *abs_linesSetLineShapeType*",
14334  "Cutoff option, see *abs_linesSetCutoff*",
14335  "Cutoff value, see *abs_linesSetCutoff*",
14336  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14337 
14338  md_data_raw.push_back(create_mdrecord(
14339  NAME("ReadLBLRTM"),
14340  DESCRIPTION("Reads a LBLRTM file.\n"
14341  "\n"
14342  "Be careful setting the options!\n"),
14343  AUTHORS("Richard Larsson"),
14344  OUT("abs_lines"),
14345  GOUT(),
14346  GOUT_TYPE(),
14347  GOUT_DESC(),
14348  IN(),
14349  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14350  "localquantumnumbers", "normalization_option", "mirroring_option",
14351  "population_option", "lineshapetype_option", "cutoff_option",
14352  "cutoff_value", "linemixinglimit_value"),
14353  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14354  "String", "String", "String", "String", "Numeric", "Numeric"),
14355  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14356  "None", "750e9", "-1"),
14357  GIN_DESC("Name of the LBLRTM file",
14358  "Minimum frequency of read lines",
14359  "Maximum frequency of read lines",
14360  "Global quantum number list (space-separated)",
14361  "Local quantum number list (space-separated)",
14362  "Normalization option, see *abs_linesSetNormalization*",
14363  "Mirroring option, see *abs_linesSetMirroring*",
14364  "Population option, see *abs_linesSetPopulation*",
14365  "Lineshape option, see *abs_linesSetLineShapeType*",
14366  "Cutoff option, see *abs_linesSetCutoff*",
14367  "Cutoff value, see *abs_linesSetCutoff*",
14368  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14369 
14370  md_data_raw.push_back(create_mdrecord(
14371  NAME("ReadMytran2"),
14372  DESCRIPTION("Reads a Mytran2 file.\n"
14373  "\n"
14374  "Be careful setting the options!\n"),
14375  AUTHORS("Axel von Engeln", "Stefan Buehler", "Richard Larsson"),
14376  OUT("abs_lines"),
14377  GOUT(),
14378  GOUT_TYPE(),
14379  GOUT_DESC(),
14380  IN(),
14381  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14382  "localquantumnumbers", "normalization_option", "mirroring_option",
14383  "population_option", "lineshapetype_option", "cutoff_option",
14384  "cutoff_value", "linemixinglimit_value"),
14385  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14386  "String", "String", "String", "String", "Numeric", "Numeric"),
14387  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14388  "None", "750e9", "-1"),
14389  GIN_DESC("Name of the Mytran2 file",
14390  "Minimum frequency of read lines",
14391  "Maximum frequency of read lines",
14392  "Global quantum number list (space-separated)",
14393  "Local quantum number list (space-separated)",
14394  "Normalization option, see *abs_linesSetNormalization*",
14395  "Mirroring option, see *abs_linesSetMirroring*",
14396  "Population option, see *abs_linesSetPopulation*",
14397  "Lineshape option, see *abs_linesSetLineShapeType*",
14398  "Cutoff option, see *abs_linesSetCutoff*",
14399  "Cutoff value, see *abs_linesSetCutoff*",
14400  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14401 
14402  md_data_raw.push_back(create_mdrecord(
14403  NAME("ReadJPL"),
14404  DESCRIPTION("Reads a JPL file.\n"
14405  "\n"
14406  "Be careful setting the options!\n"),
14407  AUTHORS("Thomas Kuhn", "Richard Larsson"),
14408  OUT("abs_lines"),
14409  GOUT(),
14410  GOUT_TYPE(),
14411  GOUT_DESC(),
14412  IN(),
14413  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14414  "localquantumnumbers", "normalization_option", "mirroring_option",
14415  "population_option", "lineshapetype_option", "cutoff_option",
14416  "cutoff_value", "linemixinglimit_value"),
14417  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14418  "String", "String", "String", "String", "Numeric", "Numeric"),
14419  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14420  "None", "750e9", "-1"),
14421  GIN_DESC("Name of the JPL file",
14422  "Minimum frequency of read lines",
14423  "Maximum frequency of read lines",
14424  "Global quantum number list (space-separated)",
14425  "Local quantum number list (space-separated)",
14426  "Normalization option, see *abs_linesSetNormalization*",
14427  "Mirroring option, see *abs_linesSetMirroring*",
14428  "Population option, see *abs_linesSetPopulation*",
14429  "Lineshape option, see *abs_linesSetLineShapeType*",
14430  "Cutoff option, see *abs_linesSetCutoff*",
14431  "Cutoff value, see *abs_linesSetCutoff*",
14432  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14433 
14434  md_data_raw.push_back(create_mdrecord(
14435  NAME("abs_linesTruncateGlobalQuantumNumbers"),
14436  DESCRIPTION("Truncates all global quantum numbers\n"
14437  "and then recombine the line list.\n"),
14438  AUTHORS("Richard Larsson"),
14439  OUT("abs_lines"),
14440  GOUT(),
14441  GOUT_TYPE(),
14442  GOUT_DESC(),
14443  IN("abs_lines"),
14444  GIN(),
14445  GIN_TYPE(),
14446  GIN_DEFAULT(),
14447  GIN_DESC()));
14448 
14449  md_data_raw.push_back(create_mdrecord(
14450  NAME("abs_linesWriteSplitXML"),
14451  DESCRIPTION("Writes a split catalog, AbsorptionLines by AbsorptionLines.\n"
14452  "\n"
14453  "There will be one unique file generated per AbsorptionLines in *abs_lines*.\n"
14454  "\n"
14455  "The names of these files will be:\n"
14456  "\tbasename+\".\"+AbsorptionLines.SpeciesName()+\".\"+to_string(N)+\".xml\"\n"
14457  "where N>=0 and the species name is something line \"H2O\".\n"),
14458  AUTHORS("Richard Larsson"),
14459  OUT(),
14460  GOUT(),
14461  GOUT_TYPE(),
14462  GOUT_DESC(),
14463  IN("output_file_format", "abs_lines"),
14464  GIN("basename"),
14465  GIN_TYPE("String"),
14466  GIN_DEFAULT(NODEF),
14467  GIN_DESC("Path to store the files at")));
14468 
14469  md_data_raw.push_back(create_mdrecord(
14470  NAME("abs_linesWriteSpeciesSplitXML"),
14471  DESCRIPTION("As *abs_linesWriteSplitXML* but writes an array\n"
14472  "per species\n"),
14473  AUTHORS("Richard Larsson"),
14474  OUT(),
14475  GOUT(),
14476  GOUT_TYPE(),
14477  GOUT_DESC(),
14478  IN("output_file_format", "abs_lines"),
14479  GIN("basename"),
14480  GIN_TYPE("String"),
14481  GIN_DEFAULT(NODEF),
14482  GIN_DESC("Path to store the files at")));
14483 
14484  md_data_raw.push_back(create_mdrecord(
14485  NAME("abs_lines_per_speciesWriteSplitXML"),
14486  DESCRIPTION("See *abs_linesWriteSplitXML*\n"
14487  "\n"
14488  "In addition, the structure of the files generated will not care about\n"
14489  "generating identifiers for the order in *abs_species*\n"),
14490  AUTHORS("Richard Larsson"),
14491  OUT(),
14492  GOUT(),
14493  GOUT_TYPE(),
14494  GOUT_DESC(),
14495  IN("output_file_format", "abs_lines_per_species"),
14496  GIN("basename"),
14497  GIN_TYPE("String"),
14498  GIN_DEFAULT(NODEF),
14499  GIN_DESC("Path to store the files at")));
14500 
14501  md_data_raw.push_back(create_mdrecord(
14502  NAME("abs_lines_per_speciesWriteSpeciesSplitXML"),
14503  DESCRIPTION("See *abs_linesWriteSpeciesSplitXML*\n"
14504  "\n"
14505  "In addition, the structure of the files generated will not care about\n"
14506  "generating identifiers for the order in *abs_species*\n"),
14507  AUTHORS("Richard Larsson"),
14508  OUT(),
14509  GOUT(),
14510  GOUT_TYPE(),
14511  GOUT_DESC(),
14512  IN("output_file_format", "abs_lines_per_species"),
14513  GIN("basename"),
14514  GIN_TYPE("String"),
14515  GIN_DEFAULT(NODEF),
14516  GIN_DESC("Path to store the files at")));
14517 
14518  md_data_raw.push_back(create_mdrecord(
14519  NAME("ReadNetCDF"),
14520  DESCRIPTION("Reads a workspace variable from a NetCDF file.\n"
14521  "\n"
14522  "This method can read variables of any group.\n"
14523  "\n"
14524  "If the filename is omitted, the variable is read\n"
14525  "from <basename>.<variable_name>.nc.\n"),
14526  AUTHORS("Oliver Lemke"),
14527  OUT(),
14528  GOUT("out"),
14529  GOUT_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, ArrayOfVector,"
14530  "ArrayOfMatrix, GasAbsLookup"),
14531  GOUT_DESC("Variable to be read."),
14532  IN(),
14533  GIN("filename"),
14534  GIN_TYPE("String"),
14535  GIN_DEFAULT(NODEF),
14536  GIN_DESC("Name of the NetCDF file."),
14537  SETMETHOD(false),
14538  AGENDAMETHOD(false),
14539  USES_TEMPLATES(true),
14540  PASSWORKSPACE(false),
14541  PASSWSVNAMES(true)));
14542 
14543  md_data_raw.push_back(create_mdrecord(
14544  NAME("ReadXML"),
14545  DESCRIPTION(
14546  "Reads a workspace variable from an XML file.\n"
14547  "\n"
14548  "This method can read variables of any group.\n"
14549  "\n"
14550  "If the filename is omitted, the variable is read\n"
14551  "from <basename>.<variable_name>.xml.\n"
14552  "If the given filename does not exist, this method will\n"
14553  "also look for files with an added .xml, .xml.gz and .gz extension\n"),
14554  AUTHORS("Oliver Lemke"),
14555  OUT(),
14556  GOUT("out"),
14557  GOUT_TYPE("Any"),
14558  GOUT_DESC("Variable to be read."),
14559  IN(),
14560  GIN("filename"),
14561  GIN_TYPE("String"),
14562  GIN_DEFAULT(""),
14563  GIN_DESC("Name of the XML file."),
14564  SETMETHOD(false),
14565  AGENDAMETHOD(false),
14566  USES_TEMPLATES(true),
14567  PASSWORKSPACE(false),
14568  PASSWSVNAMES(true)));
14569 
14570  md_data_raw.push_back(create_mdrecord(
14571  NAME("ReadXMLIndexed"),
14572  DESCRIPTION("As *ReadXML*, but reads indexed file names.\n"
14573  "\n"
14574  "The variable is read from a file with name:\n"
14575  " <filename>.<file_index>.xml.\n"
14576  "where <file_index> is the value of *file_index*.\n"
14577  "\n"
14578  "This means that *filename* shall here not include the .xml\n"
14579  "extension. Omitting filename works as for *ReadXML*.\n"),
14580  AUTHORS("Oliver Lemke"),
14581  OUT(),
14582  GOUT("out"),
14583  GOUT_TYPE("Any"),
14584  GOUT_DESC("Workspace variable to be read."),
14585  IN("file_index"),
14586  GIN("filename", "digits"),
14587  GIN_TYPE("String", "Index"),
14588  GIN_DEFAULT("", "0"),
14589  GIN_DESC(
14590  "File name. See above.",
14591  "Equalize the widths of all numbers by padding with zeros as necessary.\n"
14592  "0 means no padding (default)."),
14593  SETMETHOD(false),
14594  AGENDAMETHOD(false),
14595  USES_TEMPLATES(true),
14596  PASSWORKSPACE(false),
14597  PASSWSVNAMES(true)));
14598 
14599  md_data_raw.push_back(create_mdrecord(
14600  NAME("Reduce"),
14601  DESCRIPTION(
14602  "Reduces a larger class to a smaller class of same size.\n"
14603  "\n"
14604  "The Reduce command reduces all \"1\"-dimensions to nil. Examples:\n"
14605  "\t1) 1 Vector can be reduced to a Numeric\n"
14606  "\t2) 2x1 Matrix can be reduced to 2 Vector\n"
14607  "\t3) 1x3x1 Tensor3 can be reduced to 3 Vector\n"
14608  "\t4) 1x1x1x1 Tensor4 can be reduced to a Numeric\n"
14609  "\t5) 3x1x4x1x5 Tensor5 can only be reduced to 3x4x5 Tensor3\n"
14610  "\t6) 1x1x1x1x2x3 Tensor6 can be reduced to 2x3 Matrix\n"
14611  "\t7) 2x3x4x5x6x7x1 Tensor7 can be reduced to 2x3x4x5x6x7 Tensor6\n"
14612  "And so on\n"),
14613  AUTHORS("Oliver Lemke", "Richard Larsson"),
14614  OUT(),
14615  GOUT("o"),
14616  GOUT_TYPE("Numeric, Numeric, Numeric, Numeric, Numeric, Numeric, Numeric,"
14617  "Vector, Vector, Vector, Vector, Vector, Vector,"
14618  "Matrix, Matrix, Matrix, Matrix, Matrix,"
14619  "Tensor3, Tensor3, Tensor3, Tensor3,"
14620  "Tensor4, Tensor4, Tensor4,"
14621  "Tensor5, Tensor5,"
14622  "Tensor6"),
14623  GOUT_DESC("Reduced form of input."),
14624  IN(),
14625  GIN("i"),
14626  GIN_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
14627  "Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
14628  "Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
14629  "Tensor4, Tensor5, Tensor6, Tensor7,"
14630  "Tensor5, Tensor6, Tensor7,"
14631  "Tensor6, Tensor7,"
14632  "Tensor7"),
14633  GIN_DEFAULT(NODEF),
14634  GIN_DESC("Over-dimensioned input"),
14635  SETMETHOD(false),
14636  AGENDAMETHOD(false),
14637  USES_TEMPLATES(false)));
14638 
14639  md_data_raw.push_back(create_mdrecord(
14640  NAME("refellipsoidEarth"),
14641  DESCRIPTION(
14642  "Earth reference ellipsoids.\n"
14643  "\n"
14644  "The reference ellipsoid (*refellipsoid*) is set to model the Earth,\n"
14645  "following different models. The options are:\n"
14646  "\n"
14647  " \"Sphere\" : A spherical Earth. The radius is set following\n"
14648  " the value set for the Earth radius in constants.cc.\n"
14649  "\n"
14650  " \"WGS84\" : The reference ellipsoid used by the GPS system.\n"
14651  " Should be the standard choice for a non-spherical Earth.\n"),
14652  AUTHORS("Patrick Eriksson"),
14653  OUT("refellipsoid"),
14654  GOUT(),
14655  GOUT_TYPE(),
14656  GOUT_DESC(),
14657  IN(),
14658  GIN("model"),
14659  GIN_TYPE("String"),
14660  GIN_DEFAULT("Sphere"),
14661  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14662 
14663  md_data_raw.push_back(
14664  create_mdrecord(NAME("refellipsoidGanymede"),
14665  DESCRIPTION("Ganymede reference ellipsoids.\n"
14666  "\n"
14667  "From Wikipedia\n"),
14668  AUTHORS("Takayoshi Yamada"),
14669  OUT("refellipsoid"),
14670  GOUT(),
14671  GOUT_TYPE(),
14672  GOUT_DESC(),
14673  IN(),
14674  GIN("model"),
14675  GIN_TYPE("String"),
14676  GIN_DEFAULT("Sphere"),
14677  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14678 
14679  md_data_raw.push_back(create_mdrecord(
14680  NAME("refellipsoidForAzimuth"),
14681  DESCRIPTION(
14682  "Conversion of 3D ellipsoid to 1D curvature radius.\n"
14683  "\n"
14684  "Calculates the curvature radius for the given latitude and azimuth\n"
14685  "angle, and uses this to set a spherical reference ellipsoid\n"
14686  "suitable for 1D calculations. The curvature radius is a better\n"
14687  "local approximation than using the local ellipsoid radius.\n"
14688  "\n"
14689  "The used expression assumes a geodetic latitude, but also\n"
14690  "latitudes should be OK as using this method anyhow signifies\n"
14691  "an approximation.\n"),
14692  AUTHORS("Patrick Eriksson"),
14693  OUT("refellipsoid"),
14694  GOUT(),
14695  GOUT_TYPE(),
14696  GOUT_DESC(),
14697  IN("refellipsoid"),
14698  GIN("latitude", "azimuth"),
14699  GIN_TYPE("Numeric", "Numeric"),
14701  GIN_DESC("Latitude.", "Azimuth angle.")));
14702 
14703  md_data_raw.push_back(create_mdrecord(
14704  NAME("refellipsoidEuropa"),
14705  DESCRIPTION(
14706  "Io reference ellipsoids.\n"
14707  "\n"
14708  "The reference ellipsoid (*refellipsoid*) is set to model Io,\n"
14709  "folowing different models. The options are:\n"
14710  "\n"
14711  " \"Sphere\" : A spherical planetesimal. The radius is taken from\n"
14712  " report of the IAU/IAG Working Group.\n"),
14713  AUTHORS("Richard Larsson"),
14714  OUT("refellipsoid"),
14715  GOUT(),
14716  GOUT_TYPE(),
14717  GOUT_DESC(),
14718  IN(),
14719  GIN("model"),
14720  GIN_TYPE("String"),
14721  GIN_DEFAULT("Sphere"),
14722  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14723 
14724  md_data_raw.push_back(create_mdrecord(
14725  NAME("refellipsoidIo"),
14726  DESCRIPTION(
14727  "Io reference ellipsoids.\n"
14728  "\n"
14729  "The reference ellipsoid (*refellipsoid*) is set to model Io,\n"
14730  "folowing different models. The options are:\n"
14731  "\n"
14732  " \"Sphere\" : A spherical planetesimal. The radius is taken from\n"
14733  " report of the IAU/IAG Working Group.\n"),
14734  AUTHORS("Richard Larsson"),
14735  OUT("refellipsoid"),
14736  GOUT(),
14737  GOUT_TYPE(),
14738  GOUT_DESC(),
14739  IN(),
14740  GIN("model"),
14741  GIN_TYPE("String"),
14742  GIN_DEFAULT("Sphere"),
14743  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14744 
14745  md_data_raw.push_back(create_mdrecord(
14746  NAME("refellipsoidJupiter"),
14747  DESCRIPTION(
14748  "Jupiter reference ellipsoids.\n"
14749  "\n"
14750  "The reference ellipsoid (*refellipsoid*) is set to model Jupiter,\n"
14751  "folowing different models. The options are:\n"
14752  "\n"
14753  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14754  " report of the IAU/IAG Working Group.\n"
14755  "\n"
14756  " \"Ellipsoid\" : A reference ellipsoid with parameters taken from\n"
14757  " a report of the IAU/IAG Working Group.\n"),
14758  AUTHORS("Patrick Eriksson"),
14759  OUT("refellipsoid"),
14760  GOUT(),
14761  GOUT_TYPE(),
14762  GOUT_DESC(),
14763  IN(),
14764  GIN("model"),
14765  GIN_TYPE("String"),
14766  GIN_DEFAULT("Sphere"),
14767  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14768 
14769  md_data_raw.push_back(create_mdrecord(
14770  NAME("refellipsoidMars"),
14771  DESCRIPTION(
14772  "Mars reference ellipsoids.\n"
14773  "\n"
14774  "The reference ellipsoid (*refellipsoid*) is set to model Mars,\n"
14775  "folowing different models. The options are:\n"
14776  "\n"
14777  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14778  " report of the IAU/IAG Working Group.\n"
14779  "\n"
14780  " \"Ellipsoid\" : A reference ellipsoid with parameters taken from\n"
14781  " a report of the IAU/IAG Working Group.\n"),
14782  AUTHORS("Patrick Eriksson"),
14783  OUT("refellipsoid"),
14784  GOUT(),
14785  GOUT_TYPE(),
14786  GOUT_DESC(),
14787  IN(),
14788  GIN("model"),
14789  GIN_TYPE("String"),
14790  GIN_DEFAULT("Sphere"),
14791  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14792 
14793  md_data_raw.push_back(create_mdrecord(
14794  NAME("refellipsoidMoon"),
14795  DESCRIPTION(
14796  "Moon reference ellipsoids.\n"
14797  "\n"
14798  "The reference ellipsoid (*refellipsoid*) is set to model Moon,\n"
14799  "folowing different models. The options are:\n"
14800  "\n"
14801  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14802  " report of the IAU/IAG Working Group.\n"
14803  "\n"
14804  " \"Ellipsoid\" : A reference ellipsoid with parameters taken from\n"
14805  " Wikepedia (see code for details). The IAU/IAG working group\n"
14806  " defines the Moon ellipsoid to be a sphere.\n"),
14807  AUTHORS("Patrick Eriksson"),
14808  OUT("refellipsoid"),
14809  GOUT(),
14810  GOUT_TYPE(),
14811  GOUT_DESC(),
14812  IN(),
14813  GIN("model"),
14814  GIN_TYPE("String"),
14815  GIN_DEFAULT("Sphere"),
14816  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14817 
14818  md_data_raw.push_back(create_mdrecord(
14819  NAME("refellipsoidOrbitPlane"),
14820  DESCRIPTION(
14821  "Conversion of 3D ellipsoid to 2D orbit track geometry.\n"
14822  "\n"
14823  "Determines an approximate reference ellipsoid following an orbit\n"
14824  "track. The new ellipsoid is determined simply, by determining the\n"
14825  "radius at the maximum latitude and from this value calculate a new\n"
14826  "new eccentricity. The orbit is specified by giving the orbit\n"
14827  "inclination (*orbitinc*), that is normally a value around 100 deg\n"
14828  "for polar sun-synchronous orbits.\n"),
14829  AUTHORS("Patrick Eriksson"),
14830  OUT("refellipsoid"),
14831  GOUT(),
14832  GOUT_TYPE(),
14833  GOUT_DESC(),
14834  IN("refellipsoid"),
14835  GIN("orbitinc"),
14836  GIN_TYPE("Numeric"),
14837  GIN_DEFAULT(NODEF),
14838  GIN_DESC("Orbit inclination.")));
14839 
14840  md_data_raw.push_back(create_mdrecord(
14841  NAME("refellipsoidSet"),
14842  DESCRIPTION(
14843  "Manual setting of the reference ellipsoid.\n"
14844  "\n"
14845  "The two values of *refellipsoid* can here be set manually. The two\n"
14846  "arguments correspond directly to first and second element of\n"
14847  "*refellipsoid*.\n"),
14848  AUTHORS("Patrick Eriksson"),
14849  OUT("refellipsoid"),
14850  GOUT(),
14851  GOUT_TYPE(),
14852  GOUT_DESC(),
14853  IN(),
14854  GIN("re", "e"),
14855  GIN_TYPE("Numeric", "Numeric"),
14856  GIN_DEFAULT(NODEF, "0"),
14857  GIN_DESC("Average or equatorial radius.", "Eccentricity")));
14858 
14859  md_data_raw.push_back(create_mdrecord(
14860  NAME("refellipsoidVenus"),
14861  DESCRIPTION(
14862  "Venus reference ellipsoids.\n"
14863  "\n"
14864  "The reference ellipsoid (*refellipsoid*) is set to model Venus,\n"
14865  "folowing different models. The options are:\n"
14866  "\n"
14867  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14868  " report of the IAU/IAG Working Group.\n"
14869  "\n"
14870  "According to the report used above, the Venus ellipsoid lacks\n"
14871  "eccentricity and no further models should be required.\n"),
14872  AUTHORS("Patrick Eriksson"),
14873  OUT("refellipsoid"),
14874  GOUT(),
14875  GOUT_TYPE(),
14876  GOUT_DESC(),
14877  IN(),
14878  GIN("model"),
14879  GIN_TYPE("String"),
14880  GIN_DEFAULT("Sphere"),
14881  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14882 
14883  md_data_raw.push_back(create_mdrecord(
14884  NAME("refr_index_airFreeElectrons"),
14885  DESCRIPTION(
14886  "Microwave refractive index due to free electrons.\n"
14887  "\n"
14888  "The refractive index of free electrons is added to *refr_index_air*.\n"
14889  "To obtain the complete value, *refr_index_air* should be set to 1\n"
14890  "before calling this WSM. This applies also to *refr_index_air_group*.\n"
14891  "\n"
14892  "The expression applied is n=sqrt(1-wp^2/w^2) where wp is the plasma\n"
14893  "frequency, and w is the angular frequency (the function returns\n"
14894  "n-1, that here is slightly negative). This expressions is found in\n"
14895  "many textbooks, e.g. Rybicki and Lightman (1979). The above refers\n"
14896  "to *refr_index_air*. *refr_index_air_group* is sqrt(1+wp^2/w^2).\n"
14897  "\n"
14898  "The expression is dispersive. The frequency applied is the mean of\n"
14899  "first and last element of *f_grid* is selected. This frequency must\n"
14900  "be at least twice the plasma frequency.\n"
14901  "\n"
14902  "An error is issued if free electrons not are part of *abs_species*\n"
14903  "(and there exist a corresponding \"vmr\"-value). This demand is\n"
14904  "removed if *demand_vmr_value* is set to 0, but use this option\n"
14905  "with care.\n"),
14906  AUTHORS("Patrick Eriksson"),
14907  OUT("refr_index_air", "refr_index_air_group"),
14908  GOUT(),
14909  GOUT_TYPE(),
14910  GOUT_DESC(),
14911  IN("refr_index_air",
14912  "refr_index_air_group",
14913  "f_grid",
14914  "abs_species",
14915  "rtp_vmr"),
14916  GIN("demand_vmr_value"),
14917  GIN_TYPE("Index"),
14918  GIN_DEFAULT("1"),
14919  GIN_DESC("Flag to control if it is demanded that free electrons are "
14920  "in *abs_species*. Default is that this is demanded.")));
14921 
14922  md_data_raw.push_back(create_mdrecord(
14923  NAME("refr_index_airInfraredEarth"),
14924  DESCRIPTION(
14925  "Calculates the IR refractive index due to gases in the\n"
14926  "Earth's atmosphere.\n"
14927  "\n"
14928  "Only refractivity of dry air is considered. The formula used is\n"
14929  "contributed by Michael Hoepfner, Forschungszentrum Karlsruhe.\n"
14930  "\n"
14931  "The refractivity of dry air is added to *refr_index_air*. To obtain\n"
14932  "the complete value, *refr_index_air* should be set to 1 before\n"
14933  "calling this WSM. This applies also to *refr_index_air_group*.\n"
14934  "\n"
14935  "The expression used is non-dispersive. Hence, *refr_index_air* and\n"
14936  "*refr_index_air_group* are identical.\n"),
14937  AUTHORS("Mattias Ekstrom"),
14938  OUT("refr_index_air", "refr_index_air_group"),
14939  GOUT(),
14940  GOUT_TYPE(),
14941  GOUT_DESC(),
14942  IN("refr_index_air",
14943  "refr_index_air_group",
14944  "rtp_pressure",
14945  "rtp_temperature"),
14946  GIN(),
14947  GIN_TYPE(),
14948  GIN_DEFAULT(),
14949  GIN_DESC()));
14950 
14951  md_data_raw.push_back(create_mdrecord(
14952  NAME("refr_index_airMicrowavesEarth"),
14953  DESCRIPTION(
14954  "Microwave refractive index in Earth's atmosphere.\n"
14955  "\n"
14956  "This method just considers pressure, temperature and water\n"
14957  "vapour, which should suffice for Earth. For a more general\n"
14958  "method, see *refr_index_airMicrowavesGeneral*.\n"
14959  "\n"
14960  "The refractivity of dry air and water vapour is added to\n"
14961  "*refr_index_air*. To obtain the complete value, *refr_index_air*\n"
14962  "should be set to 1 before calling this WSM. This applies also to\n"
14963  "*refr_index_air_group.\n"
14964  "\n"
14965  "The expression used is non-dispersive. Hence, *refr_index_air*\n"
14966  "and *refr_index_air_group* are identical.\n"
14967  "\n"
14968  "The standard expression for Earth and microwaves is used:\n"
14969  " N = k1*(P-e)/T + k2*e/T + k3*e/T^2\n"
14970  "where N is refractivity, P is pressure, T is temperature and\n"
14971  "e is water vapour partial pressure. The values of k1, k2 and k3\n"
14972  "can be modified.\n"
14973  "\n"
14974  "Many different values of k1, k2 and k3 can be found in the\n"
14975  "literature. The default values applied here are taken from\n"
14976  "Bevis et al., GPS meteorology: Mapping ..., JAM, 1994.\n"
14977  "More specifically, these value are found in Table 1, listed\n"
14978  "as \"Present study\". Note that in ARTS Pa is used for pressure\n"
14979  "and k1, k2 and k3 must be adjusted accordingly.\n"),
14980  AUTHORS("Patrick Eriksson"),
14981  OUT("refr_index_air", "refr_index_air_group"),
14982  GOUT(),
14983  GOUT_TYPE(),
14984  GOUT_DESC(),
14985  IN("refr_index_air",
14986  "refr_index_air_group",
14987  "rtp_pressure",
14988  "rtp_temperature",
14989  "rtp_vmr",
14990  "abs_species"),
14991  GIN("k1", "k2", "k3"),
14992  GIN_TYPE("Numeric", "Numeric", "Numeric"),
14993  GIN_DEFAULT("77.6e-8", "70.4e-8", "3.739e-3"),
14994  GIN_DESC("Coefficient a, see above",
14995  "Coefficient b, see above",
14996  "Coefficient c, see above")));
14997 
14998  md_data_raw.push_back(create_mdrecord(
14999  NAME("refr_index_airMicrowavesGeneral"),
15000  DESCRIPTION(
15001  "Microwave refractive index due to gases in planetary atmospheres.\n"
15002  "\n"
15003  "The refractivity of a specified gas mixture is calculated and added\n"
15004  "to *refr_index_air*. To obtain the complete value, *refr_index_air*\n"
15005  "should be set to 1 before calling this WSM. This applies also to\n"
15006  "*refr_index_air_group.\n"
15007  "\n"
15008  "The expression used is non-dispersive. Hence, *refr_index_air* and\n"
15009  "*refr_index_air_group* are identical.\n"
15010  "\n"
15011  "Uses the methodology introduced by Newell&Baird (1965) for calculating\n"
15012  "refractivity of variable gas mixtures based on refractivity of the\n"
15013  "individual gases at reference conditions. Assuming ideal gas law for\n"
15014  "converting reference refractivity to actual pressure and temperature\n"
15015  "conditions. Reference refractivities are also taken from Newell&Baird (1965)\n"
15016  "and are vailable for N2, O2, CO2, H2, and He. Additionally, H2O reference\n"
15017  "refractivity has been derived from H2O contribution in Thayer (see\n"
15018  "*refr_index_airMicrowavesEarth*) for T0=273.15K. Any mixture of these gases\n"
15019  "can be taken into account.\n"),
15020  AUTHORS("Jana Mendrok"),
15021  OUT("refr_index_air", "refr_index_air_group"),
15022  GOUT(),
15023  GOUT_TYPE(),
15024  GOUT_DESC(),
15025  IN("refr_index_air",
15026  "refr_index_air_group",
15027  "rtp_pressure",
15028  "rtp_temperature",
15029  "rtp_vmr",
15030  "abs_species"),
15031  GIN(),
15032  GIN_TYPE(),
15033  GIN_DEFAULT(),
15034  GIN_DESC()));
15035 
15036  md_data_raw.push_back(create_mdrecord(
15037  NAME("retrievalDefClose"),
15038  DESCRIPTION(
15039  "Closes the definition of retrieval quantities and correlations and\n"
15040  "prepares related WSVs for the retrieval.\n"
15041  "\n"
15042  "This function calls jacobianClose and checks that the corvariance matrices\n"
15043  "are consistent with the Jacobian.\n"),
15044  AUTHORS("Simon Pfreundschuh"),
15045  OUT("jacobian_do", "jacobian_agenda", "retrieval_checked"),
15046  GOUT(),
15047  GOUT_TYPE(),
15048  GOUT_DESC(),
15049  IN("jacobian_agenda", "covmat_sx", "jacobian_quantities"),
15050  GIN(),
15051  GIN_TYPE(),
15052  GIN_DEFAULT(),
15053  GIN_DESC()));
15054 
15055  md_data_raw.push_back(create_mdrecord(
15056  NAME("retrievalAddAbsSpecies"),
15057  DESCRIPTION(
15058  "Adds an absorption species to the retrieval quantities.\n"
15059  "\n"
15060  "Similar to *jacobianAddAbsSpecies* but also sets the corresponding block in\n"
15061  "*covmat_sx* to the matrices provided in *covmat_block* and *covmat_inv_block*.\n"
15062  "The dimensions of *covmat_block* are required to agree with the dimensions of the\n"
15063  "retrieval grid.\n"
15064  "\n"
15065  "*covmat_inv_block* must be either empty or the same dimension as *covmat_block*.\n"
15066  "If provided, this matrix will be used as the inverse for the covariance matrix block\n"
15067  "and numerical inversion of this block is thus avoided. Note, however, that this is\n"
15068  "only effective if this block is uncorrelated with any other retrieval quantity.\n"
15069  "\n"
15070  "For number and order of elements added to *x*, see *jacobianAddAbsSpecies*.\n"),
15071  AUTHORS("Simon Pfreundschuh"),
15072  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15073  GOUT(),
15074  GOUT_TYPE(),
15075  GOUT_DESC(),
15076  IN("covmat_sx",
15077  "jacobian_quantities",
15078  "jacobian_agenda",
15079  "atmosphere_dim",
15080  "covmat_block",
15081  "covmat_inv_block",
15082  "p_grid",
15083  "lat_grid",
15084  "lon_grid"),
15085  GIN("g1", "g2", "g3", "species", "unit", "for_species_tag"),
15086  GIN_TYPE("Vector", "Vector", "Vector", "String", "String", "Index"),
15087  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "rel", "1"),
15088  GIN_DESC("Pressure retrieval grid.",
15089  "Latitude retrieval grid.",
15090  "Longitude retreival grid.",
15091  "The species tag of the retrieval quantity.",
15092  "Retrieval unit. See above.",
15093  "Index-bool for acting on species tags or species."),
15094  SETMETHOD(false),
15095  AGENDAMETHOD(false),
15096  USES_TEMPLATES(false),
15097  PASSWORKSPACE(true)));
15098 
15099  md_data_raw.push_back(create_mdrecord(
15100  NAME("retrievalAddFreqShift"),
15101  DESCRIPTION(
15102  "Same as *jacobianAddFreqShift* but also adds the correlation block\n"
15103  "contained in *covmat_block* and *covmat_inv_block* to *covmat_sx*.\n"
15104  "\n"
15105  "For number and order of elements added to *x*, see *jacobianAddFreqShift*.\n"),
15106  AUTHORS("Simon Pfreundschuh"),
15107  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15108  GOUT(),
15109  GOUT_TYPE(),
15110  GOUT_DESC(),
15111  IN("covmat_sx",
15112  "covmat_block",
15113  "covmat_inv_block",
15114  "jacobian_quantities",
15115  "jacobian_agenda",
15116  "f_grid"),
15117  GIN("df"),
15118  GIN_TYPE("Numeric"),
15119  GIN_DEFAULT("100e3"),
15120  GIN_DESC("Size of perturbation to apply.")));
15121 
15122  md_data_raw.push_back(create_mdrecord(
15123  NAME("retrievalAddFreqStretch"),
15124  DESCRIPTION(
15125  "Same as *jacobianAddFreqShift* but also adds the correlation block\n"
15126  "contained in *covmat_block* and *covmat_inv_block* to *covmat_sx*.\n"
15127  "\n"
15128  "For number and order of elements added to *x*, see *jacobianAddFreqStretch*.\n"),
15129  AUTHORS("Simon Pfreundschuh"),
15130  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15131  GOUT(),
15132  GOUT_TYPE(),
15133  GOUT_DESC(),
15134  IN("jacobian_quantities",
15135  "jacobian_agenda",
15136  "f_grid",
15137  "covmat_block",
15138  "covmat_inv_block"),
15139  GIN("df"),
15140  GIN_TYPE("Numeric"),
15141  GIN_DEFAULT("100e3"),
15142  GIN_DESC("Size of perturbation to apply.")));
15143 
15144  md_data_raw.push_back(create_mdrecord(
15145  NAME("retrievalDefInit"),
15146  DESCRIPTION(
15147  "Begin retrieval definition section.\n"
15148  "\n"
15149  "This function initialises all variables required for defining\n"
15150  "retrieval quantities and corresponding covariance matrices.\n"
15151  "By default, Jacobian quantities should be added withing the.\n"
15152  "retrieval definition section. If Jacobian quantities are\n"
15153  "defined separately *initialize_jacobian* must be set to 0,\n"
15154  "otherwise the quantities will be discarded.\n"),
15155  AUTHORS("Simon Pfreundschuh"),
15156  OUT("covmat_se",
15157  "covmat_sx",
15158  "covmat_block",
15159  "covmat_inv_block",
15160  "jacobian_quantities",
15161  "jacobian_agenda"),
15162  GOUT(),
15163  GOUT_TYPE(),
15164  GOUT_DESC(),
15165  IN(),
15166  GIN("initialize_jacobian"),
15167  GIN_TYPE("Index"),
15168  GIN_DEFAULT("1"),
15169  GIN_DESC("Flag whether or not to (re)initialize Jacobian-related\n"
15170  "quantities. Set to 0 if Jacobian is already defined.")));
15171 
15172  md_data_raw.push_back(create_mdrecord(
15173  NAME("retrievalAddCatalogParameter"),
15174  DESCRIPTION(
15175  "Similar to *jacobianAddBasicCatalogParameter* but also adds a corresponding\n"
15176  "block to *covmat_sx* with the given *var* as variance value.\n"
15177  "\n"
15178  "For number and order of elements added to *x*,\n"
15179  "see *jacobianAddBasicCatalogParameter*.\n"),
15180  AUTHORS("Simon Pfreundschuh"),
15181  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15182  GOUT(),
15183  GOUT_TYPE(),
15184  GOUT_DESC(),
15185  IN("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15186  GIN("catalog_identity", "catalog_parameter", "var"),
15187  GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
15189  GIN_DESC("The catalog line matching information.",
15190  "The catalog parameter of the retrieval quantity.",
15191  "The variance of the catalog parameter.")));
15192 
15193  md_data_raw.push_back(create_mdrecord(
15194  NAME("retrievalAddCatalogParameters"),
15195  DESCRIPTION(
15196  "Same as *jacobianAddBasicCatalogParameters* but also adds a new\n"
15197  "block to *covmat_sx* using the matrices in *covmat_block* and\n"
15198  "*covmat_inv_block*.\n"
15199  "\n"
15200  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15201  "which avoids its numerical computation.\n"
15202  "\n"
15203  "For number and order of elements added to *x*,\n"
15204  "see *jacobianAddBasicCatalogParameters*.\n"),
15205  AUTHORS("Simon Pfreundschuh"),
15206  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15207  GOUT(),
15208  GOUT_TYPE(),
15209  GOUT_DESC(),
15210  IN("covmat_sx",
15211  "jacobian_quantities",
15212  "jacobian_agenda",
15213  "covmat_block",
15214  "covmat_inv_block"),
15215  GIN("catalog_identities", "catalog_parameters"),
15216  GIN_TYPE("ArrayOfQuantumIdentifier", "ArrayOfString"),
15218  GIN_DESC("The catalog line matching informations.",
15219  "The catalog parameters of the retrieval quantity.")));
15220 
15221  md_data_raw.push_back(create_mdrecord(
15222  NAME("retrievalAddMagField"),
15223  DESCRIPTION(
15224  "Same as *jacobianAddMagField* but also adds a new block to *covmat_sx*\n"
15225  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15226  "\n"
15227  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15228  "which avoids its numerical computation.\n"
15229  "\n"
15230  "For number and order of elements added to *x*, see *jacobianAddMagField*.\n"),
15231  AUTHORS("Simon Pfreundschuh"),
15232  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15233  GOUT(),
15234  GOUT_TYPE(),
15235  GOUT_DESC(),
15236  IN("covmat_sx",
15237  "jacobian_quantities",
15238  "jacobian_agenda",
15239  "atmosphere_dim",
15240  "covmat_block",
15241  "covmat_inv_block",
15242  "p_grid",
15243  "lat_grid",
15244  "lon_grid"),
15245  GIN("g1", "g2", "g3", "component", "dB"),
15246  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
15247  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "1.0e-7"),
15248  GIN_DESC("Pressure retrieval grid.",
15249  "Latitude retrieval grid.",
15250  "Longitude retreival grid.",
15251  "Magnetic field component to retrieve",
15252  "Magnetic field perturbation")));
15253 
15254  md_data_raw.push_back(create_mdrecord(
15255  NAME("retrievalAddPointingZa"),
15256  DESCRIPTION(
15257  "Same as *jacobianAddPointingZa* but also adds a new block to *covmat_sx*\n"
15258  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15259  "\n"
15260  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15261  "which avoids its numerical computation.\n"
15262  "\n"
15263  "For number and order of elements added to *x*, see *jacobianAddPointingZa*.\n"),
15264  AUTHORS("Simon Pfreundschuh"),
15265  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15266  GOUT(),
15267  GOUT_TYPE(),
15268  GOUT_DESC(),
15269  IN("covmat_sx",
15270  "jacobian_quantities",
15271  "jacobian_agenda",
15272  "covmat_block",
15273  "covmat_inv_block",
15274  "sensor_pos",
15275  "sensor_time"),
15276  GIN("poly_order", "calcmode", "dza"),
15277  GIN_TYPE("Index", "String", "Numeric"),
15278  GIN_DEFAULT("0", "recalc", "0.01"),
15279  GIN_DESC("Order of polynomial to describe the time variation of "
15280  "pointing off-sets.",
15281  "Calculation method. See above",
15282  "Size of perturbation to apply (when applicable).")));
15283 
15284  md_data_raw.push_back(create_mdrecord(
15285  NAME("retrievalAddPolyfit"),
15286  DESCRIPTION(
15287  "Same as *jacobianAddPolyfit* but also adds a new block to *covmat_sx*\n"
15288  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15289  "\n"
15290  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15291  "which avoids its numerical computation.\n"
15292  "\n"
15293  "For number and order of elements added to *x*, see *jacobianAddPolyfit*.\n"),
15294  AUTHORS("Simon Pfreundschuh"),
15295  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15296  GOUT(),
15297  GOUT_TYPE(),
15298  GOUT_DESC(),
15299  IN("covmat_sx",
15300  "jacobian_quantities",
15301  "jacobian_agenda",
15302  "covmat_block",
15303  "covmat_inv_block",
15304  "sensor_response_pol_grid",
15305  "sensor_response_dlos_grid",
15306  "sensor_pos"),
15307  GIN("poly_order",
15308  "no_pol_variation",
15309  "no_los_variation",
15310  "no_mblock_variation"),
15311  GIN_TYPE("Index", "Index", "Index", "Index"),
15312  GIN_DEFAULT(NODEF, "0", "0", "0"),
15313  GIN_DESC("Polynomial order to use for the fit.",
15314  "Set to 1 if the baseline off-set is the same for all "
15315  "Stokes components.",
15316  "Set to 1 if the baseline off-set is the same for all "
15317  "line-of-sights (inside each measurement block).",
15318  "Set to 1 if the baseline off-set is the same for all "
15319  "measurement blocks.")));
15320 
15321  md_data_raw.push_back(create_mdrecord(
15322  NAME("retrievalAddScatSpecies"),
15323  DESCRIPTION(
15324  "Same as *jacobianAddPolyfit* but also adds a new block to *covmat_sx*\n"
15325  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15326  "\n"
15327  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15328  "which avoids its numerical computation.\n"
15329  "\n"
15330  "For number and order of elements added to *x*, see *jacobianAddScatSpecies*.\n"),
15331  AUTHORS("Simon Pfreundschuh"),
15332  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15333  GOUT(),
15334  GOUT_TYPE(),
15335  GOUT_DESC(),
15336  IN("covmat_sx",
15337  "jacobian_quantities",
15338  "jacobian_agenda",
15339  "atmosphere_dim",
15340  "covmat_block",
15341  "covmat_inv_block",
15342  "p_grid",
15343  "lat_grid",
15344  "lon_grid"),
15345  GIN("g1", "g2", "g3", "species", "quantity"),
15346  GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
15348  GIN_DESC(
15349  "Pressure retrieval grid.",
15350  "Latitude retrieval grid.",
15351  "Longitude retreival grid.",
15352  "Name of scattering species, must match one element in *scat_species*.",
15353  "Retrieval quantity, e.g. \"IWC\"."),
15354  SETMETHOD(false),
15355  AGENDAMETHOD(false),
15356  USES_TEMPLATES(false),
15357  PASSWORKSPACE(true)));
15358 
15359  md_data_raw.push_back(create_mdrecord(
15360  NAME("retrievalAddSinefit"),
15361  DESCRIPTION(
15362  "Same as *jacobianAddSinefit* but also adds a new block to *covmat_sx*\n"
15363  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15364  "\n"
15365  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15366  "which avoids its numerical computation.\n"
15367  "\n"
15368  "For number and order of elements added to *x*, see *jacobianAddSinefit*.\n"),
15369  AUTHORS("Simon Pfreundschuh"),
15370  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15371  GOUT(),
15372  GOUT_TYPE(),
15373  GOUT_DESC(),
15374  IN("covmat_sx",
15375  "jacobian_quantities",
15376  "jacobian_agenda",
15377  "covmat_block",
15378  "covmat_inv_block",
15379  "sensor_response_pol_grid",
15380  "sensor_response_dlos_grid",
15381  "sensor_pos"),
15382  GIN("period_lengths",
15383  "no_pol_variation",
15384  "no_los_variation",
15385  "no_mblock_variation"),
15386  GIN_TYPE("Vector", "Index", "Index", "Index"),
15387  GIN_DEFAULT(NODEF, "0", "0", "0"),
15388  GIN_DESC("Period lengths of the fit.",
15389  "Set to 1 if the baseline off-set is the same for all "
15390  "Stokes components.",
15391  "Set to 1 if the baseline off-set is the same for all "
15392  "line-of-sights (inside each measurement block).",
15393  "Set to 1 if the baseline off-set is the same for all "
15394  "measurement blocks.")));
15395 
15396  md_data_raw.push_back(create_mdrecord(
15397  NAME("retrievalAddSpecialSpecies"),
15398  DESCRIPTION(
15399  "Same as *jacobianAddSpecialSpecies* but also adds a new block to *covmat_sx*\n"
15400  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15401  "\n"
15402  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15403  "which avoids its numerical computation.\n"
15404  "\n"
15405  "For number and order of elements added to *x*, see *jacobianAddSpecialSpecies*.\n"),
15406  AUTHORS("Simon Pfreundschuh"),
15407  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15408  GOUT(),
15409  GOUT_TYPE(),
15410  GOUT_DESC(),
15411  IN("covmat_sx",
15412  "jacobian_quantities",
15413  "jacobian_agenda",
15414  "atmosphere_dim",
15415  "covmat_block",
15416  "covmat_inv_block",
15417  "p_grid",
15418  "lat_grid",
15419  "lon_grid"),
15420  GIN("g1", "g2", "g3", "species"),
15421  GIN_TYPE("Vector", "Vector", "Vector", "String"),
15423  GIN_DESC("Pressure retrieval grid.",
15424  "Latitude retrieval grid.",
15425  "Longitude retreival grid.",
15426  "The species of the retrieval quantity."),
15427  SETMETHOD(false),
15428  AGENDAMETHOD(false),
15429  USES_TEMPLATES(false),
15430  PASSWORKSPACE(true)));
15431 
15432  md_data_raw.push_back(create_mdrecord(
15433  NAME("retrievalAddSurfaceQuantity"),
15434  DESCRIPTION(
15435  "Same as *jacobianAddSurfaceQuantity* but also adds a new block to *covmat_sx*\n"
15436  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15437  "\n"
15438  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15439  "which avoids its numerical computation.\n"
15440  "\n"
15441  "For number and order of elements added to *x*, see *jacobianAddSurfaceQuantity*.\n"),
15442  AUTHORS("Patrick Eriksson"),
15443  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15444  GOUT(),
15445  GOUT_TYPE(),
15446  GOUT_DESC(),
15447  IN("covmat_sx",
15448  "jacobian_quantities",
15449  "jacobian_agenda",
15450  "covmat_block",
15451  "covmat_inv_block",
15452  "atmosphere_dim",
15453  "lat_grid",
15454  "lon_grid"),
15455  GIN("g1", "g2", "quantity"),
15456  GIN_TYPE("Vector", "Vector", "String"),
15458  GIN_DESC("Latitude retrieval grid.",
15459  "Longitude retreival grid.",
15460  "Retrieval quantity, e.g. \"Wind speed\".")));
15461 
15462  md_data_raw.push_back(create_mdrecord(
15463  NAME("retrievalAddTemperature"),
15464  DESCRIPTION(
15465  "Same as *jacobianAddTemperature* but also adds a new block to *covmat_sx*\n"
15466  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15467  "\n"
15468  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15469  "which avoids its numerical computation.\n"
15470  "\n"
15471  "For number and order of elements added to *x*, see *jacobianAddTemperature*.\n"),
15472  AUTHORS("Simon Pfreundschuh"),
15473  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15474  GOUT(),
15475  GOUT_TYPE(),
15476  GOUT_DESC(),
15477  IN("covmat_sx",
15478  "jacobian_quantities",
15479  "jacobian_agenda",
15480  "atmosphere_dim",
15481  "covmat_block",
15482  "covmat_inv_block",
15483  "p_grid",
15484  "lat_grid",
15485  "lon_grid"),
15486  GIN("g1", "g2", "g3", "hse"),
15487  GIN_TYPE("Vector", "Vector", "Vector", "String"),
15488  GIN_DEFAULT(NODEF, NODEF, NODEF, "on"),
15489  GIN_DESC("Pressure retrieval grid.",
15490  "Latitude retrieval grid.",
15491  "Longitude retreival grid.",
15492  "Flag to assume HSE or not (\"on\" or \"off\").")));
15493 
15494  md_data_raw.push_back(create_mdrecord(
15495  NAME("retrievalAddWind"),
15496  DESCRIPTION(
15497  "Same as *jacobianAddWind* but also adds a new block to *covmat_sx*\n"
15498  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15499  "\n"
15500  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15501  "which avoids its numerical computation.\n"
15502  "\n"
15503  "For number and order of elements added to *x*, see *jacobianAddWind*.\n"),
15504  AUTHORS("Simon Pfreundschuh"),
15505  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15506  GOUT(),
15507  GOUT_TYPE(),
15508  GOUT_DESC(),
15509  IN("covmat_sx",
15510  "jacobian_quantities",
15511  "jacobian_agenda",
15512  "atmosphere_dim",
15513  "covmat_block",
15514  "covmat_inv_block",
15515  "p_grid",
15516  "lat_grid",
15517  "lon_grid"),
15518  GIN("g1", "g2", "g3", "component", "dfrequency"),
15519  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
15520  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "0.1"),
15521  GIN_DESC("Pressure retrieval grid.",
15522  "Latitude retrieval grid.",
15523  "Longitude retrieval grid.",
15524  "Wind component to retrieve",
15525  "This is the frequency perturbation")));
15526 
15527  md_data_raw.push_back(create_mdrecord(
15528  NAME("retrievalErrorsExtract"),
15529  DESCRIPTION(
15530  "Extract retrieval error from covariance matrices.\n"
15531  "\n"
15532  "Extracts the error estimates for the retrieved quantities from the covariance\n"
15533  "matrices for the error due to measurement noise *covmat_so* and the error due\n"
15534  "to limited resolution of the observation system *covmat_ss* and stores them in\n"
15535  "the vectors *retrieval_eo* and *retrieval_ss*, respectively."
15536  "\n"
15537  "To etract these errors, first the convariance matrices of which the errors \n"
15538  "should be extracted have to be computed using the WSMs *covmat_soCalc*\n"
15539  "and *covmat_ssCalc* or set to be empty in order to be ignored. Note, however,\n"
15540  "that this will also set the corresponding error vector to be empty.\n"),
15541  AUTHORS("Simon Pfreundschuh"),
15542  OUT("retrieval_eo", "retrieval_ss"),
15543  GOUT(),
15544  GOUT_TYPE(),
15545  GOUT_DESC(),
15546  IN("covmat_so", "covmat_ss"),
15547  GIN(),
15548  GIN_TYPE(),
15549  GIN_DEFAULT(),
15550  GIN_DESC()));
15551 
15552  md_data_raw.push_back(create_mdrecord(
15553  NAME("RT4Calc"),
15554  DESCRIPTION(
15555  "Interface to the PolRadTran RT4 scattering solver (by F. Evans).\n"
15556  "\n"
15557  "RT4 provides the radiation field (*cloudbox_field*) from a vector\n"
15558  "1D scattering solution assuming a plane-parallel atmosphere (flat\n"
15559  "Earth). It calculates up to two Stokes parameters (*stokes_dim*<=2),\n"
15560  "i.e., all azimuthally randomly oriented particles are allowed (this\n"
15561  "also includes macroscopically isotropic particles). Refraction is\n"
15562  "not taken into account.\n"
15563  "\n"
15564  "The scattering solution is internally obtained over the full\n"
15565  "(plane-parallel) atmosphere, i.e. not confined to the cloudbox.\n"
15566  "However, the radiation field output is limited to the cloudbox.\n"
15567  "This allows to consider clearsky RT through a non-spherical\n"
15568  "atmosphere outside the cloudbox improving the RT solution for\n"
15569  "non-plane-parallel media compared to the plain RT4 output.\n"
15570  "\n"
15571  "*nstreams* is the number of polar angles taken into account\n"
15572  "internally in the scattering solution. That is, *nstreams*\n"
15573  "determines the angular resolution, hence the accuracy, of the\n"
15574  "scattering solution. The more anisotropic the bulk scattering\n"
15575  "matrix, the more streams are required. The computational burden\n"
15576  "increases approximately with the third power of *nstreams*.\n"
15577  "The default value (*nstreams*=16) was found to be sufficient for\n"
15578  "most microwave scattering calculations. It is likely insufficient\n"
15579  "for IR calculations involving ice clouds, though.\n"
15580  "\n"
15581  "Here, *za_grid* is NOT an input parameter, but output, and its\n"
15582  "size equals *nstreams* or *nstreams*+2 (Gauss-Legendre and Double\n"
15583  "Gauss quadratures in case *add_straight_angles*=1) (the reason is\n"
15584  "that the computational burden is high for additional angles,\n"
15585  "regardless whether they are quadrature angles or not; hence the\n"
15586  "quadrature angles supplemented with 0 and 180deg are considered to\n"
15587  "provide the best radiation field for a given effort).\n"
15588  "\n"
15589  "The *auto_inc_nstreams* feature can be used to increase the number\n"
15590  "of streams used internally in the scattering solution when found\n"
15591  "necessary.\n"
15592  "NOTE: this number-of-streams increase is only internally - the\n"
15593  "angular dimension of the output *cloudbox_field* is fixed to the\n"
15594  "*nstreams* given as input to this WSM.\n"
15595  "\n"
15596  "Quadrature methods available are: 'L'obatto, 'G'auss-Legendre and\n"
15597  "'D'ouble Gauss quadrature.\n"
15598  "\n"
15599  "This WSM applies *surface_rtprop_agenda* to derive reflection\n"
15600  "matrix and surface emission vector that are directly feed into\n"
15601  "RT4's core solver (instead of their RT4-internal calculation as\n"
15602  "used by *RT4CalcWithRT4Surface*).\n"
15603  "\n"
15604  "Known issues of ARTS implementation:\n"
15605  "- TOA incoming radiation is so far assumed as blackbody cosmic\n"
15606  " background (temperature taken from the ARTS-internal constant).\n"
15607  "\n"
15608  "The keyword *pfct_method* allows to choose the method to extract the\n"
15609  "scattering matrix. 'interpolate' considers temperature dependence,\n"
15610  "others neglect it by chosing one specific temperature grid point\n"
15611  "from the single scattering data: 'low' choses the lowest T-point,\n"
15612  "'high' the highest T-point, and 'median' the median T-point. As\n"
15613  "different scattering elements can have different temperature grids,\n"
15614  "the actual temperature value used can differ between the scattering\n"
15615  "elements.\n"
15616  "Note that this keyword solely affects the scattering matrix;\n"
15617  "extinction matrix and absorption vector are always interpolated to\n"
15618  "the actual temperature.\n"),
15619  AUTHORS("Jana Mendrok"),
15620  OUT("cloudbox_field", "za_grid", "aa_grid"),
15621  GOUT(),
15622  GOUT_TYPE(),
15623  GOUT_DESC(),
15624  IN("atmfields_checked",
15625  "atmgeom_checked",
15626  "scat_data_checked",
15627  "cloudbox_checked",
15628  "cloudbox_on",
15629  "cloudbox_limits",
15630  "propmat_clearsky_agenda",
15631  "surface_rtprop_agenda",
15632  "atmosphere_dim",
15633  "pnd_field",
15634  "t_field",
15635  "z_field",
15636  "vmr_field",
15637  "p_grid",
15638  "scat_data",
15639  "f_grid",
15640  "stokes_dim",
15641  "z_surface"),
15642  GIN("nstreams",
15643  "pfct_method",
15644  "quad_type",
15645  "add_straight_angles",
15646  "pfct_aa_grid_size",
15647  "auto_inc_nstreams",
15648  "robust",
15649  "za_interp_order",
15650  "cos_za_interp",
15651  "max_delta_tau"),
15652  GIN_TYPE("Index",
15653  "String",
15654  "String",
15655  "Index",
15656  "Index",
15657  "Index",
15658  "Index",
15659  "Index",
15660  "Index",
15661  "Numeric"),
15662  GIN_DEFAULT("16", "median", "D", "1", "19", "0", "0", "1", "0", "1e-6"),
15663  GIN_DESC("Number of polar angle directions (streams) in RT4"
15664  " solution (must be an even number).",
15665  "Flag which method to apply to derive phase function (for"
15666  " available options see above).",
15667  "Flag which quadrature to apply in RT4 solution (for"
15668  " available options see above).",
15669  "Flag whether to include nadir and zenith as explicit"
15670  " directions (only effective for quad_type G and D).",
15671  "Number of azimuthal angle grid points to consider in"
15672  " Fourier series decomposition of scattering matrix (only"
15673  " applied for randomly oriented scattering elements)",
15674  "Flag whether to internally increase nstreams (individually"
15675  " per frequency) if norm of (bulk) scattering matrix is not"
15676  " preserved properly. If 0, no adaptation is done. Else"
15677  " *auto_inc_nstreams* gives the maximum number of streams to"
15678  " increase to. Note that the output *cloudbox_field* remains"
15679  " with angular dimension of *nstreams*, only the internal"
15680  " solution is adapted (and then interpolated to the"
15681  " lower-resolution output angular grid).",
15682  "For *auto_inc_nstreams*>0, flag whether to not fail even if"
15683  " scattering matrix norm is not preserved when maximum stream"
15684  " number is reached. Internal RT4 calculations is then"
15685  " performed with nstreams=*auto_inc_nstreams*.",
15686  "For *auto_inc_nstreams*>0, polar angle interpolation order"
15687  " for interpolation from internal increased stream to"
15688  " originally requested nstreams-ifield.",
15689  "For *auto_inc_nstreams*>0, flag whether to do polar angle"
15690  " interpolation in cosine (='mu') space.",
15691  "Maximum optical depth of infinitesimal layer (where single"
15692  " scattering approximation is assumed to apply).")));
15693 
15694  md_data_raw.push_back(create_mdrecord(
15695  NAME("RT4CalcWithRT4Surface"),
15696  DESCRIPTION(
15697  "As RT4Calc except for using RT4's proprietary surface type handling.\n"
15698  "\n"
15699  "This WSM is only indented for testing purposes.\n"
15700  "\n"
15701  "The following surface type/property methods are available and\n"
15702  "require the the following input:\n"
15703  "- 'L'ambertian: *surface_scalar_reflectivity*, *surface_skin_t*\n"
15704  "- 'F'resnel: *surface_complex_refr_index*, *surface_skin_t*\n"
15705  "- 'S'pecular: *surface_reflectivity*, *surface_skin_t*\n"
15706  "'L' and 'F' use proprietary RT4 methods, 'S' uses RT4's Fresnel\n"
15707  "methods modified to behave similar to ARTS'\n"
15708  "*surfaceFlatReflectivity*.\n"),
15709  AUTHORS("Jana Mendrok"),
15710  OUT("cloudbox_field", "za_grid", "aa_grid"),
15711  GOUT(),
15712  GOUT_TYPE(),
15713  GOUT_DESC(),
15714  IN("atmfields_checked",
15715  "atmgeom_checked",
15716  "scat_data_checked",
15717  "cloudbox_checked",
15718  "cloudbox_on",
15719  "cloudbox_limits",
15720  "propmat_clearsky_agenda",
15721  "atmosphere_dim",
15722  "pnd_field",
15723  "t_field",
15724  "z_field",
15725  "vmr_field",
15726  "p_grid",
15727  "scat_data",
15728  "f_grid",
15729  "stokes_dim",
15730  "z_surface",
15731  "surface_skin_t",
15732  "surface_scalar_reflectivity",
15733  "surface_reflectivity",
15734  "surface_complex_refr_index"),
15735  GIN("nstreams",
15736  "pfct_method",
15737  "ground_type",
15738  "quad_type",
15739  "add_straight_angles",
15740  "pfct_aa_grid_size",
15741  "auto_inc_nstreams",
15742  "robust",
15743  "za_interp_order",
15744  "cos_za_interp",
15745  "max_delta_tau"),
15746  GIN_TYPE("Index",
15747  "String",
15748  "String",
15749  "String",
15750  "Index",
15751  "Index",
15752  "Index",
15753  "Index",
15754  "Index",
15755  "Index",
15756  "Numeric"),
15757  GIN_DEFAULT(
15758  "16", "median", "A", "D", "1", "19", "0", "0", "1", "0", "1e-6"),
15759  GIN_DESC("Number of polar angle directions (streams) in RT4"
15760  " solution (must be an even number).",
15761  "Flag which method to apply to derive phase function (for"
15762  " available options see above).",
15763  "Flag which surface type/surface property method to use"
15764  " (for available options see above).",
15765  "Flag which quadrature to apply in RT4 solution (for"
15766  " available options see above).",
15767  "Flag whether to include nadir and zenith as explicit"
15768  " directions (only effective for quad_type G and D).",
15769  "Number of azimuthal angle grid points to consider in"
15770  " Fourier series decomposition of scattering matrix (only"
15771  " applied for randomly oriented scattering elements)",
15772  "Flag whether to internally increase nstreams (individually"
15773  " per frequency) if norm of (bulk) scattering matrix is not"
15774  " preserved properly. If 0, no adaptation is done. Else"
15775  " *auto_inc_nstreams* gives the maximum number of streams to"
15776  " increase to.",
15777  "For *auto_inc_nstreams*>0, flag whether to not fail even if"
15778  " scattering matrix norm is not preserved when maximum stream"
15779  " number is reached. Internal RT4 calculations is then"
15780  " performed with nstreams=*auto_inc_nstreams*.",
15781  "For *auto_inc_nstreams*>0, polar angle interpolation order"
15782  " for interpolation from internal increased stream to"
15783  " originally requested nstreams-ifield.",
15784  "For *auto_inc_nstreams*>0, flag whether to do polar angle"
15785  " interpolation in cosine (='mu') space.",
15786  "Maximum optical depth of infinitesimal layer (where single"
15787  " scattering approximation is assumed to apply).")));
15788 
15789  md_data_raw.push_back(create_mdrecord(
15790  NAME("RT4Test"),
15791  DESCRIPTION(
15792  "RT4 validation test.\n"
15793  "\n"
15794  "Executes test case testc shipped with PolRadTran/RT4 code (but uses\n"
15795  "data files converted to arts-xml). Output written to (xml-)file.\n"),
15796  AUTHORS("Jana Mendrok"),
15797  OUT(),
15798  GOUT("out_rad"),
15799  GOUT_TYPE("Tensor4"),
15800  GOUT_DESC("RT4 testc calculation results."),
15801  IN(),
15802  GIN("datapath"),
15803  GIN_TYPE("String"),
15804  GIN_DEFAULT("artscomponents/polradtran/testdata/"),
15805  GIN_DESC("Folder containing arts-xml converted test case input data.")));
15806 
15807  md_data_raw.push_back(create_mdrecord(
15808  NAME("rte_losGeometricFromRtePosToRtePos2"),
15809  DESCRIPTION(
15810  "The geometric line-of-sight between two points.\n"
15811  "\n"
15812  "The method sets *rte_los* to the line-of-sight, at *rte_pos*,\n"
15813  "that matches the geometrical propagation path between *rte_pos*\n"
15814  "and *rte_pos2*.\n"
15815  "\n"
15816  "The standard case should be that *rte_pos2* corresponds to a\n"
15817  "transmitter, and *rte_pos* to the receiver/sensor.\n"),
15818  AUTHORS("Patrick Eriksson"),
15819  OUT("rte_los"),
15820  GOUT(),
15821  GOUT_TYPE(),
15822  GOUT_DESC(),
15823  IN("atmosphere_dim",
15824  "lat_grid",
15825  "lon_grid",
15826  "refellipsoid",
15827  "rte_pos",
15828  "rte_pos2"),
15829  GIN(),
15830  GIN_TYPE(),
15831  GIN_DEFAULT(),
15832  GIN_DESC()));
15833 
15834  md_data_raw.push_back(
15835  create_mdrecord(NAME("rte_losSet"),
15836  DESCRIPTION("Sets *rte_los* to the given angles.\n"
15837  "\n"
15838  "The azimuth angle is ignored for 1D and 2D.\n"),
15839  AUTHORS("Patrick Eriksson"),
15840  OUT("rte_los"),
15841  GOUT(),
15842  GOUT_TYPE(),
15843  GOUT_DESC(),
15844  IN("atmosphere_dim"),
15845  GIN("za", "aa"),
15846  GIN_TYPE("Numeric", "Numeric"),
15848  GIN_DESC("Zenith angle of sensor line-of-sight.",
15849  "Azimuth angle of sensor line-of-sight.")));
15850 
15851  md_data_raw.push_back(create_mdrecord(
15852  NAME("rte_posSet"),
15853  DESCRIPTION(
15854  "Sets *rte_pos* to the given co-ordinates.\n"
15855  "\n"
15856  "The longitude is ignored for 1D and 2D, and the latitude is also \n"
15857  "ignored for 1D.\n"),
15858  AUTHORS("Patrick Eriksson"),
15859  OUT("rte_pos"),
15860  GOUT(),
15861  GOUT_TYPE(),
15862  GOUT_DESC(),
15863  IN("atmosphere_dim"),
15864  GIN("z", "lat", "lon"),
15865  GIN_TYPE("Numeric", "Numeric", "Numeric"),
15867  GIN_DESC("Geometrical altitude of sensor position.",
15868  "Latitude of sensor position.",
15869  "Longitude of sensor position.")));
15870 
15871  md_data_raw.push_back(create_mdrecord(
15872  NAME("rte_pos_losMoveToStartOfPpath"),
15873  DESCRIPTION(
15874  "Sets *rte_pos* and *rte_los* to values for last point in *ppath*.\n"
15875  "\n"
15876  "For example, if the propagation path intersects with the surface,\n"
15877  "this method gives you the position and angle of *ppath* at the\n"
15878  "surface.\n"),
15879  AUTHORS("Patrick Eriksson"),
15880  OUT("rte_pos", "rte_los"),
15881  GOUT(),
15882  GOUT_TYPE(),
15883  GOUT_DESC(),
15884  IN("atmosphere_dim", "ppath"),
15885  GIN(),
15886  GIN_TYPE(),
15887  GIN_DEFAULT(),
15888  GIN_DESC()));
15889 
15890 
15891  md_data_raw.push_back(create_mdrecord(
15892  NAME("rtp_nlteFromRaw"),
15893  DESCRIPTION("Sets NLTE values manually\n"
15894  "\n"
15895  "Touch\n"),
15896  AUTHORS("Richard Larsson"),
15897  OUT("rtp_nlte"),
15898  GOUT(),
15899  GOUT_TYPE(),
15900  GOUT_DESC(),
15901  IN("nlte_level_identifiers",
15902  "nlte_vibrational_energies"),
15903  GIN("data"),
15904  GIN_TYPE("Vector"),
15905  GIN_DEFAULT(NODEF),
15906  GIN_DESC("Vibrational data [nlevels]")));
15907 
15908  md_data_raw.push_back(create_mdrecord(
15909  NAME("ScatElementsPndAndScatAdd"),
15910  DESCRIPTION(
15911  "Adds single scattering data and particle number density for\n"
15912  "individual scattering elements.\n"
15913  "\n"
15914  "The methods reads the specified files and appends the obtained data\n"
15915  "to *scat_data* and *pnd_field_raw*. Scattering data is appended to\n"
15916  "the current last existing scattering species in *scat_data*.\n"),
15917  AUTHORS("Claudia Emde, Jana Mendrok"),
15918  OUT("scat_data_raw", "pnd_field_raw"),
15919  GOUT(),
15920  GOUT_TYPE(),
15921  GOUT_DESC(),
15922  IN("scat_data_raw", "pnd_field_raw", "atmosphere_dim"),
15923  GIN("scat_data_files", "pnd_field_files"),
15924  GIN_TYPE("ArrayOfString", "ArrayOfString"),
15926  GIN_DESC("List of names of single scattering data files.",
15927  "List of names of the corresponding pnd_field files.")));
15928 
15929  md_data_raw.push_back(create_mdrecord(
15930  NAME("ScatElementsSelect"),
15931  DESCRIPTION(
15932  "Allows to limit considered scattering elements according to size.\n"
15933  "\n"
15934  "Scattering elements of a specified scattering species are removed\n"
15935  "from *scat_data_raw* and *scat_meta*, i.e. removed from further\n"
15936  "calculations, if their particle size exceeds the specified limits.\n"
15937  "Specification of the scattering species is done by name matching the\n"
15938  "scattering species name part of *scat_species* tag.\n"
15939  "As size parameter, all size parameters reported by the meta data\n"
15940  "can be used (see *scat_meta_single* for offered parameters and\n"
15941  "their naming).\n"),
15942  AUTHORS("Daniel Kreyling, Oliver Lemke, Jana Mendrok"),
15943  OUT("scat_data_raw", "scat_meta"),
15944  GOUT(),
15945  GOUT_TYPE(),
15946  GOUT_DESC(),
15947  IN("scat_data_raw", "scat_meta", "scat_species"),
15948  GIN("species", "sizeparam", "sizemin", "sizemax", "tolerance", "delim"),
15949  GIN_TYPE("String", "String", "Numeric", "Numeric", "Numeric", "String"),
15950  GIN_DEFAULT(NODEF, NODEF, "0.", "-1.", "1e-6", "-"),
15951  GIN_DESC("Species on which to apply size selection.",
15952  "Size parameter to apply for size selection.",
15953  "Minimum size [m] of the scattering elements to consider",
15954  "Maximum size [m] of the scattering elements to consider (if "
15955  "negative, no max. limitation is applied).",
15956  "Relative numerical tolerance of size limit values.",
15957  "Delimiter string of *scat_species* elements.")));
15958 
15959  md_data_raw.push_back(create_mdrecord(
15960  NAME("ScatElementsToabs_speciesAdd"),
15961  DESCRIPTION(
15962  "Appends scattering elements to *abs_species* including reading\n"
15963  "single scattering data and corresponding pnd field.\n"
15964  "\n"
15965  "The methods reads the specified single scattering and pnd_field\n"
15966  "data of individual scattering elements and appends the obtained data\n"
15967  "to *scat_data* (appending to its last scattering species) and\n"
15968  "*vmr_field_raw*. Per scattering element, it also appends one\n"
15969  "instance of species 'particles' to *abs_species*.\n"),
15970  AUTHORS("Jana Mendrok"),
15971  OUT("scat_data_raw",
15972  "vmr_field_raw",
15973  "abs_species",
15974  "propmat_clearsky_agenda_checked",
15975  "abs_xsec_agenda_checked"),
15976  GOUT(),
15977  GOUT_TYPE(),
15978  GOUT_DESC(),
15979  IN("scat_data_raw",
15980  "vmr_field_raw",
15981  "abs_species",
15982  "propmat_clearsky_agenda_checked",
15983  "abs_xsec_agenda_checked",
15984  "atmosphere_dim",
15985  "f_grid"),
15986  GIN("scat_data_files", "pnd_field_files"),
15987  GIN_TYPE("ArrayOfString", "ArrayOfString"),
15989  GIN_DESC("List of names of single scattering data files.",
15990  "List of names of the corresponding pnd_field files.")));
15991 
15992  md_data_raw.push_back(create_mdrecord(
15993  NAME("ScatSpeciesExtendTemperature"),
15994  DESCRIPTION(
15995  "Extends valid temperature range of single scattering data.\n"
15996  "\n"
15997  "The method allows to extend the temperature range of given single\n"
15998  "scattering data by duplicating optical property data at the low\n"
15999  "and/or high limits of the associated temperature grid. *T_low* and\n"
16000  "*T_high* specify the temperature grid points that are added.\n"
16001  "Extension is only performed if *T_low* is lower and *T_high* is\n"
16002  "higher than the original lowest and highest temperatures,\n"
16003  "respectively, and if the original data contains more than one\n"
16004  "temperature grid point (i.e., when not assumed constant anyways).\n"
16005  "\n"
16006  "The method is thought, e.g., for atmospheric ice falling into\n"
16007  "atmospheric layers with temperatures above the melting point of\n"
16008  "ice, where ambient and particle temperature deviate (as long as\n"
16009  "frozen the ice temperature remains at the melting point\n"
16010  "temperature). It is not internally checked, whether the original\n"
16011  "data includes the melting point.\n"
16012  "The method can be used in a wider sense. However, it remains in the\n"
16013  "responsibility of the user to apply the method in a meaningful\n"
16014  "sense and on meaningful single scattering data.\n"
16015  "\n"
16016  "The temperature extension is applied on all scattering elements of\n"
16017  "a scattering species. If *scat_species* is defined, *species* can\n"
16018  "be used to select the species on which the extension shall be\n"
16019  "applied comparing *species* with the scattering species name part\n"
16020  "of *scat_species*. If no *species* is specified, the method is\n"
16021  "applied on the current last existing scattering species in\n"
16022  "*scat_data*. Through the latter the method can be applied for cases\n"
16023  "when *scat_species* is not defined (e.g. when *pnd_field* data is\n"
16024  "created externally instead of from hydrometeor fields \n"),
16025  AUTHORS("Jana Mendrok"),
16026  OUT("scat_data_raw"),
16027  GOUT(),
16028  GOUT_TYPE(),
16029  GOUT_DESC(),
16030  IN("scat_data_raw", "scat_species"),
16031  GIN("species", "scat_species_delim", "T_low", "T_high"),
16032  GIN_TYPE("String", "String", "Numeric", "Numeric"),
16033  GIN_DEFAULT("", "-", "-1.", "-1."),
16034  GIN_DESC(
16035  "Scattering species to act on (see WSM description for details).",
16036  "Delimiter string of *scat_species* elements.",
16037  "Temperature grid extension point at low temperature limit.",
16038  "Temperature grid extension point at high temperature limit.")));
16039 
16040  md_data_raw.push_back(create_mdrecord(
16041  NAME("ScatSpeciesInit"),
16042  DESCRIPTION(
16043  "Initializes the scattering species related data variables.\n"
16044  "\n"
16045  "This method initializes the *scat_species* WSV, the variables that\n"
16046  "will hold the raw optical properties and the raw particle number\n"
16047  "distributions of the scattering elements (*scat_data_raw* and\n"
16048  "*pnd_field_raw*, respectively) as well as the one holding the meta\n"
16049  "information about the scattering elements (*scat_meta*).\n"
16050  "\n"
16051  "This method has to be executed before WSM reading/adding to the\n"
16052  "said variable, e.g. before *ScatSpeciesPndAndScatAdd*.\n"),
16053  AUTHORS("Jana Mendrok"),
16054  OUT("scat_species",
16055  "scat_data_raw",
16056  "scat_meta",
16057  "scat_data_checked",
16058  "pnd_field_raw"),
16059  GOUT(),
16060  GOUT_TYPE(),
16061  GOUT_DESC(),
16062  IN(),
16063  GIN(),
16064  GIN_TYPE(),
16065  GIN_DEFAULT(),
16066  GIN_DESC()));
16067 
16068  //TODO: Check if ScatSpeciesMerge can be removed
16069  md_data_raw.push_back(create_mdrecord(
16070  NAME("ScatSpeciesMerge"),
16071  DESCRIPTION(
16072  "Merges single scattering data of all scattering elements into one\n"
16073  "element of bulk properties.\n"
16074  "\n"
16075  "Before entering the scattering solver, this method prepares the\n"
16076  "effective bulk single scattering properties of all scattering\n"
16077  "elements. Done by calculating the particle number density weighted\n"
16078  "sum of the single scattering properties of all scattering elements\n"
16079  "per pressure level. Accordingly, *pnd_field* is resized to\n"
16080  "[np, np, 1, 1], where np is the number of pressure levels inside\n"
16081  "the cloudbox. The diagonal elements of the new *pnd_field* are set\n"
16082  "to 1, all others to 0. *scat_data* is resized to np. Each new\n"
16083  "scattering element represents the weighted sum of all particles at\n"
16084  "one presssure level.\n"
16085  "\n"
16086  "The method also adapts *scat_species* and *scat_meta* such that\n"
16087  "they remain consistent with *pnd_field* and can pass\n"
16088  "*cloudbox_checkedCalc*.\n"
16089  "\n"
16090  "The method is suggested to be called directly after\n"
16091  "*pnd_fieldCalcFromParticleBulkProps* (but also after\n"
16092  "*cloudbox_checkedCalc*).\n"
16093  "Its purpose is to speed up the scattering calculations.\n"
16094  "\n"
16095  "This is an experimental method currently only working for limited\n"
16096  "cases. All scattering elements must be of the same ptype and must\n"
16097  "share the same *f_grid*, *za_grid*, and *aa_grid*. That is, the\n"
16098  "scattering matrix, extinction matrix, and absorption vector of all\n"
16099  "scattering elements must have the same dimensions. No interpolation\n"
16100  "(apart from temperature) is performed.\n"
16101  "\n"
16102  "This method can only be used with a 1D atmosphere.\n"),
16103  AUTHORS("Oliver Lemke"),
16104  OUT("pnd_field",
16105  "scat_data",
16106  "scat_meta",
16107  "scat_species",
16108  "cloudbox_checked"),
16109  GOUT(),
16110  GOUT_TYPE(),
16111  GOUT_DESC(),
16112  IN("pnd_field",
16113  "scat_data",
16114  "scat_meta",
16115  "scat_species",
16116  "cloudbox_checked",
16117  "atmosphere_dim",
16118  "cloudbox_on",
16119  "cloudbox_limits",
16120  "t_field",
16121  "z_field",
16122  "z_surface"),
16123  GIN(),
16124  GIN_TYPE(),
16125  GIN_DEFAULT(),
16126  GIN_DESC()));
16127 
16128  md_data_raw.push_back(create_mdrecord(
16129  NAME("ScatSpeciesPndAndScatAdd"),
16130  DESCRIPTION(
16131  "Adds single scattering data and particle number densities for one\n"
16132  "scattering species.\n"
16133  "\n"
16134  "The WSV *pnd_field_raw* containing particle number densities for\n"
16135  "all scattering species can be generated outside ARTS, for example\n"
16136  "by using PyARTS or atmlab. This method reads this data as well as\n"
16137  "its corresponding single scattering data, which is added as a new\n"
16138  "scattering species to *scat_data*.\n"
16139  "This method needs as input an ArrayOfString holding the filenames\n"
16140  "of the single scattering data for each scattering element and a\n"
16141  "file containing the corresponding *pnd_field_raw*. In contrast to\n"
16142  "the scattering data, the pnd-fields are stored in a single XML-file\n"
16143  "containing an ArrayofGriddedField3, i.e. holding the pnd-field data\n"
16144  "of all scattering elements.\n"
16145  "\n"
16146  "Important note:\n"
16147  "The order of the filenames for the scattering data files has to\n"
16148  "correspond to the order of the pnd-fields, stored in the variable\n"
16149  "*pnd_field_raw*.\n"),
16150  AUTHORS("Claudia Emde, Jana Mendrok"),
16151  OUT("scat_data_raw", "pnd_field_raw"),
16152  GOUT(),
16153  GOUT_TYPE(),
16154  GOUT_DESC(),
16155  IN("scat_data_raw", "pnd_field_raw", "atmosphere_dim"),
16156  GIN("scat_data_files", "pnd_fieldarray_file"),
16157  GIN_TYPE("ArrayOfString", "String"),
16159  GIN_DESC(
16160  "Array of names of files containing the single scattering data.",
16161  "Name of file holding the corresponding array of pnd_field data.")));
16162 
16163  md_data_raw.push_back(create_mdrecord(
16164  NAME("ScatSpeciesScatAndMetaRead"),
16165  DESCRIPTION(
16166  "Reads single scattering data and scattering meta data for one\n"
16167  "scattering species.\n"
16168  "\n"
16169  "This method takes a string array as input containing the location\n"
16170  "(path and filename) of the single scattering data. Location of\n"
16171  "corresponding scattering meta data is derived applying a naming\n"
16172  "convention: ending '.xml*' is replaced by '.meta.xml' (search for\n"
16173  "zipped files is done automatically).\n"
16174  "\n"
16175  "All scattering elements read in one call of the method are assigned\n"
16176  "to one and the same scattering species. That is, reading in data for\n"
16177  "a bunch of scattering species can be realized by multiple call of\n"
16178  "this method. Assignment to scattering species is in the order of the\n"
16179  "calls (i.e., first method call reads data for first *scat_species*\n"
16180  "entry, second call for second scat_species entry and so on).\n"
16181  "Note that no two scattering elements of the same scattering species\n"
16182  "are allowed to be equal in size*\n"
16183  "\n"
16184  "Important note:\n"
16185  "The order of the filenames for the single scattering data files has to\n"
16186  "exactly correspond to the order of the scattering meta data files.\n"),
16187  AUTHORS("Daniel Kreyling, Oliver Lemke, Jana Mendrok"),
16188  OUT("scat_data_raw", "scat_meta"),
16189  GOUT(),
16190  GOUT_TYPE(),
16191  GOUT_DESC(),
16192  IN("scat_data_raw", "scat_meta"),
16193  GIN("scat_data_files"),
16194  GIN_TYPE("ArrayOfString"),
16195  GIN_DEFAULT(NODEF),
16196  GIN_DESC("Array of single scattering data file names.")));
16197 
16198  md_data_raw.push_back(create_mdrecord(
16199  NAME("scat_data_singleTmatrix"),
16200  DESCRIPTION(
16201  "A basic interface to Mishchenko's T-matrix code linked to ARTS.\n"
16202  "\n"
16203  "The method performs a T-matrix calculation for a single scattering\n"
16204  "element, i.e. a combination of particle shape, size, aspect ratio\n"
16205  "and orientation.\n"
16206  "\n"
16207  "Particle shape (*shape*) has two options:\n"
16208  " \"spheroidal\" and \"cylindrical\"\n"
16209  "\n"
16210  "Particle size (*diameter_volume_equ*) is given as the equivalent\n"
16211  "volume sphere diameter. That is, the diameter obtained if all the\n"
16212  "particle's material is rearranged into a (solid) sphere.\n"
16213  "\n"
16214  "Particle aspect ratio ar (*aspect_ratio*) is a numeric value, defined\n"
16215  "according to Mishchenko's definition as ratio of horizontal axis a to\n"
16216  "vertical (rotational) axis b: ar=a/b. That is, oblates have ar>1,\n"
16217  "prolates ar<1.\n"
16218  "Perfect spheres (spheroidals with ar=1) can trigger numerical issues.\n"
16219  "To avoid these, we internally increase their aspect ratio by 1e-6,\n"
16220  "i.e. turning perfect spheres into very light oblates.\n"
16221  "\n"
16222  "Particle type (*ptype*) has two options:\n"
16223  " \"totally_random\" and \"azimuthally_random\"\n"
16224  "For totally randomly oriented particles, *data_aa_grid* is not taken\n"
16225  "into account (but a Vector type container needs to be passed).\n"
16226  "\n"
16227  "For further information on how aspect ratio and the different shapes\n"
16228  "and orientations are defined, see the documentation of the T-matrix\n"
16229  "code found http://www.giss.nasa.gov/staff/mmishchenko/t_matrix.html\n"
16230  "\n"
16231  "Regarding *ndgs*, we refer to the this comment from the documentation:\n"
16232  " \"Parameter controlling the number of division points\n"
16233  " in computing integrals over the particle surface.\n"
16234  " For compact particles, the recommended value is 2.\n"
16235  " For highly aspherical particles larger values (3, 4,...)\n"
16236  " may be necessary to obtain convergence.\n"
16237  " The code does not check convergence over this parameter.\n"
16238  " Therefore, control comparisons of results obtained with\n"
16239  " different NDGS-values are recommended.\"\n"),
16240  AUTHORS("Johan Strandgren", "Patrick Eriksson"),
16241  OUT("scat_data_single", "scat_meta_single"),
16242  GOUT(),
16243  GOUT_TYPE(),
16244  GOUT_DESC(),
16245  IN("complex_refr_index"),
16246  GIN("shape",
16247  "diameter_volume_equ",
16248  "aspect_ratio",
16249  "mass",
16250  "ptype",
16251  "data_f_grid",
16252  "data_t_grid",
16253  "data_za_grid",
16254  "data_aa_grid",
16255  "precision",
16256  "cri_source",
16257  "ndgs",
16258  "robust",
16259  "quiet"),
16260  GIN_TYPE("String",
16261  "Numeric",
16262  "Numeric",
16263  "Numeric",
16264  "String",
16265  "Vector",
16266  "Vector",
16267  "Vector",
16268  "Vector",
16269  "Numeric",
16270  "String",
16271  "Index",
16272  "Index",
16273  "Index"),
16275  NODEF,
16276  NODEF,
16277  "NaN",
16278  NODEF,
16279  NODEF,
16280  NODEF,
16281  NODEF,
16282  "[]",
16283  "0.001",
16284  "Set by user, unknown source.",
16285  "2",
16286  "0",
16287  "1"),
16288  GIN_DESC("Particle shape. Options listed above.",
16289  "Particle volume equivalent diameter [m]. See defintion above.",
16290  "Particle aspect ratio.",
16291  "Particle mass. This information is just included in the meta"
16292  " data, and does not affect the T-matrix calculations.",
16293  "Particle type/orientation. Options listed above.",
16294  "Frequency grid of the scattering data to be calculated.",
16295  "Temperature grid of the scattering data to be calculated.",
16296  "Zenith angle grid of the scattering data to be calculated.",
16297  "Azimuth angle grid of the scattering data to be calculated.",
16298  "Accuracy of the computations.",
16299  "String describing the source of *complex_refr_index*, for"
16300  " inclusion in meta data.",
16301  "See above. So far only applied for random orientation.",
16302  "Continue even if individual T-matrix calculations fail. "
16303  "Respective scattering element data will be NAN.",
16304  "Suppress print output from tmatrix fortran code.")));
16305 
16306  /*
16307  md_data_raw.push_back
16308  ( create_mdrecord
16309  ( NAME( "scat_metaAddTmatrix" ),
16310  DESCRIPTION
16311  (
16312  "This method adds scattering element meta data to the workspace variable\n"
16313  "*scat_meta*.\n"
16314  "\n"
16315  "One set of meta data is created and added to the array for each\n"
16316  "combination of maximum diameter and aspect ratio in the GINs\n"
16317  "diameter_max_grid and aspect_ratio_grid. The size of *scat_meta*\n"
16318  "and hence the usage has been extended. For that reason, a short summary\n"
16319  "below tells which input parameters are required for certain further\n"
16320  "calculations.\n"
16321  "\n"
16322  "String[description]\t\tNot used for any particular calculations\n"
16323  "String[material]\t\tUsed for PND calculations\n"
16324  "String[shape]\t\t\tUsed for scattering and PND calculations\n"
16325  "Numeric[ptype]\t\tUsed for scattering calculations\n"
16326  "Numeric[density]\t\tUsed for PND calculations\n"
16327  "Vector[diameter_max_grid]\t\tUsed for both scattering and PND calculations\n"
16328  "Vector[aspect_ratio_grid]\t\tUsed for scattering calculations and PND calculations\n"
16329  "Vector[scat_f_grid]\t\tUsed for scattering calculations\n"
16330  "Vector[scat_T_grid]\t\tUsed for scattering calculations\n"
16331  "Tensor3[complex_refr_index]\tUsed for scattering calculations\n"
16332  ),
16333  AUTHORS( "Johan Strandgren" ),
16334  OUT("scat_meta"),
16335  GOUT(),
16336  GOUT_TYPE(),
16337  GOUT_DESC(),
16338  IN( "scat_meta", "complex_refr_index" ),
16339  GIN( "description", "material", "shape", "ptype", "density",
16340  "aspect_ratio_grid", "diameter_max_grid", "scat_f_grid", "scat_T_grid" ),
16341  GIN_TYPE( "String", "String", "String", "String", "Numeric", "Vector",
16342  "Vector", "Vector", "Vector" ),
16343  GIN_DEFAULT( "", "undefined", NODEF, NODEF, "-999", NODEF, NODEF,
16344  NODEF, NODEF ),
16345  GIN_DESC( "Particle description", "Water or Ice", "spheroidal or cylinder",
16346  "Particle Type: "totally_random" (20) or "azimuthally_random" (30)",
16347  "Particle mass density",
16348  "Particle aspect ratio vector",
16349  "Maximum diameter vector (diameter of a sphere that fully"
16350  "encloses the particle)",
16351  "Frequency grid vector",
16352  "Temperature grid vector" )
16353  ));
16354 */
16355 
16356  md_data_raw.push_back(create_mdrecord(
16357  NAME("scat_data_checkedCalc"),
16358  DESCRIPTION(
16359  "Checks dimensions, grids and single scattering properties of all\n"
16360  "scattering elements in *scat_data*.\n"
16361  "\n"
16362  "Dimension and grid equirements:\n"
16363  "- The scattering element's f_grid is either identical to *f_grid* or\n"
16364  " of dimension 1.\n"
16365  "- In the latter case, the scattering element's f_grid value must\n"
16366  " not deviate from any of the *f_grid* values by more than a\n"
16367  " fraction of *dfrel_threshold*.\n"
16368  "- The frequency dimension of pha_mat_data, ext_mat_data, and\n"
16369  " abs_vec_data is either equal to the scattering element's f_grid\n"
16370  " or 1.\n"
16371  "- The temperature dimension of pha_mat_data, ext_mat_data, and\n"
16372  " abs_vec_data is either equal to the scattering element's T_grid\n"
16373  " or 1.\n"
16374  "- The temperature dimension of ext_mat_data, and abs_vec_data is\n"
16375  " identical.\n"
16376  "\n"
16377  "The single scattering property contents are checked using\n"
16378  "*scat_dataCheck*. For details, see there. The depth of these checks\n"
16379  "and their rigour can adapted (see description of parameters\n"
16380  "*check_level* and *sca_mat_threshold* in *scat_dataCheck*) or can\n"
16381  "be skipped entirely (setting *check_level* to 'none').\n"
16382  "NOTE: These test shall only be skipped when one is confident that\n"
16383  "the data is correct, e.g. by having run *scat_dataCheck* on the set\n"
16384  "of data before, e.g. in a separate ARTS run.\n"),
16385  AUTHORS("Jana Mendrok"),
16386  OUT("scat_data_checked"),
16387  GOUT(),
16388  GOUT_TYPE(),
16389  GOUT_DESC(),
16390  IN("scat_data", "f_grid"),
16391  GIN("dfrel_threshold", "check_level", "sca_mat_threshold"),
16392  GIN_TYPE("Numeric", "String", "Numeric"),
16393  GIN_DEFAULT("0.1", "all", "5e-2"),
16394  GIN_DESC("Maximum relative frequency deviation between (single entry)"
16395  " scattering element f_grid values and the RT calculation's"
16396  " *f_grid*.",
16397  "See *check_level* in *scat_dataCheck*.",
16398  "See *sca_mat_threshold* in *scat_dataCheck*.")));
16399 
16400  md_data_raw.push_back(create_mdrecord(
16401  NAME("scat_data_monoCalc"),
16402  DESCRIPTION(
16403  "Interpolates *scat_data* by frequency to give *scat_data_mono*.\n"),
16404  AUTHORS("Cory Davis"),
16405  OUT("scat_data_mono"),
16406  GOUT(),
16407  GOUT_TYPE(),
16408  GOUT_DESC(),
16409  IN("scat_data", "f_grid", "f_index"),
16410  GIN(),
16411  GIN_TYPE(),
16412  GIN_DEFAULT(),
16413  GIN_DESC()));
16414 
16415  md_data_raw.push_back(create_mdrecord(
16416  NAME("scat_data_monoExtract"),
16417  DESCRIPTION(
16418  "Extracts data at *f_index* from *scat_data* to give *scat_data_mono*.\n"),
16419  AUTHORS("Jana Mendrok"),
16420  OUT("scat_data_mono"),
16421  GOUT(),
16422  GOUT_TYPE(),
16423  GOUT_DESC(),
16424  IN("scat_data", "f_index"),
16425  GIN(),
16426  GIN_TYPE(),
16427  GIN_DEFAULT(),
16428  GIN_DESC()));
16429 
16430  md_data_raw.push_back(create_mdrecord(
16431  NAME("scat_dataCalc"),
16432  DESCRIPTION(
16433  "Prepares *scat_data* for the scattering solver.\n"
16434  "\n"
16435  "Derives single scattering data for the frequencies given by\n"
16436  "*f_grid* by interpolation from *scat_data_raw*. *f_grid* should be\n"
16437  "the actual WSV *f_grid* or a single-element Vector.\n"),
16438  AUTHORS("Jana Mendrok"),
16439  OUT("scat_data"),
16440  GOUT(),
16441  GOUT_TYPE(),
16442  GOUT_DESC(),
16443  IN("scat_data_raw", "f_grid"),
16444  GIN("interp_order"),
16445  GIN_TYPE("Index"),
16446  GIN_DEFAULT("1"),
16447  GIN_DESC("Interpolation order.")));
16448 
16449  md_data_raw.push_back(create_mdrecord(
16450  NAME("scat_dataCheck"),
16451  DESCRIPTION(
16452  "Method for checking the validity and consistency of the single\n"
16453  "scattering properties in *scat_data*.\n"
16454  "\n"
16455  "It checks that *scat_data* does not contain any invalid values,\n"
16456  "that is any NaN elements in K, Z, or a or any negative values in\n"
16457  "the 'scalar' properties K11, Z11, and a1.\n"
16458  "\n"
16459  "When *check_type* is 'all', it is furthermore checked that the\n"
16460  "scattering matrix is properly normalized, that is that the solid\n"
16461  "sphere integrated scattering matrix (int_Z11), which is supposed to\n"
16462  "be normalized to the scattering cross section, is sufficiently\n"
16463  "consistent with the scattering cross section (C_sca) derived from\n"
16464  "the difference of extinction (K11) and absorption (a1):\n"
16465  "int_z11 ~ C_sca = K11-a1.\n"
16466  "Sufficient consistency is defined by the maximum allowed deviation\n"
16467  "in single scattering albedo, *sca_mat_threshold*, testing for\n"
16468  " ( <int_Z11>/<C_sca>-1. ) * ( <C_sca>/<K11> ) <= sca_mat_threshold.\n"
16469  "The check is skipped if *check_type* is 'sane'.\n"),
16470  AUTHORS("Claudia Emde", "Jana Mendrok"),
16471  OUT(),
16472  GOUT(),
16473  GOUT_TYPE(),
16474  GOUT_DESC(),
16475  IN("scat_data"),
16476  GIN("check_type", "sca_mat_threshold"),
16477  GIN_TYPE("String", "Numeric"),
16478  GIN_DEFAULT("all", "5e-2"),
16479  GIN_DESC("The level of checks to apply on scat_data ('sane' or 'all';"
16480  " see above).",
16481  "Threshold for allowed albedo deviation (see above).")));
16482 
16483  md_data_raw.push_back(create_mdrecord(
16484  NAME("scat_dataReduceT"),
16485  DESCRIPTION(
16486  "Reduces temperature dimension of single scattering to a single entry.\n"
16487  "\n"
16488  "FIXME...\n"
16489  "Derives single scattering data for the frequencies given by\n"
16490  "*f_grid* by interpolation from *scat_data*. *f_grid* should be\n"
16491  "the actual WSV *f_grid* or a single-element Vector.\n"),
16492  AUTHORS("Jana Mendrok"),
16493  OUT("scat_data"),
16494  GOUT(),
16495  GOUT_TYPE(),
16496  GOUT_DESC(),
16497  IN("scat_data"),
16498  GIN("scat_index",
16499  "temperature",
16500  "interp_order",
16501  "phamat_only",
16502  "sca_mat_threshold"),
16503  GIN_TYPE("Index", "Numeric", "Index", "Index", "Numeric"),
16504  GIN_DEFAULT(NODEF, NODEF, "1", "1", "5e-2"),
16505  GIN_DESC("Apply on *scat_data* from scattering species of this index"
16506  " (0-based).",
16507  "Temperature to interpolate *scat_data* to.",
16508  "Interpolation order.",
16509  "Flag whether to apply temperture reduction on phase matrix"
16510  " data only (1) or on all single scattering properties (0).",
16511  "Threshold for allowed albedo deviation.")));
16512 
16513  md_data_raw.push_back(create_mdrecord(
16514  NAME("ScatSpeciesSizeMassInfo"),
16515  DESCRIPTION(
16516  "Derives size and mass information for a scattering species."
16517  "\n"
16518  "This method assumes that the mass-size relationship can described\n"
16519  "by *scat_species_a* and *scat_species_b*. See documentation of \n"
16520  "*scat_species_a* for details.\n"
16521  "\n"
16522  "The quantity to be used as size descriptor is here denoted as x, and\n"
16523  "is selected by setting *x_unit*. The options are:\n"
16524  " \"dveq\" : The size grid is set to scat_meta.diameter_volume_equ\n"
16525  " \"dmax\" : The size grid is set to scat_meta.diameter_max\n"
16526  " \"area\" : The size grid is set to scat_meta.diameter_area_equ_aerodynamical\n"
16527  " \"mass\" : The size grid is set to scat_meta.mass\n"
16528  "This selection determines *scat_species_x*.\n"
16529  "\n"
16530  "The parameters *scat_species_a* and *scat_species_b* are determined by\n"
16531  "a numeric fit between *scat_species_x* and corresponding masses in\n"
16532  "*scat_meta*. This fit is performed over sizes inside the range\n"
16533  "[x_fit_start,x_fit_end]. This range is allowed to be broader than\n"
16534  "the coverage of *scat_species_x*. There must be at least two sizes\n"
16535  "inside [x_fit_start,x_fit_end].\n"),
16536  AUTHORS("Manfred Brath", "Jana Mendrok", "Patrick Eriksson"),
16537  OUT("scat_species_x", "scat_species_a", "scat_species_b"),
16538  GOUT(),
16539  GOUT_TYPE(),
16540  GOUT_DESC(),
16541  IN("scat_meta"),
16542  GIN("species_index", "x_unit", "x_fit_start", "x_fit_end", "do_only_x"),
16543  GIN_TYPE("Index", "String", "Numeric", "Numeric", "Index"),
16544  GIN_DEFAULT(NODEF, NODEF, "0", "1e9", "0"),
16545  GIN_DESC("Take data from scattering species of this index (0-based) in"
16546  " *scat_meta*.",
16547  "Unit for size grid, allowed options listed above.",
16548  "Smallest size to consider in fit to determine a and b.",
16549  "Largest size to consider in fit to determine a and b.",
16550  "A flag to deactivate calculation of a and b, to possibly "
16551  "save some time. The a and b parameters are then set to -1."
16552  "Default is to calculate a and b.")));
16553 
16554  md_data_raw.push_back(create_mdrecord(
16555  NAME("particle_fieldCleanup"),
16556  DESCRIPTION(
16557  "Removes unrealistically small or erroneous data from particle fields.\n"
16558  "\n"
16559  "This WSM checks if the input particle field (e.g.\n"
16560  "*particle_bulkprop_field*) contains values\n"
16561  "smaller than the given *threshold*. In this case, these values will\n"
16562  "be set to zero.\n"
16563  "\n"
16564  "The method should be applied if the particle fields contain\n"
16565  "unrealistically small or erroneous data (NWP/GCM model data, e.g.\n"
16566  "from the Chevallierl_91l sets, often contain very small or even\n"
16567  "negative values, which are numerical artefacts rather than physical\n"
16568  "values.)\n"
16569  "For the scat_species_XXX_fields, it needs to be applied separately\n"
16570  "per Tensor4 type field collection. This allows to use different\n"
16571  "thresholds for the different types of fields (not for the different\n"
16572  "scattering species, though).\n"
16573  "\n"
16574  "*particle_fieldCleanup* shall be called after generation of the\n"
16575  "atmopheric fields.\n"),
16576  AUTHORS("Daniel Kreyling"),
16577  OUT(),
16578  GOUT("particle_field_out"),
16579  GOUT_TYPE("Tensor4"),
16580  GOUT_DESC("A particle property field, e.g. *particle_bulkprop_field*"),
16581  IN(),
16582  GIN("particle_field_in", "threshold"),
16583  GIN_TYPE("Tensor4", "Numeric"),
16585  GIN_DESC("A particle property field, e.g. *particle_bulkprop_field*",
16586  "Threshold below which the *particle_field* values are set to"
16587  " zero.")));
16588 
16589  md_data_raw.push_back(create_mdrecord(
16590  NAME("Select"),
16591  DESCRIPTION(
16592  "Method to select some elements from one array and copy them to\n"
16593  "a new array. (Works also for vectors.)\n"
16594  "\n"
16595  "This works also for higher dimensional objects, where the selection is\n"
16596  "always performed in the first dimension.\n"
16597  "\n"
16598  "If needleindexes is set to [-1], all elements are copied."
16599  "\n"
16600  "For example:\n"
16601  "\n"
16602  "Select(y,x,[0,3])\n"
16603  "\n"
16604  "will select the first and fourth row of matrix x and copy them to the\n"
16605  "output matrix y.\n"
16606  "\n"
16607  "Note that it is even safe to use this method if needles and haystack\n"
16608  "are the same variable.\n"),
16609  AUTHORS("Oliver Lemke"),
16610  OUT(),
16611  GOUT("needles"),
16612  GOUT_TYPE(ARRAY_GROUPS + ", Vector, Matrix, Sparse"),
16613  GOUT_DESC("Selected elements. Must have the same variable type as "
16614  "haystack."),
16615  IN(),
16616  GIN("haystack", "needleindexes"),
16617  GIN_TYPE(ARRAY_GROUPS + ", Vector, Matrix, Sparse", "ArrayOfIndex"),
16619  GIN_DESC("Variable to select from. May be the same variable as needles.",
16620  "The elements to select (zero based indexing, as always.)"),
16621  SETMETHOD(false),
16622  AGENDAMETHOD(false),
16623  USES_TEMPLATES(true)));
16624 
16625  md_data_raw.push_back(create_mdrecord(
16626  NAME("sensor_checkedCalc"),
16627  DESCRIPTION(
16628  "Checks consistency of the sensor variables.\n"
16629  "\n"
16630  "The following WSVs are examined: *f_grid*, *sensor_pos*, *sensor_los*,\n"
16631  "*transmitter_pos*, *mblock_dlos_grid*, *antenna_dim*,\n"
16632  "*sensor_response*, *sensor_response_f*, *sensor_response_pol*,\n"
16633  "and *sensor_response_dlos*.\n"
16634  "\n"
16635  "If any of these variables are changed, then this method shall be\n"
16636  "called again (no automatic check that this is fulfilled!).\n"
16637  "\n"
16638  "The main tests are that dimensions of sensor variables agree\n"
16639  "with other settings, e.g., the size of f_grid, atmosphere_dim,\n"
16640  "stokes_dim, etc.\n"
16641  "\n"
16642  "If any test fails, there is an error. Otherwise, *sensor_checked*\n"
16643  "is set to 1.\n"),
16644  AUTHORS("Jana Mendrok"),
16645  OUT("sensor_checked"),
16646  GOUT(),
16647  GOUT_TYPE(),
16648  GOUT_DESC(),
16649  IN("atmosphere_dim",
16650  "stokes_dim",
16651  "f_grid",
16652  "sensor_pos",
16653  "sensor_los",
16654  "transmitter_pos",
16655  "mblock_dlos_grid",
16656  "sensor_response",
16657  "sensor_response_f",
16658  "sensor_response_pol",
16659  "sensor_response_dlos"),
16660  GIN(),
16661  GIN_TYPE(),
16662  GIN_DEFAULT(),
16663  GIN_DESC()));
16664 
16665  md_data_raw.push_back(create_mdrecord(
16666  NAME("sensorOff"),
16667  DESCRIPTION(
16668  "Sets sensor WSVs to obtain monochromatic pencil beam values.\n"
16669  "\n"
16670  "The variables are set as follows:\n"
16671  " mblock_dlos_grid : One row with zero(s).\n"
16672  " sensor_response* : As returned by *sensor_responseInit*.\n"),
16673  AUTHORS("Patrick Eriksson"),
16674  OUT("sensor_response",
16675  "sensor_response_f",
16676  "sensor_response_pol",
16677  "sensor_response_dlos",
16678  "sensor_response_f_grid",
16679  "sensor_response_pol_grid",
16680  "sensor_response_dlos_grid",
16681  "mblock_dlos_grid"),
16682  GOUT(),
16683  GOUT_TYPE(),
16684  GOUT_DESC(),
16685  IN("stokes_dim", "f_grid"),
16686  GIN(),
16687  GIN_TYPE(),
16688  GIN_DEFAULT(),
16689  GIN_DESC()));
16690 
16691  md_data_raw.push_back(create_mdrecord(
16692  NAME("sensor_losGeometricFromSensorPosToOtherPositions"),
16693  DESCRIPTION(
16694  "The geometric line-of-sight between pair of points.\n"
16695  "\n"
16696  "The method sets *sensor_los* to the line-of-sights, that matches the\n"
16697  "geometrical propagation path from *sensor_pos* to *target_pos*. This\n"
16698  "is done for pair of positions, i.e. the two matrices shall have the same\n"
16699  "number of rows. The number of columns in *target_pos* shall be two for\n"
16700  "1D and 2D and two for 3D, exactly as for *rte_pos2*.\n"
16701  "\n"
16702  "See also *rte_losGeometricFromRtePosToRtePos2*. This method calls that\n"
16703  "method for each pair of positions, where values in *sensor_pos* matches\n"
16704  "*rte_pos and values in *target_pos* matches *rte_pos2*.\n"),
16705  AUTHORS("Patrick Eriksson"),
16706  OUT("sensor_los"),
16707  GOUT(),
16708  GOUT_TYPE(),
16709  GOUT_DESC(),
16710  IN("atmosphere_dim",
16711  "lat_grid",
16712  "lon_grid",
16713  "refellipsoid",
16714  "sensor_pos"),
16715  GIN("target_pos"),
16716  GIN_TYPE("Matrix"),
16717  GIN_DEFAULT(NODEF),
16718  GIN_DESC("Target position, for each position in *sensor_pos*.")));
16719 
16720  md_data_raw.push_back(create_mdrecord(
16721  NAME("sensor_responseAntenna"),
16722  DESCRIPTION(
16723  "Includes response of the antenna.\n"
16724  "\n"
16725  "The function returns the sensor response matrix after the antenna\n"
16726  "characteristics have been included.\n"
16727  "\n"
16728  "The function handles \"multi-beam\" cases where the polarisation\n"
16729  "coordinate system is the same for all beams.\n"
16730  "\n"
16731  "See *antenna_dim*, *antenna_dlos* and *antenna_response* for\n"
16732  "details on how to specify the antenna response.\n"
16733  "\n"
16734  "The text below refers to *mblock_dlos_grid* despite it is not an\n"
16735  "input to the method. The method instead uses *sensor_response_dlos_grid*\n"
16736  "but the values in this WSV are likely coming from *mblock_dlos_grid*.\n"
16737  "\n"
16738  "One dimensional antenna patterns are handled as other response\n"
16739  "functions. That is, both antenna response and radiances are treated\n"
16740  "as piece-wise linear functions, and the pencil beam calculations must\n"
16741  "cover the full sensor response (i.e. *mblock_dlos_grid* must be\n"
16742  "sufficiently broad).\n"
16743  "\n"
16744  "There exist different options for two dimensional (2D) antenna patterns,\n"
16745  "see below (if 2D, the GIN *option_2d* must be set, the default results\n"
16746  "in an error). A normalisation is always applied for 2D antennas (i.e.\n"
16747  "*sensor-norm* is ignored).\n"
16748  "\n"
16749  "\"interp_response\""
16750  "For this option, each direction defined by *mblock_dlos_grid* is\n"
16751  "considered to represent the same size in terms of solid beam angle,\n"
16752  "and the antenna pattern is interpolated to these directions. There is\n"
16753  "no check on how well *mblock_dlos_grid* covers the antenna response.\n"
16754  "The response is treated to be zero outside the ranges of its anular\n"
16755  "grids\n"
16756  "\n"
16757  "\"gridded_dlos\""
16758  "This option is more similar to the 1D case. The radiances are treated\n"
16759  "as a bi-linear function, but the antenna response is treated as step-\n"
16760  "wise constant function (in contrast to 1D). For this option\n"
16761  "*mblock_dlos_grid* must match a combination of zenith and azimuth\n"
16762  "grids, and this for a particular order. If the zenith and azimuth\n"
16763  "grids have 3 and 2 values, respectively, the order shall be:\n"
16764  " [(za1,aa1); (za2,aa1); (za3,aa1); (za1,aa2); (za2,aa2); (za3,aa2) ]\n"
16765  "Both these grids must be strictly increasing and as for 1D must cover\n"
16766  "the antenna response completely.\n"),
16767  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
16768  OUT("sensor_response",
16769  "sensor_response_f",
16770  "sensor_response_pol",
16771  "sensor_response_dlos",
16772  "sensor_response_dlos_grid"),
16773  GOUT(),
16774  GOUT_TYPE(),
16775  GOUT_DESC(),
16776  IN("sensor_response",
16777  "sensor_response_f",
16778  "sensor_response_pol",
16779  "sensor_response_dlos",
16780  "sensor_response_f_grid",
16781  "sensor_response_pol_grid",
16782  "sensor_response_dlos_grid",
16783  "atmosphere_dim",
16784  "antenna_dim",
16785  "antenna_dlos",
16786  "antenna_response",
16787  "sensor_norm"),
16788  GIN( "option_2d" ),
16789  GIN_TYPE( "String" ),
16790  GIN_DEFAULT( "-" ),
16791  GIN_DESC( "Calculation option for 2D antenna cases. See above for details." )));
16792 
16793  md_data_raw.push_back(create_mdrecord(
16794  NAME("sensor_responseBackend"),
16795  DESCRIPTION(
16796  "Includes response of the backend (spectrometer).\n"
16797  "\n"
16798  "The function returns the sensor response matrix after the backend\n"
16799  "characteristics have been included.\n"
16800  "\n"
16801  "See *f_backend*, *backend_channel_response* and *sensor_norm* for\n"
16802  "details on how to specify the backend response.\n"),
16803  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
16804  OUT("sensor_response",
16805  "sensor_response_f",
16806  "sensor_response_pol",
16807  "sensor_response_dlos",
16808  "sensor_response_f_grid"),
16809  GOUT(),
16810  GOUT_TYPE(),
16811  GOUT_DESC(),
16812  IN("sensor_response",
16813  "sensor_response_f",
16814  "sensor_response_pol",
16815  "sensor_response_dlos",
16816  "sensor_response_f_grid",
16817  "sensor_response_pol_grid",
16818  "sensor_response_dlos_grid",
16819  "f_backend",
16820  "backend_channel_response",
16821  "sensor_norm"),
16822  GIN(),
16823  GIN_TYPE(),
16824  GIN_DEFAULT(),
16825  GIN_DESC()));
16826 
16827  md_data_raw.push_back(create_mdrecord(
16828  NAME("sensor_responseBackendFrequencySwitching"),
16829  DESCRIPTION(
16830  "Frequency switching for a pure SSB reciever.\n"
16831  "\n"
16832  "This function can be used for simulation of frequency switching.\n"
16833  "That is, when the final spectrum is the difference of two spectra\n"
16834  "shifted in frequency. The switching is performed by the LO, but\n"
16835  "for a pure singel sideband reciever this is most easily simulated\n"
16836  "by instead shifting the backend, as done here.\n"
16837  "\n"
16838  "A strightforward frequency switching is modelled (no folding)\n"
16839  "The channel positions for the first measurement cycle are\n"
16840  "f_backend+df1, and for the second f_backend+df2. The first\n"
16841  "measurement cycle is given the negive weight. That is, the output\n"
16842  "is the spectrum for cycle2 minus the spectrum for cycle1.\n"
16843  "Output frequency grids are set to *f_backend*.\n"
16844  "\n"
16845  "Use *sensor_responseFrequencySwitching* for double sideband cases.\n"
16846  "\n"
16847  "The method has the same general functionality as, and can replace,\n"
16848  "*sensor_responseBackend*.\n"),
16849  AUTHORS("Patrick Eriksson"),
16850  OUT("sensor_response",
16851  "sensor_response_f",
16852  "sensor_response_pol",
16853  "sensor_response_dlos",
16854  "sensor_response_f_grid"),
16855  GOUT(),
16856  GOUT_TYPE(),
16857  GOUT_DESC(),
16858  IN("sensor_response",
16859  "sensor_response_f",
16860  "sensor_response_pol",
16861  "sensor_response_dlos",
16862  "sensor_response_f_grid",
16863  "sensor_response_pol_grid",
16864  "sensor_response_dlos_grid",
16865  "f_backend",
16866  "backend_channel_response",
16867  "sensor_norm"),
16868  GIN("df1", "df2"),
16869  GIN_TYPE("Numeric", "Numeric"),
16871  GIN_DESC("Frequency throw for cycle1.", "Frequency throw for cycle2.")));
16872 
16873  md_data_raw.push_back(create_mdrecord(
16874  NAME("sensor_responseBeamSwitching"),
16875  DESCRIPTION(
16876  "Simulation of \"beam switching\".\n"
16877  "\n"
16878  "The measurement procedure is based on taking the difference between\n"
16879  "two spectra measured in different directions, and the calculation\n"
16880  "set-up must treat exactly two observation directions.\n"
16881  "\n"
16882  "The returned spectrum is y = w1*y + w2*y2, where y1 and w1 are the\n"
16883  "spectrum and weight for the first direction, respectively (y2 and\n"
16884  "(w2 defined correspondingly for the second direction).\n"
16885  "\n"
16886  "Zenith and azimuth angles after beam switching are set to the\n"
16887  "values of the second direction.\n"),
16888  AUTHORS("Patrick Eriksson"),
16889  OUT("sensor_response",
16890  "sensor_response_f",
16891  "sensor_response_pol",
16892  "sensor_response_dlos",
16893  "sensor_response_dlos_grid"),
16894  GOUT(),
16895  GOUT_TYPE(),
16896  GOUT_DESC(),
16897  IN("sensor_response",
16898  "sensor_response_f",
16899  "sensor_response_pol",
16900  "sensor_response_dlos",
16901  "sensor_response_f_grid",
16902  "sensor_response_pol_grid",
16903  "sensor_response_dlos_grid"),
16904  GIN("w1", "w2"),
16905  GIN_TYPE("Numeric", "Numeric"),
16906  GIN_DEFAULT("-1", "1"),
16907  GIN_DESC("Weight for values from first viewing direction.",
16908  "Weight for values from second viewing direction.")));
16909 
16910  md_data_raw.push_back(create_mdrecord(
16911  NAME("sensor_responseFillFgrid"),
16912  DESCRIPTION(
16913  "Polynomial frequency interpolation of spectra.\n"
16914  "\n"
16915  "The sensor response methods treat the spectra to be piece-wise linear\n"
16916  "functions. This method is a workaround for making methods handling\n"
16917  "the spectra in a more elaborate way: it generates spectra on a more\n"
16918  "dense grid by polynomial interpolation. The interpolation is not\n"
16919  "done explicitly, it is incorporated into *sensor_response*.\n"
16920  "\n"
16921  "This method should in general increase the calculation accuracy for\n"
16922  "a given *f_grid*. However, the selection of (original) grid points\n"
16923  "becomes more sensitive when using this method. A poor choice of grid\n"
16924  "points can result in a decreased accuracy, or generation of negative\n"
16925  "radiances. Test calculations indicated that the error easily can\n"
16926  "increase with this method close the edge of *f_grid*, and it could\n"
16927  "be wise to make *f_grid* a bit wider than actually necessary to avoid\n"
16928  "this effect\n"
16929  "\n"
16930  "The method shall be inserted before the antenna stage. That is, this\n"
16931  "method shall normally be called directly after *sensor_responseInit*.\n"
16932  "\n"
16933  "Between each neighbouring points of *f_grid*, this method adds\n"
16934  "*nfill* grid points. The polynomial order of the interpolation is\n"
16935  "*polyorder*.\n"),
16936  AUTHORS("Patrick Eriksson"),
16937  OUT("sensor_response",
16938  "sensor_response_f",
16939  "sensor_response_pol",
16940  "sensor_response_dlos",
16941  "sensor_response_f_grid"),
16942  GOUT(),
16943  GOUT_TYPE(),
16944  GOUT_DESC(),
16945  IN("sensor_response",
16946  "sensor_response_f",
16947  "sensor_response_pol",
16948  "sensor_response_dlos",
16949  "sensor_response_f_grid",
16950  "sensor_response_pol_grid",
16951  "sensor_response_dlos_grid"),
16952  GIN("polyorder", "nfill"),
16953  GIN_TYPE("Index", "Index"),
16954  GIN_DEFAULT("3", "2"),
16955  GIN_DESC("Polynomial order of interpolation",
16956  "Number of points to insert in each gap of f_grid")));
16957 
16958  md_data_raw.push_back(create_mdrecord(
16959  NAME("sensor_responseFrequencySwitching"),
16960  DESCRIPTION(
16961  "Simulation of \"frequency switching\".\n"
16962  "\n"
16963  "A general method for frequency switching. The WSM\n"
16964  "*sensor_responseBackendFrequencySwitching* gives a description of\n"
16965  "this observation technique, and is also a more straightforward\n"
16966  " method for pure singel sideband cases.\n"
16967  "\n"
16968  "It is here assume that *sensor_responseMultiMixerBackend* has been\n"
16969  "used to calculate the spectrum for two LO positions. This method\n"
16970  "calculates the difference between these two spectra, where the\n"
16971  "second spectrum gets weight 1 and the first weight -1 (as in\n"
16972  "*sensor_responseBackendFrequencySwitching*).\n"
16973  "\n"
16974  "Output frequency grids are taken from the second spectrum.\n"),
16975  AUTHORS("Patrick Eriksson"),
16976  OUT("sensor_response",
16977  "sensor_response_f",
16978  "sensor_response_pol",
16979  "sensor_response_dlos",
16980  "sensor_response_f_grid"),
16981  GOUT(),
16982  GOUT_TYPE(),
16983  GOUT_DESC(),
16984  IN("sensor_response",
16985  "sensor_response_f",
16986  "sensor_response_pol",
16987  "sensor_response_dlos",
16988  "sensor_response_f_grid",
16989  "sensor_response_pol_grid",
16990  "sensor_response_dlos_grid"),
16991  GIN(),
16992  GIN_TYPE(),
16993  GIN_DEFAULT(),
16994  GIN_DESC()));
16995 
16996  md_data_raw.push_back(create_mdrecord(
16997  NAME("sensor_responseIF2RF"),
16998  DESCRIPTION(
16999  "Converts sensor response variables from IF to RF.\n"
17000  "\n"
17001  "The function converts intermediate frequencies (IF) in\n"
17002  "*sensor_response_f* and *sensor_response_f_grid* to radio\n"
17003  "frequencies (RF). This conversion is needed if the frequency\n"
17004  "translation of a mixer is included and the position of backend\n"
17005  "channels are specified in RF.\n"
17006  "\n"
17007  "A direct frequency conversion is performed. Values are not\n"
17008  "sorted in any way.\n"),
17009  AUTHORS("Patrick Eriksson"),
17010  OUT("sensor_response_f", "sensor_response_f_grid"),
17011  GOUT(),
17012  GOUT_TYPE(),
17013  GOUT_DESC(),
17014  IN("sensor_response_f", "sensor_response_f_grid", "lo", "sideband_mode"),
17015  GIN(),
17016  GIN_TYPE(),
17017  GIN_DEFAULT(),
17018  GIN_DESC()));
17019 
17020  md_data_raw.push_back(create_mdrecord(
17021  NAME("sensor_responseInit"),
17022  DESCRIPTION(
17023  "Initialises the variables summarising the sensor response.\n"
17024  "\n"
17025  "This method sets the variables to match monochromatic pencil beam\n"
17026  "calculations, to be further modified by inclusion of sensor\n"
17027  "characteristics. Use *sensorOff* if pure monochromatic pencil\n"
17028  "beam calculations shall be performed.\n"
17029  "\n"
17030  "The variables are set as follows:\n"
17031  " sensor_response : Identity matrix, with size matching *f_grid*,\n"
17032  " *stokes_dim* and *mblock_dlos_grid*.\n"
17033  " sensor_response_f : Repeated values of *f_grid*.\n"
17034  " sensor_response_pol : Data matching *stokes_dim*.\n"
17035  " sensor_response_dlos : Repeated values of *mblock_dlos_grid*.\n"
17036  " sensor_response_f_grid : Equal to *f_grid*.\n"
17037  " sensor_response_pol_grid: Set to 1:*stokes_dim*.\n"
17038  " sensor_response_dlos_grid : Equal to *mblock_dlos_grid*.\n"),
17039  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
17040  OUT("sensor_response",
17041  "sensor_response_f",
17042  "sensor_response_pol",
17043  "sensor_response_dlos",
17044  "sensor_response_f_grid",
17045  "sensor_response_pol_grid",
17046  "sensor_response_dlos_grid"),
17047  GOUT(),
17048  GOUT_TYPE(),
17049  GOUT_DESC(),
17050  IN("f_grid",
17051  "mblock_dlos_grid",
17052  "antenna_dim",
17053  "atmosphere_dim",
17054  "stokes_dim",
17055  "sensor_norm"),
17056  GIN(),
17057  GIN_TYPE(),
17058  GIN_DEFAULT(),
17059  GIN_DESC()));
17060 
17061  md_data_raw.push_back(create_mdrecord(
17062  NAME("sensor_responseMetMM"),
17063  DESCRIPTION(
17064  "Sensor setup for meteorological millimeter instruments.\n"
17065  "\n"
17066  "This method is handy if you are simulating a passband-type instrument,\n"
17067  "consisting of a few discrete channels.\n"
17068  "\n"
17069  "For flexibility, the Met-MM system is seperated in two calculation\n"
17070  "steps. To fully use the system, create *f_grid* (and some associated\n"
17071  "variables) by *f_gridMetMM* before calling this method. However, it is\n"
17072  "possible to use this method with any *f_grid*, as long as matching\n"
17073  "*f_backend*, *channel2fgrid_indexes* and *channel2fgrid_weights*\n"
17074  "are provided.\n"
17075  "\n"
17076  "Each scan sequence is treated as a measurement block. *sensor_pos* is\n"
17077  "set in the standard way. The number of rows in *sensor_pos* determines the\n"
17078  "number of scan sequences that will be simulated. On the other hand,\n"
17079  "*sensor_los* is handled in a special way. All zenith angles must be set\n"
17080  "to 180 deg. For 3D, the given azimuth angles are taken as the direction\n"
17081  "of scanning, where the azimuth angle is defined with respect to North\n"
17082  "in standard manner. For example, if the scanning happens to move from\n"
17083  "SW to NE, the azimuth angle should be set to 45 deg. The angles of the\n"
17084  "scanning sequence are taken from *antenna_dlos*. This WSV is here only\n"
17085  "allowed to have a single column, holding relative zenith angles. For\n"
17086  "3D, the azimuth angles in *antenna_dlos* are hard-coded to zero. As\n"
17087  "zenith angles in *sensor_los* are locked to 180 deg, *antenna_dlos*\n"
17088  "effectively holds the nadir angles. These angles can be both positive or\n"
17089  "negative, where the recommended choice is to operate with negative\n"
17090  "to end up with final zenith angles between 0 and 180 deg.\n"
17091  "\n"
17092  "The method does not support 2D atmospheres (across-track scanning is\n"
17093  "inconsistent with 2D). For simpler switching between 1D and 3D,\n"
17094  "the argument *mirror_dza* is at hand. It can only be used for 3D.\n"
17095  "If set to true, the zenith angles in *antenna_dlos* are mapped\n"
17096  "to also cover the other side of the swath and the simulations will\n"
17097  "cover both sides of the swath.\n"),
17098  AUTHORS("Oliver Lemke", "Patrick Eriksson"),
17099  OUT("antenna_dim",
17100  "mblock_dlos_grid",
17101  "sensor_response",
17102  "sensor_response_f",
17103  "sensor_response_pol",
17104  "sensor_response_dlos",
17105  "sensor_response_f_grid",
17106  "sensor_response_pol_grid",
17107  "sensor_response_dlos_grid",
17108  "sensor_norm"),
17109  GOUT(),
17110  GOUT_TYPE(),
17111  GOUT_DESC(),
17112  IN("atmosphere_dim",
17113  "stokes_dim",
17114  "f_grid",
17115  "f_backend",
17116  "channel2fgrid_indexes",
17117  "channel2fgrid_weights",
17118  "iy_unit",
17119  "antenna_dlos",
17120  "met_mm_polarisation",
17121  "met_mm_antenna"),
17122  GIN("use_antenna", "mirror_dza"),
17123  GIN_TYPE("Index", "Index"),
17124  GIN_DEFAULT("0", "0"),
17125  GIN_DESC("Flag to enable (1) or disable (0) antenna.",
17126  "Flag to include second part of swath (only 3D, see above).")));
17127 
17128  md_data_raw.push_back(create_mdrecord(
17129  NAME("sensor_responseMixer"),
17130  DESCRIPTION(
17131  "Includes response of the mixer of a heterodyne system.\n"
17132  "\n"
17133  "The function returns the sensor response matrix after the mixer\n"
17134  "characteristics have been included. Frequency variables are\n"
17135  "converted from radio frequency (RF) to intermediate frequency (IF).\n"
17136  "The returned frequency grid covers the range [0,max_if], where\n"
17137  "max_if is the highest IF covered by the sideband response grid.\n"
17138  "\n"
17139  "See *lo* and *sideband_response* for details on how to specify the\n"
17140  "mixer response\n"),
17141  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
17142  OUT("sensor_response",
17143  "sensor_response_f",
17144  "sensor_response_pol",
17145  "sensor_response_dlos",
17146  "sensor_response_f_grid"),
17147  GOUT(),
17148  GOUT_TYPE(),
17149  GOUT_DESC(),
17150  IN("sensor_response",
17151  "sensor_response_f",
17152  "sensor_response_pol",
17153  "sensor_response_dlos",
17154  "sensor_response_f_grid",
17155  "sensor_response_pol_grid",
17156  "sensor_response_dlos_grid",
17157  "lo",
17158  "sideband_response",
17159  "sensor_norm"),
17160  GIN(),
17161  GIN_TYPE(),
17162  GIN_DEFAULT(),
17163  GIN_DESC()));
17164 
17165  md_data_raw.push_back(create_mdrecord(
17166  NAME("sensor_responseMixerBackendPrecalcWeights"),
17167  DESCRIPTION(
17168  "Includes pre-calculated response covering mixer and backend.\n"
17169  "\n"
17170  "This method acts similar to *sensor_responseBackend*, but uses\n"
17171  "pre-calculated weights. These weights can also include the effect\n"
17172  "of mixer and sideband filtering.\n"
17173  "\n"
17174  "As usual, *f_backend* gives the frequency of the channels. This WSM\n"
17175  "has no direct influence on the result, but at least representative\n"
17176  "values must be set.\n"
17177  "\n"
17178  "The frequency response is defined using *channel2fgrid_indexes* and\n"
17179  "*channel2fgrid_weights*.\n"
17180  "\n"
17181  "Both *channel2fgrid_indexes* and *channel2fgrid_weights* are assumed\n"
17182  "to be common for all viewing directions.\n"),
17183  AUTHORS("Patrick Eriksson"),
17184  OUT("sensor_response",
17185  "sensor_response_f",
17186  "sensor_response_pol",
17187  "sensor_response_dlos",
17188  "sensor_response_f_grid"),
17189  GOUT(),
17190  GOUT_TYPE(),
17191  GOUT_DESC(),
17192  IN("sensor_response",
17193  "sensor_response_f",
17194  "sensor_response_pol",
17195  "sensor_response_dlos",
17196  "sensor_response_f_grid",
17197  "sensor_response_pol_grid",
17198  "sensor_response_dlos_grid",
17199  "f_backend",
17200  "channel2fgrid_indexes",
17201  "channel2fgrid_weights"),
17202  GIN(),
17203  GIN_TYPE(),
17204  GIN_DEFAULT(),
17205  GIN_DESC()));
17206 
17207  md_data_raw.push_back(create_mdrecord(
17208  NAME("sensor_responseMultiMixerBackend"),
17209  DESCRIPTION(
17210  "Handles mixer and backend parts for an instrument having multiple\n"
17211  "mixer chains.\n"
17212  "\n"
17213  "The WSMs *sensor_responseMixer*, *sensor_responseIF2RF* and\n"
17214  "*sensor_responseBackend* are called for each mixer chain, and a\n"
17215  "complete *sensor_response* is assembled. The instrument responses\n"
17216  "are described by *lo_multi*, *sideband_response_multi*,\n"
17217  "*sideband_mode_multi*, *f_backend_multi* and\n"
17218  "*backend_channel_response_multi*. All these WSVs must have same\n"
17219  "vector or array length. As *sensor_responseIF2RF* is called,\n"
17220  "*f_backend_multi* must hold RF (not IF) and output frequencies\n"
17221  "will be in absolute frequency (RF).\n"),
17222  AUTHORS("Patrick Eriksson"),
17223  OUT("sensor_response",
17224  "sensor_response_f",
17225  "sensor_response_pol",
17226  "sensor_response_dlos",
17227  "sensor_response_f_grid"),
17228  GOUT(),
17229  GOUT_TYPE(),
17230  GOUT_DESC(),
17231  IN("sensor_response",
17232  "sensor_response_f",
17233  "sensor_response_pol",
17234  "sensor_response_dlos",
17235  "sensor_response_f_grid",
17236  "sensor_response_pol_grid",
17237  "sensor_response_dlos_grid",
17238  "lo_multi",
17239  "sideband_response_multi",
17240  "sideband_mode_multi",
17241  "f_backend_multi",
17242  "backend_channel_response_multi",
17243  "sensor_norm"),
17244  GIN(),
17245  GIN_TYPE(),
17246  GIN_DEFAULT(),
17247  GIN_DESC()));
17248 
17249  md_data_raw.push_back(create_mdrecord(
17250  NAME("sensor_responsePolarisation"),
17251  DESCRIPTION(
17252  "Extraction of non-default polarisation components.\n"
17253  "\n"
17254  "The default is to output the Stokes elements I, Q, U and V (up to\n"
17255  "*stokes_dim*). This method allows to change the \"polarisation\" of\n"
17256  "the output. Polarisation components to be extracted are selected by\n"
17257  "*instrument_pol*. This method can be applied at any step of the sensor\n"
17258  "matrix set-up.\n"
17259  "\n"
17260  "The method can only be applied on data for I, Q, U and V. The value\n"
17261  "of *stokes_dim* must be sufficiently large for the selected\n"
17262  "components. For example, I+45 requires that *stokes_dim* is at\n"
17263  "least 3. \n"
17264  "\n"
17265  "See *instrument_pol* for coding of polarisation states.\n"
17266  "\n"
17267  "Note that the state of *iy_unit* is considered. This WSV must give\n"
17268  "the actual unit of the data. This as, the extraction of components\n"
17269  "is slightly different if data are radiances or brightness\n"
17270  "temperatures. In practise this means that *iy_unit* (as to be\n"
17271  "applied inside *iy_main_agenda*) must be set before calling this\n"
17272  "method.\n"),
17273  AUTHORS("Patrick Eriksson"),
17274  OUT("sensor_response",
17275  "sensor_response_f",
17276  "sensor_response_pol",
17277  "sensor_response_dlos",
17278  "sensor_response_pol_grid"),
17279  GOUT(),
17280  GOUT_TYPE(),
17281  GOUT_DESC(),
17282  IN("sensor_response",
17283  "sensor_response_f",
17284  "sensor_response_pol",
17285  "sensor_response_dlos",
17286  "sensor_response_f_grid",
17287  "sensor_response_pol_grid",
17288  "sensor_response_dlos_grid",
17289  "stokes_dim",
17290  "iy_unit",
17291  "instrument_pol"),
17292  GIN(),
17293  GIN_TYPE(),
17294  GIN_DEFAULT(),
17295  GIN_DESC()));
17296 
17297  md_data_raw.push_back(create_mdrecord(
17298  NAME("sensor_responseStokesRotation"),
17299  DESCRIPTION(
17300  "Includes a rotation of the Stokes H and V directions.\n"
17301  "\n"
17302  "The method applies the rotations implied by *stokes_rotation*.\n"
17303  "See the description of that WSV for details.\n"
17304  "\n"
17305  "This method does not change the size of *sensor_response*, and\n"
17306  "the auxiliary variables (sensor_response_f etc.) are not changed.\n"
17307  "\n"
17308  "To apply the method, *stokes_dim* must be >= 3. The complete effect\n"
17309  "of the rotation can not be determibed with lower *stokes_dim*.\n"),
17310  AUTHORS("Patrick Eriksson"),
17311  OUT("sensor_response"),
17312  GOUT(),
17313  GOUT_TYPE(),
17314  GOUT_DESC(),
17315  IN("sensor_response",
17316  "sensor_response_f_grid",
17317  "sensor_response_pol_grid",
17318  "sensor_response_dlos_grid",
17319  "stokes_dim",
17320  "stokes_rotation"),
17321  GIN(),
17322  GIN_TYPE(),
17323  GIN_DEFAULT(),
17324  GIN_DESC()));
17325 
17326  md_data_raw.push_back(create_mdrecord(
17327  NAME("sensor_responseSimpleAMSU"),
17328  DESCRIPTION(
17329  "Simplified sensor setup for an AMSU-type instrument.\n"
17330  "\n"
17331  "This method allows quick and simple definition of AMSU-type\n"
17332  "sensors. Assumptions:\n"
17333  "\n"
17334  "1. Pencil beam antenna.\n"
17335  "2. Double sideband receivers.\n"
17336  "3. Sideband mode \"upper\"\n"
17337  "4. The channel response is rectangular.\n"
17338  "\n"
17339  "Under these assumptions the only inputs needed are the LO positions,\n"
17340  "the offsets from the LO, and the IF bandwidths. They are provieded\n"
17341  "in sensor_description_amsu.\n"),
17342  AUTHORS("Stefan Buehler"),
17343  OUT("f_grid",
17344  "antenna_dim",
17345  "mblock_dlos_grid",
17346  "sensor_response",
17347  "sensor_response_f",
17348  "sensor_response_pol",
17349  "sensor_response_dlos",
17350  "sensor_response_f_grid",
17351  "sensor_response_pol_grid",
17352  "sensor_response_dlos_grid",
17353  "sensor_norm"),
17354  GOUT(),
17355  GOUT_TYPE(),
17356  GOUT_DESC(),
17357  IN("atmosphere_dim", "stokes_dim", "sensor_description_amsu"),
17358  GIN("spacing"),
17359  GIN_TYPE("Numeric"),
17360  GIN_DEFAULT(".1e9"),
17361  GIN_DESC("Desired grid spacing in Hz.")));
17362 
17363  md_data_raw.push_back(create_mdrecord(
17364  NAME("sensor_responseGenericAMSU"),
17365  DESCRIPTION(
17366  "Simplified sensor setup for an AMSU-type instrument.\n"
17367  "\n"
17368  "This function is derived from 'sensor_responseSimpleAMSU' \n"
17369  "but is more generalized since the number of passbands in each \n"
17370  "can be in the range from 1 to 4 - in order to correctly simulate\n"
17371  "AMSU-A type sensors \n"
17372  "\n"
17373  "This method allows quick and simple definition of AMSU-type\n"
17374  "sensors. Assumptions:\n"
17375  "\n"
17376  "1. Pencil beam antenna.\n"
17377  "2. 1-4 Passband/sidebands per channel.\n"
17378  "3. Sideband mode \"upper\"\n"
17379  "4. The channel response is rectangular.\n"
17380  "\n"
17381  "Under these assumptions the only inputs needed are the LO positions,\n"
17382  "the offsets from the LO, and the IF bandwidths. They are provided\n"
17383  "in sensor_description_amsu.\n"),
17384  AUTHORS("Oscar Isoz"),
17385  OUT("f_grid",
17386  "antenna_dim",
17387  "mblock_dlos_grid",
17388  "sensor_response",
17389  "sensor_response_f",
17390  "sensor_response_pol",
17391  "sensor_response_dlos",
17392  "sensor_response_f_grid",
17393  "sensor_response_pol_grid",
17394  "sensor_response_dlos_grid",
17395  "sensor_norm"),
17396  GOUT(),
17397  GOUT_TYPE(),
17398  GOUT_DESC(),
17399  IN("atmosphere_dim", "stokes_dim", "sensor_description_amsu"),
17400  GIN("spacing"),
17401  GIN_TYPE("Numeric"),
17402  GIN_DEFAULT(".1e9"),
17403  GIN_DESC("Desired grid spacing in Hz.")));
17404 
17405  md_data_raw.push_back(create_mdrecord(
17406  NAME("sensor_responseWMRF"),
17407  DESCRIPTION(
17408  "Adds WMRF weights to sensor response.\n"
17409  "\n"
17410  "This method adds a spectrometer response that has been calculated\n"
17411  "with the weighted mean of representative frequencies (WMRF) method. It\n"
17412  "consists of a set of selected frequencies, and associated weights.\n"),
17413  AUTHORS(
17414  "Stefan Buehler, based on Patrick Erikssons sensor_responseBackend"),
17415  OUT("sensor_response",
17416  "sensor_response_f",
17417  "sensor_response_pol",
17418  "sensor_response_dlos",
17419  "sensor_response_f_grid"),
17420  GOUT(),
17421  GOUT_TYPE(),
17422  GOUT_DESC(),
17423  IN("sensor_response",
17424  "sensor_response_f",
17425  "sensor_response_pol",
17426  "sensor_response_dlos",
17427  "sensor_response_f_grid",
17428  "sensor_response_pol_grid",
17429  "sensor_response_dlos_grid",
17430  "wmrf_weights",
17431  "f_backend"),
17432  GIN(),
17433  GIN_TYPE(),
17434  GIN_DEFAULT(),
17435  GIN_DESC()));
17436 
17437  md_data_raw.push_back(
17438  create_mdrecord(NAME("SetNumberOfThreads"),
17439  DESCRIPTION("Change the number of threads used by ARTS.\n"),
17440  AUTHORS("Oliver Lemke"),
17441  OUT(),
17442  GOUT(),
17443  GOUT_TYPE(),
17444  GOUT_DESC(),
17445  IN(),
17446  GIN("nthreads"),
17447  GIN_TYPE("Index"),
17448  GIN_DEFAULT(NODEF),
17449  GIN_DESC("Number of threads.")));
17450 
17451  md_data_raw.push_back(create_mdrecord(
17452  NAME("Sleep"),
17453  DESCRIPTION("Sleeps for a number of seconds\n"),
17454  AUTHORS("Richard Larsson"),
17455  OUT(),
17456  GOUT(),
17457  GOUT_TYPE(),
17458  GOUT_DESC(),
17459  IN(),
17460  GIN("time"),
17461  GIN_TYPE("Numeric"),
17462  GIN_DEFAULT(NODEF),
17463  GIN_DESC("Time to sleep for in seconds")));
17464 
17465  md_data_raw.push_back(create_mdrecord(
17466  NAME("timeSleep"),
17467  DESCRIPTION("Sleeps until time has been reached.\n"),
17468  AUTHORS("Richard Larsson"),
17469  OUT(),
17470  GOUT(),
17471  GOUT_TYPE(),
17472  GOUT_DESC(),
17473  IN("time"),
17474  GIN(),
17475  GIN_TYPE(),
17476  GIN_DEFAULT(),
17477  GIN_DESC()));
17478 
17479  md_data_raw.push_back(create_mdrecord(
17480  NAME("SparseSparseMultiply"),
17481  DESCRIPTION(
17482  "Multiplies a Sparse with another Sparse, result stored in Sparse.\n"
17483  "\n"
17484  "Makes the calculation: out = m1 * m2\n"),
17485  AUTHORS("Patrick Eriksson"),
17486  OUT(),
17487  GOUT("out"),
17488  GOUT_TYPE("Sparse"),
17489  GOUT_DESC("Product, can be same variable as any of the inputs."),
17490  IN(),
17491  GIN("m1", "m2"),
17492  GIN_TYPE("Sparse", "Sparse"),
17494  GIN_DESC("Left sparse matrix.", "Right sparse matrix.")));
17495 
17496  md_data_raw.push_back(create_mdrecord(
17497  NAME("SparseMatrixIdentity"),
17498  DESCRIPTION(
17499  "Returns a sparse dentity matrix.\n"
17500  "\n"
17501  "The size of the matrix created is n x n. Default is to return a\n"
17502  "true identity matrix (I), but you can also select another value\n"
17503  "along the diagonal be setting *value*. That is, the output is\n"
17504  "value*I.\n"),
17505  AUTHORS("Simon Pfreundschuh"),
17506  OUT(),
17507  GOUT("out"),
17508  GOUT_TYPE("Sparse"),
17509  GOUT_DESC("Sparse output matrix"),
17510  IN(),
17511  GIN("n", "value"),
17512  GIN_TYPE("Index", "Numeric"),
17513  GIN_DEFAULT(NODEF, "1"),
17514  GIN_DESC("Size of the matrix", "The value along the diagonal.")));
17515 
17516  md_data_raw.push_back(create_mdrecord(
17517  NAME("spectral_irradiance_fieldFromSpectralRadianceField"),
17518  DESCRIPTION(
17519  "Calculates the spectral irradiance from *spectral_radiance_field* .\n"
17520  "by integrating over the angular grids according to the grids set\n"
17521  "by *AngularGridsSetFluxCalc* \n"
17522  "See *AngularGridsSetFluxCalc to set \n"
17523  "*za_grid, aa_grid, and za_grid_weights*\n"),
17524  AUTHORS("Manfred Brath"),
17525  OUT("spectral_irradiance_field"),
17526  GOUT(),
17527  GOUT_TYPE(),
17528  GOUT_DESC(),
17529  IN("spectral_radiance_field", "za_grid", "aa_grid", "za_grid_weights"),
17530  GIN(),
17531  GIN_TYPE(),
17532  GIN_DEFAULT(),
17533  GIN_DESC()));
17534 
17535  md_data_raw.push_back(create_mdrecord(
17536  NAME("spectral_radiance_fieldClearskyPlaneParallel"),
17537  DESCRIPTION(
17538  "Clear-sky radiance field of a plane parallel atmosphere.\n"
17539  "\n"
17540  "The method assumes a 1D flat planet. Radiances along each direction\n"
17541  "given by *za_grid* are calculated using *ppathPlaneParallel*\n"
17542  "and *iyEmissionStandard*.\n"
17543  "\n"
17544  "Surface properties are defined by *iy_surface_agenda*, i.e. there is no\n"
17545  "restriction to e.g. specular surfaces.\n"
17546  "\n"
17547  "Note that the variable *ppath_lmax* is considered, and that it can be\n"
17548  "critical for the accuracy for zenith angles close to 90 degrees. That\n"
17549  "is, using ppath_lmax=-1 is not recommended for this function.\n"
17550  "\n"
17551  "Information on transmission is also provided by the GOUT *trans_field*.\n"
17552  "For up-welling radiation (scat_za > 90), this variable holds the\n"
17553  "transmission to space, for considered position and propagation direction.\n"
17554  "For down-welling radiation, *trans_field* holds instead the transmission\n"
17555  "down to the surface.\n"),
17556  AUTHORS("Patrick Eriksson"),
17557  OUT("spectral_radiance_field"),
17558  GOUT("trans_field"),
17559  GOUT_TYPE("Tensor3"),
17560  GOUT_DESC("Dimensions: [f_grid,p_grid,za_grid]. See further above."),
17561  IN("propmat_clearsky_agenda",
17562  "water_p_eq_agenda",
17563  "iy_space_agenda",
17564  "iy_surface_agenda",
17565  "iy_cloudbox_agenda",
17566  "stokes_dim",
17567  "f_grid",
17568  "atmosphere_dim",
17569  "p_grid",
17570  "z_field",
17571  "t_field",
17572  "nlte_field",
17573  "vmr_field",
17574  "abs_species",
17575  "wind_u_field",
17576  "wind_v_field",
17577  "wind_w_field",
17578  "mag_u_field",
17579  "mag_v_field",
17580  "mag_w_field",
17581  "z_surface",
17582  "ppath_lmax",
17583  "rte_alonglos_v",
17584  "surface_props_data",
17585  "za_grid"),
17586  GIN("use_parallel_iy"),
17587  GIN_TYPE("Index"),
17588  GIN_DEFAULT("0"),
17589  GIN_DESC("0: Parallelize over zenith angles\n"
17590  "1: Use more memory intensiv iyEmissionStandardParallel*")));
17591 
17592  md_data_raw.push_back(create_mdrecord(
17593  NAME("spectral_radiance_fieldCopyCloudboxField"),
17594  DESCRIPTION(
17595  "Set *spectral_radiance_field* to be a copy of *cloudbox_field*.\n"
17596  "\n"
17597  "This method can only be used for 1D atmospheres and if the cloud\n"
17598  "box covers the complete atmosphere. For such case, the two fields\n"
17599  "cover the same atmospheric volume and a direct copying can be made.\n"),
17600  AUTHORS("Patrick Eriksson"),
17601  OUT("spectral_radiance_field"),
17602  GOUT(),
17603  GOUT_TYPE(),
17604  GOUT_DESC(),
17605  IN("atmosphere_dim",
17606  "p_grid",
17607  "cloudbox_on",
17608  "cloudbox_limits",
17609  "cloudbox_field"),
17610  GIN(),
17611  GIN_TYPE(),
17612  GIN_DEFAULT(),
17613  GIN_DESC()));
17614 
17615  md_data_raw.push_back(create_mdrecord(
17616  NAME("spectral_radiance_fieldExpandCloudboxField"),
17617  DESCRIPTION(
17618  "Uses and expands *cloudbox_field* to set *spectral_radiance_field*.\n"
17619  "\n"
17620  "The method demands that *cloudbox_field* starts at the first pressure\n"
17621  "level (i.e. cloudbox_limits[0] is 0). The method copies *cloudbox_field*\n"
17622  "to fill *spectral_radiance_field* up to the top of the cloudbox.\n"
17623  "\n"
17624  "To fill the remaning part of *spectral_radiance_field*, clear-sky\n"
17625  "calculations are performed largely in the same maner as done by\n"
17626  "*spectral_radiance_fieldClearskyPlaneParallel*. That is, clear-sky\n"
17627  "calculations are done for the upper part of the atmosphere, assuming\n"
17628  "a flat planet.\n"
17629  "\n"
17630  "Note that the cloud box constitutes the lower boundary for the later\n"
17631  "calculations, and *iy_cloudbox_agenda* must be set to perform an\n"
17632  "interpolation of the cloudbox field.\n"),
17633  AUTHORS("Patrick Eriksson"),
17634  OUT("spectral_radiance_field"),
17635  GOUT(),
17636  GOUT_TYPE(),
17637  GOUT_DESC(),
17638  IN("propmat_clearsky_agenda",
17639  "water_p_eq_agenda",
17640  "iy_space_agenda",
17641  "iy_surface_agenda",
17642  "iy_cloudbox_agenda",
17643  "stokes_dim",
17644  "f_grid",
17645  "atmosphere_dim",
17646  "p_grid",
17647  "z_field",
17648  "t_field",
17649  "nlte_field",
17650  "vmr_field",
17651  "abs_species",
17652  "wind_u_field",
17653  "wind_v_field",
17654  "wind_w_field",
17655  "mag_u_field",
17656  "mag_v_field",
17657  "mag_w_field",
17658  "z_surface",
17659  "cloudbox_on",
17660  "cloudbox_limits",
17661  "cloudbox_field",
17662  "ppath_lmax",
17663  "rte_alonglos_v",
17664  "surface_props_data",
17665  "za_grid"),
17666  GIN("use_parallel_iy"),
17667  GIN_TYPE("Index"),
17668  GIN_DEFAULT("0"),
17669  GIN_DESC("0: Parallelize over zenith angles\n"
17670  "1: Use more memory intensiv iyEmissionStandardParallel*")));
17671 
17672  md_data_raw.push_back(create_mdrecord(
17673  NAME("specular_losCalc"),
17674  DESCRIPTION(
17675  "Calculates the specular direction of surface reflections.\n"
17676  "\n"
17677  "A help method to set up the surface properties. This method\n"
17678  "calculates *specular_los*, that is required in several methods\n"
17679  "to convert zenith angles to incidence angles.\n"
17680  "\n"
17681  "The method also returns the line-of-sight matching the surface normal.\n"
17682  "\n"
17683  "The default is to consider the surface slope when calculating the\n"
17684  "specular direction. That is, the variation of *z_surface* (as well as\n"
17685  "the geoid radius) is considered and the specular direction is calculated\n"
17686  "including the specified topography. This part can be deactivated by\n"
17687  "setting *ignore_surface_slope* to 1. In this case, the zenith angle of\n"
17688  "the specular direction is simply 180-rtp_los[0]. *ignore_surface_slope*\n"
17689  "has only an effect for 2D and 3D, as 1D implies a constant radius of\n"
17690  "the surface (i.e. no topography).\n"),
17691  AUTHORS("Patrick Eriksson"),
17692  OUT("specular_los", "surface_normal"),
17693  GOUT(),
17694  GOUT_TYPE(),
17695  GOUT_DESC(),
17696  IN("rtp_pos",
17697  "rtp_los",
17698  "atmosphere_dim",
17699  "lat_grid",
17700  "lon_grid",
17701  "refellipsoid",
17702  "z_surface"),
17703  GIN("ignore_surface_slope"),
17704  GIN_TYPE("Index"),
17705  GIN_DEFAULT("0"),
17706  GIN_DESC("Flag to control if surface slope is consdered or not.")));
17707 
17708  md_data_raw.push_back(create_mdrecord(
17709  NAME("specular_losCalcNoTopography"),
17710  DESCRIPTION(
17711  "Calculates the specular direction of surface reflections for horisontal\n"
17712  "surfaces.\n"
17713  "\n"
17714  "In contrast to *specular_losCalc*, this method ignores the topography\n"
17715  "implied by *z_surface*. That is, any slope of the surface is ignored.\n"
17716  "\n"
17717  "The typical application of this WSM should be water surfaces (lakes and\n"
17718  "oceans).\n"),
17719  AUTHORS("Patrick Eriksson"),
17720  OUT("specular_los", "surface_normal"),
17721  GOUT(),
17722  GOUT_TYPE(),
17723  GOUT_DESC(),
17724  IN("rtp_pos", "rtp_los", "atmosphere_dim"),
17725  GIN(),
17726  GIN_TYPE(),
17727  GIN_DEFAULT(),
17728  GIN_DESC()));
17729 
17730  md_data_raw.push_back(create_mdrecord(
17731  NAME("StringJoin"),
17732  DESCRIPTION(
17733  "Concatenate two or more strings.\n"
17734  "\n"
17735  "The output string is overwritten, but is allowed to appear\n"
17736  "in the input list. Up to 10 strings can be concatenated at once.\n"),
17737  AUTHORS("Oliver Lemke"),
17738  OUT(),
17739  GOUT("out"),
17740  GOUT_TYPE("String"),
17741  GOUT_DESC("Concatenated string."),
17742  IN(),
17743  GIN("in1",
17744  "in2",
17745  "in3",
17746  "in4",
17747  "in5",
17748  "in6",
17749  "in7",
17750  "in8",
17751  "in9",
17752  "in10"),
17753  GIN_TYPE("String",
17754  "String",
17755  "String",
17756  "String",
17757  "String",
17758  "String",
17759  "String",
17760  "String",
17761  "String",
17762  "String"),
17763  GIN_DEFAULT(NODEF, NODEF, "", "", "", "", "", "", "", ""),
17764  GIN_DESC("Input text string.",
17765  "Input text string.",
17766  "Input text string.",
17767  "Input text string.",
17768  "Input text string.",
17769  "Input text string.",
17770  "Input text string.",
17771  "Input text string.",
17772  "Input text string.",
17773  "Input text string.")));
17774 
17775  md_data_raw.push_back(
17776  create_mdrecord(NAME("StringSet"),
17777  DESCRIPTION("Sets a String to the given text string.\n"),
17778  AUTHORS("Patrick Eriksson"),
17779  OUT(),
17780  GOUT("out"),
17781  GOUT_TYPE("String"),
17782  GOUT_DESC("Variable to initialize."),
17783  IN(),
17784  GIN("text"),
17785  GIN_TYPE("String"),
17786  GIN_DEFAULT(NODEF),
17787  GIN_DESC("Input text string."),
17788  SETMETHOD(true)));
17789 
17790  md_data_raw.push_back(create_mdrecord(
17791  NAME("z_surfaceFromFileAndGrid"),
17792  DESCRIPTION(
17793  "Sets the surface altitude for a given latitude and longitude grid.\n"),
17794  AUTHORS("Richard Larsson"),
17795  OUT("z_surface"),
17796  GOUT(),
17797  GOUT_TYPE(),
17798  GOUT_DESC(),
17799  IN("lat_grid", "lon_grid"),
17800  GIN("filename", "interp_order", "set_lowest_altitude_to_zero"),
17801  GIN_TYPE("String", "Index", "Index"),
17802  GIN_DEFAULT(NODEF, "1", "0"),
17803  GIN_DESC(
17804  "File of GriddedField2 with surface altitudes gridded",
17805  "Interpolation order",
17806  "Index that sets the lowest altitude to 0 to ignore sub-surface pressures/altitudes")));
17807 
17808  md_data_raw.push_back(create_mdrecord(
17809  NAME("z_surfaceConstantAltitude"),
17810  DESCRIPTION(
17811  "Sets the surface altitude to a constant. Defaults to zero.\n"),
17812  AUTHORS("Richard Larsson"),
17813  OUT("z_surface"),
17814  GOUT(),
17815  GOUT_TYPE(),
17816  GOUT_DESC(),
17817  IN("lat_grid", "lon_grid"),
17818  GIN("altitude"),
17819  GIN_TYPE("Numeric"),
17820  GIN_DEFAULT("0"),
17821  GIN_DESC("The constant altitude.")));
17822 
17823  md_data_raw.push_back(create_mdrecord(
17824  NAME("surfaceBlackbody"),
17825  DESCRIPTION(
17826  "Creates variables to mimic a blackbody surface.\n"
17827  "\n"
17828  "This method sets up *surface_los*, *surface_rmatrix* and\n"
17829  "*surface_emission* for *surface_rtprop_agenda*. Here, *surface_los*\n"
17830  "and *surface_rmatrix* are set to be empty, and *surface_emission*\n"
17831  "to hold blackbody radiation for a temperature of *surface_skin_t*.\n"),
17832  AUTHORS("Patrick Eriksson"),
17833  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17834  GOUT(),
17835  GOUT_TYPE(),
17836  GOUT_DESC(),
17837  IN("atmosphere_dim",
17838  "f_grid",
17839  "stokes_dim",
17840  "rtp_pos",
17841  "rtp_los",
17842  "surface_skin_t"),
17843  GIN(),
17844  GIN_TYPE(),
17845  GIN_DEFAULT(),
17846  GIN_DESC()));
17847 
17848  md_data_raw.push_back(create_mdrecord(
17849  NAME("surfaceFastem"),
17850  DESCRIPTION(
17851  "Usage of FASTEM together with MC and DOIT.\n"
17852  "\n"
17853  "The recommended way to use FASTEM is by *iySurfaceFastem*, but that\n"
17854  "is not always possible, such as when using MC and DOIT. This is the\n"
17855  "case as those scattering methods use *surface_rtprop_agenda*,\n"
17856  "while *iySurfaceFastem* fits with *iy_surface_agenda*. This WSM solves\n"
17857  "this by allowing FASTEM to be used inside *surface_rtprop_agenda*.\n"
17858  "\n"
17859  "However, FASTEM is here used in an approximative way. For a correct\n"
17860  "usage of FASTEM, the atmospheric transmittance shall be calculated\n"
17861  "for the position and direction of concern, but this is not possible\n"
17862  "together with DOIT and MC. Instead, the transmittance is an input\n"
17863  "to the method, and must either be pre-calculated or set to a\n"
17864  "representative value.\n"
17865  "\n"
17866  "See *iySurfaceFastem*, for further details on the special input\n"
17867  "arguments.\n"),
17868  AUTHORS("Patrick Eriksson"),
17869  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17870  GOUT(),
17871  GOUT_TYPE(),
17872  GOUT_DESC(),
17873  IN("atmosphere_dim",
17874  "stokes_dim",
17875  "f_grid",
17876  "rtp_pos",
17877  "rtp_los",
17878  "surface_skin_t"),
17879  GIN("salinity",
17880  "wind_speed",
17881  "wind_direction",
17882  "transmittance",
17883  "fastem_version"),
17884  GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Index"),
17885  GIN_DEFAULT("0.035", NODEF, "0", NODEF, "6"),
17886  GIN_DESC("Salinity, 0-1. That is, 3% is given as 0.03.",
17887  "Wind speed.",
17888  "Wind direction. See futher above.",
17889  "Transmittance along path of downwelling radiation. A vector "
17890  "with the same length as *f_grid*.",
17891  "The version of FASTEM to use.")));
17892 
17893  md_data_raw.push_back(create_mdrecord(
17894  NAME("surfaceTessem"),
17895  DESCRIPTION(
17896  "TESSEM sea surface microwave emissivity parametrization.\n"
17897  "\n"
17898  "This method computes surface emissivity and reflectivity matrices for\n"
17899  "ocean surfaces using the TESSEM emissivity model: Prigent, C., et al.\n"
17900  "Sea‐surface emissivity parametrization from microwaves to millimetre\n"
17901  "waves, QJRMS, 2017, 143.702: 596-605.\n"
17902  "\n"
17903  "The validity range of the parametrization of is 10 to 700 GHz, but for\n"
17904  "some extra flexibility frequencies between 5 and 900 GHz are accepted.\n"
17905  "The accepted temperaute range for *surface_skin_t* is [260.0 K, 373.0 K]\n"
17906  "\n"
17907  "The model itself is represented by the neural networks in\n"
17908  "*tessem_neth* and *tessem_netv*.\n"),
17909  AUTHORS("Simon Pfreundschuh"),
17910  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17911  GOUT(),
17912  GOUT_TYPE(),
17913  GOUT_DESC(),
17914  IN("atmosphere_dim",
17915  "stokes_dim",
17916  "f_grid",
17917  "rtp_pos",
17918  "rtp_los",
17919  "surface_skin_t",
17920  "tessem_neth",
17921  "tessem_netv"),
17922  GIN("salinity", "wind_speed"),
17923  GIN_TYPE("Numeric", "Numeric"),
17924  GIN_DEFAULT("0.035", NODEF),
17925  GIN_DESC("Salinity, 0-1. That is, 3% is given as 0.03.", "Wind speed.")));
17926 
17927  md_data_raw.push_back(create_mdrecord(
17928  NAME("surfaceTelsem"),
17929  DESCRIPTION(
17930  "Compute surface emissivities using the TELSEM 2 model.\n"
17931  "\n"
17932  "This method uses second version of the TELSEM model for calculating\n"
17933  "land surface emissivities (F. Aires et al, \"A Tool to Estimate \n"
17934  " Land‐Surface Emissivities at Microwave frequencies (TELSEM) for use\n"
17935  " in numerical weather prediction\" Quarterly Journal of the Royal\n"
17936  "Meteorological Society, vol. 137, (656), pp. 690-699, 2011.)\n"
17937  "This methods computes land surface emissivities for a given pencil beam\n"
17938  "using a given TELSEM2 atlas.\n"
17939  "The input must satisfy the following conditions, otherwise an error is thrown:\n"
17940  " - The input frequencies (*f_grid*) must be within the range [5 GHz, 900 GHz]\n"
17941  " - The skin temperature (*surface_skin_t*) must be within the range\n"
17942  " [180 K, 360 K]\n"
17943  "\n"
17944  "A TELSEM atlas contains only suface emissivities for locations that are\n"
17945  "classified as land. By default this WSM will throw an error if the\n"
17946  "pencil beam hits the surface at a position that is not contained in the\n"
17947  "given atlas.\n"
17948  "\n"
17949  "The above behavior can be avoided by setting *d_max* to a positive value.\n"
17950  "This enables nearest neighbor interpolation, which assigns the emissivities\n"
17951  "of the nearest found cell in the atlas to the given position. In this case,\n"
17952  "an error is only thrown if the distance of the found neighbor is higher\n"
17953  "than the provided value of *d_max.\n"
17954  "\n"
17955  "You can limit the final reflectivity applied by setting *r_min* and *r_max*.\n"
17956  "\n"
17957  "To extract a land-sea mask from a given telsem atlas see the WSM\n"
17958  "*telsemSurfaceTypeLandSea*.\n"),
17959  AUTHORS("Simon Pfreundschuh"),
17960  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17961  GOUT(),
17962  GOUT_TYPE(),
17963  GOUT_DESC(),
17964  IN("atmosphere_dim",
17965  "stokes_dim",
17966  "f_grid",
17967  "lat_grid",
17968  "lat_true",
17969  "lon_true",
17970  "rtp_pos",
17971  "rtp_los",
17972  "surface_skin_t"),
17973  GIN("atlas", "r_min", "r_max", "d_max"),
17974  GIN_TYPE("TelsemAtlas", "Numeric", "Numeric", "Numeric"),
17975  GIN_DEFAULT(NODEF, "0", "1", "-1.0"),
17976  GIN_DESC("The Telsem atlas to use for the emissivity calculation.",
17977  "Minimum allowed value for reflectivity to apply.",
17978  "Maximum allowed value for reflectivity to apply.",
17979  "Maximum allowed distance in meters for nearest neighbor"
17980  " interpolation in meters. Set to a negative value or zero "
17981  " to disable interpolation.")));
17982 
17983  md_data_raw.push_back(create_mdrecord(
17984  NAME("surfaceFlatRefractiveIndex"),
17985  DESCRIPTION(
17986  "Creates variables to mimic specular reflection by a (flat) surface\n"
17987  "where the complex refractive index is specified.\n"
17988  "\n"
17989  "The dielectric properties of the surface are described by\n"
17990  "*surface_complex_refr_index*. The Fresnel equations are used to\n"
17991  "calculate amplitude reflection coefficients. The method can thus\n"
17992  "result in that the reflection properties differ between frequencies\n"
17993  "and polarisations.\n"
17994  "\n"
17995  "Local thermodynamic equilibrium is assumed, which corresponds to\n"
17996  "that the reflection and emission coefficients add up to 1.\n"),
17997  AUTHORS("Patrick Eriksson"),
17998  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17999  GOUT(),
18000  GOUT_TYPE(),
18001  GOUT_DESC(),
18002  IN("f_grid",
18003  "stokes_dim",
18004  "atmosphere_dim",
18005  "rtp_pos",
18006  "rtp_los",
18007  "specular_los",
18008  "surface_skin_t",
18009  "surface_complex_refr_index"),
18010  GIN(),
18011  GIN_TYPE(),
18012  GIN_DEFAULT(),
18013  GIN_DESC()));
18014 
18015  md_data_raw.push_back(create_mdrecord(
18016  NAME("surfaceFlatReflectivity"),
18017  DESCRIPTION(
18018  "Creates variables to mimic specular reflection by a (flat) surface\n"
18019  "where *surface_reflectivity* is specified.\n"
18020  "\n"
18021  "Works basically as *surfaceFlatScalarReflectivity* but is more\n"
18022  "general as vector radiative transfer is more properly handled. See\n"
18023  "the ARTS theory document (ATD) for details around how\n"
18024  "*surface_emission* is determined. In the nomenclature of ATD,\n"
18025  "*surface_reflectivity* gives R.\n"),
18026  AUTHORS("Patrick Eriksson"),
18027  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18028  GOUT(),
18029  GOUT_TYPE(),
18030  GOUT_DESC(),
18031  IN("f_grid",
18032  "stokes_dim",
18033  "atmosphere_dim",
18034  "rtp_pos",
18035  "rtp_los",
18036  "specular_los",
18037  "surface_skin_t",
18038  "surface_reflectivity"),
18039  GIN(),
18040  GIN_TYPE(),
18041  GIN_DEFAULT(),
18042  GIN_DESC()));
18043 
18044  md_data_raw.push_back(create_mdrecord(
18045  NAME("surfaceFlatRvRh"),
18046  DESCRIPTION(
18047  "Creates variables to mimic specular reflection by a (flat) surface\n"
18048  "where *surface_rv_rh* is specified.\n"
18049  "\n"
18050  "This method assumes that the reflection at vertical and horizontal\n"
18051  "polarisation differs. As power reflection coefficients are provided\n"
18052  "there is no information at hand on phase shifts between polarisations,\n"
18053  "and they are simply assumed to be zero. These assumptions result in\n"
18054  "that *surface_emission* is set to zero for positions corresponding to\n"
18055  "U and V, and that all diagonal elementsof *surface_rmatrix* are equal\n"
18056  "(the mean of rv and rh). Further, all off-diagonal elements of\n"
18057  "*surface_rmatrix* are all zero except for (0,1) and (1,0).\n"),
18058  AUTHORS("Patrick Eriksson"),
18059  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18060  GOUT(),
18061  GOUT_TYPE(),
18062  GOUT_DESC(),
18063  IN("f_grid",
18064  "stokes_dim",
18065  "atmosphere_dim",
18066  "rtp_pos",
18067  "rtp_los",
18068  "specular_los",
18069  "surface_skin_t",
18070  "surface_rv_rh"),
18071  GIN(),
18072  GIN_TYPE(),
18073  GIN_DEFAULT(),
18074  GIN_DESC()));
18075 
18076  md_data_raw.push_back(create_mdrecord(
18077  NAME("surfaceFlatScalarReflectivity"),
18078  DESCRIPTION(
18079  "Creates variables to mimic specular reflection by a (flat) surface\n"
18080  "where *surface_scalar_reflectivity* is specified.\n"
18081  "\n"
18082  "This method assumes that the reflection at vertical and horizontal\n"
18083  "polarisation is identical. This assumption includes that there is no\n"
18084  "phase shift between polarisations. These assumptions result in that\n"
18085  "*surface_emission* is set to zero for positions corresponding to Q,\n"
18086  "U and V, and that *surface_rmatrix* becomes a diagonal matrix (with\n"
18087  "all elements on the diagonal equal to the specified reflectivity).\n"),
18088  AUTHORS("Patrick Eriksson"),
18089  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18090  GOUT(),
18091  GOUT_TYPE(),
18092  GOUT_DESC(),
18093  IN("f_grid",
18094  "stokes_dim",
18095  "atmosphere_dim",
18096  "rtp_pos",
18097  "rtp_los",
18098  "specular_los",
18099  "surface_skin_t",
18100  "surface_scalar_reflectivity"),
18101  GIN(),
18102  GIN_TYPE(),
18103  GIN_DEFAULT(),
18104  GIN_DESC()));
18105 
18106  md_data_raw.push_back(create_mdrecord(
18107  NAME("surfaceLambertianSimple"),
18108  DESCRIPTION(
18109  "Creates variables to mimic a Lambertian surface.\n"
18110  "\n"
18111  "A Lambertian surface can be characterised solely by its\n"
18112  "reflectivity, here taken from *surface_scalar_reflectivity*.\n"
18113  "\n"
18114  "The down-welling radiation field is estimated by making calculations\n"
18115  "for *lambertian_nza* directions. The range of zenith angles ([0,90])\n"
18116  "is divided in an equidistant manner for 1D. For 2D and 3D see below.\n"
18117  "The values for *surface_rmatrix* are assuming a constant radiance\n"
18118  "over each zenith angle range. See AUG.\n"
18119  "\n"
18120  "Default is to select the zenith angles for *sensor_los* to be placed\n"
18121  "centrally in the grid ranges. For example, if *lambertian_nza* is set\n"
18122  "to 9, down-welling radiation will be calculated for zenith angles = \n"
18123  "5, 15, ..., 85. The position of these angles can be shifted by\n"
18124  "*za_pos*. This variable specifies the fractional distance inside the\n"
18125  "ranges. For example, a *za_pos* of 0.7 (np still 9) gives the angles\n"
18126  "7, 17, ..., 87.\n"
18127  "\n"
18128  "Only upper-left diagonal element of the *surface_rmatrix* is\n"
18129  "non-zero. That is, the upwelling radiation is always unpolarised.\n"
18130  "\n"
18131  "Local thermodynamic equilibrium is assumed, which corresponds to\n"
18132  "that the reflection and emission coefficients \"add up to 1\".\n"
18133  "\n"
18134  "For 2D and 3D, the down-welling directions are placed along the\n"
18135  "the viewing direction, e.g. for 3D the azimuth angle is kept constant.\n"
18136  "In 2D and 3D surface topography can exist, and to avoid getting views\n"
18137  "going directly into the surface, angels are not distributed over 90 deg,\n"
18138  "but 90-abs(surface_normal[0]).\n"),
18139  AUTHORS("Patrick Eriksson"),
18140  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18141  GOUT(),
18142  GOUT_TYPE(),
18143  GOUT_DESC(),
18144  IN("f_grid",
18145  "stokes_dim",
18146  "atmosphere_dim",
18147  "rtp_pos",
18148  "rtp_los",
18149  "surface_normal",
18150  "surface_skin_t",
18151  "surface_scalar_reflectivity"),
18152  GIN("lambertian_nza", "za_pos"),
18153  GIN_TYPE("Index", "Numeric"),
18154  GIN_DEFAULT("9", "0.5"),
18155  GIN_DESC("Number of downwelling streams.",
18156  "Position of angle in *surface_los* inside ranges of zenith "
18157  "angle grid. See above.")));
18158 
18159  md_data_raw.push_back(create_mdrecord(
18160  NAME("surfaceSemiSpecularBy3beams"),
18161  DESCRIPTION(
18162  "A simplistic treatment of semi-specular surfaces.\n"
18163  "\n"
18164  "This method has no strong physical basis but could be used for simpler\n"
18165  "testing or as starting point for more advanced methods.\n"
18166  "\n"
18167  "This method assumes that the surface can be treated to have three facets,\n"
18168  "all lacking surface roughness. One facet is assumed to give standard\n"
18169  "specular reflection, while the two other facets are tilted with +dza\n"
18170  "and -dza, respectively. The tilt is assumed to only affect the zenith\n"
18171  "angle of the reflected direction (azimuth same as for specular direction).\n"
18172  "The area ratio of the non-tilted facet is set by *specular_factor*.\n"
18173  "That is, the specular beam is given weight w, while the other two beams\n"
18174  "each get weight (1-w)/2.\n"
18175  "\n"
18176  "If a facet tilts away from the viewing direction in such way that\n"
18177  "the surface is observed from below, the tilt of the facet is decreased\n"
18178  "in steps of 1 degree until a successful calculation is obtained. If this\n"
18179  "turns out to require a tilt of zero, this facete is merged with\n"
18180  "the specular direction.\n"
18181  "\n"
18182  "The pure specular properties of the surface shall be described by\n"
18183  "*surface_rtprop_sub_agenda*. That is, if you have specular surface\n"
18184  "described and you want to make it semi-specular by this method, you\n"
18185  "move the content of the existing *surface_rtprop_agenda* to\n"
18186  "*surface_rtprop_sub_agenda* and instead fill *surface_rtprop_agenda*\n"
18187  "with this method.\n"),
18188  AUTHORS("Patrick Eriksson"),
18189  OUT("surface_skin_t",
18190  "surface_los",
18191  "surface_rmatrix",
18192  "surface_emission"),
18193  GOUT(),
18194  GOUT_TYPE(),
18195  GOUT_DESC(),
18196  IN("atmosphere_dim",
18197  "f_grid",
18198  "rtp_pos",
18199  "rtp_los",
18200  "surface_rtprop_sub_agenda"),
18201  GIN("specular_factor", "dza"),
18202  GIN_TYPE("Numeric", "Numeric"),
18204  GIN_DESC("The weight given to the specular direction. Denoted as w above."
18205  " A value between 1/3 and 1.",
18206  "Zenith angle seperation to each secondary direction. A "
18207  "between 0 and 45 degrees.")));
18208 
18209  md_data_raw.push_back(create_mdrecord(
18210  NAME("surfaceSplitSpecularTo3beams"),
18211  DESCRIPTION(
18212  "A very simple approximation of a semi-specular surface.\n"
18213  "\n"
18214  "This method has no direct physical basis but could be used for simpler\n"
18215  "testing or as starting point for more advanced methods.\n"
18216  "\n"
18217  "The method requires that the surface RT properties (e.g. *surface_los*)\n"
18218  "have been set up to mimic a specular surface. This method splits the down-\n"
18219  "welling radiation into three directions. The specular direction is given\n"
18220  "weight w, while the other two beams each get weight (1-w)/2. The basic\n"
18221  "polarised reflectivity from the specular calculations is maintained\n"
18222  "for each beam. The beams are just separated in zenith angle, with a\n"
18223  "separation of *dza*. The lowermost beam is not allowed to be closer to\n"
18224  "the surface than 1 degree. If there is no room for the lowermost beam,\n"
18225  "it is merged with the main beam.\n"),
18226  AUTHORS("Patrick Eriksson"),
18227  OUT("surface_los", "surface_rmatrix"),
18228  GOUT(),
18229  GOUT_TYPE(),
18230  GOUT_DESC(),
18231  IN("surface_los",
18232  "surface_rmatrix",
18233  "atmosphere_dim",
18234  "rtp_pos",
18235  "rtp_los"),
18236  GIN("specular_factor", "dza"),
18237  GIN_TYPE("Numeric", "Numeric"),
18239  GIN_DESC("The weight given to the specular direction. Denoted as w above."
18240  " A value between 1/3 and 1.",
18241  "Zenith angle seperation to each secondary direction. A "
18242  "between 0 and 45 degrees.")));
18243 
18244  md_data_raw.push_back(create_mdrecord(
18245  NAME("surface_complex_refr_indexFromGriddedField5"),
18246  DESCRIPTION(
18247  "Extracts complex refractive index from a field of such data.\n"
18248  "\n"
18249  "The method allows to obtain *surface_complex_refr_index* by\n"
18250  "interpolation of a geographical field of such data. The position\n"
18251  "for which refraction shall be extracted is given by *rtp_pos*.\n"
18252  "The refractive index field is expected to be stored as:\n"
18253  " GriddedField5:\n"
18254  " Vector f_grid[N_f]\n"
18255  " Vector T_grid[N_T]\n"
18256  " ArrayOfString Complex[2]\n"
18257  " Vector \"Latitude\" [N_lat]\n"
18258  " Vector \"Longitude\" [N_lon]\n"
18259  " Tensor5 data[N_f][N_T][2][N_lat][N_lon]\n"
18260  "\n"
18261  "Definition and treatment of the three first dimensions follows\n"
18262  "*complex_refr_index*, e.g. the temperature grid is allowed\n"
18263  "to have length 1. The grids for latitude and longitude must have\n"
18264  "a length of >= 2 (ie. no automatic expansion).\n"
18265  "\n"
18266  "Hence, this method performs an interpolation only in the lat and\n"
18267  "lon dimensions, to a single point. The remaining GriddedField3 is\n"
18268  "simply returned as *surface_complex_refr_index*.\n"),
18269  AUTHORS("Patrick Eriksson"),
18270  OUT("surface_complex_refr_index"),
18271  GOUT(),
18272  GOUT_TYPE(),
18273  GOUT_DESC(),
18274  IN("atmosphere_dim", "lat_grid", "lat_true", "lon_true", "rtp_pos"),
18275  GIN("complex_refr_index_field"),
18276  GIN_TYPE("GriddedField5"),
18277  GIN_DEFAULT(NODEF),
18278  GIN_DESC("A field of complex refractive index.")));
18279 
18280  md_data_raw.push_back(create_mdrecord(
18281  NAME("surface_reflectivityFromGriddedField6"),
18282  DESCRIPTION(
18283  "Extracts surface reflectivities from a field of such data.\n"
18284  "\n"
18285  "This method allows to specify a field of surface reflectivity for\n"
18286  "automatic interpolation to points of interest. The position and\n"
18287  "direction for which the reflectivity shall be extracted are given\n"
18288  "by *rtp_pos* and *rtp_los*. The reflectivity field is expected to\n"
18289  "be stored as:\n"
18290  " GriddedField6:\n"
18291  " Vector \"Frequency\" [N_f]\n"
18292  " Vector \"Stokes element\" [N_s1]\n"
18293  " Vector \"Stokes_element\" [N_s2]\n"
18294  " Vector \"Incidence angle\" [N_ia]\n"
18295  " Vector \"Latitude\" [N_lat]\n"
18296  " Vector \"Longitude\" [N_lon]\n"
18297  " Tensor6 data[N_f][N_s1][N_s2][N_ia][N_lat][N_lon]\n"
18298  "\n"
18299  "Grids for incidence angle, latitude and longitude must have a\n"
18300  "length of >= 2 (ie. no automatic expansion). If the frequency grid\n"
18301  "has length 1, this is taken as that the reflectivity is constant,\n"
18302  "following the definition of *surface_scalar_reflectivity*.\n"
18303  "The data can cover higher Stokes dimensionalities than set by\n"
18304  "*stokes_dim*. Data for non-used Stokes elements are just cropped.\n"
18305  "The order between the two Stokes dimensions is the same as in\n"
18306  "*surface_reflectivity* and surface_rmatrix*.\n"
18307  "\n"
18308  "The interpolation is done in steps:\n"
18309  " 1: Linear interpolation for lat and lon (std. extrapolation).\n"
18310  " 2: Interpolation in incidence angle (std. extrapolation).\n"
18311  " If the grid has a length of >= 4, cubic interpolation is\n"
18312  " applied. Otherwise linear interpolation.\n"
18313  " 3. Linear interpolation in frequency (if input data have more\n"
18314  " than one frequency).\n"),
18315  AUTHORS("Patrick Eriksson"),
18316  OUT("surface_reflectivity"),
18317  GOUT(),
18318  GOUT_TYPE(),
18319  GOUT_DESC(),
18320  IN("stokes_dim",
18321  "f_grid",
18322  "atmosphere_dim",
18323  "lat_grid",
18324  "lat_true",
18325  "lon_true",
18326  "rtp_pos",
18327  "rtp_los"),
18328  GIN("r_field"),
18329  GIN_TYPE("GriddedField6"),
18330  GIN_DEFAULT(NODEF),
18331  GIN_DESC("A field of surface reflectivities")));
18332 
18333  md_data_raw.push_back(create_mdrecord(
18334  NAME("surface_rtpropCallAgendaX"),
18335  DESCRIPTION(
18336  "Switch between the elements of *surface_rtprop_agenda_array*.\n"
18337  "\n"
18338  "This method simply calls the agenda matching *surface_type* and\n"
18339  "returns the results. That is, the agenda in *surface_rtprop_agenda_array*\n"
18340  "with index *surface_type* (0-based) is called.\n"),
18341  AUTHORS("Patrick Eriksson"),
18342  OUT("surface_skin_t",
18343  "surface_los",
18344  "surface_rmatrix",
18345  "surface_emission"),
18346  GOUT(),
18347  GOUT_TYPE(),
18348  GOUT_DESC(),
18349  IN("f_grid",
18350  "rtp_pos",
18351  "rtp_los",
18352  "surface_rtprop_agenda_array",
18353  "surface_type",
18354  "surface_type_aux"),
18355  GIN(),
18356  GIN_TYPE(),
18357  GIN_DEFAULT(),
18358  GIN_DESC()));
18359 
18360  md_data_raw.push_back(create_mdrecord(
18361  NAME("surface_scalar_reflectivityFromGriddedField4"),
18362  DESCRIPTION(
18363  "Extracts scalar surface reflectivities from a field of such data.\n"
18364  "\n"
18365  "This method allows to specify a field of surface reflectivity for\n"
18366  "automatic interpolation to points of interest. The position and\n"
18367  "direction for which the reflectivity shall be extracted are given\n"
18368  "by *rtp_pos* and *rtp_los*. The reflectivity field is expected to\n"
18369  "be stored as:\n"
18370  " GriddedField4:\n"
18371  " Vector \"Frequency\" [N_f]\n"
18372  " Vector \"Incidence angle\" [N_ia]\n"
18373  " Vector \"Latitude\" [N_lat]\n"
18374  " Vector \"Longitude\" [N_lon]\n"
18375  " Tensor4 data[N_f][N_ia][N_lat][N_lon]\n"
18376  "\n"
18377  "Grids for incidence angle, latitude and longitude must have a\n"
18378  "length of >= 2 (ie. no automatic expansion). If the frequency grid\n"
18379  "has length 1, this is taken as the reflectivity is constant,\n"
18380  "following the definition of *surface_scalar_reflectivity*.\n"
18381  "\n"
18382  "The interpolation is done in steps:\n"
18383  " 1: Linear interpolation for lat and lon (std. extrapolation).\n"
18384  " 2: Interpolation in incidence angle (std. extrapolation).\n"
18385  " If the grid has a length of >= 4, cubic interpolation is\n"
18386  " applied. Otherwise linear interpolation.\n"
18387  " 3. Linear interpolation if frequency (if input data have more\n"
18388  " than one frequency).\n"),
18389  AUTHORS("Patrick Eriksson"),
18390  OUT("surface_scalar_reflectivity"),
18391  GOUT(),
18392  GOUT_TYPE(),
18393  GOUT_DESC(),
18394  IN("stokes_dim",
18395  "f_grid",
18396  "atmosphere_dim",
18397  "lat_grid",
18398  "lat_true",
18399  "lon_true",
18400  "rtp_pos",
18401  "rtp_los"),
18402  GIN("r_field"),
18403  GIN_TYPE("GriddedField4"),
18404  GIN_DEFAULT(NODEF),
18405  GIN_DESC("A field of scalar surface reflectivities")));
18406 
18407  /*
18408  md_data_raw.push_back
18409  ( create_mdrecord
18410  ( NAME( "surface_reflectivityFromSurface_rmatrix" ),
18411  DESCRIPTION
18412  (
18413  "As *surface_scalar_reflectivityFromSurface_rmatrix*, but for (vectorRT)"
18414  "*surface_reflectivity*.\n"
18415  "\n"
18416  "For each frequency f and stokes parameter combi st_in and st_out,"
18417  "*surface_reflectivity* is set to the sum of"
18418  "surface_rmatrix(joker,f,st_in,st_out).\n"
18419  ),
18420  AUTHORS( "Jana Mendrok" ),
18421  OUT( "surface_reflectivity" ),
18422  GOUT(),
18423  GOUT_TYPE(),
18424  GOUT_DESC(),
18425  IN( "surface_rmatrix" ),
18426  GIN(),
18427  GIN_TYPE(),
18428  GIN_DEFAULT(),
18429  GIN_DESC()
18430  ));
18431 */
18432 
18433  md_data_raw.push_back(create_mdrecord(
18434  NAME("surface_scalar_reflectivityFromSurface_rmatrix"),
18435  DESCRIPTION(
18436  "Sets *surface_scalar_reflectivity* based on *surface_rmatrix*.\n"
18437  "\n"
18438  "For each frequency f, *surface_scalar_reflectivity* is set to\n"
18439  "the sum of surface_rmatrix(joker,f,0,0).\n"),
18440  AUTHORS("Patrick Eriksson"),
18441  OUT("surface_scalar_reflectivity"),
18442  GOUT(),
18443  GOUT_TYPE(),
18444  GOUT_DESC(),
18445  IN("surface_rmatrix"),
18446  GIN(),
18447  GIN_TYPE(),
18448  GIN_DEFAULT(),
18449  GIN_DESC()));
18450 
18451  md_data_raw.push_back(create_mdrecord(
18452  NAME("surface_typeInterpTypeMask"),
18453  DESCRIPTION(
18454  "Closest neighbour interpolation of surface type mask.\n"
18455  "\n"
18456  "The method determines the surface type at the position of concern\n"
18457  "(*rtp_pos*) from the provided type mask (*surface_type_mask*).\n"
18458  "The closest point in the mask is selected. The surface type\n"
18459  "is set to the integer part of the value at the found point, while\n"
18460  "*surface_type_aux* is set to the reminder. For example, if the\n"
18461  "mask value at closest point is 2.23, *surface_type* is set to 2\n"
18462  "*surface_type_aux* becomes 0.23.\n"
18463  "\n"
18464  "The altitude in *rtp_pos* is ignored.\n"),
18465  AUTHORS("Patrick Eriksson"),
18466  OUT("surface_type", "surface_type_aux"),
18467  GOUT(),
18468  GOUT_TYPE(),
18469  GOUT_DESC(),
18470  IN("atmosphere_dim",
18471  "lat_grid",
18472  "lat_true",
18473  "lon_true",
18474  "rtp_pos",
18475  "surface_type_mask"),
18476  GIN(),
18477  GIN_TYPE(),
18478  GIN_DEFAULT(),
18479  GIN_DESC()));
18480 
18481  md_data_raw.push_back(create_mdrecord(
18482  NAME("SurfaceDummy"),
18483  DESCRIPTION(
18484  "Dummy method for *iy_surface_agenda*.\n"
18485  "\n"
18486  "If you don't make use of *surface_props_data* and associated\n"
18487  "variables, include this method *iy_surface_agenda*. The method\n"
18488  "just checks that the variables of concern are set to be empty,\n"
18489  "and you don't need to include calls of *Ignore* and *Touch* in\n"
18490  "the agenda.\n"),
18491  AUTHORS("Patrick Eriksson"),
18492  OUT("dsurface_rmatrix_dx", "dsurface_emission_dx"),
18493  GOUT(),
18494  GOUT_TYPE(),
18495  GOUT_DESC(),
18496  IN("dsurface_rmatrix_dx",
18497  "dsurface_emission_dx",
18498  "atmosphere_dim",
18499  "lat_grid",
18500  "lon_grid",
18501  "surface_props_data",
18502  "surface_props_names",
18503  "dsurface_names",
18504  "jacobian_do"),
18505  GIN(),
18506  GIN_TYPE(),
18507  GIN_DEFAULT(),
18508  GIN_DESC()));
18509 
18510  md_data_raw.push_back(create_mdrecord(
18511  NAME("SurfaceFastem"),
18512  DESCRIPTION(
18513  "FASTEM sea surface microwave emissivity parametrization.\n"
18514  "\n"
18515  "The variable *surface_props_data* must contain these data:\n"
18516  " \"Water skin temperature\"\n"
18517  " \"Wind speed\"\n"
18518  " \"Wind direction\"\n"
18519  " \"Salinity\"\n"
18520  "\n"
18521  "For some details and comments see *FastemStandAlone* and *surfaceFastem*.\n"),
18522  AUTHORS("Patrick Eriksson"),
18523  OUT("surface_los",
18524  "surface_rmatrix",
18525  "dsurface_rmatrix_dx",
18526  "surface_emission",
18527  "dsurface_emission_dx"),
18528  GOUT(),
18529  GOUT_TYPE(),
18530  GOUT_DESC(),
18531  IN("dsurface_rmatrix_dx",
18532  "dsurface_emission_dx",
18533  "stokes_dim",
18534  "atmosphere_dim",
18535  "lat_grid",
18536  "lon_grid",
18537  "f_grid",
18538  "rtp_pos",
18539  "rtp_los",
18540  "surface_props_data",
18541  "surface_props_names",
18542  "dsurface_names",
18543  "jacobian_do"),
18544  GIN("transmittance", "fastem_version"),
18545  GIN_TYPE("Vector", "Index"),
18546  GIN_DEFAULT(NODEF, "6"),
18547  GIN_DESC("Transmittance along path of downwelling radiation. A vector "
18548  "with the same length as *f_grid*.",
18549  "The version of FASTEM to use.")));
18550 
18551  md_data_raw.push_back(create_mdrecord(
18552  NAME("SurfaceTessem"),
18553  DESCRIPTION(
18554  "TESSEM sea surface microwave emissivity parametrization.\n"
18555  "\n"
18556  "The variable *surface_props_data* must contain these data:\n"
18557  " \"Water skin temperature\"\n"
18558  " \"Wind speed\"\n"
18559  " \"Salinity\"\n"
18560  "\n"
18561  "This method computes surface emissivity and reflectivity matrices for\n"
18562  "ocean surfaces using the TESSEM emissivity model: Prigent, C., et al.\n"
18563  "Sea-surface emissivity parametrization from microwaves to millimetre\n"
18564  "waves, QJRMS, 2017, 143.702: 596-605.\n"
18565  "\n"
18566  "The validity range of the parametrization of is 10 to 700 GHz, but for\n"
18567  "some extra flexibility frequencies between 5 and 900 GHz are accepted.\n"
18568  "The accepted temperaute range for water skin temperature is\n"
18569  "[260.0 K, 373.0 K]. Salinity shall be in the range [0,1]. That is, a\n"
18570  "salinity of 3% is given as 0.03.\n"
18571  "\n"
18572  "The model itself is represented by the neural networks in\n"
18573  "*tessem_neth* and *tessem_netv*.\n"),
18574  AUTHORS("Simon Pfreundschuh", "Patrick Eriksson"),
18575  OUT("surface_los",
18576  "surface_rmatrix",
18577  "dsurface_rmatrix_dx",
18578  "surface_emission",
18579  "dsurface_emission_dx"),
18580  GOUT(),
18581  GOUT_TYPE(),
18582  GOUT_DESC(),
18583  IN("dsurface_rmatrix_dx",
18584  "dsurface_emission_dx",
18585  "stokes_dim",
18586  "atmosphere_dim",
18587  "lat_grid",
18588  "lon_grid",
18589  "f_grid",
18590  "rtp_pos",
18591  "rtp_los",
18592  "tessem_neth",
18593  "tessem_netv",
18594  "surface_props_data",
18595  "surface_props_names",
18596  "dsurface_names",
18597  "jacobian_do"),
18598  GIN(),
18599  GIN_TYPE(),
18600  GIN_DEFAULT(),
18601  GIN_DESC()));
18602 
18603  md_data_raw.push_back(create_mdrecord(
18604  NAME("TangentPointExtract"),
18605  DESCRIPTION(
18606  "Finds the tangent point of a propagation path.\n"
18607  "\n"
18608  "The tangent point is here defined as the point with the lowest\n"
18609  "altitude (which differes from the definition used in the code\n"
18610  "where it is the point with the lowest radius, or equally the point\n"
18611  "with a zenith angle of 90 deg.)\n"
18612  "\n"
18613  "The tangent point is returned as a vector, with columns matching\n"
18614  "e.g. *rte_pos*. If the propagation path has no tangent point, the\n"
18615  "vector is set to NaN.\n"),
18616  AUTHORS("Patrick Eriksson"),
18617  OUT(),
18618  GOUT("tan_pos"),
18619  GOUT_TYPE("Vector"),
18620  GOUT_DESC("The position vector of the tangent point."),
18621  IN("ppath"),
18622  GIN(),
18623  GIN_TYPE(),
18624  GIN_DEFAULT(),
18625  GIN_DESC()));
18626 
18627  md_data_raw.push_back(create_mdrecord(
18628  NAME("TangentPointPrint"),
18629  DESCRIPTION(
18630  "Prints information about the tangent point of a propagation path.\n"
18631  "\n"
18632  "The tangent point is here defined as the point with the lowest\n"
18633  "altitude (which differes from the definition used in the code\n"
18634  "where it is the point with the lowest radius, or equally the point\n"
18635  "with a zenith angle of 90 deg.)\n"),
18636  AUTHORS("Patrick Eriksson"),
18637  OUT(),
18638  GOUT(),
18639  GOUT_TYPE(),
18640  GOUT_DESC(),
18641  IN("ppath"),
18642  GIN("level"),
18643  GIN_TYPE("Index"),
18644  GIN_DEFAULT("1"),
18645  GIN_DESC("Output level to use.")));
18646 
18647  md_data_raw.push_back(create_mdrecord(
18648  NAME("telsemStandalone"),
18649  DESCRIPTION(
18650  "Stand-alone evaluation of the Telsem model.\n"
18651  "\n"
18652  "This evaluates the Telsem land surface emissivity\n"
18653  "model using the data from the provided atlas.\n"
18654  "\n"
18655  "Since TELSEM atlases do not contain data for all locations\n"
18656  "this function allows for nearest neighbor interpolation, which\n"
18657  "can be enabled by setting the *d_max* GIN to a positive value.\n"
18658  "\n"
18659  "This WSM throws a runtime error if the queried location is not\n"
18660  "contained in the atlas or the distance of the neighboring cell\n"
18661  "exceeds the given *d_max* value.\n"),
18662  AUTHORS("Simon Pfreundschuh"),
18663  OUT(),
18664  GOUT("emissivities"),
18665  GOUT_TYPE("Matrix"),
18666  GOUT_DESC("The computed h and v emissivites"),
18667  IN(),
18668  GIN("lat", "lon", "theta", "f", "ta", "d_max"),
18669  GIN_TYPE(
18670  "Numeric", "Numeric", "Numeric", "Vector", "TelsemAtlas", "Numeric"),
18671  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "-1"),
18672  GIN_DESC("The latitude for which to compute the emissivities.",
18673  "The latitude for which to compute the emissivities.",
18674  "The incidence angle.",
18675  "The frequencies for which to compute the emissivities.",
18676  "The Telsem atlas to use.",
18677  "The maximum allowed distance for nearest neighbor"
18678  " interpolation in meters.")));
18679 
18680  md_data_raw.push_back(create_mdrecord(
18681  NAME("telsemAtlasLookup"),
18682  DESCRIPTION(
18683  "Lookup SSMI emissivities from Telsem Atlas.\n"
18684  "\n"
18685  "This returns the emissivities (indices [0,..,6])\n"
18686  " for the SSMI channels that are contained in\n"
18687  "the Telsem atlas.\n"
18688  "\n"
18689  "If given latitude and longitude are not in the atlas an empty\n"
18690  "vector is returned.\n"),
18691  AUTHORS("Simon Pfreundschuh"),
18692  OUT(),
18693  GOUT("emissivities"),
18694  GOUT_TYPE("Vector"),
18695  GOUT_DESC("The SSMI emissivities from the atlas"),
18696  IN(),
18697  GIN("lat", "lon", "atlas"),
18698  GIN_TYPE("Numeric", "Numeric", "TelsemAtlas"),
18700  GIN_DESC("The latitude for which to compute the emissivities.",
18701  "The latitude for which to compute the emissivities.",
18702  "The Telsem atlas to use.")));
18703 
18704  md_data_raw.push_back(create_mdrecord(
18705  NAME("telsemSurfaceTypeLandSea"),
18706  DESCRIPTION(
18707  "TELSEM based land sea mask.\n"
18708  "\n"
18709  "This method determines whether the position in *rtp_pos* is\n"
18710  "of type ocean or land depending on whether a corresponding\n"
18711  "cell is contained in the provided TELSEM atlas.\n"
18712  "In combination with the WSM *surface_rtpropCallAgendaX* this\n"
18713  "can be used to used different methods to compute surface radiative\n"
18714  "properties.\n"),
18715  AUTHORS("Simon Pfreundschuh"),
18716  OUT("surface_type"),
18717  GOUT(),
18718  GOUT_TYPE(),
18719  GOUT_DESC(),
18720  IN("atmosphere_dim", "lat_grid", "lat_true", "lon_true", "rtp_pos"),
18721  GIN("atlas"),
18722  GIN_TYPE("TelsemAtlas"),
18723  GIN_DEFAULT(NODEF),
18724  GIN_DESC("The telsem atlas from which to lookup the surface type.")));
18725 
18726  md_data_raw.push_back(create_mdrecord(
18727  NAME("telsem_atlasReadAscii"),
18728  DESCRIPTION(
18729  "Reads single TELSEM atlas.\n"
18730  "\n"
18731  "'directory' needs to contain the original 12 Telsem atlas files\n"
18732  "and the correlations file. This WSM reads the atlas for the specified\n"
18733  "month and stores the result in the provided output atlas.\n"),
18734  AUTHORS("Simon Pfreundschuh"),
18735  OUT(),
18736  GOUT("atlas"),
18737  GOUT_TYPE("TelsemAtlas"),
18738  GOUT_DESC("The atlas into which to store the loaded atlas."),
18739  IN(),
18740  GIN("directory", "month", "filename_pattern"),
18741  GIN_TYPE("String", "Index", "String"),
18742  GIN_DEFAULT(NODEF, NODEF, "ssmi_mean_emis_climato_@MM@_cov_interpol_M2"),
18743  GIN_DESC("Directory with TELSEM 2 SSMI atlas files.",
18744  "The month for which the atlas should be read.",
18745  "Filename pattern (@MM@ gets replaced by month number)")));
18746 
18747  md_data_raw.push_back(create_mdrecord(
18748  NAME("telsem_atlasesReadAscii"),
18749  DESCRIPTION(
18750  "Reads TELSEM atlas files.\n"
18751  "\n"
18752  "'directory' needs to contain the original 12 Telsem atlas files\n"
18753  "and the correlations file.\n"
18754  "The whole data is combined into the WSV *telsem_atlases*\n"),
18755  AUTHORS("Oliver Lemke"),
18756  OUT("telsem_atlases"),
18757  GOUT(),
18758  GOUT_TYPE(),
18759  GOUT_DESC(),
18760  IN(),
18761  GIN("directory", "filename_pattern"),
18762  GIN_TYPE("String", "String"),
18763  GIN_DEFAULT(NODEF, "ssmi_mean_emis_climato_@MM@_cov_interpol_M2"),
18764  GIN_DESC("Directory with TELSEM 2 SSMI atlas files.",
18765  "Filename pattern (@MM@ gets replaced by month number)")));
18766 
18767  md_data_raw.push_back(create_mdrecord(
18768  NAME("Tensor3AddScalar"),
18769  DESCRIPTION("Adds a scalar value to all elements of a tensor3.\n"
18770  "\n"
18771  "The result can either be stored in the same or another\n"
18772  "variable.\n"),
18773  AUTHORS("Patrick Eriksson"),
18774  OUT(),
18775  GOUT("out"),
18776  GOUT_TYPE("Tensor3"),
18777  GOUT_DESC("Output tensor."),
18778  IN(),
18779  GIN("in", "value"),
18780  GIN_TYPE("Tensor3", "Numeric"),
18782  GIN_DESC("Input tensor.", "The value to be added to the tensor.")));
18783 
18784  md_data_raw.push_back(create_mdrecord(
18785  NAME("Tensor3ExtractFromTensor4"),
18786  DESCRIPTION(
18787  "Extracts a Tensor3 from a Tensor4.\n"
18788  "\n"
18789  "Copies book, page, row or column with given Index from input Tensor4\n"
18790  "variable to output Tensor3.\n"
18791  "Higher order equivalent of *VectorExtractFromMatrix*.\n"),
18792  AUTHORS("Oliver Lemke"),
18793  OUT(),
18794  GOUT("out"),
18795  GOUT_TYPE("Tensor3"),
18796  GOUT_DESC("Extracted tensor."),
18797  IN(),
18798  GIN("in", "i", "direction"),
18799  GIN_TYPE("Tensor4", "Index", "String"),
18801  GIN_DESC("Input Tensor4.",
18802  "Index of book, page, row or column to extract.",
18803  "Direction. \"book\" or \"page\" or \"row\" or \"column\".")));
18804 
18805  md_data_raw.push_back(create_mdrecord(
18806  NAME("Tensor3Scale"),
18807  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18808  "\n"
18809  "The result can either be stored in the same or another\n"
18810  "variable.\n"),
18811  AUTHORS("Mattias Ekstrom"),
18812  OUT(),
18813  GOUT("out"),
18814  GOUT_TYPE("Tensor3"),
18815  GOUT_DESC("Output tensor."),
18816  IN(),
18817  GIN("in", "value"),
18818  GIN_TYPE("Tensor3", "Numeric"),
18820  GIN_DESC("Input tensor.",
18821  "The value to be multiplied with the tensor.")));
18822 
18823  md_data_raw.push_back(create_mdrecord(
18824  NAME("Tensor3SetConstant"),
18825  DESCRIPTION(
18826  "Creates a tensor and sets all elements to the specified value.\n"
18827  "\n"
18828  "The size is determined by *ncols*, *nrows* etc.\n"),
18829  AUTHORS("Claudia Emde"),
18830  OUT(),
18831  GOUT("out"),
18832  GOUT_TYPE("Tensor3"),
18833  GOUT_DESC("Variable to initialize."),
18834  IN("npages", "nrows", "ncols"),
18835  GIN("value"),
18836  GIN_TYPE("Numeric"),
18837  GIN_DEFAULT(NODEF),
18838  GIN_DESC("Tensor value.")));
18839 
18840  md_data_raw.push_back(create_mdrecord(
18841  NAME("Tensor4AddScalar"),
18842  DESCRIPTION("Adds a scalar value to all elements of a tensor4.\n"
18843  "\n"
18844  "The result can either be stored in the same or another\n"
18845  "variable.\n"),
18846  AUTHORS("Patrick Eriksson"),
18847  OUT(),
18848  GOUT("out"),
18849  GOUT_TYPE("Tensor4"),
18850  GOUT_DESC("Output tensor."),
18851  IN(),
18852  GIN("in", "value"),
18853  GIN_TYPE("Tensor4", "Numeric"),
18855  GIN_DESC("Input tensor.", "The value to be added to the tensor.")));
18856  /*
18857  md_data_raw.push_back
18858  ( create_mdrecord
18859  ( NAME( "Tensor4Clip" ),
18860  DESCRIPTION
18861  (
18862  "Clipping of e.g. *vmr_field* and *particle_bulkprop_field*.\n"
18863  "\n"
18864  "The method allows you to apply hard limits the values of a\n"
18865  "Tensor4. The quantati (book dimension) is specified by *iq*.\n"
18866  "*All values of the quantity below *limit_low*, are simply\n"
18867  "set to *limit_low*. And the same is performed with respect to\n"
18868  "*limit_high*. That is, the data in x for the quantity are\n"
18869  "forced to be inside the range [limit_low,limit_high].\n"
18870  "\n"
18871  "Setting iq=-1, is a shortcut for applying the limits on all\n"
18872  "quantities.\n"
18873  ),
18874  AUTHORS( "Patrick Eriksson" ),
18875  OUT(),
18876  GOUT( "x" ),
18877  GOUT_TYPE( "Tensor4" ),
18878  GOUT_DESC( "A Tensor4 holding data, with quantity as book-dimension,"
18879  "such as *vmr_field*." ),
18880  IN( ),
18881  GIN( "x", "iq", "limit_low", "limit_high" ),
18882  GIN_TYPE( "Tensor4", "Index", "Numeric", "Numeric" ),
18883  GIN_DEFAULT( NODEF, NODEF, "-Inf", "Inf" ),
18884  GIN_DESC( "See GOUT for a defintion.",
18885  "Quantity index (zero-based)",
18886  "Lower limit for clipping.",
18887  "Upper limit for clipping." )
18888  ));
18889  */
18890 
18891  md_data_raw.push_back(create_mdrecord(
18892  NAME("Tensor4Scale"),
18893  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18894  "\n"
18895  "The result can either be stored in the same or another\n"
18896  "variable.\n"),
18897  AUTHORS("Mattias Ekstrom"),
18898  OUT(),
18899  GOUT("out"),
18900  GOUT_TYPE("Tensor4"),
18901  GOUT_DESC("Output tensor."),
18902  IN(),
18903  GIN("in", "value"),
18904  GIN_TYPE("Tensor4", "Numeric"),
18906  GIN_DESC("Input tensor.",
18907  "The value to be multiplied with the tensor.")));
18908 
18909  md_data_raw.push_back(create_mdrecord(
18910  NAME("Tensor4SetConstant"),
18911  DESCRIPTION(
18912  "Creates a tensor and sets all elements to the specified value.\n"
18913  "\n"
18914  "The size is determined by *ncols*, *nrows* etc.\n"),
18915  AUTHORS("Claudia Emde"),
18916  OUT(),
18917  GOUT("out"),
18918  GOUT_TYPE("Tensor4"),
18919  GOUT_DESC("Variable to initialize."),
18920  IN("nbooks", "npages", "nrows", "ncols"),
18921  GIN("value"),
18922  GIN_TYPE("Numeric"),
18923  GIN_DEFAULT(NODEF),
18924  GIN_DESC("Tensor value.")));
18925 
18926  md_data_raw.push_back(create_mdrecord(
18927  NAME("Tensor5Scale"),
18928  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18929  "\n"
18930  "The result can either be stored in the same or another\n"
18931  "variable.\n"),
18932  AUTHORS("Mattias Ekstrom"),
18933  OUT(),
18934  GOUT("out"),
18935  GOUT_TYPE("Tensor5"),
18936  GOUT_DESC("Output tensor."),
18937  IN(),
18938  GIN("in", "value"),
18939  GIN_TYPE("Tensor5", "Numeric"),
18941  GIN_DESC("Input tensor.",
18942  "The value to be multiplied with the tensor.")));
18943 
18944  md_data_raw.push_back(create_mdrecord(
18945  NAME("Tensor5SetConstant"),
18946  DESCRIPTION(
18947  "Creates a tensor and sets all elements to the specified value.\n"
18948  "\n"
18949  "The size is determined by *ncols*, *nrows* etc.\n"),
18950  AUTHORS("Claudia Emde"),
18951  OUT(),
18952  GOUT("out"),
18953  GOUT_TYPE("Tensor5"),
18954  GOUT_DESC("Variable to initialize."),
18955  IN("nshelves", "nbooks", "npages", "nrows", "ncols"),
18956  GIN("value"),
18957  GIN_TYPE("Numeric"),
18958  GIN_DEFAULT(NODEF),
18959  GIN_DESC("Tensor value.")));
18960 
18961  md_data_raw.push_back(create_mdrecord(
18962  NAME("Tensor6Scale"),
18963  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18964  "\n"
18965  "The result can either be stored in the same or another\n"
18966  "variable.\n"),
18967  AUTHORS("Mattias Ekstrom"),
18968  OUT(),
18969  GOUT("out"),
18970  GOUT_TYPE("Tensor6"),
18971  GOUT_DESC("Output tensor."),
18972  IN(),
18973  GIN("in", "value"),
18974  GIN_TYPE("Tensor6", "Numeric"),
18976  GIN_DESC("Input tensor.",
18977  "The value to be multiplied with the tensor.")));
18978 
18979  md_data_raw.push_back(create_mdrecord(
18980  NAME("Tensor6SetConstant"),
18981  DESCRIPTION(
18982  "Creates a tensor and sets all elements to the specified value.\n"
18983  "\n"
18984  "The size is determined by *ncols*, *nrows* etc.\n"),
18985  AUTHORS("Claudia Emde"),
18986  OUT(),
18987  GOUT("out"),
18988  GOUT_TYPE("Tensor6"),
18989  GOUT_DESC("Variable to initialize."),
18990  IN("nvitrines", "nshelves", "nbooks", "npages", "nrows", "ncols"),
18991  GIN("value"),
18992  GIN_TYPE("Numeric"),
18993  GIN_DEFAULT(NODEF),
18994  GIN_DESC("Tensor value.")));
18995 
18996  md_data_raw.push_back(create_mdrecord(
18997  NAME("Tensor7Scale"),
18998  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18999  "\n"
19000  "The result can either be stored in the same or another\n"
19001  "variable.\n"),
19002  AUTHORS("Mattias Ekstrom"),
19003  OUT(),
19004  GOUT("out"),
19005  GOUT_TYPE("Tensor7"),
19006  GOUT_DESC("Output tensor."),
19007  IN(),
19008  GIN("in", "value"),
19009  GIN_TYPE("Tensor7", "Numeric"),
19011  GIN_DESC("Input tensor.",
19012  "The value to be multiplied with the tensor.")));
19013 
19014  md_data_raw.push_back(create_mdrecord(
19015  NAME("Tensor7SetConstant"),
19016  DESCRIPTION(
19017  "Creates a tensor and sets all elements to the specified value.\n"
19018  "\n"
19019  "The size is determined by *ncols*, *nrows* etc.\n"),
19020  AUTHORS("Claudia Emde"),
19021  OUT(),
19022  GOUT("out"),
19023  GOUT_TYPE("Tensor7"),
19024  GOUT_DESC("Variable to initialize."),
19025  IN("nlibraries",
19026  "nvitrines",
19027  "nshelves",
19028  "nbooks",
19029  "npages",
19030  "nrows",
19031  "ncols"),
19032  GIN("value"),
19033  GIN_TYPE("Numeric"),
19034  GIN_DEFAULT(NODEF),
19035  GIN_DESC("Tensor value.")));
19036 
19037  md_data_raw.push_back(create_mdrecord(
19038  NAME("TestArrayOfAgenda"),
19039  DESCRIPTION(
19040  "A method that is used for the TestArrayOfAgenda test case.\n"),
19041  AUTHORS("Oliver Lemke"),
19042  OUT(),
19043  GOUT(),
19044  GOUT_TYPE(),
19045  GOUT_DESC(),
19046  IN("test_agenda_array"),
19047  GIN("index"),
19048  GIN_TYPE("Index"),
19049  GIN_DEFAULT("0"),
19050  GIN_DESC("Index of agenda in array to execute.")));
19051 
19052  md_data_raw.push_back(create_mdrecord(
19053  NAME("TessemNNReadAscii"),
19054  DESCRIPTION(
19055  "Reads the initialization data for the TESSEM NeuralNet from an ASCII file.\n"),
19056  AUTHORS("Oliver Lemke"),
19057  OUT(),
19058  GOUT("tessem_nn"),
19059  GOUT_TYPE("TessemNN"),
19060  GOUT_DESC("Tessem NeuralNet configuration."),
19061  IN(),
19062  GIN("filename"),
19063  GIN_TYPE("String"),
19064  GIN_DEFAULT(NODEF),
19065  GIN_DESC(
19066  "NeuralNet parameters file as provided in the TESSEM 2 distribution.")));
19067 
19068  md_data_raw.push_back(create_mdrecord(
19069  NAME("TestTessem"),
19070  DESCRIPTION(
19071  "Example method for TESSEM2.\n"
19072  "\n"
19073  "When using the default neural network parameter files\n"
19074  "from the Tessem 2 distribution, the input Vector should contain\n"
19075  "5 elements:\n"
19076  " - Frequency (10-700) in GHz.\n"
19077  " - Theta (0-90) Incidence angle in degrees.\n"
19078  " - Windspeed (0-25) at 10m (m/s)\n"
19079  " Higher wind speed can be used, but without garantee.\n"
19080  " - Surface skin temperature (270-310) in K.\n"
19081  " - Salinity (0-0.04) in kg/kg\n"),
19082  AUTHORS("Oliver Lemke"),
19083  OUT(),
19084  GOUT("outvalues"),
19085  GOUT_TYPE("Vector"),
19086  GOUT_DESC("Tessem output emissivity."),
19087  IN(),
19088  GIN("net", "invalues"),
19089  GIN_TYPE("TessemNN", "Vector"),
19091  GIN_DESC("Tessem NeuralNet parameters.", "Input data.")));
19092 
19093  md_data_raw.push_back(create_mdrecord(
19094  NAME("Test"),
19095  DESCRIPTION(
19096  "A dummy method that can be used for test purposes.\n"
19097  "\n"
19098  "This method can be used by ARTS developers to quickly test stuff.\n"
19099  "The implementation is in file m_general.cc. This just saves you the\n"
19100  "trouble of adding a dummy method everytime you want to try\n"
19101  "something out quickly.\n"),
19102  AUTHORS("Patrick Eriksson"),
19103  OUT(),
19104  GOUT(),
19105  GOUT_TYPE(),
19106  GOUT_DESC(),
19107  IN(),
19108  GIN(),
19109  GIN_TYPE(),
19110  GIN_DEFAULT(),
19111  GIN_DESC()));
19112 
19113  md_data_raw.push_back(create_mdrecord(
19114  NAME("time_gridOffset"),
19115  DESCRIPTION("Offsets a time grid by some seconds.\n"),
19116  AUTHORS("Richard Larsson"),
19117  OUT("time_grid"),
19118  GOUT(),
19119  GOUT_TYPE(),
19120  GOUT_DESC(),
19121  IN("time_grid"),
19122  GIN("dt"),
19123  GIN_TYPE("Numeric"),
19124  GIN_DEFAULT(NODEF),
19125  GIN_DESC("Time in seconds to add")));
19126 
19127  md_data_raw.push_back(
19128  create_mdrecord(NAME("timerStart"),
19129  DESCRIPTION("Initializes the CPU timer."
19130  "\n"
19131  "Use *timerStop* to stop the timer.\n"
19132  "\n"
19133  "Usage example:\n"
19134  " timerStart\n"
19135  " ReadXML(f_grid,\"frequencies.xml\")\n"
19136  " timerStop\n"
19137  " Print(timer)\n"),
19138  AUTHORS("Oliver Lemke"),
19139  OUT("timer"),
19140  GOUT(),
19141  GOUT_TYPE(),
19142  GOUT_DESC(),
19143  IN(),
19144  GIN(),
19145  GIN_TYPE(),
19146  GIN_DEFAULT(),
19147  GIN_DESC()));
19148 
19149  md_data_raw.push_back(
19150  create_mdrecord(NAME("timerStop"),
19151  DESCRIPTION("Stops the CPU timer."
19152  "\n"
19153  "See *timerStart* for example usage.\n"),
19154  AUTHORS("Oliver Lemke"),
19155  OUT("timer"),
19156  GOUT(),
19157  GOUT_TYPE(),
19158  GOUT_DESC(),
19159  IN("timer"),
19160  GIN(),
19161  GIN_TYPE(),
19162  GIN_DEFAULT(),
19163  GIN_DESC()));
19164 
19165  md_data_raw.push_back(create_mdrecord(
19166  NAME("time_stampsSort"),
19167  DESCRIPTION("Sort *in* by *time_stamps* into *out*.\n"),
19168  AUTHORS("Richard Larsson"),
19169  OUT(),
19170  GOUT("out"),
19171  GOUT_TYPE("ArrayOfTime,ArrayOfVector"),
19172  GOUT_DESC("Array sorted by time"),
19173  IN("time_stamps"),
19174  GIN("in"),
19175  GIN_TYPE("ArrayOfTime,ArrayOfVector"),
19176  GIN_DEFAULT(NODEF),
19177  GIN_DESC("Array to sort of same size as *time_stamps*")));
19178 
19179  md_data_raw.push_back(create_mdrecord(
19180  NAME("TMatrixTest"),
19181  DESCRIPTION(
19182  "T-Matrix validation test.\n"
19183  "\n"
19184  "Executes the standard test included with the T-Matrix Fortran code.\n"
19185  "Should give the same as running the tmatrix_lp executable in\n"
19186  "3rdparty/tmatrix/.\n"),
19187  AUTHORS("Oliver Lemke"),
19188  OUT(),
19189  GOUT(),
19190  GOUT_TYPE(),
19191  GOUT_DESC(),
19192  IN(),
19193  GIN(),
19194  GIN_TYPE(),
19195  GIN_DEFAULT(),
19196  GIN_DESC()));
19197 
19198  md_data_raw.push_back(create_mdrecord(
19199  NAME("Touch"),
19200  DESCRIPTION(
19201  "As *Ignore* but for agenda output.\n"
19202  "\n"
19203  "This method is handy for use in agendas in order to suppress\n"
19204  "warnings about not-produced output workspace variables.\n"
19205  "\n"
19206  "What it does, in case the variable is initialized already, is:\n"
19207  "Nothing!\n"
19208  "In case the variable is not yet initialized, it is set to NaN.\n"),
19209  AUTHORS("Oliver Lemke"),
19210  OUT(),
19211  GOUT("in"),
19212  GOUT_TYPE("Any"),
19213  GOUT_DESC("Variable to do nothing with."),
19214  IN(),
19215  GIN(),
19216  GIN_TYPE(),
19217  GIN_DEFAULT(),
19218  GIN_DESC(),
19219  SETMETHOD(false),
19220  AGENDAMETHOD(false),
19221  USES_TEMPLATES(true)));
19222 
19223  md_data_raw.push_back(create_mdrecord(
19224  NAME("transmittanceFromIy_aux"),
19225  DESCRIPTION(
19226  "Creates a vector of transmittance values.\n"
19227  "\n"
19228  "The transmittances are set based on optical depths in *iy_aux*. That is,\n"
19229  "one of the quantities in *iy_aux* must be \"Optical depth\".\n"
19230  "\n"
19231  "The created vector has a length matching *f_grid* and can e.g. be used\n"
19232  "as input to some of the FASTEM methods.\n"),
19233  AUTHORS("Patrick Eriksson"),
19234  OUT(),
19235  GOUT("transmittance"),
19236  GOUT_TYPE("Vector"),
19237  GOUT_DESC("Created vector of transmittance values."),
19238  IN("iy_aux_vars", "iy_aux"),
19239  GIN(),
19240  GIN_TYPE(),
19241  GIN_DEFAULT(),
19242  GIN_DESC()));
19243 
19244  md_data_raw.push_back(create_mdrecord(
19245  NAME("VectorAddScalar"),
19246  DESCRIPTION(
19247  "Adds a scalar to all elements of a vector.\n"
19248  "\n"
19249  "The result can either be stored in the same or another vector.\n"),
19250  AUTHORS("Patrick Eriksson"),
19251  OUT(),
19252  GOUT("out"),
19253  GOUT_TYPE("Vector"),
19254  GOUT_DESC("Output vector"),
19255  IN(),
19256  GIN("in", "value"),
19257  GIN_TYPE("Vector", "Numeric"),
19259  GIN_DESC("Input vector.", "The value to be added to the vector.")));
19260 
19261  md_data_raw.push_back(create_mdrecord(
19262  NAME("VectorAddVector"),
19263  DESCRIPTION(
19264  "Element-wise addition of two vectors.\n"
19265  "\n"
19266  "The method calculates c = a + b.\n"
19267  "\n"
19268  "The variable *b* is allowed to have length 1, for any length of\n"
19269  "*a*. This single value in *b* is then added to every element of *a*.\n"
19270  "\n"
19271  "The vectors *a* and *c* can be the same WSV, while *b* can not be\n"
19272  "the same WSV as any of the the other vector.\n"),
19273  AUTHORS("Patrick Eriksson"),
19274  OUT(),
19275  GOUT("c"),
19276  GOUT_TYPE("Vector"),
19277  GOUT_DESC("Output vector"),
19278  IN(),
19279  GIN("a", "b"),
19280  GIN_TYPE("Vector", "Vector"),
19282  GIN_DESC("Input vector.", "Vector to be added.")));
19283 
19284  md_data_raw.push_back(create_mdrecord(
19285  NAME("VectorCrop"),
19286  DESCRIPTION(
19287  "Keeps only values of a vector inside the specified range.\n"
19288  "\n"
19289  "All values outside the range [min_value,max-value] are removed.\n"
19290  "Note the default values, that basically should act as -+Inf.\n"
19291  "\n"
19292  "The result can either be stored in the same or another vector.\n"),
19293  AUTHORS("Patrick Eriksson"),
19294  OUT(),
19295  GOUT("out"),
19296  GOUT_TYPE("Vector"),
19297  GOUT_DESC("Cropped vector"),
19298  IN(),
19299  GIN("in", "min_value", "max_value"),
19300  GIN_TYPE("Vector", "Numeric", "Numeric"),
19301  GIN_DEFAULT(NODEF, "-99e99", "99e99"),
19302  GIN_DESC("Original vector",
19303  "Minimum value to keep",
19304  "Maximum value to keep")));
19305 
19306  md_data_raw.push_back(create_mdrecord(
19307  NAME("VectorExtractFromMatrix"),
19308  DESCRIPTION(
19309  "Extracts a Vector from a Matrix.\n"
19310  "\n"
19311  "Copies row or column with given Index from input Matrix variable\n"
19312  "to create output Vector.\n"),
19313  AUTHORS("Patrick Eriksson, Oliver Lemke, Stefan Buehler"),
19314  OUT(),
19315  GOUT("out"),
19316  GOUT_TYPE("Vector"),
19317  GOUT_DESC("Extracted vector."),
19318  IN(),
19319  GIN("in", "i", "direction"),
19320  GIN_TYPE("Matrix", "Index", "String"),
19322  GIN_DESC("Input matrix.",
19323  "Index of row or column.",
19324  "Direction. \"row\" or \"column\".")));
19325 
19326  md_data_raw.push_back(create_mdrecord(
19327  NAME("VectorFlip"),
19328  DESCRIPTION(
19329  "Flips a vector.\n"
19330  "\n"
19331  "The output is the input vector in reversed order. The result can\n"
19332  "either be stored in the same or another vector.\n"),
19333  AUTHORS("Patrick Eriksson"),
19334  OUT(),
19335  GOUT("out"),
19336  GOUT_TYPE("Vector"),
19337  GOUT_DESC("Output vector."),
19338  IN(),
19339  GIN("in"),
19340  GIN_TYPE("Vector"),
19341  GIN_DEFAULT(NODEF),
19342  GIN_DESC("Input vector.")));
19343 
19344  md_data_raw.push_back(create_mdrecord(
19345  NAME("VectorInsertGridPoints"),
19346  DESCRIPTION(
19347  "Insert some additional points into a grid.\n"
19348  "\n"
19349  "This method can for example be used to add line center frequencies to\n"
19350  "a regular frequency grid. If the original grid is [1,2,3], and the\n"
19351  "additional points are [2.2,2.4], the result will be [1,2,2.2,2.4,3].\n"
19352  "\n"
19353  "It is assumed that the original grid is sorted, otherwise a runtime\n"
19354  "error is thrown. The vector with the points to insert does not have to\n"
19355  "be sorted. If some of the input points are already in the grid, these\n"
19356  "points are not inserted again. New points outside the original grid are\n"
19357  "appended at the appropriate end. Input vector and output vector can be\n"
19358  "the same.\n"
19359  "\n"
19360  "Generic output:\n"
19361  " Vector : The new grid vector.\n"
19362  "\n"
19363  "Generic input:\n"
19364  " Vector : The original grid vector.\n"
19365  " Vector : The points to insert.\n"),
19366  AUTHORS("Stefan Buehler"),
19367  OUT(),
19368  GOUT("out"),
19369  GOUT_TYPE("Vector"),
19370  GOUT_DESC("The new grid vector"),
19371  IN(),
19372  GIN("in", "points"),
19373  GIN_TYPE("Vector", "Vector"),
19375  GIN_DESC("The original grid vector", "The points to insert")));
19376 
19377  md_data_raw.push_back(create_mdrecord(
19378  NAME("VectorLinSpace"),
19379  DESCRIPTION(
19380  "Initializes a vector with linear spacing.\n"
19381  "\n"
19382  "The first element equals always the start value, and the spacing\n"
19383  "equals always the step value, but the last value can deviate from\n"
19384  "the stop value. *step* can be both positive and negative.\n"
19385  "\n"
19386  "The created vector is [start, start+step, start+2*step, ...]\n "),
19387  AUTHORS("Patrick Eriksson"),
19388  OUT(),
19389  GOUT("out"),
19390  GOUT_TYPE("Vector"),
19391  GOUT_DESC("Output vector."),
19392  IN(),
19393  GIN("start", "stop", "step"),
19394  GIN_TYPE("Numeric", "Numeric", "Numeric"),
19396  GIN_DESC("Start value.",
19397  "Maximum/minimum value of the end value",
19398  "Spacing of the vector.")));
19399 
19400  md_data_raw.push_back(create_mdrecord(
19401  NAME("VectorLogSpace"),
19402  DESCRIPTION(
19403  "Initializes a vector with logarithmic spacing.\n"
19404  "\n"
19405  "The first element equals always the start value, and the spacing\n"
19406  "equals always the step value, but note that the last value can \n"
19407  "deviate from the stop value. The keyword step can be both positive\n"
19408  "and negative.\n"
19409  "\n"
19410  "Note, that although start has to be given in direct coordinates,\n"
19411  "step has to be given in log coordinates.\n"
19412  "\n"
19413  "Explicitly, the vector is:\n"
19414  " exp([ln(start), ln(start)+step, ln(start)+2*step, ...])\n"),
19415  AUTHORS("Stefan Buehler"),
19416  OUT(),
19417  GOUT("out"),
19418  GOUT_TYPE("Vector"),
19419  GOUT_DESC("Variable to initialize."),
19420  IN(),
19421  GIN("start", "stop", "step"),
19422  GIN_TYPE("Numeric", "Numeric", "Numeric"),
19424  GIN_DESC("The start value. (Direct coordinates!)",
19425  "The maximum value of the end value. (Direct coordinates!)",
19426  "The spacing of the vector. (Log coordinates!)")));
19427 
19428  md_data_raw.push_back(create_mdrecord(
19429  NAME("VectorMatrixMultiply"),
19430  DESCRIPTION(
19431  "Multiply a Vector with a Matrix and store the result in another\n"
19432  "Vector.\n"
19433  "\n"
19434  "This just computes the normal Matrix-Vector product, y=M*x. It is ok\n"
19435  "if input and output Vector are the same. This function is handy for\n"
19436  "multiplying the H Matrix to spectra.\n"),
19437  AUTHORS("Stefan Buehler"),
19438  OUT(),
19439  GOUT("out"),
19440  GOUT_TYPE("Vector"),
19441  GOUT_DESC("The result of the multiplication (dimension m)."),
19442  IN(),
19443  GIN("m", "v"),
19444  GIN_TYPE("Matrix", "Vector"),
19446  GIN_DESC("The Matrix to multiply (dimension mxn).",
19447  "The original Vector (dimension n).")));
19448 
19449  md_data_raw.push_back(create_mdrecord(
19450  NAME("VectorNLinSpace"),
19451  DESCRIPTION(
19452  "Creates a vector with length *nelem*, equally spaced between the\n"
19453  "given end values.\n"
19454  "\n"
19455  "The length (*nelem*) must be larger than 1.\n"),
19456  AUTHORS("Patrick Eriksson"),
19457  OUT(),
19458  GOUT("out"),
19459  GOUT_TYPE("Vector"),
19460  GOUT_DESC("Variable to initialize."),
19461  IN("nelem"),
19462  GIN("start", "stop"),
19463  GIN_TYPE("Numeric", "Numeric"),
19465  GIN_DESC("Start value.", "End value.")));
19466 
19467  md_data_raw.push_back(create_mdrecord(
19468  NAME("VectorNLogSpace"),
19469  DESCRIPTION(
19470  "Creates a vector with length *nelem*, equally logarithmically\n"
19471  "spaced between the given end values.\n"
19472  "\n"
19473  "The length (*nelem*) must be larger than 1.\n"),
19474  AUTHORS("Patrick Eriksson"),
19475  OUT(),
19476  GOUT("out"),
19477  GOUT_TYPE("Vector"),
19478  GOUT_DESC("Variable to initialize."),
19479  IN("nelem"),
19480  GIN("start", "stop"),
19481  GIN_TYPE("Numeric", "Numeric"),
19483  GIN_DESC("Start value.", "End value.")));
19484 
19485  md_data_raw.push_back(create_mdrecord(
19486  NAME("VectorReshapeMatrix"),
19487  DESCRIPTION(
19488  "Converts a Matrix to a Vector.\n"
19489  "\n"
19490  "The matrix is reshaped into a vector. That is, all elements of the matrix\n"
19491  "are kept. The elements can be extracted both in column (default) and row\n"
19492  "order. The ouput vector has the same length for both options.\n"),
19493  AUTHORS("Patrick Eriksson"),
19494  OUT(),
19495  GOUT("out"),
19496  GOUT_TYPE("Vector"),
19497  GOUT_DESC("Created vector."),
19498  IN(),
19499  GIN("in", "direction"),
19500  GIN_TYPE("Matrix", "String"),
19501  GIN_DEFAULT(NODEF, "column"),
19502  GIN_DESC("Input matrix.", "Direction. \"row\" or \"column\".")));
19503 
19504  md_data_raw.push_back(create_mdrecord(
19505  NAME("VectorScale"),
19506  DESCRIPTION(
19507  "Scales all elements of a vector with the same value.\n"
19508  "\n"
19509  "The result can either be stored in the same or another vector.\n"),
19510  AUTHORS("Patrick Eriksson"),
19511  OUT(),
19512  GOUT("out"),
19513  GOUT_TYPE("Vector"),
19514  GOUT_DESC("Output vector."),
19515  IN(),
19516  GIN("in", "value"),
19517  GIN_TYPE("Vector", "Numeric"),
19519  GIN_DESC("Input vector.", "Scaling value.")));
19520 
19521  md_data_raw.push_back(create_mdrecord(
19522  NAME("VectorSetConstant"),
19523  DESCRIPTION(
19524  "Creates a vector and sets all elements to the specified value.\n"
19525  "\n"
19526  "The vector length is determined by *nelem*.\n"),
19527  AUTHORS("Patrick Eriksson"),
19528  OUT(),
19529  GOUT("out"),
19530  GOUT_TYPE("Vector"),
19531  GOUT_DESC("Variable to initialize."),
19532  IN("nelem"),
19533  GIN("value"),
19534  GIN_TYPE("Numeric"),
19535  GIN_DEFAULT(NODEF),
19536  GIN_DESC("Vector value.")));
19537 
19538  md_data_raw.push_back(create_mdrecord(
19539  NAME("VectorSet"),
19540  DESCRIPTION(
19541  "Create a vector from the given list of numbers.\n"
19542  "\n"
19543  " VectorSet(p_grid, [1000, 100, 10] )\n"
19544  " Will create a p_grid vector with these three elements.\n"),
19545  AUTHORS("Stefan Buehler"),
19546  OUT(),
19547  GOUT("out"),
19548  GOUT_TYPE("Vector"),
19549  GOUT_DESC("Variable to initialize."),
19550  IN(),
19551  GIN("value"),
19552  GIN_TYPE("Vector"),
19553  GIN_DEFAULT(NODEF),
19554  GIN_DESC("The vector elements."),
19555  SETMETHOD(true)));
19556 
19557  md_data_raw.push_back(create_mdrecord(
19558  NAME("VectorSubtractVector"),
19559  DESCRIPTION(
19560  "Element-wise subtraction of two vectors.\n"
19561  "\n"
19562  "The method calculates c = a - b.\n"
19563  "\n"
19564  "The variable *b* is allowed to have length 1, for any length of\n"
19565  "*a*. This single value in *b* is then added to every element of *a*.\n"
19566  "\n"
19567  "The vectors *a* and *c* can be the same WSV, while *b* can not be\n"
19568  "the same WSV as any of the the other vector.\n"),
19569  AUTHORS("Patrick Eriksson"),
19570  OUT(),
19571  GOUT("c"),
19572  GOUT_TYPE("Vector"),
19573  GOUT_DESC("Output vector"),
19574  IN(),
19575  GIN("a", "b"),
19576  GIN_TYPE("Vector", "Vector"),
19578  GIN_DESC("Input vector.", "Vector to be subtracted.")));
19579 
19580  md_data_raw.push_back(create_mdrecord(
19581  NAME("VectorVectorMultiply"),
19582  DESCRIPTION(
19583  "Multiply a Vector with another Vector and store result in a third one.\n"
19584  "\n"
19585  "This is an element-wise multiplication. It is ok if output Vector is\n"
19586  "the same as any of the input Vectors.\n"),
19587  AUTHORS("Jana Mendrok"),
19588  OUT(),
19589  GOUT("out"),
19590  GOUT_TYPE("Vector"),
19591  GOUT_DESC("The result of the multiplication (dimension m)."),
19592  IN(),
19593  GIN("v1", "v2"),
19594  GIN_TYPE("Vector", "Vector"),
19596  GIN_DESC("Original Vector #1 (dimension m).",
19597  "Original Vector #2 (dimension m).")));
19598 
19599  md_data_raw.push_back(create_mdrecord(
19600  NAME("VectorZtanToZaRefr1D"),
19601  DESCRIPTION(
19602  "Converts a set of true tangent altitudes to zenith angles.\n"
19603  "\n"
19604  "The tangent altitudes are given to the function as a vector, which\n"
19605  "are converted to a generic vector of zenith angles. The position of\n"
19606  "the sensor is given by the WSV *sensor_pos*. The function works\n"
19607  "only for 1D. The zenith angles are always set to be positive.\n"),
19608  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
19609  OUT(),
19610  GOUT("v_za"),
19611  GOUT_TYPE("Vector"),
19612  GOUT_DESC("Vector with zenith angles."),
19613  IN("refr_index_air_agenda",
19614  "sensor_pos",
19615  "p_grid",
19616  "t_field",
19617  "z_field",
19618  "vmr_field",
19619  "refellipsoid",
19620  "atmosphere_dim",
19621  "f_grid"),
19622  GIN("v_ztan"),
19623  GIN_TYPE("Vector"),
19624  GIN_DEFAULT(NODEF),
19625  GIN_DESC("Vector with tangent altitudes.")));
19626 
19627  md_data_raw.push_back(create_mdrecord(
19628  NAME("VectorZtanToZa1D"),
19629  DESCRIPTION(
19630  "Converts a set of geometrical tangent altitudes to zenith angles.\n"
19631  "\n"
19632  "The tangent altitudes are given to the function as a vector, which\n"
19633  "are converted to a generic vector of zenith angles. The position of\n"
19634  "the sensor is given by the WSV *sensor_pos*. The function works\n"
19635  "only for 1D. The zenith angles are always set to be positive.\n"),
19636  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
19637  OUT(),
19638  GOUT("v_za"),
19639  GOUT_TYPE("Vector"),
19640  GOUT_DESC("Vector with zenith angles."),
19641  IN("sensor_pos", "refellipsoid", "atmosphere_dim"),
19642  GIN("v_ztan"),
19643  GIN_TYPE("Vector"),
19644  GIN_DEFAULT(NODEF),
19645  GIN_DESC("Vector with tangent altitudes.")));
19646 
19647  md_data_raw.push_back(create_mdrecord(
19648  NAME("verbosityInit"),
19649  DESCRIPTION(
19650  "Initializes the verbosity levels.\n"
19651  "\n"
19652  "Sets verbosity to defaults or the levels specified by -r on the command line.\n"),
19653  AUTHORS("Oliver Lemke"),
19654  OUT("verbosity"),
19655  GOUT(),
19656  GOUT_TYPE(),
19657  GOUT_DESC(),
19658  IN("verbosity"),
19659  GIN(),
19660  GIN_TYPE(),
19661  GIN_DEFAULT(),
19662  GIN_DESC()));
19663 
19664  md_data_raw.push_back(create_mdrecord(
19665  NAME("verbositySet"),
19666  DESCRIPTION(
19667  "Sets the verbosity levels.\n"
19668  "\n"
19669  "Sets the reporting level for agenda calls, screen and file.\n"
19670  "All reporting levels can reach from 0 (only error messages)\n"
19671  "to 3 (everything). The agenda setting applies in addition\n"
19672  "to both screen and file output.\n"),
19673  AUTHORS("Oliver Lemke"),
19674  OUT("verbosity"),
19675  GOUT(),
19676  GOUT_TYPE(),
19677  GOUT_DESC(),
19678  IN("verbosity"),
19679  GIN("agenda", "screen", "file"),
19680  GIN_TYPE("Index", "Index", "Index"),
19682  GIN_DESC("Agenda verbosity level",
19683  "Screen verbosity level",
19684  "Report file verbosity level")));
19685 
19686  md_data_raw.push_back(
19687  create_mdrecord(NAME("verbositySetAgenda"),
19688  DESCRIPTION("Sets the verbosity level for agenda output.\n"
19689  "\n"
19690  "See *verbositySet*\n"),
19691  AUTHORS("Oliver Lemke"),
19692  OUT("verbosity"),
19693  GOUT(),
19694  GOUT_TYPE(),
19695  GOUT_DESC(),
19696  IN("verbosity"),
19697  GIN("level"),
19698  GIN_TYPE("Index"),
19699  GIN_DEFAULT(NODEF),
19700  GIN_DESC("Agenda verbosity level")));
19701 
19702  md_data_raw.push_back(
19703  create_mdrecord(NAME("verbositySetFile"),
19704  DESCRIPTION("Sets the verbosity level for report file output.\n"
19705  "\n"
19706  "See *verbositySet*\n"),
19707  AUTHORS("Oliver Lemke"),
19708  OUT("verbosity"),
19709  GOUT(),
19710  GOUT_TYPE(),
19711  GOUT_DESC(),
19712  IN("verbosity"),
19713  GIN("level"),
19714  GIN_TYPE("Index"),
19715  GIN_DEFAULT(NODEF),
19716  GIN_DESC("Report file verbosity level")));
19717 
19718  md_data_raw.push_back(
19719  create_mdrecord(NAME("verbositySetScreen"),
19720  DESCRIPTION("Sets the verbosity level for screen output.\n"
19721  "\n"
19722  "See *verbositySet*\n"),
19723  AUTHORS("Oliver Lemke"),
19724  OUT("verbosity"),
19725  GOUT(),
19726  GOUT_TYPE(),
19727  GOUT_DESC(),
19728  IN("verbosity"),
19729  GIN("level"),
19730  GIN_TYPE("Index"),
19731  GIN_DEFAULT(NODEF),
19732  GIN_DESC("Screen verbosity level")));
19733 
19734  md_data_raw.push_back(create_mdrecord(
19735  NAME("vmr_fieldClip"),
19736  DESCRIPTION(
19737  "Clipping of *vmr_field*.\n"
19738  "\n"
19739  "The method allows you to apply hard limits the values of *vmr_field*.\n"
19740  "All values, of the species selected, below *limit_low*, are simply\n"
19741  "set to *limit_low*. And the same is performed with respect to\n"
19742  "*limit_high*. That is, the data in x for the retrieval quantity are\n"
19743  "forced to be inside the range [limit_low,limit_high].\n"
19744  "\n"
19745  "Setting species=\"ALL\", is a shortcut for applying the limits on all\n"
19746  "species.\n"),
19747  AUTHORS("Patrick Eriksson"),
19748  OUT("vmr_field"),
19749  GOUT(),
19750  GOUT_TYPE(),
19751  GOUT_DESC(),
19752  IN("vmr_field", "abs_species"),
19753  GIN("species", "limit_low", "limit_high"),
19754  GIN_TYPE("String", "Numeric", "Numeric"),
19755  GIN_DEFAULT(NODEF, "-Inf", "Inf"),
19756  GIN_DESC("Name of species to consider, or \"ALL\".",
19757  "Lower limit for clipping.",
19758  "Upper limit for clipping.")));
19759 
19760  md_data_raw.push_back(create_mdrecord(
19761  NAME("vmr_fieldPerturb"),
19762  DESCRIPTION("Adds a perturbation to *vmr_field*.\n"
19763  "\n"
19764  "Works as *AtmFieldPerturb* but acts on *vmr_field*.\n"),
19765  AUTHORS("Patrick Eriksson"),
19766  OUT("vmr_field"),
19767  GOUT(),
19768  GOUT_TYPE(),
19769  GOUT_DESC(),
19770  IN("vmr_field",
19771  "atmosphere_dim",
19772  "p_grid",
19773  "lat_grid",
19774  "lon_grid",
19775  "abs_species"),
19776  GIN("species",
19777  "p_ret_grid",
19778  "lat_ret_grid",
19779  "lon_ret_grid",
19780  "pert_index",
19781  "pert_size",
19782  "pert_mode"),
19783  GIN_TYPE(
19784  "String", "Vector", "Vector", "Vector", "Index", "Numeric", "String"),
19785  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
19786  GIN_DESC("Name of species to perturb.",
19787  "Pressure retrieval grid.",
19788  "Latitude retrieval grid.",
19789  "Longitude retrieval grid.",
19790  "Index of position where the perturbation shall be performed.",
19791  "Size of perturbation.",
19792  "Type of perturbation, "
19793  "ansolute"
19794  " or "
19795  "relative"
19796  ".")));
19797 
19798  md_data_raw.push_back(create_mdrecord(
19799  NAME("vmr_fieldPerturbAtmGrids"),
19800  DESCRIPTION(
19801  "Adds a perturbation to *vmr_field*.\n"
19802  "\n"
19803  "Works as *AtmFieldPerturbAtmGrids* but acts on *vmr_field*.\n"),
19804  AUTHORS("Patrick Eriksson"),
19805  OUT("vmr_field"),
19806  GOUT(),
19807  GOUT_TYPE(),
19808  GOUT_DESC(),
19809  IN("vmr_field",
19810  "atmosphere_dim",
19811  "p_grid",
19812  "lat_grid",
19813  "lon_grid",
19814  "abs_species"),
19815  GIN("species", "pert_index", "pert_size", "pert_mode"),
19816  GIN_TYPE("String", "Index", "Numeric", "String"),
19817  GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
19818  GIN_DESC("Name of species to perturb.",
19819  "Index of position where the perturbation shall be performed.",
19820  "Size of perturbation.",
19821  "Type of perturbation, "
19822  "ansolute"
19823  " or "
19824  "relative"
19825  ".")));
19826 
19827  md_data_raw.push_back(create_mdrecord(
19828  NAME("vmr_fieldSetAllConstant"),
19829  DESCRIPTION(
19830  "Sets the VMR of all species to a select constant value.\n"
19831  "\n"
19832  "The *vmr_field* WSM must have a correct size before calling this method.\n"
19833  "The length of vmr_values and of abs_species must match.\n"),
19834  AUTHORS("Richard Larsson"),
19835  OUT("vmr_field"),
19836  GOUT(),
19837  GOUT_TYPE(),
19838  GOUT_DESC(),
19839  IN("vmr_field", "abs_species"),
19840  GIN("vmr_values"),
19841  GIN_TYPE("Vector"),
19842  GIN_DEFAULT(NODEF),
19843  GIN_DESC("VMR value to apply for each abs_species.")));
19844 
19845  md_data_raw.push_back(create_mdrecord(
19846  NAME("water_p_eq_fieldMK05"),
19847  DESCRIPTION(
19848  "Calculates *water_p_eq_field* according to Murphy and Koop, 2005.\n"
19849  "\n"
19850  "The saturation pressure is set to the one with respect to water at\n"
19851  "temperatures >= 0C, and to the one with respect to ice for <0C.\n"
19852  "\n"
19853  "The saturation pressure with respect to liquid and ice water is\n"
19854  "calculated according to Eq. 10 and 7, respectively, of:\n"
19855  "Murphy, D. M., & Koop, T. (2005). Review of the vapour pressures of\n"
19856  "ice and supercooled water for atmospheric applications. Quarterly\n"
19857  "Journal of the Royal Meteorological Society, 131(608), 1539-1565.\n"),
19858  AUTHORS("Patrick Eriksson"),
19859  OUT("water_p_eq_field"),
19860  GOUT(),
19861  GOUT_TYPE(),
19862  GOUT_DESC(),
19863  IN("t_field"),
19864  GIN(),
19865  GIN_TYPE(),
19866  GIN_DEFAULT(),
19867  GIN_DESC()));
19868 
19869  md_data_raw.push_back(create_mdrecord(
19870  NAME("vmr_fieldSetConstant"),
19871  DESCRIPTION(
19872  "Sets the VMR of a species to a constant value.\n"
19873  "\n"
19874  "The *vmr_field* WSM must have a correct size before calling this method.\n"),
19875  AUTHORS("Patrick Eriksson"),
19876  OUT("vmr_field"),
19877  GOUT(),
19878  GOUT_TYPE(),
19879  GOUT_DESC(),
19880  IN("vmr_field", "abs_species"),
19881  GIN("species", "vmr_value"),
19882  GIN_TYPE("String", "Numeric"),
19884  GIN_DESC("Species to set.",
19885  "VMR value to apply for the selected species.")));
19886 
19887  md_data_raw.push_back(create_mdrecord(
19888  NAME("Wigner6Init"),
19889  DESCRIPTION("Initialize the wigner 3 and 6 tables\n"
19890  "\n"
19891  "The default values take about 1 Gb memory.\n"),
19892  AUTHORS("Richard Larsson"),
19893  OUT("wigner_initialized"),
19894  GOUT(),
19895  GOUT_TYPE(),
19896  GOUT_DESC(),
19897  IN(),
19898  GIN("fast_wigner_stored_symbols", "largest_wigner_symbol_parameter"),
19899  GIN_TYPE("Index", "Index"),
19900  GIN_DEFAULT("20000000", "250"),
19901  GIN_DESC(
19902  "Number of stored symbols possible before replacements",
19903  "Largest symbol used for initializing factorials (e.g., largest J or L)")));
19904 
19905  md_data_raw.push_back(create_mdrecord(
19906  NAME("Wigner3Init"),
19907  DESCRIPTION("Initialize the wigner 3 tables\n"
19908  "\n"
19909  "The default values take about 400 Mb memory.\n"),
19910  AUTHORS("Richard Larsson"),
19911  OUT("wigner_initialized"),
19912  GOUT(),
19913  GOUT_TYPE(),
19914  GOUT_DESC(),
19915  IN(),
19916  GIN("fast_wigner_stored_symbols", "largest_wigner_symbol_parameter"),
19917  GIN_TYPE("Index", "Index"),
19918  GIN_DEFAULT("20000000", "250"),
19919  GIN_DESC(
19920  "Number of stored symbols possible before replacements",
19921  "Largest symbol used for initializing factorials (e.g., largest J or L)")));
19922 
19923  md_data_raw.push_back(
19924  create_mdrecord(NAME("Wigner6Unload"),
19925  DESCRIPTION("Unloads the wigner 3 and 6 tables\n"),
19926  AUTHORS("Richard Larsson"),
19927  OUT("wigner_initialized"),
19928  GOUT(),
19929  GOUT_TYPE(),
19930  GOUT_DESC(),
19931  IN("wigner_initialized"),
19932  GIN(),
19933  GIN_TYPE(),
19934  GIN_DEFAULT(),
19935  GIN_DESC()));
19936 
19937  md_data_raw.push_back(create_mdrecord(NAME("Wigner3Unload"),
19938  DESCRIPTION("Unloads the wigner 3 tables\n"),
19939  AUTHORS("Richard Larsson"),
19940  OUT("wigner_initialized"),
19941  GOUT(),
19942  GOUT_TYPE(),
19943  GOUT_DESC(),
19944  IN("wigner_initialized"),
19945  GIN(),
19946  GIN_TYPE(),
19947  GIN_DEFAULT(),
19948  GIN_DESC()));
19949 
19950  md_data_raw.push_back(create_mdrecord(
19951  NAME("WignerFastInfoPrint"),
19952  DESCRIPTION(
19953  "Prints the fast wigner table information if compiled with this option\n"),
19954  AUTHORS("Richard Larsson"),
19955  OUT(),
19956  GOUT(),
19957  GOUT_TYPE(),
19958  GOUT_DESC(),
19959  IN("wigner_initialized"),
19960  GIN(),
19961  GIN_TYPE(),
19962  GIN_DEFAULT(),
19963  GIN_DESC()));
19964 
19965  md_data_raw.push_back(create_mdrecord(
19966  NAME("WindFieldsCalc"),
19967  DESCRIPTION(
19968  "Interpolation of raw wind fields to calculation grids.\n"
19969  "Heritage from *AtmFieldsCalc*\n"
19970  "\n"
19971  "Internally, *WindFieldsCalc* applies *GriddedFieldPRegrid* and\n"
19972  "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
19973  "is allowed and applied.\n"),
19974  AUTHORS("Richard Larsson"),
19975  OUT("wind_u_field", "wind_v_field", "wind_w_field"),
19976  GOUT(),
19977  GOUT_TYPE(),
19978  GOUT_DESC(),
19979  IN("p_grid",
19980  "lat_grid",
19981  "lon_grid",
19982  "wind_u_field_raw",
19983  "wind_v_field_raw",
19984  "wind_w_field_raw",
19985  "atmosphere_dim"),
19986  GIN("interp_order"),
19987  GIN_TYPE("Index"),
19988  GIN_DEFAULT("1"),
19989  GIN_DESC("Interpolation order (1=linear interpolation).")));
19990 
19991  md_data_raw.push_back(create_mdrecord(
19992  NAME("WindFieldsCalcExpand1D"),
19993  DESCRIPTION(
19994  "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
19995  "homogeneous wind fields. Derived from *AtmFieldsCalcExpand1D*\n"
19996  "\n"
19997  "The method works as *WindFieldsCalc*, but accepts only raw 1D\n"
19998  "wind fields. The raw data is interpolated to *p_grid* and\n"
19999  "the obtained values are applied for all latitudes, and also\n"
20000  "longitudes for 3D, to create a homogeneous atmosphere.\n"),
20001  AUTHORS("Richard Larsson"),
20002  OUT("wind_u_field", "wind_v_field", "wind_w_field"),
20003  GOUT(),
20004  GOUT_TYPE(),
20005  GOUT_DESC(),
20006  IN("p_grid",
20007  "lat_grid",
20008  "lon_grid",
20009  "wind_u_field_raw",
20010  "wind_v_field_raw",
20011  "wind_w_field_raw",
20012  "atmosphere_dim"),
20013  GIN("interp_order"),
20014  GIN_TYPE("Index"),
20015  GIN_DEFAULT("1"),
20016  GIN_DESC("Interpolation order (1=linear interpolation).")));
20017 
20018  md_data_raw.push_back(create_mdrecord(
20019  NAME("WindRawRead"),
20020  DESCRIPTION(
20021  "Reads wind field data from a scenario.\n"
20022  "\n"
20023  "A full set of field components is read (NOTE: fails if scenario\n"
20024  "only contains selected field components). The files can be\n"
20025  "anywhere, but must all be in the same directory specified by\n"
20026  "'basename'. Naming convention for the field component files is\n"
20027  "basename.wind_u.xml for the u-component, v- and w-components\n"
20028  "accordingly.\n"),
20029  AUTHORS("Richard Larsson"),
20030  OUT("wind_u_field_raw", "wind_v_field_raw", "wind_w_field_raw"),
20031  GOUT(),
20032  GOUT_TYPE(),
20033  GOUT_DESC(),
20034  IN(),
20035  GIN("basename"),
20036  GIN_TYPE("String"),
20037  GIN_DEFAULT(NODEF),
20038  GIN_DESC("Name of scenario, probably including the full path. For "
20039  "example: \"/data/wind_field\"")));
20040 
20041  md_data_raw.push_back(create_mdrecord(
20042  NAME("wind_u_fieldIncludePlanetRotation"),
20043  DESCRIPTION(
20044  "Maps the planet's rotation to an imaginary wind.\n"
20045  "\n"
20046  "This method is of relevance if the observation platform is not\n"
20047  "following the planet's rotation, and Doppler effects must be\n"
20048  "considered. Examples include full disk observations from another\n"
20049  "planet or a satellite not in orbit of the observed planet.\n"
20050  "\n"
20051  "The rotation of the planet is not causing any Doppler shift for\n"
20052  "1D and 2D simulations, and the method can only be used for 3D.\n"),
20053  AUTHORS("Patrick Eriksson"),
20054  OUT("wind_u_field"),
20055  GOUT(),
20056  GOUT_TYPE(),
20057  GOUT_DESC(),
20058  IN("wind_u_field",
20059  "atmosphere_dim",
20060  "p_grid",
20061  "lat_grid",
20062  "lon_grid",
20063  "refellipsoid",
20064  "z_field",
20065  "planet_rotation_period"),
20066  GIN(),
20067  GIN_TYPE(),
20068  GIN_DEFAULT(),
20069  GIN_DESC()));
20070 
20071  md_data_raw.push_back(create_mdrecord(
20072  NAME("WMRFSelectChannels"),
20073  DESCRIPTION(
20074  "Select some channels for WMRF calculation.\n"
20075  "\n"
20076  "The HIRS fast setup consists of a precalculated frequency grid\n"
20077  "covering all HIRS channels, and associated weights for each channel,\n"
20078  "stored in a weight matrix. (A *sensor_response* matrix.)\n"
20079  "\n"
20080  "If not all channels are requested for\n"
20081  "simulation, then this method can be used to remove the unwanted\n"
20082  "channels. It changes a number of variables in consistent fashion:\n"
20083  "\n"
20084  "- Unwanted channels are removed from f_backend. \n"
20085  "- Unwanted channels are removed from wmrf_weights.\n"
20086  "- Unnecessary frequencies are removed from f_grid.\n"
20087  "- Unnecessary frequencies are removed from wmrf_weights.\n"),
20088  AUTHORS("Stefan Buehler"),
20089  OUT("f_grid", "wmrf_weights", "f_backend"),
20090  GOUT(),
20091  GOUT_TYPE(),
20092  GOUT_DESC(),
20093  IN("f_grid", "f_backend", "wmrf_weights", "wmrf_channels"),
20094  GIN(),
20095  GIN_TYPE(),
20096  GIN_DEFAULT(),
20097  GIN_DESC()));
20098 
20099  md_data_raw.push_back(create_mdrecord(
20100  NAME("WriteMolTau"),
20101  DESCRIPTION(
20102  "Writes a 'molecular_tau_file' as required for libRadtran.\n"
20103  "\n"
20104  "The libRadtran (www.libradtran.org) radiative transfer package is a \n"
20105  "comprehensive package for various applications, it can be used to \n"
20106  "compute radiances, irradiances, actinic fluxes, ... for the solar \n"
20107  "and the thermal spectral ranges. Absorption is usually treated using \n"
20108  "k-distributions or other parameterizations. For calculations with high \n"
20109  "spectral resolution it requires absorption coefficients from an external \n"
20110  "line-by-line model. Using this method, arts generates a file that can be \n"
20111  "used by libRadtran (option molecular_tau_file)."
20112  "\n"),
20113  AUTHORS("Claudia Emde"),
20114  OUT(),
20115  GOUT(),
20116  GOUT_TYPE(),
20117  GOUT_DESC(),
20118  IN("f_grid", "z_field", "propmat_clearsky_field", "atmosphere_dim"),
20119  GIN("filename"),
20120  GIN_TYPE("String"),
20121  GIN_DEFAULT(NODEF),
20122  GIN_DESC("Name of the *molecular_tau_file*.")));
20123 
20124  md_data_raw.push_back(create_mdrecord(
20125  NAME("WriteNetCDF"),
20126  DESCRIPTION("Writes a workspace variable to a NetCDF file.\n"
20127  "\n"
20128  "This method can write variables of limited groups.\n"
20129  "\n"
20130  "If the filename is omitted, the variable is written\n"
20131  "to <basename>.<variable_name>.nc.\n"),
20132  AUTHORS("Oliver Lemke"),
20133  OUT(),
20134  GOUT(),
20135  GOUT_TYPE(),
20136  GOUT_DESC(),
20137  IN(),
20138  GIN("in", "filename"),
20139  GIN_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, ArrayOfVector,"
20140  "ArrayOfMatrix, GasAbsLookup",
20141  "String"),
20142  GIN_DEFAULT(NODEF, ""),
20143  GIN_DESC("Variable to be saved.", "Name of the NetCDF file."),
20144  SETMETHOD(false),
20145  AGENDAMETHOD(false),
20146  USES_TEMPLATES(true),
20147  PASSWORKSPACE(false),
20148  PASSWSVNAMES(true)));
20149 
20150  md_data_raw.push_back(create_mdrecord(
20151  NAME("WriteNetCDFIndexed"),
20152  DESCRIPTION("As *WriteNetCDF*, but creates indexed file names.\n"
20153  "\n"
20154  "This method can write variables of any group.\n"
20155  "\n"
20156  "If the filename is omitted, the variable is written\n"
20157  "to <basename>.<variable_name>.nc.\n"),
20158  AUTHORS("Oliver Lemke"),
20159  OUT(),
20160  GOUT(),
20161  GOUT_TYPE(),
20162  GOUT_DESC(),
20163  IN("file_index"),
20164  GIN("in", "filename"),
20165  GIN_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, ArrayOfVector,"
20166  "ArrayOfMatrix, GasAbsLookup",
20167  "String"),
20168  GIN_DEFAULT(NODEF, ""),
20169  GIN_DESC("Variable to be saved.", "Name of the NetCDF file."),
20170  SETMETHOD(false),
20171  AGENDAMETHOD(false),
20172  USES_TEMPLATES(true),
20173  PASSWORKSPACE(false),
20174  PASSWSVNAMES(true)));
20175 
20176  md_data_raw.push_back(create_mdrecord(
20177  NAME("WriteXML"),
20178  DESCRIPTION("Writes a workspace variable to an XML file.\n"
20179  "\n"
20180  "This method can write variables of any group.\n"
20181  "\n"
20182  "If the filename is omitted, the variable is written\n"
20183  "to <basename>.<variable_name>.xml.\n"
20184  "If no_clobber is set to 1, an increasing number will be\n"
20185  "appended to the filename if the file already exists.\n"),
20186  AUTHORS("Oliver Lemke"),
20187  OUT(),
20188  GOUT(),
20189  GOUT_TYPE(),
20190  GOUT_DESC(),
20191  IN("output_file_format"),
20192  GIN("in", "filename", "no_clobber"),
20193  GIN_TYPE("Any", "String", "Index"),
20194  GIN_DEFAULT(NODEF, "", "0"),
20195  GIN_DESC("Variable to be saved.",
20196  "Name of the XML file.",
20197  "0: Overwrite existing files, 1: Use unique filenames"),
20198  SETMETHOD(false),
20199  AGENDAMETHOD(false),
20200  USES_TEMPLATES(true),
20201  PASSWORKSPACE(false),
20202  PASSWSVNAMES(true)));
20203 
20204  md_data_raw.push_back(create_mdrecord(
20205  NAME("WriteXMLIndexed"),
20206  DESCRIPTION("As *WriteXML*, but creates indexed file names.\n"
20207  "\n"
20208  "The variable is written to a file with name:\n"
20209  " <filename>.<file_index>.xml.\n"
20210  "where <file_index> is the value of *file_index*.\n"
20211  "\n"
20212  "This means that *filename* shall here not include the .xml\n"
20213  "extension. Omitting filename works as for *WriteXML*.\n"),
20214  AUTHORS("Patrick Eriksson, Oliver Lemke"),
20215  OUT(),
20216  GOUT(),
20217  GOUT_TYPE(),
20218  GOUT_DESC(),
20219  IN("output_file_format", "file_index"),
20220  GIN("in", "filename", "digits"),
20221  GIN_TYPE("Any", "String", "Index"),
20222  GIN_DEFAULT(NODEF, "", "0"),
20223  GIN_DESC(
20224  "Workspace variable to be saved.",
20225  "File name. See above.",
20226  "Equalize the widths of all numbers by padding with zeros as necessary.\n"
20227  "0 means no padding (default)."),
20228  SETMETHOD(false),
20229  AGENDAMETHOD(false),
20230  USES_TEMPLATES(true),
20231  PASSWORKSPACE(false),
20232  PASSWSVNAMES(true)));
20233 
20234  md_data_raw.push_back(create_mdrecord(
20235  NAME("xaStandard"),
20236  DESCRIPTION(
20237  "Standard function for creating *xa*.\n"
20238  "\n"
20239  "The method creates *xa* based on *jacobian_quantities* and the various\n"
20240  "atmospheric fields. In the case of scattering species, the data are\n"
20241  "taken from *particle_bulkprop_field*. The following retrieval quantities\n"
20242  "are handled:\n"
20243  " Temperature\n"
20244  " Absorption species\n"
20245  " Scattering species\n"
20246  " Pointing\n"
20247  " Polynomial baseline fit\n"
20248  " Sinusoidal baseline fit\n"),
20249  AUTHORS("Patrick Eriksson"),
20250  OUT("xa"),
20251  GOUT(),
20252  GOUT_TYPE(),
20253  GOUT_DESC(),
20254  IN("jacobian_quantities",
20255  "atmfields_checked",
20256  "atmgeom_checked",
20257  "atmosphere_dim",
20258  "p_grid",
20259  "lat_grid",
20260  "lon_grid",
20261  "t_field",
20262  "vmr_field",
20263  "abs_species",
20264  "cloudbox_on",
20265  "cloudbox_checked",
20266  "particle_bulkprop_field",
20267  "particle_bulkprop_names",
20268  "wind_u_field",
20269  "wind_v_field",
20270  "wind_w_field",
20271  "mag_u_field",
20272  "mag_v_field",
20273  "mag_w_field",
20274  "surface_props_data",
20275  "surface_props_names",
20276  "water_p_eq_agenda"),
20277  GIN(),
20278  GIN_TYPE(),
20279  GIN_DEFAULT(),
20280  GIN_DESC()));
20281 
20282  md_data_raw.push_back(create_mdrecord(
20283  NAME("xClip"),
20284  DESCRIPTION(
20285  "Clipping of the state vector.\n"
20286  "\n"
20287  "The method allows you to apply hard limits the values of a\n"
20288  "retrieval quantity. The retrieval quantity is specified by\n"
20289  "*ijq*. All values of the quantity below *limit_low*, are simply\n"
20290  "set to *limit_low*. And the same is performed with respect to\n"
20291  "*limit_high*. That is, the data in x for the retrieval quantity\n"
20292  "are forced to be inside the range [limit_low,limit_high].\n"
20293  "\n"
20294  "Setting ijq=-1, is a shortcut for applying the limits on all\n"
20295  "retrieval quantities.\n"
20296  "\n"
20297  "Notice that limits must be specified in the unit used in *x*.\n"),
20298  AUTHORS("Patrick Eriksson"),
20299  OUT("x"),
20300  GOUT(),
20301  GOUT_TYPE(),
20302  GOUT_DESC(),
20303  IN("x", "jacobian_quantities"),
20304  GIN("ijq", "limit_low", "limit_high"),
20305  GIN_TYPE("Index", "Numeric", "Numeric"),
20306  GIN_DEFAULT(NODEF, "-Inf", "Inf"),
20307  GIN_DESC("Retrieval quantity index (zero-based)",
20308  "Lower limit for clipping.",
20309  "Upper limit for clipping.")));
20310 
20311  md_data_raw.push_back(create_mdrecord(
20312  NAME("x2artsAtmAndSurf"),
20313  DESCRIPTION(
20314  "Maps *x* to atmospheric and surface variables.\n"
20315  "\n"
20316  "Maps OEM's state vector, *x*, to the matching ARTS variables. This\n"
20317  "method handles atmospheric and surface variables. If you retrieve\n"
20318  "other variables, make sure that you also call *x2artsSensor* and/or\n"
20319  "*x2artsSpectroscopy*.\n"
20320  "\n"
20321  "The following retrieval quantities are handled by this method:\n"
20322  " Temperature\n"
20323  " Absorption species\n"
20324  " Scattering species\n"
20325  " Winds\n"
20326  " Surface variables\n"
20327  "\n"
20328  "Should only be used inside *inversion_iterate_agenda*.\n"),
20329  AUTHORS("Patrick Eriksson"),
20330  OUT("vmr_field",
20331  "t_field",
20332  "particle_bulkprop_field",
20333  "wind_u_field",
20334  "wind_v_field",
20335  "wind_w_field",
20336  "mag_u_field",
20337  "mag_v_field",
20338  "mag_w_field",
20339  "surface_props_data"),
20340  GOUT(),
20341  GOUT_TYPE(),
20342  GOUT_DESC(),
20343  IN("vmr_field",
20344  "t_field",
20345  "particle_bulkprop_field",
20346  "wind_u_field",
20347  "wind_v_field",
20348  "wind_w_field",
20349  "mag_u_field",
20350  "mag_v_field",
20351  "mag_w_field",
20352  "surface_props_data",
20353  "jacobian_quantities",
20354  "x",
20355  "atmfields_checked",
20356  "atmgeom_checked",
20357  "atmosphere_dim",
20358  "p_grid",
20359  "lat_grid",
20360  "lon_grid",
20361  "abs_species",
20362  "cloudbox_on",
20363  "cloudbox_checked",
20364  "particle_bulkprop_names",
20365  "surface_props_names",
20366  "water_p_eq_agenda"),
20367  GIN(),
20368  GIN_TYPE(),
20369  GIN_DEFAULT(),
20370  GIN_DESC()));
20371 
20372  md_data_raw.push_back(create_mdrecord(
20373  NAME("x2artsSensor"),
20374  DESCRIPTION(
20375  "Maps *x* to sensor variables.\n"
20376  "\n"
20377  "Maps OEM's state vector, *x*, to the matching ARTS variables. This\n"
20378  "method handles variables associated with the sensor. If you retrieve\n"
20379  "other variables, make sure that you also call *x2artsAtmAndSurf*\n"
20380  " and/or *x2artsSpectroscopy*.\n"
20381  "\n"
20382  "The following retrieval quantities are handled by this method:\n"
20383  " Pointing\n"
20384  " Frequency shift and stretch\n"
20385  " Baseline fits\n"
20386  "\n"
20387  "Should only be used inside *inversion_iterate_agenda*.\n"
20388  "\n"
20389  "Elements in *x* representing pointing corrections are mapped to\n"
20390  "*sensor_los*. Elements representing frequency corrections are mapped\n"
20391  "to *f_backend*. Baseline variables are mapped to *y_baseline*.\n"
20392  "\n"
20393  "The sensor response is recalculated if there is any non-zero frequency\n"
20394  "correction.\n"),
20395  AUTHORS("Patrick Eriksson"),
20396  OUT("sensor_los",
20397  "f_backend",
20398  "y_baseline",
20399  "sensor_response",
20400  "sensor_response_f",
20401  "sensor_response_pol",
20402  "sensor_response_dlos",
20403  "sensor_response_f_grid",
20404  "sensor_response_pol_grid",
20405  "sensor_response_dlos_grid",
20406  "mblock_dlos_grid"),
20407  GOUT(),
20408  GOUT_TYPE(),
20409  GOUT_DESC(),
20410  IN("sensor_los",
20411  "f_backend",
20412  "sensor_response",
20413  "sensor_response_f",
20414  "sensor_response_pol",
20415  "sensor_response_dlos",
20416  "sensor_response_f_grid",
20417  "sensor_response_pol_grid",
20418  "sensor_response_dlos_grid",
20419  "mblock_dlos_grid",
20420  "jacobian_quantities",
20421  "x",
20422  "sensor_response_agenda",
20423  "sensor_checked",
20424  "sensor_time"),
20425  GIN(),
20426  GIN_TYPE(),
20427  GIN_DEFAULT(),
20428  GIN_DESC()));
20429 
20430  md_data_raw.push_back(create_mdrecord(
20431  NAME("x2artsSpectroscopy"),
20432  DESCRIPTION("Just defined to indicate a future extensiom.\n"
20433  "\n"
20434  "Don't call the method, it will just generate an error.\n"),
20435  AUTHORS("Patrick Eriksson"),
20436  OUT(),
20437  GOUT(),
20438  GOUT_TYPE(),
20439  GOUT_DESC(),
20440  IN(),
20441  GIN(),
20442  GIN_TYPE(),
20443  GIN_DEFAULT(),
20444  GIN_DESC()));
20445 
20446  md_data_raw.push_back(create_mdrecord(
20447  NAME("yApplySensorPol"),
20448  DESCRIPTION(
20449  "Extraction of arbitrary linear polarisation.\n"
20450  "\n"
20451  "This method shall be called after *yCalc* and then applies *sensor_pol*\n"
20452  "on the outout of *yCalc*. See *sensor_pol* for definition of the\n"
20453  "polarisation responses. THe *sensor_response* give to *yCalc* can not\n"
20454  "contain any polarisation response, it must maintain original Stokes\n"
20455  "elelemnts. The value of *stokes_dim* muist be >= 3.\n"
20456  "\n"
20457  "The values in *sensor_pol* are applied on *y*, and *jacobian* if relevant.\n"
20458  "*y_pol* is set following the values in *sensor_pol* but is rounded to\n"
20459  "an integer value. Remaining data associated with *y* (e.g. y_pos) are\n"
20460  "set to the value matching the first Stokes element.\n"),
20461  AUTHORS("Patrick Eriksson"),
20462  OUT("y", "y_f", "y_pol", "y_pos", "y_los", "y_aux", "y_geo", "jacobian"),
20463  GOUT(),
20464  GOUT_TYPE(),
20465  GOUT_DESC(),
20466  IN("y",
20467  "y_f",
20468  "y_pol",
20469  "y_pos",
20470  "y_los",
20471  "y_aux",
20472  "y_geo",
20473  "jacobian",
20474  "stokes_dim",
20475  "jacobian_do",
20476  "sensor_pos",
20477  "sensor_pol"),
20478  GIN(),
20479  GIN_TYPE(),
20480  GIN_DEFAULT(),
20481  GIN_DESC()));
20482 
20483  md_data_raw.push_back(create_mdrecord(
20484  NAME("yApplyUnit"),
20485  DESCRIPTION(
20486  "Conversion of *y* to other spectral units.\n"
20487  "\n"
20488  "Any conversion to brightness temperature is normally made inside\n"
20489  "*yCalc*. This method makes it possible to also make this conversion\n"
20490  "after *yCalc*, but with restrictions for *jacobian* and with.\n"
20491  "respect to the n2-law of radiance.\n"
20492  "\n"
20493  "The conversion made inside *iyEmissionStandard* is mimiced\n"
20494  "and see that method for constraints and selection of output units.\n"
20495  "This with the restriction that the n2-law can be ignored. The later\n"
20496  "is the case if the sensor is placed in space, or if the refractive\n"
20497  "only devaites slightly from unity.\n"
20498  "\n"
20499  "The method handles *y* and *jacobian* in parallel, where\n"
20500  "the last variable is only considered if it is set. The\n"
20501  "input data must be in original radiance units. A completely\n"
20502  "stringent check of this can not be performed.\n"
20503  "\n"
20504  "The method can not be used with jacobian quantities that are not\n"
20505  "obtained through radiative transfer calculations. One example on\n"
20506  "quantity that can not be handled is *jacobianAddPolyfit*. There\n"
20507  "are no automatic checks warning for incorrect usage!\n"
20508  "\n"
20509  "If you are using this method, *iy_unit* should be set to \"1\" when\n"
20510  "calling *yCalc*, and be changed before calling this method.\n"
20511  "\n"
20512  "Conversion of *y_aux* is not supported.\n"),
20513  AUTHORS("Patrick Eriksson"),
20514  OUT("y", "jacobian"),
20515  GOUT(),
20516  GOUT_TYPE(),
20517  GOUT_DESC(),
20518  IN("y", "jacobian", "y_f", "y_pol", "iy_unit"),
20519  GIN(),
20520  GIN_TYPE(),
20521  GIN_DEFAULT(),
20522  GIN_DESC()));
20523 
20524  md_data_raw.push_back(create_mdrecord(
20525  NAME("ybatchCalc"),
20526  DESCRIPTION(
20527  "Performs batch calculations for the measurement vector y.\n"
20528  "\n"
20529  "We perform *ybatch_n* jobs, starting at index *ybatch_start*. (Zero\n"
20530  "based indexing, as usual.) The output array *ybatch* will have\n"
20531  "ybatch_n elements. Indices in the output array start\n"
20532  "with zero, independent of *ybatch_start*.\n"
20533  "\n"
20534  "The method performs the following:\n"
20535  " 1. Sets *ybatch_index* = *ybatch_start*.\n"
20536  " 2. Performs a-d until\n"
20537  " *ybatch_index* = *ybatch_start* + *ybatch_n*.\n"
20538  " a. Executes *ybatch_calc_agenda*.\n"
20539  " b. If *ybatch_index* = *ybatch_start*, resizes *ybatch*\n"
20540  " based on *ybatch_n* and length of *y*.\n"
20541  " c. Copies *y* to *ybatch_index* - *ybatch_start*\n"
20542  " of *ybatch*.\n"
20543  " d. Adds 1 to *ybatch_index*.\n"
20544  "\n"
20545  "Beside the *ybatch_calc_agenda*, the WSVs *ybatch_start*\n"
20546  "and *ybatch_n* must be set before calling this method.\n"
20547  "Further, *ybatch_calc_agenda* is expected to produce a\n"
20548  "spectrum and should accordingly include a call of *yCalc*\n"
20549  "(or asimilar method).\n"
20550  "\n"
20551  "The input variable *ybatch_start* is set to a default of zero in\n"
20552  "*general.arts*.\n"
20553  "\n"
20554  "An agenda that calculates spectra for different temperature profiles\n"
20555  "could look like this:\n"
20556  "\n"
20557  " AgendaSet(ybatch_calc_agenda){\n"
20558  " Extract(t_field,tensor4_1,ybatch_index)\n"
20559  " yCalc\n"
20560  " }\n"
20561  "\n"
20562  "Jacobians are also collected, and stored in output variable *ybatch_jacobians*. \n"
20563  "(This will be empty if yCalc produces empty Jacobians.)\n"
20564  "\n"
20565  "See the user guide for further practical examples.\n"),
20566  AUTHORS("Stefan Buehler"),
20567  OUT("ybatch", "ybatch_aux", "ybatch_jacobians"),
20568  GOUT(),
20569  GOUT_TYPE(),
20570  GOUT_DESC(),
20571  IN("ybatch_start", "ybatch_n", "ybatch_calc_agenda"),
20572  GIN("robust"),
20573  GIN_TYPE("Index"),
20574  GIN_DEFAULT("0"),
20575  GIN_DESC("A flag with value 1 or 0. If set to one, the batch\n"
20576  "calculation will continue, even if individual jobs fail. In\n"
20577  "that case, a warning message is written to screen and file\n"
20578  "(out1 output stream), and the *y* Vector entry for the\n"
20579  "failed job in *ybatch* is left empty.")));
20580 
20581  md_data_raw.push_back(create_mdrecord(
20582  NAME("yColdAtmHot"),
20583  DESCRIPTION(
20584  "Computes *y* from input using standard calibration scheme of cold-atm-hot observations\n"
20585  "\n"
20586  "If calib evaluates as true:\n"
20587  " y = cold_temp + (hot_temp - cold_temp) * (atm - cold) / (hot - cold)\n"
20588  "\n"
20589  "If calib evaluates as false:\n"
20590  " y = (hot_temp * cold - cold_temp * hot) / (hot - cold)\n"),
20591  AUTHORS("Richard Larsson"),
20592  OUT("y"),
20593  GOUT(),
20594  GOUT_TYPE(),
20595  GOUT_DESC(),
20596  IN(),
20597  GIN("cold", "atm", "hot", "cold_temp", "hot_temp", "calib"),
20598  GIN_TYPE("Vector", "Vector", "Vector", "Numeric", "Numeric", "Index"),
20599  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "1"),
20600  GIN_DESC("N-elem Vector of cold load linear power",
20601  "N-elem Vector of atmosphere linear power",
20602  "N-elem Vector of hot load linear power",
20603  "Cold load temperature",
20604  "Hot load temperature",
20605  "Flag for calibration scheme, false means system temperature is computed")));
20606 
20607  md_data_raw.push_back(create_mdrecord(
20608  NAME("ybatchMetProfiles"),
20609  DESCRIPTION(
20610  "This method is used for simulating ARTS for metoffice model fields"
20611  "\n"
20612  "This method reads in *met_amsu_data* which contains the\n"
20613  "lat-lon of the metoffice profile files as a Matrix. It then\n"
20614  "loops over the number of profiles and corresponding to each\n"
20615  "longitude create the appropriate profile basename. Then,\n"
20616  "corresponding to each basename we have temperature field, altitude\n"
20617  "field, humidity field, and particle number density field. The\n"
20618  "temperature field and altitude field are stored in the same dimensions\n"
20619  "as *t_field_raw* and *z_field_raw*. The oxygen and nitrogen VMRs are\n"
20620  "set to constant values of 0.209 and 0.782, respectively and are used\n"
20621  "along with humidity field to generate *vmr_field_raw*. \n"
20622  "\n"
20623  "The three fields *t_field_raw*, *z_field_raw*, and *vmr_field_raw* are\n"
20624  "given as input to *met_profile_calc_agenda* which is called in this\n"
20625  "method. See documentation of WSM *met_profile_calc_agenda* for more\n"
20626  "information on this agenda. \n"
20627  "\n"
20628  "The method also converts satellite zenith angle to appropriate\n"
20629  "*sensor_los*. It also sets the *p_grid* and *cloudbox_limits*\n"
20630  "from the profiles inside the function\n"),
20631  AUTHORS("Sreerekha T.R."),
20632  OUT("ybatch"),
20633  GOUT(),
20634  GOUT_TYPE(),
20635  GOUT_DESC(),
20636  IN("abs_species",
20637  "met_profile_calc_agenda",
20638  "f_grid",
20639  "met_amsu_data",
20640  "sensor_pos",
20641  "refellipsoid",
20642  "lat_grid",
20643  "lon_grid",
20644  "atmosphere_dim",
20645  "scat_data"),
20646  GIN("nelem_p_grid", "met_profile_path", "met_profile_pnd_path"),
20647  GIN_TYPE("Index", "String", "String"),
20649  GIN_DESC("FIXME DOC", "FIXME DOC", "FIXME DOC")));
20650 
20651  md_data_raw.push_back(create_mdrecord(
20652  NAME("ybatchMetProfilesClear"),
20653  DESCRIPTION(
20654  "This method is used for simulating ARTS for metoffice model fields\n"
20655  "for clear sky conditions.\n"
20656  "\n"
20657  "This method reads in *met_amsu_data* which contains the\n"
20658  "lat-lon of the metoffice profile files as a Matrix. It then\n"
20659  "loops over the number of profiles and corresponding to each\n"
20660  "longitude create the appropriate profile basename. Then,\n"
20661  "Corresponding to each basename we have temperature field, altitude\n"
20662  "field, humidity field, and particle number density field. The\n"
20663  "temperature field and altitude field are stored in the same dimensions\n"
20664  "as *t_field_raw* and *z_field_raw*. The oxygen and nitrogen VMRs are\n"
20665  "set to constant values of 0.209 and 0.782, respectively and are used\n"
20666  "along with humidity field to generate *vmr_field_raw*. \n"
20667  "\n"
20668  "The three fields *t_field_raw*, *z_field_raw*, and *vmr_field_raw* are\n"
20669  "given as input to *met_profile_calc_agenda* which is called in this\n"
20670  "method. See documentation of WSM *met_profile_calc_agenda* for more\n"
20671  "information on this agenda. \n"
20672  "\n"
20673  "The method also converts satellite zenith angle to appropriate\n"
20674  "*sensor_los*. It also sets the *p_grid* and *cloudbox_limits*\n"
20675  "from the profiles inside the function\n"),
20676  AUTHORS("Seerekha T.R."),
20677  OUT("ybatch"),
20678  GOUT(),
20679  GOUT_TYPE(),
20680  GOUT_DESC(),
20681  IN("abs_species",
20682  "met_profile_calc_agenda",
20683  "f_grid",
20684  "met_amsu_data",
20685  "sensor_pos",
20686  "refellipsoid"),
20687  GIN("nelem_p_grid", "met_profile_path"),
20688  GIN_TYPE("Index", "String"),
20690  GIN_DESC("FIXME DOC", "FIXME DOC")));
20691 
20692 
20693  md_data_raw.push_back(create_mdrecord(
20694  NAME("ybatchTimeAveraging"),
20695  DESCRIPTION(
20696  "Time average of *ybatch* and *time_grid*\n"
20697  "\n"
20698  "Computes the internal covariance matrix in *covmat_sepsbatch*, and\n"
20699  "stores the number of elements per averaging in *counts*\n"),
20700  AUTHORS("Richard Larsson"),
20701  OUT("ybatch", "time_grid", "covmat_sepsbatch", "counts"),
20702  GOUT(),
20703  GOUT_TYPE(),
20704  GOUT_DESC(),
20705  IN("ybatch", "time_grid"),
20706  GIN("time_step", "disregard_first", "disregard_last"),
20707  GIN_TYPE("String", "Index", "Index"),
20708  GIN_DEFAULT(NODEF, "0", "0"),
20709  GIN_DESC("Time step in the form \"INDEX SCALE\", where SCALE is \"h\", \"min\", or \"s\" for hours, minutes or seconds",
20710  "Flag to remove first time step (e.g., if it is an incomplete step)",
20711  "Flag to remove last time step (e.g., if it is an incomplete step)")));
20712 
20713  md_data_raw.push_back(create_mdrecord(
20714  NAME("ybatchTroposphericCorrectionNaiveMedianForward"),
20715  DESCRIPTION(
20716  "Performs naive tropospheric corrections on *ybatch*\n"
20717  "\n"
20718  "Sets *ybatch_corr* to be able to perform the inverse of the corrections,\n"
20719  "each array-element with 3 entries as [median, part_trans, trop_temp]\n"),
20720  AUTHORS("Richard Larsson"),
20721  OUT("ybatch_corr", "ybatch"),
20722  GOUT(),
20723  GOUT_TYPE(),
20724  GOUT_DESC(),
20725  IN("ybatch"),
20726  GIN("range", "trop_temp", "targ_temp"),
20727  GIN_TYPE("ArrayOfIndex", "Vector", "Numeric"),
20728  GIN_DEFAULT(NODEF, NODEF, "2.73"),
20729  GIN_DESC("Positions where the median of the baseline is computed, if empty all is used",
20730  "Radiative temperature of the troposphere",
20731  "Temperature target of the baseline")));
20732 
20733  md_data_raw.push_back(create_mdrecord(
20734  NAME("ybatchTroposphericCorrectionNaiveMedianInverse"),
20735  DESCRIPTION(
20736  "Performs inverse of naive tropospheric corrections on *ybatch*\n"),
20737  AUTHORS("Richard Larsson"),
20738  OUT("ybatch"),
20739  GOUT(),
20740  GOUT_TYPE(),
20741  GOUT_DESC(),
20742  IN("ybatch", "ybatch_corr"),
20743  GIN(),
20744  GIN_TYPE(),
20745  GIN_DEFAULT(),
20746  GIN_DESC()));
20747 
20748  md_data_raw.push_back(create_mdrecord(
20749  NAME("yCalc"),
20750  DESCRIPTION(
20751  "Calculation of complete measurement vectors (y).\n"
20752  "\n"
20753  "The method performs radiative transfer calculations from a sensor\n"
20754  "perspective. Radiative transfer calculations are performed for\n"
20755  "monochromatic pencil beams, following *iy_main_agenda* and\n"
20756  "associated agendas. Obtained radiances are weighted together by\n"
20757  "*sensor_response*, to include the characteristics of the sensor.\n"
20758  "The measurement vector obtained can contain anything from a single\n"
20759  "frequency value to a series of measurement scans (each consisting\n"
20760  "of a series of spectra), all depending on the settings. Spectra\n"
20761  "and jacobians are calculated in parallel.\n"
20762  "\n"
20763  "The frequency, polarisation etc. for each measurement value is\n"
20764  "given by *y_f*, *y_pol*, *y_pos* and *y_los*.\n"
20765  "\n"
20766  "The content of *y_aux* follows *iy_aux_vars. See the method selected\n"
20767  "for *iy_main_agenda* for allowed choices.\n"
20768  "\n"
20769  "The geo-positions (*y_geo*) are set based on *sensor_response*. When\n"
20770  "an antenna pattern is considered, there are several pencil beams,\n"
20771  "and thus also several goe-positions, associated with each value of *y*.\n"
20772  "The geo-position assigned to a value in *y* is the *geo_pos* of the pencil\n"
20773  "beam related to the highest value in *sensor_response*. This means that\n"
20774  "*mblock_dlos_grid* must contain the bore-sight direction (0,0), if you\n"
20775  "want *y_geo* to exactly match the bore-sight direction.\n"
20776  "\n"
20777  "The Jacobian provided (*jacobian*) is adopted to selected retrieval\n"
20778  "units, but no transformations are applied. Transformations are\n"
20779  "included by calling *jacobianAdjustAndTransform*.\n"),
20780  AUTHORS("Patrick Eriksson"),
20781  OUT("y", "y_f", "y_pol", "y_pos", "y_los", "y_aux", "y_geo", "jacobian"),
20782  GOUT(),
20783  GOUT_TYPE(),
20784  GOUT_DESC(),
20785  IN("atmgeom_checked",
20786  "atmfields_checked",
20787  "atmosphere_dim",
20788  "nlte_field",
20789  "cloudbox_on",
20790  "cloudbox_checked",
20791  "scat_data_checked",
20792  "sensor_checked",
20793  "stokes_dim",
20794  "f_grid",
20795  "sensor_pos",
20796  "sensor_los",
20797  "transmitter_pos",
20798  "mblock_dlos_grid",
20799  "sensor_response",
20800  "sensor_response_f",
20801  "sensor_response_pol",
20802  "sensor_response_dlos",
20803  "iy_unit",
20804  "iy_main_agenda",
20805  "geo_pos_agenda",
20806  "jacobian_agenda",
20807  "jacobian_do",
20808  "jacobian_quantities",
20809  "iy_aux_vars"),
20810  GIN(),
20811  GIN_TYPE(),
20812  GIN_DEFAULT(),
20813  GIN_DESC()));
20814 
20815  md_data_raw.push_back(create_mdrecord(
20816  NAME("yCalcAppend"),
20817  DESCRIPTION(
20818  "Replaces *yCalc* if a measurement shall be appended to an\n"
20819  "existing one.\n"
20820  "\n"
20821  "The method works basically as *yCalc* but appends the results to\n"
20822  "existing data, instead of creating completely new *y* and its\n"
20823  "associated variables. This method is required if your measurement\n"
20824  "consists of data from two instruments using different observation\n"
20825  "techniques (corresponding to different iyCalc-methods). One such\n"
20826  "example is if emission and transmission data are combined into a\n"
20827  "joint retrieval. The method can also be used to get around the\n"
20828  "constrain that *sensor_response* is required to be the same for\n"
20829  "all data.\n"
20830  "\n"
20831  "The new measurement is simply appended to the input *y*, and the\n"
20832  "other output variables are treated correspondingly. Data are\n"
20833  "appended \"blindly\" in *y_aux*. That is, data of different type\n"
20834  "are appended if *iy_aux_vars* differs between the two measurements,\n"
20835  "the data are appended strictly following the order. First variable\n"
20836  "of second measurement is appended to first variable of first\n"
20837  "measurement, and so on. The number of auxiliary variables can differ\n"
20838  "between the measurements. Missing data are set to zero.\n"
20839  "\n"
20840  "The set of retrieval quantities can differ between the two\n"
20841  "calculations. If an atmospheric quantity is part of both Jacobians,\n"
20842  "the same retrieval grids must be used in both cases.\n"
20843  "The treatment of instrument related Jacobians (baseline fits,\n"
20844  "pointing ...) follows the *append_instrument_wfs* argument.\n"
20845  "\n"
20846  "A difference to *yCalc* is that *jacobian_quantities* is both in-\n"
20847  "and output variable. The input version shall match the measurement\n"
20848  "to be calculated, while the output version matches the output *y*,\n"
20849  "the combined, measurements. A copies of *jacobian_quantities* of the\n"
20850  "first measurement must be made and shall be provided to the method\n"
20851  "as *jacobian_quantities_copy*.\n"
20852  "\n"
20853  "As for *yCalc* Jacobian transformations are not handled, and the\n"
20854  "the input Jacobian shall not contain transformations. That is\n"
20855  "*jacobianAdjustAndTransform* shall be called after this method,\n"
20856  "when the complete Jacobian is at hand.\n"),
20857  AUTHORS("Patrick Eriksson"),
20858  OUT("y",
20859  "y_f",
20860  "y_pol",
20861  "y_pos",
20862  "y_los",
20863  "y_aux",
20864  "y_geo",
20865  "jacobian",
20866  "jacobian_quantities"),
20867  GOUT(),
20868  GOUT_TYPE(),
20869  GOUT_DESC(),
20870  IN("y",
20871  "y_f",
20872  "y_pol",
20873  "y_pos",
20874  "y_los",
20875  "y_aux",
20876  "y_geo",
20877  "jacobian",
20878  "atmgeom_checked",
20879  "atmfields_checked",
20880  "atmosphere_dim",
20881  "nlte_field",
20882  "cloudbox_on",
20883  "cloudbox_checked",
20884  "scat_data_checked",
20885  "sensor_checked",
20886  "stokes_dim",
20887  "f_grid",
20888  "sensor_pos",
20889  "sensor_los",
20890  "transmitter_pos",
20891  "mblock_dlos_grid",
20892  "sensor_response",
20893  "sensor_response_f",
20894  "sensor_response_pol",
20895  "sensor_response_dlos",
20896  "iy_unit",
20897  "iy_main_agenda",
20898  "geo_pos_agenda",
20899  "jacobian_agenda",
20900  "jacobian_do",
20901  "jacobian_quantities",
20902  "iy_aux_vars"),
20903  GIN("jacobian_quantities_copy", "append_instrument_wfs"),
20904  GIN_TYPE("ArrayOfRetrievalQuantity", "Index"),
20905  GIN_DEFAULT(NODEF, "0"),
20906  GIN_DESC("Copy of *jacobian_quantities* of first measurement.",
20907  "Flag controlling if instrumental weighting functions are "
20908  "appended or treated as different retrieval quantities.")));
20909 
20910  md_data_raw.push_back(create_mdrecord(
20911  NAME("yActive"),
20912  DESCRIPTION(
20913  "Replaces *yCalc* for radar/lidar calculations.\n"
20914  "\n"
20915  "The output format for *iy* when simulating radars and lidars differs\n"
20916  "from the standard one, and *yCalc* can not be used for such simulations.\n"
20917  "This method works largely as *yCalc*, but is tailored to handle the\n"
20918  "output from *iyActiveSingleScat*.\n"
20919  "\n"
20920  "The method requires additional information about the sensor,\n"
20921  "regarding its recieving properties. First of all, recieved\n"
20922  "polarisation states are taken from *instrument_pol_array*. Note\n"
20923  "that this WSV allows to define several measured polarisations\n"
20924  "for each transmitted signal. For example, it is possible to\n"
20925  "simulate transmission of V and measuring backsacttered V and H.\n"
20926  "\n"
20927  "Secondly, the range averaging is described by *range_bins*. These\n"
20928  "bins can either be specified in altitude or two-way travel time.\n"
20929  "In both case, the edges of the range bins shall be specified.\n"
20930  "All data (including auxiliary variables) are returned as the\n"
20931  "average inside the bins. If a bin is totally outside the model\n"
20932  "atmosphere, NaN is returned.\n"
20933  "\n"
20934  "The options for *iy_unit* are:\n"
20935  " \"1\" : Backscatter coefficient. Unit is 1/(m*sr). At zero\n"
20936  " attenuation, this equals the scattering matrix value for\n"
20937  " the backward direction. See further AUG.\n"
20938  " \"Ze\" : Equivalent reflectivity. Unit is mm^6/m^3. Conversion\n"
20939  " formula is given below.\n"
20940  " \"dBZe\": 10*log10(Ze/Z0), where Z0 is 1 mm^6/m^3.\n"
20941  "\n"
20942  "The conversion from backscatter coefficient to Ze is:\n"
20943  " Ze = 1e18 * lambda^4 / (k2 * pi^5) * sum(sigma),\n"
20944  "where sum(sigma) = 4 * pi * b, and b is the backscatter coefficient.\n"
20945  "\n"
20946  "The reference dielectric factor can either specified directly by\n"
20947  "the argument *k2*. For example, to mimic the CloudSat data, *k2*\n"
20948  "shall be set to 0.75 (citaion needed). If *k2* is set to be \n"
20949  "negative (which is defualt), k2 is calculated as:\n"
20950  " k2 = abs( (n^2-1)/(n^2+2) )^2,\n"
20951  "where n is the refractive index of liquid water at temperature\n"
20952  "*ze_tref* and the frequency of the radar, calculated by the MPM93\n"
20953  "parameterization.\n"
20954  "\n"
20955  "A lower limit for dBZe is applied (*dbze_min*). The main reason is to\n"
20956  "handle the fact dBZe is not defined for Ze=0, and dBZe is set to the\n"
20957  "clip value when Ze < 10^(dbze_min/10).\n"),
20958  AUTHORS("Patrick Eriksson"),
20959  OUT("y", "y_f", "y_pol", "y_pos", "y_los", "y_aux", "y_geo", "jacobian"),
20960  GOUT(),
20961  GOUT_TYPE(),
20962  GOUT_DESC(),
20963  IN("atmgeom_checked",
20964  "atmfields_checked",
20965  "iy_unit",
20966  "iy_aux_vars",
20967  "stokes_dim",
20968  "f_grid",
20969  "atmosphere_dim",
20970  "nlte_field",
20971  "cloudbox_on",
20972  "cloudbox_checked",
20973  "sensor_pos",
20974  "sensor_los",
20975  "sensor_checked",
20976  "jacobian_do",
20977  "jacobian_quantities",
20978  "iy_main_agenda",
20979  "geo_pos_agenda",
20980  "instrument_pol_array",
20981  "range_bins"),
20982  GIN("ze_tref", "k2", "dbze_min"),
20983  GIN_TYPE("Numeric", "Numeric", "Numeric"),
20984  GIN_DEFAULT("273.15", "-1", "-99"),
20985  GIN_DESC("Reference temperature for conversion to Ze.",
20986  "Reference dielectric factor.",
20987  "Clip value for dBZe.")));
20988 
20989  md_data_raw.push_back(create_mdrecord(
20990  NAME("ySimpleSpectrometer"),
20991  DESCRIPTION(
20992  "Converts *iy* to *y* assuming a fixed frequency resolution.\n"
20993  "\n"
20994  "This is a short-cut, avoiding *yCalc*, that can be used to convert\n"
20995  "monochromatic pencil beam data to spectra with a fixed resolution.\n"
20996  "\n"
20997  "The method mimics a spectrometer with rectangular response\n"
20998  "functions, all having the same width (*df*). The position of\n"
20999  "the first spectrometer channel is set to f_grid[0]+df/2.\n"
21000  "The centre frequency of channels are returned as *y_f*.\n"
21001  "\n"
21002  "Auxiliary variables and *jacobian*s are not handled.\n"),
21003  AUTHORS("Patrick Eriksson"),
21004  OUT("y", "y_f"),
21005  GOUT(),
21006  GOUT_TYPE(),
21007  GOUT_DESC(),
21008  IN("iy", "stokes_dim", "f_grid"),
21009  GIN("df"),
21010  GIN_TYPE("Numeric"),
21011  GIN_DEFAULT(NODEF),
21012  GIN_DESC("Selected frequency resolution.")));
21013 
21014  md_data_raw.push_back(create_mdrecord(
21015  NAME("z_fieldFromHSE"),
21016  DESCRIPTION(
21017  "Force altitudes to fulfil hydrostatic equilibrium.\n"
21018  "\n"
21019  "The method applies hydrostatic equilibrium. A mixture of \"dry\n"
21020  "air\" and water vapour (if present as *abs_species* tag) is assumed.\n"
21021  "That is, the air is assumed to be well mixed and its weight, apart\n"
21022  "from the water vapour, is constant (*molarmass_dry_air*). In\n"
21023  "addition, the effect of any particles (including liquid and ice\n"
21024  "particles) is neglected.\n"
21025  "\n"
21026  "The output is an update of *z_field*. This variable is expected to\n"
21027  "contain approximative altitudes when calling the function. The\n"
21028  "altitude matching *p_hse* is kept constant. Other input altitudes can\n"
21029  "basically be arbitrary, but good estimates give quicker calculations.\n"
21030  "\n"
21031  "The calculations are repeated until the change in altitude is below\n"
21032  "*z_hse_accuracy*. An iterative process is needed as gravity varies\n"
21033  "with altitude.\n"
21034  "\n"
21035  "For 1D and 2D, the geographical position is taken from *lat_true*\n"
21036  "and *lon_true*.\n"),
21037  AUTHORS("Patrick Eriksson"),
21038  OUT("z_field"),
21039  GOUT(),
21040  GOUT_TYPE(),
21041  GOUT_DESC(),
21042  IN("atmosphere_dim",
21043  "p_grid",
21044  "lat_grid",
21045  "lon_grid",
21046  "lat_true",
21047  "lon_true",
21048  "abs_species",
21049  "t_field",
21050  "z_field",
21051  "vmr_field",
21052  "refellipsoid",
21053  "z_surface",
21054  "atmfields_checked",
21055  "g0_agenda",
21056  "molarmass_dry_air",
21057  "p_hse",
21058  "z_hse_accuracy"),
21059  GIN(),
21060  GIN_TYPE(),
21061  GIN_DEFAULT(),
21062  GIN_DESC()));
21063 }
GIN_TYPE
#define GIN_TYPE(...)
Definition: methods.cc:118
global_data::md_data_raw
const Array< MdRecord > md_data_raw
Lookup information for workspace methods.
Definition: methods.cc:39
IN
#define IN(...)
Definition: methods.cc:114
AGENDAMETHOD
#define AGENDAMETHOD(x)
Definition: methods.cc:125
GIN_DESC
#define GIN_DESC(...)
Definition: methods.cc:122
PASSWSVNAMES
#define PASSWSVNAMES(x)
Definition: methods.cc:128
GOUT_DESC
#define GOUT_DESC(...)
Definition: methods.cc:112
PASSWORKSPACE
#define PASSWORKSPACE(x)
Definition: methods.cc:127
USES_TEMPLATES
#define USES_TEMPLATES(x)
Definition: methods.cc:126
Array
This can be used to make arrays out of anything.
Definition: array.h:108
GIN
#define GIN(...)
Definition: methods.cc:116
get_array_groups_as_string
String get_array_groups_as_string(bool basetype_is_group, bool return_basetype_only)
Return string list of array types.
Definition: groups.cc:232
OUT
#define OUT(...)
Definition: methods.cc:106
create_mdrecord
MdRecord create_mdrecord(const char(&name)[LEN_OF_NAME], const char(&description)[LEN_OF_DESCRIPTION], const std::array< String, NUM_OF_AUTHORS > &authors, const std::array< String, NUM_OF_OUTPUTS > &output, const std::array< String, NUM_OF_GOUT_ARGS > &gout, const std::array< String, NUM_OF_GOUT_TYPES > &gouttype, const std::array< String, NUM_OF_GOUT_DESCRIPTIONS > &goutdesc, const std::array< String, NUM_OF_INPUTS > &input, const std::array< String, NUM_OF_GIN_ARGS > &gin, const std::array< String, NUM_OF_GIN_TYPES > &gintype, const std::array< String, NUM_OF_GIN_DEFAULTS > &gindefault, const std::array< String, NUM_OF_GIN_DESCRIPTIONS > &gindesc, Ts ... flags)
Definition: methods.cc:62
my_basic_string< char >
ArrayOfString
Array< String > ArrayOfString
An array of Strings.
Definition: mystring.h:283
NODEF
#define NODEF
Definition: methods.h:35
GIN_DEFAULT
#define GIN_DEFAULT(...)
Definition: methods.cc:120
AUTHORS
#define AUTHORS(...)
Definition: methods.cc:104
DESCRIPTION
#define DESCRIPTION(x)
Definition: methods.cc:103
SETMETHOD
#define SETMETHOD(x)
Definition: methods.cc:124
NAME
#define NAME(x)
Definition: methods.cc:102
MdRecord
All information for one workspace method.
Definition: methods.h:41
global_data
Definition: agenda_record.cc:33
String
my_basic_string< char > String
The String type for ARTS.
Definition: mystring.h:280
string_array
std::array< String, sizeof...(T)> string_array(const T &... input)
Definition: methods.cc:44
global_data::wsv_group_names
const ArrayOfString wsv_group_names
The names associated with Wsv groups as Strings.
Definition: global_data.h:93
GOUT_TYPE
#define GOUT_TYPE(...)
Definition: methods.cc:110
methods.h
Declaration of the class MdRecord.
GOUT
#define GOUT(...)
Definition: methods.cc:108
wsv_aux.h
Auxiliary header stuff related to workspace variable groups.
define_md_data_raw
void define_md_data_raw()
Definition: methods.cc:191
arts.h
The global header file for ARTS.