Multifasta-fastas

From RAJ INFO
Revision as of 16:08, 4 January 2010 by Raj (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
#! /usr/bin/perl -w
# *************************************************************
# This Programme does the following in sequence
# -> Parses a multi fasta
# -> Write them as individual files
# Author: Rajkumar (itc@rajkumar.in)

# *************************************************************

# Libraries
	use strict;
	use Bio::Perl;
	use Bio::SeqIO;

# At the top: Time Start
	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

# Variables
	my $path = "/home/raj/bio";
	my $resdir = "$path/tobacco/mapping/gt/result/singlet";
	my $multifasta  = "$path/tobacco/data/singlet.fa";
	
	my ($i, $total)   = $_;

# Fetching the total number of Fasta sequences
	$total = `grep -c ">" $multifasta`;
	$total =~ s/\n//g;	

# making several Fasta files of GDNA
	
	my $in  = Bio::SeqIO->new(-file => "$multifasta", -format => 'Fasta');
	my $identifier;
	my $sequence;
	
	$i = 0;
	while ( my $seq = $in->next_seq() ) {
		$identifier = $seq->id;
  		$sequence = $seq->seq;
		
		my ($fasta) = $_;
		$fasta = ">$identifier\n$sequence\n";
		++$i;
		if ($i < 100000){
			if (! -e "$resdir/1") {`mkdir $resdir/1`;}
			open (FASTA, ">".$resdir."/1/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}
		
		if ( $i > 100000 && $i < 200000 ){
			if (! -e "$resdir/2") {`mkdir $resdir/2`;}
			open (FASTA, ">".$resdir."/2/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}
			
		if ( $i > 200000 && $i < 300000 ){
			if (! -e "$resdir/3") {`mkdir $resdir/3`;}
			open (FASTA, ">".$resdir."/3/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}

		if ( $i > 300000 && $i < 400000 ){
			if (! -e "$resdir/4") {`mkdir $resdir/4`;}
			open (FASTA, ">".$resdir."/4/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}

		if ( $i > 400000 && $i < 500000 ){
			if (! -e "$resdir/5") {`mkdir $resdir/5`;}
			open (FASTA, ">".$resdir."/5/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}

		if ( $i > 500000 && $i < 600000 ){
			if (! -e "$resdir/6") {`mkdir $resdir/6`;}
			open (FASTA, ">".$resdir."/6/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}

		if ( $i > 600000 && $i < 700000 ){
			if (! -e "$resdir/7") {`mkdir $resdir/7`;}
			open (FASTA, ">".$resdir."/7/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}

		if ( $i > 700000 && $i < 800000 ){
			if (! -e "$resdir/8") {`mkdir $resdir/8`;}
			open (FASTA, ">".$resdir."/8/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}
		
		if ( $i > 800000 ){
			if (! -e "$resdir/9") {`mkdir $resdir/9`;}
			open (FASTA, ">".$resdir."/9/".$identifier.".fa");
			print FASTA $fasta;
			close FASTA;
		}


		my $math = $total-$i;

		print "\r\tYa. Written $identifier. Still $math to go..";

	}

	print "\t\nYES MAN.. All Done.\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