in reply to Re: Hash_of_Hash_Would do it?
in thread Hash_of_Hash_Would do it?

You would replace
if (++$pos_count != $current[2]) { for my $pos ($pos_count .. $current[2]-1) { print join("\t", $current[1], $pos, '','', '1'), "\n"; } }

with

if (++$pos_count != $current[2]) { fill_interval($pos_count, @current); }

where fill_interval() is defined as

sub fill_interval { my ($pos_count, @current) = @_; my $margin = 8; if ($current[2] - $pos_count <= 2*$margin) { for my $pos ($pos_count .. $current[2]-1) { print join("\t", $current[1], $pos, '','', '1'), "\n"; } } else { my @bool; my ($start, $end) = ($pos_count, $current[2]-1); for my $i (0..$margin-1) { @bool[ $start + $i, $end - $i ] = (1,1); } for my $pos ($pos_count .. $current[2]-1) { print join("\t", $current[1], $pos, '','', $bool[$pos] || +0), "\n"; } } }

Update: Changed literal values to $margin.

Replies are listed 'Best First'.
Re^3: Hash_of_Hash_Would do it?
by sesemin (Beadle) on Sep 18, 2008 at 23:13 UTC
    Thank you very much Chris, It is perfect now. A+++