    001    /*
    002     * AlignmentBlock.java
    003     *
    004     * Copyright 2003 Sergio Anibal de Carvalho Junior
    005     *
    006     * This file is part of NeoBio.
    007     *
    008     * NeoBio is free software; you can redistribute it and/or modify it under the terms of
    009     * the GNU General Public License as published by the Free Software Foundation; either
    010     * version 2 of the License, or (at your option) any later version.
    011     *
    012     * NeoBio is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
    013     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    014     * PURPOSE. See the GNU General Public License for more details.
    015     *
    016     * You should have received a copy of the GNU General Public License along with NeoBio;
    017     * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
    018     * Boston, MA 02111-1307, USA.
    019     *
    020     * Proper attribution of the author as the source of the software would be appreciated.
    021     *
    022     * Sergio Anibal de Carvalho Junior             mailto:sergioanibaljr@users.sourceforge.net
    023     * Department of Computer Science               http://www.dcs.kcl.ac.uk
    024     * King's College London, UK                    http://www.kcl.ac.uk
    025     *
    026     * Please visit http://neobio.sourceforge.net
    027     *
    028     * This project was supervised by Professor Maxime Crochemore.
    029     *
    030     */
    031
    032    package neobio.alignment;
    033
    034    /**
    035     * This class is used by the {@linkplain CrochemoreLandauZivUkelson} algorithm to store
    036     * the information of an alignment block. All fields are public (but final) in order to
    037     * simplify the access to the data.
    038     *
    039     * <P>For more information on how this class is used, please refer to the specification
    040     * of the <CODE>CrochemoreLandauZivUkelson</CODE> class and it subclasses.</P>
    041     *
    042     * @author Sergio A. de Carvalho Jr.
    043     * @see CrochemoreLandauZivUkelson
    044     */
    045    public class AlignmentBlock
    046    {
    047            /**
    048             * A pointer to the factor of the first sequence being aligned.
    049             */
    050            public final Factor factor1;
    051
    052            /**
    053             * A pointer to the factor of the second sequence being aligned.
    054             */
    055            public final Factor factor2;
    056
    057            /**
    058             * The DIST column of this block.
    059             */
    060            public final int[] dist_column;
    061
    062            /**
    063             * An array of pointers to prefix blocks of this block.
    064             */
    065            public final AlignmentBlock[] ancestor;
    066
    067            /**
    068             * This block's output border.
    069             */
    070            public final int[] output_border;
    071
    072            /**
    073             * An array of indexes to the source of the highest scoring path for each entry in
    074             * the output border.
    075             */
    076            public final int[] source_path;
    077
    078            /**
    079             * An array of directions that must be followed to reach the source of the highest
    080             * scoring path for each entry in the output border.
    081             *
    082             * @see CrochemoreLandauZivUkelson#STOP_DIRECTION
    083             * @see CrochemoreLandauZivUkelson#LEFT_DIRECTION
    084             * @see CrochemoreLandauZivUkelson#DIAGONAL_DIRECTION
    085             * @see CrochemoreLandauZivUkelson#TOP_DIRECTION
    086             */
    087            public final byte[]     direction;
    088
    089            /**
    090             * Creates a new root block. A root block does not have <CODE>source_path</CODE> and
    091             * <CODE>ancestor</CODE> arrays. Moreover, its <CODE>dist_column</CODE> and
    092             * <CODE>output_border</CODE> arrays are set to zero, and the <CODE>direction</CODE>
    093             * array is set to contain an <CODE>STOP_DIRECTION</CODE>.
    094             *
    095             * @param factor1 factor of the first sequence being aligned
    096             * @param factor2 factor of the second sequence being aligned
    097             */
    098            public AlignmentBlock (Factor factor1, Factor factor2)
    099            {
    100                    this.factor1 = factor1;
    101                    this.factor2 = factor2;
    102
    103                    dist_column = output_border = new int[] {0};
    104                    direction = new byte [] {0}; // STOP_DIRECTION
    105                    source_path = null;
    106                    ancestor = null;
    107            }
    108
    109            /**
    110             * Creates a new alignment block, with all arrays created with the specified size.
    111             *
    112             * @param factor1 factor of the first sequence being aligned
    113             * @param factor2 factor of the second sequence being aligned
    114             * @param size size of the arrays to be created
    115             */
    116            public AlignmentBlock (Factor factor1, Factor factor2, int size)
    117            {
    118                    this.factor1 = factor1;
    119                    this.factor2 = factor2;
    120
    121                    dist_column = new int[size];
    122                    output_border = new int[size];
    123                    direction = new byte[size];
    124                    source_path = new int[size];
    125                    ancestor = new AlignmentBlock[size];
    126            }
    127    }