981 #-------------------- |
983 #-------------------- |
982 |
984 |
983 my($ndata) = $nbins * 4; |
985 my($ndata) = $nbins * 4; |
984 |
986 |
985 my($vel_di) = WBRdtaIndex(0x0100); |
987 my($vel_di) = WBRdtaIndex(0x0100); |
986 die("no velocity data in ensemble #$ensNo\n") |
988 if (defined($vel_di)) { |
987 unless defined($vel_di); |
989 sysseek(WBRF,$start_ens+$WBRofs[$vel_di],0) || die("$WBRcfn: $!"); |
988 |
990 sysread(WBRF,$buf,2+$ndata*2) == 2+$ndata*2 || die("$WBRcfn: $!"); |
989 sysseek(WBRF,$start_ens+$WBRofs[$vel_di],0) || die("$WBRcfn: $!"); |
991 ($id,@dta) = unpack("vv$ndata",$buf); |
990 sysread(WBRF,$buf,2+$ndata*2) == 2+$ndata*2 || die("$WBRcfn: $!"); |
992 |
991 ($id,@dta) = unpack("vv$ndata",$buf); |
993 for ($i=0,$bin=0; $bin<$nbins; $bin++) { |
992 |
994 for ($beam=0; $beam<4; $beam++,$i++) { |
993 for ($i=0,$bin=0; $bin<$nbins; $bin++) { |
995 ${$E}[$ens]->{VELOCITY}[$bin][$beam] = |
994 for ($beam=0; $beam<4; $beam++,$i++) { |
996 unpack('s',pack('S',$dta[$i])) / 1000 |
995 ${$E}[$ens]->{VELOCITY}[$bin][$beam] = |
997 if ($dta[$i] != 0x8000); |
996 unpack('s',pack('S',$dta[$i])) / 1000 |
998 } |
997 if ($dta[$i] != 0x8000); |
999 } |
998 } |
1000 } else { |
999 } |
1001 # die("no velocity data in ensemble #$ensNo\n"); |
|
1002 print(STDERR "WARNING: no velocity data in ensemble #$ensNo\n"); |
|
1003 } |
1000 |
1004 |
1001 #-------------------- |
1005 #-------------------- |
1002 # Correlation Data |
1006 # Correlation Data |
1003 #-------------------- |
1007 #-------------------- |
1004 |
1008 |
1005 my($corr_di) = WBRdtaIndex(0x0200); |
1009 my($corr_di) = WBRdtaIndex(0x0200); |
1006 die("no correlation data in ensemble #$ensNo\n") |
1010 if (defined($corr_di)) { |
1007 unless defined($corr_di); |
1011 sysseek(WBRF,$start_ens+$WBRofs[$corr_di],0) || die("$WBRcfn: $!"); |
1008 |
1012 sysread(WBRF,$buf,2+$ndata) == 2+$ndata || die("$WBRcfn: $!"); |
1009 sysseek(WBRF,$start_ens+$WBRofs[$corr_di],0) || die("$WBRcfn: $!"); |
1013 ($id,@dta) = unpack("vC$ndata",$buf); |
1010 sysread(WBRF,$buf,2+$ndata) == 2+$ndata || die("$WBRcfn: $!"); |
1014 |
1011 ($id,@dta) = unpack("vC$ndata",$buf); |
1015 for ($i=0,$bin=0; $bin<$nbins; $bin++) { |
1012 |
1016 for ($beam=0; $beam<4; $beam++,$i++) { |
1013 for ($i=0,$bin=0; $bin<$nbins; $bin++) { |
1017 ${$E}[$ens]->{CORRELATION}[$bin][$beam] = $dta[$i] |
1014 for ($beam=0; $beam<4; $beam++,$i++) { |
1018 if ($dta[$i]); |
1015 ${$E}[$ens]->{CORRELATION}[$bin][$beam] = $dta[$i] |
1019 } |
1016 if ($dta[$i]); |
1020 } |
1017 } |
1021 } else { |
1018 } |
1022 # die("no correlation data in ensemble #$ensNo\n") |
|
1023 print(STDERR "WARNING: no correlation data in ensemble #$ensNo\n") |
|
1024 } |
1019 |
1025 |
1020 #-------------------- |
1026 #-------------------- |
1021 # Echo Intensity Data |
1027 # Echo Intensity Data |
1022 #-------------------- |
1028 #-------------------- |
1023 |
1029 |
1024 my($echo_di) = WBRdtaIndex(0x0300); |
1030 my($echo_di) = WBRdtaIndex(0x0300); |
1025 die("no echo intensity data in ensemble #$ensNo\n") |
1031 if (defined($echo_di)) { |
1026 unless defined($echo_di); |
1032 sysseek(WBRF,$start_ens+$WBRofs[$echo_di],0) || die("$WBRcfn: $!"); |
1027 |
1033 sysread(WBRF,$buf,2+$ndata) == 2+$ndata || die("$WBRcfn: $!"); |
1028 sysseek(WBRF,$start_ens+$WBRofs[$echo_di],0) || die("$WBRcfn: $!"); |
1034 ($id,@dta) = unpack("vC$ndata",$buf); |
1029 sysread(WBRF,$buf,2+$ndata) == 2+$ndata || die("$WBRcfn: $!"); |
1035 |
1030 ($id,@dta) = unpack("vC$ndata",$buf); |
1036 $id == 0x0300 || |
1031 |
1037 die(sprintf($FmtErr,$WBRcfn,"Echo Intensity",$id,$ensNo)); |
1032 $id == 0x0300 || |
1038 |
1033 die(sprintf($FmtErr,$WBRcfn,"Echo Intensity",$id,$ensNo)); |
1039 for ($i=0,$bin=0; $bin<$nbins; $bin++) { |
1034 |
1040 for ($beam=0; $beam<4; $beam++,$i++) { |
1035 for ($i=0,$bin=0; $bin<$nbins; $bin++) { |
1041 ${$E}[$ens]->{ECHO_AMPLITUDE}[$bin][$beam] = $dta[$i]; |
1036 for ($beam=0; $beam<4; $beam++,$i++) { |
1042 } |
1037 ${$E}[$ens]->{ECHO_AMPLITUDE}[$bin][$beam] = $dta[$i]; |
1043 } |
1038 } |
1044 } else { |
|
1045 # die("no echo intensity data in ensemble #$ensNo\n"); |
|
1046 print(STDERR "WARNING: no echo intensity data in ensemble #$ensNo\n"); |
1039 } |
1047 } |
1040 |
1048 |
1041 #-------------------- |
1049 #-------------------- |
1042 # Percent Good Data |
1050 # Percent Good Data |
1043 #-------------------- |
1051 #-------------------- |
1143 sub WBRdtaIndex($) # return index of particular data type |
1151 sub WBRdtaIndex($) # return index of particular data type |
1144 { # where index refers to data sections inside PD0 files |
1152 { # where index refers to data sections inside PD0 files |
1145 my($trgid) = @_; |
1153 my($trgid) = @_; |
1146 our($ndt,$buf,$id,$start_ens,@WBRofs); |
1154 our($ndt,$buf,$id,$start_ens,@WBRofs); |
1147 |
1155 |
|
1156 # printf(STDERR "WBRdtaIndex(%04X)\n",$trgid); |
1148 for (my($di)=2; $di<$ndt; $di++) { |
1157 for (my($di)=2; $di<$ndt; $di++) { |
1149 sysseek(WBRF,$start_ens+$WBRofs[$di],0) || die("$WBRcfn: $!"); |
1158 sysseek(WBRF,$start_ens+$WBRofs[$di],0) || die("$WBRcfn: $!"); |
1150 sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
1159 sysread(WBRF,$buf,2) == 2 || die("$WBRcfn: $!"); |
1151 $id = unpack('v',$buf); |
1160 $id = unpack('v',$buf); |
|
1161 # printf(STDERR "\tid = %04X\n",$id); |
1152 return $di if ($id == $trgid); |
1162 return $di if ($id == $trgid); |
1153 } |
1163 } |
1154 return undef; |
1164 return undef; |
1155 } |
1165 } |
1156 |
1166 |