Select Git revision
chado_iBatis_config.xml
AlignMatch.java 5.63 KiB
/* AlignMatch.java
*
* created: Wed Jul 14 1999
*
* This file is part of Artemis
*
* Copyright(C) 1999,2000 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/AlignMatch.java,v 1.7 2005-12-13 10:33:29 tjc Exp $
*/
package uk.ac.sanger.artemis;
import uk.ac.sanger.artemis.io.Range;
import uk.ac.sanger.artemis.util.OutOfRangeException;
/**
* Each object of this class represents a single match from an alignment.
*
* @author Kim Rutherford
* @version $Id: AlignMatch.java,v 1.7 2005-12-13 10:33:29 tjc Exp $
**/
public class AlignMatch
{
/** The range of the match in the subject sequence. */
private Range subject_sequence_range = null;
/** The range of the match in the query sequence. */
private Range query_sequence_range = null;
/** The score that was passed to the constructor. */
private int score = -1;
/**
* The percent identity that was passed to the constructor.
**/
private int percent_id = -1;
/**
* true if and only if the query hits the reverse complement of the subject
**/
private boolean rev_match;
private int match_length;
/**
* Create a new AlignMatch object.
* @param rev_match true if and only if the query hits the reverse
* complement of the subject.
* @param score the score for this match, which should be -1 if and only if
* this match has no score. The parameter must be >= -1.
**/
public AlignMatch(final Range subject_sequence_range,
final Range query_sequence_range,
final boolean rev_match,
final int score,
final int percent_id)
{
this.subject_sequence_range = subject_sequence_range;
this.query_sequence_range = query_sequence_range;
this.rev_match = rev_match;
this.score = score;
this.percent_id = percent_id;
match_length = Math.abs(getSubjectSequenceStart() -
getSubjectSequenceEnd());
}
public static AlignMatch copy(AlignMatch m)
{
return new AlignMatch(m.subject_sequence_range,
m.query_sequence_range,
m.rev_match,
m.score,
m.percent_id);
}
public int getLength()
{
return match_length;
}
/**
* Return the start(base) of the match in the subject sequence.
**/
public int getSubjectSequenceStart()
{
return subject_sequence_range.getStart();
}
/**
* Return the end(base) of the match in the subject sequence.
**/
public int getSubjectSequenceEnd()
{
return subject_sequence_range.getEnd();
}
/**
* Return the start(base) of the match in the query sequence.
**/
public int getQuerySequenceStart()
{
if(rev_match)
return query_sequence_range.getEnd();
return query_sequence_range.getStart();
}
/**
* Return the end(base) of the match in the query sequence.
**/
public int getQuerySequenceEnd()
{
if(rev_match)
return query_sequence_range.getStart();
return query_sequence_range.getEnd();
}
/**
* Return the Range of the match in the subject sequence.
**/
public Range getSubjectSequenceRange()
{
return subject_sequence_range;
}
/**
* Return the Range of the match in the query sequence.
**/
public Range getQuerySequenceRange()
{
return query_sequence_range;
}
/**
* Set the range for either the query or the subject match. This
* is used when flipping contigs round.
* @param start
* @param end
* @param subject
*/
public void setRange(final int start, final int end,
boolean subject, boolean flip)
{
try
{
if(subject)
{
if(start < end)
this.subject_sequence_range = new Range(start, end);
else
this.subject_sequence_range = new Range(end, start);
}
else
{
if(start < end)
this.query_sequence_range = new Range(start, end);
else
this.query_sequence_range = new Range(end, start);
}
}
catch(OutOfRangeException ex)
{
ex.printStackTrace();
}
if(flip)
this.rev_match = !this.rev_match;
}
/**
* Returns true if and only if the query hits the reverse complement of the
* subject.
**/
public boolean isRevMatch()
{
return rev_match;
}
/**
* Return the score of this match.
**/
public int getScore()
{
return score;
}
/**
* Return the percent identity of this match.
**/
public int getPercentID()
{
return percent_id;
}
/**
* Return true if and only if this is a self match(ie query start ==
* subject start && query end == subject end)
**/
public boolean isSelfMatch()
{
if(getQuerySequenceStart() == getSubjectSequenceStart() &&
getQuerySequenceEnd() == getSubjectSequenceEnd())
return true;
else
return false;
}
}