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