# HG changeset patch # User simon-gladman # Date 1360109977 18000 # Node ID 28d2dd0f048b1d625af1cef3c3790cb44714b88d # Parent 94dbee11c8a93448cfacf3b8f82eab5fcdd1acbf Uploaded diff -r 94dbee11c8a9 -r 28d2dd0f048b velvet_optimiser_wrapper_vlsci.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/velvet_optimiser_wrapper_vlsci.pl Tue Feb 05 19:19:37 2013 -0500 @@ -0,0 +1,154 @@ +#!/usr/bin/perl + +# velvet_optimiser_vlsci.pl +# +# Copyright 2012 Simon +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# + +use strict; +use warnings; +use File::Copy; + +my @stuff = @ARGV; +my %counts; +my %shortMPs; +my @reads; +my $threadsToUse = 2; #According to Enis, this is the default number of threads that multithreaded programs use.. + +#TO DO! get velvet compile parameters! + +foreach my $param (@stuff){ + if($param =~ m/galaxy\.datatypes/){ + $param =~m/datatypes\..+\.(.+)\s+object/; + my $type = lc($1); + print "$type\n"; + } + else { + print $param . "\n"; + } +} + +#try and split some of it up.. +#kmer stuff +my $sk = shift @stuff; +my $ek = shift @stuff; +my $xk = shift @stuff; + +#TO DO! do checks etc on this stuff here! + +#get the read file stuff +my $i = 0; + +while(!($stuff[0] =~ m/other:/)){ + my $index = shift @stuff; + my $read_type = shift @stuff; + my $sep = shift @stuff; + my $file_type = shift @stuff; + $file_type =~m/datatypes\..+\.(.+)\s+object/; + $file_type = lc($1); + $file_type = "fastq" if $file_type =~ m/fastq/i; + $counts{$read_type} ++; + my $ffile = shift @stuff; + my $rfile = shift @stuff if $sep eq "True"; + my $sMP = shift @stuff; + $reads[$i] = "-$read_type"; + $reads[$i] .= $counts{$read_type} if $counts{$read_type} > 1; + if ($sMP eq "shortMP_lib"){ + my $temp = "-shortMatePaired"; + $temp .= $counts{$read_type} if $counts{$read_type} > 1; + $shortMPs{$temp} = 1; + } + $reads[$i] .= " -$file_type"; + $reads[$i] .= " -separate" if $sep eq "True"; + $reads[$i] .= " $ffile"; + $reads[$i] .= " $rfile" if $sep eq "True"; + $i ++; +} + +#get the other stuff +shift @stuff if $stuff[0] =~ m/other:/; +my $amos = shift @stuff; +my $verbose = shift @stuff; + +#get the advanced stuff if it exists! +my ($oFK, $oFC, $vgO, $minC, $maxC); +if ($stuff[0] =~ m/advanced:/) { + shift @stuff; + $oFK = shift @stuff; + $oFC = shift @stuff; + $vgO = shift @stuff; + $minC = shift @stuff; + $maxC = shift @stuff; +} + +#get the output file names! +my $contigs_outfile = shift @stuff; +my $stats_outfile = shift @stuff; +my $afg_outfile = shift @stuff if $amos eq "amos"; +my $logfile = shift @stuff; +my $stderr = shift @stuff; +my $lgraph = shift @stuff; + +#build the command line... + +my $cmd = "VelvetOptimiser.pl -d temp_vgo_files -s $sk -e $ek -x $xk"; +$cmd .= " -a" if($amos eq "amos"); +$cmd .= " -v" if($verbose eq "verbose"); + +$cmd .= " -f '"; +foreach my $line (@reads){ + $cmd .= " $line"; +} +$cmd .= "'"; + +my $vgopt = $vgO; +foreach my $key(keys %shortMPs){ + $vgopt .= " $key" if $key; +} + +$cmd .= " -o '$vgopt'" if $vgopt; + +$cmd .= " -k $oFK" if $oFK; +$cmd .= " -c $oFC" if $oFC; +$cmd .= " -m $minC" if $minC; +$cmd .= " -z $maxC" if $maxC; +$cmd .= " -t $threadsToUse"; + +$cmd .= " 2> $stderr"; + +print "\n$cmd\n"; + +print "about to run the command!"; + +if(system($cmd) == 0) { + #copy the files to the new places and delete the directory.. + print "Copying output\n"; + copy("temp_vgo_files/contigs.fa", $contigs_outfile); + copy("temp_vgo_files/stats.txt", $stats_outfile); + copy(glob("temp_vgo_files/*Logfile.txt"), $logfile); + copy("temp_vgo_files/velvet_asm.afg", $afg_outfile) if $amos eq "amos"; + copy("temp_vgo_files/LastGraph", $lgraph); + system("rm -rf temp_vgo_files") == 0 or die "Couldn't delete temporary directory. $!"; +} +else { + print "There was a velvet optimiser error\n"; + exit(1); +} + +exit(0);