ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/gclib/scripts/wigfix2bin.pl
Revision: 24
Committed: Tue Jul 26 21:46:39 2011 UTC (13 years, 1 month ago) by gpertea
File size: 1521 byte(s)
Log Message:
Line User Rev File contents
1 gpertea 23 #!/usr/bin/perl
2     use strict;
3     my $usage=q/Usage:
4     wigfix2bin.pl <wigFixstream>
5     Converts wigFix to a fixed binary format:
6    
7     bytes 00-08 : 'WIGB'<32bit-start-offset>
8     bytes 09... : 2-byte int = value*1000 for each base
9    
10     /;
11     $_=<STDIN>;
12     die("Error: wigFix header not recognized!\n")
13     unless (m/^fixedStep\s/);
14     my ($chr, $cpos)=(m/chrom=(\S+)\s+start=(\d+)/);
15     die("Error: wigFix header not recognized!\n") unless $chr && $cpos;
16    
17     open(BIN, ">$chr.wigfixbin") || die("Error creating file $chr.wigfixbin!\n");
18     binmode(BIN);
19     print STDERR "Writing $chr.wigfixbin ..\n";
20     print BIN "WIGB";
21     print BIN pack('I', $cpos);
22     while (<STDIN>) {
23     if (m/start=(\d+)/) {
24     my $skipto=$1;
25     my $skiplen=$skipto-$cpos;
26     for (my $i=0;$i<$skiplen;$i++) {
27     print BIN pack('s',0);
28     }
29     $cpos=$skipto;
30     next;
31     }
32     my ($v)=(m/^([\d\.\-]+)$/);
33     die("Error parsing value for line $. : $_\n") unless length($v)>0;
34     my $n=int($v*1000);
35     if ($n>32767 || $n<-32767) {
36     die("Error: value out of range ($n)!\n");
37     }
38     print BIN pack('s',$n);
39     $cpos++;
40     }
41     close(BIN);
42     print STDERR " ..done.\n";
43     #print STDERR "Waiting for 4s..\n";
44     #sleep(4);
45     #print STDERR "Now reading data back..\n";
46    
47     # read back (testing):
48     # open(BIN, "$chr.wigfixbin");
49     # my ($tag, $r);
50     # read(BIN, $tag, 4);
51     # read(BIN, $r, 4);
52     # my @v=unpack('I',$r);
53     # print STDERR "Header tag=$tag, offset=$v[0]\n";
54     # while (read(BIN,$r,2)==2) {
55     # @v=unpack('s',$r);
56     # my $n=sprintf('%.3f', $v[0]/1000);
57     # print STDERR "read value: $n\n";
58     # }
59     # close(BIN);

Properties

Name Value
svn:executable *