kkonganti@17: #!/usr/bin/env perl kkonganti@17: kkonganti@17: # Kranti Konganti kkonganti@17: # Takes in a gzipped multi-fasta file kkonganti@17: # and joins contigs by 10 N's kkonganti@17: kkonganti@17: use strict; kkonganti@17: use warnings; kkonganti@17: use Cwd; kkonganti@17: use Bio::SeqIO; kkonganti@17: use Getopt::Long; kkonganti@17: use File::Find; kkonganti@17: use File::Basename; kkonganti@17: use File::Spec::Functions; kkonganti@17: kkonganti@17: my ( $in_dir, $out_dir, $suffix, @uncatted_genomes ); kkonganti@17: kkonganti@17: GetOptions( kkonganti@17: 'in_dir=s' => \$in_dir, kkonganti@17: 'out_dir=s' => \$out_dir, kkonganti@17: 'suffix=s' => \$suffix kkonganti@17: ) or die usage(); kkonganti@17: kkonganti@17: $in_dir = getcwd if ( !defined $in_dir ); kkonganti@17: $out_dir = getcwd if ( !defined $out_dir ); kkonganti@17: $suffix = '_genomic.fna.gz' if ( !defined $suffix ); kkonganti@17: kkonganti@17: find( kkonganti@17: { kkonganti@17: wanted => sub { kkonganti@17: push @uncatted_genomes, $File::Find::name if ( $_ =~ m/$suffix$/ ); kkonganti@17: } kkonganti@17: }, kkonganti@17: $in_dir kkonganti@17: ); kkonganti@17: kkonganti@17: if ( $out_dir ne getcwd && !-d $out_dir ) { kkonganti@17: mkdir $out_dir || die "\nCannot create directory $out_dir: $!\n\n"; kkonganti@17: } kkonganti@17: kkonganti@17: open( my $geno_path, '>genome_paths.txt' ) kkonganti@17: || die "\nCannot open file genome_paths.txt: $!\n\n"; kkonganti@17: kkonganti@17: foreach my $uncatted_genome_path (@uncatted_genomes) { kkonganti@17: my $catted_genome_header = '>' . basename( $uncatted_genome_path, $suffix ); kkonganti@17: $catted_genome_header =~ s/(GC[AF]\_\d+\.\d+)\_*.*/$1/; kkonganti@17: kkonganti@17: my $catted_genome = kkonganti@17: catfile( $out_dir, $catted_genome_header . '_scaffolded' . $suffix ); kkonganti@17: kkonganti@17: $catted_genome =~ s/\/\>(GC[AF])/\/$1/; kkonganti@17: kkonganti@17: print $geno_path "$catted_genome\n"; kkonganti@17: kkonganti@17: open( my $fh, "gunzip -c $uncatted_genome_path |" ) kkonganti@17: || die "\nCannot create pipe for $uncatted_genome_path: $!\n\n"; kkonganti@17: kkonganti@17: open( my $fho, '|-', "gzip -c > $catted_genome" ) kkonganti@17: || die "\nCannot pipe to gzip: $!\n\n"; kkonganti@17: kkonganti@17: my $seq_obj = Bio::SeqIO->new( kkonganti@17: -fh => $fh, kkonganti@17: -format => 'Fasta' kkonganti@17: ); kkonganti@17: kkonganti@17: my $joined_seq = ''; kkonganti@17: while ( my $seq = $seq_obj->next_seq ) { kkonganti@17: $joined_seq = $joined_seq . 'NNNNNNNNNN' . $seq->seq; kkonganti@17: } kkonganti@17: kkonganti@17: $joined_seq =~ s/NNNNNNNNNN$//; kkonganti@17: $joined_seq =~ s/^NNNNNNNNNN//; kkonganti@17: kkonganti@17: # $joined_seq =~ s/.{80}\K/\n/g; kkonganti@17: # $joined_seq =~ s/\n$//; kkonganti@17: print $fho $catted_genome_header, "\n", $joined_seq, "\n"; kkonganti@17: kkonganti@17: $seq_obj->close(); kkonganti@17: close $fh; kkonganti@17: close $fho; kkonganti@17: } kkonganti@17: kkonganti@17: sub usage { kkonganti@17: print kkonganti@17: "\nUsage: $0 [-in IN_DIR] [-ou OUT_DIR] [-su Filename Suffix for Header]\n\n"; kkonganti@17: exit; kkonganti@17: } kkonganti@17: