Parse blast.pl: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
| (One intermediate revision by the same user not shown) | |||
| Line 6: | Line 6: | ||
# -> Parse the Blast output of scaffold mapping | # -> Parse the Blast output of scaffold mapping | ||
# -> Write the results into a seperate folder with each EST | # -> Write the results into a seperate folder with each EST | ||
# -> Write the statistics files (est_scaf_hit.stat, unique_scaf_hit.stat) | |||
# Author : Rajkumar (itc@rajkumar.in) | # Author : Rajkumar (itc@rajkumar.in) | ||
# Release: DEC 2009 | # Release: DEC 2009 | ||
| Line 19: | Line 20: | ||
# Variables | # Variables | ||
my $path | my $path = "/home/raj/bio"; | ||
my $infile | my $infile = "$path/euca/blast/est_scaffold.txt"; | ||
my $tempdir | my $tempdir = "$path/euca/blast/temp"; | ||
my $resdir | my $resdir = "$path/euca/blast/result"; | ||
my $statfile = "$path/euca/blast/blast.stat"; | my $statfile = "$path/euca/blast/est_scaf_hit.stat"; | ||
my $uniquescaf= "$path/euca/blast/unique_scaf_hit.stat"; | |||
my ($i) = $_; | my ($i) = $_; | ||
my (@files,@esthits) = @_; | my (@files,@esthits, @uniquescaf, @uniquescaf_ ) = @_; | ||
# Parsing Functions | # Parsing Functions | ||
| Line 79: | Line 81: | ||
# Filters only the top hit scaffold | # Filters only the top hit scaffold | ||
next if ($scaf_ids[0] ne "$scaf_id"); | next if ($scaf_ids[0] ne "$scaf_id"); | ||
#cutoff if the alignment length is less than 70 | |||
next if ($aln_length < 70); | |||
open (F, ">>".$resdir."/".$file); | open (F, ">>".$resdir."/".$file); | ||
| Line 108: | Line 111: | ||
push(@esthits, "$est_id\t$scaf_id\n"); | push(@esthits, "$est_id\t$scaf_id\n"); | ||
push(@uniquescaf, "$scaf_id\n"); | |||
} | } | ||
} | } | ||
# Writing the EST vs scaffolds | |||
@esthits = sort(@esthits); | @esthits = sort(@esthits); | ||
open (H, ">".$statfile); | open (H, ">".$statfile); | ||
print H "@esthits"; | print H "@esthits"; | ||
close H; | close H; | ||
#Writing the unique scaffold names | |||
my %seen; | |||
@uniquescaf_ = grep !$seen{$_}++, @uniquescaf; | |||
@uniquescaf_ = sort(@uniquescaf_); | |||
open (H1, ">".$uniquescaf); | |||
print H1 "@uniquescaf_"; | |||
close H1; | |||
print "\nDone!\n\n"; | print "\nDone!\n\n"; | ||
Latest revision as of 18:33, 28 December 2009
#! /usr/bin/perl -w
# *************************************************************
# This Programme does the following in sequence
# -> Parse the Blast output of scaffold mapping
# -> Write the results into a seperate folder with each EST
# -> Write the statistics files (est_scaf_hit.stat, unique_scaf_hit.stat)
# Author : Rajkumar (itc@rajkumar.in)
# Release: DEC 2009
# *************************************************************
# Libraries
use strict;
use Bio::Perl;
use Bio::SearchIO;
# At the top: Time Start
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
# Variables
my $path = "/home/raj/bio";
my $infile = "$path/euca/blast/est_scaffold.txt";
my $tempdir = "$path/euca/blast/temp";
my $resdir = "$path/euca/blast/result";
my $statfile = "$path/euca/blast/est_scaf_hit.stat";
my $uniquescaf= "$path/euca/blast/unique_scaf_hit.stat";
my ($i) = $_;
my (@files,@esthits, @uniquescaf, @uniquescaf_ ) = @_;
# Parsing Functions
# Having the required dir
if (-e "$tempdir") {`rm -fr $tempdir`;}
if (! -e "$tempdir") {`mkdir $tempdir`;}
if (-e "$resdir") {`rm -fr $resdir`;}
if (! -e "$resdir") {`mkdir $resdir`;}
# Let's Parse the file to have files written for indiavidual ESTs
foreach my $line (split ("\n", `cat $infile`)) {
next if ($line !~ m/^CL|gi/);
next if ($line =~ m/^#/);
foreach my $tab (split ("\t", $line)) {
next if ($tab !~ m/^CL|gi|sca/);
$tab =~ s/\|/_/g;
if ($tab =~ m/^CL|gi/) {
open (FH, ">>".$tempdir."/".$tab.".gff");
print FH "$line\n";
close FH;
}
}
}
# Work woth the temp file to pick only the top hits with one scaffold
opendir (DIR, "$tempdir") or die $!;
@files = readdir(DIR);
close(DIR);
foreach my $file(@files) {
next if ($file eq "." or $file eq "..");
# Clearing the array
my @scaf_ids = ();
foreach my $line_ (split ("\n", `cat $tempdir/$file`)) {
my ($est_id, $scaf_id) = split(/\t/, $line_);
push(@scaf_ids, "$scaf_id");
# Filters only the top hit scaffold
next if ($scaf_ids[0] ne "$scaf_id");
#cutoff if the alignment length is less than 70
next if ($aln_length < 70);
open (F, ">>".$resdir."/".$file);
print F "$line_\n";
close F;
}
}
# cleaning the temp dir
if (-e "$tempdir") {`rm -fr $tempdir`;}
# Generating statistics
opendir (DIR, "$resdir") or die $!;
@files = readdir(DIR);
close(DIR);
foreach my $file(@files) {
next if ($file eq "." or $file eq "..");
$i = 0;
foreach my $line__ (split ("\n", `cat $resdir/$file`)) {
$i++;
my ($est_id, $scaf_id) = split(/\t/, $line__);
next if ( $i>1 );
push(@esthits, "$est_id\t$scaf_id\n");
push(@uniquescaf, "$scaf_id\n");
}
}
# Writing the EST vs scaffolds
@esthits = sort(@esthits);
open (H, ">".$statfile);
print H "@esthits";
close H;
#Writing the unique scaffold names
my %seen;
@uniquescaf_ = grep !$seen{$_}++, @uniquescaf;
@uniquescaf_ = sort(@uniquescaf_);
open (H1, ">".$uniquescaf);
print H1 "@uniquescaf_";
close H1;
print "\nDone!\n\n";
# At the End: Time Calculation
my ($sec_,$min_,$hour_,$mday_,$mon_,$year_,$wday_,$yday_,$isdst_) = localtime(time);
my $days = $mday_-$mday;
my $hours = $hour_-$hour;
my $mins = $min_-$min;
my $secs = $sec_-$sec;
print "\n------------------------\nDuration: ";
if ($days>0) { print "$days days";}
if ($hours>0) { print ": $hours hours";}
if ($mins>0) { print ": $mins mins";}
if ($secs>0) { print ": $secs secs";}
print "\n------------------------\n";
# END