Bambus 2.0/goBambus-perl
From AMOS WIKI
#!/usr/bin/perl -w ## Very simple perl script to drive the Bambus 2.0 pipeline (as I ## currently understand it). use strict; use Getopt::Long; ## Configure defaults my $verbose = 1; my $contig_file = ''; my $fasta_file = ''; my $mates_file = ''; my $output_prefix = 'out'; ## The threshold used to accept or reject a link between contigs my $link_redundancy = 1; ## Weather or not to run the (crappy) 'repeat filter' code my $filter_repeats = 0; ## Not running dot saves time on 'big' runs my $run_dot = 1; ## Process command line arguments GetOptions ("contig_file=s" => \$contig_file, "fasta_file=s" => \$fasta_file, "mates_file=s" => \$mates_file, "output_prefix=s" => \$output_prefix, "link_redundancy|r=i" => \$link_redundancy, "repeat_filter|x" => \$filter_repeats, "dot|d!" => \$run_dot, "verbose+" => \$verbose, ) or die "failure to communicate\n"; die "-c contig file plz!\n" unless -s $contig_file; die "-f fasta file plz!\n" unless -s $fasta_file; die "-m mates file plz!\n" unless -s $mates_file; die "are you crazy?\n" if $output_prefix eq ''; warn join("\n", "contig file : $contig_file", "fasta file : $fasta_file", "mates file : $mates_file", "output prefix : $output_prefix", "link redundancy : $link_redundancy", "repeat filter : $filter_repeats", "run dot? : $run_dot", "verbose : $verbose", ), "\n" if $verbose > 0; #exit; ## Run the pipeline ## Get data into bank format run(qq/ toAmos -s $fasta_file -c $contig_file -m $mates_file -o $output_prefix.afg /); ## Debugging mates file #exit; run(qq/ bank-transact -cf -m $output_prefix.afg -b $output_prefix.bnk /); ## Run the new Bambus pipeline run(qq/ clk -b $output_prefix.bnk /); run(qq/ Bundler -b $output_prefix.bnk /); ## Repeat filtering? my $filter_repeats_option_string = ''; if($filter_repeats){ run(qq/ MarkRepeats -noCoverageRepeats -b $output_prefix.bnk -redundancy $link_redundancy > $output_prefix.repeats /); $filter_repeats_option_string = "-repeats $output_prefix.repeats"; } run(qq/ OrientContigs -noreduce $filter_repeats_option_string -b $output_prefix.bnk -redundancy $link_redundancy -prefix $output_prefix /); ## Generate some additional TEXT output ## ouput a fasta sequence for the contigs from the bank (passed to ## printScaff with -f) #run(qq/ # bank2fasta -iid # -b $output_prefix.bnk # > $output_prefix.contig.fasta #/); ## Generates the useful .details, .oo, .sum and .stats files # -f $output_prefix.contig.fasta run(qq/ printScaff -detail -oo -sum -e $output_prefix.evidence.xml -s $output_prefix.out.xml -l $output_prefix.library -o $output_prefix /); run(qq/ mv -f printScaff.error $output_prefix.printScaff.error /) if -s 'printScaff.error'; ## UNTANGLE run(qq/ untangle -e $output_prefix.evidence.xml -s $output_prefix.out.xml -o $output_prefix.out.untangle.xml /); run(qq/ mv -f untangle.error $output_prefix.untangle.error /) if -s 'untangle.error'; ## Generates the useful .details, .oo, .sum and .stats files # -f $output_prefix.contig.fasta run(qq/ printScaff -detail -oo -sum -dot -e $output_prefix.evidence.xml -s $output_prefix.out.untangle.xml -l $output_prefix.library -o $output_prefix.untangle /); run(qq/ mv -f printScaff.error $output_prefix.untangle.printScaff.error /) if -s 'printScaff.error'; ## FINALLY, DOT if($run_dot){ # output before untangle run(qq/ dot -Tps $output_prefix.dot > $output_prefix.ps /); # output after untangle run(qq/ dot -Tps $output_prefix.untangle.dot > $output_prefix.untangle.ps /); } warn "OK\n"; ## Yup sub run{ my $cmd = shift; $cmd =~ s/\n/ /g; print "\n\n\nRUN: $cmd\n\n" if $verbose > 0; `$cmd`; die if $? != 0; return 1; }