001 /*
002 * LocalAlignmentBlock.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 CrochemoreLandauZivUkelsonLocalAlignment}
036 * algorithm to store the information of an alignment block. All fields are public (but
037 * final) in order to 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>CrochemoreLandauZivUkelsonLocalAlignment</CODE> class.</P>
041 *
042 * @author Sergio A. de Carvalho Jr.
043 * @see CrochemoreLandauZivUkelsonLocalAlignment
044 */
045 public class LocalAlignmentBlock extends AlignmentBlock
046 {
047 /**
048 * The value of the highest scoring path which starts at the input border of this
049 * block and ends inside it, called E-path.
050 */
051 public int[] E_path_score;
052
053 /**
054 * An array of pointers to blocks that are source of E-paths.
055 */
056 public LocalAlignmentBlock[] E_path_ancestor;
057
058 /**
059 * Indexes of of the entry in the ancestor block that is the source of the E-path.
060 */
061 public int[] E_path_ancestor_index;
062
063 /**
064 * The value of the highest scoring path which starts inside the block and ends at its
065 * output border.
066 */
067 public int[] S_path_score;
068
069 /**
070 * The type of the highest scoring path ending at a given position of the output
071 * border of a block.
072 */
073 public byte[] path_type;
074
075 /**
076 * The direction to the source of the S-path of the new vertex of this block.
077 */
078 public byte S_direction;
079
080 /**
081 * The value of the highest scoring path contained in this block, called C-path.
082 */
083 public int C;
084
085 /**
086 * Creates a new root block.
087 *
088 * @param factor1 factor of the first sequence being aligned
089 * @param factor2 factor of the second sequence being aligned
090 */
091 LocalAlignmentBlock (Factor factor1, Factor factor2)
092 {
093 super (factor1, factor2);
094
095 E_path_score = S_path_score = new int[] {0};
096 E_path_ancestor = new LocalAlignmentBlock [] {this};
097 E_path_ancestor_index = new int [] {0};
098 }
099
100 /**
101 * Creates a new alignment block, with all arrays created with the specified size.
102 *
103 * @param factor1 factor of the first sequence being aligned
104 * @param factor2 factor of the second sequence being aligned
105 * @param size size of the arrays to be created
106 */
107 LocalAlignmentBlock (Factor factor1, Factor factor2, int size)
108 {
109 super (factor1, factor2, size);
110
111 E_path_score = new int [size];
112 E_path_ancestor = new LocalAlignmentBlock [size];
113 E_path_ancestor_index = new int [size];
114 S_path_score = new int [size];
115 path_type = new byte [size];
116 }
117 }