gnssrefl.gnssir_input module
- gnssrefl.gnssir_input.main()
- gnssrefl.gnssir_input.make_gnssir_input(station: str, lat: float = 0, lon: float = 0, height: float = 0, e1: float = 5.0, e2: float = 25.0, h1: float = 0.5, h2: float = 8.0, nr1: float = None, nr2: float = None, peak2noise: float = 2.8, ampl: float = 5.0, allfreq: bool = False, l1: bool = False, l2c: bool = False, xyz: bool = False, refraction: bool = True, extension: str = '', ediff: float = 2.0, delTmax: float = 75.0, frlist: list = [], azlist2: list = [0, 360], ellist: list = [], refr_model: str = '1', apriori_rh: float = None, Hortho: float = None, pele: list = [5, 30], daily_avg_reqtracks: int = None, daily_avg_medfilter: float = None, subdaily_alt_sigma: bool = None, subdaily_ampl: float = None, subdaily_delta_out: float = None, subdaily_knots: int = None, subdaily_sigma: float = None, subdaily_subdir: str = None, subdaily_spline_outlier1: float = None, subdaily_spline_outlier2: float = None)
This new script sets the Lomb Scargle analysis strategy you will use in gnssir. It saves your inputs to a json file which by default is saved in REFL_CODE/<station>.json. This code replaces make_json_input.
This version no longer requires you to have azimuth regions of 90-100 degrees. You can set a single set of azimuths in the command line variable azlist2, i.e. -azlist2 0 270 would accommodate all rising and setting arcs between 0 and 270 degrees. If you have multiple distinct regions, that is also acceptable, i.e. -azlist2 0 150 180 360 would use all azimuths between 0 and 360 except for 150 to 180
Your first azimuth constraint can be negative, i.e. -azlist2 -90 90, is allowed.
Note: you can keep using your old json files - you just need to add this new -azlist2 setting manually.
Latitude, longitude, and height are assumed to be stored in either the UNR database we provide with gnssrefl or in your local coordinate file. See the instructions in the file formats section of gnssrefl for information about the format, name, and location of that local coordinate file.
Originally we had refraction as a boolean, i.e. on or off. This was stored in the gnssir analysis description json. The code however, uses a 1 for a simple non-time-varying Bennett correction and 0 for no correction.
From version 1.8.4 we begin to implement more refraction models. Model 1 (Bennett) will continue to be the default. The model number is written (as an integer) to the LSP results file so that people can keep track easily of whether they are inadvertently mixing files with different strategies. And that is why it is an integer, because all results in the LSP results files are numbers. Going forward, we are adding a time-varying capability.
Model 1: Bennett, non-time-varying
Model 2: Bennett, time-varying
Model 3: Ulich, non-time-varying
Model 4: Ulich, time-varying
Model 5: NITE, Feng et al. 2023 DOI: 10.1109/TGRS.2023.3332422, time-varying
Model 6: MPF, Williams and Nievinski, 2017, DOI: 10.1002/2016JB013612, time-varying
We allow users to input the model names NITE and MPF (nite and mpf also allowed). The other models do not allow that. If you want model 2, you have to ask for model 2. We thank Peng Feng for providing python code to be used for some of these models.
If you want to test the effect of different refraction models, you are encouraged to create two json files using the extension option. You can then run gnssir using those two extensions. In general I think the refraction default is fine for soil moisture and snow accumulation. If you are going to look at tall sites, you most definitely need the refraction correction. If you plan to look at very tall sites, you should pick the best one.
Examples
- gnssir_input p041
uses only GPS frequencies and all azimuths and the coordinates in the UNR database
- gnssir_input p041 -azlist2 0 180 -fr 1 101
uses UNR coordinates, GPS L1 and Glonass L1 frequencies, and azimuths between 0 and 180.
- gnssir_input p041 -lat 39.9494 -lon -105.19426 -height 1728.85 -l2c T -e1 5 -e2 15
uses only L2C GPS data between elevation angles of 5 and 15 degrees. user input lat/long/height. The lat/long/height can also be entered into a local coordinate file. See documentation in the file formats section.
- gnssir_input p041 -h1 0.5 -h2 10 -e1 5 -e2 25
uses UNR database, only GPS data between elevation angles of 5-25 degrees and reflector heights of 0.5-10 meters
- gnssir_input p041 -ediff 1
uses UNR database, only GPS data, default station coordinates, enforces elevation angles to be within 1 degrees of default elevation angle limits (5-25)
- gnssir_input sc02 -ellist 5 10 7 12
let’s say you want to compute smaller arcs than just a single set of elevation angles. you can use this to set this up, so instead of 5 and 12, you could set it up to do two arcs, one for 5-10 degrees and the other for 7-12. WARNING: you need to pay attention to QC metrics (amplitude and peak2noise). You likely need to lower them since your periodogram for fewer data will be less robust than with the longer elevation angle region.
- Parameters:
station (str) – 4 character station ID.
lat (float, optional) – latitude in degrees.
lon (float, optional) – longitude in degrees.
height (float, optional) – ellipsoidal height in meters.
e1 (float, optional) – elevation angle lower limit in degrees. default is 5.
e2 (float, optional) – elevation angle upper limit in degrees. default is 25.
h1 (float, optional) – reflector height lower limit in meters. default is 0.5.
h2 (float, optional) – reflector height upper limit in meters. default is 8.
nr1 (float, optional) – noise region lower limit for QC in meters. default is None.
nr2 (float, optional) – noise region upper limit for QC in meters. default is None.
peak2noise (float, optional) – peak to noise ratio used for QC. default is 2.7 (just a starting point for water - should be 3 or 3.5 for snow or soil…)
ampl (float, optional) – spectral peak amplitude for QC. default is 6.0 this is receiver and elevation angle region dependent - so you need to change it based on your site
allfreq (bool, optional) – True requests all GNSS frequencies. default is False (defaults to use GPS frequencies).
l1 (bool, optional) – set to True to use only GPS L1 frequency. default is False.
l2c (bool, optional) – set to use only GPS L2C frequency. default is False.
xyz (bool, optional) – set to True if using Cartesian coordinates instead of Lat/Long/Ht. default is False.
refraction (bool, optional) – set to False to turn off refraction correction. default is True.
extension (str, optional) – provide extension name so you can try different strategies. Results will then go into $REFL_CODE/YYYY/results/ssss/extension Default is ‘’
ediff (float, optional) – quality control parameter (Degrees) Allowed min/max elevation angle diff from requested min/max elev angle default is 2
delTmax (float, optional) – maximum allowed arc length (minutes) default is 75, which can be a bit long for tides
frlist (list of integers) – avoids all the booleans - if you know the frequencies, enter them. e.g. 1 2 or 1 20 5 or 1 20 101 102
azlist2 (list of floats) – Default is 0 to 360. list of azimuth limits as subquadrants are no longer required.
ellist (list of floats) – min and max elevation angles to be used with the azimuth regions you listed, i.e. [5 10 6 11 7 12 8 13] would allow overlapping regions - all five degrees long Default is empty list.
refr_model (str) – refraction model. While defined as a string (so that people can specify names of models) we convert this to an integer for book-keeping. 1 is the default refraction model (it corrects elevation angles using standard bending models). 0 is no refraction correction. The other models are defined in the summary section of this code.
apriori_rh (float) – apriori reflector height (meters). only used in NITE model
Hortho (float) – station orthometric height, in meters. Currently only used in subdaily. If not provided on the command line, it will use ellipsoidal height and EGM96 to compute.
pele (float) – min and max elevation angles in direct signal removal, i.e. 3 40. Default is 5 30.
daily_avg_reqtracks (int, optional) – number of tracks required for daily_avg code
daily_avg_medfilter (float, optional) – median filter value required for daily_avg code (meters)
subdaily_alt_sigma (bool, optional) – use Nievinski sigma definition
subdaily_ampl (float, optional) – override the required LSP amplitude
subdaily_delta_out (int, optional) – spacing for final subdaily spline output
subdaily_knots (int, optional) – number of knots per day for subdaily spline fits
subdaily_sigma (float, optional) – how many standard deviations for outliers in subdaily code setting
subdaily_subdir (str, optional) – non-standard location for subdaily outputs
subdaily_spline_outlier1 (float, optional) – alternate setting for outlier detection in part1
subdaily_spline_outlier2 (float, optional) – alternate setting for outlier detection in part2
- gnssrefl.gnssir_input.parse_arguments()