||
帮铁四院的大佬计算一批数据,发现如下问题:
makex jiny.makex.batch
运行正常结束,生成了所有测站文件对应的x-文件,但是自己的测站的数据内容都是空的,IGS站生成的x-文件却是有观测值内容的.情况如下截图:
上面看上去,观测数据都是空的,IGS站的x-文件如下:
解决思路:
1.首先想到的是最可能观测文件o-file存在问题;
打开头文件查看,观测值类型:
6 C1 C2 L1 L2 P1 P2 # / TYPES OF OBSERV
上面显示具有双频观测值(C1/C2),但是查看下面的观测数据缺失C2(也缺失P2),感觉是因为这个原因造成的;
2.仔细查看其他观测文件,特别是BJFS的数据
观测值也只存在C1,没有C2,但是存在P2观测值
3.为了证实,gamit双频必须需要C2或者P2观测值
做一个实验,利用TEQC将BJFS的观察值P2去掉,看看是否还能生成正常的x-file
teqc -O.obs L1+L2+C1+P1+S1+S2 bjfs0451.22o > bjfs0450.22o
再次运行makex,
STATUS :220313:2145:14.0 MAKEX/makex: **Begin processing: BJFS 2022 45
WARNING:220313:2145:14.0 MAKEX/makex: **Begin processing: BJFS 2022 45
STATUS :220313:2145:14.0 MAKEX/openf: Opened: session.info
STATUS :220313:2145:14.0 MAKEX/openf: Opened: lfile.
STATUS :220313:2145:14.0 MAKEX/openf: Opened: station.info
STATUS :220313:2145:14.0 MAKEX/openf: Opened: jbrdc2.045
STATUS :220313:2145:14.0 MAKEX/openf: Opened: kbjfs2.045
STATUS :220313:2145:14.0 MAKEX/openf: Opened: brdc0450.22n
STATUS :220313:2145:14.0 MAKEX/openf: Opened: hi.dat
STATUS :220313:2145:14.0 MAKEX/makex: Epochs 2880 X-file interval 30 Length of session (hrs) 24.0
STATUS :220313:2145:14.0 MAKEX/get_rxfiles: Searching for data in ./bjfs0450.22o
STATUS :220313:2145:14.0 MAKEX/openf: Opened: xbjfs2.045
STATUS :220313:2145:14.0 MAKEX/openf: Opened: ./bjfs0450.22o
WARNING:220313:2145:14.0 MAKEX/settyp: No L2 pseudorange: codeless tracking
WARNING:220313:2145:14.0 MAKEX/settyp: No P-code but nwave2=1; reset nwave2 = 2
很不幸,BJFS的x-file依然有观测数据
32 SATELLITES PRN 4 DATA TYPES: 1 2 3 0 L1 L2 P1
好吧,来个猛的
teqc -O.obs L1+L2+P1+S1+S2 bjfs0451.22o > bjfs0450.22o
makex运行后如下,
每个EPOCH都没有具体的数据,由此可以证实,gamit必须得有一个伪距观测值.
4.仔细对比makex处理文件的输出信息,发现如下:
x-file文件不正常的都有:End of file encountered in reading RINEX input file.
x-file文件正常的都是:Wrote all the epochs requested
STATUS :220313:2154:38.0 MAKEX/makex: TRM 5.20: accept data within +-1.000s of nominal epochs
STATUS :220313:2154:39.0 MAKEX/makex: End of file encountered in reading RINEX input file.
STATUS :220313:2154:39.0 MAKEX/makex: 10931 observations written to xfile 33 observations rejected as unreasonable
STATUS :220313:2154:39.0 MAKEX/makex: End processing: CP1C 2022 45 1
...
STATUS :220313:2154:35.0 MAKEX/makex: TRM 4.80: accept data within +-1.000s of nominal epochs
STATUS :220313:2154:36.0 MAKEX/makex: Wrote all the epochs requested
STATUS :220313:2154:36.0 MAKEX/makex: 24534 observations written to xfile 661 observations rejected as unreasonable
STATUS :220313:2154:36.0 MAKEX/makex: End processing: BJFS 2022 45 1
打开/opt/gamit10.71/gamit/makex/makex.f文件查看一下
上面这段代码从注释和具体逻辑可以看出,fend(表示文件结束的bool类型)
fend定义和赋值如下:
logical fend,ferr,newfile,ant_event,ircint_msg
在rrinex里面进行赋值,具体遇到什么结束符号,导致读取o-file错误?
打开/opt/gamit10.71/gamit/lib/rrinex.f,fend定义,赋值false和true
76 c value set to .true. at end of file
77 logical fend
...
196 fend = .false.
查找所有goto 4000的行(以及上下几行)语句:
sudo grep -rn -C 3 'goto 4000' /opt/gamit10.71/gamit/lib/rrinex.f
找出如下几种可能的原因,只能一个个去o-file观测文件中查找排除了.
Five cases:
1. Error on read: increment the error count error read the next line
2. Error decoding epoch line: increment the error count and read the next line
3. Good epoch line but number records (SVs) exceeds channels: Exit the program
4. Good epoch line but with event flag set: read the event info and then the SV lines
5. Normal epoch line: decode and exit After any read error, call rxerr (at the end of this file) to count the errors and print out the line; after 100, stop the run.
375- call rxerr(urinex,line,ioerr,nerr)
376- if(debug) write(*,*) 'Error decoding epoch line',ioerr
377- if( ioerr.eq.-1 ) then
378: goto 4000
379- else
380- goto 100
381- endif
--
397- call rxerr (urinex,line,ioerr,nerr)
398- if(debug) write(*,*) 'Error on SV ID line ioerr ',ioerr
399- if( ioerr.eq.-1 ) then
400: goto 4000
401- else
402- goto 100
403- endif
--
407- if( ioerr.ne.0 ) then
408- call rxerr(urinex,line,ioerr,nerr)
409- if( ioerr.eq.-1 ) then
410: goto 4000
411- else
412- goto 100
413- endif
--
310-c RINEX 2
311- do i=1,nprn
312-c here nprn indicates number of event records, not SVs
313: read( urinex,iostat=ioerr,end=4000,fmt='(a80)') line
314- call report_stat('WARNING',prog_name,'lib/rrinex',' '
315- . ,line,0)
316- if (line(61:80) .eq. 'ANTENNA: DELTA H/E/N') then
--
473-c read and decode the data lines - skip the lines that are not the requested GNSS
474- nprnx = 0
475- do i=1,nprn
476: read(urinex,'(a)',iostat=ioerr,end=4000) line
477-cd print *,'read line ioerr ',ioerr,line
478- if(ioerr.ne.0 )
479- . call report_stat('FATAL',prog_name,'lib/rrinex',' '
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 14:18
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社