diff --git a/splitRDI b/splitRDI new file mode 100755 --- /dev/null +++ b/splitRDI @@ -0,0 +1,64 @@ +#!/usr/bin/perl +#====================================================================== +# S P L I T R D I +# doc: Sat Aug 21 22:20:27 2010 +# dlm: Sat Aug 21 23:18:41 2010 +# (c) 2010 A.M. Thurnherr +# uE-Info: 51 44 NIL 0 0 72 2 2 4 NIL ofnI +#====================================================================== + +# split RDI files based on list of ensemble numbers (e.g. from yoyo -t) + +# HISTORY: +# Aug 21, 2010: - created + +# NOTES: +# - it is assumed that the input file begins with ensemble #1 +# - input file extension 000 is assumed +# - turning-point ensembles are written to preceding profile, +# for compatibility with [yoyo] + +$0 =~ m{(.*/)[^/]+}; +require "$1RDI_BB_Read.pl"; +use Getopt::Std; + +die("Usage: $0 " . + "[out-file -b)asename ] " . + "[out-file -n) ] " . + " \n") + unless (&getopts('b:n:') && @ARGV>=3); + +chomp($opt_b = `basename $ARGV[0] .000`) # basename + unless defined($opt_b); +$opt_n = 2 # number of digits in profile # + unless defined($opt_n); + +readHeader($ARGV[0],\%hdr); shift; # get length of ensembles +$ens_len = $hdr{ENSEMBLE_BYTES} + 2; + +$first_ens = $ARGV[0]+1; shift; # initialize loop +$last_ens = $ARGV[0]; shift; +$cnr = 0; + +do { # split data + sysseek(WBRF,($first_ens-2)*$ens_len,0) || + die("$WBRcfn: $!"); + $last_ens++ unless defined($ARGV[0]); + $nBytes = ($last_ens-$first_ens+1) * $ens_len; + sysread(WBRF,$buf,$nBytes) == $nBytes || + die("$WBRcfn: file truncated"); + + $fn = $opt_b . sprintf("_%0${opt_n}d.000",$cnr++); + open(F,">$fn") || die("$fn: $!\n"); + syswrite(F,$buf,$nBytes) == $nBytes || + die("$fn: $!\n"); + close(F); + printf(STDERR "$fn: %d ensembles ($nBytes bytes)\n",$last_ens-$first_ens+1); + + $first_ens = $last_ens+1; + $last_ens = $ARGV[0]; shift; +} while defined($last_ens); + +exit(0); + +