Processing GPS data with GAMIT/GLOBK

1. Overview of GPS data processing

1.1. Computing loose constrained solutions (quasi-observations) – GAMIT

First, we estimate GPS station coordinates for each day of data in loosely constrained solutions (h-files). That means that we tightly constraint neither the coordinates of the tracking sites nor the GPS satellites orbits. In our solutions, the orbits of GPS satellites and station coordinates are not in a well-determined reference frame. Baseline lengths are determined very precisely in the loosely constrained solutions and the entire GPS network and GPS constellation can be rotated and translated as a rigid body.

1.2. Combining global and local quasi-observations – GLOBK

To use the coordinates derived from these solutions, we need to transform all the loosely constrained solution into a consistent reference frame so that we can derive rates of deformation from the time series of the stations’ coordinates. The reference frame defines the origin, scale and orientation of our geodetic coordinates. A reference frame is realized through the coordinate and covariance of a number of reference stations. We include information about the reference stations of the adopted geodetic reference frame (usually the latest realization of the ITRF) by combining our loosely constrained solutions with the IGS global h-files from SOPAC.

1.3. Defining the reference frame for deformation velocities – GLORG

Finally, we apply the reference frame constraints and estimate the site velocities (Fig. 2 below).


GAMIT is a comprehensive GPS analysis package developed at MIT and Scripps for the estimation of three-dimensional relative positions of ground stations and satellite orbits. The primary output of GAMIT is a loosely constrained solution (h-) file of parameter estimates and covariances that can be passed to GLOBK for combinations of data to estimate station positions, velocities, orbital and Earth-rotation parameters.

The analysis software is composed of distinct modules, which:

2.1. Generate reference orbits for the satellites

  • SP3-file (earth-fixed ephemeris)
  • T-file (earth-fixed tabular ephemeris)
  • G-file (orbital initial conditions)
  • arc.bat
  • G-file (orbital initial conditions)
  • T-file (inertial tabular ephemeris)
  • G-file (interpolated from inertial T-file)
  • T-file (inertial tabular ephemeris)
  • G-file

2.2. Prepare the data for processing

  • RINEX files
  • (antenna, receiver info)
  • D-file (FIXDRV input file)
  • Input batch file for MAKEX, MAKEJ
  • RINEX nav file
  • J-file (satellite clock file)
  • RINEX files
  • RINEX nav file
  • J-file (satellite clock file)
  • L-file (initial stations coordinates)
  • K-file (receiver clock)
  • X-file (input observations)
  • D-file (defines the input and output)
  • sestbl. (session control)
  • sittbl. (site control)
  • T, J, L, X input
  • B-file (bexpy.bat ; primary batch file)
  • B-file (bexpy.nnn ; secondary batch file)
  • I-file (rcvr clock polynomials)

2.3. Compute residuals and partial derivatives of the observations (“observables”)

  • L-file (initial stations coordinates)
  • (antenna, receiver info)
  • X, T, I, J
  • C-file (observed-computed, partial derivatives)

2.4. Detect outliers or breaks (cycle-slips) in the data

  • C-file
  • C-file (cleaned)

5. Perform a least square analysis to estimate the positions of a set of stations and more

  • M-file (control merging of data
  • C-file (data)
  • Q-file (contain a record of the analysis)
  • H-file (loose constrained solution)
  • G, L (update)

3. Using GAMIT to compute quasi-observations

3.1. Part 1: prepare files in working directory

1. Create a working directory

mkdir ~/your_name_here/010

2. Go to your working directory

cd ~/your_name_here/010

3. Copy your data files to your working directory and convert to rinex format

For instance, if your files are stored in /my_disk/data_directory/010 in Hatanaka compressed format:

cp /my_disk/data_directory/010/????0100.03d.Z .

uncompress *Z

crx2rnx ????0100.03d

rm *.03d

4. Choose igs files for tie to itrf

Log on to

Go to “tracking network” and choose 3 to 10 IGS sites well defined in ITRF2000, that define a good network encompassing your local array.

5. Get igs data files

ftp [anonymous]

cd /pub/rinex/2003/010


get nlib0100.03d.Z

get usno0100.03d.Z

get amc20100.03d.Z

get auto0100.03n.Z


6. Get cors data files

ftp [anonymous]

cd /cors/rinex/2003/010/wlci


get wlci0100.03d.Z


7. Uncompress and convert data files to rinex format:

uncompress *Z

crx2rnx nlib0100.03d

crx2rnx usno0100.03d

crx2rnx amc20100.03d

crx2rnx wlci0100.03d

rm *.03d

8. Get ephemerides file, then uncompress and change name:

ftp [anonymous]

cd /pub/rinex/2003/010


get auto0100.03n.Z


uncompress auto0100.03n.Z

mv auto0100.03n epgga3.010

9. Get precise igs orbit, uncompress:

gweek 010 2003

ftp [anonymous]

cd igscb/product

cd 1200


get igs12005.sp3.Z


uncompress igs12005.sp3.Z

10. Link tables:

link_tables 2003 /project/geodesy/mit_epicen/tables

11. Prepare l-file (a priori site positions):

Option 1:

gapr_to_l gt/itrf00.apr ltmp “” 2003 010

grep USNO itrf00.apr >! ltest3.010

grep WLCI itrf00.apr >> ltest3.010

grep AMC2 itrf00.apr >> ltest3.010

grep NLIB itrf00.apr >> ltest3.010

rm ltmp

Option 2:

grep USNO gt/litrf00.2003_010 >! ltest3.010

grep WLCI gt/litrf00.2003_010 >> ltest3.010

grep AMC2 gt/litrf00.2003_010 >> ltest3.010

grep NLIB gt/litrf00.2003_010 >> ltest3.010

If a station is not in litrf00.2003_010, then use its approximate coordinates from the rinex file header and transform them to spherical with ‘tform’.

Edit ltest3.010: add one line at the top of the file, for instance ‘Epoch 2003.0247: From file itrf00.apr’

12. Prepare (antenna heights, equipment type):

grep USNO gt/ >!

grep WLCI gt/ >>

grep AMC2 gt/ >>

grep NLIB gt/ >>

13. Edit

–        add info for sites not present in

–        add firt line:

test pgga

–         add second line, a format statement:


14. Prepare sittbl. (site specific processing parameters)

grep NLIB gt/sittbl. > sittbl.

grep AMC2 gt/sittbl. >> sittbl.

grep WLCI gt/sittbl. >> sittbl.

grep USNO gt/sittbl. >> sittbl.

15. Edit sittbl.:

–         add info for sites not present in sittbl.

–         add 2 comment lines at the top:

line 1:



line 2:

<< MY SITES >>

–         IMPORTANT: decide on a priori constraints for your sites. For instance, use 99.99/99.99/99.99 for your local sites (WLCI) and 0.005/0.005/0.050 for the IGS sites (NEU, meters).

–         Set the number of zenith delays to be estimated to 7.

16. Prepare sestbl. (processing paremeters)

cp gt/sestbl. .

Edit sestbl. as necessary for your experiment.

3.2. Part 2: prepare the GAMIT run

1. First, prepare session:

makexp test pgga epgga3.010 2003 010 3 ltest3.010 30 00 00 2880

2. Then, prepare orbit file with partial derivatives:

sh_sp3fit -f igs12005.sp3

sh_check_sess -sess 010 -type gfile -file gpgga3.010

3. Prepare satellite clock files:

makej epgga3.010 jpgga3.010

sh_check_sess -sess 010 -type jfile -file jpgga3.010

4. Convert rinex files to x-files:

makex test.makex.batch > /dev/null

5. Prepare gamit batch file:

fixdrv dtest3.010

3.3. Part 3: run GAMIT (finally…!)

In the foreground:

csh btest3.010

In the background:

csh btest3.010 > /dev/null &

(yes, that’s all…. Well, if all works fine!)

3.4. Part 4: evaluate the quality of the results

There are four criteria for determining if a solution is acceptable:

1.      The uncertainties in the baseline components must have the same magnitude of the a priori constraints applied to station coordinates and orbital parameters

2.      A good solution produces a “normalized rms” (nrms) of about 0.25. Anything larger then 0.5 indicates that there are problems (e.g., cycle slips that have not been removed, bad coordinates of the fixed stations):

grep “Postfit nrms” qtesta.010

3.      The fractional part of the solution (Fract) must be smaller than 10.

4.      The adjustments on the site coordinates (only provided for the two constrained solutions) should be small on the order of a few millimeters

%d bloggers like this: