Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^3: Size of sequences in fastafile

by hippo (Bishop)
on Feb 29, 2020 at 16:51 UTC ( [id://11113580]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Size of sequences in fastafile
in thread Size of sequences in fastafile

It's still not very clear precisely what you expect but here's my final stab at this.

use strict; use warnings; use Test::More tests => 1; # Present this SSCCE as a test my @seq; # Sequences longer than $min are stored here my @want = ( 'GGAGGTCTTTAGCTTTAGGGAAACCC', ); # These are the sequeneces we expect for the given data set my $min = 15; # Minimum length of any sequence to be considered my $this = ''; while (<DATA>) { chomp; if (/^>/) { push @seq, $this if $min <= length $this; $this = ''; } else { $this .= $_; } } push @seq, $this if $min <= length $this; is_deeply \@seq, \@want; # Check that our algorithm has worked __DATA__ >NM_001 Homo sapiens ADA2 (CECR1) GATCCAA >NM_002 Homo sapiens IKBKG GGAGGTCTTTAGCTTTAGGGAAACCC

Replies are listed 'Best First'.
Re^4: Size of sequences in fastafile
by Sofie (Acolyte) on Mar 01, 2020 at 12:03 UTC
    This is my data:
    >NM_030643.4 Homo sapiens apolipoprotein L4 (APOL4) GAGGTGCTGGGGAGCAGCGTGTTTGCTGTGCTTGATTGTGAGCTGCTGGGAAGTTGTGACTTTCATTTTA CCTTTCGAATTCCTGGGTATATCTTGGGGGCTGGAGGACGTGTCTGGTTATTATATAGGTGCACAGCTGG AGGTGAGATCCACACAGCTCAGACCAGCTGGATCTTGCTCAGTCTCTGTCAGAGGAAGATCCCTTGGAGG AGGCCCCGCAGCGACATGGAGGGAGCTGCTTTGCTGAAAATCTTTGTCGTCTGCATCTGGAACCAAAATC >NM_001198855.1 Homo sapiens cytochrome P450 family 2 subfamily C memb +er 8 (CYP2C8) ACATGTCAAAGAGACACACACTAAATTAGCAGGGAGTGTTATAAAAACTTTGGAGTGCAAGCTCACAGCT GTCTTAATAAGAAGAGAAGGCTTCAATGGAACCTTTTGTGGTCCTGGTGCTGTGTCTCTCTTTTATGCTT CTCTTTTCACTCTGGAGACAGAGCTGTAGGAGAAGGAAGCTCCCTCCTGGCCCCACTCCTCTTCCTATTA >NR_029834.1 Homo sapiens microRNA 200a (MIR200A), microRNA CCGGGCCCCTGTGAGCATCTTACCGGACAGTGCTGGATTTCCCAGCTTGACTCTAACACTGTCTGGTAAC GATGTTCAAAGGTGACCCGC >AC067940.1 Homo sapiens clone RP11-818E9, LOW-PASS SEQUENCE SAMPLING AAATACAACTTTAAATCAAAACGGTAAAAATTCCACTCTTTCATACTAACTTCAAAAGTATTTGCTTTAA AAAAAAAGNNNNNNNNNNAAACTGAATTTCTATTAAGCATCTATTTATAGAAGAGAGTAAACACCCCGTG AATAAAAGACAGAGAATTGTAGCAGCCCGAAGTCCCTTTTCTCTCCTCCCAAGCATTTGGCTCTGGTCCA AATTCACATATCCTGCTCCGTAAAACAAAGTGCCTTGGTTAACCTAACGTTATTCCTTGAACAGTAGTTT AGTGATCAACTAGTTTTTGTTGTTGTTGTTGTTTGAGACAGAGTCTCACTCTGTCGCCCAGGCTGGAGTG CAGTGGCGAGATCTCAGCTCACTGCAACCTCTGCTGCCCAGGTTCAAGGGATTCTCCTGCCTCAGCCTCC CAAGTAGCTGGTATTACAGGCACCTGCCACCGCGCCTGGCTAATTTTTTTTTTTTTTTTTTTTTGTATTT
    The question is, how can I find out the sequence length of each sequence and extract those of a specific length? I have tried both to put the data in an array, which puts each line in one element, and also to put it in a scalar and tried to use the > to separate each seq, but I am stuck.
      This code should work but you will need to install BioPerl module Bio::SeqIO.
      use Bio::SeqIO; # Setting minimum length to 250 my $min_len = 250; # Reading the input fasta file my $seqio_in = Bio::SeqIO->new(-file => "Genes.fasta", -format => "fasta" ); # Creating the output fasta file my $seqio_out = Bio::SeqIO->new(-file => ">Genes_filt_250.fasta", -format => "fasta" ); # Saving sequences to the output if length > min_len while ( my $seq = $seqio_in->next_seq ) { if ( $seq->length > $min_len ) { $seqio_out->write_seq($seq); } }
      The sequences with length higher than 250 should be saved in file "Genes_filt_250.fasta":
      >NM_030643.4 Homo sapiens apolipoprotein L4 (APOL4) GAGGTGCTGGGGAGCAGCGTGTTTGCTGTGCTTGATTGTGAGCTGCTGGGAAGTTGTGAC TTTCATTTTACCTTTCGAATTCCTGGGTATATCTTGGGGGCTGGAGGACGTGTCTGGTTA TTATATAGGTGCACAGCTGGAGGTGAGATCCACACAGCTCAGACCAGCTGGATCTTGCTC AGTCTCTGTCAGAGGAAGATCCCTTGGAGGAGGCCCCGCAGCGACATGGAGGGAGCTGCT TTGCTGAAAATCTTTGTCGTCTGCATCTGGAACCAAAATC >AC067940.1 Homo sapiens clone RP11-818E9, LOW-PASS SEQUENCE SAMPLING AAATACAACTTTAAATCAAAACGGTAAAAATTCCACTCTTTCATACTAACTTCAAAAGTA TTTGCTTTAAAAAAAAAGNNNNNNNNNNAAACTGAATTTCTATTAAGCATCTATTTATAG AAGAGAGTAAACACCCCGTGAATAAAAGACAGAGAATTGTAGCAGCCCGAAGTCCCTTTT CTCTCCTCCCAAGCATTTGGCTCTGGTCCAAATTCACATATCCTGCTCCGTAAAACAAAG TGCCTTGGTTAACCTAACGTTATTCCTTGAACAGTAGTTTAGTGATCAACTAGTTTTTGT TGTTGTTGTTGTTTGAGACAGAGTCTCACTCTGTCGCCCAGGCTGGAGTGCAGTGGCGAG ATCTCAGCTCACTGCAACCTCTGCTGCCCAGGTTCAAGGGATTCTCCTGCCTCAGCCTCC CAAGTAGCTGGTATTACAGGCACCTGCCACCGCGCCTGGCTAATTTTTTTTTTTTTTTTT TTTTGTATTT
Re^4: Size of sequences in fastafile
by Sofie (Acolyte) on Mar 01, 2020 at 11:03 UTC
    Thank you very much for your efforts. I am obviously not able to explain very well what I am trying to do. This seems to put all the sequences in one single element of the @seq array, and the length includes the header ( not just the seq data).

    I just want to extract all the sequences with a minimal length. But the sequences need to still be in fasta format. How can I use the regex for > to extract the sequence in between the headers and check the length? Since each line of sequence has a newline in between.

    Thanks again and sorry for not being able to explain. /Sofie

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11113580]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-04-25 05:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found