From bc4b8078cc422f49b6708ac479e5e5c33a2f7b48 Mon Sep 17 00:00:00 2001 From: Andreas Kvas Date: Wed, 27 May 2026 10:09:29 +0000 Subject: [PATCH 1/2] fixed typos in config elements of GnssTransmitterGeneneratorGnss --- docs/html/documentationSearchIndex.js | 2 +- docs/html/gnssTransmitterGeneratorType.html | 4 ++-- docs/latex/classes.auto.tex | 4 ++-- groops.xsd | 8 ++++++-- .../gnssTransmitterGeneratorGnss.cpp | 7 +++++-- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/docs/html/documentationSearchIndex.js b/docs/html/documentationSearchIndex.js index 93aa1295..0a98904f 100644 --- a/docs/html/documentationSearchIndex.js +++ b/docs/html/documentationSearchIndex.js @@ -361,7 +361,7 @@ var documents = { 'gnssParametrizationType': { 'name': 'gnssParametrizationType', 'key': 'gnssParametrizationType', 'description': 'This class defines the models and parameters of the linearized observation equations for all phase and code measurements (see GnssProcessing ) where the left side is the observation vector minus the effects computed from the a priori models. After each least squares adjustment (see ) the a priori parameters are updated The vector can be written with . Any outputfiles defined in the parametrizations are written with . Each parametrization (and possible constraint equations) has a name which enables activating/deactivating the estimation of subsets of with . The a priori model is unaffected and is always reduced. The model for the different observation types can be described as The notation describes the attribution to a signal type (i.e., C or L), frequency , signal attribute (e.g., C, W, Q, X), transmitting satellite , and observing receiver . It follows the , see GnssType . See also GnssProcessing . The influence of the ionosphere is modelled by a STEC parameter (slant total electron content) in terms of between each transmitter and receiver at each epoch. These parameters are pre-eliminated from the observation equations before accumulating the normal equations. This is similar to using the ionosphere-free linear combination as observations but only one STEC parameter is needed for an arbitrary number of observation types. The influence on the code and phase observation is modeled as The second order term depends on the and the direction of the signal . If further information about the ionosphere is available (in the form of a prior model or as additional parametrizations such as or ) the STEC parameters describe local and short–term scintillations. The STEC parameters are estimated as additions to the model and it is advised to constrain them towards zero with a standard deviation of sigmaSTEC . The influence of the ionosphere is modelled by a VTEC parameter (vertical total electron content) in terms of for every selected receiver at each epoch. Optionally, VTEC gradients in the North (x) and East (y) direction can be estimated via . The slant TEC is computed based on the VTEC and the optional North and East gradients and using the elevation-dependent Modified Single-Layer Model (MSLM) mapping function inserted into eq. , where is the azimuth angle and is the elevation angle. The result is written as a times series file at epochs with observations depending on . This class provides a simplified model of the ionosphere for single receivers and enables the separation of the TEC and signal biases, meaning becomes estimable. Local and short-term scintillations should be considered by adding loosely constrained . The parameter names are <station>:VTEC::<time> , <station>:VTECGradient.x:<temporal>:<interval> , <station>:VTECGradient.y:<temporal>:<interval> . Apriori VTEC maps can be removed from the observations with (e.g. from GnssIonex2GriddedDataTimeSeries ). The ionosphere is parametrized in terms of in a single layer sphere with radiusIonosphericLayer as a ly changing (e.g. hourly linear splines) spherical harmonics expansion up to maxDegree = 15 in a solar-geomagentic frame defined by . The VTEC values are mapped to STEC values in the observation equations via eq. . The estimated VTEC inclusive the apriori can be written to evaluated at and . Local and short-term scintillations should be considered by adding constrained . To account for signal biases add . The parameter names are VTEC:sphericalHarmonics.c_<degree>_<order>:<temporal>:<interval> , VTEC:sphericalHarmonics.s_<degree>_<order>:<temporal>:<interval> . Clock errors are estimated epoch-wise for each . No clock errors are estimated if no valid observations are available (e.g. data gaps in the observations). If all transmitters and receivers are selected by selectTransmitters and selectReceivers respectively, these parameters will be lineary dependent which would lead to a rank deficiency in the normal equation matrix. To circumvent this issue, the estimation requires an additional zero-mean constraint added in each epoch. This is realized with an additional observation equation summed over all with a standard deviation of sigmaZeroMeanConstraint . The parameter names are <station or prn>:clock::<time> . This parametrization is an alternative to . Clock errors are estimated epoch-wise for each and, opposed to , are also estimated for epochs that have no valid observations available (e.g. data gaps). The clock error of an epoch can be predicted by the clock error of the preceding epoch and an unknown clock drift This equation is applied as an additional constraint equation in each epoch The variance is estimated iteratively by variance component estimation (VCE). Clock jumps are treated as outliers and are automatically downweighted as described in . The absolute initial clock error and clock drift cannot be determined if all receiver and transmitter clocks are estimated together due to their linear dependency. This linear dependency would lead to a rank deficiency in the normal equation matrix in the same manner as described in . To circumvent this issue, an additional zero-mean constraint is added in each epoch as observation equation summed over all . This should be a loose constraint with a relatively large standard deviation of sigmaZeroMeanConstraint . The parameter names are <station or prn>:clock::<time> and <station or prn>:clockDrift:: . Each code and phase observation (e.g C1C or L2W ) contains a bias at transmitter/receiver level This class provides the apriori model of eq. only. The are read for each transmitter and receiver. Those file names are interpreted as a template with the variable {prn} or {station} being replaced by transmitter PRNs or receiver station names, respectively. (Infos regarding the variables {prn} and {station} can be found in and respectively). Those files can be converted with GnssSinexBias2SignalBias . The estimation of the biases is complex due to different linear dependencies, which result in rank deficiencies in the system of normal equations. For simplification the parametrization for has been split into: , , and (including phase biases). The file handling on the other hand still remains within this class. Any prior values for the transmitter/receiver biases are read with the respective inputfileSignalBiasTransmitter/Receiver . All biases for a transmitter/receiver are accumulated and written to the respective outputfileSignalBiasTransmitter/Receiver . Sets up an ambiguity parameter for each track and phase observation type. As the phase observations contain a float bias at transmitter/receiver level, not all ambiguities are resolvable to integer values. The number of resolvable ambiguities can be increased with known phase biases read from file via . In this case, should not be used for the corresponding transmitters and receivers. In case of GLONASS, the phase biases at receiver level differ between different frequency channels (frequency division multiple access, FDMA) and for each channel an extra float phase bias is estimated. With linearGlonassBias a linear relationship between bias and frequency channel is assumed, which reduces the number of float bias parameters and increases the number of resolvable integer ambiguities. The integer ambiguities can be resolved and fixed in . Resolved integer ambiguities are not estimated as unknown parameters in anymore and are removed from the system of normal equations. The estimated phase biases can be written to files in . The parameter names are <station>:phaseBias(<gnssType>):: , <prn>:phaseBias(<gnssType>):: , <station>.<prn>:ambiguity<index>of<count>(<GnssTypes>)::<track interval> . Each code observation (e.g C1C or C2W ) contains a bias at transmitter/receiver level The code biases cannot be estimated together with clock errors and ionospheric delays in an absolute sense as rank deficiencies will occur in the system of normal equations. Therefore, the biases are not initialized and set up as parameters directly but only estimable linear combinations are parametrized. The basic idea is to set up simplified normal equations with the biases, clock and STEC parameters of one single receiver or transmitter, eliminate clock and STEC parameters and perform an eigen value decomposition of the normal equation matrix Instead of estimating the original bias parameter a transformed set is introduced: The new parameters corresponding to eigen values are estimable, the others are left out (set to zero). The behavior can be controlled by explicitly setting up to two bias types with for each transmitter to zero. These then define the ionosphere-free clock datum of the transmitter. The missing linear combinations, which depend on the STEC parameters, can be added with . Additional rank deficiencies may also occur when biases of transmitters and receivers are estimated together. The minimum norm nullspace (also via eigen value decomposition) is formulated as zero constraint equations and added with a standard deviation of sigmaZeroMeanConstraint . In case of GLONASS the code biases at receiver level can differ between different frequency channels (frequency division multiple access, FDMA) and for each channel an extra code bias is estimated. With linearGlonassBias a linear relationship between bias and frequency channel is assumed, which reduces the number of bias parameters. The estimated biases can be written to files in . The parameter names are <station or prn>:codeBias0<index><combi of gnssTypes>:: . Each code observation (e.g C1C or C2W ) contains a bias at transmitter/receiver level This parametrization represents the linear combination of signal biases which completely depend on the STEC parameters. Ignoring these bias combinations would result in a biased STEC estimation (all other parameters are nearly unaffected). To determine this part of the signal biases the should be constrained. Furthermore, additional information about the ionosphere is required from or . Rank deficiencies due to the signal bias parameters may occur if biases of transmitters and receivers are estimated together. The minimum norm nullspace is formulated as zero constraint equations and added with a standard deviation of sigmaZeroMeanConstraint . The accumulated estimated result can be written to files in . The parameter names are <station or prn>:tecBias0<index><combi of gnssTypes>:: . This parametrization resolves the issue of some phase observations suffering from time-variable biases. Such a phenomenon has been found to affect GPS block IIF satellites on the L5 phase measurements (see Montenbruck et al. 2011, DOI: ). For these time-variable biases an appropriate temporal representation has to be defined in . For example, time-variable biases for GPS block IIF L5 phase observations ( = L5*G ) can be represented by a cubic spline with a nodal distance of one hour. The result is written as a times series file at the processing sampling or the sampling set by ). This parametrization should be set up in addition to the constant . Depending on the temporal representation a temporal zero-mean constraint is needed to separate this parametrization from the constant component. The constraint equations are added with a standard deviation of sigmaZeroMeanConstraint . The parameter names are <prn>:signalBias.<gnssType>:<temporal>:<interval> . Estimates a static position for all in the terrestrial frame. No-net constraints can be applied for a subset of stations, , with a standard deviation of noNetTranslationSigma and noNetRotationSigma and noNetScaleSigma . If the template is provided the constraints are applied relatively to these positions. Only stations with an existing position file are considered. Without the constraints are applied towards the apriori values from . As a single corrupted station position can disturb the no-net conditions, the rotation/translation parameters are estimated in a robust least squares adjustment beforehand. The computed weight matrix is used to downweight corrupted stations in the constraint equations. In case you want to align to an ITRF/IGS reference frame, precise coordinates can be generated with Sinex2StationPositions . The parameter names are <station>:position.x:: , <station>:position.y:: , <station>:position.z:: . Estimates the epoch-wise in an Earth-fixed frame (or in case of LEO satellites in an intertial frame). The epoch wise are computed within The parameter names are <station>:position.x::<time> , <station>:position.y::<time> , <station>:position.z::<time> . The estimation of (reduced) dynamic orbits is formulated as variational equations. It is based on calculated with PreprocessingVariationalEquation . Necessary integrations are performed by integrating a moving interpolation polynomial of degree integrationDegree . The must include at least those parameters that were estimated in PreprocessingVariationalEquationOrbitFit . Additional parameters can be set up to reduce orbit mismodeling. If not enough epochs with observations are available ( minEstimableEpochsRatio ) the LEO satellite is disabled. The parameters and parameter names are divided into global <station>:<parametrizationAcceleration>:*:* , <station>:stochasticPulse.x::<time> , <station>:stochasticPulse.y::<time> , <station>:stochasticPulse.z::<time> , and arc related parameters <station>:arc<no>.<parametrizationAcceleration>:*:* , <station>:arc<no>.position0.x:: , <station>:arc<no>.position0.y:: , <station>:arc<no>.position0.z:: . <station>:arc<no>.velocity0.x:: , <station>:arc<no>.velocity0.y:: , <station>:arc<no>.velocity0.z:: . Same as but for transmitting GNSS satellites. For more details see orbit integration . A priori tropospheric correction is handled by a model (e.g. Vienna Mapping Functions 3). Additional parameters in for zenith wet delay and gradients can be set up via (usually 2-hourly linear splines) and (usually a daily trend). These parameters can be soft-constrained using to avoid an unsolvable system of normal equations in case of data gaps. The parameter names are <station>:troposphereWet:<temporal>:<interval> , <station>:troposphereGradient.x:<temporal>:<interval> , <station>:troposphereGradient.y:<temporal>:<interval> . Earth rotation parameters (ERPs) can be estimated by defining estimatePole ( , ) and estimateUT1 ( ). Estimating length of day (LOD) with the sign according to IGS conventions requires a negative value in . Constraints on the defined parameters can be added via . An example would be to set up so the parameter is included in the normal equation system . Since cannot be determined by GNSS, a hard constraint to its a priori value can then be added. The parameter names are earth:polarMotion.xp:<temporal>:<interval> , earth:polarMotion.yp:<temporal>:<interval> , earth:UT1:<temporal>:<interval> , earth:nutation.X:<temporal>:<interval> , earth:nutation.Y:<temporal>:<interval> . This class is for parametrization the antenna for their antenna center offsets (ACO) and antenna center variations (ACV) by . The receivers to be estimated can be selected by . The amount of patterns to be estimated is configurable with a list of . For each added a set of parameters will be evaluated. The observations will be assigned to the first that matches their own. E.g. having the patterns: ***G and L1* would lead to all GPS observations be assigned to the observation equations of the first pattern. The pattern type L1* would then consist of all other GNSS L1 phase observations. addNonMatchingTypes will, if activated, create automatically patterns for that are not selected within the list . Furthermore, it is possible to group same antenna build types from different receivers by groupAntennas . The grouping by same antenna build ignores antenna serial numbers. To estimate the antenna variation parameters, a longer period of observations might be necessary for accurate estimations. Hence one should use this parametrization by accumulating normal equations from several epochs. This can be accomplished as the last steps in the by adding to current selected parameters with and write the normal equation matrix with . The written normal equations can then be accumulated with NormalsAccumulate and solved by NormalsSolverVCE . Further, one should apply constraints to the normal equations by GnssAntennaNormalsConstraint since the estimation of ACO and ACV can lead to rank deficiencies in the normal equation matrix. Last the solved normal equation can be parsed to a antenna definition file with the program ParameterVector2GnssAntennaDefinition . As example referring to the cookbook GNSS satellite orbit determination and station network analysis , one could add additionally as parametrization. Since the estimations are done on a daily basis for each receiver we add an additional which disables parameter.receiverAntenna . After all stations are processed together with all parameters, one adds parameter.receiverAntenna with to the current selected parametrizations. The last is to write the daily normal equations including the parametrization into files. These normal equation files are then processed with the programs: NormalsAccumulate : accumulates normal equations. GnssAntennaNormalsConstraint : apply constraint to the normal equations. NormalsSolverVCE : solves the normal equations. ParameterVector2GnssAntennaDefinition : writes the solution into a antenna definition file Note that the apriori value for this parametrization is always zero and never updated according to eq. . The parameter names are <antennaName>:<antennaCenterVariations>.<gnssType>:: . Same as but for transmitting antennas (GNSS satellites). The parameter names are <antennaName>:<antennaCenterVariations>.<gnssType>:: . Add a pseudo observation equation (constraint) for each selected where is the bias and is the a priori value of the parameter if relativeToApriori is not set. The standard deviation sigma is used to weight the observation equations. Groups a set of parameters. This class can be used to structure complex parametrizations and has no further effect itself.', 'config_table': 'name string used for parameter selection apply2ndOrderCorrection boolean apply ionospheric correction apply3rdOrderCorrection boolean apply ionospheric correction applyBendingCorrection boolean apply ionospheric correction magnetosphere magnetosphereType nameConstraint string used for parameter selection sigmaSTEC expression expr. for sigma [TECU] for STEC constraint, variable E (elevation) available name string selectReceivers platformSelectorType outputfileVTEC filename variable {station} available, columns: MJD, VTEC, north gradient, east gradient mapR double constant of MSLM mapping function mapH double constant of MSLM mapping function mapAlpha double constant of MSLM mapping function gradient parametrizationTemporalType parametrization of north and east gradients name string selectReceivers platformSelectorType outputfileGriddedDataTimeSeries filename single layer VTEC [TECU] outputGrid gridType outputTimeSeries timeSeriesType inputfileGriddedDataTimeSeries filename single layer VTEC [TECU] maxDegree uint spherical harmonics parametrization temporal parametrizationTemporalType temporal evolution of VTEC values radiusIonosphericLayer double [m] radius of ionospheric single layer mapR double [m] constant of MSLM mapping function mapH double [m] constant of MSLM mapping function mapAlpha double constant of MSLM mapping function magnetosphere magnetosphereType name string used for parameter selection selectTransmitters platformSelectorType selectReceivers platformSelectorType outputfileClockTransmitter filename variable {prn} available outputfileClockReceiver filename variable {station} available nameConstraint string used for parameter selection selectTransmittersZeroMean platformSelectorType selectReceiversZeroMean platformSelectorType sigmaZeroMeanConstraint double (0 = unconstrained) sigma [m] for zero-mean constraint over all selected clocks name string used for parameter selection selectTransmitters platformSelectorType selectReceivers platformSelectorType outputfileClockTransmitter filename variable {prn} available outputfileClockReceiver filename variable {station} available huber double clock jumps > huber*sigma0 are downweighted huberPower double clock jumps > huber: sigma=(e/huber)^huberPower*sigma0 nameConstraint string used for parameter selection selectTransmittersZeroMean platformSelectorType use these transmitters for zero-mean constraint selectReceiversZeroMean platformSelectorType use these receivers for zero-mean constraint sigmaZeroMeanConstraint double (0 = unconstrained) sigma [m] for zero-mean constraint over all selected clocks name string used for parameter selection selectTransmitters platformSelectorType selectReceivers platformSelectorType outputfileSignalBiasTransmitter filename variable {prn} available outputfileSignalBiasReceiver filename variable {station} available inputfileSignalBiasTransmitter filename variable {prn} available inputfileSignalBiasReceiver filename variable {station} available name string used for parameter selection estimateTransmitterPhaseBias platformSelectorType estimateReceiverPhaseBias platformSelectorType linearGlonassBias boolean bias depends linear on frequency channel number name string used for parameter selection selectTransmitters platformSelectorType selectReceivers platformSelectorType linearGlonassBias boolean bias depends linear on frequency channel number typesClockDatum gnssType first two matching types define the ionosphere free transmitter clock (e.g. C1WG, C2WG) nameConstraint string used for parameter selection sigmaZeroMeanConstraint double (0 = unconstrained) sigma [m] for null space constraint name string used for parameter selection selectTransmitters platformSelectorType selectReceivers platformSelectorType linearGlonassBias boolean phase or code biases depend linear on frequency channel number nameConstraint string used for parameter selection sigmaZeroMeanConstraint double (0 = unconstrained) sigma [m] for null space constraint name string used for parameter selection selectTransmitters platformSelectorType outputfileBiasTimeSeries filename variable {prn} available inputfileBiasTimeSeries filename variable {prn} available type gnssType parametrizationTemporal parametrizationTemporalType nameConstraint string used for parameter selection sigmaZeroMeanConstraint double (0 = unconstrained) sigma [m] for temporal zero-mean constraint name string used for parameter selection selectReceivers platformSelectorType outputfileGriddedPosition filename delta north east up for all stations outputfilePosition filename variable {station} available, full estimated coordinates (in TRF) nameConstraint string used for parameter selection selectNoNetReceivers platformSelectorType inputfileNoNetPositions filename variable {station} available, precise coordinates used for no-net constraints (in TRF) noNetTranslationSigma double (0 = unconstrained) sigma [m] for no-net translation constraint on station coordinates noNetRotationSigma double (0 = unconstrained) sigma [m] at Earth\'s surface for no-net rotation constraint on station coordinates noNetScaleSigma double (0 = unconstrained) sigma [m] for no-net scale constraint on station coordinates huber double stations > huber*sigma0 are downweighted in no-net constraint huberPower double stations > huber: sigma=(e/huber)^huberPower*sigma0 name string used for parameter selection selectReceivers platformSelectorType outputfilePositions filename variable {station} available, estimated kinematic positions/orbit outputfileCovarianceEpoch filename variable {station} available, 3x3 epoch covariances name string used for parameter selection selectReceivers platformSelectorType outputfileOrbit filename variable {station} available outputfileParameters filename variable {station} available inputfileVariational filename variable {station} available stochasticPulse timeSeriesType [mu/s] parametrization of stochastic pulses parametrizationAcceleration parametrizationAccelerationType orbit force parameters ephemerides ephemeridesType minEstimableEpochsRatio double drop satellites with lower ratio of estimable epochs to total epochs integrationDegree uint integration of forces by polynomial approximation of degree n interpolationDegree uint for orbit interpolation and velocity calculation name string used for parameter selection selectTransmitters platformSelectorType outputfileOrbit filename variable {prn} available outputfileParameters filename variable {prn} available inputfileVariational filename variable {prn} available stochasticPulse timeSeriesType [mu/s] parametrization of stochastic pulses parametrizationAcceleration parametrizationAccelerationType orbit force parameters ephemerides ephemeridesType minEstimableEpochsRatio double drop satellites with lower ratio of estimable epochs to total epochs integrationDegree uint integration of forces by polynomial approximation of degree n interpolationDegree uint for orbit interpolation and velocity calculation name string used for parameter selection selectReceivers platformSelectorType outputfileTroposphere filename columns: MJD, ZHD, ZWD, dry north gradient, wet north gradient, dry east gradient, wet east gradient, ... troposphere troposphereType a priori troposphere model troposphereWetEstimation parametrizationTemporalType [m] parametrization of zenith wet delays troposphereGradientEstimation parametrizationTemporalType [degree] parametrization of north and east gradients name string used for parameter selection outputfileEOP filename EOP time series (mjd, xp, yp, sp, dUT1, LOD, X, Y, S) estimatePole parametrizationTemporalType xp, yp [mas] estimateUT1 parametrizationTemporalType rotation angle [ms] estimateNutation parametrizationTemporalType dX, dY [mas] name string used for parameter selection selectReceivers platformSelectorType antennaCenterVariations parametrizationGnssAntennaType estimate antenna center variations patternTypes gnssType gnssType for each pattern (first match is used) addNonMatchingTypes boolean add patterns for additional observed gnssTypes that don\'t match any of the above groupAntennas boolean common ACVs for same antenna build types (ignores antenna serial number) name string used for parameter selection selectTransmitters platformSelectorType antennaCenterVariations parametrizationGnssAntennaType estimate antenna center variations patternTypes gnssType gnssType for each pattern (first match is used) addNonMatchingTypes boolean add patterns for additional observed gnssTypes that don\'t match any of the above groupAntennas boolean common ACVs for same antenna build types (ignores antenna serial number) name string parameters parameterSelectorType parameter to constrain sigma double sigma of the constraint (same unit as parameter) bias double constrain all selected parameters towards this value relativeToApriori boolean constrain only dx and not full x=dx+x0 parametrization gnssParametrizationType', 'display_text': 'This class defines the models and parameters of the linearized observation equations for all phase and code measurements (see GnssProcessing) \\[\\label{gnssParametrizationType:model} \\M l - \\M f(\\M x_0) = \\left.\\frac{\\partial \\M f(\\M x)}{\\partial \\M x}\\right|_{\\M x_0} \\Delta\\M x + \\M\\epsilon, \\]where the left side is the observation vector minus the effects computed from the a priori models. After each least squares adjustment (see GnssProcessing:processingStep:estimate) the a priori parameters are updated \\[\\label{gnssParametrizationType:update} \\M x_0 := \\M x_0 + \\Delta\\hat{\\M x}. \\]The vector $\\M x_0$ can be written with GnssProcessing:processingStep:writeAprioriSolution. Any outputfiles defined in the parametrizations are written with GnssProcessing:processingStep:writeResults.

Each parametrization (and possible constraint equations) has a name which enables activating/deactivating the estimation of subsets of $\\Delta\\M x$ with GnssProcessing:processingStep:selectParametrizations. The a priori model $\\M f(\\M x_0)$ is unaffected and is always reduced.

The model for the different observation types can be described as \\[\\label{gnssParametrizationType:gnssFullModel} \\begin{split} f[\\tau\\nu a]_r^s(\\M x) &= \\text{geometry}(\\M r_r^s) + \\text{clock}^s(t) + \\text{clock}_r(t) \\\\ &+ \\text{ionosphere}([\\tau\\nu],t,\\M r_r^s) + \\text{troposphere}(t,\\M r_r^s) \\\\ &+ \\text{antenna}[\\tau\\nu a]^s + \\text{antenna}[\\tau\\nu a]_r \\\\ &+ \\text{bias}[\\tau\\nu a]^s + \\text{bias}[\\tau\\nu a]_r + \\lambda[L\\nu] N[L\\nu a]_r^s + \\text{other}(\\ldots) + \\epsilon[\\tau\\nu a]_r^s \\end{split} \\]The notation $[\\tau\\nu a]_r^s$ describes the attribution to a signal type $\\tau$ (i.e., C or L), frequency $\\nu$, signal attribute $a$ (e.g., C, W, Q, X), transmitting satellite $s$, and observing receiver $r$. It follows the RINEX 3 definition, see GnssType.

See also GnssProcessing.

IonosphereSTEC

The influence of the ionosphere is modelled by a STEC parameter (slant total electron content) in terms of $[TECU]$ between each transmitter and receiver at each epoch. These parameters are pre-eliminated from the observation equations before accumulating the normal equations. This is similar to using the ionosphere-free linear combination as observations but only one STEC parameter is needed for an arbitrary number of observation types.

The influence on the code and phase observation is modeled as \\[\\label{gnssParametrizationType:IonosphereSTEC:STEC} \\begin{split} \\text{ionosphere}([C\\nu], STEC) &= \\frac{40.3}{f_{\\nu}^2}STEC + \\frac{7525\\M b^T\\M k}{f_{\\nu}^3}STEC + \\frac{r}{f_{\\nu}^4}STEC^2 \\\\ \\text{ionosphere}([L\\nu], STEC) &= -\\frac{40.3}{f_{\\nu}^2}STEC - \\frac{7525\\M b^T\\M k}{2f_{\\nu}^3}STEC - \\frac{r}{3f_{\\nu}^4}STEC^2 + \\text{bending}(E)STEC^2 \\end{split} \\]The second order term depends on the magnetosphere $\\M b$ and the direction of the signal $\\M k$.

If further information about the ionosphere is available (in the form of a prior model or as additional parametrizations such as parametrization:ionosphereMap or parametrization:ionosphereVTEC) the STEC parameters describe local and short–term scintillations. The STEC parameters are estimated as additions to the model and it is advised to constrain them towards zero with a standard deviation of sigmaSTEC.

IonosphereVTEC

The influence of the ionosphere is modelled by a VTEC parameter (vertical total electron content) in terms of $[TECU]$ for every selected receiver at each epoch. Optionally, VTEC gradients in the North (x) and East (y) direction can be estimated via gradient. The slant TEC is computed based on the VTEC and the optional North and East gradients $\\Delta V_x$ and $\\Delta V_y$ using the elevation-dependent Modified Single-Layer Model (MSLM) mapping function \\[\\label{gnssParametrizationType:IonosphereVTEC:STEC} STEC = \\frac{VTEC + \\cos(A) \\Delta V_x + \\sin(A) \\Delta V_y}{\\cos z\'} \\qquad\\text{with}\\qquad \\sin z\'= \\left(\\frac{R}{R+H}\\right)\\sin\\left(\\alpha(\\pi/2-E)\\right) \\]inserted into eq. \\eqref{gnssParametrizationType:IonosphereSTEC:STEC}, where $A$ is the azimuth angle and $E$ is the elevation angle.

The result is written as a times series file at epochs with observations depending on GnssProcessing:processingStep:selectEpochs.

This class provides a simplified model of the ionosphere for single receivers and enables the separation of the TEC and signal biases, meaning parametrization:tecBiases becomes estimable. Local and short-term scintillations should be considered by adding loosely constrained parametrization:ionosphereSTEC.

The parameter names are

IonosphereMap

Apriori VTEC maps can be removed from the observations with inputfileGriddedDataTimeSeries (e.g. from GnssIonex2GriddedDataTimeSeries).

The ionosphere is parametrized in terms of $[TECU]$ in a single layer sphere with radiusIonosphericLayer as a temporally changing (e.g. hourly linear splines) spherical harmonics expansion \\[ VTEC(\\lambda,\\theta,t) = \\sum_{n=0}^{n_{max}} \\sum_{m=0}^n c_{nm}(t)C_{nm}(\\lambda,\\theta)+s_{nm}(t)S_{nm}(\\lambda,\\theta) \\]up to maxDegree=15 in a solar-geomagentic frame defined by magnetosphere. The VTEC values are mapped to STEC values in the observation equations via eq. \\eqref{gnssParametrizationType:IonosphereVTEC:STEC}.

The estimated VTEC inclusive the apriori inputfileGriddedDataTimeSeries can be written to outputfileGriddedDataTimeSeries evaluated at outputGrid and outputTimeSeries.

Local and short-term scintillations should be considered by adding constrained parametrization:ionosphereSTEC. To account for signal biases add parametrization:tecBiases.

The parameter names are

Clocks

Clock errors are estimated epoch-wise for each selectTransmitters/Receivers. No clock errors are estimated if no valid observations are available (e.g. data gaps in the observations).

If all transmitters and receivers are selected by selectTransmitters and selectReceivers respectively, these parameters will be lineary dependent which would lead to a rank deficiency in the normal equation matrix. To circumvent this issue, the estimation requires an additional zero-mean constraint added in each epoch. This is realized with an additional observation equation \\[ 0 = \\frac{1}{n_i + n_k} (\\sum_i \\Delta t^{s_i} + \\sum_k \\Delta t_{r_k}) \\]summed over all selectTransmitters/ReceiversZeroMean with a standard deviation of sigmaZeroMeanConstraint.

The parameter names are <station or prn>:clock::<time>.

ClocksModel

This parametrization is an alternative to parametrization:clocks. Clock errors are estimated epoch-wise for each selectTransmitters/Receivers and, opposed to parametrization:clocks, are also estimated for epochs that have no valid observations available (e.g. data gaps).

The clock error of an epoch can be predicted by the clock error of the preceding epoch and an unknown clock drift \\[ \\Delta t_{i+1} = \\Delta t_{i} + t_{drift} dt + \\epsilon_i. \\]This equation is applied as an additional constraint equation in each epoch \\[ 0 = \\Delta t_{i+1} - \\Delta t_{i} - t_{drift} dt + \\epsilon_i. \\]The variance $\\sigma^2(\\epsilon)$ is estimated iteratively by variance component estimation (VCE). Clock jumps are treated as outliers and are automatically downweighted as described in GnssProcessing:processingStep:estimate.

The absolute initial clock error and clock drift cannot be determined if all receiver and transmitter clocks are estimated together due to their linear dependency. This linear dependency would lead to a rank deficiency in the normal equation matrix in the same manner as described in parametrization:clocks. To circumvent this issue, an additional zero-mean constraint is added in each epoch as observation equation \\[ 0 = \\frac{1}{n_i + n_k} (\\sum_i \\Delta t^{s_i} + \\sum_k \\Delta t_{r_k}) \\]summed over all selectTransmitters/ReceiversZeroMean. This should be a loose constraint with a relatively large standard deviation of sigmaZeroMeanConstraint.

The parameter names are <station or prn>:clock::<time> and <station or prn>:clockDrift::.

SignalBiases

Each code and phase observation (e.g C1C or L2W) contains a bias at transmitter/receiver level \\[ [\\tau\\nu a]_r^s(t) = \\dots + \\text{bias}[\\tau\\nu a]^s + \\text{bias}[\\tau\\nu a]_r + \\dots \\]This class provides the apriori model $\\M f(\\M x_0)$ of eq. \\eqref{gnssParametrizationType:model} only.

The inputfileSignalBiasTransmitter/Receiver are read for each transmitter and receiver. Those file names are interpreted as a template with the variable {prn} or {station} being replaced by transmitter PRNs or receiver station names, respectively. (Infos regarding the variables {prn} and {station} can be found in gnssTransmitterGeneratorType and gnssReceiverGeneratorType respectively). Those files can be converted with GnssSinexBias2SignalBias.

The estimation of the biases is complex due to different linear dependencies, which result in rank deficiencies in the system of normal equations. For simplification the parametrization for $\\Delta\\M x$ has been split into: parametrization:codeBiases, parametrization:tecBiases, and parametrization:ambiguities (including phase biases). The file handling on the other hand still remains within this class. Any prior values for the transmitter/receiver biases are read with the respective inputfileSignalBiasTransmitter/Receiver. All biases for a transmitter/receiver are accumulated and written to the respective outputfileSignalBiasTransmitter/Receiver.

Ambiguities

Sets up an ambiguity parameter for each track and phase observation type. \\[ [L\\nu a]_r^s(t) = \\dots + \\text{bias}[L\\nu a]^s + \\text{bias}[L\\nu a]_r + \\lambda[L\\nu] N[L\\nu a]_r^s \\]As the phase observations contain a float bias at transmitter/receiver level, not all ambiguities are resolvable to integer values. The number of resolvable ambiguities can be increased with known phase biases read from file via parametrization:signalBiases. In this case, estimateTransmitter/ReceiverPhaseBias should not be used for the corresponding transmitters and receivers.

In case of GLONASS, the phase biases at receiver level differ between different frequency channels (frequency division multiple access, FDMA) and for each channel an extra float phase bias is estimated. With linearGlonassBias a linear relationship between bias and frequency channel is assumed, which reduces the number of float bias parameters and increases the number of resolvable integer ambiguities.

The integer ambiguities can be resolved and fixed in GnssProcessing:processingStep:resolveAmbiguities. Resolved integer ambiguities are not estimated as unknown parameters in gnssProcessingStepType:estimate anymore and are removed from the system of normal equations.

The estimated phase biases can be written to files in parametrization:signalBiases.

The parameter names are

CodeBiases

Each code observation (e.g C1C or C2W) contains a bias at transmitter/receiver level \\[ [C\\nu a]_r^s(t) = \\dots + \\text{bias}[C\\nu a]^s + \\text{bias}[C\\nu a]_r + \\dots \\]The code biases cannot be estimated together with clock errors and ionospheric delays in an absolute sense as rank deficiencies will occur in the system of normal equations. Therefore, the biases are not initialized and set up as parameters directly but only estimable linear combinations are parametrized.

The basic idea is to set up simplified normal equations with the biases, clock and STEC parameters of one single receiver or transmitter, eliminate clock and STEC parameters and perform an eigen value decomposition of the normal equation matrix \\[ \\M N = \\M Q \\M\\Lambda \\M Q^T. \\]Instead of estimating the original bias parameter $\\M x$ a transformed set $\\bar{\\M x}$ is introduced: \\[ \\bar{\\M x} = \\M Q^T \\M x. \\]The new parameters corresponding to eigen values $\\lambda>0$ are estimable, the others are left out (set to zero). The behavior can be controlled by explicitly setting up to two bias types with typesClockDatum for each transmitter to zero. These then define the ionosphere-free clock datum of the transmitter. The missing linear combinations, which depend on the STEC parameters, can be added with parametrization:tecBiases.

Additional rank deficiencies may also occur when biases of transmitters and receivers are estimated together. The minimum norm nullspace (also via eigen value decomposition) is formulated as zero constraint equations and added with a standard deviation of sigmaZeroMeanConstraint.

In case of GLONASS the code biases at receiver level can differ between different frequency channels (frequency division multiple access, FDMA) and for each channel an extra code bias is estimated. With linearGlonassBias a linear relationship between bias and frequency channel is assumed, which reduces the number of bias parameters.

The estimated biases can be written to files in parametrization:signalBiases.

The parameter names are <station or prn>:codeBias0<index><combi of gnssTypes>::.

TecBiases

Each code observation (e.g C1C or C2W) contains a bias at transmitter/receiver level \\[ [C\\nu a]_r^s(t) = \\dots + \\text{bias}[C\\nu a]^s + \\text{bias}[C\\nu a]_r + \\ldots \\]This parametrization represents the linear combination of signal biases which completely depend on the STEC parameters. Ignoring these bias combinations would result in a biased STEC estimation (all other parameters are nearly unaffected). To determine this part of the signal biases the parametrization:ionosphereSTEC should be constrained. Furthermore, additional information about the ionosphere is required from parametrization:ionosphereVTEC or parametrization:ionosphereMap.

Rank deficiencies due to the signal bias parameters may occur if biases of transmitters and receivers are estimated together. The minimum norm nullspace is formulated as zero constraint equations and added with a standard deviation of sigmaZeroMeanConstraint.

The accumulated estimated result can be written to files in parametrization:signalBiases.

The parameter names are <station or prn>:tecBias0<index><combi of gnssTypes>::.

TemporalBias

This parametrization resolves the issue of some phase observations suffering from time-variable biases. Such a phenomenon has been found to affect GPS block IIF satellites on the L5 phase measurements (see Montenbruck et al. 2011, DOI: 10.1007/s10291-011-0232-x).

For these time-variable biases an appropriate temporal representation has to be defined in parametrizationTemporal. For example, time-variable biases for GPS block IIF L5 phase observations (type=L5*G) can be represented by a cubic spline with a nodal distance of one hour.

The result is written as a times series file at the processing sampling or the sampling set by GnssProcessing:processingStep:selectEpochs).

This parametrization should be set up in addition to the constant parametrization:signalBiases. Depending on the temporal representation a temporal zero-mean constraint is needed to separate this parametrization from the constant component. The constraint equations are added with a standard deviation of sigmaZeroMeanConstraint.

The parameter names are <prn>:signalBias.<gnssType>:<temporal>:<interval>.

StaticPositions

Estimates a static position for all selectReceivers in the terrestrial frame.

No-net constraints can be applied for a subset of stations, selectNoNetReceivers, with a standard deviation of noNetTranslationSigma and noNetRotationSigma and noNetScaleSigma. If the template inputfileNoNetPositions is provided the constraints are applied relatively to these positions. Only stations with an existing position file are considered. Without inputfileNoNetPositions the constraints are applied towards the apriori values from GnssProcessing:receiver. As a single corrupted station position can disturb the no-net conditions, the rotation/translation parameters are estimated in a robust least squares adjustment beforehand. The computed weight matrix is used to downweight corrupted stations in the constraint equations.

In case you want to align to an ITRF/IGS reference frame, precise coordinates can be generated with Sinex2StationPositions.

The parameter names are

KinematicPositions

Estimates the epoch-wise outputfilePositions in an Earth-fixed frame (or in case of LEO satellites in an intertial frame).

The $3\\times3$ epoch wise outputfileCovarianceEpoch are computed within GnssProcessing:processingStep:computeCovarianceMatrix

The parameter names are

LeoDynamicOrbits

The estimation of (reduced) dynamic orbits is formulated as variational equations. It is based on inputfileVariational calculated with PreprocessingVariationalEquation. Necessary integrations are performed by integrating a moving interpolation polynomial of degree integrationDegree. The parametrizationAcceleration must include at least those parameters that were estimated in PreprocessingVariationalEquationOrbitFit. Additional stochasticPulse parameters can be set up to reduce orbit mismodeling. If not enough epochs with observations are available (minEstimableEpochsRatio) the LEO satellite is disabled.

The parameters and parameter names are divided into global

and arc related parameters

TransmitterDynamicOrbits

Same as leoDynamicOrbits but for transmitting GNSS satellites. For more details see orbit integration.

Troposphere

A priori tropospheric correction is handled by a troposphere model (e.g. Vienna Mapping Functions 3). Additional parameters in $[m]$ for zenith wet delay and gradients can be set up via troposphereWetEstimation (usually 2-hourly linear splines) and troposphereGradientEstimation (usually a daily trend). These parameters can be soft-constrained using parametrization:constraints to avoid an unsolvable system of normal equations in case of data gaps.

The parameter names are

EarthRotation

Earth rotation parameters (ERPs) can be estimated by defining estimatePole ($x_p$, $y_p\\, [mas]$) and estimateUT1 ($dUT1\\, [ms], LOD$).

Estimating length of day (LOD) with the sign according to IGS conventions requires a negative value in parametrizationTemporal:trend:timeStep.

Constraints on the defined parameters can be added via parametrization:constraints. An example would be to set up estimateUT1:constant so the $dUT1$ parameter is included in the normal equation system . Since $dUT1$ cannot be determined by GNSS, a hard constraint to its a priori value can then be added.

The parameter names are

ReceiverAntennas

This class is for parametrization the antenna for their antenna center offsets (ACO) and antenna center variations (ACV) by antennaCenterVariations. The receivers to be estimated can be selected by selectReceivers.

The amount of patterns to be estimated is configurable with a list of patternTypes. For each added patternTypes a set of parameters will be evaluated. The observations will be assigned to the first patternTypes that matches their own. E.g. having the patterns: ***G and L1* would lead to all GPS observations be assigned to the observation equations of the first pattern. The pattern type L1* would then consist of all other GNSS L1 phase observations. addNonMatchingTypes will, if activated, create automatically patterns for observations that are not selected within the list patternTypes. Furthermore, it is possible to group same antenna build types from different receivers by groupAntennas. The grouping by same antenna build ignores antenna serial numbers.

To estimate the antenna variation parameters, a longer period of observations might be necessary for accurate estimations. Hence one should use this parametrization by accumulating normal equations from several epochs. This can be accomplished as the last steps in the processing steps by adding ReceiverAntennas to current selected parameters with GnssProcessing:processingStep:selectParametrizations and write the normal equation matrix with GnssProcessing:processingStep:writeNormalEquations. The written normal equations can then be accumulated with NormalsAccumulate and solved by NormalsSolverVCE. Further, one should apply constraints to the normal equations by GnssAntennaNormalsConstraint since the estimation of ACO and ACV can lead to rank deficiencies in the normal equation matrix. Last the solved normal equation can be parsed to a antenna definition file with the program ParameterVector2GnssAntennaDefinition.

As example referring to the cookbook GNSS satellite orbit determination and station network analysis, one could add additionally receiverAntennas as parametrization. Since the estimations are done on a daily basis for each receiver we add an additional selectParametrizations which disables parameter.receiverAntenna. After all stations are processed together with all parameters, one adds parameter.receiverAntenna with selectParametrizations to the current selected parametrizations. The last processingStep is GnssProcessing:processingStep:writeNormalEquations to write the daily normal equations including the parametrization receiverAntennas into files. These normal equation files are then processed with the programs:

Note that the apriori value $\\M x_0$ for this parametrization is always zero and never updated according to eq. \\eqref{gnssParametrizationType:update}.

The parameter names are <antennaName>:<antennaCenterVariations>.<gnssType>::.

TransmitterAntennas

Same as receiverAntennas but for transmitting antennas (GNSS satellites).

The parameter names are <antennaName>:<antennaCenterVariations>.<gnssType>::.

Constraints

Add a pseudo observation equation (constraint) for each selected parameters \\[ b-x_0 = 1 \\cdot dx + \\epsilon, \\]where $b$ is the bias and $x_0$ is the a priori value of the parameter if relativeToApriori is not set. The standard deviation sigma is used to weight the observation equations.

Group

Groups a set of parameters. This class can be used to structure complex parametrizations and has no further effect itself.'}, 'gnssProcessingStepType': { 'name': 'gnssProcessingStepType', 'key': 'gnssProcessingStepType', 'description': 'Processing step in GnssProcessing . Processing steps enable a dynamic definition of the consecutive steps performed during any kind of GNSS processing. The most common steps are , which performs an iterative least squares adjustment, and , which writes all output files defined in GnssProcessing and is usually the last step. Some steps such as , , , and affect all subsequent steps. In case these steps are used within a or step, they only affect the steps within this level. For usage examples see cookbooks on GNSS satellite orbit determination and network analysis or Kinematic orbit determination of LEO satellites . Iterative non-linear least squares adjustment. In every iteration it accumulates the system of normal equations, solves the system and updates the estimated parameters. The estimated parameters serve as a priori values in the next iteration and the following processing steps. Iterates until either every single parameter update (converted to an influence in meters) is below a convergenceThreshold or maxIterationCount is reached. With computeResiduals the observation equations are computed again after each update to compute the observation residuals. The overall standard deviation of a single observation used for the weighting is composed of several factors where is the signal type, the azimuth and elevation dependent is given by and the other factors are estimated iteratively from the residuals. With computeWeights a standardized variance for each residual is computed taking the redundancy into account. If is above a threshold huber the observation gets a higher standard deviation used for weighting according to similar to robust least squares adjustment . With adjustSigma0 individual variance factors can be computed for each station and all phases of a system and each code observation type (e.g. for each L**G , L**E , C1CG , C2WG , C1CE , ) separately Performs a least squares adjustment like but with additional integer phase ambiguity resolution. After this step all resolved ambiguities are removed from the normal equation system. Only ambiguities involving are resolved. If is not set, all usable transmitters and/or receivers are selected for ambiguity resolution. Integer ambiguity resolution is performed based on the least squares ambiguity decorrelation adjustment (LAMBDA) method (Teunissen 1995, DOI ), specifically the modified algorithm (MLAMBDA) by Chang et al. (2005, DOI ). First the covariance matrix of the integer ambiguity parameters is computed by eliminating all but those parameters from the full normal equation matrix and inverting it. Then, a Z-transformation is performed as described by Chang et al. (2005) to decorrelate the ambiguity parameters without losing their integer nature. The search process follows MLAMBDA and uses integer minimization of the weighted sum of squared residuals. It is computationally infeasible to search a hyper-ellipsoid with a dimension of ten thousand or more. Instead, a blocked search algorithm is performed by moving a window with a length of, for example, searchBlockSize = 200 parameters over the decorrelated ambiguities, starting from the most accurate. In each step, the window is moved by half of its length and the overlapping parts are compared to each other. If all fixed ambiguities in the overlap agree, the algorithm continues. Otherwise, both windows are combined and the search is repeated using the combined window, again comparing with the overlapping part of the preceding window. If not all solutions could be checked for a block after maxSearchSteps , the selected incompleteAction is performed. If the algorithm reaches ambiguities with a standard deviation higher than sigmaMaxResolve , ambiguity resolution stops and the remaining ambiguities are left as float values. Otherwise, all ambiguity parameters are fixed to integer values. In contrast to an integer least squares solution over the full ambiguity vector, it is not guaranteed that the resulting solution is optimal in the sense of minimal variance with given covariance. This trade-off is necessary to cope with large numbers of ambiguities. Accumulates the normal equations and computes the covariance matrix as inverse of the normal matrix. It is not the full inverse but only the elements which are set in the normal matrix (see ) are computed. The matrix is passed to the . Only used in to get the epoch-wise covariance information at the moment. In this step all outputfiles defined in are written. It considers the settings of , , and . It is usually the last processing step, but can also be used at other points in the processing in combination with suffix to write intermediate results, for example before to output the float solution. Accumulates the normal equations matrix and writes it. If is set only the selected parameters are written to the normal equations and all other parameters are eliminated beforehand (implicitly solved). The solution of the normals would result in (see ). To write the appropriate apriori vector use . Writes the current apriori vector (see ). If is set only the selected parameters are written. Writes the observation residuals for all . For each station a file is written. The file name is interpreted as a template with the variable {station} being replaced by the station name. Writes a list of receivers (stations) which are used in the last step and selected by . Writes a list of transmitters which are used in the last step and selected by . Print residual statistics. areq: C1CG**: factor = 0.64, sigma0 = 1.00, count = 2748, outliers = 48 (1.75 ) areq: C1WG**: factor = 0.50, sigma0 = 1.00, count = 2748, outliers = 43 (1.56 ) areq: C2WG**: factor = 0.50, sigma0 = 1.00, count = 2748, outliers = 59 (2.15 ) areq: C5XG**: factor = 0.46, sigma0 = 1.00, count = 1279, outliers = 23 (1.80 ) areq: L1CG**: factor = 0.86, sigma0 = 0.96, count = 2748, outliers = 40 (1.46 ) areq: L1WG**: factor = 0.86, sigma0 = 1.02, count = 2748, outliers = 40 (1.46 ) areq: L2WG**: factor = 0.86, sigma0 = 0.96, count = 2748, outliers = 40 (1.46 ) areq: L5XG**: factor = 0.86, sigma0 = 1.30, count = 1279, outliers = 14 (1.09 ) areq: C1PR**: factor = 0.48, sigma0 = 1.00, count = 1713, outliers = 53 (3.09 ) areq: C2PR**: factor = 0.55, sigma0 = 1.00, count = 1713, outliers = 51 (2.98 ) areq: L1PR**: factor = 0.85, sigma0 = 1.09, count = 1713, outliers = 29 (1.69 ) areq: L2PR**: factor = 0.85, sigma0 = 0.88, count = 1713, outliers = 29 (1.69 ) areq: C1XE**: factor = 0.44, sigma0 = 1.00, count = 1264, outliers = 21 (1.66 ) areq: C5XE**: factor = 0.33, sigma0 = 1.00, count = 1264, outliers = 27 (2.14 ) areq: C7XE**: factor = 0.28, sigma0 = 1.00, count = 1264, outliers = 41 (3.24 ) areq: L1XE**: factor = 0.82, sigma0 = 1.14, count = 1264, outliers = 15 (1.19 ) areq: L5XE**: factor = 0.82, sigma0 = 0.84, count = 1264, outliers = 15 (1.19 ) areq: L7XE**: factor = 0.82, sigma0 = 0.94, count = 1264, outliers = 15 (1.19 ) badg: C1CG**: factor = 1.25, sigma0 = 1.00, count = 2564, outliers = 47 (1.83 ) ... Enable/disable parameter groups and constraint groups for subsequent steps, e.g. or . The name and nameConstraint of these groups are defined in . Prior models or previously estimated parameters used as new apriori values are unaffected and they are always reduced from the observations. This means all unselected parameters are kept fixed to their last result. An example would be to process at a 5-minute sampling using and then at the end to densify the clock parameters to the full 30-second observation sampling while keeping all other parameters fixed ( disable = * , enable = *.clock* , enable = parameter.STEC ). Select epochs for subsequent steps. This step can be used to reduce the processing sampling while keeping the original observation sampling for all preprocessing steps (e.g. outlier and cycle slip detection). Another example is to process at a 5-minute sampling by setting nthEpoch = 10 and then at the end to densify only the clock parameters to the full 30-second observation sampling by setting nthEpoch = 1 while keeping all other parameters fixed with . Select block structure of sparse normal equations for subsequent steps. This step can be used to define the structure of the different parts of the normal equation system, which can have a major impact on computing performance and memory consumption depending on the processing setup. The normal equation system is divided into three parts for epoch, interval, and ambiguity parameters. The epoch part is subdivided further into one subpart per epoch. Each part is divided into blocks and only non-zero blocks are stored in memory to reduce memory consumption and to prevent unnecessary matrix computations. defaultBlockSizeEpoch , defaultBlockSizeInterval , and defaultBlockSizeAmbiguity control the size of the blocks within each part of the normal equations. defaultBlockReceiverCount can be set to group a number of receivers into one block within the epoch and interval parts. If keepEpochNormalsInMemory = no epoch blocks are eliminated after they are set up to reduce the number of parameters in the normal equation system. defaultBlockCountReduction controls after how many epoch blocks an elimination step is performed. For larger processing setups or high sampling rates epoch block elimination is recommended as the large number of clock parameters require a lot of memory. This step can be used to process only a subset of stations in subsequent processing steps. The most common use is to start the processing with a well-distributed network of core stations as seen in GNSS satellite orbit determination and network analysis . To later process all other stations individually, use the processing step and select all stations excluding the core stations in that step. Perform these processing steps for each separately. All non-receiver-related parameters parameters are disabled in these processing steps. This step can be used for individual precise point positioning (PPP) of all stations. During GNSS satellite orbit determination and network analysis this step is used after the initial processing of the core network to process all other stations individually. In that case provide the same station list as in this step that was used as in the step where the core network was selected. Perform these processing steps. This step can be used to structure complex processing flows. The s that affect the following steps (those beginning with Select) only have an effect until the end of the group. Disable transmitter epochs during eclipse. With proper attitude modeling (see SimulateStarCameraGnss ) this is usually not necessary.', 'config_table': 'computeResiduals boolean adjustSigma0 boolean adjust sigma0 by scale factor (per receiver and type) computeWeights boolean downweight outliers huber double residuals > huber*sigma0 are downweighted huberPower double residuals > huber: sigma=(e/huber)^huberPower*sigma0 convergenceThreshold double [m] stop iteration once full convergence is reached maxIterationCount uint maximum number of iterations outputfileAmbiguities filename resolved ambiguities selectTransmitters platformSelectorType only resolve ambiguities with these participating transmitters selectReceivers platformSelectorType only resolve ambiguities with these participating receivers sigmaMaxResolve double max. allowed std. dev. of ambiguity to resolve [cycles] searchBlockSize uint block size for blocked integer search maxSearchSteps uint max. steps of integer search for each block incompleteAction choice if not all solutions tested after maxSearchSteps stop stop searching, ambiguities remain float in this block resolve use best integer solution found so far shrinkBlockSize try again with half block size throwException stop and throw an exception computeResiduals boolean adjustSigma0 boolean adjust sigma0 by scale factor (per receiver and type) computeWeights boolean downweight outliers huber double residuals > huber*sigma0 are downweighted huberPower double residuals > huber: sigma=(e/huber)^huberPower*sigma0 suffix string appended to every output file name (e.g. orbit.G01.suffix.dat) outputfileNormalEquations filename normals remainingParameters parameterSelectorType parameter order/selection of output normal equations constraintsOnly boolean write only normals of constraints without observations defaultNormalsBlockSize uint block size for distributing the normal equations, 0: one block, empty: original block size outputfileAprioriSolution filename a priori parameters outputfileParameterNames filename parameter names remainingParameters parameterSelectorType parameter order/selection of output normal equations selectReceivers platformSelectorType subset of used stations outputfileResiduals filename variable {station} available selectReceivers platformSelectorType subset of used stations outputfileUsedStationList filename ascii file with names of used stations selectTransmitters platformSelectorType subset of used transmitters outputfileUsedTransmitterList filename ascii file with PRNs parametrization choice enable sequence name string wildcards: * and ? disable sequence name string wildcards: * and ? nthEpoch uint use only every nth epoch in all subsequent processing steps defaultBlockSizeEpoch uint block size of epoch parameters, 0: one block defaultBlockSizeInterval uint block size of interval parameters, 0: one block defaultBlockSizeAmbiguity uint block size of ambiguity parameters, 0: one block defaultBlockReceiverCount uint number of receivers to group into one block for epoch and interval defaultBlockCountReduction uint minimum number of blocks for epoch reduction keepEpochNormalsInMemory boolean speeds up processing but uses much more memory accumulateEpochObservations boolean set up all observations per epoch and receiver at once selectReceivers platformSelectorType selectReceivers platformSelectorType variableReceiver string variable is set for each receiver processingStep gnssProcessingStepType steps are processed consecutively processingStep gnssProcessingStepType steps are processed consecutively selectTransmitters platformSelectorType disableShadowEpochs boolean disable epochs if satellite is in Earth\'s/Moon\'s shadow disablePostShadowRecoveryEpochs boolean disable epochs if satellite is in post-shadow recovery maneuver for GPS block IIA ephemerides ephemeridesType eclipse eclipseType eclipse model used to determine if a satellite is in Earth\'s shadow', 'display_text': 'Processing step in GnssProcessing.

Processing steps enable a dynamic definition of the consecutive steps performed during any kind of GNSS processing. The most common steps are estimate, which performs an iterative least squares adjustment, and writeResults, which writes all output files defined in GnssProcessing and is usually the last step. Some steps such as selectParametrizations, selectEpochs, selectNormalsBlockStructure, and selectReceivers affect all subsequent steps. In case these steps are used within a group or forEachReceiverSeparately step, they only affect the steps within this level.

For usage examples see cookbooks on GNSS satellite orbit determination and network analysis or Kinematic orbit determination of LEO satellites.

Estimate

Iterative non-linear least squares adjustment. In every iteration it accumulates the system of normal equations, solves the system and updates the estimated parameters. The estimated parameters serve as a priori values in the next iteration and the following processing steps. Iterates until either every single parameter update (converted to an influence in meters) is below a convergenceThreshold or maxIterationCount is reached.

With computeResiduals the observation equations are computed again after each update to compute the observation residuals.

The overall standard deviation of a single observation used for the weighting is composed of several factors \\[ \\hat{\\sigma}_i = \\hat{\\sigma}_i^{huber} \\hat{\\sigma}_{[\\tau\\nu a]}^{recv} \\sigma_{[\\tau\\nu a]}^{recv}(E,A), \\]where $[\\tau\\nu a]$ is the signal type, the azimuth and elevation dependent $\\sigma_{[\\tau\\nu a]}^{recv}(E,A)$ is given by receiver:inputfileAccuracyDefinition and the other factors are estimated iteratively from the residuals.

With computeWeights a standardized variance $\\hat{s}_i^2$ for each residual $\\hat{\\epsilon}_i$ is computed \\[ \\hat{s}_i^2 = \\frac{1}{\\hat{\\sigma}_{[\\tau\\nu a]}^{recv} \\sigma_{[\\tau\\nu a]}^{recv}(E,A)}\\frac{\\hat{\\epsilon}_i^2}{r_i} \\qquad\\text{with}\\qquad r_i = \\left(\\M A\\left(\\M A^T\\M A\\right)^{-1}\\M A^T\\right)_{ii} \\]taking the redundancy $r_i$ into account. If $\\hat{s}_i$ is above a threshold huber the observation gets a higher standard deviation used for weighting according to \\[ \\hat{\\sigma}_i^{huber} = \\left\\{ \\begin{array}{ll} 1 & s < huber,\\\\ (\\hat{s}_i/huber)^{huberPower} & s \\ge huber \\end{array} \\right., \\]similar to robust least squares adjustment.

With adjustSigma0 individual variance factors can be computed for each station and all phases of a system and each code observation type (e.g. for each L**G, L**E, C1CG, C2WG, C1CE, ) separately \\[ \\hat{\\sigma}_{[\\tau\\nu a]}^{recv} = \\sqrt{\\frac{\\hat{\\M\\epsilon}^T\\M P\\hat{\\M\\epsilon}}{r}}. \\]

ResolveAmbiguities

Performs a least squares adjustment like processingStep:estimate but with additional integer phase ambiguity resolution. After this step all resolved ambiguities are removed from the normal equation system. Only ambiguities involving selectTransmitters/Receivers are resolved. If selectTransmitters/Receivers is not set, all usable transmitters and/or receivers are selected for ambiguity resolution.

Integer ambiguity resolution is performed based on the least squares ambiguity decorrelation adjustment (LAMBDA) method (Teunissen 1995, DOI 10.1007/BF00863419), specifically the modified algorithm (MLAMBDA) by Chang et al. (2005, DOI 10.1007/s00190-005-0004-x). First the covariance matrix of the integer ambiguity parameters is computed by eliminating all but those parameters from the full normal equation matrix and inverting it. Then, a Z-transformation is performed as described by Chang et al. (2005) to decorrelate the ambiguity parameters without losing their integer nature.

The search process follows MLAMBDA and uses integer minimization of the weighted sum of squared residuals. It is computationally infeasible to search a hyper-ellipsoid with a dimension of ten thousand or more. Instead, a blocked search algorithm is performed by moving a window with a length of, for example, searchBlockSize=200 parameters over the decorrelated ambiguities, starting from the most accurate. In each step, the window is moved by half of its length and the overlapping parts are compared to each other. If all fixed ambiguities in the overlap agree, the algorithm continues. Otherwise, both windows are combined and the search is repeated using the combined window, again comparing with the overlapping part of the preceding window. If not all solutions could be checked for a block after maxSearchSteps, the selected incompleteAction is performed. If the algorithm reaches ambiguities with a standard deviation higher than sigmaMaxResolve, ambiguity resolution stops and the remaining ambiguities are left as float values. Otherwise, all ambiguity parameters are fixed to integer values.

In contrast to an integer least squares solution over the full ambiguity vector, it is not guaranteed that the resulting solution is optimal in the sense of minimal variance with given covariance. This trade-off is necessary to cope with large numbers of ambiguities.

ComputeCovarianceMatrix

Accumulates the normal equations and computes the covariance matrix as inverse of the normal matrix. It is not the full inverse but only the elements which are set in the normal matrix (see gnssProcessingStep:selectNormalsBlockStructure) are computed. The matrix is passed to the parametrizations. Only used in parametrizations:kinematicPositions to get the epoch-wise covariance information at the moment.

WriteResults

In this step all outputfiles defined in parametrizations are written. It considers the settings of processingStep:selectParametrizations, processingStep:selectEpochs, and processingStep:selectReceivers.

It is usually the last processing step, but can also be used at other points in the processing in combination with suffix to write intermediate results, for example before gnssProcessingStep:resolveAmbiguities to output the float solution.

WriteNormalEquations

Accumulates the normal equations matrix and writes it. If remainingParameters is set only the selected parameters are written to the normal equations and all other parameters are eliminated beforehand (implicitly solved).

The solution of the normals would result in $\\Delta\\M x$ (see parametrizations). To write the appropriate apriori vector $\\M x_0$ use processingStep:writeAprioriSolution.

WriteAprioriSolution

Writes the current apriori vector $\\M x_0$ (see parametrizations). If remainingParameters is set only the selected parameters are written.

WriteResiduals

Writes the observation residuals for all selectReceivers. For each station a file is written. The file name is interpreted as a template with the variable {station} being replaced by the station name.

WriteUsedStationList

Writes a list of receivers (stations) which are used in the last step and selected by selectReceivers.

WriteUsedTransmitterList

Writes a list of transmitters which are used in the last step and selected by selectTransmitters.

PrintResidualStatistics

Print residual statistics.

   areq: C1CG**: factor =  0.64, sigma0 = 1.00, count =  2748, outliers =    48 (1.75 %)   areq: C1WG**: factor =  0.50, sigma0 = 1.00, count =  2748, outliers =    43 (1.56 %)   areq: C2WG**: factor =  0.50, sigma0 = 1.00, count =  2748, outliers =    59 (2.15 %)   areq: C5XG**: factor =  0.46, sigma0 = 1.00, count =  1279, outliers =    23 (1.80 %)   areq: L1CG**: factor =  0.86, sigma0 = 0.96, count =  2748, outliers =    40 (1.46 %)   areq: L1WG**: factor =  0.86, sigma0 = 1.02, count =  2748, outliers =    40 (1.46 %)   areq: L2WG**: factor =  0.86, sigma0 = 0.96, count =  2748, outliers =    40 (1.46 %)   areq: L5XG**: factor =  0.86, sigma0 = 1.30, count =  1279, outliers =    14 (1.09 %)   areq: C1PR**: factor =  0.48, sigma0 = 1.00, count =  1713, outliers =    53 (3.09 %)   areq: C2PR**: factor =  0.55, sigma0 = 1.00, count =  1713, outliers =    51 (2.98 %)   areq: L1PR**: factor =  0.85, sigma0 = 1.09, count =  1713, outliers =    29 (1.69 %)   areq: L2PR**: factor =  0.85, sigma0 = 0.88, count =  1713, outliers =    29 (1.69 %)   areq: C1XE**: factor =  0.44, sigma0 = 1.00, count =  1264, outliers =    21 (1.66 %)   areq: C5XE**: factor =  0.33, sigma0 = 1.00, count =  1264, outliers =    27 (2.14 %)   areq: C7XE**: factor =  0.28, sigma0 = 1.00, count =  1264, outliers =    41 (3.24 %)   areq: L1XE**: factor =  0.82, sigma0 = 1.14, count =  1264, outliers =    15 (1.19 %)   areq: L5XE**: factor =  0.82, sigma0 = 0.84, count =  1264, outliers =    15 (1.19 %)   areq: L7XE**: factor =  0.82, sigma0 = 0.94, count =  1264, outliers =    15 (1.19 %)   badg: C1CG**: factor =  1.25, sigma0 = 1.00, count =  2564, outliers =    47 (1.83 %)   ... 

SelectParametrizations

Enable/disable parameter groups and constraint groups for subsequent steps, e.g. processingStep:estimate or processingStep:writeResults. The name and nameConstraint of these groups are defined in parametrizations. Prior models or previously estimated parameters used as new apriori $\\M x_0$ values are unaffected and they are always reduced from the observations. This means all unselected parameters are kept fixed to their last result.

An example would be to process at a 5-minute sampling using processingStep:selectEpochs and then at the end to densify the clock parameters to the full 30-second observation sampling while keeping all other parameters fixed (disable=*, enable=*.clock*, enable=parameter.STEC).

SelectEpochs

Select epochs for subsequent steps. This step can be used to reduce the processing sampling while keeping the original observation sampling for all preprocessing steps (e.g. outlier and cycle slip detection). Another example is to process at a 5-minute sampling by setting nthEpoch=10 and then at the end to densify only the clock parameters to the full 30-second observation sampling by setting nthEpoch=1 while keeping all other parameters fixed with processingStep:selectParametrizations.

SelectNormalsBlockStructure

Select block structure of sparse normal equations for subsequent steps.

This step can be used to define the structure of the different parts of the normal equation system, which can have a major impact on computing performance and memory consumption depending on the processing setup.

The normal equation system is divided into three parts for epoch, interval, and ambiguity parameters. The epoch part is subdivided further into one subpart per epoch. Each part is divided into blocks and only non-zero blocks are stored in memory to reduce memory consumption and to prevent unnecessary matrix computations. defaultBlockSizeEpoch, defaultBlockSizeInterval, and defaultBlockSizeAmbiguity control the size of the blocks within each part of the normal equations. defaultBlockReceiverCount can be set to group a number of receivers into one block within the epoch and interval parts.

If keepEpochNormalsInMemory=no epoch blocks are eliminated after they are set up to reduce the number of parameters in the normal equation system. defaultBlockCountReduction controls after how many epoch blocks an elimination step is performed. For larger processing setups or high sampling rates epoch block elimination is recommended as the large number of clock parameters require a lot of memory.

SelectReceivers

This step can be used to process only a subset of stations in subsequent processing steps. The most common use is to start the processing with a well-distributed network of core stations as seen in GNSS satellite orbit determination and network analysis. To later process all other stations individually, use the processing step processingStep:forEachReceiverSeparately and select all stations excluding the core stations in that step.

ForEachReceiverSeparately

Perform these processing steps for each selectReceivers separately. All non-receiver-related parameters parameters are disabled in these processing steps.

This step can be used for individual precise point positioning (PPP) of all stations. During GNSS satellite orbit determination and network analysis this step is used after the initial processing of the core network to process all other stations individually. In that case provide the same station list as inputfileExcludeStationList in this step that was used as inputfileStationList in the selectReceivers step where the core network was selected.

Group

Perform these processing steps. This step can be used to structure complex processing flows. The processingSteps that affect the following steps (those beginning with Select) only have an effect until the end of the group.

DisableTransmitterShadowEpochs

Disable transmitter epochs during eclipse. With proper attitude modeling (see SimulateStarCameraGnss) this is usually not necessary.'}, 'gnssReceiverGeneratorType': { 'name': 'gnssReceiverGeneratorType', 'key': 'gnssReceiverGeneratorType', 'description': 'Definition and basic information of GNSS receivers. Most of the input files are provided in GROOPS file formats at https://ftp.tugraz.at/pub/ITSG/groops (marked with * below). These files are regularly updated. * : Antenna and receiver information, antenna reference point offsets, antenna orientations. Created via GnssStationLog2Platform or PlatformCreate . * : Antenna center offsets and variations. Created via GnssAntex2AntennaDefinition or GnssAntennaDefinitionCreate . : Observed signal types (optional). Created via GnssReceiverDefinitionCreate in case you want to define which signal types a receiver model can observe. * : Elevation and azimuth dependent accuracy. Created via GnssAntennaDefinitionCreate . : Converted from RINEX observation files via RinexObservation2GnssReceiver . It is possible to limit the observation types to be used in the processing by a list of and any observation types not defined within the list are ignored and discarded. Similarly observations defined in the list of are ignored and discarded. The codes used follow the . Each receiver goes through a preprocessing step individually, where observation outliers are removed or downweighted, continuous tracks of phase observations are defined for ambiguity parametrization, cycle slips are detected, and receivers are disabled if they do not fulfill certain requirements. The preprocessing step consists of an initial PPP estimation done by robust least squares adjustment and checks whether the position error of the solutions exceeds codeMaxPositionDiff . If the error exceeds the threshold the receiver will be discarded. The preprocessing also sets initial clock error values and removes tracks that stay below a certain elevation mask ( elevationTrackMinimum ). See also GnssProcessing and GnssSimulateReceiver . A network of GNSS ground stations is defined via . Each line can contain more than one station. The first station in each line for which exists and contains enough observations is used for the processing. All input files except , , and are read for each station. The file name is interpreted as a template with the variable {station} being replaced by the station name. The effects of loading and tidal deformation on station positions can be corrected for via and , respectively. Tidal deformations typically include: : Earth tidal deformations (IERS conventions) : ocean tidal deformations (e.g. fes2014b n720, minDegree = 1 ) : atmospheric tidal deformation (e.g. AOD1B RL06, minDegree = 1 ) : pole tidal deformations (IERS conventions) : ocean pole tidal deformations (IERS conventions) A single low-Earth orbiting (LEO) satellite with an onboard GNSS receiver. An apriori orbit is needed as . Attitude data must be provided via . If no attitude data is available from the satellite operator, the star camera data can be simulated by using SimulateStarCamera .', 'config_table': 'inputfileStationList filename ascii file with station names maxStationCount uint maximum number of stations to be used inputfileStationInfo filename variable {station} available. station metadata (antennas, receivers, ...) inputfileAntennaDefinition filename antenna center offsets and variations noAntennaPatternFound choice what should happen if no antenna pattern is found for an observation ignoreObservation ignore observation if no matching pattern is found useNearestFrequency use pattern of nearest frequency if no matching pattern is found throwException throw exception if no matching pattern is found inputfileReceiverDefinition filename observed signal types inputfileAccuracyDefinition filename elevation and azimuth dependent accuracy inputfileStationPosition filename variable {station} available. disableStationWithoutPosition boolean drop stations without apriori position inputfileClock filename variable {station} available inputfileObservations filename variable {station} available loadingDisplacement gravityfieldType loading deformation tidalDisplacement tidesType tidal deformation ephemerides ephemeridesType for tidal deformation inputfileDeformationLoadLoveNumber filename inputfilePotentialLoadLoveNumber filename if full potential is given and not only loading potential useType gnssType only use observations that match any of these patterns ignoreType gnssType ignore observations that match any of these patterns elevationCutOff angle [degree] ignore observations below cutoff elevationTrackMinimum angle [degree] ignore tracks that never exceed minimum elevation minObsCountPerTrack uint tracks with less number of epochs with observations are dropped minEstimableEpochsRatio double [0,1] drop stations with lower ratio of estimable epochs to total epochs preprocessing sequence settings for preprocessing of observations/stations printStatistics boolean print preprocesssing statistics for all receivers huber double residuals > huber*sigma0 are downweighted huberPower double residuals > huber: sigma=(e/huber)^huberPower*sigma0 codeMaxPositionDiff double [m] max. allowed position error by PPP code only clock error estimation denoisingLambda double regularization parameter for total variation denoising used in cylce slip detection tecWindowSize uint (0 = disabled) window size for TEC smoothness evaluation used in cycle slip detection tecSigmaFactor double factor applied to moving standard deviation used as threshold in TEC smoothness evaluation during cycle slip detection outputfileTrackBefore filename variables {station}, {prn}, {trackTimeStart}, {trackTimeEnd}, {types}, TEC and MW-like combinations in cycles for each track before cycle slip detection outputfileTrackAfter filename variables {station}, {prn}, {trackTimeStart}, {trackTimeEnd}, {types}, TEC and MW-like combinations in cycles for each track after cycle slip detection inputfileStationInfo filename satellite metadata (antenna, receiver, ...) inputfileAntennaDefinition filename antenna center offsets and variations noAntennaPatternFound choice what should happen if no antenna pattern is found for an observation ignoreObservation ignore observation if no matching pattern is found useNearestFrequency use pattern of nearest frequency if no matching pattern is found throwException throw exception if no matching pattern is found inputfileReceiverDefinition filename observed signal types inputfileAccuracyDefinition filename elevation and azimut dependent accuracy inputfileObservations filename inputfileOrbit filename approximate positions inputfileStarCamera filename satellite attitude sigmaFactorPhase expression PHASE: factor = f(FREQ, ELE, SNR, ROTI, dTEc, IONOINDEX) sigmaFactorCode expression CODE: factor = f(FREQ, ELE, SNR, ROTI, dTEc, IONOINDEX) supportsIntegerAmbiguities boolean receiver tracks full cycle integer ambiguities wavelengthFactor double factor to account for half-wavelength observations (collected by codeless squaring techniques) useType gnssType only use observations that match any of these patterns ignoreType gnssType ignore observations that match any of these patterns elevationCutOff angle [degree] ignore observations below cutoff minObsCountPerTrack uint tracks with less number of epochs with observations are dropped preprocessing sequence settings for preprocessing of observations/stations printStatistics boolean print preprocesssing statistics for all receivers huber double residuals > huber*sigma0 are downweighted huberPower double residuals > huber: sigma=(e/huber)^huberPower*sigma0 codeMaxPositionDiff double [m] max. allowed position error by PPP code only clock error estimation denoisingLambda double regularization parameter for total variation denoising used in cylce slip detection tecWindowSize uint (0 = disabled) window size for TEC smoothness evaluation used in cycle slip detection tecSigmaFactor double factor applied to moving standard deviation used as threshold in TEC smoothness evaluation during cycle slip detection outputfileTrackBefore filename variables {station}, {prn}, {trackTimeStart}, {trackTimeEnd}, {types}, TEC and MW-like combinations in cycles for each track before cycle slip detection outputfileTrackAfter filename variables {station}, {prn}, {trackTimeStart}, {trackTimeEnd}, {types}, TEC and MW-like combinations in cycles for each track after cycle slip detection', 'display_text': 'Definition and basic information of GNSS receivers.

Most of the input files are provided in GROOPS file formats at https://ftp.tugraz.at/pub/ITSG/groops (marked with * below). These files are regularly updated.

It is possible to limit the observation types to be used in the processing by a list of useType and any observation types not defined within the list are ignored and discarded. Similarly observations defined in the list of ignoreType are ignored and discarded. The codes used follow the RINEX 3 definition.

Each receiver goes through a preprocessing step individually, where observation outliers are removed or downweighted, continuous tracks of phase observations are defined for ambiguity parametrization, cycle slips are detected, and receivers are disabled if they do not fulfill certain requirements. The preprocessing step consists of an initial PPP estimation done by robust least squares adjustment and checks whether the position error of the solutions exceeds codeMaxPositionDiff. If the error exceeds the threshold the receiver will be discarded. The preprocessing also sets initial clock error values and removes tracks that stay below a certain elevation mask (elevationTrackMinimum).

See also GnssProcessing and GnssSimulateReceiver.

StationNetwork

A network of GNSS ground stations is defined via inputfileStationList. Each line can contain more than one station. The first station in each line for which inputfileObservations exists and contains enough observations is used for the processing. All input files except inputfileAntennaDefinition, inputfileReceiverDefinition, and inputfileAccuracyDefinition are read for each station. The file name is interpreted as a template with the variable {station} being replaced by the station name.

The effects of loading and tidal deformation on station positions can be corrected for via loadingDisplacement and tidalDisplacement, respectively. Tidal deformations typically include:

LowEarthOrbiter

A single low-Earth orbiting (LEO) satellite with an onboard GNSS receiver. An apriori orbit is needed as inputfileOrbit. Attitude data must be provided via inputfileStarCamera. If no attitude data is available from the satellite operator, the star camera data can be simulated by using SimulateStarCamera.'}, -'gnssTransmitterGeneratorType': { 'name': 'gnssTransmitterGeneratorType', 'key': 'gnssTransmitterGeneratorType', 'description': 'Definition and basic information of GNSS transmitters. See also GnssProcessing and GnssSimulateReceiver . A list of satellite PRNs (i.e for GPS: G01, G02, G03, ...) must be provided via . Satellite system codes follow the , see GnssType . All input files except , and are read for each satellite. The file name is interpreted as a template with the variable {prn} being replaced by the satellite PRN. Metadata input files (marked with * below) are provided in GROOPS file formats at https://ftp.tugraz.at/pub/ITSG/groops . These files are regularly updated. * : PRN-SVN mapping, antenna offsets and orientations. Created via GnssAntex2AntennaDefinition or PlatformCreate . * : Antenna center variations. Created via GnssAntex2AntennaDefinition or GnssAntennaDefinitionCreate . * : Transmitted signal types. Created via GnssReceiverDefinitionCreate in case you want to define which signal types a satellite transmits. * : Scale factor of transmitted signals due to frequency offset/clock drift. Can be dreived from broadcast clocks drifts. : Converted via Sp3Format2Orbit or output of GnssProcessing . : Rotation from body frame to CRF. Created via SimulateStarCameraGnss or converted via GnssOrbex2StarCamera . : Converted via GnssClockRinex2InstrumentClock or GnssRinexNavigation2OrbitClock or output of GnssProcessing .', 'config_table': 'inputfileTransmitterList filename ascii file with transmitter PRNs, used to loop variable {prn} inputfileTransmitterInfo filename variable {prn} available inputfileAntennaDefintion filename phase centers and variations (ANTEX like) noAntennaPatternFound choice what should happen is no antenna pattern is found for an observation ignoreObservation ignore observation if no matching pattern is found useNearestFrequency use pattern of nearest frequency if no matching pattern is found throwException throw exception if no matching pattern is found inputfileSignalDefintion filename transmitted signal types inputfileClockFrequencyScale filename variable {prn} available inputfileOrbit filename variable {prn} available inputfileAttitude filename variable {prn} available inputfileClock filename variable {prn} available interpolateClock boolean linear interpolation of missing epochs interpolationDegree uint for orbit interpolation and velocity calculation', 'display_text': 'Definition and basic information of GNSS transmitters.

See also GnssProcessing and GnssSimulateReceiver.

GNSS

A list of satellite PRNs (i.e for GPS: G01, G02, G03, ...) must be provided via inputfileTransmitterList. Satellite system codes follow the RINEX 3 definition, see GnssType. All input files except inputfileAntennaDefinition, and inputfileReceiverDefinition are read for each satellite. The file name is interpreted as a template with the variable {prn} being replaced by the satellite PRN.

Metadata input files (marked with * below) are provided in GROOPS file formats at https://ftp.tugraz.at/pub/ITSG/groops. These files are regularly updated.

'}, +'gnssTransmitterGeneratorType': { 'name': 'gnssTransmitterGeneratorType', 'key': 'gnssTransmitterGeneratorType', 'description': 'Definition and basic information of GNSS transmitters. See also GnssProcessing and GnssSimulateReceiver . A list of satellite PRNs (i.e for GPS: G01, G02, G03, ...) must be provided via . Satellite system codes follow the , see GnssType . All input files except , and are read for each satellite. The file name is interpreted as a template with the variable {prn} being replaced by the satellite PRN. Metadata input files (marked with * below) are provided in GROOPS file formats at https://ftp.tugraz.at/pub/ITSG/groops . These files are regularly updated. * : PRN-SVN mapping, antenna offsets and orientations. Created via GnssAntex2AntennaDefinition or PlatformCreate . * : Antenna center variations. Created via GnssAntex2AntennaDefinition or GnssAntennaDefinitionCreate . * : Transmitted signal types. Created via GnssReceiverDefinitionCreate in case you want to define which signal types a satellite transmits. * : Scale factor of transmitted signals due to frequency offset/clock drift. Can be dreived from broadcast clocks drifts. : Converted via Sp3Format2Orbit or output of GnssProcessing . : Rotation from body frame to CRF. Created via SimulateStarCameraGnss or converted via GnssOrbex2StarCamera . : Converted via GnssClockRinex2InstrumentClock or GnssRinexNavigation2OrbitClock or output of GnssProcessing .', 'config_table': 'inputfileTransmitterList filename ascii file with transmitter PRNs, used to loop variable {prn} inputfileTransmitterInfo filename variable {prn} available inputfileAntennaDefinition filename phase centers and variations (ANTEX like) noAntennaPatternFound choice what should happen is no antenna pattern is found for an observation ignoreObservation ignore observation if no matching pattern is found useNearestFrequency use pattern of nearest frequency if no matching pattern is found throwException throw exception if no matching pattern is found inputfileSignalDefinition filename transmitted signal types inputfileClockFrequencyScale filename variable {prn} available inputfileOrbit filename variable {prn} available inputfileAttitude filename variable {prn} available inputfileClock filename variable {prn} available interpolateClock boolean linear interpolation of missing epochs interpolationDegree uint for orbit interpolation and velocity calculation', 'display_text': 'Definition and basic information of GNSS transmitters.

See also GnssProcessing and GnssSimulateReceiver.

GNSS

A list of satellite PRNs (i.e for GPS: G01, G02, G03, ...) must be provided via inputfileTransmitterList. Satellite system codes follow the RINEX 3 definition, see GnssType. All input files except inputfileAntennaDefinition, and inputfileReceiverDefinition are read for each satellite. The file name is interpreted as a template with the variable {prn} being replaced by the satellite PRN.

Metadata input files (marked with * below) are provided in GROOPS file formats at https://ftp.tugraz.at/pub/ITSG/groops. These files are regularly updated.

'}, 'gnssType': { 'name': 'gnssType', 'key': 'gnssType', 'description': 'A GnssType string consists of six parts (type, frequency, attribute, system, PRN, frequency number) represented by seven characters. The first three characters (representing type, frequency, and attribute) correspond to the observation codes of the . The satellite system character also follows the RINEX 3 definition: G = GPS R = GLONASS E = Galileo C = BeiDou S = SBAS J = QZSS I = IRNSS PRN is a two-digit number identifying a satellite. Frequency number is only used for GLONASS, where the range -7 to 14 is represented by letters starting with A. Each part of a GnssType string can be replaced by a wildcard \' * \', enabling the use of these strings as patterns, for example to select a subset of observations (e.g. C**G** matches all GPS code/range observations). Trailing wildcards are optional, meaning L1*R is automatically expanded to L1*R*** . For some RINEX 2 types (e.g. Galileo L5) the RINEX 3 attribute is unknown/undefined and can be replaced by ? , for example L5?E01 . Examples: C1CG23 = code/range observation, L1 frequency, derived from C/A code, GPS, PRN 23 L2PR05B = phase observation, G2 frequency, derived from P code, GLONASS, PRN 05, frequency number -6 *5*E** = all observation types, E5a frequency, all attributes, Galileo, all PRNs', 'config_table': '', 'display_text': 'A GnssType string consists of six parts (type, frequency, attribute, system, PRN, frequency number) represented by seven characters.

Each part of a GnssType string can be replaced by a wildcard \'*\', enabling the use of these strings as patterns, for example to select a subset of observations (e.g. C**G** matches all GPS code/range observations). Trailing wildcards are optional, meaning L1*R is automatically expanded to L1*R***. For some RINEX 2 types (e.g. Galileo L5) the RINEX 3 attribute is unknown/undefined and can be replaced by ?, for example L5?E01.

Examples:

'}, 'gravityfieldType': { 'name': 'gravityfieldType', 'key': 'gravityfieldType', 'description': 'This class computes functionals of the time depending gravity field, e.g potential, gravity anomalies or gravity gradients. If several instances of the class are given the results are summed up. Before summation every single result is multiplicated by a factor . To subtract a normal field like GRS80 from a potential to get the disturbance potential you must choose one factor by 1 and the other by -1. To get the mean of two fields just set each factor to 0.5. Some of the instances gives also information about the accuracy. The variance of the result (sum) is computed by means of variance propagation. Reads coefficients of a spherical harmonics expansion from file. The potential is given by If set the expansion is limited in the range between minDegree and maxDegree inclusivly. The computed result is multiplied with factor . If setSigmasToZero is true the variances are set to zero. This option is only important for variance propagation and does not change the result of the gravity field functionals. Reads coefficients of a spherical harmonics expansion (for inner space) from file. If set the expansion is limited in the range between minDegree and maxDegree inclusivly. The computed result is multiplied with factor . If setSigmasToZero is true the variances are set to zero. This option is only important for error propagation and does not change the result of the gravity field functionals. Reads a solution vector from file which may be computed by a least squares adjustment (e.g. by NormalsSolverVCE ). The coefficients of the vector are interpreted from position indexStart (counting from zero) with help of . If the solution file contains solution of several right hand sides you can choose one with number rightSide (counting from zero). You can also read a vector from file containing the accuracies of the coefficients. The computed result is multiplied with factor . Read a time variable gravity field from file represented by a spherical harmonics expansion in the spatial domain and spline functions in the time domain. If set the expansion is limited in the range between minDegree and maxDegree inclusivly. This file can be created for example by Gravityfield2TimeSplines or PotentialCoefficients2BlockMeanTimeSplines . The computed result is multiplied with factor . The given is interpreted as trend function and the result is computed at time as follows with is timeStart and is timeStep . The given is interpreted as oscillation function and the result is computed at time as follows with . A is only evaluated in the interval between timeStart inclusively and timeEnd exclusively. Outside the interval the result is zero. This class is useful to get a time series of monthly mean GRACE gravity field solutions. In each month another file of potentialCoefficients is valid. This can easily be created with . Treat as gravitational forces. The tides need a realization of to transform between the CRF and TRF and to compute rotational deformation from polar motion. It also needs from Sun, moon, and planets. The gravity is integrated from a topographic mass distribution. For each grid point in a prisma with density is assumed. The horizontal extension is computed from the grid spacing and the vertical extension is given by radialLowerBound and radialUpperBound above ellipsoid. All values are expressions and computed for each point with given data in the grid file. The standard variables for grids are available, see dataVariables . Example: The grid file contains the orthometric height of the topography in the first column, the geoid height in the second and the mean density of each prism in the third column. In this case the following settings should be used: radialUpperBound = data0+data1 , radialLowerBound = data1 , density = data2 . As the prim computation is time consuming a maximum distance around the evaluation point can defined with distancePrism . Afterwards a simplified radial line (the prism mass is concentrated to a line in the center) is used up to a distance of distanceLine . At last the prim is approximated by a point mass in the center up to a distance distanceMax (if set). Prisms nearby the evaluation point can be excluded with distanceMin . The given is interpreted as an oscillation function in the gravitational potential field, caused by large earthquakes. The result is computed at time as follows: with . In this equation, is the attenuation factor, is the overtone factor, is degree, is order, and is time in second. and are computed with the elastic Earth model or observed from the long period record of superconducting gravimeter measurements after the earthquakes. Convert to spherical harmonics and the coefficients. Groups a set of and has no further effect itself.', 'config_table': 'inputfilePotentialCoefficients filename minDegree uint maxDegree uint factor double the result is multiplied by this factor, set -1 to subtract the field setSigmasToZero boolean set variances to zero, should be used by adding back reference fields inputfilePotentialCoefficients filename minDegree uint maxDegree uint factor double the result is multiplied by this factor, set -1 to subtract the field setSigmasToZero boolean set variances to zero, should be used by adding back reference fields parametrization parametrizationGravityType inputfileSolution filename solution vector inputfileSigmax filename standards deviations or covariance matrix of the solution indexStart uint position in the solution vector rightSide uint if solution contains several right hand sides, select one factor double the result is multiplied by this factor, set -1 to subtract the field inputfileTimeSplinesGravityfield filename inputfileTimeSplinesCovariance filename minDegree uint maxDegree uint factor double the result is multiplied by this factor, set -1 to subtract the field gravityfield gravityfieldType this field is multiplicated by (time-time0)/timeStep timeStart time reference time timeStep time gravityfieldCos gravityfieldType multiplicated by cos(2pi/T(time-time0)) gravityfieldSin gravityfieldType multiplicated by sin(2pi/T(time-time0)) time0 time reference time period time [day] gravityfield gravityfieldType timeStart time first point in time timeEnd time last point in time will be less or equal timeEnd tides tidesType earthRotation earthRotationType ephemerides ephemeridesType inputfileGridRectangular filename Digital Terrain Model density expression expression [kg/m**3] radialUpperBound expression expression (variables \'height\', \'data\', \'L\', \'B\' and, \'area\' are taken from the gridded data radialLowerBound expression expression (variables \'height\', \'data\', \'L\', \'B\' and, \'area\' are taken from the gridded data distanceMin double [km] min. influence distance (ignore near zone) distancePrism double [km] max. distance for prism formular distanceLine double [km] max. distance for radial integration distanceMax double [km] max. influence distance (ignore far zone) factor double the result is multiplied by this factor, set -1 to subtract the field inputCoefficientMatrix filename oscillation model parameters time0 time the time earthquake happened minDegree uint maxDegree uint GM double Geocentric gravitational constant R double reference radius gravityfield gravityfieldType filter sphericalHarmonicsFilterType gravityfield gravityfieldType factor double the result is multiplied by this factor, set -1 to subtract the field', 'display_text': 'This class computes functionals of the time depending gravity field, e.g potential, gravity anomalies or gravity gradients.

If several instances of the class are given the results are summed up. Before summation every single result is multiplicated by a factor. To subtract a normal field like GRS80 from a potential to get the disturbance potential you must choose one factor by 1 and the other by -1. To get the mean of two fields just set each factor to 0.5.

Some of the instances gives also information about the accuracy. The variance of the result (sum) is computed by means of variance propagation.

PotentialCoefficients

Reads coefficients of a spherical harmonics expansion from file. The potential is given by \\[ V(\\lambda,\\vartheta,r) = \\frac{GM}{R}\\sum_{n=0}^\\infty \\sum_{m=0}^n \\left(\\frac{R}{r}\\right)^{n+1} \\left(c_{nm} C_{nm}(\\lambda,\\vartheta) + s_{nm} S_{nm}(\\lambda,\\vartheta)\\right). \\]If set the expansion is limited in the range between minDegree and maxDegree inclusivly. The computed result is multiplied with factor. If setSigmasToZero is true the variances are set to zero. This option is only important for variance propagation and does not change the result of the gravity field functionals.

PotentialCoefficientsInterior

Reads coefficients of a spherical harmonics expansion (for inner space) from file. If set the expansion is limited in the range between minDegree and maxDegree inclusivly. The computed result is multiplied with factor. If setSigmasToZero is true the variances are set to zero. This option is only important for error propagation and does not change the result of the gravity field functionals.

FromParametrization

Reads a solution vector from file inputfileSolution which may be computed by a least squares adjustment (e.g. by NormalsSolverVCE). The coefficients of the vector are interpreted from position indexStart (counting from zero) with help of parametrizationGravity. If the solution file contains solution of several right hand sides you can choose one with number rightSide (counting from zero). You can also read a vector from file inputfileSigmax containing the accuracies of the coefficients.

The computed result is multiplied with factor.

TimeSplines

Read a time variable gravity field from file inputfileTimeSplinesGravityfield represented by a spherical harmonics expansion in the spatial domain and spline functions in the time domain. If set the expansion is limited in the range between minDegree and maxDegree inclusivly.

This file can be created for example by Gravityfield2TimeSplines or PotentialCoefficients2BlockMeanTimeSplines.

The computed result is multiplied with factor.

Trend

The given gravityfield is interpreted as trend function and the result is computed at time $t$ as follows \\[ V(\\M x,t) = \\frac{t-t_0}{\\Delta t}V(\\M x), \\]with $t_0$ is timeStart and $\\Delta t$ is timeStep.

Oscillation

The given gravityfield is interpreted as oscillation function and the result is computed at time $t$ as follows \\[ V(\\M x,t) = \\cos(\\omega)V_{cos}(\\M x)+\\sin(\\omega)V_{sin}(\\M x), \\]with $\\omega=\\frac{2\\pi}{T}(t-t_0)$.

InInterval

A gravityfield is only evaluated in the interval between timeStart inclusively and timeEnd exclusively. Outside the interval the result is zero.

This class is useful to get a time series of monthly mean GRACE gravity field solutions. In each month another file of potentialCoefficients is valid. This can easily be created with loop.

Tides

Treat tides as gravitational forces. The tides need a realization of earthRotation to transform between the CRF and TRF and to compute rotational deformation from polar motion. It also needs ephemerides from Sun, moon, and planets.

Topography

The gravity is integrated from a topographic mass distribution. For each grid point in inputfileGridRectangular a prisma with density is assumed. The horizontal extension is computed from the grid spacing and the vertical extension is given by radialLowerBound and radialUpperBound above ellipsoid. All values are expressions and computed for each point with given data in the grid file. The standard variables for grids are available, see dataVariables.

Example: The grid file contains the orthometric height of the topography in the first column, the geoid height in the second and the mean density of each prism in the third column. In this case the following settings should be used:

As the prim computation is time consuming a maximum distance around the evaluation point can defined with distancePrism. Afterwards a simplified radial line (the prism mass is concentrated to a line in the center) is used up to a distance of distanceLine. At last the prim is approximated by a point mass in the center up to a distance distanceMax (if set). Prisms nearby the evaluation point can be excluded with distanceMin.

EarthquakeOscillation

The given gravityfield is interpreted as an oscillation function in the gravitational potential field, caused by large earthquakes. The result is computed at time $t$ as follows: \\[ C_{lm}(\\M t) = \\sum_{n=0}^NC_{nlm}(1-\\cos(\\omega)\\exp(\\frac{-\\omega}{2Q_{nlm}})), \\]with $\\omega=\\frac{2\\pi}{T_{nlm}}(t-t_0)$. In this equation, $Q_{nlm}$ is the attenuation factor, $n$ is the overtone factor, $m$ is degree, $l$ is order, and $t$ is time in second. $T_{nlm}$ and $Q_{nlm}$ are computed with the elastic Earth model or observed from the long period record of superconducting gravimeter measurements after the earthquakes.

Filter

Convert gravityfield to spherical harmonics and filter the coefficients.

Group

Groups a set of gravityfield and has no further effect itself.'}, 'gridType': { 'name': 'gridType', 'key': 'gridType', 'description': 'This class generates a set of grid points. In a first step, the grid is always generated globally, with a regional subset of points can be extracted from the global grid. The parameters R and inverseFlattening define the shape of the ellipsoid on which the grid is generated. In case inverseFlattening is chosen as zero, a sphere is used. With height the distance of the points above the ellipsoid can be defined. In addition to the location of the points, weights are assigned to each of the points. These weights can be regarded as the surface element associated with each grid point. The geographical grid is an equal-angular point distribution with points located along meridians and along circles of latitude. deltaLambda denotes the angular difference between adjacent points along meridians and deltaPhi describes the angular difference between adjacent points along circles of latitude. The point setting results as follows: The number of grid points can be determined by The weights are calculated according to The zeroth level of densification coincides with the 12 icosahedron vertices, as displayed in the upper left part of Fig. . Then, depending on the envisaged densification, each triangle edge is divided into parts, illustrated in the upper right part of Fig. . The new nodes on the edges are then connected by arcs of great circles parallel to the triangle edges. The intersections of each three corresponding parallel lines become nodes of the densified grid as well. As in case of a spherical triangle those three connecting lines do not exactly intersect in one point, the center of the resulting triangle is used as location for the new node (lower left part of Fig. ). The lower right side of Fig. finally shows the densified triangle vertex grid for a level of . The number of grid points in dependence of the chosen level of densification can be calculated by The points of the zeroth level are located at the centers of the icosahedron triangles. To achieve a finer grid, each of the triangles is divided into four smaller triangles by connecting the midpoints of the triangle edges. The refined grid points are again located at the center of the triangles. Subsequently, the triangles can be further densified up to the desired level of densification , which is defined by level . The number of global grid points for a certain level can be determined by Thus the quantity of grid points depends exponentially on the level , as with every additional level the number of grid points quadruplicates. The grid features equiangular spacing along circles of latitude with parallelsCount defining the number of the parallels. Along the meridians the points are located at parallels at the zeros of the Legendre polynomial of degree , Consequently, the number of grid points sums up to The weights can be calculated according to The Reuter grid features equi-distant spacing along the meridians determined by the control parameter according to Thus denotes the number of points per meridian, as the two poles are included in the point distribution as well. Along the circles of latitude, the number of grid points decreases with increasing latitude in order to achieve an evenly distributed point pattern. This number is chosen, so that the points along each circle of latitude have the same spherical distance as two adjacent latitudes. The resulting relationship is given by The left hand side of this equation is the spherical distance between adjacent latitudes, the right hand side stands for the spherical distance between two points with the same polar distance and a longitudinal difference of . This longitudinal distance can be adjusted depending on to fulfill Eq. . The resulting formula for is The number of points for each circle of latitude can then be determined by Here the Gauss bracket specifies the largest integer equal to or less than . The longitudes are subsequently determined by The number of grid points can be estimated by The results from the fact that the are restricted to integer values. This kind of grid distributes an arbitrarily chosen number of points (defined by globalPointsCount ) following a recursive, quasi random sequence. In longitudinal direction the pattern follows This implies that every grid point features a unique longitude, with equi-angular longitudinal differences. The polar distance in the form for each point is determined by the following recursive sequence: Starting from an interval . If , then the midpoint of the interval is returned as result of the sequence, and the sequence is terminated. If the number of points is uneven, the midpoint is included into the list of . Subsequently, the interval is bisected into an upper and lower half, and the sequence is called for both halves. from upper and lower half are alternately sorted into the list of . The polar distances are calculated by The Driscoll-Healy grid, has equiangular spacing along the meridians as well as along the circles of latitude. In longitudinal direction (along the parallels), these angular differences for a given dimension coincide with those described for the corresponding geographical grid and Gauss grid. Along the meridians, the size of the latitudinal differences is half the size compared to the geographical grid. This results in the following point pattern, Consequently, the number of grid points is The weights are given by Creates one single point. Creates one single point. In this class grid is read from a file, which is given by . A corresponding file can be generated with GriddedDataCreate or with Matrix2GriddedData .', 'config_table': 'deltaLambda angle deltaPhi angle height double ellipsoidal height expression (variables \'height\', \'L\', \'B\') R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType level uint division of icosahedron, point count = 10*(n+1)**2+2 R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType level uint division of icosahedron, point count = 5*4**(n+1) R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType parallelsCount uint R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType gamma uint number of parallels height double ellipsoidal height R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType globalPointsCount uint height double ellipsoidal height R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType dimension uint number of parallels = 2*dimension height double ellipsoidal height R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere border borderType L angle longitude B angle latitude height double ellipsoidal height area double associated area element on unit sphere R double major axsis of the ellipsoid/sphere inverseFlattening double flattening of the ellipsoid, 0: sphere x double [m] y double [m] z double [m] area double associated area element on unit sphere inputfileGrid filename border borderType', 'display_text': 'This class generates a set of grid points. In a first step, the grid is always generated globally, with border a regional subset of points can be extracted from the global grid. The parameters R and inverseFlattening define the shape of the ellipsoid on which the grid is generated. In case inverseFlattening is chosen as zero, a sphere is used. With height the distance of the points above the ellipsoid can be defined. In addition to the location of the points, weights are assigned to each of the points. These weights can be regarded as the surface element associated with each grid point.

Geograph

The geographical grid is an equal-angular point distribution with points located along meridians and along circles of latitude. deltaLambda denotes the angular difference between adjacent points along meridians and deltaPhi describes the angular difference between adjacent points along circles of latitude. The point setting results as follows: \\[ \\lambda_i=\\frac{\\Delta\\lambda}{2}+i\\cdot\\Delta\\lambda\\qquad\\mbox{with}\\qquad 0\\leq i< \\frac{360^\\circ}{\\Delta\\lambda}, \\]\\[ \\varphi_j=-90^\\circ+\\frac{\\Delta\\varphi}{2}+j\\cdot\\Delta\\varphi\\qquad\\mbox{with}\\qquad 0\\leq j<\\frac{180^\\circ}{\\Delta\\varphi}. \\]The number of grid points can be determined by \\[ I=\\frac{360^\\circ}{\\Delta\\lambda}\\cdot\\frac{180^\\circ}{\\Delta\\varphi}. \\]The weights are calculated according to \\[ w_i=\\int\\limits_{\\lambda_i-\\frac{\\Delta\\lambda}{2}}^{\\lambda_i+\\frac{\\Delta\\lambda}{2}}\\int\\limits_{\\vartheta_i-\\frac{\\Delta\\vartheta}{2}}^{\\vartheta_i+\\frac{\\Delta\\vartheta}{2}}=2\\cdot\\Delta\\lambda\\sin(\\Delta\\vartheta)\\sin(\\vartheta_i). \\]

TriangleVertex

The zeroth level of densification coincides with the 12 icosahedron vertices, as displayed in the upper left part of Fig. fig:triangle_grid. Then, depending on the envisaged densification, each triangle edge is divided into $n$ parts, illustrated in the upper right part of Fig. fig:triangle_grid. The new nodes on the edges are then connected by arcs of great circles parallel to the triangle edges. The intersections of each three corresponding parallel lines become nodes of the densified grid as well. As in case of a spherical triangle those three connecting lines do not exactly intersect in one point, the center of the resulting triangle is used as location for the new node (lower left part of Fig. fig:triangle_grid). The lower right side of Fig. fig:triangle_grid finally shows the densified triangle vertex grid for a level of $n=3$. The number of grid points in dependence of the chosen level of densification can be calculated by \\[\\label{eq:numberVertex} I=10\\cdot(n+1)^2+2. \\]

TriangleCenter

The points of the zeroth level are located at the centers of the icosahedron triangles. To achieve a finer grid, each of the triangles is divided into four smaller triangles by connecting the midpoints of the triangle edges. The refined grid points are again located at the center of the triangles. Subsequently, the triangles can be further densified up to the desired level of densification $n$, which is defined by level.

The number of global grid points for a certain level can be determined by \\[\\label{eq:numberCenter} I=20\\cdot 4^n. \\]Thus the quantity of grid points depends exponentially on the level $n$, as with every additional level the number of grid points quadruplicates.

Gauss

The grid features equiangular spacing along circles of latitude with parallelsCount defining the number $L$ of the parallels. \\[ \\Delta\\lambda=\\frac{\\pi}{L}\\qquad\\Rightarrow\\qquad\\lambda_i=\\frac{\\Delta\\lambda}{2}+i\\cdot\\Delta\\lambda\\qquad\\mbox{with}\\qquad 0\\leq i< 2L. \\]Along the meridians the points are located at $L$ parallels at the $L$ zeros $\\vartheta_j$ of the Legendre polynomial of degree $L$, \\[ P_L(\\cos\\vartheta_j)=0. \\]Consequently, the number of grid points sums up to \\[ I=2\\cdot L^2. \\]The weights can be calculated according to \\[ w_i(L)=\\Delta\\lambda\\frac{2}{(1-t_i^2)(P\'_{L}(\\cos(\\vartheta _i)))^2},\\label{weights} \\]

Reuter

The Reuter grid features equi-distant spacing along the meridians determined by the control parameter $\\gamma$ according to \\[ \\Delta\\vartheta=\\frac{\\pi}{\\gamma}\\qquad\\Rightarrow\\vartheta_j=j\\Delta\\vartheta,\\qquad\\mbox{with}\\qquad 1\\leq j\\leq \\gamma-1. \\]Thus $\\gamma+1$ denotes the number of points per meridian, as the two poles are included in the point distribution as well. Along the circles of latitude, the number of grid points decreases with increasing latitude in order to achieve an evenly distributed point pattern. This number is chosen, so that the points along each circle of latitude have the same spherical distance as two adjacent latitudes. The resulting relationship is given by \\[\\label{eq:sphericalDistance} \\Delta\\vartheta=\\arccos\\left( \\cos^2\\vartheta_j+\\sin^2\\vartheta_j\\cos\\Delta\\lambda_j\\right). \\]The left hand side of this equation is the spherical distance between adjacent latitudes, the right hand side stands for the spherical distance between two points with the same polar distance $\\vartheta_j$ and a longitudinal difference of $\\Delta\\lambda_i$. This longitudinal distance can be adjusted depending on $\\vartheta_j$ to fulfill Eq. \\eqref{eq:sphericalDistance}. The resulting formula for $\\Delta\\lambda_i$ is \\[\\label{eq:deltaLambdai} \\Delta\\lambda_j=\\arccos\\left( \\frac{\\sin\\Delta\\vartheta -\\cos^2\\vartheta_j}{\\sin^2\\vartheta_j}\\right). \\]The number of points $\\gamma_j$ for each circle of latitude can then be determined by \\[\\label{eq:gammai} \\gamma_j=\\left[ \\frac{2\\pi}{\\Delta\\lambda_j}\\right] . \\]Here the Gauss bracket $[x]$ specifies the largest integer equal to or less than $x$. The longitudes are subsequently determined by \\[ \\lambda_{ij}=\\frac{\\Delta\\lambda_j}{2}+i\\cdot(2\\pi/\\gamma_j),\\qquad\\mbox{with}\\qquad 0\\leq i< \\gamma_j. \\]The number of grid points can be estimated by \\[\\label{eq:numberReuter} I=\\leq 2+\\frac{4}{\\pi}\\gamma^2, \\]The $\\leq$ results from the fact that the $\\gamma_j$ are restricted to integer values.

Corput

This kind of grid distributes an arbitrarily chosen number of $I$ points (defined by globalPointsCount) following a recursive, quasi random sequence. In longitudinal direction the pattern follows \\[ \\Delta\\lambda=\\frac{2\\pi}{I}\\qquad\\Rightarrow\\qquad\\frac{\\Delta\\lambda}{2}+\\lambda_i=i\\cdot\\Delta\\lambda\\qquad\\mbox{with}\\qquad 1\\leq i\\leq I. \\]This implies that every grid point features a unique longitude, with equi-angular longitudinal differences.

The polar distance in the form $t_i=\\cos\\vartheta_i$ for each point is determined by the following recursive sequence:

Driscoll

The Driscoll-Healy grid, has equiangular spacing along the meridians as well as along the circles of latitude. In longitudinal direction (along the parallels), these angular differences for a given dimension $L$ coincide with those described for the corresponding geographical grid and Gauss grid. Along the meridians, the size of the latitudinal differences is half the size compared to the geographical grid. This results in the following point pattern, \\[ \\begin{split} \\Delta\\lambda=\\frac{\\pi}{L}\\qquad&\\Rightarrow\\qquad\\lambda_i=\\frac{\\Delta\\lambda}{2}+i\\cdot\\Delta\\lambda\\qquad&\\mbox{with}\\qquad 0\\leq i< 2L, \\\\ \\Delta\\vartheta=\\frac{\\pi}{2L}\\qquad&\\Rightarrow\\qquad\\vartheta_j=j\\cdot\\Delta\\vartheta\\qquad&\\mbox{with}\\qquad 1\\leq j\\leq 2L. \\end{split} \\]Consequently, the number of grid points is \\[ I=4\\cdot L^2. \\]The weights are given by \\[ w_i=\\Delta\\lambda\\frac{4}{2L}\\sin(\\vartheta_i)\\sum_{l=0}^{L-1}\\frac{\\sin\\left[ (2l+1)\\;\\vartheta_i\\right] }{2l+1}. \\]

SinglePoint

Creates one single point.

SinglePointCartesian

Creates one single point.

File

In this class grid is read from a file, which is given by inputfileGrid. A corresponding file can be generated with GriddedDataCreate or with Matrix2GriddedData.'}, diff --git a/docs/html/gnssTransmitterGeneratorType.html b/docs/html/gnssTransmitterGeneratorType.html index 7dd1a6e2..47f5d361 100644 --- a/docs/html/gnssTransmitterGeneratorType.html +++ b/docs/html/gnssTransmitterGeneratorType.html @@ -117,12 +117,12 @@

GNSS

NameTypeAnnotation

inputfileTransmitterList
filenameascii file with transmitter PRNs, used to loop variable {prn}
inputfileTransmitterInfo
filenamevariable {prn} available -
inputfileAntennaDefintion
filenamephase centers and variations (ANTEX like) +
inputfileAntennaDefinition
filenamephase centers and variations (ANTEX like)
noAntennaPatternFound
choicewhat should happen is no antenna pattern is found for an observation
ignoreObservation
ignore observation if no matching pattern is found
useNearestFrequency
use pattern of nearest frequency if no matching pattern is found
throwException
throw exception if no matching pattern is found -
inputfileSignalDefintion
filenametransmitted signal types +
inputfileSignalDefinition
filenametransmitted signal types
inputfileClockFrequencyScale
filenamevariable {prn} available
inputfileOrbit
filenamevariable {prn} available
inputfileAttitude
filenamevariable {prn} available diff --git a/docs/latex/classes.auto.tex b/docs/latex/classes.auto.tex index dc18f7f3..5da68fd5 100644 --- a/docs/latex/classes.auto.tex +++ b/docs/latex/classes.auto.tex @@ -2800,12 +2800,12 @@ \subsection{GNSS}\label{gnssTransmitterGeneratorType:gnss} \hline \hfuzz=500pt\includegraphics[width=1em]{element-mustset-unbounded.pdf}~inputfileTransmitterList & \hfuzz=500pt filename & \hfuzz=500pt ascii file with transmitter PRNs, used to loop variable \{prn\}\\ \hfuzz=500pt\includegraphics[width=1em]{element-mustset.pdf}~inputfileTransmitterInfo & \hfuzz=500pt filename & \hfuzz=500pt variable \{prn\} available\\ -\hfuzz=500pt\includegraphics[width=1em]{element-mustset.pdf}~inputfileAntennaDefintion & \hfuzz=500pt filename & \hfuzz=500pt phase centers and variations (ANTEX like)\\ +\hfuzz=500pt\includegraphics[width=1em]{element-mustset.pdf}~inputfileAntennaDefinition & \hfuzz=500pt filename & \hfuzz=500pt phase centers and variations (ANTEX like)\\ \hfuzz=500pt\includegraphics[width=1em]{element-mustset.pdf}~noAntennaPatternFound & \hfuzz=500pt choice & \hfuzz=500pt what should happen is no antenna pattern is found for an observation\\ \hfuzz=500pt\includegraphics[width=1em]{connector.pdf}\includegraphics[width=1em]{element-mustset.pdf}~ignoreObservation & \hfuzz=500pt & \hfuzz=500pt ignore observation if no matching pattern is found\\ \hfuzz=500pt\includegraphics[width=1em]{connector.pdf}\includegraphics[width=1em]{element-mustset.pdf}~useNearestFrequency & \hfuzz=500pt & \hfuzz=500pt use pattern of nearest frequency if no matching pattern is found\\ \hfuzz=500pt\includegraphics[width=1em]{connector.pdf}\includegraphics[width=1em]{element-mustset.pdf}~throwException & \hfuzz=500pt & \hfuzz=500pt throw exception if no matching pattern is found\\ -\hfuzz=500pt\includegraphics[width=1em]{element.pdf}~inputfileSignalDefintion & \hfuzz=500pt filename & \hfuzz=500pt transmitted signal types\\ +\hfuzz=500pt\includegraphics[width=1em]{element.pdf}~inputfileSignalDefinition & \hfuzz=500pt filename & \hfuzz=500pt transmitted signal types\\ \hfuzz=500pt\includegraphics[width=1em]{element.pdf}~inputfileClockFrequencyScale & \hfuzz=500pt filename & \hfuzz=500pt variable \{prn\} available\\ \hfuzz=500pt\includegraphics[width=1em]{element-mustset.pdf}~inputfileOrbit & \hfuzz=500pt filename & \hfuzz=500pt variable \{prn\} available\\ \hfuzz=500pt\includegraphics[width=1em]{element-mustset.pdf}~inputfileAttitude & \hfuzz=500pt filename & \hfuzz=500pt variable \{prn\} available\\ diff --git a/groops.xsd b/groops.xsd index 2a0edc88..795d8e60 100644 --- a/groops.xsd +++ b/groops.xsd @@ -3108,6 +3108,10 @@ + + rename: inputfileAntennaDefintion = inputfileAntennaDefinition + rename: inputfileSignalDefintion = inputfileSignalDefinition + @@ -3120,7 +3124,7 @@ variable {prn} available - + phase centers and variations (ANTEX like) @@ -3149,7 +3153,7 @@ - + transmitted signal types diff --git a/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp b/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp index 95bf7142..7243b204 100644 --- a/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp +++ b/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp @@ -30,9 +30,12 @@ GnssTransmitterGeneratorGnss::GnssTransmitterGeneratorGnss(Config &config) { std::string choice; + renameDeprecatedConfig(config, "inputfileAntennaDefintion", "inputfileAntennaDefinition", date2time(2025, 5, 27)); + renameDeprecatedConfig(config, "inputfileSignalDefintion", "inputfileSignalDefinition", date2time(2025, 5, 27)); + readConfig(config, "inputfileTransmitterList", fileNamesTransmitterList, Config::MUSTSET, "{groopsDataDir}/gnss/transmitter/transmitterList.gps.txt", "ascii file with transmitter PRNs, used to loop variable {prn}"); readConfig(config, "inputfileTransmitterInfo", fileNameTransmitterInfo, Config::MUSTSET, "{groopsDataDir}/gnss/transmitter/transmitterInfo/igs/igs20/transmitterInfo_igs20.{prn}.xml", "variable {prn} available"); - readConfig(config, "inputfileAntennaDefintion", fileNameAntennaDef, Config::MUSTSET, "{groopsDataDir}/gnss/transmitter/antennaDefinition/igs/igs20/antennaDefinition_igs20.dat", "phase centers and variations (ANTEX like)"); + readConfig(config, "inputfileAntennaDefinition", fileNameAntennaDef, Config::MUSTSET, "{groopsDataDir}/gnss/transmitter/antennaDefinition/igs/igs20/antennaDefinition_igs20.dat", "phase centers and variations (ANTEX like)"); if(readConfigChoice(config, "noAntennaPatternFound", choice, Config::MUSTSET, "useNearestFrequency", "what should happen is no antenna pattern is found for an observation")) { if(readConfigChoiceElement(config, "ignoreObservation", choice, "ignore observation if no matching pattern is found")) @@ -43,7 +46,7 @@ GnssTransmitterGeneratorGnss::GnssTransmitterGeneratorGnss(Config &config) noPatternFoundAction = GnssAntennaDefinition::NoPatternFoundAction::THROW_EXCEPTION; endChoice(config); } - readConfig(config, "inputfileSignalDefintion", fileNameSignalDef, Config::OPTIONAL, "{groopsDataDir}/gnss/transmitter/signalDefinition/signalDefinition.xml", "transmitted signal types"); + readConfig(config, "inputfileSignalDefinition", fileNameSignalDef, Config::OPTIONAL, "{groopsDataDir}/gnss/transmitter/signalDefinition/signalDefinition.xml", "transmitted signal types"); readConfig(config, "inputfileClockFrequencyScale", fileNameScale, Config::OPTIONAL, "", "variable {prn} available"); readConfig(config, "inputfileOrbit", fileNameOrbit, Config::MUSTSET, "orbit_{loopTime:%D}.{prn}.dat", "variable {prn} available"); readConfig(config, "inputfileAttitude", fileNameAttitude, Config::MUSTSET, "attitude_{loopTime:%D}.{prn}.dat", "variable {prn} available"); From e381f3807aa77bf99012fec76cc3bc8a19a1ea01 Mon Sep 17 00:00:00 2001 From: Andreas Kvas Date: Wed, 27 May 2026 10:20:44 +0000 Subject: [PATCH 2/2] fix date in config deprecation --- .../gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp b/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp index 7243b204..02854f21 100644 --- a/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp +++ b/source/gnss/gnssTransmitterGenerator/gnssTransmitterGeneratorGnss.cpp @@ -30,8 +30,8 @@ GnssTransmitterGeneratorGnss::GnssTransmitterGeneratorGnss(Config &config) { std::string choice; - renameDeprecatedConfig(config, "inputfileAntennaDefintion", "inputfileAntennaDefinition", date2time(2025, 5, 27)); - renameDeprecatedConfig(config, "inputfileSignalDefintion", "inputfileSignalDefinition", date2time(2025, 5, 27)); + renameDeprecatedConfig(config, "inputfileAntennaDefintion", "inputfileAntennaDefinition", date2time(2026, 5, 27)); + renameDeprecatedConfig(config, "inputfileSignalDefintion", "inputfileSignalDefinition", date2time(2026, 5, 27)); readConfig(config, "inputfileTransmitterList", fileNamesTransmitterList, Config::MUSTSET, "{groopsDataDir}/gnss/transmitter/transmitterList.gps.txt", "ascii file with transmitter PRNs, used to loop variable {prn}"); readConfig(config, "inputfileTransmitterInfo", fileNameTransmitterInfo, Config::MUSTSET, "{groopsDataDir}/gnss/transmitter/transmitterInfo/igs/igs20/transmitterInfo_igs20.{prn}.xml", "variable {prn} available");