- define subnet file (including clock site, a couple of non-kinematically estimated sites, at the ones you are really interested in)
- define namelist (nml) file (RANDOM-WALK!), at best put them into /home/akda/Kinematic . That's also were examples live
- adapt script that calls solve (check whether you need a rapid solution -- when orbits aren't in yet)
- run solution
- extract data from .trop files
- plot results.
Temporal Resolution below 5 min
The standard solutions run with a temporal solution of 5 minutes (6 minutes if older than 1995). This means the standard qm files do not contain enough information if you need a finer resolution. Here is what to do:
- create campaign directory:
- create qm files for all rinex files from sites that go into that campaign for respective time:
rnx2qm RINEX-file -dir $procdir -interval 30
reprocess_rinex station-name start-day end-day rinexdir outdir interval
where $procdir=/gps/data/CAMPAIGN_NAME-interval, i.e. the campaign directory you just created.
- copy the orbits for the repective day(s) into /gps/data/CAMPAIGN_NAME-interval/orbit
- add the
-nosvclkfileflag to your
solvecall, to make sure the satellite clocks are not used ...
- or get high resolution clocks for the respective days from ftp://sideshow.jpl.nasa.gov/pub/gipsy_products/hrclocks/ and copy those into /gps/data/CAMPAIGN_NAME-interval/orbit
- if you got the high resolution orbits, make sure to rename them: mv *.tdp *.tdpc
- make sure to update the $CAMP variable in the make-xxxxx file that you copy into your /gps/data/CAMPAIGN_NAME-interval/flt directory
Standard/Automated Processing for Kinematic PPP Solutions
There are some new scripts available to make it quick and easy to do high rate static and kinematic solutions. These implement a standard solution using 1 sample per second data, and using the 3.0 solution strategy otherwise.
- Create a new campaign directory using the
newcampscript. Copy the orbit files you will need for whatever days you are processing. Also, collect the 1 sample per second rinex files in some directory (not in the campaign data structure).
- Run the script
f-e.kinematicto create 1 sample per second qm files. The full command line is
f-e.kinematic rinexdir [campdir]. The first argument is the directory where your rinex files (compressed .Z or .gz files) are, and the optional second directory is the top-level campaign directory (default is
- You will need to check the data for cycle slips and other problems using a high-rate static
solution. Run the script
$CAMP/fltto make a script that will generate a script to run such a solution for all qm files. You may want to edit the resulting script
make-staticto add lines defining the $CAMP variable so that you can run it more automatically.
- Check the residuals, add ambiguity parameters as needed. Same as a regular solution.
- Run PPP solutions for all stations using the script
run_3.0_kinematic_solution. Full syntax is
run_3.0_kinematic_solution -date yymmmdd [-update]. The script will run all qm files for that date, putting the solutions in the sub-directory PPP3.0kin. The time-depenent parameter files (TDP files) are in the $CAMP/trop directory. With the -update flag, the script will only run qm files that have not been run before.
- Extract the time-dependent solutions for each station and make SAC files using the script <trop2enu>. Give it the .trop file as an argument, and it will create corresponding .enu and .SAC files.
Defining Custom Solution Parameters
Use an NML file to define the solution parameters. Here is an example to start with.
$PREP !namelist input for preprefilter ! reference clock is REQUIRED. you need to use one of ! your sites, generally one with a stable clock. Mostly ! it means anything except a trimble. If an external ! oscillator is used, then it can be a reference clock. REFCLOCK = 'THU1' ! just says whether the troposphere will be estimated stochastically. ! except for very short baselines, this is always true. WETZTROP = .TRUE. ! This is the white noise sigma applied to phase ambiguity parameters ! whenever a new ambiguity needs to be estimated (.1 seems to work). yaddsg = 0.1 ! this is the random walk constraint for the troposphere, in km/sqrt(sec) TROPDRIFT = 1.70D-7 ! if you want to estimate additional paraetmeters stochastically, you ! put them here. You don't have to put clocks here, because GIPSY ! assumes that all clocks will be estimated stochastically. SSTCH = 'STA E SCOB','STA N SCOB', 'STA V SCOB' ! in this example they are the east, north, and vertical components ! for station SCOB. Generally station locations are not ! estimated stochastically ! This tells you how to constrain the parameters you named above. SPSIG = 3*1.0D-6, ! random walk constraint SMTAU = 3*'RANDOMWALK', ! how often do you want to estimate these stochastic parameters SDELT = 3*'/00:05', ! compute a position every 5 minutes $END $INIT !namelist input for filter YDEL(1) = 'STABIAS THU1' ! same for the reference clock ! STABIAS is the GIPSY name for a station clock. SATBIAS is ! for a satellite clock ! this is if you are estimating station positions stochastically. ! just do it. grounddelete = 'SCOB', STAINT = .FALSE. IDIGIT = 9 ! this is a list of all the parameters you DO NOT ! want GIPSY to estimate. look at the cartoon book ! for more info. X, Y, Z, DX, DY, DZare the satellite orbits. ! you don't want to estimate them if youare using someone ! else's orbits, which I would assume you are all going to do YDEL(2) = 'UT1-UTC', 'UT1-UTC RATE', 'X POLE *', 'Y POLE *', 'GEOCENTER*', 'V LOVE', 'H LOVE', 'DRYZTROP*', 'LMPZTROP*', 'STA DRFT*', 'STA ACCL*', 'SAT DRFT*', 'SAT ACCL*', 'BIASPSR*', 'SOLARSCLTOP*','Y_BIAS TOP*', 'XPOLEMOTION','XPOLERATE','YPOLEMOTION','YPOLERATE', 'X*', 'Y*', 'Z*', 'DX*', 'DY*', 'DZ*','TRPAZ*', 'SOLSCL_X*', 'Y_BIAS*', 'SOLSCL_Z*', 'SOLARSCL*' SOLPRT = .TRUE. NOMEAS = .FALSE. SOLVE = .TRUE. DEBUG = 1 OUTNAME = 'OASIS' $END $APRIORI !namelist input for filter APALL = .TRUE. ! The following are NOT currently estimated ! ! Parameters actually estimated start here ! APNAMS( 1) = 'WETZTROP*', APSIGS( 1) = 10.0D-5 !10 cm APNAMS( 2) = 'STABIAS*', APSIGS( 2) = 3.0D5 !1 sec APNAMS( 3) = 'SATBIAS*', APSIGS( 3) = 3.0D5 !1 sec APNAMS( 4) = 'PHASE*', APSIGS( 4) = 1.0D-1 !1 micr ! I am using ENV here, but you should set these for XYZ if you are doing ! it in the Cartesian frame APNAMS( 5) = 'STAE*', APSIGS( 5) = 1. !1 km APNAMS( 6) = 'STAN*', APSIGS( 6) = 1. !1 km APNAMS( 7) = 'STAV*', APSIGS( 7) = 1. !1 km APNAMS( 8) = 'STA E KOKB', APSIGS( 8) = 10.0D-3 !10 m APNAMS( 9) = 'STA N KOKB', APSIGS( 9) = 10.0D-3 !10 m APNAMS(10) = 'STA V KOKB', APSIGS(10) = 10.0D-3 !10 m $END $DATAWGHT !namelist input for filter, edtpnt2, and post ELMINSTA = 15.0D0 ! elevation angle minimum ! 110 is pseudorange, 120 is phase DATYPE = 110, 120, DATSIG = 1.0D-3, 1.0D-5, ! these are in km XRECNM(1) = 'HOLE' ! this is to delete a specific receiver XXMTNM(1) = 'GPS04' ! this is to delete a specific satellite $END $SMINPUT !namelist input for smapper SAVEUD = 'LAST' SAVESIGMA = .TRUE. IDIGIT = 9 MAPTYP = 'CARTESIAN' OUTNAME = 'OASIS' TDPFULLPRECISION = .TRUE. ! write out these parameters for stochastic parameters ! GIPSY only creates this file if asked for (it is a TDP ! - time-dependent-parameter file). If you want to know ! clock values, then you need to write their names here. WRTTDP = 'STA E SCOB', 'STA N SCOB', 'STA V SCOB', TDPTYP = 'TIMEVARY', TDPTOL = 1.0d00, STAINT = .FALSE. $END $APRIORINML !namelist input for smapper $END $LIMITS !namelist input for postfit ! outlier criterion, i.e. flag all phase data greater than 5 cm. STAINT = .FALSE. DATYPE = 120 WINDOW = 5.0D-5, $END $EDTINIT !namelist input for edtpnt2 STAINT = .FALSE. DEBUG = .TRUE. $END