[Bio] / FigKernelScripts / map_to_scaffold.pl Repository:
ViewVC logotype

View of /FigKernelScripts/map_to_scaffold.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (download) (as text) (annotate)
Tue Jun 17 17:25:05 2008 UTC (11 years, 4 months ago) by olson
Branch: MAIN
CVS Tags: mgrast_dev_08112011, rast_rel_2009_05_18, mgrast_dev_08022011, rast_rel_2014_0912, rast_rel_2008_06_18, myrast_rel40, mgrast_dev_05262011, rast_rel_2008_12_18, mgrast_dev_04082011, rast_rel_2008_07_21, rast_rel_2010_0928, rast_2008_0924, mgrast_version_3_2, mgrast_dev_12152011, mgrast_dev_06072011, rast_rel_2008_09_30, rast_rel_2009_0925, rast_rel_2010_0526, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2010_0118, mgrast_rel_2008_0924, mgrast_rel_2008_1110_v2, rast_rel_2009_02_05, rast_rel_2011_0119, mgrast_rel_2008_0625, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, rast_rel_2008_10_09, mgrast_dev_04012011, rast_release_2008_09_29, mgrast_rel_2008_0806, mgrast_rel_2008_0923, mgrast_rel_2008_0919, rast_rel_2009_07_09, rast_rel_2010_0827, mgrast_rel_2008_1110, myrast_33, rast_rel_2011_0928, rast_rel_2008_09_29, mgrast_rel_2008_0917, rast_rel_2008_10_29, mgrast_dev_04052011, mgrast_dev_02222011, rast_rel_2009_03_26, mgrast_dev_10262011, rast_rel_2008_11_24, rast_rel_2008_08_07, HEAD
Changes since 1.3: +4 -1 lines
Actually write out the changed entries.

# -*- perl -*-
########################################################################
# Copyright (c) 2003-2007 University of Chicago and Fellowship
# for Interpretations of Genomes. All Rights Reserved.
#
# This file is part of the SEED Toolkit.
# 
# The SEED Toolkit is free software. You can redistribute
# it and/or modify it under the terms of the SEED Toolkit
# Public License. 
#
# You should have received a copy of the SEED Toolkit Public License
# along with this program; if not write to the University of Chicago
# at info@ci.uchicago.edu or the Fellowship for Interpretation of
# Genomes at veronika@thefig.info or download a copy from
# http://www.theseed.org/LICENSE.TXT.
########################################################################

use strict;
use warnings;

use FIG;
my $fig = FIG->new();


=pod

=head1 map_to_scaffold  scaffold.map OrgDir

=over 5

=item Usage:     map_to_scaffold  scaffold.map OrgDir

=item Function:  Maps feature tbl files from "contig coordinates" back to "scaffold coordinates,"
using the 'scaffold.map' file output by `reformat_contigs -split`.

The tbl files are mapped "in place" for each feature subdirectory of "OrgDir";
each original tbl file "OrgDir/Features/type/tbl" will be backed up to 
"OrgDir/Features/type/tbl~".

=back

=cut

$0 =~ m/([^\/]+)$/;
my $self  = $1;
my $usage = "$self  scaffold_map OrgDir";

if (@ARGV && ($ARGV[0] =~ m/^-{1,2}h(elp)?$/)) {
    die "\n   usage:  $usage\n\n";
}

my ($scaffold_map, $org_dir);
(  ($scaffold_map = shift @ARGV) && (-s $scaffold_map)
&& ($org_dir      = shift @ARGV) && (-d $org_dir)
)  || die "\nInvalid args.\n\n   usage:  $usage\n\n";



#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# ... Load scaffold map ...
#-----------------------------------------------------------------------
open(SCAFFOLD_MAP, "<$scaffold_map") or die "could not open $scaffold_map: $!";

my $old_eof;
($old_eof, $/) = ($/, "\n//\n");

my $record;
my (%is_scaffold, %offset);
while (defined($record = <SCAFFOLD_MAP>))
{
    chomp $record;
    my @lines = split /\n/, $record;
    
    my $scaffold_id = shift @lines;
    $is_scaffold{$scaffold_id} = 1;
    
    if (@lines) {
	foreach my $line (@lines) {
	    my ($contig, $offset) = split /\t/, $line;
	    $offset{$contig}   = $offset;
	}
    }
    else {
	$offset{$scaffold_id} = 0;
    }
}
close(SCAFFOLD_MAP) or die "could not close $scaffold_map: $!";
$/ = $old_eof;


#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# ... Adjust feature coordinates ...
#-----------------------------------------------------------------------
my @features;
opendir(FEATURES, "$org_dir/Features")
    || die "Could not opendir $org_dir/Features: $!";
(@features = grep { !/^\./ } readdir(FEATURES))
    || die "Could not read features from $org_dir/Features";
closedir(FEATURES)
    || die "Could not closedir $org_dir/Features: $!";
print STDERR "Features are: \'", join("\', \'", @features), "\'\n" if $ENV{VERBOSE};

foreach my $feature (@features) {
    my $feature_dir = "$org_dir/Features/$feature";
    print STDERR "Mapping features in $feature_dir\n" if $ENV{VERBOSE};
    
    my $tbl_file    = "$feature_dir/tbl";
    rename($tbl_file, "$tbl_file~") or die "could not rename $tbl_file to $tbl_file~: $!";
    
    open(TBL_IN,  "<$tbl_file~") or die "could not open $tbl_file~: $!";
    open(TBL_OUT, ">$tbl_file")  or die "could not open $tbl_file: $!";
    
    my $line;
    while (defined($line = <TBL_IN>)) {
	chomp $line;
	my ($fid, $locus, @rest) = split /\t/, $line;
	
	my @exons = split /,/, $locus;
	my @new_exons;
	foreach my $exon (@exons) {
	    my ($contig, $beg, $end) = $fig->boundaries_of($exon);

	    unless($is_scaffold{$contig}) {
		if (exists($offset{$contig})) {
		    if (defined($offset{$contig})) {
			if ($contig =~ m/^(\S+)\.\d+$/) {
			    my $scaffold_id = $1;
			    $beg    += $offset{$contig};
			    $end    += $offset{$contig};
			    $exon    = "$scaffold_id\_$beg\_$end";
			}
			else {
			    print STDERR " could not handle $line\n";
			}
		    }
		}
		else {
		    print STDERR "Skipping undefined contig ID $contig in $line\n";
		    next;
		}
	    }
	    push(@new_exons, $exon);
	}
	$locus = join(",",  @new_exons);
	
	if (@rest) {
	    print TBL_OUT join("\t", ($fid, $locus, @rest)), "\n";
	}
	else {
	    print TBL_OUT join("\t", ($fid, $locus)), "\t\n";
	}
    }
    close(TBL_OUT) or die "could not close $tbl_file: $!";
    close(TBL_IN)  or die "could not close $tbl_file~: $!";
}

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3