RDI_PD0_IO.pl
changeset 52 5b07a9b89aee
parent 51 148c092b3a09
child 55 540d6574caca
--- a/RDI_PD0_IO.pl
+++ b/RDI_PD0_IO.pl
@@ -1,9 +1,9 @@
 #======================================================================
 #                    R D I _ P D 0 _ I O . P L 
 #                    doc: Sat Jan 18 14:54:43 2003
-#                    dlm: Sun Apr 12 20:02:30 2020
+#                    dlm: Tue Apr 14 21:43:23 2020
 #                    (c) 2003 A.M. Thurnherr
-#					 uE-Info: 123 72 NIL 0 0 72 0 2 4 NIL ofnI
+#					 uE-Info: 126 73 NIL 0 0 72 0 2 4 NIL ofnI
 #======================================================================
     
 # Read RDI PD0 binary data files (*.[0-9][0-9][0-9])
@@ -121,7 +121,9 @@
 #	Feb 13, 2020: - added support for $readDataProgress (to Jun 13 version)
 #	Apr 12, 2020: - merged laptop and whoosher versions which both implemented
 #					progreass; not sure whether this merge is successful
-	
+#				  - disabled duplicate ens detection, which turns reading into
+#					O(N^2) process
+#	Apr 14, 2020: - BUG: WBPens did not work for ens# > 65535 (high byte)	
     
 # FIRMWARE VERSIONS:
 #	It appears that different firmware versions generate different file
@@ -831,15 +833,18 @@
 		sysread(WBRF,$buf,1) == 1 || die("$WBRcfn: $!");
 		$ensNo += unpack('C',$buf) << 16;
 
-		for (my($i)=$ens; $i>0; $i--) {											# check for duplicate ens; e.g. 2018 S4P 24UL
-			if (${$E}[$i]->{NUMBER} == $ensNo) {									
-				$RDI_PD0_IO::File_Dirty = 1;
-				print(STDERR "WARNING (RDI_PD0_IO): duplicate ensemble $ensNo skipped\n");
-				pop(@{$E});
-				$ens--;
-				next ENSEMBLE;
-			}
-		}
+##		CODE DISABLED BECAUSE IT TAKES TOO MUCH TIME ON LARGE FILES.
+##		NOT SURE HOW COMMON DUPLICATE ENSEMBLES ARE.		
+##
+##		for (my($i)=$ens; $i>0; $i--) {											# check for duplicate ens; e.g. 2018 S4P 24UL
+##			if (${$E}[$i]->{NUMBER} == $ensNo) {									
+##				$RDI_PD0_IO::File_Dirty = 1;
+##				print(STDERR "WARNING (RDI_PD0_IO): duplicate ensemble $ensNo skipped\n");
+##				pop(@{$E});
+##				$ens--;
+##				next ENSEMBLE;
+##			}
+##		}
 		    
 		${$E}[$ens]->{NUMBER} = $ensNo;
 	    
@@ -1117,8 +1122,8 @@
 	print(STDERR "\n") if ($RDI_PD0_IO::show_progress);
 }
 
-sub WBRdtaIndex($)
-{
+sub WBRdtaIndex($)																# return index of particular data type
+{																				#	where index refers to data sections inside PD0 files
 	my($trgid) = @_;
 	our($ndt,$buf,$id,$start_ens,@WBRofs);
 	
@@ -1250,7 +1255,7 @@
 		sysseek(WBPF,$start_ens+$WBPofs[1]+2,0) || die("$WBPcfn: $!");
 		sysread(WBPF,$buf,2) == 2 || die("$WBPcfn: $!");
 		my($ensNo) = unpack("v",$buf);											# only lower two bytes!!!
-		sysseek(WBPF,$start_ens+$WBPofs[1]+13,0) || die("$WBPcfn: $!");			# jump to high byte
+		sysseek(WBPF,$start_ens+$WBPofs[1]+11,0) || die("$WBPcfn: $!");			# jump to high byte
 		sysread(WBPF,$buf,1) == 1 || die("$WBPcfn: $!");
 		$ensNo += unpack('C',$buf) << 16;
 		die("ensNo = $ensNo (should be $dta->{ENSEMBLE}[$ens]->{NUMBER})\n")