splitRDI
author A.M. Thurnherr <athurnherr@yahoo.com>
Fri, 17 Jun 2011 13:32:05 -0400
changeset 6 603221e51c6f
parent 1 a3b6a908dec5
child 7 e06925788055
permissions -rwxr-xr-x
pre IWISE
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     1
#!/usr/bin/perl
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     2
#======================================================================
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     3
#                    S P L I T R D I 
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     4
#                    doc: Sat Aug 21 22:20:27 2010
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     5
#                    dlm: Sat Aug 21 23:18:41 2010
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     6
#                    (c) 2010 A.M. Thurnherr
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     7
#                    uE-Info: 51 44 NIL 0 0 72 2 2 4 NIL ofnI
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     8
#======================================================================
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     9
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    10
# split RDI files based on list of ensemble numbers (e.g. from yoyo -t)
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    11
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    12
# HISTORY:
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    13
#	Aug 21, 2010: - created
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    14
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    15
# NOTES:
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    16
#	- it is assumed that the input file begins with ensemble #1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    17
#	- input file extension 000 is assumed
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    18
#	- turning-point ensembles are written to preceding profile,
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    19
#	  for compatibility with [yoyo]
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    20
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    21
$0 =~ m{(.*/)[^/]+};
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    22
require "$1RDI_BB_Read.pl";
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    23
use Getopt::Std;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    24
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    25
die("Usage: $0 " .
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    26
	"[out-file -b)asename <bn>] " .
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    27
	"[out-file -n) <digits>] " .
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    28
	"<RDI file> <ens> <ens[...]>\n")
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    29
		unless (&getopts('b:n:') && @ARGV>=3);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    30
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    31
chomp($opt_b = `basename $ARGV[0] .000`)		# basename
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    32
	unless defined($opt_b);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    33
$opt_n = 2										# number of digits in profile #
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    34
	unless defined($opt_n);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    35
		
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    36
readHeader($ARGV[0],\%hdr); shift;				# get length of ensembles
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    37
$ens_len = $hdr{ENSEMBLE_BYTES} + 2;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    38
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    39
$first_ens = $ARGV[0]+1; shift;					# initialize loop
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    40
$last_ens  = $ARGV[0]; shift;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    41
$cnr = 0;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    42
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    43
do {											# split data
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    44
	sysseek(WBRF,($first_ens-2)*$ens_len,0) ||
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    45
		die("$WBRcfn: $!");
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    46
	$last_ens++ unless defined($ARGV[0]);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    47
	$nBytes = ($last_ens-$first_ens+1) * $ens_len;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    48
	sysread(WBRF,$buf,$nBytes) == $nBytes ||
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    49
		die("$WBRcfn: file truncated");
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    50
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    51
	$fn = $opt_b . sprintf("_%0${opt_n}d.000",$cnr++);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    52
	open(F,">$fn") || die("$fn: $!\n");
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    53
	syswrite(F,$buf,$nBytes) == $nBytes ||
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    54
		die("$fn: $!\n");
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    55
	close(F);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    56
	printf(STDERR "$fn: %d ensembles ($nBytes bytes)\n",$last_ens-$first_ens+1);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    57
	
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    58
	$first_ens = $last_ens+1;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    59
	$last_ens  = $ARGV[0]; shift;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    60
} while defined($last_ens);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    61
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    62
exit(0);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    63
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    64