Seqanswers Leaderboard Ad

Collapse

Announcement

Collapse
No announcement yet.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • filter sequence by length

    Hi,

    To filter sequencesby length from a fasta file, I'm using now a bioperl script. But is there an another method (faster) ?

    here's my little script


    Code:
    #!/usr/bin/perl
    
    use warnings;
    use strict;
    use Bio::SeqIO;
    
    
    my $file = $ARGV[0]; 
    my $min = $ARGV[1];
    my $max = $ARGV[2];
    my $out = $ARGV[3];
    
    open (FILE, ">>$out") or die ("Error : Cannot open file $out for writing..!\n");
    
    my $seq_in  = Bio::SeqIO->new( -format => 'fasta',-file => $file);
    
    while( my $seq1 = $seq_in->next_seq() ) {	
    	
    	my $id  = $seq1->primary_id;
    	chomp $id;
    	my $seq = $seq1->seq;
    	chomp $seq;
    	my $lseq = length($seq);
    	if($lseq>=$min && $lseq <=$max){
    		print FILE ">",$id,"\n",$seq,"\n";	
    	}
    }

  • #2
    You could try Galaxy:

    Galaxy is a community-driven web-based analysis platform for life science research.


    It's very fast and you can do different type of analysis.

    Comment


    • #3
      Thanks,

      is it possible to have this tool in command line ?

      Comment


      • #4
        From Galaxy i don't think is possible. But probably if you search you may find a similar script.

        Comment


        • #5
          With Biopieces (www.biopieces.org) you can do:

          Code:
          read_fasta -i test.fna | grab -e 'SEQ_LEN > 10' | grab -e 'SEQ_LEN <= 100' | write_fasta -x
          Cheers,


          Martin

          Comment


          • #6
            Originally posted by Giorgio C View Post
            From Galaxy i don't think is possible. But probably if you search you may find a similar script.
            This is a command line tool that is included in the Galaxy distribution. I've included the code below.

            To get any tool that is included with Galaxy, follow the instructions at http://getgalaxy.org/. Tools are defined in the tools directory. Many will have dependencies (although the one below does not).

            Code:
            #!/usr/bin/env python
            """
            Input: fasta, minimal length, maximal length
            Output: fasta
            Return sequences whose lengths are within the range.
            """
            
            import sys, os
            
            assert sys.version_info[:2] >= ( 2, 4 )
            
            def stop_err( msg ):
                sys.stderr.write( msg )
                sys.exit()
            
            def __main__():
                input_filename = sys.argv[1]
                try:
                    min_length = int( sys.argv[2] )
                except:
                    stop_err( "Minimal length of the return sequence requires a numerical value." )
                try:
                    max_length = int( sys.argv[3] )
                except:
                    stop_err( "Maximum length of the return sequence requires a numerical value." )
                output_filename = sys.argv[4]
                output_handle = open( output_filename, 'w' )
                tmp_size = 0 #-1
                tmp_buf = ''
                at_least_one = 0
                for line in file(input_filename):
                    if not line or line.startswith('#'):
                        continue
                    if line[0] == '>':
                        if min_length <= tmp_size <= max_length or (min_length <= tmp_size and max_length == 0):
                            output_handle.write(tmp_buf)
                            at_least_one = 1
                        tmp_buf = line
                        tmp_size = 0                                                       
                    else:
                        if max_length == 0 or tmp_size < max_length:
                            tmp_size += len(line.rstrip('\r\n'))
                            tmp_buf += line
                # final flush of buffer
                if min_length <= tmp_size <= max_length or (min_length <= tmp_size and max_length == 0):
                    output_handle.write(tmp_buf.rstrip('\r\n'))
                    at_least_one = 1
                output_handle.close()
                if at_least_one == 0:
                    print "There is no sequence that falls within your range."
            
            if __name__ == "__main__" : __main__()

            Comment


            • #7
              Very useful. Thanks

              Comment

              Latest Articles

              Collapse

              • seqadmin
                Advancing Precision Medicine for Rare Diseases in Children
                by seqadmin




                Many organizations study rare diseases, but few have a mission as impactful as Rady Children’s Institute for Genomic Medicine (RCIGM). “We are all about changing outcomes for children,” explained Dr. Stephen Kingsmore, President and CEO of the group. The institute’s initial goal was to provide rapid diagnoses for critically ill children and shorten their diagnostic odyssey, a term used to describe the long and arduous process it takes patients to obtain an accurate...
                12-16-2024, 07:57 AM
              • seqadmin
                Recent Advances in Sequencing Technologies
                by seqadmin



                Innovations in next-generation sequencing technologies and techniques are driving more precise and comprehensive exploration of complex biological systems. Current advancements include improved accessibility for long-read sequencing and significant progress in single-cell and 3D genomics. This article explores some of the most impactful developments in the field over the past year.

                Long-Read Sequencing
                Long-read sequencing has seen remarkable advancements,...
                12-02-2024, 01:49 PM

              ad_right_rmr

              Collapse

              News

              Collapse

              Topics Statistics Last Post
              Started by seqadmin, 12-17-2024, 10:28 AM
              0 responses
              23 views
              0 likes
              Last Post seqadmin  
              Started by seqadmin, 12-13-2024, 08:24 AM
              0 responses
              42 views
              0 likes
              Last Post seqadmin  
              Started by seqadmin, 12-12-2024, 07:41 AM
              0 responses
              28 views
              0 likes
              Last Post seqadmin  
              Started by seqadmin, 12-11-2024, 07:45 AM
              0 responses
              42 views
              0 likes
              Last Post seqadmin  
              Working...
              X