example6.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 """
3 An example of generating new rinex file (both v2,11 and v3.02.
4 First an existing v2.11 file is read in just so we don't have
5 to make up all the data that goes into the new files.
6 """
7 
8 import gnsstk
9 
10 ifn = gnsstk.getPathData() + '/test_input_rinex2_obs_RinexObsFile.06o'
11 header, data = gnsstk.readRinex3Obs(ifn, strict=True)
12 
13 new_header = gnsstk.Rinex3ObsHeader()
14 
15 new_header.fileType = header.fileType
16 
17 new_header.fileProgram = header.fileProgram
18 new_header.date = header.date
19 new_header.fileAgency = header.fileAgency
20 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validRunBy
21 
22 new_header.markerName = header.markerName
23 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validMarkerName
24 
25 new_header.observer = header.observer
26 new_header.agency = header.agency
27 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validObserver
28 
29 new_header.recNo = header.recNo
30 new_header.recType = header.recType
31 new_header.recVers = header.recVers
32 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validReceiver
33 
34 new_header.antNo = header.antNo
35 new_header.antType = header.antType
36 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validAntennaType
37 
38 newAntPosition = gnsstk.Triple(header.antennaPosition[0],header.antennaPosition[1],header.antennaPosition[2])
39 new_header.antennaPosition = newAntPosition
40 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validAntennaPosition
41 
42 newAntDelta = gnsstk.Triple(header.antennaDeltaHEN[0],header.antennaDeltaHEN[1],header.antennaDeltaHEN[2])
43 new_header.antennaDeltaHEN = newAntDelta
44 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validAntennaDeltaHEN
45 
46 for rinObsType in header.mapObsTypes:
47  #print "Found obs-type:{}".format(rinObsType)
48  newObsIds = []
49  for rinObsId in header.mapObsTypes[rinObsType]:
50  #print "Found obs-id:{}".format(str(rinObsId))
51  #print " --type={} code={} band={}".format(rinObsId.type, rinObsId.code, rinObsId.band)
52  newObsId = gnsstk.RinexObsID(str(rinObsId))
53  newObsIds.append(newObsId)
54  new_header.mapObsTypes[rinObsType] = tuple(newObsIds)
55 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validNumObs
56 
57 for rin_obs_id in header.R2ObsTypes:
58  #print "Found obs-id:{}".format(rin_obs_id)
59  new_header.R2ObsTypes.append(rin_obs_id)
60 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validNumObs
61 
62 # This creates a new CivilTime object that we can populate
63 new_header.firstObs = gnsstk.CivilTime()
64 new_header.firstObs.year = header.firstObs.year
65 new_header.firstObs.month = header.firstObs.month
66 new_header.firstObs.day = header.firstObs.day
67 new_header.firstObs.hour = header.firstObs.hour
68 new_header.firstObs.minute = header.firstObs.minute
69 new_header.firstObs.second = header.firstObs.second
70 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validFirstTime
71 
72 new_header.markerNumber = header.markerNumber
73 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validMarkerNumber
74 
75 new_header.interval = header.interval
76 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validInterval
77 
78 
79 for comment in header.commentList:
80  new_header.commentList.append(comment)
81 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validComment
82 new_header.validEoH = True
83 
84 # As of Sep 2016, the following aren't working correctly so force
85 # these to be set. Since the input to this program is RINEX v2.11,
86 # what should happen is that the Rinex3ObsHeader should fill in default values
87 # for the SystemPhaseShift and not require the two glonass since there is no
88 # glonass data in the source
89 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validSystemPhaseShift
90 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validGlonassSlotFreqNo
91 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validGlonassCodPhsBias
92 
93 print new_header
94 
95 new_data = []
96 # Now we loop through all the epochs and process the data for each one
97 for d in data:
98 
99  # This creates a new CommonTime object with the system set to GPS.
100  timec = gnsstk.CommonTime(gnsstk.TimeSystem(gnsstk.TimeSystem.GPS))
101  # This creates a new CommonTime object with the system set to GPS.
102  mjd = int(d.time.getDays())
103  sod = float(d.time.getSecondOfDay())
104  timec.set(mjd, sod, gnsstk.TimeSystem(gnsstk.TimeSystem.GPS))
105 
106  # Assign values to a new Rinex Obs Data object
108  nd.time = timec
109  nd.auxHeader = d.auxHeader
110  nd.clockOffset = d.clockOffset
111  nd.epochFlag= d.epochFlag
112  nd.numSVs = d.numSVs
113 
114  for satkey in d.obs.keys():
115  newSatKey = gnsstk.RinexSatID(satkey.toString())
116  satObss = d.obs[newSatKey]
117  # satObss is a tuple of RinexDatum
118  newSatObss = []
119  for satObs in satObss:
120  #print "{} {} {} {}".format(satkey.toString(), satObs.data, satObs.lli, satObs.ssi)
121  newSatObs = gnsstk.RinexDatum()
122  newSatObs.data = satObs.data
123  newSatObs.lli = satObs.lli
124  newSatObs.ssi = satObs.ssi
125  newSatObss.append(newSatObs)
126 
127  nd.obs[newSatKey] = tuple(newSatObss)
128 
129  #print "O{}".format(d)
130  #print "S{}".format(nd)
131  new_data.append(nd)
132 
133 new_header.version = 3.02
134 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validVersion
135 ofn = "example6_v302.o"
136 gnsstk.writeRinex3Obs(ofn, new_header, new_data)
137 print "Wrote output file: {}".format(ofn)
138 
139 # The following doesn't work because the v2 translation map needs to be filled in from
140 # the v3 translation tables
141 new_header.version = 2.11
142 new_header.valid = new_header.valid | gnsstk.Rinex3ObsHeader.validVersion
143 ofn = "example6_v211.o"
144 gnsstk.writeRinex3Obs(ofn, new_header, new_data)
145 print "Wrote output file: {}".format(ofn)
gnsstk::RinexDatum
Storage for single RINEX OBS data measurements.
Definition: RinexDatum.hpp:55
gnsstk::Rinex3ObsHeader
Definition: Rinex3ObsHeader.hpp:155
gnsstk::Triple
Definition: Triple.hpp:68
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::Rinex3ObsData
Definition: Rinex3ObsData.hpp:75
gnsstk::TimeSystem
TimeSystem
Definition of various time systems.
Definition: TimeSystem.hpp:51
gnsstk::RinexObsID
Definition: RinexObsID.hpp:102
gnsstk::CivilTime
Definition: CivilTime.hpp:55
gnsstk::RinexSatID
Definition: RinexSatID.hpp:63


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39