C @(#) measurement_file 1.23 01/15/97 C Fortran Bianry File - Note that there are no logicals to preserve C compatability accross C different UNIX boxes. I did not make the file random access, since C it is simpiler without random access. The only use of random C access that I can think of might be for a ploting package. Regres C is sequential. C Header Record 1 write(measUnit) noSta , noSat ! # of ground stations, ! # satellites C Header Record 2 write(measUnit) (StaNmn(i), i = 1 , noSta) ! Station Names - Character*8 C Header Record 3 write(measUnit) (SatNmn(i), i = 1 , noSat) !Satellite Names - Character*8 C Header Record 4 write(measUnit) Epoch ! epoch time measurement time = ! Epoch + time - see below ! Double Precision Epoch (GPS sec past J2000) C Header Record 5 write(measUnit) MaxDtyp ! maximum number of data types C Header Record 6 write(measUnit) MaxObs ! maximum number of observations = MAX(NoObserv) C Header Record 7 write(measUnit) DummyInt ! Changed from total number of measurements ! - integer to a dummy integer 8/28/92 C Header Record 8 write(measUnit) (SortStat(i) , i = 1,5) ! Sorting Status ! SortStat(i) = j means that ! the ith field has been sorted ! with jth precendence, by the ! time this file reaches regres ! SortStat(1) = 1 ! SortStat(2) = 3 ! SortStat(3) = 4 ! SortStat(4) = 5 ! SortStat(5) = 2 ! SortStat(i) = 0 if no sorting ! on field i C ********************** Measurements records 9 - (9 + NoMeas - 1) write(measUnit) time ,RecId, TrnId,Dtyp,Mtyp,PhEpoch,sigma, & NoObserv,(observ(i) , i = 1,NoObserv) C for data types LCC (3) and LCP (6) observ(2) = WideLnObs , this is C passed on in the nonpartials list of the regres file for bias fixing. C for data type SCC ( 8) , DORIS Doppler , observ(2) = count interval (secs) C Double Precision time ! time + Epoch = GPS measurement time ! (secs past J2000) C Integer RecId ! StaNm(RecId) = rec. name if Mtyp = 2 ! SatNm(RecId) = rec. name if Mtyp = 3 or 1 C Integer TrnId ! SatNm(TrnId) = Trn. name if Mtyp = 1 or 2 ! StaNm(TrnId) = Trn. name if Mtyp = 3 C Integer Dtyp ! The type ! of data, Current allowed values are: ! 1 = L1C ! 2 = L2C ! 3 = LCC ! 4 = L1P ! 5 = L2P ! 6 = LCP ---- Carrier and P-Code ! are differentiated ! 7 = LPC --- optimally combined ! L1,L2,P1,P2 - not ! implemented yet. ! 8 = SCC, DORIS --- ionospherically ! corrected 2.036125 GHz ! 9 = R2 --- two-way range. ! Note that if the data type is 9, then ! the transmitter ID refers to the ! originator of the signal and the ! receiver ID refers to the participant ! at time T2. ! ! 10 = Azimuth ( radians ) ! 11 = Elevation ( radians ), Az-El ! measurements from a ground receiver only C Integer Mtyp ! Integer indicating the type ! of receiver/transmitter, ! Current allowed values are: ! 1 = SatSat ! 2 = GrnSat ! 3 = SatGrn C Double Precision PhEpoch ! Start time in seconds past Epoch of ! the carrier phase bias. Not used ! for other data types. C Real sigma ! (km) for the current defined observables C Integer NoObserv ! Number of observ for thsi ! data type currently 1 for all ! defined data types C Double Precision observ ! (km) for the current defined observables C The following may appear as part of the observable in some C files. In particular ninja currently writes WideLnObs. C WideLnObs ! (cycles) wide lane observable C BiasApriori ! (km) a priori value of phase bias C BiasSigma ! (km) sigma of phase bias C IonScl_1 ! Ion-removing scaling constant for f1 C IonScl_2 ! Ion-removing scaling constant for f2 c c...DORIS range-rate data type (Dah-Ning Yuan, Jun. 1994) c Double Precision time ! time + Epoch = receiving time for the c ! beginning of a count interval c ! (GPS seconds from J2000) c Double Precision PhEpoch ! time of the first measurement of a tracking c ! pass (same rcv/trn pair) from the epoch. c ! Will be used to break the clock drift and c ! tropospheric scale parameters in prefilter. c Real sigma ! (km/s) for 1-way DORIS range-rate data c Integer noobserv ! number of observables for 1-way DORIS c ! range-rate data type (=11). c double precision rangerate ! doris range-rate data (in km/s) c double precision count_interval !duration of the Doppler count (sec) c double precision Pmmbar ! athmospheric pressure at the station c ! expressed in millibar c double precision TdryK ! dry temperature at the station c ! expressed in Kelvin c double precision Thumid_percent ! humidity percentage at the station c ! expressed in percent (from 0 to 1) c double precision iono_corr ! ionospheric correction (in Km/s) c double precision iono_flag ! ionospheric flag c ! flag = 0.0 (correction included in data) c ! flag = 1.0 (correction not used) c double precision tropo_corr ! tropospheric correction (in Km/s) c double precision tropo_flag ! tropospheric flag c ! flag = 0.0 (correction included in data) c ! flag = 1.0 (correction not used) c double precision phasecenter_corr ! phase center correction (in Km/s) c ! for transmitter and receiver c double precision phasecenter_flag ! phasecenter flag c ! flag = 0.0 (correction included in data) c ! flag = 1.0 (correction not used) c c...Laser range data type (Dah-Ning Yuan, Mar. 1994) c Double Precision time ! time + Epoch = ground receiving time c ! (GPS seconds from J2000) c Double Precision PhEpoch ! Not used c Real sigma ! (km) for 2-way laser range c Integer noobserv ! number of observ for 2-way laser range c ! data type (=9). c Double Precision range ! 2-way range(km) c Double Precision pmb ! pressure(millibar) c Double Precision temp ! tempreature(degree Kelvin) c Double Precision hum ! humidity(percent) c Double Precision wave ! wavelength of laser beam (micrometer) c Double Precision trcorr ! tropospheric correction for 2-way range c ! (km); it should be subtracted from range c ! data. c Double Precision trflag ! tropospheric correction flag c ! =0.0 has been applied to range c ! =1.0 has not been applied to range c Double Precision cmcorr ! center of mass correction for 2-way range c ! (km); it should be added to range data. c Double Precision cmflag ! center of mass correction flag c ! =0.0 has been applied to range c ! =1.0 has not been applied to range c C Before Regres the Measurement records are sorted on at least first 3 fields, C i.e. time,RecId,TrnId so they are time ordered and ordered by rec,trn. C We may also wish to sort on type. cBelow is a FORTRAN code fragment to read a QM file: c -------------------------------------------------------------------- integer n_grn,n_sat,max_dtyp,max_obs,dumInt,sort_stat(5) integer RcvId,TrnId,Dtyp,Mtyp,NoObserv,j character*8 grnnm(max_n_grn),satnm(max_n_sat) double precision Epoch,Ttag,break,observ real sigma c c Header read(MeasUnit)n_grn,n_sat read(MeasUnit)(grnnm(i),i=1,n_grn) read(MeasUnit)(satnm(i),i=1,n_sat) read(MeasUnit)Epoch read(MeasUnit)max_dtyp read(MeasUnit)max_obs read(MeasUnit)dumInt read(MeasUnit)sort_stat c c Body read(MeasUnit, END = 100)Ttag,RcvId,TrnId, + Dtyp,Mtyp,break, + sigma,NoObserv,(observ(j),j=1,min(NoObserv,maxobs)), c -------------------------------------------------------------------- Below is a short excerpt from the beginning of a dump of a QM file: 1 16 DSS10 GPS 8 GPS21 GPS15 GPS14 GPS20 GPS18 GPS19 GPS13 GPS 3 GPS16 GPS 9 GPS24 GPS10 GPS11 GPS17 GPS23 -257256000.00000 10 1 6060 1 3 4 5 2 0. 1 1 1 2 0. 0.0000E+00 1 22769.3898434 0. 1 1 2 2 0. 0.0000E+00 1 22769.3783962 0. 1 1 3 2 0. 0.0000E+00 1 22769.4075377 0. 1 1 4 2 0. 0.4792E-04 1 22769.4249809 0. 1 1 5 2 0. 0.1465E-04 1 22769.4364813 0. 1 1 6 2 0. 0.1241E-03 1 22769.4072044 0. 1 2 1 2 0. 0.0000E+00 1 21264.1878711 0. 1 2 2 2 0. 0.0000E+00 1 21264.1813345 0. 1 2 3 2 0. 0.0000E+00 1 21264.1979749 0. 1 2 4 2 0. 0.1460E-04 1 21264.2073816 0. 1 2 5 2 0. 0.2358E-04 1 21264.2139664 0. 1 2 6 2 0. 0.5206E-04 1 21264.1972033 360.00000000 1 1 1 2 0. 0.0000E+00 1 22974.6974149 360.00000000 1 1 2 2 0. 0.0000E+00 1 22974.6854130 360.00000000 1 1 3 2 0. 0.0000E+00 1 22974.7159666 360.00000000 1 1 4 2 0. 0.4199E-04 1 22974.7342523