All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.maizegenetics.analysis.gbs.neobio.OutMatrix Maven / Gradle / Ivy

Go to download

TASSEL is a software package to evaluate traits associations, evolutionary patterns, and linkage disequilibrium.

The newest version!
/*
 * OutMatrix.java
 *
 * Copyright 2003 Sergio Anibal de Carvalho Junior
 *
 * This file is part of NeoBio.
 *
 * NeoBio 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.
 *
 * NeoBio 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 NeoBio;
 * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * Proper attribution of the author as the source of the software would be appreciated.
 *
 * Sergio Anibal de Carvalho Junior		mailto:[email protected]
 * Department of Computer Science		http://www.dcs.kcl.ac.uk
 * King's College London, UK			http://www.kcl.ac.uk
 *
 * Please visit http://neobio.sourceforge.net
 *
 * This project was supervised by Professor Maxime Crochemore.
 *
 */

package net.maizegenetics.analysis.gbs.neobio;

/**
 * Implements an interface to the OUT matrix of a block. This class is used by the
 * {@linkplain CrochemoreLandauZivUkelson} and subclasses to enconde the OUT matrix
 * from the input border and DIST matrix of an {@linkplain AlignmentBlock}.
 *
 * 

The OUT matrix defined as OUT[i,j] = I[i] + DIST[i,j] where I is the * input border array and DIST is the DIST matrix.

* *

The output border of a block is computed from the OUT matrix by taking the maximum * value of each column. Note that this class does not compute the OUT matrix, it * just stores the necessary information to retrieve a value at any position of the * matrix.

* *

It implements the Matrix interface so that the SMAWK algorithm can be used to * compute its column maxima.

* *

For more information on how this class is used, please refer to the specification * of the CrochemoreLandauZivUkelson and its subclasses. * * @author Sergio A. de Carvalho Jr. * @see CrochemoreLandauZivUkelson * @see CrochemoreLandauZivUkelsonGlobalAlignment * @see CrochemoreLandauZivUkelsonLocalAlignment * @see AlignmentBlock * @see Smawk */ public class OutMatrix implements Matrix { /** * The length of the longest sequence (number of characters) being aligned. It needs * to be set only once per alignment. */ protected int max_length; /** * The maximum absolute score that the current scoring scheme can return. It needs * to be set only once per alignment. */ protected int max_score; /** * The DIST matrix of a block. */ protected int[][] dist; /** * The input border of a block. */ protected int[] input_border; /** * The dimension of the OUT matrix. */ protected int dim; /** * The number of columns of the block. */ protected int lc; /** * Initialised this OUT matrix interface. This method needs to be executed only once * per alignment. * * @param max_length the length of the longest sequence (number of characters) being * aligned * @param max_score the maximum absolute score that the current scoring scheme can * return */ public void init (int max_length, int max_score) { this.max_length = max_length; this.max_score = max_score; } /** * Sets this interface's data to represent an OUT matrix for a block. This method * is typically executed once for each block being aligned. * * @param dist the DIST matrix * @param input_border the input border * @param dim the dimension of the OUT matrix * @param lc the number of columns of the block */ public void setData (int[][] dist, int[] input_border, int dim, int lc) { this.dist = dist; this.input_border = input_border; this.dim = dim; this.lc = lc; } /** * Returns the value at a given position of the matrix. In general it returns the * value of DIST[col][row] + input_border[row]. However, special cases * occur for its upper right and lower left triangular parts. * * @param row row index * @param col column index * @return the value at row row, column col of this OUT * matrix */ public int valueAt (int row, int col) { // The DIST matrix is indexed by [column][row] if (col < lc) { if (row < dim - (lc - col)) return dist[col][row] + input_border[row]; else // lower left triangle entries return - (max_length + row + 1) * max_score; } else if (col == lc) { return dist[col][row] + input_border[row]; } else { if (row < (col - lc)) // upper right triangle entries return Integer.MIN_VALUE + row; else return dist[col][row - (col - lc)] + input_border[row]; } } /** * Returns the number of rows of this OUT matrix. * * @return the number of rows of this OUT matrix */ public int numRows () { return dim; } /** * Returns the number of columns of this OUT matrix. * * @return the number of columns of this OUT matrix */ public int numColumns () { return dim; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy