Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • gh-pages
  • build-process-upgrade-merge
  • eb-apollo-generate_names
  • BT5_travis
  • hello_github
  • v18.1.0
  • v18.0.3
  • v18.0.2
  • v18.0.1
  • v18.0.0
  • v18.0.0-RC1
  • v17.0.1
  • v17.0.0
  • v16.0.17
  • v16.0.0
  • v15.0.0
  • v14.0.0
  • v13.2.0
19 results

BlastM8ComparisonData.java

Blame
  • user avatar
    tjc authored
    git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@5523 ee4ac58c-ac51-4696-9907-e4b3aa274f04
    4a70475c
    History
    BlastM8ComparisonData.java 4.76 KiB
    /* BlastM8ComparisonData.java
     *
     * created: Tue Apr 30 2002
     *
     * This file is part of Artemis
     * 
     * Copyright (C) 2002  Genome Research Limited
     * 
     * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
     *
     * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/BlastM8ComparisonData.java,v 1.2 2007-02-27 10:24:32 tjc Exp $
     */
    
    package uk.ac.sanger.artemis;
    
    import uk.ac.sanger.artemis.util.LinePushBackReader;
    
    import java.io.*;
    import java.util.StringTokenizer;
    import java.util.Vector;
    
    /**
     *  This class implements the ComparisonData interface for blastall -m 8
     *  output.
     *
     *  @author Kim Rutherford <kmr@sanger.ac.uk>
     *  @version $Id: BlastM8ComparisonData.java,v 1.2 2007-02-27 10:24:32 tjc Exp $
     **/
    
    public class BlastM8ComparisonData extends SimpleComparisonData {
      /**
       *  Create a new BlastM8ComparisonData by reading from the given
       *  LinePushBackReader.
       **/
      public BlastM8ComparisonData (final LinePushBackReader stream)
          throws IOException {
        super (stream);
      }
    
      /**
       *  Create a new, empty instance of BlastM8ComparisonData.
       **/
      public BlastM8ComparisonData () {
        
      }
    
      /**
       *  Returns a new, empty instance of this type of object;
       **/
      protected SimpleComparisonData getNewSimpleComparisonData () {
        return new BlastM8ComparisonData ();
      }
    
    
      /**
       *  Make an AlignMatch object from the given String.
       **/
      private static AlignMatch makeMatchFromStringStatic (String line)
          throws IOException {
        if (line.trim ().length () == 0 ||
            line.startsWith ("#")) {
          return null;
        }
    
        // allow empty columns
        int index; 
        while((index = line.indexOf("\t\t")) > -1)
          line = line.substring(0, index) + "\t \t" +
                 line.substring(index+2);
    
        final StringTokenizer tokenizer = new StringTokenizer (line, "\t");
    
        if (tokenizer.countTokens () != 12) {
          final String message = "while reading blast -m 8 data: " +
            "not enough fields in this line: " + line;
          throw new ComparisonDataParseException (message);
        }
    
        // throw away the query name
        tokenizer.nextToken ();
        // throw away the subject name
        tokenizer.nextToken ();
        
        final String percent_ident_token = tokenizer.nextToken ();
        final String score_token = tokenizer.nextToken ();
    
        // dunno what it is - throw it away
        tokenizer.nextToken ();
        // see previous comment
        tokenizer.nextToken ();
        final String q_start_token = tokenizer.nextToken ();
        final String q_end_token = tokenizer.nextToken ();
        final String s_start_token = tokenizer.nextToken ();
        final String s_end_token = tokenizer.nextToken ();
    
    
        try {
          final int score   = Integer.valueOf (score_token).intValue ();
          final int percent_ident =
             (int)(Float.valueOf (percent_ident_token).floatValue ());
          final int q_start = Integer.valueOf (q_start_token).intValue ();
          final int q_end   = Integer.valueOf (q_end_token).intValue ();
          final int s_start = Integer.valueOf (s_start_token).intValue ();
          final int s_end   = Integer.valueOf (s_end_token).intValue ();
    
          return makeAlignMatch (s_start, s_end, q_start, q_end, score,
                                 percent_ident);
        } catch (NumberFormatException e) {
          throw new IOException ("while reading blast -m 8 data: " +
                                 "failed to parse a number from this string: " +
                                 e.getMessage ());
        }
      }
    
      /**
       *  Make an AlignMatch object from the given String.  The String must be in
       *  a format appropriate for this object.
       **/
      protected AlignMatch makeMatchFromString (final String line)
          throws IOException {
        return makeMatchFromStringStatic (line);
      }
    
      /**
       *  Returns true if and only if the given line is in the correct format for
       *  this type of ComparisonData.  This should be as strict as possible.
       **/
      public static boolean formatCorrect (final String line) {
        if (line.startsWith ("# BLASTN 2") || line.startsWith ("# TBLASTX 2")) {
          return true;
        } else {
          try {
            makeMatchFromStringStatic (line);
          } catch (IOException e) {
            return false;
          }
    
          return true;
        }
      }
    }