gnssrefl.subdaily module

gnssrefl.subdaily.apply_new_constraints(tv, azim1, azim2, ampl, peak2noise, d1, d2, h1, h2, freqs)

cleaning up the main code. this sorts data and applies various “commandline” constraints tv is the full set of results from gnssrefl

Parameters:
  • tv (numpy array) – lsp results

  • azim1 (float) – min azimuth (deg)

  • azim2 (float) – max azimuth (deg)

  • ampl (list of float) – required amplitude for periodogram

  • peak2noise (float) – require peak2noise criterion

  • d1 (int) – min day of year

  • d2 (int) – max day of year

  • h1 (float) – min reflector height (m)

  • h2 (float) – max reflector height (m)

  • freqs (list of int) – list of frequencies that correspond to minimum amplitudes if empty list, then just use the one amplitude for all

Returns:

  • tv (numpy array) – edited from input

  • t (numpy of floats) – crude time for obs, in fractional days

  • rh (numpy of floats) – reflector heights (m)

  • firstdoy (int) – first day of year

  • lastdoy (int) – last day of year

gnssrefl.subdaily.flipit(tvd, col)

take RH values from the first and last day and attaches them as fake data to make the spline fit stable. Also fill the temporal gaps with fake data

Parameters:
  • tvd (numpy array of floats) – output of LSP runs.

  • col (integer) – column number (in normal speak) of the RH results in python-speak, this has one subtracted

Returns:

  • tnew (numpy array of floats) – time in days of year

  • ynew (numpy array) – RH in meters

gnssrefl.subdaily.flipit2(tvd, col)

take RH values from the first and last day and attaches them as fake data to make the spline fit stable. Also fill the temporal gaps with fake data

This version uses MJD rather than day of year for x-axis

Parameters:
  • tvd (numpy array of floats) – output of LSP runs.

  • col (integer) – column number (in normal speak) of the RH results in python-speak, this has one subtracted

Returns:

  • tnew (numpy array of floats) – time in days of year

  • ynew (numpy array) – RH in meters

gnssrefl.subdaily.fract_to_obstimes(spl_x)

this does not seem to be used

Parameters:
  • spl_x (numpy array) – fractional time

  • obstimes (numpy array) – datetime format

gnssrefl.subdaily.my_percentile(rh, p1, p2)

numpy percentile was crashing docker build this is a quick work around

Parameters:
  • rh (numpy array) – reflector heights, but could be anything really

  • p1 (float) – low percentage (from 0-1)

  • p2 (float) – high percentage (from 0-1)

Returns:

  • low (float) – low value (using input percentile)

  • highv (float) – high value (using input percentile)

gnssrefl.subdaily.output_names(txtdir, txtfile, csvfile, jsonfile)

figures out what the names of the outputs are going to be

I have modified this so it always returns plain txt. csv will simply be written out in addition.

this function no longer has much point.

Parameters:
  • txtdir (str) – the directory where the results should be written out

  • txtfile (str) – name of the output file

  • csvfile (bool) – cl input whether the output file should be csv format

  • jsonfile (bool) – cl input for whether the output file should be in the json format

Returns:

  • writetxt (bool) – whether output should be plain txt

  • writecsv (bool) – whether output should be csv format

  • writejson (bool) – whether output should be json format

  • outfile (str) – output filename

gnssrefl.subdaily.readin_and_plot(station, year, d1, d2, plt2screen, extension, sigma, writecsv, azim1, azim2, ampl, peak2noise, txtfile, h1, h2, kplt, txtdir, default_usage, hires_figs, fs, **kwargs)

Reads in and concatenates RH results from previous runs of gnssir and makes various plots to help users assess the quality of the solution

This is basically “section 1” of the code

Parameters:
  • station (str) – 4 character station name

  • year (int) – full year

  • d1 (int) – first day of year evaluated

  • d2 (int) – last day of year evaluated

  • plt2screen (bool) – if True plots are displayed to the screen

  • extension (str) – allow user to specify an extension for results (i.e. gnssir was run using extension string)

  • sigma (float) – how many standard deviations away from mean you allow for the crude outlier detector.

  • writecsv (bool) – whether output is written in csv format.

  • azim1 (float) – minimum azimuth value (degrees)

  • azim2 (float) – maximum azimuth value (degrees)

  • ampl (float) – minimum LSP amplitude allowed this has been changed to a list as of v 3.6.6 it corresponds to the frequency list

  • peak2noise (float) – minim peak2noise value to set solution good

  • txtfile (str) – name of plain text output file

  • h1 (float) – minimum reflector height (m)

  • h2 (float) – maximum reflector height (m)

  • kplt (bool) – special plot made

  • txtdir (str) – directory where the results will be written

  • default_usage (bool) – flag as to whether you are using this code for subdaily or for rh_plot. this changes the plots a bit.

  • hires_figs (bool) – whether to switch from png to eps

  • fs (int) – fontsize for figure axes

Returns:

  • tv (numpy array) – LSP results (augmented)

  • otimes (datetime object) – times of observations

  • fname (str) – initial result file - colated

  • fname_new (str) – result file with outliers removed

gnssrefl.subdaily.rhdot_correction2(station, fname, fname_new, pltit, outlierV, outlierV2, **kwargs)

Part two of subdaily. It computes rhdot correction and interfrequency bias correction for RH time series. This code assumes you have at least removed crude outliers in the previous section of the subdaily code.

Parameters:
  • station (str) – 4 char station name

  • fname (list of str) – input filename(s)

  • fname_new (str) – output filename for results

  • pltit (bool) – whether you want plots to the screen

  • outlierV (float) – outlier criterion, in meters used in first go thru if None, then use 3 sigma (which is the default)

  • outlierV2 (float) – outlier criterion, in meters used in second go thru if None, then use 3 sigma (which is the default)

  • delta_out (float, optional) – seconds for smooth output

  • txtdir (str) – if wanting to set your own output directory

  • apply_if_corr (bool, optional) – whether you want to apply the IF correction default is true

  • apply_rhdot (bool, optional) – whether you want to apply the rhdot correction default is true

  • gap_min_val (float, optional) – gap allowed in last spline, in hours

  • knots2 (int, optional) – a secondary knot value if you want the final output to use a different one than the one used for outliers and RH dot

  • gap_flag (bool, option) – whether gaps are written as 999 in final output

gnssrefl.subdaily.spline_in_out(x, y, knots_per_day)
Parameters:
  • x (numpy of floats) – time of observations in fractional days

  • y (numpy of floats) – reflector heights in meters

  • knots_per_day (int) – number of knots per day

Returns:

  • xx (numpy of floats) – regularly spaced observations

  • spline(xx) (numpy of floats) – spline value at those times

gnssrefl.subdaily.write_out_header(fout, station, extraline, **kwargs)

writes out header for results file …

Parameters:
  • fout (fileID)

  • station (str) – 4 character station name

  • extraline (bool) – not sure why this is here

gnssrefl.subdaily.write_subdaily(outfile, station, ntv, csv, extraline, **kwargs)

writes out the subdaily results. currently only works for plain txt

>> this code should be moved to the library

Parameters:
  • input (str) – output filename

  • station (str) – 4 character station name, lowercase

  • nvt (numpy multi-dimensional) – the variable with the LSP results read via np.loadtxt

  • csv (bool) – whether both csv and txt file should be written

  • extraline (bool) – whether the header has an extra line