splitPD0
author A.M. Thurnherr <athurnherr@yahoo.com>
Thu, 07 May 2015 13:09:03 +0000
changeset 23 fb0c269b1eaa
parent 21 splitRDI@0b5bbe60131c
child 36 515b06dae59c
permissions -rwxr-xr-x
V1.2 release candidate
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
21
0b5bbe60131c version sent to P16N
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 18
diff changeset
     5
#                    dlm: Sun Sep 14 17:47:48 2014
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     6
#                    (c) 2010 A.M. Thurnherr
21
0b5bbe60131c version sent to P16N
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 18
diff changeset
     7
#                    uE-Info: 54 0 NIL 0 0 72 2 2 4 NIL ofnI
1
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
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    14
#	Jun 24, 2011: - replaced -b, -n by -o
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    15
#   Feb 13, 2014: - updated doc
18
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    16
#	Mar 19, 2014: - added -s)kip small files
21
0b5bbe60131c version sent to P16N
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 18
diff changeset
    17
#	Sep 14, 2014: - added -f)irst 
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    18
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    19
# NOTES:
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    20
#   - it is assumed that the input file begins with ensemble #1
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    21
#   - turning-point ensembles are written to preceding profile,
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    22
#     for compatibility with [yoyo]
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    23
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    24
# FILE NAME CONVENTION:
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    25
#   - in order to assign individual yoyo casts numerical station numbers,
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    26
#     by default, the yoyo cast number is inserted after the station number
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    27
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    28
# EXAMPLES:
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 7
diff changeset
    29
#   splitRDI 017DL000.000 `mkProfile 017DL000.000 | yoyo -QFens -ut`
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    30
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    31
$0 =~ m{(.*/)[^/]+};
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    32
require "$1RDI_BB_Read.pl";
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    33
use Getopt::Std;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    34
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    35
die("Usage: $0 " .
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    36
	"[-o)ut-file <fmt[e.g. 017%02dDL000.000]>] " .
21
0b5bbe60131c version sent to P16N
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 18
diff changeset
    37
	"[-f)irst <cast #>] " .
18
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    38
	"[require -m)in <ens> to produce output] " .
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    39
	"<RDI file> <ens> <ens[...]>\n")
21
0b5bbe60131c version sent to P16N
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 18
diff changeset
    40
		unless (&getopts('f:o:m:') && @ARGV>=3);
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    41
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    42
$opt_o = substr($ARGV[0],0,3)					# default output filename format
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    43
		 . '%02d'
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    44
		 . substr($ARGV[0],-9)
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    45
			unless defined($opt_o);
18
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    46
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    47
$opt_m = 0 unless defined($opt_m);				# default: produce tiny files as well
7
e06925788055 post IWISE_2011
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 1
diff changeset
    48
	
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    49
readHeader($ARGV[0],\%hdr); shift;				# get length of ensembles
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    50
$ens_len = $hdr{ENSEMBLE_BYTES} + 2;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    51
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    52
$first_ens = $ARGV[0]+1; shift;					# initialize loop
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    53
$last_ens  = $ARGV[0]; shift;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    54
$cnr = 0;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    55
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    56
do {											# split data
18
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    57
	sysseek(WBRF,($first_ens-2)*$ens_len,0) ||	# read next block of data
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    58
		die("$WBRcfn: $!");
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    59
	$last_ens++ unless defined($ARGV[0]);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    60
	$nBytes = ($last_ens-$first_ens+1) * $ens_len;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    61
	sysread(WBRF,$buf,$nBytes) == $nBytes ||
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    62
		die("$WBRcfn: file truncated");
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    63
18
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    64
	if ($last_ens-$first_ens+1 > $opt_m) {		# produce file only if sufficient # of ensembles
21
0b5bbe60131c version sent to P16N
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 18
diff changeset
    65
		$fn = sprintf($opt_o,$opt_f+$cnr++);
18
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    66
		open(F,">$fn") || die("$fn: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    67
		syswrite(F,$buf,$nBytes) == $nBytes ||
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    68
			die("$fn: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    69
		close(F);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    70
	    printf(STDERR "$fn: %d ensembles ($nBytes bytes)\n",$last_ens-$first_ens+1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    71
	}
1
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    72
	
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    73
	$first_ens = $last_ens+1;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    74
	$last_ens  = $ARGV[0]; shift;
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    75
} while defined($last_ens);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    76
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    77
exit(0);
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    78
a3b6a908dec5 after P302 cruise
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    79