Git Product home page Git Product logo

ascot's People

Contributors

tobnilsson avatar varenius avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

ascot's Issues

Add "Gravitational deformation" and "Thermal deformation" to status table

When running indep solution, we see

***            XYZ| OPTL|  OLC| VMF1| VMF3|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|
*** ONSA13NE|    X|    X|    X|     |    X|     |    X|     |    X|     |     |     |     |     |     |
*** ONSA13SW|    X|    X|    X|     |    X|     |    X|     |    X|     |     |     |     |     |     |
*** ONSALA60|    X|    X|    X|     |    X|     |    X|    X|    X|     |     |     |     |     |     |
***            XYZ| OPTL|  OLC| VMF1| VMF3|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|

It would be nice if Gravitational Deformation and Thermal Deformation was also shown in this table.

ASCOT log files not saved if log directory does not exist

In control file we define e.g.

    # Here the log file is saved
    logdir = "/home/eskil/ASCOT/GR/log/";

But if this folder does not exist, ASCOT will silently just not save any logs. It would be good to have a warning about this (or possibly an error)

Clarify use_flag=false usage

I run a control file where I specify

    # select method for outlier detection: 
    # BAARDA test if variance factor is known, POPE test otherwise  
    # or simple method using fixed number of iterations, a threshold 
    # for gross outliers and a quantile (inverse cdf)
    test_method = ( ( "baarda", { significance_level = 1e-9; } ), 
                    ( "pope",   { significance_level = 1e-9; } ),
                    ( "simple", { iterations = 25;
                                    threshold = 1.0e-9; # 1 ns
                                    quantile = 5.0 } ) ); 

    # additional information which editing should be used (e.g. iIVS or iGSFC) 
    # used for creating GroupDelayFull_bX.nc and Edit.nc filenames and search of the wrapper
    vgosdb_editing = "iOSO";

    outliers = { 
                 detect      = true;
                 restoration = ( true,3.0 );
                 data_snooping = "simple";
                 #data_snooping = "pope";
                 save = ( false, "Edit_AI2");# if true, quality_code = 0 
                                            # AND use_obs_flags = false
                                            # have to be set!
                 load = (true, "Edit_iOSO");
                 force_load = false; # force to load EXACTLY e.g. Edit_IVG 
            };

    # only in case of vgosDB
    # eliminate observations with a quality code smaller than the one specified 
    # use quality codes between 0 (worst) and 9 (best)
    quality_code = 5;       
    use_obs_flags = true;   # if true: only observations with delay flag "0"
                            #          (and " " in case of NGS) are used from 
                            #          the DELUFLAG entries in Edit.nc or the 
                            #          flags in NGS card #2
                            # if false: all obs are used

I get output

<LEVEL2> *** Observations with invalid qcode: 26 of 3522
<LEVEL2> *** Observations with invalid delay flag: 122 of 3522
<LEVEL2> *** Observations with invalid ionospheric correction: 0 of 3522
<LEVEL2> *** Observations with invalid ionospheric correction AND invalid delay flag: 0 of 3522
<LEVEL2> *** Percentage of flagged observations and remaining number of observations for each site and baseline
***             | ONSA13NE| ONSA13SW| ONSALA60|
*** ONSA13NE| % |   3.5 % |   4.7 % |   2.4 % |
*** ONSA13NE| # |  2265 # |  1119 # |  1146 # |
*** ONSA13SW| % |         |   4.0 % |   3.3 % |
*** ONSA13SW| # |         |  2254 # |  1135 # |
*** ONSALA60| % |         |         |   2.9 % |
*** ONSALA60| # |         |         |  2281 # |
<LEVEL0> *** END-Loading vgosDB: /home/eskil/vgosdbs/ONTIE//2020/20NOV12VB/
<LEVEL3> *** START-Session::init_vgosdb_ngs_solution with _name: 20NOV12VB
<LEVEL3> *** Delays calculated: 0/3522
<LEVEL3> *** Delays calculated: 1000/3522
<LEVEL3> *** Delays calculated: 2000/3522
<LEVEL3> *** Delays calculated: 3000/3522
<LEVEL3> *** Delays calculated: 3522/3522
<LEVEL3> *** Data elimination: 122 of 3522 observations removed. New #nobs 3400
<LEVEL3> *** Data elimination: 122 removed due to use_flag == false

I don't understand why it says "use_flag == false" here. If "flag" means an observation has been flagged as bad, then the logical thing would be to remove it if the flag is used, i.e. if "use_flag=true"?

Add tests

Would be good to have tests which could be run after compiling to ensure stuff is working and nothing has broken.

CGAL 5 compile problems

Running "make" for "ivg" fails on Linux Mint 20 with libgcal-dev 5.0.2-3 (instead of 4.4. before).

eskil@grotte:/opt/ascot/src/ivg$ make
g++   -c ./matrix.cpp -I/include -I./ -I/opt/ascot//include -I/opt/ascot//src/projectpluto/include -I/opt/ascot//src/iers -I/opt/ascot//src/sofa/include
./matrix.cpp: In member function ‘ivg::Matrix& ivg::Matrix::operator=(const std::vector<int>&)’:
./matrix.cpp:211:1: warning: no return statement in function returning non-void [-Wreturn-type]
  210 |     _cols = 1;
  +++ |+    return *this;
  211 | }
      | ^
g++  -c ./funother.cpp -I./
g++ -O3 -std=c++0x  -g -fPIC -c ./date.cpp   -I/include -I./ -I/opt/ascot//include -I/opt/ascot//src/projectpluto/include -I/opt/ascot//src/iers -I/opt/ascot//src/sofa/include
g++ -O3 -std=c++0x  -g -fPIC -o auxfunc.o -c ./auxfunc.cpp -I/include -I./ -I/opt/ascot//include -I/opt/ascot//src/projectpluto/include -I/opt/ascot//src/iers -I/opt/ascot//src/sofa/include
./auxfunc.cpp: In function ‘libconfig::Setting& get_list_element(libconfig::Setting&, std::string, int)’:
./auxfunc.cpp:117:1: warning: control reaches end of non-void function [-Wreturn-type]
  117 | }
      | ^
g++ -c -o tictoc.o tictoc.h
gcc -O3 -c ./sparse2array.c
g++ -O3 -std=c++0x  -g -fPIC -c ./eop_series.cpp   -I/include -I./ -I/opt/ascot//include -I/opt/ascot//src/projectpluto/include -I/opt/ascot//src/iers -I/opt/ascot//src/sofa/include
In file included from /usr/include/CGAL/Kernel/global_functions.h:25,
                 from /usr/include/CGAL/Cartesian/Cartesian_base.h:22,
                 from /usr/include/CGAL/Simple_cartesian.h:20,
                 from /usr/include/CGAL/Exact_predicates_inexact_constructions_kernel.h:20,
                 from ./trf.h:4,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
/usr/include/CGAL/Kernel/hash_functions.h:25:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   25 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:47:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   47 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:57:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   57 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:66:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   66 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:75:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   75 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:84:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   84 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:93:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
   93 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:102:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  102 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:126:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  126 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:135:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  135 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:145:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  145 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:154:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  154 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:164:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  164 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
/usr/include/CGAL/Kernel/hash_functions.h:174:13: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  174 | inline std::enable_if_t<std::is_same<typename K::Rep_tag, Cartesian_tag>::value, std::size_t>
      |             ^~~~~~~~~~~
      |             enable_if
In file included from /usr/include/CGAL/Lazy_exact_nt.h:33,
                 from /usr/include/CGAL/internal/Exact_type_selector.h:25,
                 from /usr/include/CGAL/Exact_kernel_selector.h:26,
                 from /usr/include/CGAL/Filtered_kernel.h:22,
                 from /usr/include/CGAL/Exact_predicates_inexact_constructions_kernel.h:21,
                 from ./trf.h:4,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
/usr/include/CGAL/Lazy.h:108:30: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  108 | template<class T>inline std::enable_if_t<std::is_arithmetic<T>::value||std::is_enum<T>::value, T> approx(T d){return d;}
      |                              ^~~~~~~~~~~
      |                              enable_if
/usr/include/CGAL/Lazy.h:109:30: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  109 | template<class T>inline std::enable_if_t<std::is_arithmetic<T>::value||std::is_enum<T>::value, T> exact (T d){return d;}
      |                              ^~~~~~~~~~~
      |                              enable_if
/usr/include/CGAL/Lazy.h:110:30: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  110 | template<class T>inline std::enable_if_t<std::is_arithmetic<T>::value||std::is_enum<T>::value, unsigned> depth(T){return 0;}
      |                              ^~~~~~~~~~~
      |                              enable_if
/usr/include/CGAL/Lazy.h:113:30: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  113 | template<class T>inline std::enable_if_t<std::is_empty<T>::value, T> exact(T){return {};}
      |                              ^~~~~~~~~~~
      |                              enable_if
/usr/include/CGAL/Lazy.h:114:30: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  114 | template<class T>inline std::enable_if_t<std::is_empty<T>::value, T> approx(T){return {};}
      |                              ^~~~~~~~~~~
      |                              enable_if
/usr/include/CGAL/Lazy.h:115:30: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  115 | template<class T>inline std::enable_if_t<std::is_empty<T>::value, unsigned> depth(T){return 0;}
      |                              ^~~~~~~~~~~
      |                              enable_if
/usr/include/CGAL/Lazy.h:118:31: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  118 | template <class T, class=std::enable_if_t<is_iterator_type<T,std::input_iterator_tag>::value>>
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/include/CGAL/Lazy.h:118:42: error: expected ‘>’ before ‘<’ token
  118 | template <class T, class=std::enable_if_t<is_iterator_type<T,std::input_iterator_tag>::value>>
      |                                          ^
/usr/include/CGAL/Lazy.h:119:1: error: ‘exact’ function uses ‘auto’ type specifier without trailing return type
  119 | auto exact(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::exact(u);});}
      | ^~~~
/usr/include/CGAL/Lazy.h:119:1: note: deduced return type only available with ‘-std=c++14’ or ‘-std=gnu++14’
/usr/include/CGAL/Lazy.h: In function ‘auto CGAL::exact(const T&)’:
/usr/include/CGAL/Lazy.h:119:64: error: use of ‘auto’ in lambda parameter declaration only available with ‘-std=c++14’ or ‘-std=gnu++14’
  119 | auto exact(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::exact(u);});}
      |                                                                ^~~~
/usr/include/CGAL/Lazy.h: In lambda function:
/usr/include/CGAL/Lazy.h:119:98: error: no matching function for call to ‘exact(const int&)’
  119 | auto exact(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::exact(u);});}
      |                                                                                                  ^
/usr/include/CGAL/Lazy.h:84:1: note: candidate: ‘template<class AT, class ET, class E2A> const ET& CGAL::exact(const CGAL::Lazy<AT, ET, E2A>&)’
   84 | exact(const Lazy<AT,ET,E2A>& l)
      | ^~~~~
/usr/include/CGAL/Lazy.h:84:1: note:   template argument deduction/substitution failed:
/usr/include/CGAL/Lazy.h:119:98: note:   mismatched types ‘const CGAL::Lazy<AT, ET, E2A>’ and ‘const int’
  119 | auto exact(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::exact(u);});}
      |                                                                                                  ^
/usr/include/CGAL/Lazy.h:104:1: note: candidate: ‘const CGAL::Bbox_2& CGAL::exact(const CGAL::Bbox_2&)’
  104 | CGAL_LAZY_FORWARD(Bbox_2)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:104:1: note:   no known conversion for argument 1 from ‘const int’ to ‘const CGAL::Bbox_2&’
  104 | CGAL_LAZY_FORWARD(Bbox_2)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:105:1: note: candidate: ‘const CGAL::Bbox_3& CGAL::exact(const CGAL::Bbox_3&)’
  105 | CGAL_LAZY_FORWARD(Bbox_3)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:105:1: note:   no known conversion for argument 1 from ‘const int’ to ‘const CGAL::Bbox_3&’
  105 | CGAL_LAZY_FORWARD(Bbox_3)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:119:6: note: candidate: ‘template<class T, class> auto CGAL::exact(const T&)’
  119 | auto exact(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::exact(u);});}
      |      ^~~~~
/usr/include/CGAL/Lazy.h:119:6: note:   template argument deduction/substitution failed:
/usr/include/CGAL/Lazy.h: At global scope:
/usr/include/CGAL/Lazy.h:120:31: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  120 | template <class T, class=std::enable_if_t<is_iterator_type<T,std::input_iterator_tag>::value>>
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/include/CGAL/Lazy.h:120:42: error: expected ‘>’ before ‘<’ token
  120 | template <class T, class=std::enable_if_t<is_iterator_type<T,std::input_iterator_tag>::value>>
      |                                          ^
/usr/include/CGAL/Lazy.h:121:1: error: ‘approx’ function uses ‘auto’ type specifier without trailing return type
  121 | auto approx(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::approx(u);});}
      | ^~~~
/usr/include/CGAL/Lazy.h:121:1: note: deduced return type only available with ‘-std=c++14’ or ‘-std=gnu++14’
/usr/include/CGAL/Lazy.h: In function ‘auto CGAL::approx(const T&)’:
/usr/include/CGAL/Lazy.h:121:65: error: use of ‘auto’ in lambda parameter declaration only available with ‘-std=c++14’ or ‘-std=gnu++14’
  121 | auto approx(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::approx(u);});}
      |                                                                 ^~~~
/usr/include/CGAL/Lazy.h: In lambda function:
/usr/include/CGAL/Lazy.h:121:100: error: no matching function for call to ‘approx(const int&)’
  121 | auto approx(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::approx(u);});}
      |                                                                                                    ^
/usr/include/CGAL/Lazy.h:66:1: note: candidate: ‘template<class AT, class ET, class E2A> const AT& CGAL::approx(const CGAL::Lazy<AT, ET, E2A>&)’
   66 | approx(const Lazy<AT,ET,E2A>& l)
      | ^~~~~~
/usr/include/CGAL/Lazy.h:66:1: note:   template argument deduction/substitution failed:
/usr/include/CGAL/Lazy.h:121:100: note:   mismatched types ‘const CGAL::Lazy<AT, ET, E2A>’ and ‘const int’
  121 | auto approx(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::approx(u);});}
      |                                                                                                    ^
/usr/include/CGAL/Lazy.h:75:1: note: candidate: ‘template<class AT, class ET, class E2A> AT& CGAL::approx(CGAL::Lazy<AT, ET, E2A>&)’
   75 | approx(Lazy<AT,ET,E2A>& l)
      | ^~~~~~
/usr/include/CGAL/Lazy.h:75:1: note:   template argument deduction/substitution failed:
/usr/include/CGAL/Lazy.h:121:100: note:   mismatched types ‘CGAL::Lazy<AT, ET, E2A>’ and ‘const int’
  121 | auto approx(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::approx(u);});}
      |                                                                                                    ^
/usr/include/CGAL/Lazy.h:104:1: note: candidate: ‘const CGAL::Bbox_2& CGAL::approx(const CGAL::Bbox_2&)’
  104 | CGAL_LAZY_FORWARD(Bbox_2)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:104:1: note:   no known conversion for argument 1 from ‘const int’ to ‘const CGAL::Bbox_2&’
  104 | CGAL_LAZY_FORWARD(Bbox_2)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:105:1: note: candidate: ‘const CGAL::Bbox_3& CGAL::approx(const CGAL::Bbox_3&)’
  105 | CGAL_LAZY_FORWARD(Bbox_3)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:105:1: note:   no known conversion for argument 1 from ‘const int’ to ‘const CGAL::Bbox_3&’
  105 | CGAL_LAZY_FORWARD(Bbox_3)
      | ^~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:121:6: note: candidate: ‘template<class T, class> auto CGAL::approx(const T&)’
  121 | auto approx(T const& t) {return make_transforming_iterator(t,[](auto const&u){return CGAL::approx(u);});}
      |      ^~~~~~
/usr/include/CGAL/Lazy.h:121:6: note:   template argument deduction/substitution failed:
/usr/include/CGAL/Lazy.h: At global scope:
/usr/include/CGAL/Lazy.h:122:31: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  122 | template <class T, class=std::enable_if_t<is_iterator_type<T,std::input_iterator_tag>::value>>
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/include/CGAL/Lazy.h:122:42: error: expected ‘>’ before ‘<’ token
  122 | template <class T, class=std::enable_if_t<is_iterator_type<T,std::input_iterator_tag>::value>>
      |                                          ^
In file included from /usr/include/CGAL/Lazy_exact_nt.h:33,
                 from /usr/include/CGAL/internal/Exact_type_selector.h:25,
                 from /usr/include/CGAL/Exact_kernel_selector.h:26,
                 from /usr/include/CGAL/Filtered_kernel.h:22,
                 from /usr/include/CGAL/Exact_predicates_inexact_constructions_kernel.h:21,
                 from ./trf.h:4,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
/usr/include/CGAL/Lazy.h:320:33: error: ‘std::index_sequence’ has not been declared
  320 |   void update_exact_helper(std::index_sequence<I...>) const {
      |                                 ^~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:320:47: error: expected ‘,’ or ‘...’ before ‘<’ token
  320 |   void update_exact_helper(std::index_sequence<I...>) const {
      |                                               ^
/usr/include/CGAL/Lazy.h: In member function ‘void CGAL::Lazy_rep_n<AT, ET, AC, EC, E2A, L>::update_exact() const’:
/usr/include/CGAL/Lazy.h:327:30: error: ‘make_index_sequence’ is not a member of ‘std’
  327 |     update_exact_helper(std::make_index_sequence<sizeof...(L)>{});
      |                              ^~~~~~~~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:327:63: error: expected primary-expression before ‘{’ token
  327 |     update_exact_helper(std::make_index_sequence<sizeof...(L)>{});
      |                                                               ^
/usr/include/CGAL/Lazy.h: At global scope:
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:39: error: ‘remove_reference_t’ is not a member of ‘std’; did you mean ‘remove_reference’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                       ^~~~~~~~~~~~~~~~~~
      |                                       remove_reference
/usr/include/CGAL/Lazy.h:831:89: error: template argument 1 is invalid
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                                                                         ^~
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:39: error: ‘remove_reference_t’ is not a member of ‘std’; did you mean ‘remove_reference’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                       ^~~~~~~~~~~~~~~~~~
      |                                       remove_reference
/usr/include/CGAL/Lazy.h:831:89: error: template argument 1 is invalid
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                                                                         ^~
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:39: error: ‘remove_reference_t’ is not a member of ‘std’; did you mean ‘remove_reference’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                       ^~~~~~~~~~~~~~~~~~
      |                                       remove_reference
/usr/include/CGAL/Lazy.h:831:89: error: template argument 1 is invalid
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                                                                         ^~
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:39: error: ‘remove_reference_t’ is not a member of ‘std’; did you mean ‘remove_reference’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                       ^~~~~~~~~~~~~~~~~~
      |                                       remove_reference
/usr/include/CGAL/Lazy.h:831:89: error: template argument 1 is invalid
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                                                                         ^~
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:22: error: ‘remove_cv_t’ is not a member of ‘std’; did you mean ‘remove_cv’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                      ^~~~~~~~~~~
      |                      remove_cv
/usr/include/CGAL/Lazy.h:831:39: error: ‘remove_reference_t’ is not a member of ‘std’; did you mean ‘remove_reference’?
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                       ^~~~~~~~~~~~~~~~~~
      |                                       remove_reference
/usr/include/CGAL/Lazy.h:831:89: error: template argument 1 is invalid
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                                                                                         ^~
/usr/include/CGAL/Lazy.h:831:3: error: invalid use of template-name ‘CGAL::Lazy_exact_nt’ without an argument list
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |   ^~~~~~~~~~~~~
/usr/include/CGAL/Lazy.h:831:3: note: class template argument deduction is only available with ‘-std=c++17’ or ‘-std=gnu++17’
In file included from /usr/include/CGAL/Lazy_exact_nt.h:33,
                 from /usr/include/CGAL/internal/Exact_type_selector.h:25,
                 from /usr/include/CGAL/Exact_kernel_selector.h:26,
                 from /usr/include/CGAL/Filtered_kernel.h:22,
                 from /usr/include/CGAL/Exact_predicates_inexact_constructions_kernel.h:21,
                 from ./trf.h:4,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
/usr/include/CGAL/Lazy.h:61:7: note: ‘template<class ET_> class CGAL::Lazy_exact_nt’ declared here
   61 | class Lazy_exact_nt;
      |       ^~~~~~~~~~~~~
In file included from /usr/include/CGAL/Lazy_exact_nt.h:33,
                 from /usr/include/CGAL/internal/Exact_type_selector.h:25,
                 from /usr/include/CGAL/Exact_kernel_selector.h:26,
                 from /usr/include/CGAL/Filtered_kernel.h:22,
                 from /usr/include/CGAL/Exact_predicates_inexact_constructions_kernel.h:21,
                 from ./trf.h:4,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
/usr/include/CGAL/Lazy.h:831:16: error: expected initializer before ‘<’ token
  831 |   Lazy_exact_nt<std::remove_cv_t<std::remove_reference_t<decltype(ec(CGAL::exact(l)...))>>>
      |                ^
In file included from /usr/include/CGAL/N_step_adaptor_derived.h:20,
                 from /usr/include/CGAL/Polyhedron_3.h:26,
                 from ./trf.h:6,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
/usr/include/CGAL/iterator.h:663:16: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  663 |   typedef std::decay_t<typename cpp11::result_of<Op(arg_type)>::type> value_type;
      |                ^~~~~~~
      |                decay
/usr/include/CGAL/iterator.h:665:11: error: ‘value_type’ does not name a type; did you mean ‘arg_type’?
  665 |   typedef value_type const*                                     pointer;
      |           ^~~~~~~~~~
      |           arg_type
/usr/include/CGAL/iterator.h:666:11: error: ‘value_type’ does not name a type; did you mean ‘arg_type’?
  666 |   typedef value_type const&                                     reference;
      |           ^~~~~~~~~~
      |           arg_type
/usr/include/CGAL/iterator.h:671:11: error: ‘value_type’ does not name a type; did you mean ‘arg_type’?
  671 |   mutable value_type val;  // Note: mutable is needed because we want to
      |           ^~~~~~~~~~
      |           arg_type
/usr/include/CGAL/iterator.h:699:9: error: ‘value_type’ does not name a type; did you mean ‘arg_type’?
  699 |   const value_type& operator*() const {
      |         ^~~~~~~~~~
      |         arg_type
/usr/include/CGAL/iterator.h:715:9: error: ‘value_type’ does not name a type; did you mean ‘arg_type’?
  715 |   const value_type& operator[](difference_type i) const {
      |         ^~~~~~~~~~
      |         arg_type
/usr/include/CGAL/iterator.h:1321:44: error: ‘std::index_sequence’ has not been declared
 1321 | auto to_tuple(std::tuple<Args...> &t, std::index_sequence<Is...>)
      |                                            ^~~~~~~~~~~~~~
/usr/include/CGAL/iterator.h:1321:58: error: expected ‘,’ or ‘...’ before ‘<’ token
 1321 | auto to_tuple(std::tuple<Args...> &t, std::index_sequence<Is...>)
      |                                                          ^
/usr/include/CGAL/iterator.h:1321:1: error: ‘to_tuple’ function uses ‘auto’ type specifier without trailing return type
 1321 | auto to_tuple(std::tuple<Args...> &t, std::index_sequence<Is...>)
      | ^~~~
/usr/include/CGAL/iterator.h:1321:1: note: deduced return type only available with ‘-std=c++14’ or ‘-std=gnu++14’
/usr/include/CGAL/iterator.h: In member function ‘CGAL::Dispatch_output_iterator<std::tuple<_Tps ...>, std::tuple<_Args2 ...> >::operator std::tuple<O& ...>()’:
/usr/include/CGAL/iterator.h:1414:49: error: ‘index_sequence_for’ is not a member of ‘std’
 1414 |     return tuple_internal::to_tuple(*this, std::index_sequence_for<O...>{});
      |                                                 ^~~~~~~~~~~~~~~~~~
/usr/include/CGAL/iterator.h:1414:69: error: expected primary-expression before ‘...’ token
 1414 |     return tuple_internal::to_tuple(*this, std::index_sequence_for<O...>{});
      |                                                                     ^~~
/usr/include/CGAL/iterator.h: In member function ‘CGAL::Dispatch_output_iterator<std::tuple<_Tps ...>, std::tuple<_Args2 ...> >::operator std::tuple<const O& ...>() const’:
/usr/include/CGAL/iterator.h:1419:49: error: ‘index_sequence_for’ is not a member of ‘std’
 1419 |     return tuple_internal::to_tuple(*this, std::index_sequence_for<O...>{});
      |                                                 ^~~~~~~~~~~~~~~~~~
/usr/include/CGAL/iterator.h:1419:69: error: expected primary-expression before ‘...’ token
 1419 |     return tuple_internal::to_tuple(*this, std::index_sequence_for<O...>{});
      |                                                                     ^~~
In file included from ./ls_neq.h:4,
                 from ./sinex.h:10,
                 from ./trf.h:19,
                 from ./parser.h:10,
                 from ./eop_series.h:13,
                 from ./eop_series.cpp:1:
./ls_solution.h: In member function ‘virtual double ivg::Ls_solution::calc_posterior_vfac()’:
./ls_solution.h:85:9: warning: no return statement in function returning non-void [-Wreturn-type]
   85 |         };
      |         ^
./ls_solution.h: In member function ‘virtual double ivg::Ls_solution::calc_wrms()’:
./ls_solution.h:137:9: warning: no return statement in function returning non-void [-Wreturn-type]
  137 |         };
      |         ^
./ls_solution.h: In member function ‘virtual double ivg::Ls_solution::calc_rms()’:
./ls_solution.h:144:9: warning: no return statement in function returning non-void [-Wreturn-type]
  144 |         };
      |         ^
./ls_solution.h: In member function ‘virtual int ivg::Ls_solution::get_degrees_of_freedom()’:
./ls_solution.h:216:9: warning: no return statement in function returning non-void [-Wreturn-type]
  216 |         };
      |         ^
./ls_solution.h: In member function ‘virtual int ivg::Ls_solution::get_nobs()’:
./ls_solution.h:219:9: warning: no return statement in function returning non-void [-Wreturn-type]
  219 |         };
      |         ^
make: *** [Makefile:44: eop_series.o] Error 1

Led by notes in colmap/colmap#793 I changed the MakeFile for ivg to allow compiling with libcgal5.

Space missing in writing wrapper log message

<LEVEL4> *** writing wrapper file/home/eskil/vgosdb//2020/20NOV12VB/20NOV12VB_V005_iiii_kall.wrp
should be
<LEVEL4> *** writing wrapper file /home/eskil/vgosdb//2020/20NOV12VB/20NOV12VB_V005_iiii_kall.wrp
with space after "file"

Typo: gravtational_deformation

grep -r gravtational_deformation *
Binary file bin/ivg_indep matches
Binary file bin/sinex_analyzer matches
Binary file bin/solve_ambiguities matches
Binary file bin/ivg_atools_tropo matches
Binary file bin/ivg_atools matches
Binary file bin/ivg_atools_eop matches
Binary file bin/ivg_global matches
config/ONTIE_groupdelay.cfg: gravtational_deformation = true;
config/ONTIE_groupdelay.cfg:# gravtational_deformation = false;
Binary file lib/libIvgUtils.a matches
src/ivg/obs.cpp: if(((_session->_setup)).exists("gravtational_deformation")&&(bool)((_session->_setup))["gravtational_deformation"])
Binary file src/ivg/obs.o matches

It should be "gravitational_deformation" with the letter "i". This typo should be fixed, but will then also require updating config files etc.

Using current masterfiles fail

eskil@grotte:~$ ivg_indep -v 5 -c ONTIE_groupdelay.cfg

===================================================================
> > > > > ivg::ASCOT (independent solution) ver-2021-01-01 < < < < <

terminate called after throwing an instance of 'std::runtime_error'
what(): Masterfile::Masterfile(string directory, int start_year, int end_year): Unexpected field length of 16 with tokens IVS-R1875 R1875 JAN02 217:0024 in masterfile: /opt/ascot/apriori_files/masterfiles//master19.txtONN19JAN161.0 XA NASA 13 4639

This is with the official masterfile downloaded. Old files included in the ascot code bundle works. Now trying to figure out the difference...

Unindentified file associations Phase_bX and RefFreq_bX

When reading in a database (with phase-delays present), I find two unidentified (n/a) file associations:

n/a: Phase_bX
n/a: RefFreq_bX

see complete output:

eskil@gyller:~/ascot$ time /opt/ascot/bin/ivg_indep -c ONTIE_groupdelay_test.cfg -v 5  -r
 
 =================================================================== 
     > > > > > ivg::ASCOT (independent solution) ver-2021-01-01 < < < < <     

<LEVEL0> ********* processing session 20NOV13VB 																	
<LEVEL1> !!! No session found within masterfiles for dbname: 20NOV13VB are start and end year specified correct?
<LEVEL3> *** Initializing ivg::Eop_series with /opt/ascot/apriori_files/usno_finals.erp between 29/OCT/2020 - 28/NOV/2020
<LEVEL4> *** ivg::parser::cs_erp Matrix #rows:31
<LEVEL1> !!! No session found within masterfiles for dbname: 20NOV13VB are start and end year specified correct?
<LEVEL4> *** Using latest wrapper file 20NOV13VB_V004_iOSO_kall.wrp
*** The following file associations have been found:
X-band:
   Head: Head
   ObsCrossRef: ObsCrossRef
   StationCrossRef: StationCrossRef
   Sources: SourceCrossRef
   CorrInfo: CorrInfo-difx_bX
   GroupDelayFull: GroupDelayFull_bX
   GroupDelay: GroupDelay_bX
   SBDelay: SBDelay_bX
   SNR: SNR_bX
   NumGroupAmbig: NumGroupAmbig_bX
   AmbigSize: AmbigSize_bX
   QualityCode: QualityCode_bX
   GroupRate: GroupRate_bX
   n/a: Phase_bX
   n/a: RefFreq_bX
   ScanName: ScanName
   TimeUTC: TimeUTC
S-band:
   Head: Head
   ObsCrossRef: ObsCrossRef
   StationCrossRef: StationCrossRef
   Sources: SourceCrossRef
   ScanName: ScanName
   TimeUTC: TimeUTC
...

The unindentified data should be identified.

std::exception: vector::_M_range_check with "simple" outlier detection

Problem when using "simple" outlier detection defined as this:

    test_method = ( ( "baarda", { significance_level = 1e-9; } ), 
                    ( "pope",   { significance_level = 1e-9; } ),
                    ( "simple", { iterations = 25;
                                    threshold = 1.0e-9; # 1 ns
                                    quantile = 5.0 } ) ); 

    # additional information which editing should be used (e.g. iIVS or iGSFC) 
    # used for creating GroupDelayFull_bX.nc and Edit.nc filenames and search of the wrapper
    vgosdb_editing = "iOSO";

    outliers = { 
                 detect      = true;
                 restoration = ( true,3.0 );
                 data_snooping = "simple";
                 #data_snooping = "pope";
                 save = ( false, "Edit_AI2");# if true, quality_code = 0 
                                            # AND use_obs_flags = false
                                            # have to be set!
                 load = (true, "Edit_NGS");
                 force_load = false; # force to load EXACTLY e.g. Edit_IVG 
            };

I get this error:

<LEVEL2> *** Dimension of jacobian matrix: 3417 x 56
<LEVEL3> *** #outlier iteration 1: 3416
<LEVEL3> *** #outlier iteration 2: 0
<LEVEL3> *** #outlier iteration 3: 3417
<LEVEL3> *** #outlier iteration 4: 0
<LEVEL3> *** #outlier iteration 5: 3417
<LEVEL3> *** #outlier iteration 6: 0
<LEVEL3> *** #outlier iteration 7: 3417
<LEVEL3> *** #outlier iteration 8: 0
<LEVEL3> *** #outlier iteration 9: 3417
<LEVEL3> *** #outlier iteration 10: 0
<LEVEL3> *** #outlier iteration 11: 3417
<LEVEL3> *** #outlier iteration 12: 0
<LEVEL3> *** #outlier iteration 13: 3417
<LEVEL3> *** #outlier iteration 14: 0
<LEVEL3> *** #outlier iteration 15: 3417
<LEVEL3> *** #outlier iteration 16: 0
<LEVEL3> *** #outlier iteration 17: 3417
<LEVEL3> *** #outlier iteration 18: 0
<LEVEL3> *** #outlier iteration 19: 3417
<LEVEL3> *** #outlier iteration 20: 0
<LEVEL3> *** #outlier iteration 21: 3417
<LEVEL3> *** #outlier iteration 22: 0
<LEVEL3> *** #outlier iteration 23: 3417
<LEVEL3> *** #outlier iteration 24: 0
<LEVEL3> *** #outlier iteration 25: 3417
std::exception: vector::_M_range_check: __n (which is 0) >= this->size() (which is 0) in 20AUG10VB

if instead using "pope" it works and I get a solution.

Explain or remove hardcoded TRF.SSC reference

grep -r TRF.SSC *
[... binary files]
src/ivg/masterfile.cpp: // TRF.SSC only used for calculating network volume
src/ivg/masterfile.cpp: vectorivg::Analysis_station all_stations = ivg::parser::ssc_parser(directory+"/TRF.SSC", nscodes);

Why use this file, and not the input TRF file selected in the config? The current way, TRF.SSC must always reside in apriori_files/masterfiles/. This is a limitation, and not obvious why.

ONSA13NE/SW does not get ECC values.

<LEVEL3> *** TRF vtrf2019ext Data Information Table (W: Warning, E: Error, X: Set, Empty: Not Set)
***            XYZ| OPTL|  OLC| VMF1| VMF3|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|
*** ONSA13NE|    X|    X|    X|     |    X|     |    X|     |    X|     |     |     |     |     |     |
*** ONSA13SW|    X|    X|    X|     |    X|     |    X|     |    X|     |     |     |     |     |     |
*** ONSALA60|    X|    X|    X|     |    X|     |    X|    X|    X|     |     |     |     |     |     |
***            XYZ| OPTL|  OLC| VMF1| VMF3|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|

For some reason, ONSA13NE/SW does not get ECC values, despite being in ECC file:

  ONSA13NE 7316  1970.01.01-00:00  2050.01.01-00:00      0.0        0.0        0.0     XYZ
  ONSA13SW 7317  1970.01.01-00:00  2050.01.01-00:00      0.0        0.0        0.0     XYZ
  ONSALA60 7213  1970.01.01-00:00  2050.01.01-00:00      0.0        0.0        0.0     XYZ
  ONSAFLEX 7213  1970.01.01-00:00  2050.01.01-00:00      0.0        0.0        0.0     XYZ
  ONSAVDIF 7213  1970.01.01-00:00  2050.01.01-00:00      0.0        0.0        0.0     XYZ
  ONSALAAN 7213  1970.01.01-00:00  2050.01.01-00:00      0.0        0.0        0.0     XYZ

PhaseDelay Edit table read when using group-delay solution

I use a config file with

# must be false except you are running 'solve_ambiguities' program
solve_ambig = false;
SB_solution = false;
phase_solution=false;

So it should solve for group-delays. But, when reading the vgosDb I find:

<LEVEL4> *** read Phase in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20NOV13VB//Observables/Phase_bX.nc
<LEVEL4> *** read PhaseSig in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20NOV13VB//Observables/Phase_bX.nc
<LEVEL1> !!! no entry found for "n/a" (X-band) in wrapper
<LEVEL1> !!! No PhasesDelays found (/ObsEdit/PhaseDelayFullX.nc not existent). Calculating from phase
<LEVEL4> *** read QualityCode in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20NOV13VB//Observables/QualityCode_bX.nc

Is reading the PhaseDelay-editing necessary for group-delay only solving?

Change libconfig++ syntax

Old libconfig++ syntax generate compiler errors with new libconfig++ version, e.g.

trf.cpp:318:93: error: no match for ‘operator[]’ (operand types are ‘libconfig::Setting’ and ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’)
definitions["troposphere"]["external_meteo_data"][string((const char*)setup["troposphere"]["external_meteo_data"][2])],

This can be solved by using the new ".lookup()" syntax instead, so changing e.g.

OLD:
definitions["troposphere"]["external_meteo_data"][string((const char*)setup["troposphere"]["external_meteo_data"][2])],
to NEW:
definitions["troposphere"]["external_meteo_data"].lookup(string((const char*)setup["troposphere"]["external_meteo_data"][2])),

Add SFF file generation

May be useful to be able to generate SFF (spool files), for easy comparison with other softwares e.g. nuSolve.

Outliers causing "std::exception: Matrix::solve_neq: LAPACK error: 54 in 19MAY15VB" ?

Some databases have had issues with errors like

...
<LEVEL3> *** #44 constraints added to system due to create_constraint_conditions
<LEVEL3> *** #3 constraints added to system due to NNR on 0 of 80 sources
Type: vgosdb
<LEVEL2> *** Dimension of jacobian matrix: 568 x 54
<LEVEL3> *** #outlier iteration 1: 353
<LEVEL3> *** #outlier iteration 2: 414
<LEVEL3> *** #outlier iteration 3: 354
<LEVEL3> *** #outlier iteration 4: 372
<LEVEL3> *** #outlier iteration 5: 348
<LEVEL3> *** #outlier iteration 6: 360
<LEVEL3> *** #outlier iteration 7: 355
<LEVEL3> *** #outlier iteration 8: 360
<LEVEL3> *** #outlier iteration 9: 366
<LEVEL3> *** #outlier iteration 10: 357
<LEVEL3> *** #outlier iteration 11: 366
<LEVEL3> *** #outlier iteration 12: 355
<LEVEL3> *** #outlier iteration 13: 366
<LEVEL3> *** #outlier iteration 14: 352
<LEVEL3> *** #outlier iteration 15: 369
<LEVEL3> *** #outlier iteration 16: 346
<LEVEL3> *** #outlier iteration 17: 377
std::exception: Matrix::solve_neq: LAPACK error: 54 in 19MAY15VB
   1 ONSA13SW zwd   0  58619.58699   2.32402572293164e+00   2.32402572293164e+00   0.00000000000000e+00 0.00000000000e+00 m   
 =================================================================== 

Could perhaps be related to other outlier-detection issues?

Find epoch string location in SSC files

It appears number of spaces can change in e.g. VTRF SSC files. A line such as
STATION POSITIONS AT EPOCH 2010.0 AND VELOCITIES
is parsed to find the epoch (2010.0) but assuming a fixed position of the epoch chars. Given that spaces change, would be better to search the line to find the epoch position.

Include column headers in result-files?

On screen, with verbose output, we see e.g.

<LEVEL2> ***  IDX   #  STATION  TYPE O         MJD                  TOTAL                APRIORI               ESTIMATE     STD-DEVIATION   UNIT
<LEVEL2> *** 0000    1 ONSA13NE stax  0  59166.79132   3.37088916499188e+06   3.37088914425137e+06   2.07405101478703e-02 4.77486357968e-02 m   
<LEVEL2> *** 0001    1 ONSA13NE stay  0  59166.79132   7.11571360108150e+05   7.11571357782975e+05   2.32517518328316e-03 2.37141413509e-02 m   
<LEVEL2> *** 0002    1 ONSA13NE staz  0  59166.79132   5.34969216374762e+06   5.34969216538193e+06  -1.63430928283001e-03 7.20369024125e-02 m   
<LEVEL2> *** 0003    1 ONSA13SW stax  0  59166.79132   3.37094658377798e+06   3.37094662545137e+06  -4.16733965412641e-02 4.89735171411e-02 m   
<LEVEL2> *** 0004    1 ONSA13SW stay  0  59166.79132   7.11534640152964e+05   7.11534665482975e+05  -2.53300104083209e-02 2.43033525378e-02 m   
...
<LEVEL2> *** 0238    1 ONSA13SW zwd   0  59167.25006   2.33680202024845e+00   2.29904550307900e+00   3.77565171694483e-02 7.03679207937e-02 m   
<LEVEL2> *** 0239    1 ONSA13SW zwd   0  59167.27089   2.31578432759127e+00   2.29966109814949e+00   1.61232294417751e-02 7.33942315508e-02 m   
<LEVEL2> ***  IDX   #  STATION  TYPE O         MJD                  TOTAL                APRIORI               ESTIMATE     STD-DEVIATION   UNIT
<LEVEL2> *** Database: 20NOV13VB VFAC: 122.977 WRMS: 1.5126e-09 RMS: 1.79131e-09
<LEVEL3> *** Writing results to /mnt/raidz0/ASCOT_out/GR/output//20NOV13VB_result.txt
<LEVEL3> *** Writing /mnt/raidz0/ASCOT_out/GR/sinex//20NOV13VB_oso2020x.snx
<LEVEL3> *** Writing /mnt/raidz0/ASCOT_out/GR/sinex//20NOV13VB.tro

But in the results file it just says

20NOV13VB
---------
0000    1 ONSA13NE stax  0  59166.79132   3.37088916499188e+06   3.37088914425137e+06   2.07405101478703e-02 4.77486357968e-02 m
0001    1 ONSA13NE stay  0  59166.79132   7.11571360108150e+05   7.11571357782975e+05   2.32517518328316e-03 2.37141413509e-02 m
0002    1 ONSA13NE staz  0  59166.79132   5.34969216374762e+06   5.34969216538193e+06  -1.63430928283001e-03 7.20369024125e-02 m
0003    1 ONSA13SW stax  0  59166.79132   3.37094658377798e+06   3.37094662545137e+06  -4.16733965412641e-02 4.89735171411e-02 m
...

Wouldn't it be good to have the header line also in the result files? There is already some header info with exp name, but could add

IDX   #  STATION  TYPE O         MJD                  TOTAL                APRIORI               ESTIMATE     STD-DEVIATION   UNIT

Cannot plot residuals

Cannot plot residuals with any version since putting on github. Using -r flag on ivg_indep I get e.g.

...
<LEVEL3> *** Creating Solution-Infos...
<LEVEL3> *** Solution-Infos created.
std::exception: void Plot::_plot_coastline(QFormat format) in plot.cpp: Failed to open file:  in 20NOV12VB
 =================================================================== 

Maybe due to Qt4->5 upgrade?

Fix compiler warnings

There are a number of (possibly benign) compiler warnings with g++/gfortran 7.5.0. Should be fixed.

PhaseDelayFull missing PhaseDelay?

The 0.7.3 RC3 version of nuSolve will write ObsEdit/PhaseDelayFull_bX.nc. Ascot tries to read this:
*** read PhaseDelay in /data2/eskil/vgosdb_ONTIE//2020/20NOV12VB//ObsEdit/PhaseDelayFull_bX.nc
std::exception: template vector get_vector( string folder, string nc, string var ): Variable PhaseDelay not existent in /data2/eskil/vgosdb_ONTIE//2020/20NOV12VB//ObsEdit/PhaseDelayFull_bX.nc in 20NOV12VB

The variables inside the file seem to be called PhaseDelayFull instead of PhaseDelay.

Reading wrong eccentricities

I came across some cases when the eccentricities are not correctly read in. The reason is that ASCOT only reads the values of the eccentricities from column 56 onward in ECCDAT.ecc, thus only getting the first two characters before the decimal for the X/North eccentricity. Hence if this eccentricity is larger than +100 m or lower than -10 m the eccentricity will not be read correctly. This is luckily a very rare case, the only case I noticed is the station PENTICTN after 1996.01.01, where the X eccentricity is -194 m! This only affects a handful of sessions, but for the affected sessions the impact is significant, ASCOT will set the eccentricity to +94 m instead of -194 m, a difference of almost 300 m!
I will update the code in the file parser.cpp to correct this issue.

Explain / remove TRF.SSC hardcoded limitation

grep -r TRF.SSC *
[... binary files]
src/ivg/masterfile.cpp: // TRF.SSC only used for calculating network volume
src/ivg/masterfile.cpp: vectorivg::Analysis_station all_stations = ivg::parser::ssc_parser(directory+"/TRF.SSC", nscodes);

Why use this file, and not the input TRF file selected in the config? The current way, TRF.SSC must always reside in apriori_files/masterfiles/. This is a limitation, and not obvious why.

solve_ambiguities writes same wrapper version number

Input wrapper 4 gives output version 4. Should be 5.

Possibly file src/progs/solve_ambiguities/solve_ambiguities.cpp
line 538 wrapper.write_wrapper(new_editing);
where a version argument (now default to 999) could be given.

Could not open RefFreqX

If you use the option "use_wrapper=false" ASCOT will not use the wrapper to find the filenames, instead us the hardcoded names in the source-code. Unfortunately, the hardcoded name for the reference frequency is wrong, RefFreqX instead of RefFreq_bX. This causes and error, and the program will not work if the reference frequencies are need (e.g. when solving phase delay ambiguities).

TRF summary does not include VMF3

Using VMF3 I don't see any hint of this in TRF summary table when running indep_solution:

<LEVEL3> *** TRF vtrf2019ext Data Information Table (W: Warning, E: Error, X: Set, Empty: Not Set)
***            XYZ| OPTL|  OLC| VMF1|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|
*** ONSA13NE|    X|     |    X|     |     |    X|     |    X|     |     |     |     |     |     |
*** ONSA13SW|    X|     |    X|     |     |    X|     |    X|     |     |     |     |     |     |
*** ONSALA60|    X|     |    X|     |     |    X|    X|    X|     |     |     |     |     |     |
***            XYZ| OPTL|  OLC| VMF1|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|

<LEVEL1> !!! no entry found for "n/a" (X-band) in wrapper

E.g.

<LEVEL3> *** Initializing ivg::Crf with 126 sources based on icrf3
<LEVEL1> !!! no entry found for "ClockBreak" (X-band) in wrapper
<LEVEL1> !!! No information about ClockSetup (RefClockStationList) in vgosdb. Automatic setting of RefClock not possible. Must be done manually in configfile.
<LEVEL4> *** read Obs2Scan in /home/eskil/vgosdb//2020/20NOV12VB//CrossReference/ObsCrossRef.nc
<LEVEL4> *** read Obs2Baseline in /home/eskil/vgosdb//2020/20NOV12VB//CrossReference/ObsCrossRef.nc
<LEVEL4> *** read Scan2Station in /home/eskil/vgosdb//2020/20NOV12VB//CrossReference/StationCrossRef.nc
<LEVEL4> *** read ScanNameFull in /home/eskil/vgosdb//2020/20NOV12VB//Scan/ScanName.nc
<LEVEL4> *** read YMDHM in /home/eskil/vgosdb//2020/20NOV12VB//Observables/TimeUTC.nc
<LEVEL4> *** read Second in /home/eskil/vgosdb//2020/20NOV12VB//Observables/TimeUTC.nc
<LEVEL4> *** read Cal-Cable in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13NE/Cal-Cable_kCDMS.nc
<LEVEL4> *** read FeedRotation in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13NE/FeedRotation.nc
<LEVEL4> *** read TempC in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13NE/Met.nc
<LEVEL4> *** read AtmPres in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13NE/Met.nc
<LEVEL4> *** read RelHum in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13NE/Met.nc
<LEVEL4> *** read Cal-Cable in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13SW/Cal-Cable_kCDMS.nc
<LEVEL4> *** read FeedRotation in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13SW/FeedRotation.nc
<LEVEL4> *** read TempC in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13SW/Met.nc
<LEVEL4> *** read AtmPres in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13SW/Met.nc
<LEVEL4> *** read RelHum in /home/eskil/vgosdb//2020/20NOV12VB//ONSA13SW/Met.nc
<LEVEL4> *** read Cal-Cable in /home/eskil/vgosdb//2020/20NOV12VB//ONSALA60/Cal-Cable.nc
<LEVEL4> *** read FeedRotation in /home/eskil/vgosdb//2020/20NOV12VB//ONSALA60/FeedRotation.nc
<LEVEL4> *** read TempC in /home/eskil/vgosdb//2020/20NOV12VB//ONSALA60/Met.nc
<LEVEL4> *** read AtmPres in /home/eskil/vgosdb//2020/20NOV12VB//ONSALA60/Met.nc
<LEVEL4> *** read RelHum in /home/eskil/vgosdb//2020/20NOV12VB//ONSALA60/Met.nc
<LEVEL4> *** read GroupRate in /home/eskil/vgosdb//2020/20NOV12VB//Observables/GroupRate_bX.nc
<LEVEL4> *** read GroupRateSig in /home/eskil/vgosdb//2020/20NOV12VB//Observables/GroupRate_bX.nc
<LEVEL4> *** read GroupDelayFull in /home/eskil/vgosdb//2020/20NOV12VB//ObsEdit/GroupDelayFull_bX.nc
<LEVEL4> *** read GroupDelaySig in /home/eskil/vgosdb//2020/20NOV12VB//Observables/GroupDelay_bX.nc
<LEVEL4> *** read SBDelay in /home/eskil/vgosdb//2020/20NOV12VB//Observables/SBDelay_bX.nc
<LEVEL4> *** read SBDelaySig in /home/eskil/vgosdb//2020/20NOV12VB//Observables/SBDelay_bX.nc
<LEVEL4> *** read Phase in /home/eskil/vgosdb//2020/20NOV12VB//Observables/Phase_bX.nc
<LEVEL4> *** read PhaseSig in /home/eskil/vgosdb//2020/20NOV12VB//Observables/Phase_bX.nc
<LEVEL1> !!! no entry found for "n/a" (X-band) in wrapper
<LEVEL1> !!! No PhaseDelays found (/ObsEdit/PhaseDelayFull_bX.nc not existent). Calculating from Phase.
<LEVEL4> *** read QualityCode in /home/eskil/vgosdb//2020/20NOV12VB//Observables/QualityCode_bX.nc
<LEVEL1> !!! no entry found for "Cal-SlantPathIonoGroup" (X-band) in wrapper
<LEVEL1> !!! Cal-SlantPathIonoGroup*.nc not found in wrapper. Using Cal-SlantPathIonoGroup_bX.nc instead
<LEVEL1> !!! No ErrorFlag information available (variable /ObsDerived/Cal-SlantPathIonoGroup_bX.nc/Cal-SlantPathIonoGroupDataFlag not existent). Setting all observations to ErrorFlag = 0
<LEVEL1> !!! No IonoCorr information available (variable /ObsDerived/Cal-SlantPathIonoGroup_bX.nc/Cal-SlantPathIonoGroup not existent). Setting all IonoCorr & IonoCorrSigma = 0
<LEVEL4> *** read SNR in /home/eskil/vgosdb//2020/20NOV12VB//Observables/SNR_bX.nc
<LEVEL1> !!! no entry found for "SNR" (S-band) in wrapper
<LEVEL1> *** No SNR information available (/Observables/SNR_bS.nc not existent).
<LEVEL1> *** Using Edit.nc for DelayFlag because Edit_iOSO doesn't exist
<LEVEL4> *** read DelayFlag in /home/eskil/vgosdb//2020/20NOV12VB//ObsEdit/Edit.nc

with problematic line <LEVEL1> !!! no entry found for "n/a" (X-band) in wrapper. Seems to be in wrapper:

eskil@grotte:/opt/ascot$ grep "no entry found for" -r *
src/ivg/wrapper.cpp:    log<WARNING> ("!!! no entry found for \"") % wrapper_entries_to_string(entry) % "\" (" % ivg::band_to_string(band) % "-band) in wrapper";
src/ivg/wrapper.cpp:    log<WARNING> ("!!! no entry found for \"") % wrapper_entries_to_string(entry) % "\" " % sta % " in wrapper";

But the error is likely from something in ivg/session_inout.cpp, where the data is read.

"make clean" shows error for "satcode"

First time I ran "./make_ascot clean" I got

 ****** sat_code
g++ -Wall -O3 -pedantic -Wextra -c sgp.cpp
g++ -Wall -O3 -pedantic -Wextra -c sgp4.cpp
g++ -Wall -O3 -pedantic -Wextra -c sgp8.cpp
g++ -Wall -O3 -pedantic -Wextra -c sdp4.cpp
g++ -Wall -O3 -pedantic -Wextra -c sdp8.cpp
g++ -Wall -O3 -pedantic -Wextra -c deep.cpp
g++ -Wall -O3 -pedantic -Wextra -c basics.cpp
g++ -Wall -O3 -pedantic -Wextra -c get_el.cpp
g++ -Wall -O3 -pedantic -Wextra -c common.cpp
rm -f sat_code.a
ar rv ../lib/libsat.a sgp.o sgp4.o sgp8.o sdp4.o sdp8.o deep.o basics.o get_el.o common.o
ar: ../lib/libsat.a: No such file or directory
makefile:56: recipe for target 'sat_code.a' failed
make: *** [sat_code.a] Error 1

running a second time to check this errror, I got

 ****** sat_code
rm -f sat_code.a
ar rv ../lib/libsat.a sgp.o sgp4.o sgp8.o sdp4.o sdp8.o deep.o basics.o get_el.o common.o
ar: ../lib/libsat.a: No such file or directory
makefile:56: recipe for target 'sat_code.a' failed
make: *** [sat_code.a] Error 1

this without having run any compilation before (so no need to clean really). But still, should not be an error.

Error with VMF3 despite having proper definition

Having defined (and yes, files exist)

                troposphere:
                {
                        #temperature = { vmf1 = "/opt/ascot/apriori_files/VMF/station_matrices/" };
                        #pressure = { vmf1 = "/opt/ascot/apriori_files/VMF/station_matrices/" };
                        #mapping_function = { vmf1 = "/opt/ascot/apriori_files/VMF/station_matrices/" };
                        temperature = { vmf3 = "/opt/ascot/apriori_files/VMF3/station_matrices/" };
                        pressure = { vmf3 = "/opt/ascot/apriori_files/VMF3/station_matrices/" };
                        mapping_function = { vmf3 = "/opt/ascot/apriori_files/VMF3/station_matrices/" };
                        #temperature = { vmf1 = "/opt/ascot/apriori_files/VMF3/station_matrices/" };
                        #pressure = { vmf1 = "/opt/ascot/apriori_files/VMF3/station_matrices/" };
                        #mapping_function = { vmf1 = "/opt/ascot/apriori_files/VMF3/station_matrices/" };
                }

I get

<LEVEL0> *** START-Loading vgosDB (X-band) : /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB/
<LEVEL4> *** read EffectiveDuration in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB//Observables/CorrInfo-difx_bX.nc
<LEVEL4> *** read GeocMBD in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB//Observables/CorrInfo-difx_bX.nc
<LEVEL4> *** read iUTCInterval in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB///Head.nc
<LEVEL4> *** read NumObs in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB///Head.nc
<LEVEL4> *** read RefFreq in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB//Observables/RefFreq_bX.nc
<LEVEL4> *** read StationList in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB///Head.nc
<LEVEL4> *** read SourceList in /mnt/raidz0/K-analysis_Onames/vgosdbs//2020/20AUG10VB///Head.nc
<LEVEL3> *** Initializing ivg::Trf with SSC file /opt/ascot/apriori_files/IVS_TRF2019d_withOTT.SSC.txt including station displacements
libconfig::SettingException: SettingNotFoundException at setup.definitions.troposphere.mapping_function.vmf3

Using the first 3 lines, for vmf3 works. Second group, for vmf3 fails. Last group, calling it vmf1 but using vmf3 files also runs (but does it work properly?)

Plotting using "ivg_indep -r" fails

This solution runs, but refuses to plot?

eskil@gyller:~/ascot$ time /opt/ascot/bin/ivg_indep -c ONTIE_groupdelay_test.cfg -v 5  -r
 
 =================================================================== 
     > > > > > ivg::ASCOT (independent solution) ver-2021-01-01 < < < < <     

<LEVEL0> ********* processing session 20NOV13VB 																	
<LEVEL1> !!! No session found within masterfiles for dbname: 20NOV13VB are start and end year specified correct?
<LEVEL3> *** Initializing ivg::Eop_series with /opt/ascot/apriori_files/usno_finals.erp between 29/OCT/2020 - 28/NOV/2020
<LEVEL4> *** ivg::parser::cs_erp Matrix #rows:31
<LEVEL1> !!! No session found within masterfiles for dbname: 20NOV13VB are start and end year specified correct?
<LEVEL4> *** Using latest wrapper file 20NOV13VB_V004_iOSO_kall.wrp
*** The following file associations have been found:
...
<LEVEL2> *** Database: 20NOV13VB VFAC: 1.40354 WRMS: 1.72387e-11 RMS: 2.32683e-11
<LEVEL3> *** Writing results to /mnt/raidz0/ASCOT_out/RESULTS/output//20NOV13VB_result.txt
<LEVEL3> *** Writing /mnt/raidz0/ASCOT_out/RESULTS/sinex//20NOV13VB_oso2020x.snx
<LEVEL3> *** Writing /mnt/raidz0/ASCOT_out/RESULTS/sinex//20NOV13VB.tro
<LEVEL3> *** Creating Solution-Infos...
<LEVEL3> *** Solution-Infos created.
std::exception: void Plot::_plot_coastline(QFormat format) in plot.cpp: Failed to open file:  in 20NOV13VB
`

Wrong or missing end_date?

Seeing messages similar to this one for all ONTIE vgosDbs:
*** Observation 834/834 later than session-end from Edit***.nc. Setting new _end to 22/MAY/2019 23:59:00

Surprising, perhaps worth checking why this is? But seems benign as obs are included anyway.

Better "file not found" message?

Running "ivg_indep -c" with a non-existent filename generates

eskil@gyller:~$ time /opt/ascot/bin/ivg_indep -c ONTIE_groupdelay_test.cfg -v 5  
 
 =================================================================== 
     > > > > > ivg::ASCOT (independent solution) ver-2021-01-01 < < < < <     

terminate called after throwing an instance of 'libconfig::FileIOException'
  what():  FileIOException

Perhaps better to report which file is not found, and in a more graceful manner?

Clarify EditObs checks

I see this a lot for ONTIE vgosDBs:
!!! no entry found for "Edit" (X-band) in wrapper
!!! Edit*.nc not found in wrapper. Using Edit_iOSO.nc instead

Seems strange to me; "Edit*.nc" seems like a wildcard search in the wrong place? I assume it should find all, but fails? But it still gets the right one, so benign for now. Still a bit strange.

GUI shows local system time and not UTC?

It has been reported that the GUI shows local system time (e.g. CET) for inspection of data points rather than UTC. This should be confirmed, but if confirmed it should probably be changed to always show UTC for clarity.

ns-codes.txt always needed in masterfiles/

It appears ns-codes.txt must be in masterfiles directory, despite directives with other path to ns-codes in config. Would be nice to honor e.g.
definitions:
{
nscodes = "/opt/ascot/apriori_files/ns-codes.txt";
[...]

IERS library VMF1/3 confusion?

Found these lines in iers_wrapper.h:

    /**
     *  \b Description: \n
     *        Determines the Vienna Mapping Function 1(VMF1, grid version) including
     *        height correction (VMF1, grid version). The coefficients can be obtained 
     *        from the website http://ggosatm.hg.tuwien.ac.at/DELAY/GRID
     *  \param [in] [double *] ah - Hydrostatic coefficient a
     *  \param [in] [double *] aw - Wet coefficient a
     *  \param [in] [double *] mjd -Modified Julian Date
     *  \param [in] [double *] lat -Latitude given in radians (North Latitude)
     *  \param [in] [double *] hgt - Ellipsoidal height given in meters
     *  \param [in] [double *] zd - Zenith distance in radians
     *  \param [out] [double *] vmf1h - Hydrostatic mapping function
     *  \param [out] [double *] vmf1w - Wet mapping function
     */
     void vmf1_ht_( double *ah, double *aw, double *mjd, double *lat,
                    double *hgt, double *zd, double *vmf1h, double *vmf1w );
     /**
     *  \b Description: \n
     *        Determines the Vienna Mapping Function 3(VMF3, grid version) including
     *        height correction (VMF3, grid version). The coefficients can be obtained 
     *        from the website http://ggosatm.hg.tuwien.ac.at/DELAY/GRID
     *  \param [in] [double *] ah - Hydrostatic coefficient a
     *  \param [in] [double *] aw - Wet coefficient a
     *  \param [in] [double *] mjd -Modified Julian Date
     *  \param [in] [double *] lat -Latitude given in radians (North Latitude)
     *  \param [in] [double *] lon -Longitude given in radians (East Longitude)
     *  \param [in] [double *] hgt - Ellipsoidal height given in meters
     *  \param [in] [double *] zd - Zenith distance in radians
     *  \param [out] [double *] vmf1h - Hydrostatic mapping function
     *  \param [out] [double *] vmf1w - Wet mapping function
     */
     void vmf3_ht_( double *ah, double *aw, double *mjd, double *lat, double *lon,
                    double *hgt, double *zd, double *vmf1h, double *vmf1w );

For the latter function, the parameters "double *vmf1h, double *vmf1w " should be called vmf3, not vmf1, right?

PhaseDelayFull unit microseconds?

@TobNilsson noted in an email to Sergei today the following, which I think is worth remembering also here in the issue tracker:

I commonly find the files for S-band ( “ObsEdit/PhaseDelayFull_bS.nc” ) in many vgosDb’s from the 1990’ies (for example, 93MAY04XA, 98NOV17XE, and 99SEP14XE). [...] The format of these files are similar to “ObsEdit/GroupDelayFull_b?.nc”, except that the full phase delay is written in the field PhaseDelayFull (instead of the full group delay in GroupDelayFull). However, for some reason the unit of the phase delays written in the “ObsEdit/PhaseDelayFull_bS.nc”-files are in microseconds instead of seconds (as for the group delays in “ObsEdit/GroupDelayFull_b?.nc”). I don’t know if it for some strange reason should be so, or if it is an error in the vgosDB-files. I suppose we should try to clarify this. For now, ASCOT assumes that the unit of the phase delays are in microseconds, however, if this turns out to be wrong it can easily be changed.

So, perhaps we need/should change the way ASCOT interpret this unit at some point, if this gets clarified. I think it seems like an error, there's no reason to use a different unit there.

VMF3 info missing from status table

When solving, I see

<LEVEL3> *** TRF vtrf2019ext Data Information Table (W: Warning, E: Error, X: Set, Empty: Not Set)
***            XYZ| OPTL|  OLC| VMF1|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|
*** ONSA13NE|    X|    X|    X|     |     |    X|     |    X|     |     |     |     |     |     |
*** ONSA13SW|    X|    X|    X|     |     |    X|     |    X|     |     |     |     |     |     |
*** ONSALA60|    X|    X|    X|     |     |    X|    X|    X|     |     |     |     |     |     |
***            XYZ| OPTL|  OLC| VMF1|NTAPL| TAPL|  ECC|ANT_I|HYDLO|ANT_C| SEFD| FREQ| MASK|CHA_I|

But this is when I have chosen VMF3 (and no complaints about stations not being present, so it should work)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.