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

View of /FigKernelScripts/make_genome_dir_for_close.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (download) (as text) (annotate)
Wed Feb 13 18:18:13 2008 UTC (12 years ago) by gdpusch
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, rast_rel_2008_06_16, 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, rast_rel_2008_04_23, 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
Changes since 1.8: +49 -62 lines
Fixed handling of spliced loci. -- /gdp

# -*- perl -*-
########################################################################
# Copyright (c) 2003-2006 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.
########################################################################

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This program merges the assigned functions and aliases from
# an original directory (e.g., from a parsed RefSeq accession)
# into a genome directory produced by "rapid_propagation,"
# to create a final directory that can be imported into the SEED.
# -----------------------------------------------------------------------

use FIG;
use strict;
my $fig = new FIG;

my $usage = "usage: make_genome_dir_for_close OriginalGenomeDir CloseGenomeDir ReadyToGo";

my($origD, $closeD, $okD);
(
 ($origD      = shift @ARGV) && (-d $origD) &&
 ($closeD     = shift @ARGV) && (-d $closeD) &&
 ($okD        = shift @ARGV)
)
    || die $usage;

&FIG::verify_dir($okD);

system "cp -r $closeD/* $okD";
if (-s "$okD/assigned_functions") {
    system "mv $okD/assigned_functions $okD/proposed_functions";
}

my($entry, %valid, %at, %aliases);
if ((-d "$origD/Features") && open(TBL, "cat $origD/Features/*/tbl |"))
{
    while (defined($entry = <TBL>)) {
	chomp $entry;
	my ($fid, $loc, @aliases)   = split /\t/, $entry;
	my ($contig, $beg, $end, $strand) = $fig->boundaries_of($loc);
	if ($contig && $end && $strand)
	{
	    $valid{$fid}   = 1;
	    $at{qq($contig\t$end\t$strand)} = $fid;
	    $aliases{$fid} = join(qq(\t), @aliases);
	}
	else {
	    die "Could not parse TBL entry:\t$entry";
	}
    }
    close(TBL);
}

my(%old_func, %to, %from);

if (open(AF,"<$origD/assigned_functions")) {
    while (defined($entry = <AF>)) {
	if (($entry =~ /^(\S+)\t(\S.*\S)/) && $valid{$1}) {
	    $old_func{$1} = $2;
	}
    }
    close(AF);
}


if (open(TBL,"cat $closeD/Features/*/tbl |")) {
    while (defined($entry = <TBL>)) {
	chomp $entry;
	if ($entry =~ /^(\S+)\t(\S+)/) {
	    my ($fid, $loc) = ($1, $2);
	    my ($contig, $beg, $end, $strand) = $fig->boundaries_of($loc);
	    if ($contig && $end && $strand) {
		if (my $oldP = $at{qq($contig\t$end\t$strand)})	{
		    $to{$oldP}  = $fid;
		    $from{$fid} = $oldP;
		}
	    }
	    else {
		die "Could not parse TBL entry:\t$entry";
	    }
	}
    }
    close(TBL);
}


if (open(ORIG,"<$origD/assigned_functions")) {
    open(NEW,">$okD/assigned_functions") || die "could not open $okD/assigned_functions";
    while (defined($entry = <ORIG>)) {
	if (($entry =~ /^(\S+)\t(\S.*\S)/) && (my $new_fid = $to{$1})) {
	    my $func = $old_func{$1};
	    print NEW "$new_fid\t$func\n";
	}
    }
    close(NEW);
}


if (-s "$okD/Features/peg/tbl") {
    rename("$okD/Features/peg/tbl","$okD/Features/peg/tbl~")
	|| die "could not rename $okD/Features/peg/tbl~";
    
    open(IN,  "<$okD/Features/peg/tbl~") || die "could not open $okD/Features/peg/tbl~";
    open(OUT, ">$okD/Features/peg/tbl")  || die "could not open $okD/Features/peg/tbl";
    
    my($old, $extra);
    while (defined($entry = <IN>)) {
	if ($entry =~ /^(\S+)\t(\S+)/) {
	    my $peg = $1;
	    my $loc = $2;
	    if (($old = $from{$peg}) && ($extra = $aliases{$old})) {
		print OUT "$peg\t$loc\t$extra\n";
	    }
	    else {
		print OUT $entry;
	    }
	}
    }
    close(IN);
    close(OUT);
}

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3