1 #====================================================================== |
1 #====================================================================== |
2 # R D I _ P D 0 _ I O . P L |
2 # R D I _ P D 0 _ I O . P L |
3 # doc: Sat Jan 18 14:54:43 2003 |
3 # doc: Sat Jan 18 14:54:43 2003 |
4 # dlm: Wed Mar 3 15:02:04 2021 |
4 # dlm: Thu Mar 4 11:23:23 2021 |
5 # (c) 2003 A.M. Thurnherr |
5 # (c) 2003 A.M. Thurnherr |
6 # uE-Info: 1047 82 NIL 0 0 72 2 2 4 NIL ofnI |
6 # uE-Info: 1157 0 NIL 0 0 72 2 2 4 NIL ofnI |
7 #====================================================================== |
7 #====================================================================== |
8 |
8 |
9 # Read RDI PD0 binary data files (*.[0-9][0-9][0-9]) |
9 # Read RDI PD0 binary data files (*.[0-9][0-9][0-9]) |
10 |
10 |
11 # HISTORY: |
11 # HISTORY: |
454 } |
454 } |
455 |
455 |
456 sub WBRhdr($) |
456 sub WBRhdr($) |
457 { |
457 { |
458 my($dta) = @_; |
458 my($dta) = @_; |
459 my($start_ens,$buf,$hid,$did,$Ndt,$B,$W,$i,$dummy,$id,@WBRofs); |
459 my($hid,$did,$B,$W,$i,$dummy); |
|
460 local our($ndt,$buf,$id,$start_ens,@WBRofs); |
460 my($B1,$B2,$B3,$B4,$B5,$B6,$B7,$W1,$W2,$W3,$W4,$W5); |
461 my($B1,$B2,$B3,$B4,$B5,$B6,$B7,$W1,$W2,$W3,$W4,$W5); |
461 my($BT_dt); |
|
462 |
462 |
463 #-------------------- |
463 #-------------------- |
464 # HEADER |
464 # HEADER |
465 #-------------------- |
465 #-------------------- |
466 |
466 |
473 sysread(WBRF,$buf,6) == 6 || return undef; |
473 sysread(WBRF,$buf,6) == 6 || return undef; |
474 ($hid,$did,$dta->{ENSEMBLE_BYTES},$dummy,$dta->{NUMBER_OF_DATA_TYPES}) |
474 ($hid,$did,$dta->{ENSEMBLE_BYTES},$dummy,$dta->{NUMBER_OF_DATA_TYPES}) |
475 = unpack('CCvCC',$buf); |
475 = unpack('CCvCC',$buf); |
476 $hid == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header (hid)",$hid,0)); |
476 $hid == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header (hid)",$hid,0)); |
477 $did == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header (did)",$did,0)); |
477 $did == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header (did)",$did,0)); |
|
478 $ndt = $dta->{NUMBER_OF_DATA_TYPES}; |
478 |
479 |
479 $start_ens = sysseek(WBRF,$dta->{ENSEMBLE_BYTES}-6+2,1) || return undef; |
480 $start_ens = sysseek(WBRF,$dta->{ENSEMBLE_BYTES}-6+2,1) || return undef; |
480 sysread(WBRF,$buf,6) == 6 || return undef; |
481 sysread(WBRF,$buf,6) == 6 || return undef; |
481 ($hid,$did,$dta->{ENSEMBLE_BYTES},$dummy,$dta->{NUMBER_OF_DATA_TYPES}) |
482 ($hid,$did,$dta->{ENSEMBLE_BYTES},$dummy,$dta->{NUMBER_OF_DATA_TYPES}) |
482 = unpack('CCvCC',$buf); |
483 = unpack('CCvCC',$buf); |
494 |
495 |
495 sysread(WBRF,$buf,2*$dta->{NUMBER_OF_DATA_TYPES}) |
496 sysread(WBRF,$buf,2*$dta->{NUMBER_OF_DATA_TYPES}) |
496 == 2*$dta->{NUMBER_OF_DATA_TYPES} |
497 == 2*$dta->{NUMBER_OF_DATA_TYPES} |
497 || die("$WBRcfn: $!"); |
498 || die("$WBRcfn: $!"); |
498 @WBRofs = unpack("v$dta->{NUMBER_OF_DATA_TYPES}",$buf); |
499 @WBRofs = unpack("v$dta->{NUMBER_OF_DATA_TYPES}",$buf); |
|
500 |
499 # for ($i=0; $i<$dta->{NUMBER_OF_DATA_TYPES}; $i++) { |
501 # for ($i=0; $i<$dta->{NUMBER_OF_DATA_TYPES}; $i++) { |
500 # printf(STDERR "WBRofs[$i] = %d",$WBRofs[$i]); |
502 # printf(STDERR "WBRofs[$i] = %d\n",$WBRofs[$i]); |
501 # } |
503 # } |
502 |
|
503 |
504 |
504 $dta->{HEADER_BYTES} = $WBRofs[0]; |
505 $dta->{HEADER_BYTES} = $WBRofs[0]; |
505 $dta->{FIXED_LEADER_BYTES} = $WBRofs[1] - $WBRofs[0]; |
506 $dta->{FIXED_LEADER_BYTES} = $WBRofs[1] - $WBRofs[0]; |
506 $dta->{VARIABLE_LEADER_BYTES} = $WBRofs[2] - $WBRofs[1]; |
507 $dta->{VARIABLE_LEADER_BYTES} = $WBRofs[2] - $WBRofs[1]; |
507 |
508 |
654 |
659 |
655 #----------------------- |
660 #----------------------- |
656 # 1st ENSEMBLE, BT Setup |
661 # 1st ENSEMBLE, BT Setup |
657 #----------------------- |
662 #----------------------- |
658 |
663 |
659 # CODE DISABLED BECAUSE BT_PRESENT FLAG WAS REMOVED. WITHOUT THIS CODE, |
664 if ($dta->{BT_PRESENT}) { |
660 # [listHdr] DOES NOT LIST ANY BT INFO |
665 sysseek(WBRF,$start_ens+$WBRofs[$BT_dt],0) || die("$WBRcfn: $!"); |
661 # |
666 sysread(WBRF,$buf,12) == 12 || die("$WBRcfn: $!"); |
662 # if ($dta->{BT_PRESENT}) { |
667 ($id,$dta->{BT_PINGS_PER_ENSEMBLE},$dta->{BT_DELAY_BEFORE_REACQUIRE}, |
663 # sysseek(WBRF,$start_ens+$WBRofs[$BT_dt],0) || die("$WBRcfn: $!"); |
668 $dta->{BT_MIN_CORRELATION},$dta->{BT_MIN_EVAL_AMPLITUDE}, |
664 # sysread(WBRF,$buf,12) == 12 || die("$WBRcfn: $!"); |
669 $dta->{BT_MIN_PERCENT_GOOD},$dta->{BT_MODE}, |
665 # ($id,$dta->{BT_PINGS_PER_ENSEMBLE},$dta->{BT_DELAY_BEFORE_REACQUIRE}, |
670 $dta->{BT_MAX_ERROR_VELOCITY}) = unpack('vvvCCCCv',$buf); |
666 # $dta->{BT_MIN_CORRELATION},$dta->{BT_MIN_EVAL_AMPLITUDE}, |
671 |
667 # $dta->{BT_MIN_PERCENT_GOOD},$dta->{BT_MODE}, |
672 $id == 0x0600 || |
668 # $dta->{BT_MAX_ERROR_VELOCITY}) = unpack('vvvCCCCv',$buf); |
673 printf(STDERR $FmtErr."\n",$WBRcfn,"Bottom Track",$id,0,tell(WBRF)); |
669 # |
674 |
670 # $id == 0x0600 || |
675 $dta->{BT_MAX_ERROR_VELOCITY} = |
671 # printf(STDERR $FmtErr."\n",$WBRcfn,"Bottom Track",$id,0,tell(WBRF)); |
676 $dta->{BT_MAX_ERROR_VELOCITY} ? $dta->{BT_MAX_ERROR_VELOCITY} / 1000 |
672 # |
677 : undef; |
673 # $dta->{BT_MAX_ERROR_VELOCITY} = |
678 |
674 # $dta->{BT_MAX_ERROR_VELOCITY} ? $dta->{BT_MAX_ERROR_VELOCITY} / 1000 |
679 sysseek(WBRF,28,1) || die("$WBRcfn: $!"); |
675 # : undef; |
680 sysread(WBRF,$buf,6) == 6 || die("$WBRcfn: $!"); |
676 # |
681 ($dta->{BT_RL_MIN_SIZE},$dta->{BT_RL_NEAR},$dta->{BT_RL_FAR}) |
677 # sysseek(WBRF,28,1) || die("$WBRcfn: $!"); |
682 = unpack('vvv',$buf); |
678 # sysread(WBRF,$buf,6) == 6 || die("$WBRcfn: $!"); |
683 |
679 # ($dta->{BT_RL_MIN_SIZE},$dta->{BT_RL_NEAR},$dta->{BT_RL_FAR}) |
684 $dta->{BT_RL_MIN_SIZE} /= 10; |
680 # = unpack('vvv',$buf); |
685 $dta->{BT_RL_NEAR} /= 10; |
681 # |
686 $dta->{BT_RL_FAR} /= 10; |
682 # $dta->{BT_RL_MIN_SIZE} /= 10; |
687 |
683 # $dta->{BT_RL_NEAR} /= 10; |
688 sysseek(WBRF,20,1) || die("$WBRcfn: $!"); # skip data |
684 # $dta->{BT_RL_FAR} /= 10; |
689 sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
685 # |
690 $dta->{BT_MAX_TRACKING_DEPTH} = unpack('v',$buf) / 10; |
686 # sysseek(WBRF,20,1) || die("$WBRcfn: $!"); # skip data |
691 } |
687 # sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
|
688 # $dta->{BT_MAX_TRACKING_DEPTH} = unpack('v',$buf) / 10; |
|
689 # } |
|
690 |
692 |
691 return $dta; |
693 return $dta; |
692 } |
694 } |
693 |
695 |
694 #---------------------------------------------------------------------- |
696 #---------------------------------------------------------------------- |
1139 sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
1141 sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
1140 $id = unpack('v',$buf); |
1142 $id = unpack('v',$buf); |
1141 return $di if ($id == $trgid); |
1143 return $di if ($id == $trgid); |
1142 } |
1144 } |
1143 return undef; |
1145 return undef; |
|
1146 } |
|
1147 |
|
1148 sub WBRdtaTypes() # return list of data types |
|
1149 { |
|
1150 my(@dt); |
|
1151 our($ndt,$buf,$id,$start_ens,@WBRofs); |
|
1152 |
|
1153 for (my($di)=2; $di<$ndt; $di++) { |
|
1154 sysseek(WBRF,$start_ens+$WBRofs[$di],0) || die("$WBRcfn: $!"); |
|
1155 sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
|
1156 $id = unpack('v',$buf); |
|
1157 if ($id == 0x0000) { push(@dt,'FixedLeader'); } |
|
1158 elsif ($id == 0x0080) { push(@dt,'VariableLeader'); } |
|
1159 elsif ($id == 0x0081) { push(@dt,'VariableLeader'); } # TRDI Ocean Surveyor |
|
1160 elsif ($id == 0x0100) { push(@dt,'VELOCITY'); } |
|
1161 elsif ($id == 0x0200) { push(@dt,'CORRELATION'); } |
|
1162 elsif ($id == 0x0300) { push(@dt,'ECHO_AMPLITUDE'); } |
|
1163 elsif ($id == 0x0400) { push(@dt,'PERCENT_GOOD'); } |
|
1164 elsif ($id == 0x0600) { push(@dt,'BOTTOM_TRACK'); } |
|
1165 else { push(@dt,'Unknown'); } |
|
1166 } |
|
1167 return @dt; |
1144 } |
1168 } |
1145 |
1169 |
1146 #---------------------------------------------------------------------- |
1170 #---------------------------------------------------------------------- |
1147 # writeData(output_file_name,^data) WBPens(nbins,fixed_leader_bytes,^data) |
1171 # writeData(output_file_name,^data) WBPens(nbins,fixed_leader_bytes,^data) |
1148 # - writeData() copies file previously read with readData() to output_file_name |
1172 # - writeData() copies file previously read with readData() to output_file_name |