LCOV - code coverage report
Current view: top level - atmosphere/ATM - ATMSkyStatus.h (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 55 86 64.0 %
Date: 2024-10-10 19:51:30 Functions: 19 26 73.1 %

          Line data    Source code
       1             : #ifndef _ATM_SKYSTATUS_H
       2             : #define _ATM_SKYSTATUS_H
       3             : /*******************************************************************************
       4             :  * ALMA - Atacama Large Millimiter Array
       5             :  * (c) Instituto de Estructura de la Materia, 2009
       6             :  *
       7             :  * This library is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU Lesser General Public
       9             :  * License as published by the Free Software Foundation; either
      10             :  * version 2.1 of the License, or (at your option) any later version.
      11             :  *
      12             :  * This library is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :  * Lesser General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU Lesser General Public
      18             :  * License along with this library; if not, write to the Free Software
      19             :  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
      20             :  *
      21             :  * "@(#) $Id: ATMSkyStatus.h Exp $"
      22             :  *
      23             :  * who       when      what
      24             :  * --------  --------  ----------------------------------------------
      25             :  * pardo     24/03/09  created
      26             :  */
      27             : 
      28             : #ifndef __cplusplus
      29             : #error This is a C++ include file and cannot be used from plain C
      30             : #endif
      31             : 
      32             : #include "ATMCommon.h"
      33             : #include "ATMRefractiveIndexProfile.h"
      34             : #include "ATMWaterVaporRadiometer.h"
      35             : #include "ATMWVRMeasurement.h"
      36             : 
      37             : //#include <math.h>
      38             : #include <string>
      39             : #include <vector>
      40             : 
      41             : using std::string;
      42             : using std::vector;
      43             : 
      44             : ATM_NAMESPACE_BEGIN
      45             : 
      46             : /*! \brief From the layerThickness and layerTemperature arrays (from AtmProfile),
      47             :  *   the RefractiveIndexProfile array, and a brightness temperature measured to
      48             :  *   the sky at the corresponding frequency, this Class retrieves the water vapor
      49             :  *   column that corresponds to the measurement.
      50             :  *
      51             :  *   The strating point will therefore be an RefractiveIndexProfile object form
      52             :  *   which the essential information will be inherited: layerThickness,
      53             :  *   layerTemperature vectors (these two inherited themselves from AtmProfile),
      54             :  *   and absTotalDry and absTotalWet arrays. The numerical methods
      55             :  *   will be an iteration wh2o to match the measured brightness temperature
      56             :  */
      57             : class SkyStatus: public RefractiveIndexProfile
      58             : {
      59             : public:
      60             : 
      61             :       //@{
      62             : 
      63             :   /** The basic constructor. It will allow to perform forward radiative transfer enquires in
      64             :    *  the spectral bands of refractiveIndexProfile, and to use some of these bands for water vapor retrievals.
      65             :    *  The basic constructor needs at least an  RefractiveIndexProfile object (it brings the spectral information via the
      66             :    *  SpectralGrid object inherited by it). Additional inputs can be the
      67             :    *  Air mass (default 1.0), sky background temperature (default 2.73 K), and user water vapor column (default 1 mm).
      68             :    *  Methods inside the class allow to retrieve the water vapor column and eventually update the user value to the retrieved one.
      69             :    *  In order to perform such retrievals, the numerical methods will need as inputs the measured T_EBBs towards the sky in
      70             :    *  some spectral bands that will be designed as water vapor radiometry channels. The sideband gains and coupling to the sky
      71             :    *  of these vapor radiometry channels should also be inputs of the retrieval methods, otherwise they will be set to default
      72             :    *  values. See documentation ef particular methods for more information.
      73             :    */
      74             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile);
      75             :   /** Class constructor with additional inputs */
      76             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      77             :             double airMass);
      78             :   /** Class constructor with additional inputs */
      79             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      80             :             const Temperature &temperatureBackground);
      81             :   /** Class constructor with additional inputs */
      82             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      83             :             const Length &wh2o);
      84             :   /** Class constructor with additional inputs */
      85             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      86             :             const Temperature &temperatureBackground,
      87             :             double airMass);
      88             :   /** Class constructor with additional inputs */
      89             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      90             :             double airMass,
      91             :             const Temperature &temperatureBackground);
      92             :   /** Class constructor with additional inputs */
      93             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      94             :             const Length &wh2o,
      95             :             double airMass);
      96             :   /** Class constructor with additional inputs */
      97             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
      98             :             double airMass,
      99             :             const Length &wh2o);
     100             :   /** Class constructor with additional inputs */
     101             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     102             :             const Length &wh2o,
     103             :             const Temperature &temperatureBackground);
     104             :   /** Class constructor with additional inputs */
     105             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     106             :             const Temperature &temperatureBackground,
     107             :             const Length &wh2o);
     108             :   /** Class constructor with additional inputs */
     109             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     110             :             const Temperature &temperatureBackground,
     111             :             double airMass,
     112             :             const Length &wh2o);
     113             :   /** Class constructor with additional inputs */
     114             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     115             :             const Temperature &temperatureBackground,
     116             :             const Length &wh2o,
     117             :             double airMass);
     118             :   /** Class constructor with additional inputs */
     119             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     120             :             double airMass,
     121             :             const Temperature &temperatureBackground,
     122             :             const Length &wh2o);
     123             :   /** Class constructor with additional inputs */
     124             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     125             :             double airMass,
     126             :             const Length &wh2o,
     127             :             const Temperature &temperatureBackground);
     128             :   /** Class constructor with additional inputs */
     129             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     130             :             const Length &wh2o,
     131             :             const Temperature &temperatureBackground,
     132             :             double airMass);
     133             :   /** Class constructor with additional inputs */
     134             :   SkyStatus(const RefractiveIndexProfile &refractiveIndexProfile,
     135             :             const Length &wh2o,
     136             :             double airMass,
     137             :             const Temperature &temperatureBackground);
     138             : 
     139             :   /** A copy constructor for deep copy   */
     140             :   SkyStatus(const SkyStatus &);
     141             : 
     142             :   virtual ~SkyStatus();
     143             : 
     144             :   //@}
     145             : 
     146             :   //@{
     147             : 
     148             : 
     149             :   /** Accessor to get the user water vapor column. This is the water vapor column used for forward
     150             :    radiative transfer calculations. It can be equal to wh2o_retrieved_ when this one is avalilable
     151             :    and the proper setter or update accessor (retrieveandupdateWaterVapor) has been used. */
     152        9640 :   Length getUserWH2O() const { return wh2o_user_; }
     153             :   /** Setter for user zenith water vapor column for forward radiative transfer calculations. The user
     154             :    zenith water vapor column equals the retrieved zenith water vapor column from H2O radiometers,
     155             :    every time the last one is derived with the retrieveandupdateWaterVapor accessor.*/
     156           3 :   void setUserWH2O(const Length &wh2o)
     157             :   {
     158           3 :     if(wh2o.get() == wh2o_user_.get()) {
     159             :     } else {
     160           2 :       wh2o_user_ = wh2o;
     161             :     }
     162           3 :   }
     163             :   /** Alternative form of the setter for user zenith water vapor column for forward radiative transfer calculations. The user
     164             :    zenith water vapor column equals the retrieved zenith water vapor column from H2O radiometers,
     165             :    every time the last one is derived with the retrieveandupdateWaterVapor accessor.*/
     166           2 :   void setUserWH2O(double dwh2o, const string &units)
     167             :   {
     168           2 :     Length wh2o(dwh2o, units);
     169           2 :     if(wh2o.get() == wh2o_user_.get()) {
     170             :     } else {
     171           2 :       wh2o_user_ = wh2o;
     172             :     }
     173           2 :   }
     174             :   /** Accessor to get airmass */
     175          17 :   double getAirMass() const { return airMass_; }
     176             :   /** Setter for air mass in SkyStatus without performing water vapor retrieval */
     177           3 :   void setAirMass(double airMass)
     178             :   {
     179           3 :     if(airMass == airMass_) {
     180             :     } else {
     181           1 :       airMass_ = airMass;
     182             :     }
     183           3 :   }
     184             :   /** Accessor to get sky background temperature */
     185             :   Temperature getSkyBackgroundTemperature() const { return skyBackgroundTemperature_; }
     186             :   /** Setter for sky background temperature in SkyStatus without
     187             :    performing water vapor retrieval */
     188             :   void setSkyBackgroundTemperature(const Temperature &skyBackgroundTemperature)
     189             :   {
     190             :     if(skyBackgroundTemperature.get(Temperature::UnitKelvin) == skyBackgroundTemperature_.get(Temperature::UnitKelvin)) {
     191             :     } else {
     192             :       skyBackgroundTemperature_
     193             :           = Temperature(skyBackgroundTemperature.get(Temperature::UnitKelvin), Temperature::UnitKelvin);
     194             :     }
     195             :   }
     196             : 
     197             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window 0, for the current conditions
     198             :    and a perfect sky coupling */
     199           2 :   Temperature getAverageTebbSky()
     200             :   {
     201           2 :     unsigned int n = 0;
     202           2 :     return getAverageTebbSky(n);
     203             :   }
     204             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid, for the current conditions
     205             :    and a perfect sky coupling */
     206           3 :   Temperature getAverageTebbSky(unsigned int spwid)
     207             :   {
     208             :     return getAverageTebbSky(spwid,
     209           6 :                              getUserWH2O(),
     210             :                              getAirMass(),
     211             :                              1.0,
     212           9 :                              getGroundTemperature());
     213             :   }
     214             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window 0, for the current
     215             :    conditions, except water column wh2o, and a perfect sky coupling */
     216           1 :   Temperature getAverageTebbSky(const Length &wh2o) { return getAverageTebbSky(0, wh2o); }
     217             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid, for the current
     218             :    conditions, except water column wh2o, and a perfect sky coupling */
     219           1 :   Temperature getAverageTebbSky(unsigned int spwid, const Length &wh2o)
     220             :   {
     221             :     return getAverageTebbSky(spwid,
     222             :                              wh2o,
     223             :                              getAirMass(),
     224             :                              1.0,
     225           2 :                              getGroundTemperature());
     226             :   }
     227             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window 0, for the current
     228             :    conditions, except Air Mass airmass, and a perfect sky coupling */
     229             :   Temperature getAverageTebbSky(double airmass) { return getAverageTebbSky(0, airmass); }
     230             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid, for the current
     231             :    conditions, except Air Mass airmass, and a perfect sky coupling */
     232             :   Temperature getAverageTebbSky(unsigned int spwid, double airmass)
     233             :   {
     234             :     return getAverageTebbSky(spwid,
     235             :                              getUserWH2O(),
     236             :                              airmass,
     237             :                              1.0,
     238             :                              getGroundTemperature());
     239             :   }
     240             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window 0, for the current
     241             :    conditions, except water column wh2o, introducing a Sky Coupling and Spill Over Temperature */
     242             :   Temperature getAverageTebbSky(const Length &wh2o,
     243             :                                 double skycoupling,
     244             :                                 const Temperature &Tspill)
     245             :   {
     246             :     return getAverageTebbSky(0, wh2o, skycoupling, Tspill);
     247             :   }
     248             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid, for the current
     249             :    conditions, except water column wh2o, introducing a Sky Coupling and Spill Over Temperature */
     250             :   Temperature getAverageTebbSky(unsigned int spwid,
     251             :                                 const Length &wh2o,
     252             :                                 double skycoupling,
     253             :                                 const Temperature &Tspill)
     254             :   {
     255             :     return getAverageTebbSky(spwid, wh2o, getAirMass(), skycoupling, Tspill);
     256             :   }
     257             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window 0, for the current
     258             :    conditions, except Air Mass airmass, introducing a Sky Coupling and Spill Over Temperature */
     259             :   Temperature getAverageTebbSky(double airmass,
     260             :                                 double skycoupling,
     261             :                                 const Temperature &Tspill)
     262             :   {
     263             :     return getAverageTebbSky(0, airmass, skycoupling, Tspill);
     264             :   }
     265             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid, for the current
     266             :    conditions, except Air Mass airmass, introducing a Sky Coupling and Spill Over Temperature */
     267             :   Temperature getAverageTebbSky(unsigned int spwid,
     268             :                                 double airmass,
     269             :                                 double skycoupling,
     270             :                                 const Temperature &Tspill)
     271             :   {
     272             :     return getAverageTebbSky(spwid, getUserWH2O(), airmass, skycoupling, Tspill);
     273             :   }
     274             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window 0 for the current
     275             :    conditions, introducing a Sky Coupling and Spill Over Temperature */
     276             :   Temperature getAverageTebbSky(double skycoupling, const Temperature &Tspill)
     277             :   {
     278             :     unsigned int n = 0;
     279             :     return getAverageTebbSky(n, skycoupling, Tspill);
     280             :   }
     281             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid for the current
     282             :    conditions, introducing a Sky Coupling and Spill Over Temperature */
     283             :   Temperature getAverageTebbSky(unsigned int spwid,
     284             :                                 double skycoupling,
     285             :                                 const Temperature &Tspill)
     286             :   {
     287             :     return getAverageTebbSky(spwid,
     288             :                              getUserWH2O(),
     289             :                              getAirMass(),
     290             :                              skycoupling,
     291             :                              Tspill);
     292             :   }
     293             :   /** Accesor to the average Equivalent Blackbody Temperature in spectral window spwid, for Water Column
     294             :    wh2o, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     295             :   Temperature getAverageTebbSky(unsigned int spwid,
     296             :                                 const Length &wh2o,
     297             :                                 double airmass,
     298             :                                 double skycoupling,
     299             :                                 const Temperature &Tspill);
     300             : 
     301             :   Temperature getAverageTebbSky(unsigned int spwid,
     302             :                                 const Length &wh2o,
     303             :                                 double airmass,
     304             :                                 double skycoupling,
     305             :                                 double signalgain,
     306             :                                 const Temperature &Tspill);
     307             : 
     308             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel 0, for the currnet
     309             :    (user) Water Vapor Column, the current Air Mass, and perfect Sky Coupling to the sky */
     310             :   Temperature getTebbSky()
     311             :   {
     312             :     unsigned int n = 0;
     313             :     return getTebbSky(n);
     314             :   }
     315             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for the currnet
     316             :    (user) Water Vapor Column, the current Air Mass, and perfect Sky Coupling to the sky */
     317          10 :   Temperature getTebbSky(unsigned int nc) // There was reported a bug at Launchpad:
     318             :                                           // that the result did not take into account
     319             :                                           // the actual column of water. But it is not true.
     320             :                                           // The column of water is taken into account as
     321             :                                           // seen in the next accessor, that is referred by this one.
     322             :   {
     323          10 :     unsigned int n = 0;
     324          10 :     return getTebbSky(n, nc);
     325             :   }
     326             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for the currnet
     327             :    (user) Water Vapor Column, the current Air Mass, and perfect Sky Coupling to the sky */
     328          10 :   Temperature getTebbSky(unsigned int spwid, unsigned int nc)
     329             :   {
     330             :     return getTebbSky(spwid,
     331             :                       nc,
     332          20 :                       getUserWH2O(),
     333             :                       getAirMass(),
     334             :                       1.0,
     335          30 :                       Temperature(100, Temperature::UnitKelvin));
     336             :   }
     337             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel 0, for the currnet
     338             :    (user) Water Vapor Column, Air Mass airmass, and perfect Sky Coupling to the sky */
     339             :   Temperature getTebbSky(double airmass)
     340             :   {
     341             :     unsigned int n = 0;
     342             :     return getTebbSky(n, airmass);
     343             :   }
     344             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for the currnet
     345             :    (user) Water Vapor Column, Air Mass airmass, and perfect Sky Coupling to the sky */
     346             :   Temperature getTebbSky(unsigned int nc, double airmass)
     347             :   {
     348             :     unsigned int n = 0;
     349             :     return getTebbSky(n, nc, airmass);
     350             :   }
     351             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for the currnet
     352             :    (user) Water Vapor Column, Air Mass airmass, and perfect Sky Coupling to the sky */
     353             :   Temperature getTebbSky(unsigned int spwid, unsigned int nc, double airmass)
     354             :   {
     355             :     return getTebbSky(spwid, nc, getUserWH2O(), airmass, 1.0, Temperature(100,
     356             :                                                                           Temperature::UnitKelvin));
     357             :   }
     358             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel 0, for Water
     359             :    Vapor Column wh2o, the current Air Mass, and perfect Sky Coupling to the sky */
     360             :   Temperature getTebbSky(const Length &wh2o)
     361             :   {
     362             :     unsigned int n = 0;
     363             :     return getTebbSky(n, wh2o);
     364             :   }
     365             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for Water
     366             :    Vapor Column wh2o, the current Air Mass, and perfect Sky Coupling to the sky */
     367             :   Temperature getTebbSky(unsigned int nc, const Length &wh2o)
     368             :   {
     369             :     unsigned int n = 0;
     370             :     return getTebbSky(n, nc, wh2o);
     371             :   }
     372             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for Water
     373             :    Vapor Column wh2o, the current Air Mass, and perfect Sky Coupling to the sky */
     374             :   Temperature getTebbSky(unsigned int spwid, unsigned int nc, const Length &wh2o)
     375             :   {
     376             :     return getTebbSky(spwid, nc, wh2o, getAirMass(), 1.0, Temperature(100, Temperature::UnitKelvin));
     377             :   }
     378             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for the current
     379             :    (user) Water Vapor Column and Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     380             :   Temperature getTebbSky(unsigned int nc,
     381             :                          double skycoupling,
     382             :                          const Temperature &Tspill)
     383             :   {
     384             :     unsigned int n = 0;
     385             :     return getTebbSky(n, nc, skycoupling, Tspill);
     386             :   }
     387             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for the current
     388             :    (user) Water Vapor Column and Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     389             :   Temperature getTebbSky(unsigned int spwid,
     390             :                          unsigned int nc,
     391             :                          double skycoupling,
     392             :                          const Temperature &Tspill)
     393             :   {
     394             :     return getTebbSky(spwid,
     395             :                       nc,
     396             :                       getUserWH2O(),
     397             :                       getAirMass(),
     398             :                       skycoupling,
     399             :                       Tspill);
     400             :   }
     401             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for Water
     402             :    Vapor Column wh2o, Air Mass airmass, and perfect Sky Coupling to the sky */
     403             :   Temperature getTebbSky(unsigned int nc, const Length &wh2o, double airmass)
     404             :   {
     405             :     unsigned int n = 0;
     406             :     return getTebbSky(n, nc, wh2o, airmass);
     407             :   }
     408             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for Water
     409             :    Vapor Column wh2o, Air Mass airmass, and perfect Sky Coupling to the sky */
     410             :   Temperature getTebbSky(unsigned int spwid,
     411             :                          unsigned int nc,
     412             :                          const Length &wh2o,
     413             :                          double airmass)
     414             :   {
     415             :     return getTebbSky(spwid, nc, wh2o, airmass, 1.0, Temperature(100, Temperature::UnitKelvin));
     416             :   }
     417             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for Water
     418             :    Vapor Column wh2o, the current Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     419             :   Temperature getTebbSky(unsigned int nc,
     420             :                          const Length &wh2o,
     421             :                          double skycoupling,
     422             :                          const Temperature &Tspill)
     423             :   {
     424             :     unsigned int n = 0;
     425             :     return getTebbSky(n, nc, wh2o, skycoupling, Tspill);
     426             :   }
     427             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for Water
     428             :    Vapor Column wh2o, the current Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     429             :   Temperature getTebbSky(unsigned int spwid,
     430             :                          unsigned int nc,
     431             :                          const Length &wh2o,
     432             :                          double skycoupling,
     433             :                          const Temperature &Tspill)
     434             :   {
     435             :     return getTebbSky(spwid, nc, wh2o, getAirMass(), skycoupling, Tspill);
     436             :   }
     437             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for the current
     438             :    User Water Column, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     439             :   Temperature getTebbSky(unsigned int nc,
     440             :                          double airmass,
     441             :                          double skycoupling,
     442             :                          const Temperature &Tspill)
     443             :   {
     444             :     unsigned int n = 0;
     445             :     return getTebbSky(n, nc, airmass, skycoupling, Tspill);
     446             :   }
     447             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for the current
     448             :    User Water Column, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     449             :   Temperature getTebbSky(unsigned int spwid,
     450             :                          unsigned int nc,
     451             :                          double airmass,
     452             :                          double skycoupling,
     453             :                          const Temperature &Tspill)
     454             :   {
     455             :     return getTebbSky(spwid, nc, getUserWH2O(), airmass, skycoupling, Tspill);
     456             :   }
     457             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window 0 and channel nc, for Water Column
     458             :    wh2o, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     459             :   Temperature getTebbSky(unsigned int nc,
     460             :                          const Length &wh2o,
     461             :                          double airmass,
     462             :                          double skycoupling,
     463             :                          const Temperature &Tspill)
     464             :   {
     465             :     unsigned int n = 0;
     466             :     return getTebbSky(n, nc, wh2o, airmass, skycoupling, Tspill);
     467             :   }
     468             :   /** Accesor to the Equivalent Blackbody Temperature in spectral window spwid and channel nc, for Water Column
     469             :    wh2o, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     470             :   Temperature getTebbSky(unsigned int spwid,
     471             :                          unsigned int nc,
     472             :                          const Length &wh2o,
     473             :                          double airmass,
     474             :                          double skycoupling,
     475             :                          const Temperature &Tspill);
     476             : 
     477             : 
     478             :    /** Accesor to the average Rayleigh-Jeans Temperature in spectral window 0, for the current conditions
     479             :    and a perfect sky coupling */
     480             :   Temperature getAverageTrjSky()
     481             :   {
     482             :     unsigned int n = 0;
     483             :     return getAverageTrjSky(n);
     484             :   }
     485             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid, for the current conditions
     486             :    and a perfect sky coupling */
     487             :   Temperature getAverageTrjSky(unsigned int spwid)
     488             :   {
     489             :     return getAverageTrjSky(spwid,
     490             :                              getUserWH2O(),
     491             :                              getAirMass(),
     492             :                              1.0,
     493             :                              getGroundTemperature());
     494             :   }
     495             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window 0, for the current
     496             :    conditions, except water column wh2o, and a perfect sky coupling */
     497             :   Temperature getAverageTrjSky(const Length &wh2o) { return getAverageTrjSky(0, wh2o); }
     498             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid, for the current
     499             :    conditions, except water column wh2o, and a perfect sky coupling */
     500             :   Temperature getAverageTrjSky(unsigned int spwid, const Length &wh2o)
     501             :   {
     502             :     return getAverageTrjSky(spwid,
     503             :                              wh2o,
     504             :                              getAirMass(),
     505             :                              1.0,
     506             :                              getGroundTemperature());
     507             :   }
     508             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window 0, for the current
     509             :    conditions, except Air Mass airmass, and a perfect sky coupling */
     510             :   Temperature getAverageTrjSky(double airmass) { return getAverageTrjSky(0, airmass); }
     511             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid, for the current
     512             :    conditions, except Air Mass airmass, and a perfect sky coupling */
     513             :   Temperature getAverageTrjSky(unsigned int spwid, double airmass)
     514             :   {
     515             :     return getAverageTrjSky(spwid,
     516             :                              getUserWH2O(),
     517             :                              airmass,
     518             :                              1.0,
     519             :                              getGroundTemperature());
     520             :   }
     521             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window 0, for the current
     522             :    conditions, except water column wh2o, introducing a Sky Coupling and Spill Over Temperature */
     523             :   Temperature getAverageTrjSky(const Length &wh2o,
     524             :                                 double skycoupling,
     525             :                                 const Temperature &Tspill)
     526             :   {
     527             :     return getAverageTrjSky(0, wh2o, skycoupling, Tspill);
     528             :   }
     529             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid, for the current
     530             :    conditions, except water column wh2o, introducing a Sky Coupling and Spill Over Temperature */
     531             :   Temperature getAverageTrjSky(unsigned int spwid,
     532             :                                 const Length &wh2o,
     533             :                                 double skycoupling,
     534             :                                 const Temperature &Tspill)
     535             :   {
     536             :     return getAverageTrjSky(spwid, wh2o, getAirMass(), skycoupling, Tspill);
     537             :   }
     538             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window 0, for the current
     539             :    conditions, except Air Mass airmass, introducing a Sky Coupling and Spill Over Temperature */
     540             :   Temperature getAverageTrjSky(double airmass,
     541             :                                 double skycoupling,
     542             :                                 const Temperature &Tspill)
     543             :   {
     544             :     return getAverageTrjSky(0, airmass, skycoupling, Tspill);
     545             :   }
     546             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid, for the current
     547             :    conditions, except Air Mass airmass, introducing a Sky Coupling and Spill Over Temperature */
     548             :   Temperature getAverageTrjSky(unsigned int spwid,
     549             :                                 double airmass,
     550             :                                 double skycoupling,
     551             :                                 const Temperature &Tspill)
     552             :   {
     553             :     return getAverageTrjSky(spwid, getUserWH2O(), airmass, skycoupling, Tspill);
     554             :   }
     555             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window 0 for the current
     556             :    conditions, introducing a Sky Coupling and Spill Over Temperature */
     557             :   Temperature getAverageTrjSky(double skycoupling, const Temperature &Tspill)
     558             :   {
     559             :     unsigned int n = 0;
     560             :     return getAverageTrjSky(n, skycoupling, Tspill);
     561             :   }
     562             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid for the current
     563             :    conditions, introducing a Sky Coupling and Spill Over Temperature */
     564             :   Temperature getAverageTrjSky(unsigned int spwid,
     565             :                                 double skycoupling,
     566             :                                 const Temperature &Tspill)
     567             :   {
     568             :     return getAverageTrjSky(spwid,
     569             :                              getUserWH2O(),
     570             :                              getAirMass(),
     571             :                              skycoupling,
     572             :                              Tspill);
     573             :   }
     574             :   /** Accesor to the average Rayleigh-Jeans Temperature in spectral window spwid, for Water Column
     575             :    wh2o, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     576             :   Temperature getAverageTrjSky(unsigned int spwid,
     577             :                                 const Length &wh2o,
     578             :                                 double airmass,
     579             :                                 double skycoupling,
     580             :                                 const Temperature &Tspill);
     581             : 
     582             :   Temperature getAverageTrjSky(unsigned int spwid,
     583             :                                 const Length &wh2o,
     584             :                                 double airmass,
     585             :                                 double skycoupling,
     586             :                                 double signalgain,
     587             :                                 const Temperature &Tspill);
     588             : 
     589             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel 0, for the currnet
     590             :    (user) Water Vapor Column, the current Air Mass, and perfect Sky Coupling to the sky */
     591             :   Temperature getTrjSky()
     592             :   {
     593             :     unsigned int n = 0;
     594             :     return getTrjSky(n);
     595             :   }
     596             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for the currnet
     597             :    (user) Water Vapor Column, the current Air Mass, and perfect Sky Coupling to the sky */
     598           0 :   Temperature getTrjSky(unsigned int nc) // There was reported a bug at Launchpad:
     599             :                                           // that the result did not take into account
     600             :                                           // the actual column of water. But it is not true.
     601             :                                           // The column of water is taken into account as
     602             :                                           // seen in the next accessor, that is referred by this one.
     603             :   {
     604           0 :     unsigned int n = 0;
     605           0 :     return getTrjSky(n, nc);
     606             :   }
     607             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for the currnet
     608             :    (user) Water Vapor Column, the current Air Mass, and perfect Sky Coupling to the sky */
     609           0 :   Temperature getTrjSky(unsigned int spwid, unsigned int nc)
     610             :   {
     611             :     return getTrjSky(spwid,
     612             :                       nc,
     613           0 :                       getUserWH2O(),
     614             :                       getAirMass(),
     615             :                       1.0,
     616           0 :                       Temperature(100, Temperature::UnitKelvin));
     617             :   }
     618             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel 0, for the currnet
     619             :    (user) Water Vapor Column, Air Mass airmass, and perfect Sky Coupling to the sky */
     620             :   Temperature getTrjSky(double airmass)
     621             :   {
     622             :     unsigned int n = 0;
     623             :     return getTrjSky(n, airmass);
     624             :   }
     625             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for the currnet
     626             :    (user) Water Vapor Column, Air Mass airmass, and perfect Sky Coupling to the sky */
     627             :   Temperature getTrjSky(unsigned int nc, double airmass)
     628             :   {
     629             :     unsigned int n = 0;
     630             :     return getTrjSky(n, nc, airmass);
     631             :   }
     632             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for the currnet
     633             :    (user) Water Vapor Column, Air Mass airmass, and perfect Sky Coupling to the sky */
     634             :   Temperature getTrjSky(unsigned int spwid, unsigned int nc, double airmass)
     635             :   {
     636             :     return getTrjSky(spwid, nc, getUserWH2O(), airmass, 1.0, Temperature(100,
     637             :                                                                          Temperature::UnitKelvin));
     638             :   }
     639             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel 0, for Water
     640             :    Vapor Column wh2o, the current Air Mass, and perfect Sky Coupling to the sky */
     641             :   Temperature getTrjSky(const Length &wh2o)
     642             :   {
     643             :     unsigned int n = 0;
     644             :     return getTrjSky(n, wh2o);
     645             :   }
     646             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for Water
     647             :    Vapor Column wh2o, the current Air Mass, and perfect Sky Coupling to the sky */
     648             :   Temperature getTrjSky(unsigned int nc, const Length &wh2o)
     649             :   {
     650             :     unsigned int n = 0;
     651             :     return getTrjSky(n, nc, wh2o);
     652             :   }
     653             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for Water
     654             :    Vapor Column wh2o, the current Air Mass, and perfect Sky Coupling to the sky */
     655             :   Temperature getTrjSky(unsigned int spwid, unsigned int nc, const Length &wh2o)
     656             :   {
     657             :     return getTrjSky(spwid, nc, wh2o, getAirMass(), 1.0, Temperature(100, Temperature::UnitKelvin));
     658             :   }
     659             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for the current
     660             :    (user) Water Vapor Column and Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     661             :   Temperature getTrjSky(unsigned int nc,
     662             :                          double skycoupling,
     663             :                          const Temperature &Tspill)
     664             :   {
     665             :     unsigned int n = 0;
     666             :     return getTrjSky(n, nc, skycoupling, Tspill);
     667             :   }
     668             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for the current
     669             :    (user) Water Vapor Column and Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     670             :   Temperature getTrjSky(unsigned int spwid,
     671             :                          unsigned int nc,
     672             :                          double skycoupling,
     673             :                          const Temperature &Tspill)
     674             :   {
     675             :     return getTrjSky(spwid,
     676             :                       nc,
     677             :                       getUserWH2O(),
     678             :                       getAirMass(),
     679             :                       skycoupling,
     680             :                       Tspill);
     681             :   }
     682             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for Water
     683             :    Vapor Column wh2o, Air Mass airmass, and perfect Sky Coupling to the sky */
     684             :   Temperature getTrjSky(unsigned int nc, const Length &wh2o, double airmass)
     685             :   {
     686             :     unsigned int n = 0;
     687             :     return getTrjSky(n, nc, wh2o, airmass);
     688             :   }
     689             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for Water
     690             :    Vapor Column wh2o, Air Mass airmass, and perfect Sky Coupling to the sky */
     691             :   Temperature getTrjSky(unsigned int spwid,
     692             :                          unsigned int nc,
     693             :                          const Length &wh2o,
     694             :                          double airmass)
     695             :   {
     696             :     return getTrjSky(spwid, nc, wh2o, airmass, 1.0, Temperature(100, Temperature::UnitKelvin));
     697             :   }
     698             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for Water
     699             :    Vapor Column wh2o, the current Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     700             :   Temperature getTrjSky(unsigned int nc,
     701             :                          const Length &wh2o,
     702             :                          double skycoupling,
     703             :                          const Temperature &Tspill)
     704             :   {
     705             :     unsigned int n = 0;
     706             :     return getTrjSky(n, nc, wh2o, skycoupling, Tspill);
     707             :   }
     708             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for Water
     709             :    Vapor Column wh2o, the current Air Mass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     710             :   Temperature getTrjSky(unsigned int spwid,
     711             :                          unsigned int nc,
     712             :                          const Length &wh2o,
     713             :                          double skycoupling,
     714             :                          const Temperature &Tspill)
     715             :   {
     716             :     return getTrjSky(spwid, nc, wh2o, getAirMass(), skycoupling, Tspill);
     717             :   }
     718             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for the current
     719             :    User Water Column, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     720             :   Temperature getTrjSky(unsigned int nc,
     721             :                          double airmass,
     722             :                          double skycoupling,
     723             :                          const Temperature &Tspill)
     724             :   {
     725             :     unsigned int n = 0;
     726             :     return getTrjSky(n, nc, airmass, skycoupling, Tspill);
     727             :   }
     728             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for the current
     729             :    User Water Column, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     730             :   Temperature getTrjSky(unsigned int spwid,
     731             :                          unsigned int nc,
     732             :                          double airmass,
     733             :                          double skycoupling,
     734             :                          const Temperature &Tspill)
     735             :   {
     736             :     return getTrjSky(spwid, nc, getUserWH2O(), airmass, skycoupling, Tspill);
     737             :   }
     738             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window 0 and channel nc, for Water Column
     739             :    wh2o, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     740             :   Temperature getTrjSky(unsigned int nc,
     741             :                          const Length &wh2o,
     742             :                          double airmass,
     743             :                          double skycoupling,
     744             :                          const Temperature &Tspill)
     745             :   {
     746             :     unsigned int n = 0;
     747             :     return getTrjSky(n, nc, wh2o, airmass, skycoupling, Tspill);
     748             :   }
     749             :   /** Accesor to the Rayleigh-Jeans Temperature in spectral window spwid and channel nc, for Water Column
     750             :    wh2o, Air Mass airmass, Sky Coupling skycoupling, and Spill Over Temperature Tspill */
     751             :   Temperature getTrjSky(unsigned int spwid,
     752             :                          unsigned int nc,
     753             :                          const Length &wh2o,
     754             :                          double airmass,
     755             :                          double skycoupling,
     756             :                          const Temperature &Tspill);
     757             : 
     758             : 
     759             :   /** Accesor to get the integrated zenith Wet Opacity for the current conditions, for a single
     760             :    frequency RefractiveIndexProfile object or for the point 0 of spectral window 0 of a
     761             :    multi-window RefractiveIndexProfile object.
     762             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     763             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     764             :   Opacity getWetOpacity(){unsigned int n = 0; return getWetOpacity(n);}
     765             :   Opacity getWetOpacityUpTo(Length refalti){unsigned int n = 0; return getWetOpacityUpTo(n, refalti);}
     766             :   /** Accesor to get the integrated zenith Wet Opacity for the current conditions,
     767             :    for the point nc of spectral window 0.
     768             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     769             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     770          22 :   Opacity getWetOpacity(unsigned int nc){return getH2OLinesOpacity(nc) + getH2OContOpacity(nc);}
     771             :   Opacity getWetOpacityUpTo(unsigned int nc, Length refalti){return getH2OLinesOpacityUpTo(nc, refalti) + getH2OContOpacityUpTo(nc, refalti);}
     772             :   /** Accesor to get the integrated zenith Wet Opacity for the current conditions,
     773             :    for the point nc of spectral window spwid.
     774             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     775             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     776           0 :   Opacity getWetOpacity(unsigned int spwid, unsigned int nc)
     777             :   {
     778           0 :   if(!spwidAndIndexAreValid(spwid, nc)) return (double) -999.0;
     779           0 :     return getWetOpacity(v_transfertId_[spwid] + nc);
     780             :   }
     781             :   Opacity getWetOpacityUpTo(unsigned int spwid, unsigned int nc, Length refalti)
     782             :   {
     783             :   if(!spwidAndIndexAreValid(spwid, nc)) return (double) -999.0;
     784             :   return getWetOpacityUpTo(v_transfertId_[spwid] + nc, refalti);
     785             :   }
     786             :   /** Accesor to get the average Wet Opacity for the current conditions,
     787             :    in spectral window spwid.
     788             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     789             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     790             :   Opacity getAverageWetOpacity(unsigned int spwid)
     791             :   {
     792             :     return RefractiveIndexProfile::getAverageWetOpacity(getGroundWH2O(),spwid)
     793             :         * ((getUserWH2O().get()) / (getGroundWH2O().get()));
     794             :   }
     795             :   Opacity getAverageH2OLinesOpacity(unsigned int spwid)
     796             :   {
     797             :     return RefractiveIndexProfile::getAverageH2OLinesOpacity(getGroundWH2O(),spwid)
     798             :         * ((getUserWH2O().get()) / (getGroundWH2O().get()));
     799             :   }
     800             :   Opacity getAverageH2OContOpacity(unsigned int spwid)
     801             :   {
     802             :     return RefractiveIndexProfile::getAverageH2OContOpacity(getGroundWH2O(),spwid)
     803             :         * ((getUserWH2O().get()) / (getGroundWH2O().get()));
     804             :   }
     805             : 
     806             :   Opacity getDryOpacity()
     807             :   {
     808             :     return RefractiveIndexProfile::getDryOpacity();
     809             :   }
     810          11 :   Opacity getDryOpacity(unsigned int nc)
     811             :   {
     812          11 :     return RefractiveIndexProfile::getDryOpacity(nc);
     813             :   }
     814           0 :   Opacity getDryOpacity(unsigned int spwid, unsigned int nc)
     815             :   {
     816           0 :     return RefractiveIndexProfile::getDryOpacity(spwid, nc);
     817             :   }
     818             :   Opacity getAverageDryOpacity(unsigned int spwid)
     819             :   {
     820             :     return RefractiveIndexProfile::getAverageDryOpacity(spwid);
     821             :   }
     822             : 
     823             :   Opacity getAverageO2LinesOpacity(unsigned int spwid)
     824             :   {
     825             :     return RefractiveIndexProfile::getAverageO2LinesOpacity(spwid);
     826             :   }
     827             :   Opacity getAverageO3LinesOpacity(unsigned int spwid)
     828             :   {
     829             :     return RefractiveIndexProfile::getAverageO3LinesOpacity(spwid);
     830             :   }
     831             :   Opacity getAverageN2OLinesOpacity(unsigned int spwid)
     832             :   {
     833             :     return RefractiveIndexProfile::getAverageN2OLinesOpacity(spwid);
     834             :   }
     835             :   Opacity getAverageNO2LinesOpacity(unsigned int spwid)
     836             :   {
     837             :     return RefractiveIndexProfile::getAverageNO2LinesOpacity(spwid);
     838             :   }
     839             :   Opacity getAverageSO2LinesOpacity(unsigned int spwid)
     840             :   {
     841             :     return RefractiveIndexProfile::getAverageSO2LinesOpacity(spwid);
     842             :   }
     843             :   Opacity getAverageCOLinesOpacity(unsigned int spwid)
     844             :   {
     845             :     return RefractiveIndexProfile::getAverageCOLinesOpacity(spwid);
     846             :   }
     847             :   Opacity getAverageDryContOpacity(unsigned int spwid)
     848             :   {
     849             :     return RefractiveIndexProfile::getAverageDryContOpacity(spwid);
     850             :   }
     851             : 
     852             :   Opacity getTotalOpacity()
     853             :   {
     854             :     return getWetOpacity() + getDryOpacity();
     855             :   }
     856           5 :   Opacity getTotalOpacity(unsigned int nc)
     857             :   {
     858          10 :     return getWetOpacity(nc) + getDryOpacity(nc);
     859             :   }
     860             :   Opacity getTotalOpacity(unsigned int spwid, unsigned int nc)
     861             :   {
     862             :     return getWetOpacity(spwid, nc) + getDryOpacity(spwid, nc);
     863             :   }
     864             :   Opacity getAverageTotalOpacity(unsigned int spwid)
     865             :   {
     866             :     return getAverageWetOpacity(spwid) + getAverageDryOpacity(spwid);
     867             :   }
     868             :   Opacity getTotalOpacityUpTo(Length refalti)
     869             :   {
     870             :     unsigned int n = 0;
     871             :     return getTotalOpacityUpTo(n, refalti);
     872             :   }
     873             :   //  Opacity getTotalOpacityUpTo(unsigned int nc, Length refalti);
     874             :   Opacity getTotalOpacityUpTo(unsigned int nc, Length refalti)
     875             :   {
     876             :     return getWetOpacityUpTo(nc,refalti) + getDryOpacityUpTo(nc,refalti);
     877             :   }
     878             :   Opacity getTotalOpacityUpTo(unsigned int spwid, unsigned int nc, Length refalti)
     879             :   {
     880             :     Opacity wrongOp(-999.0,Opacity::UnitNeper);
     881             :     if(!spwidAndIndexAreValid(spwid, nc)) return wrongOp;
     882             :     return getTotalOpacityUpTo(v_transfertId_[spwid] + nc, refalti);
     883             :   }
     884             :   /** Accesor to get the integrated zenith H2O Lines Opacity for the current conditions,
     885             :    for a single frequency RefractiveIndexProfile object or for the point 0 of spectral
     886             :    window 0 of a multi-window RefractiveIndexProfile object.
     887             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     888             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     889             :   Opacity getH2OLinesOpacity(){ unsigned int n = 0; return getH2OLinesOpacity(n);}
     890             :   Opacity getH2OLinesOpacityUpTo(Length refalti){ unsigned int n = 0; return getH2OLinesOpacityUpTo(n, refalti);}
     891             :   /** Accesor to get the integrated zenith H2O Lines Opacity for the current conditions,
     892             :    for the point nc of spectral window 0.
     893             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     894             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     895             :   Opacity getH2OLinesOpacity(unsigned int nc);
     896             :   Opacity getH2OLinesOpacityUpTo(unsigned int nc, Length refalti);
     897             :   /** Accesor to get the integrated zenith H2O Lines Opacity for the current conditions,
     898             :    for the point nc of spectral window spwid.
     899             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     900             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     901             :   Opacity getH2OLinesOpacity(unsigned int spwid, unsigned int nc){ if(!spwidAndIndexAreValid(spwid, nc)) return (double) -999.0; return getH2OLinesOpacity(v_transfertId_[spwid] + nc);}
     902             :   Opacity getH2OLinesOpacityUpTo(unsigned int spwid, unsigned int nc, Length refalti){ if(!spwidAndIndexAreValid(spwid, nc)) return (double) -999.0; return getH2OLinesOpacityUpTo(v_transfertId_[spwid] + nc, refalti);}
     903             :   /** Accesor to get the integrated zenith H2O Continuum Opacity for the current conditions,
     904             :    for a single frequency RefractiveIndexProfile object or for the point 0 of spectral
     905             :    window 0 of a multi-window RefractiveIndexProfile object.
     906             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     907             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     908             :   Opacity getH2OContOpacity(){unsigned int n = 0; return getH2OContOpacity(n);}
     909             :   Opacity getH2OContOpacityUpTo(Length refalti){unsigned int n = 0; return getH2OContOpacityUpTo(n, refalti);}
     910             :   /** Accesor to get the integrated zenith H2O Continuum Opacity for the current conditions,
     911             :    for the point nc of spectral window 0.
     912             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     913             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     914             :   Opacity getH2OContOpacity(unsigned int nc);
     915             :   Opacity getH2OContOpacityUpTo(unsigned int nc, Length refalti);
     916             :   /** Accesor to get the integrated zenith H2O Continuum Opacity for the current conditions,
     917             :    for the point nc of spectral window spwid.
     918             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     919             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     920             :   Opacity getH2OContOpacity(unsigned int spwid, unsigned int nc){ if(!spwidAndIndexAreValid(spwid, nc)) return (double) -999.0; return getH2OContOpacity(v_transfertId_[spwid] + nc);}
     921             :   Opacity getH2OContOpacityUpTo(unsigned int spwid, unsigned int nc, Length refalti){ if(!spwidAndIndexAreValid(spwid, nc)) return (double) -999.0; return getH2OContOpacityUpTo(v_transfertId_[spwid] + nc, refalti);}
     922             :   /** Accesor to get the integrated zenith H2O Atmospheric Phase Delay (Dispersive part)
     923             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     924             :    for the point 0 of spectral window 0 of a multi-window RefractiveIndexProfile object.
     925             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     926             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     927             :   Angle getDispersiveH2OPhaseDelay()
     928             :   {
     929             :     unsigned int n = 0;
     930             :     return getDispersiveH2OPhaseDelay(n);
     931             :   }
     932             :   /** Accesor to get the integrated zenith H2O Atmospheric Phase Delay (Dispersive part)
     933             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     934             :    for the point nc of spectral window 0.
     935             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     936             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     937             :   Angle getDispersiveH2OPhaseDelay(unsigned int nc);
     938             :   /** Accesor to get the integrated zenith H2O Atmospheric Phase Delay (Dispersive part)
     939             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     940             :    for the point nc of spectral window spwid.
     941             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     942             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     943             :   Angle getDispersiveH2OPhaseDelay(unsigned int spwid, unsigned int nc);
     944             : 
     945             :   /** Accesor to get the integrated zenith H2O Atmospheric Path length (Dispersive part)
     946             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     947             :    for the point 0 of spectral window 0 of a multi-window RefractiveIndexProfile object.
     948             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     949             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     950             :   Length getDispersiveH2OPathLength()
     951             :   {
     952             :     unsigned int n = 0;
     953             :     return getDispersiveH2OPathLength(n);
     954             :   }
     955             :   /** Accesor to get the integrated zenith H2O Atmospheric Path length (Dispersive part)
     956             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     957             :    for the point nc of spectral window 0.
     958             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     959             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     960             :   Length getDispersiveH2OPathLength(unsigned int nc);
     961             :   /** Accesor to get the integrated zenith H2O Atmospheric Path length (Dispersive part)
     962             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     963             :    for the point nc of spectral window spwid.
     964             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     965             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     966             :   Length getDispersiveH2OPathLength(unsigned int spwid, unsigned int nc);
     967             : 
     968             :   /** Accesor to get the integrated zenith H2O Atmospheric Phase Delay (Non-Dispersive part)
     969             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     970             :    for the point 0 of spectral window 0 of a multi-window RefractiveIndexProfile object.
     971             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     972             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     973             :   Angle getNonDispersiveH2OPhaseDelay()
     974             :   {
     975             :     unsigned int n = 0;
     976             :     return getNonDispersiveH2OPhaseDelay(n);
     977             :   }
     978             :   /** Accesor to get the integrated zenith H2O Atmospheric Phase Delay (Non-Dispersive part)
     979             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     980             :    for the point nc of spectral window 0.
     981             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     982             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     983             :   Angle getNonDispersiveH2OPhaseDelay(unsigned int nc);
     984             :   /** Accesor to get the integrated zenith H2O Atmospheric Phase Delay (Non-Dispersive part)
     985             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     986             :    for the point nc of spectral window spwid.
     987             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     988             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     989             :   Angle getNonDispersiveH2OPhaseDelay(unsigned int spwid, unsigned int nc);
     990             : 
     991             :   /** Accesor to get the integrated zenith H2O Atmospheric Path length (Non-Dispersive part)
     992             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
     993             :    for the point 0 of spectral window 0 of a multi-window RefractiveIndexProfile object.
     994             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
     995             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
     996             :   Length getNonDispersiveH2OPathLength()
     997             :   {
     998             :     unsigned int n = 0;
     999             :     return getNonDispersiveH2OPathLength(n);
    1000             :   }
    1001             :   /** Accesor to get the integrated zenith H2O Atmospheric Path length (Non-Dispersive part)
    1002             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
    1003             :    for the point nc of spectral window 0.
    1004             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1005             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1006             :   Length getNonDispersiveH2OPathLength(unsigned int nc);
    1007             :   /** Accesor to get the integrated zenith H2O Atmospheric Path length (Non-Dispersive part)
    1008             :    for the current conditions, for a single frequency RefractiveIndexProfile object or
    1009             :    for the point nc of spectral window spwid.
    1010             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1011             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1012             :   Length getNonDispersiveH2OPathLength(unsigned int spwid, unsigned int nc);
    1013             : 
    1014             :   /** Accessor to get the average integrated zenith Atmospheric Phase Delay (Dispersive part)
    1015             :    for the current conditions in spectral Window spwid.
    1016             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1017             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1018             :   Angle getAverageDispersiveH2OPhaseDelay(unsigned int spwid);
    1019             :   /** Accessor to get the average integrated zenith Atmospheric Phase Delay (Dispersive part)
    1020             :    for the current conditions in spectral Window 0.
    1021             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1022             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1023             :   Angle getAverageDispersiveH2OPhaseDelay()
    1024             :   {
    1025             :     unsigned int n = 0;
    1026             :     return getAverageDispersiveH2OPhaseDelay(n);
    1027             :   }
    1028             :   /** Accessor to get the average integrated zenith Atmospheric Phase Delay (Non-Dispersive
    1029             :    part) in spectral Window spwid.
    1030             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1031             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1032             :   Angle getAverageNonDispersiveH2OPhaseDelay(unsigned int spwid);
    1033             :   /** Accessor to get the average integrated zenith Atmospheric Phase Delay (Non-Dispersive
    1034             :    part) in spectral Window 0.
    1035             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1036             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1037             :   Angle getAverageNonDispersiveH2OPhaseDelay()
    1038             :   {
    1039             :     unsigned int n = 0;
    1040             :     return getAverageNonDispersiveH2OPhaseDelay(n);
    1041             :   }
    1042             : 
    1043             :   /** Accessor to get the average integrated zenith Atmospheric Path Length (Dispersive part)
    1044             :    in spectral Window spwid.
    1045             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1046             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1047             :   Length getAverageDispersiveH2OPathLength(unsigned int spwid);
    1048             :   /** Accessor to get the average integrated zenith Atmospheric Path Length (Dispersive part)
    1049             :    in spectral Window 0.
    1050             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1051             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1052             :   Length getAverageDispersiveH2OPathLength()
    1053             :   {
    1054             :     unsigned int n = 0;
    1055             :     return getAverageDispersiveH2OPathLength(n);
    1056             :   }
    1057             :   /** Accessor to get the average integrated zenith Atmospheric Path Length (Non-Dispersive
    1058             :    part) in spectral Window spwid.
    1059             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1060             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1061             :   Length getAverageNonDispersiveH2OPathLength(unsigned int spwid);
    1062             :   /** Accessor to get the average integrated zenith Atmospheric Path Length (Non-Dispersive
    1063             :    part) in spectral Window 0.
    1064             :    There is overloading. The same accessor exists in RefractiveIndexProfile but in that
    1065             :    case the returned value corresponds to the zenith water vapor column of the AtmProfile object.*/
    1066             :   Length getAverageNonDispersiveH2OPathLength()
    1067             :   {
    1068             :     unsigned int n = 0;
    1069             :     return getAverageNonDispersiveH2OPathLength(n);
    1070             :   }
    1071             : 
    1072         240 :   Length getAverageH2OPathLength(unsigned int spwid)
    1073             :   {
    1074         480 :     return getAverageDispersiveH2OPathLength(spwid)
    1075         720 :         + getAverageNonDispersiveH2OPathLength(spwid);
    1076             :   }
    1077             :   Length getAverageH2OPathLength()
    1078             :   {
    1079             :     unsigned int n = 0;
    1080             :     return getAverageH2OPathLength(n);
    1081             :   }
    1082             :   double getAverageH2OPathLengthDerivative(unsigned int spwid)
    1083             :   {
    1084             :     return getAverageH2OPathLength(spwid).get(Length::UnitMicrons)
    1085             :         / getUserWH2O().get(Length::UnitMicrons);
    1086             :   } // in microns/micron_H2O
    1087             :   double getAverageH2OPathLengthDerivative()
    1088             :   {
    1089             :     unsigned int n = 0;
    1090             :     return getAverageH2OPathLengthDerivative(n);
    1091             :   } // in microns/micron_H2O
    1092             : 
    1093             : 
    1094             :   Angle getAverageH2OPhaseDelay(unsigned int spwid)
    1095             :   {
    1096             :     return getAverageDispersiveH2OPhaseDelay(spwid)
    1097             :         + getAverageNonDispersiveH2OPhaseDelay(spwid);
    1098             :   }
    1099             :   Angle getAverageH2OPhaseDelay()
    1100             :   {
    1101             :     unsigned int n = 0;
    1102             :     return getAverageH2OPhaseDelay(n);
    1103             :   }
    1104             : 
    1105         240 :   Length getAverageDispersiveDryPathLength(unsigned int spwid)
    1106             :   {
    1107         240 :     return getAverageO2LinesPathLength(spwid)
    1108         720 :         + getAverageO3LinesPathLength(spwid)
    1109         960 :         + getAverageN2OLinesPathLength(spwid)
    1110         960 :         + getAverageCOLinesPathLength(spwid)
    1111         960 :         + getAverageNO2LinesPathLength(spwid)
    1112         720 :         + getAverageSO2LinesPathLength(spwid);
    1113             :   }
    1114             :   Length getAverageDispersiveDryPathLength()
    1115             :   {
    1116             :     unsigned int n = 0;
    1117             :     return getAverageDispersiveDryPathLength(n);
    1118             :   }
    1119             : 
    1120         240 :   Length getAverageNonDispersiveDryPathLength(unsigned int spwid)
    1121             :   {
    1122         240 :     return RefractiveIndexProfile::getAverageNonDispersiveDryPathLength(spwid);
    1123             :   }
    1124             :   Length getAverageNonDispersiveDryPathLength()
    1125             :   {
    1126             :     unsigned int n = 0;
    1127             :     return getAverageNonDispersiveDryPathLength(n);
    1128             :   }
    1129             :   double
    1130             :       getAverageNonDispersiveDryPathLength_GroundPressureDerivative(unsigned int spwid);
    1131             :   double
    1132             :       getAverageNonDispersiveDryPathLength_GroundTemperatureDerivative(unsigned int spwid);
    1133             :   double
    1134             :       getAverageDispersiveDryPathLength_GroundPressureDerivative(unsigned int spwid);
    1135             :   double
    1136             :       getAverageDispersiveDryPathLength_GroundTemperatureDerivative(unsigned int spwid);
    1137             : 
    1138         240 :   Length getAverageO2LinesPathLength(unsigned int spwid)
    1139             :   {
    1140         240 :     return RefractiveIndexProfile::getAverageO2LinesPathLength(spwid);
    1141             :   }
    1142             :   Length getAverageO2LinesPathLength()
    1143             :   {
    1144             :     unsigned int n = 0;
    1145             :     return getAverageO2LinesPathLength(n);
    1146             :   }
    1147             : 
    1148             :   /** Setter for a new set of basic atmospheric parameters. Automatically updates the AtmProfile
    1149             :    (if generated from this basic atmospheric parameters), RefractiveIndexProfile, and SkyStatus
    1150             :    objects if the one or more value differ from the previous ones (there is overloading) */
    1151             :   bool setBasicAtmosphericParameters(const Length &altitude,
    1152             :                                      const Pressure &groundPressure,
    1153             :                                      const Temperature &groundTemperature,
    1154             :                                      double tropoLapseRate,
    1155             :                                      const Humidity &humidity,
    1156             :                                      const Length &wvScaleHeight);
    1157             :   /** The same setter is available for only one parameter each time (except for "Length wvScaleHeight" due to a type
    1158             :    conflict with "Length altitude") */
    1159             :   bool setBasicAtmosphericParameters(const Length &altitude);
    1160             :   /** The same setter is available for only one parameter each time (except for "Length wvScaleHeight" due to a type
    1161             :    conflict with "Length altitude") */
    1162             :   bool setBasicAtmosphericParameters(const Temperature &groundTemperature);
    1163             :   /** The same setter is available for only one parameter each time (except for "Length wvScaleHeight" due to a type
    1164             :    conflict with "Length altitude") */
    1165             :   bool setBasicAtmosphericParameters(const Pressure &groundPressure);
    1166             :   /** The same setter is available for only one parameter each time (except for "Length wvScaleHeight" due to a type
    1167             :    conflict with "Length altitude") */
    1168             :   bool setBasicAtmosphericParameters(const Humidity &humidity);
    1169             :   /** The same setter is available for only one parameter each time (except for "Length wvScaleHeight" due to a type
    1170             :    conflict with "Length altitude") */
    1171             :   bool setBasicAtmosphericParameters(double tropoLapseRate);
    1172             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1173             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1174             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1175             :   bool setBasicAtmosphericParameters(const Length &altitude,
    1176             :                                      const Temperature &groundTemperature);
    1177             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1178             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1179             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1180             :   bool setBasicAtmosphericParameters(const Length &altitude, const Pressure &groundPressure);
    1181             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1182             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1183             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1184             :   bool setBasicAtmosphericParameters(const Length &altitude, const Humidity &humidity);
    1185             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1186             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1187             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1188             :   bool setBasicAtmosphericParameters(const Length &altitude, double tropoLapseRate);
    1189             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1190             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1191             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1192             :   bool setBasicAtmosphericParameters(const Length &altitude, const Length &wvScaleHeight);
    1193             :   /** The same setter is available for couples of parameters. The order does not matter */
    1194             :   bool setBasicAtmosphericParameters(const Temperature &groundTemperature,
    1195             :                                      const Pressure &groundPressure);
    1196             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1197             :   bool setBasicAtmosphericParameters(const Pressure &groundPressure,
    1198             :                                      const Temperature &groundTemperature);
    1199             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1200             :   bool setBasicAtmosphericParameters(const Temperature &groundTemperature,
    1201             :                                      const Humidity &humidity);
    1202             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1203             :   bool setBasicAtmosphericParameters(const Humidity &humidity,
    1204             :                                      const Temperature &groundTemperature);
    1205             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1206             :   bool setBasicAtmosphericParameters(const Temperature &groundTemperature,
    1207             :                                      double tropoLapseRate);
    1208             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1209             :   bool setBasicAtmosphericParameters(double tropoLapseRate,
    1210             :                                      const Temperature &groundTemperature);
    1211             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1212             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1213             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1214             :   bool setBasicAtmosphericParameters(const Temperature &groundTemperature,
    1215             :                                      const Length &wvScaleHeight);
    1216             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1217             :   bool
    1218             :       setBasicAtmosphericParameters(const Pressure &groundPressure, const Humidity &humidity);
    1219             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1220             :   bool
    1221             :       setBasicAtmosphericParameters(const Humidity &humidity, const Pressure &groundPressure);
    1222             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1223             :   bool setBasicAtmosphericParameters(const Pressure &groundPressure,
    1224             :                                      double tropoLapseRate);
    1225             :   /** The same setter is available for couples of parameters. The order does not matter */
    1226             :   bool setBasicAtmosphericParameters(double tropoLapseRate,
    1227             :                                      const Pressure &groundPressure);
    1228             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1229             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1230             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1231             :   bool setBasicAtmosphericParameters(const Pressure &groundPressure,
    1232             :                                      const Length &wvScaleHeight);
    1233             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1234             :   bool setBasicAtmosphericParameters(const Humidity &humidity, double tropoLapseRate);
    1235             :   /** The same setter is available for couples of parameters. The order does not matter  */
    1236             :   bool setBasicAtmosphericParameters(double tropoLapseRate, const Humidity &humidity);
    1237             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1238             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1239             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1240             :   bool setBasicAtmosphericParameters(const Humidity &humidity, const Length &wvScaleHeight);
    1241             :   /** The same setter is available for couples of parameters. The order does not matter except for (Length altitude) and
    1242             :    (Length wvScaleHeight) because they are of the same type (Length). The convention is that if a type Length is in first
    1243             :    position, it represents the altitude, and if it is in second position, it represents wvScaleHeight */
    1244             :   bool setBasicAtmosphericParameters(double tropoLapseRate,
    1245             :                                      const Length &wvScaleHeight);
    1246             : 
    1247             :   /** Setter of new spectral windows (adds frequencies to the SpectralGrid and calculates the corresponding absorption coefficients) */
    1248             :   void addNewSpectralWindow(unsigned int numChan,
    1249             :                             unsigned int refChan,
    1250             :                             const Frequency &refFreq,
    1251             :                             const Frequency &chanSep)
    1252             :   {
    1253             :     RefractiveIndexProfile::add(numChan, refChan, refFreq, chanSep);
    1254             :   }
    1255             :   /** Setter of new spectral windows (adds frequencies to the SpectralGrid and calculates the corresponding absorption coefficients) */
    1256             :   void addNewSpectralWindow(unsigned int numChan,
    1257             :                             unsigned int refChan,
    1258             :                             double* chanFreq,
    1259             :                             Frequency::Units freqUnits)
    1260             :   {
    1261             :     RefractiveIndexProfile::add(numChan, refChan, chanFreq, freqUnits);
    1262             :   }
    1263             :   /** Setter of new spectral windows (adds frequencies to the SpectralGrid and calculates the corresponding absorption coefficients) */
    1264             :   void addNewSpectralWindow(unsigned int numChan,
    1265             :                             double refFreq,
    1266             :                             double* chanFreq,
    1267             :                             Frequency::Units freqUnits)
    1268             :   {
    1269             :     RefractiveIndexProfile::add(numChan, refFreq, chanFreq, freqUnits);
    1270             :   }
    1271             :   /** Setter of new spectral windows (adds frequencies to the SpectralGrid and calculates the corresponding absorption coefficients) */
    1272             :   void addNewSpectralWindow(unsigned int numChan,
    1273             :                             double refFreq,
    1274             :                             const vector<double> &chanFreq,
    1275             :                             Frequency::Units freqUnits)
    1276             :   {
    1277             :     RefractiveIndexProfile::add(numChan, refFreq, chanFreq, freqUnits);
    1278             :   }
    1279             :   /** Setter of new spectral windows (adds frequencies to the SpectralGrid and calculates the corresponding absorption coefficients) */
    1280             :   void addNewSpectralWindow(unsigned int numChan,
    1281             :                             unsigned int refChan,
    1282             :                             const Frequency &refFreq,
    1283             :                             const Frequency &chanSep,
    1284             :                             const Frequency &intermediateFreq,
    1285             :                             const SidebandSide &sbSide,
    1286             :                             const SidebandType &sbType)
    1287             :   {
    1288             :     RefractiveIndexProfile::add(numChan,
    1289             :                                 refChan,
    1290             :                                 refFreq,
    1291             :                                 chanSep,
    1292             :                                 intermediateFreq,
    1293             :                                 sbSide,
    1294             :                                 sbType);
    1295             :   }
    1296             :   void addNewSpectralWindow(const vector<Frequency> &chanFreq)
    1297             :   {
    1298             :     RefractiveIndexProfile::add(chanFreq);
    1299             :   }
    1300             : 
    1301             :   /** Zenith Water Vapor column retrieval based on fitting the vector of zenith atmospheric transmission given as input.
    1302             :    Requirements: A) The FTS individual frequencies must be in spectral window 0, and B) the input zenith atmospheric
    1303             :    transmission vector should match those frequencies (i.e. both vectors should have the same size),
    1304             :    C) the air mass for the retrieval is the current one. If a different one is desired, it should be
    1305             :    changed using the setAirMass setter. */
    1306             :   Length WaterVaporRetrieval_fromFTS(const vector<double> &v_transmission)
    1307             :   {
    1308             :     unsigned int spwId = 0;
    1309             :     Frequency f1(-999, Frequency::UnitGigaHertz);
    1310             :     Frequency f2(-999, Frequency::UnitGigaHertz);
    1311             :     return WaterVaporRetrieval_fromFTS(spwId, v_transmission, f1, f2);
    1312             :   }
    1313             :   /** Same as above but using for the retrieval only the measurements between frequencies f1 and f2>f1 */
    1314             :   Length WaterVaporRetrieval_fromFTS(const vector<double> &v_transmission,
    1315             :                                      const Frequency &f1,
    1316             :                                      const Frequency &f2)
    1317             :   {
    1318             :     unsigned int spwId = 0;
    1319             :     return WaterVaporRetrieval_fromFTS(spwId, v_transmission, f1, f2);
    1320             :   }
    1321             :   /** Zenith Water Vapor column retrieval based on fitting the vector of zenith atmospheric transmission given as input.
    1322             :    Requirements: A) The FTS individual frequencies must be in spectral window spwId, and B) the input zenith atmospheric
    1323             :    transmission vector should match those frequencies (i.e. both vectors should have the same size),
    1324             :    C) the air mass for the retrieval is the current one. If a different one is desired, it should be
    1325             :    changed using the setAirMass setter. */
    1326             :   Length WaterVaporRetrieval_fromFTS(unsigned int spwId,
    1327             :                                      const vector<double> &v_transmission)
    1328             :   {
    1329             :     Frequency f1(-999, Frequency::UnitGigaHertz);
    1330             :     Frequency f2(-999, Frequency::UnitGigaHertz);
    1331             :     return WaterVaporRetrieval_fromFTS(spwId, v_transmission, f1, f2);
    1332             :   }
    1333             :   /** Same as above but using for the retrieval only the measurements between frequencies f1 and f2>f1 */
    1334             :   Length WaterVaporRetrieval_fromFTS(unsigned int spwId,
    1335             :                                      const vector<double> &v_transmission,
    1336             :                                      const Frequency &f1,
    1337             :                                      const Frequency &f2);
    1338             : 
    1339             :   /** Zenith Water Vapor column retrieval based on fitting measured brightness temperatures of the atmosphere */
    1340             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1341             :                                       const vector<Percent> &signalGain,
    1342             :                                       const vector<vector<Temperature> > &vv_tebb,
    1343             :                                       const vector<vector<double> > &spwId_filters,
    1344             :                                       double airmass,
    1345             :                                       const vector<double> &skycoupling,
    1346             :                                       const vector<Temperature> &tspill);
    1347             : 
    1348             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1349             :                                       const vector<Percent> &signalGain,
    1350             :                                       const vector<Temperature> &v_tebb,
    1351             :                                       const vector<vector<double> > &spwId_filters,
    1352             :                                       double airmass,
    1353             :                                       const vector<double> &skycoupling,
    1354             :                                       const vector<Temperature> &tspill);
    1355             : 
    1356             :   /* to implement in .cpp
    1357             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1358             :                                       Percent signalGain,
    1359             :                                       Temperature tebb,
    1360             :                                       vector<double> spwId_filter,
    1361             :                                       double airmass,
    1362             :                                       double skycoupling,
    1363             :                                       Temperature tspill); */
    1364             : 
    1365             : 
    1366             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1367             :                                       const Percent &signalGain,
    1368             :                                       const vector<Temperature> &v_tebb,
    1369             :                                       const vector<double> &spwId_filter,
    1370             :                                       double airmass,
    1371             :                                       double skycoupling,
    1372             :                                       const Temperature &tspill);
    1373             : 
    1374             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1375             :                                       const Percent &signalGain,
    1376             :                                       const vector<Temperature> &v_tebb,
    1377             :                                       const vector<vector<double> > &spwId_filters,
    1378             :                                       double airmass,
    1379             :                                       double skycoupling,
    1380             :                                       const Temperature &tspill);
    1381             : 
    1382             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1383             :                                       const Percent &signalGain,
    1384             :                                       const vector<Temperature> &v_tebb,
    1385             :                                       double airmass,
    1386             :                                       double skycoupling,
    1387             :                                       const Temperature &tspill);  // equivalent eliminating the vectors already implemented, see below
    1388             : 
    1389             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1390             :                                       const vector<Temperature> &v_tebb,
    1391             :                                       double skycoupling,
    1392             :                                       const Temperature &tspill);
    1393             : 
    1394             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1395             :                                       const vector<vector<Temperature> > &vv_tebb,
    1396             :                                       const vector<double> &skycoupling,
    1397             :                                       const vector<Temperature> &tspill);
    1398             : 
    1399             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1400             :                                       const vector<Temperature> &v_tebb,
    1401             :                                       const vector<double> &skycoupling,
    1402             :                                       const vector<Temperature> &tspill);
    1403             : 
    1404             :   /* to be implemented in the .cpp
    1405             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1406             :                                       Temperature tebb,
    1407             :                                       double skycoupling,
    1408             :                                       Temperature tspill); */
    1409             : 
    1410             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1411             :                                       const vector<Temperature> &v_tebb,
    1412             :                                       const vector<double> &spwId_filter,
    1413             :                                       double skycoupling,
    1414             :                                       const Temperature &tspill);
    1415             : 
    1416             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1417             :                                       const vector<vector<Temperature> > &vv_tebb,
    1418             :                                       const vector<vector<double> > &spwId_filters,
    1419             :                                       const vector<double> &skycoupling,
    1420             :                                       const vector<Temperature> &tspill);
    1421             : 
    1422             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1423             :                                       const vector<Temperature> &v_tebb,
    1424             :                                       const vector<vector<double> > &spwId_filters,
    1425             :                                       const vector<double> &skycoupling,
    1426             :                                       const vector<Temperature> &tspill);
    1427             : 
    1428             :   /* to be implemented in the .cpp
    1429             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1430             :                                       Temperature tebb,
    1431             :                                       vector<double> spwId_filters,
    1432             :                                       double skycoupling,
    1433             :                                       Temperature tspill); */
    1434             : 
    1435             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1436             :                                       const vector<Temperature> &v_tebb,
    1437             :                                       double airmass,
    1438             :                                       double skycoupling,
    1439             :                                       const Temperature &tspill);
    1440             : 
    1441             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1442             :                                       const vector<vector<Temperature> > &vv_tebb,
    1443             :                                       double airmass,
    1444             :                                       const vector<double> &skycoupling,
    1445             :                                       const vector<Temperature> &tspill);
    1446             : 
    1447             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1448             :                                       const vector<Temperature> &v_tebb,
    1449             :                                       double airmass,
    1450             :                                       const vector<double> &skycoupling,
    1451             :                                       const vector<Temperature> &tspill);
    1452             : 
    1453             :   /* to be implemented in the .cpp
    1454             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1455             :                                       const Temperature &tebb,
    1456             :                                       double airmass,
    1457             :                                       double skycoupling,
    1458             :                                       const Temperature &tspill);  */
    1459             : 
    1460             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1461             :                                       const vector<Temperature> &v_tebb,
    1462             :                                       const vector<double> &spwId_filter,
    1463             :                                       double airmass,
    1464             :                                       double skycoupling,
    1465             :                                       const Temperature &tspill);
    1466             : 
    1467             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1468             :                                       const vector<vector<Temperature> > &vv_tebb,
    1469             :                                       const vector<vector<double> > &spwId_filters,
    1470             :                                       double airmass,
    1471             :                                       const vector<double> &skycoupling,
    1472             :                                       const vector<Temperature> &tspill);
    1473             : 
    1474             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1475             :                                       const vector<Temperature> &v_tebb,
    1476             :                                       const vector<vector<double> > &spwId_filters,
    1477             :                                       double airmass,
    1478             :                                       const vector<double> &skycoupling,
    1479             :                                       const vector<Temperature> &tspill);
    1480             : 
    1481             :   /* to be implemented in the .cpp
    1482             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1483             :                                       const Temperature &v_tebb,
    1484             :                                       const vector<double> &spwId_filter,
    1485             :                                       double airmass,
    1486             :                                       double skycoupling,
    1487             :                                       const Temperature &tspill);   */
    1488             : 
    1489             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1490             :                                       const Percent &signalGain,
    1491             :                                       const vector<Temperature> &v_tebb,
    1492             :                                       double skycoupling,
    1493             :                                       const Temperature &tspill);
    1494             : 
    1495             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1496             :                                       const vector<Percent> &signalGain,
    1497             :                                       const vector<vector<Temperature> > &vv_tebb,
    1498             :                                       const vector<double> &skycoupling,
    1499             :                                       const vector<Temperature> &tspill);
    1500             : 
    1501             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1502             :                                       const vector<Percent> &signalGain,
    1503             :                                       const vector<Temperature> &v_tebb,
    1504             :                                       const vector<double> &skycoupling,
    1505             :                                       const vector<Temperature> &tspill);
    1506             : 
    1507             :   /* to be implemented in the .cpp
    1508             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1509             :                                       const Percent &signalGain,
    1510             :                                       constr Temperature &v_tebb,
    1511             :                                       double skycoupling,
    1512             :                                       const Temperature &tspill); */
    1513             : 
    1514             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1515             :                                       const Percent &signalGain,
    1516             :                                       const vector<Temperature> &v_tebb,
    1517             :                                       const vector<double> &spwId_filter,
    1518             :                                       double skycoupling,
    1519             :                                       const Temperature &tspill);
    1520             : 
    1521             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1522             :                                       const vector<Percent> &signalGain,
    1523             :                                       const vector<vector<Temperature> > &vv_tebb,
    1524             :                                       const vector<vector<double> > &spwId_filters,
    1525             :                                       const vector<double> &skycoupling,
    1526             :                                       const vector<Temperature> &tspill);
    1527             : 
    1528             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1529             :                                       const vector<Percent> &signalGain,
    1530             :                                       const vector<Temperature> &v_tebb,
    1531             :                                       const vector<vector<double> > &spwId_filters,
    1532             :                                       const vector<double> &skycoupling,
    1533             :                                       const vector<Temperature> &tspill);
    1534             : 
    1535             :   /* to be implemented in the .cpp
    1536             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1537             :                                       const Percent &signalGain,
    1538             :                                       const Temperature &v_tebb,
    1539             :                                       const vector<double> &spwId_filter,
    1540             :                                       double skycoupling,
    1541             :                                       const Temperature &tspill); */
    1542             : 
    1543             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1544             :                                       const Percent &signalGain,
    1545             :                                       const vector<Temperature> &v_tebb,
    1546             :                                       double airmass,
    1547             :                                       double skycoupling,
    1548             :                                       const Temperature &tspill);
    1549             : 
    1550             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1551             :                                       const vector<Percent> &signalGain,
    1552             :                                       const vector<vector<Temperature> > &vv_tebb,
    1553             :                                       double airmass,
    1554             :                                       const vector<double> &skycoupling,
    1555             :                                       const vector<Temperature> &tspill);
    1556             : 
    1557             :   Length WaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1558             :                                       const vector<Percent> &signalGain,
    1559             :                                       const vector<Temperature> &v_tebb,
    1560             :                                       double airmass,
    1561             :                                       const vector<double> &skycoupling,
    1562             :                                       const vector<Temperature> &tspill);
    1563             : 
    1564             :   // implemented 17/9/09
    1565             :   Length WaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1566             :                                       const Percent &signalGain,
    1567             :                                       const Temperature &tebb,
    1568             :                                       double airmass,
    1569             :                                       double skycoupling,
    1570             :                                       const Temperature &tspill);
    1571             : 
    1572             :   double SkyCouplingRetrieval_fromTEBB(unsigned int spwId,
    1573             :                                        const vector<Temperature> &v_tebb,
    1574             :                                        double skycoupling,
    1575             :                                        const Temperature &tspill);
    1576             : 
    1577             :   double SkyCouplingRetrieval_fromTEBB(unsigned int spwId,
    1578             :                                        const vector<Temperature> &v_tebb,
    1579             :                                        const vector<double> &spwId_filter,
    1580             :                                        double skycoupling,
    1581             :                                        const Temperature &tspill);
    1582             : 
    1583             :   double SkyCouplingRetrieval_fromTEBB(unsigned int spwId,
    1584             :                                        const vector<Temperature> &v_tebb,
    1585             :                                        double airmass,
    1586             :                                        double skycoupling,
    1587             :                                        const Temperature &tspill);
    1588             : 
    1589             :   double SkyCouplingRetrieval_fromTEBB(unsigned int spwId,
    1590             :                                        const vector<Temperature> &v_tebb,
    1591             :                                        const vector<double> &spwId_filter,
    1592             :                                        double airmass,
    1593             :                                        double skycoupling,
    1594             :                                        const Temperature &tspill);
    1595             : 
    1596             :   /** (Re)setter of water vapor radiometer channels */
    1597             :   void setWaterVaporRadiometer(const WaterVaporRadiometer &waterVaporRadiometer)
    1598             :   {
    1599             :     waterVaporRadiometer_ = waterVaporRadiometer;
    1600             :   }
    1601             :   /** Performs a sky coupling retrieval using WVR measurement sets between n and m
    1602             :    (obtains the ratio between the current sky couplings of all WVR channels and the best fit that
    1603             :    results from WVR measurement sets between n and m, keeping the other parameters unchanged)
    1604             :    and uses the result to update the Skycoupling of all WVR channels */
    1605             :   void updateSkyCoupling_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1606             :                                  unsigned int n,
    1607             :                                  unsigned int m);
    1608             :   /** Performs a sky coupling retrieval using WVR measurement sets between n and m
    1609             :    (obtains the ratio between the current sky coupling of a single WVR channel (ichan) and the best fit that
    1610             :    results from WVR measurement sets between n and m, keeping the other parameters unchanged)
    1611             :    and uses the result to update the Skycoupling of than WVR channel */
    1612             :   void updateSkyCouplingChannel_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1613             :                                         unsigned int ichan,
    1614             :                                         unsigned int n,
    1615             :                                         unsigned int m);
    1616             :   void updateSkyCoupling_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1617             :                                  unsigned int n)
    1618             :   {
    1619             :     updateSkyCoupling_fromWVR(RadiometerData, n, n + 1);
    1620             :   }
    1621             :   void updateSkyCoupling_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1622             :                                  unsigned int n,
    1623             :                                  unsigned int m,
    1624             :                                  WaterVaporRadiometer &external_wvr)
    1625             :   {
    1626             :     updateSkyCoupling_fromWVR(RadiometerData, n, m);
    1627             :     external_wvr = waterVaporRadiometer_;
    1628             :   }
    1629             :   void updateSkyCoupling_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1630             :                                  unsigned int n,
    1631             :                                  WaterVaporRadiometer &external_wvr)
    1632             :   {
    1633             :     updateSkyCoupling_fromWVR(RadiometerData, n, n + 1);
    1634             :     external_wvr = waterVaporRadiometer_;
    1635             :   }
    1636             :   /** Accessor to the sky coupling of channel n of the Water Vapor Radiometer*/
    1637             :   double getWaterVaporRadiometerSkyCoupling(int n) const
    1638             :   {
    1639             :     return waterVaporRadiometer_.getSkyCoupling()[n];
    1640             :   }
    1641             :   /** Accessor to the sky coupling of channel n of the Water Vapor Radiometer*/
    1642             :   Percent getWaterVaporRadiometerSignalGain(int n) const
    1643             :   {
    1644             :     return waterVaporRadiometer_.getsignalGain()[n];
    1645             :   }
    1646             :   /** Performs water vapor retrieval for WVR measurement sets between n and m */
    1647             :   void WaterVaporRetrieval_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1648             :                                    unsigned int n,
    1649             :                                    unsigned int m);
    1650             :   void WaterVaporRetrieval_fromWVR(vector<WVRMeasurement> &RadiometerData,
    1651             :                                    unsigned int n)
    1652             :   {
    1653             :     WaterVaporRetrieval_fromWVR(RadiometerData, n, n + 1);
    1654             :   }
    1655             :   /** Performs water vapor retrieval for one WVR measurement */
    1656             :   void WaterVaporRetrieval_fromWVR(WVRMeasurement &RadiometerData);
    1657             :   /** Accessor to get or check the water vapor radiometer channels */
    1658             :   WaterVaporRadiometer getWaterVaporRadiometer() const
    1659             :   {
    1660             :     return waterVaporRadiometer_;
    1661             :   }
    1662             : 
    1663             :   double
    1664             :       sigmaSkyCouplingRetrieval_fromWVR(double par_fit,
    1665             :                                         const WaterVaporRadiometer &wvr,
    1666             :                                         vector<WVRMeasurement> &RadiometerData,
    1667             :                                         unsigned int n,
    1668             :                                         unsigned int m);
    1669             :   double sigmaSkyCouplingRetrieval_fromWVR(double par_fit,
    1670             :                                            const WaterVaporRadiometer &wvr,
    1671             :                                            vector<WVRMeasurement> &RadiometerData,
    1672             :                                            unsigned int n)
    1673             :   {
    1674             :     return sigmaSkyCouplingRetrieval_fromWVR(par_fit, wvr, RadiometerData, n, n
    1675             :         + 1);
    1676             :   }
    1677             : 
    1678             :   /*
    1679             :     return the rms of the residuals for one channel ichan, as a function of the multiplicative
    1680             :     factor par_fit to this channel's coupling efficiency.
    1681             :    */
    1682             :   double sigmaSkyCouplingChannelRetrieval_fromWVR(double par_fit,
    1683             :                                                   const WaterVaporRadiometer &wvr,
    1684             :                                                   vector<WVRMeasurement> &RadiometerData,
    1685             :                                                   unsigned int ichan,
    1686             :                                                   unsigned int n,
    1687             :                                                   unsigned int m);
    1688             :   Temperature getWVRAverageSigmaTskyFit(const vector<WVRMeasurement> &RadiometerData,
    1689             :                                         unsigned int n,
    1690             :                                         unsigned int m);
    1691             :   Temperature getWVRAverageSigmaTskyFit(const vector<WVRMeasurement> &RadiometerData,
    1692             :                                         unsigned int n)
    1693             :   {
    1694             :     return getWVRAverageSigmaTskyFit(RadiometerData, n, n + 1);
    1695             :   }
    1696             :   /*
    1697             :      return the rms of fit residual for a single channel, in a measurement
    1698             :   */
    1699             :   Temperature getWVRSigmaChannelTskyFit(const vector<WVRMeasurement> &RadiometerData,
    1700             :                                         unsigned int ichan,
    1701             :                                         unsigned int n,
    1702             :                                         unsigned int m);
    1703             :   /*
    1704             :     return the rms of water vapor retrieved values in a measurnment (n to m)
    1705             :   */
    1706             :   double getSigmaTransmissionFit(unsigned int spwId,
    1707             :                                  const vector<double> &v_transmission,
    1708             :                                  double airm,
    1709             :                                  const Frequency &f1,
    1710             :                                  const Frequency &f2);
    1711             :   //double getSigmaTransmissionFit(){}
    1712             :   Temperature getSigmaFit(unsigned int spwId,
    1713             :                           const vector<Temperature> &v_tebbspec,
    1714             :                           double skyCoupling,
    1715             :                           const Temperature &Tspill)
    1716             :   {
    1717             :     return getSigmaFit(spwId, v_tebbspec, getUserWH2O(), skyCoupling, Tspill);
    1718             :   }
    1719             :   Temperature getSigmaFit(unsigned int spwId,
    1720             :                           const vector<Temperature> &v_tebbspec,
    1721             :                           const Length &wh2o,
    1722             :                           double skyCoupling,
    1723             :                           const Temperature &Tspill)
    1724             :   {
    1725             :     return getSigmaFit(spwId,
    1726             :                        v_tebbspec,
    1727             :                        wh2o,
    1728             :                        getAirMass(),
    1729             :                        skyCoupling,
    1730             :                        Tspill);
    1731             :   }
    1732             :   Temperature getSigmaFit(unsigned int spwId,
    1733             :                           const vector<Temperature> &v_tebbspec,
    1734             :                           double airmass,
    1735             :                           double skyCoupling,
    1736             :                           const Temperature &Tspill)
    1737             :   {
    1738             :     return getSigmaFit(spwId,
    1739             :                        v_tebbspec,
    1740             :                        getUserWH2O(),
    1741             :                        airmass,
    1742             :                        skyCoupling,
    1743             :                        Tspill);
    1744             :   }
    1745             :   Temperature getSigmaFit(unsigned int spwId,
    1746             :                           const vector<Temperature> &v_tebbspec,
    1747             :                           const Length &wh2o,
    1748             :                           double airmass,
    1749             :                           double skyCoupling,
    1750             :                           const Temperature &Tspill);
    1751             : 
    1752             :   //@}
    1753             : 
    1754             : protected:
    1755             : 
    1756             :   double airMass_; //!< Air Mass used for the radiative transfer
    1757             :   Temperature skyBackgroundTemperature_; //!< Blackbody temperature of the sky background
    1758             :   Length wh2o_user_; //!< Water vapor column used for radiative transfer calculations. If not provided,
    1759             :   //!< the one retrieved from the water vapor radiometer channels will be used.
    1760             :   WaterVaporRadiometer waterVaporRadiometer_; // !< Identifiers, sky coupling, and sideband gain of channels corresponding to the water vapor radiometer.
    1761             : 
    1762             : 
    1763             :   void iniSkyStatus(); //!< Basic Method initialize the class when using the constructors.
    1764             :   bool updateProfilesAndRadiance(const Length &altitude,
    1765             :                                  const Pressure &groundPressure,
    1766             :                                  const Temperature &groundTemperature,
    1767             :                                  double tropoLapseRate,
    1768             :                                  const Humidity &relativeHumidity,
    1769             :                                  const Length &wvScaleHeight);
    1770             :   void rmSkyStatus(); //!< Resets retrieved water column to zero, or the default value.
    1771             : 
    1772             :   Length mkWaterVaporRetrieval_fromFTS(unsigned int spwId,
    1773             :                                        const vector<double> &v_transmission,
    1774             :                                        //double airm,     // unused parameter
    1775             :                                        const Frequency &f1,
    1776             :                                        const Frequency &f2);
    1777             : 
    1778           0 :   Length mkWaterVaporRetrieval_fromTEBB(unsigned int spwId,
    1779             :                                         const Percent &signalGain,
    1780             :                                         const vector<Temperature> &v_measuredSkyTEBB,
    1781             :                                         double airm,
    1782             :                                         const vector<double> &spwId_filter,
    1783             :                                         double skycoupling,
    1784             :                                         const Temperature &tspill)
    1785             :   {
    1786             :                 return mkWaterVaporRetrieval_fromTEBB(
    1787           0 :                                 vector<unsigned int>(1, spwId),
    1788           0 :                                 vector<Percent>(1, signalGain),
    1789           0 :                                 vector<vector<Temperature> >(1, v_measuredSkyTEBB),
    1790             :                                 airm,
    1791           0 :                                 vector<vector<double> >(1, spwId_filter),
    1792           0 :                                 vector<double>(1, skycoupling),
    1793           0 :                                 vector<Temperature>(1, tspill));
    1794             :   }
    1795             : 
    1796             :   Length
    1797             :       mkWaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1798             :                                      const vector<Percent> &signalGain,
    1799             :                                      const vector<vector<Temperature> > &measuredSkyTEBB,
    1800             :                                      double airm,
    1801             :                                      const vector<vector<double> > &spwId_filters,
    1802             :                                      const vector<double> &skycoupling,
    1803             :                                      const vector<Temperature> &tspill);
    1804             : 
    1805             :   Length
    1806             :       mkWaterVaporRetrieval_fromTEBB(const vector<unsigned int> &spwId,
    1807             :                                      const vector<Percent> &signalGain,
    1808             :                                      const vector<Temperature> &measuredAverageSkyTEBB,
    1809             :                                      double airm,
    1810             :                                      const vector<vector<double> > &spwId_filters,
    1811             :                                      const vector<double> &skycoupling,
    1812             :                                      const vector<Temperature> &tspill);
    1813             : 
    1814             :   double mkSkyCouplingRetrieval_fromTEBB(unsigned int spwId,
    1815             :                                          const Percent &signalGain,
    1816             :                                          const vector<Temperature> &measuredSkyTEBB,
    1817             :                                          double airm,
    1818             :                                          const vector<double> &spwId_filter,
    1819             :                                          double skycoupling,
    1820             :                                          const Temperature &tspill);
    1821             : 
    1822             :   WVRMeasurement
    1823             :       mkWaterVaporRetrieval_fromWVR(const vector<Temperature> &measuredSkyBrightnessVector,
    1824             :                                     const vector<unsigned int> &radiometricChannels,
    1825             :                                     const vector<double> &skyCoupling,
    1826             :                                     const vector<Percent> &signalGain,
    1827             :                                     const Temperature &spilloverTemperature,
    1828             :                                     const Angle &elevation);
    1829             : 
    1830             :   double RT(double pfit_wh2o,
    1831             :             double skycoupling,
    1832             :             double tspill,
    1833             :             unsigned int spwid,
    1834             :             unsigned int nc)
    1835             :   {
    1836             :     return RT(pfit_wh2o, skycoupling, tspill, airMass_, spwid, nc);
    1837             :   }
    1838             :   double RT(double pfit_wh2o,
    1839             :             double skycoupling,
    1840             :             double tspill,
    1841             :             unsigned int spwid)
    1842             :   {
    1843             :     return RT(pfit_wh2o, skycoupling, tspill, airMass_, spwid);
    1844             :   }
    1845             :   double RT(double pfit_wh2o,
    1846             :             double skycoupling,
    1847             :             double tspill,
    1848             :             double airmass,
    1849             :             unsigned int spwId,
    1850             :             unsigned int nc);
    1851             : 
    1852           4 :   double RT(double pfit_wh2o,
    1853             :             double skycoupling,
    1854             :             double tspill,
    1855             :             double airmass,
    1856             :             unsigned int spwid)
    1857             :   {
    1858           4 :     double tebb_channel = 0.0;
    1859           8 :     for(unsigned int n = 0; n < v_numChan_[spwid]; n++) {
    1860           4 :       tebb_channel = tebb_channel + RT(pfit_wh2o,
    1861             :                                        skycoupling,
    1862             :                                        tspill,
    1863             :                                        airmass,
    1864             :                                        spwid,
    1865           4 :                                        n) / (v_numChan_[spwid]);
    1866             :     }
    1867           4 :     return tebb_channel;
    1868             :   }
    1869             : 
    1870             :   double RT(double pfit_wh2o,
    1871             :             double skycoupling,
    1872             :             double tspill,
    1873             :             unsigned int spwid,
    1874             :             const Percent &signalgain)
    1875             :   {
    1876             :     vector<double> spwId_filter;
    1877             :     for(unsigned int n = 0; n < v_numChan_[spwid]; n++) {
    1878             :       spwId_filter.push_back(1.0);
    1879             :     }
    1880             :     return RT(pfit_wh2o,
    1881             :               skycoupling,
    1882             :               tspill,
    1883             :               airMass_,
    1884             :               spwid,
    1885             :               spwId_filter,
    1886             :               signalgain);
    1887             :   }
    1888             : 
    1889           0 :   double RT(double pfit_wh2o,
    1890             :             double skycoupling,
    1891             :             double tspill,
    1892             :             double airmass,
    1893             :             unsigned int spwid,
    1894             :             const Percent &signalgain)
    1895             :   {
    1896           0 :     vector<double> spwId_filter;
    1897           0 :     for(unsigned int n = 0; n < v_numChan_[spwid]; n++) {
    1898           0 :       spwId_filter.push_back(1.0);
    1899             :     }
    1900           0 :     return RT(pfit_wh2o,
    1901             :               skycoupling,
    1902             :               tspill,
    1903             :               airmass,
    1904             :               spwid,
    1905             :               spwId_filter,
    1906           0 :               signalgain);
    1907           0 :   }
    1908             : 
    1909             :   double RT(double pfit_wh2o,
    1910             :             double skycoupling,
    1911             :             double tspill,
    1912             :             unsigned int spwid,
    1913             :             const vector<double> &spwId_filter)
    1914             :   {
    1915             :     return RT(pfit_wh2o,
    1916             :               skycoupling,
    1917             :               tspill,
    1918             :               airMass_,
    1919             :               spwid,
    1920             :               spwId_filter,
    1921             :               Percent(100.0, Percent::UnitPercent));
    1922             :   }
    1923             : 
    1924             :   double RT(double pfit_wh2o,
    1925             :             double skycoupling,
    1926             :             double tspill,
    1927             :             unsigned int spwid,
    1928             :             const vector<double> &spwId_filter,
    1929             :             const Percent &signalgain)
    1930             :   {
    1931             :     return RT(pfit_wh2o,
    1932             :               skycoupling,
    1933             :               tspill,
    1934             :               airMass_,
    1935             :               spwid,
    1936             :               spwId_filter,
    1937             :               signalgain);
    1938             :   }
    1939             : 
    1940             :   double RT(double pfit_wh2o,
    1941             :             double skycoupling,
    1942             :             double tspill,
    1943             :             double airmass,
    1944             :             unsigned int spwid,
    1945             :             const vector<double> &spwId_filter,
    1946             :             const Percent &signalgain);
    1947             : 
    1948             : 
    1949             :   double RTRJ(double pfit_wh2o,
    1950             :             double skycoupling,
    1951             :             double tspill,
    1952             :             unsigned int spwid,
    1953             :             unsigned int nc)
    1954             :   {
    1955             :     return RTRJ(pfit_wh2o, skycoupling, tspill, airMass_, spwid, nc);
    1956             :   }
    1957             :   double RTRJ(double pfit_wh2o,
    1958             :             double skycoupling,
    1959             :             double tspill,
    1960             :             unsigned int spwid)
    1961             :   {
    1962             :     return RTRJ(pfit_wh2o, skycoupling, tspill, airMass_, spwid);
    1963             :   }
    1964             :   double RTRJ(double pfit_wh2o,
    1965             :             double skycoupling,
    1966             :             double tspill,
    1967             :             double airmass,
    1968             :             unsigned int spwId,
    1969             :             unsigned int nc);
    1970             : 
    1971           0 :   double RTRJ(double pfit_wh2o,
    1972             :             double skycoupling,
    1973             :             double tspill,
    1974             :             double airmass,
    1975             :             unsigned int spwid)
    1976             :   {
    1977           0 :     double trj_channel = 0.0;
    1978           0 :     for(unsigned int n = 0; n < v_numChan_[spwid]; n++) {
    1979           0 :       trj_channel = trj_channel + RTRJ(pfit_wh2o,
    1980             :                                        skycoupling,
    1981             :                                        tspill,
    1982             :                                        airmass,
    1983             :                                        spwid,
    1984           0 :                                        n) / (v_numChan_[spwid]);
    1985             :     }
    1986           0 :     return trj_channel;
    1987             :   }
    1988             : 
    1989             :   double RTRJ(double pfit_wh2o,
    1990             :             double skycoupling,
    1991             :             double tspill,
    1992             :             unsigned int spwid,
    1993             :             const Percent &signalgain)
    1994             :   {
    1995             :     vector<double> spwId_filter;
    1996             :     for(unsigned int n = 0; n < v_numChan_[spwid]; n++) {
    1997             :       spwId_filter.push_back(1.0);
    1998             :     }
    1999             :     return RTRJ(pfit_wh2o,
    2000             :               skycoupling,
    2001             :               tspill,
    2002             :               airMass_,
    2003             :               spwid,
    2004             :               spwId_filter,
    2005             :               signalgain);
    2006             :   }
    2007             : 
    2008             :   double RTRJ(double pfit_wh2o,
    2009             :             double skycoupling,
    2010             :             double tspill,
    2011             :             double airmass,
    2012             :             unsigned int spwid,
    2013             :             const Percent &signalgain)
    2014             :   {
    2015             :     vector<double> spwId_filter;
    2016             :     for(unsigned int n = 0; n < v_numChan_[spwid]; n++) {
    2017             :       spwId_filter.push_back(1.0);
    2018             :     }
    2019             :     return RTRJ(pfit_wh2o,
    2020             :               skycoupling,
    2021             :               tspill,
    2022             :               airmass,
    2023             :               spwid,
    2024             :               spwId_filter,
    2025             :               signalgain);
    2026             :   }
    2027             : 
    2028             :   double RTRJ(double pfit_wh2o,
    2029             :             double skycoupling,
    2030             :             double tspill,
    2031             :             unsigned int spwid,
    2032             :             const vector<double> &spwId_filter)
    2033             :   {
    2034             :     return RTRJ(pfit_wh2o,
    2035             :               skycoupling,
    2036             :               tspill,
    2037             :               airMass_,
    2038             :               spwid,
    2039             :               spwId_filter,
    2040             :               Percent(100.0, Percent::UnitPercent));
    2041             :   }
    2042             : 
    2043             :   double RTRJ(double pfit_wh2o,
    2044             :             double skycoupling,
    2045             :             double tspill,
    2046             :             unsigned int spwid,
    2047             :             const vector<double> &spwId_filter,
    2048             :             const Percent &signalgain)
    2049             :   {
    2050             :     return RTRJ(pfit_wh2o,
    2051             :               skycoupling,
    2052             :               tspill,
    2053             :               airMass_,
    2054             :               spwid,
    2055             :               spwId_filter,
    2056             :               signalgain);
    2057             :   }
    2058             : 
    2059             :   double RTRJ(double pfit_wh2o,
    2060             :             double skycoupling,
    2061             :             double tspill,
    2062             :             double airmass,
    2063             :             unsigned int spwid,
    2064             :             const vector<double> &spwId_filter,
    2065             :             const Percent &signalgain);
    2066             : 
    2067             : 
    2068             : private:
    2069             : 
    2070             :   // no accessors provided for these
    2071             :   double sigma_transmission_FTSfit_;
    2072             :   Temperature sigma_TEBBfit_;
    2073             : 
    2074             : }; // class SkyStatus
    2075             : 
    2076             : ATM_NAMESPACE_END
    2077             : 
    2078             : #endif /*!_ATM_SKYSTATUS_H*/

Generated by: LCOV version 1.16