//******************************************************************************
//
// File:    ProteinLocalAlignmentSeq.java
// Package: edu.rit.compbio.seq
// Unit:    Class edu.rit.compbio.seq.ProteinLocalAlignmentSeq
//
// This Java source file is copyright (C) 2008 by Alan Kaminsky. All rights
// reserved. For further information, contact the author, Alan Kaminsky, at
// ark@cs.rit.edu.
//
// This Java source file is part of the Parallel Java Library ("PJ"). PJ 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 3 of the License, or (at your option) any later version.
//
// PJ 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.
//
// A copy of the GNU General Public License is provided in the file gpl.txt. You
// may also obtain a copy of the GNU General Public License on the World Wide
// Web at http://www.gnu.org/licenses/gpl.html.
//
//******************************************************************************

package edu.rit.compbio.seq;

/**
 * Class ProteinLocalAlignmentSeq provides an object that does local alignments
 * of {@linkplain ProteinSequence}s. For further information, see the base class
 * {@linkplain ProteinLocalAlignment}.
 * 

* The align() method is designed to be executed by a single thread. * Thus, this class is suitable for use in a sequential program or one process * of a cluster parallel program. * * @author Alan Kaminsky * @version 01-Jul-2008 */ public class ProteinLocalAlignmentSeq extends ProteinLocalAlignment { // Exported constructors. /** * Construct a new protein sequence local alignment object. */ public ProteinLocalAlignmentSeq() { super(); } // Exported operations. /** * Align the query sequence and the subject sequence. * * @return Alignment. */ public Alignment align() { // Verify preconditions. if (A == null) { throw new IllegalStateException ("ProteinLocalAlignmentSeq.align(): Query sequence not set"); } if (B == null) { throw new IllegalStateException ("ProteinLocalAlignmentSeq.align(): Subject sequence not set"); } int M = A.length - 1; int N = B.length - 1; // Do the Smith-Waterman algorithm in a single thread. int maxScore = 0; int theQueryFinish = 0; int theSubjectFinish = 0; for (int i = 1; i <= M; ++ i) { int A_i = A[i]; int[] delta_A_i = delta[A_i]; int[] S_im1 = S[i-1]; int[] S_i = S[i]; int[] GA_im1 = GA[i-1]; int[] GA_i = GA[i]; int[] GB_i = GB[i]; int B_j, S_i_j, GA_i_j, GB_i_j; for (int j = 1; j <= N; ++ j) { B_j = B[j]; GA_i_j = S_im1[j] + g; GA_i_j = Math.max (GA_i_j, GA_im1[j] + h); GB_i_j = S_i[j-1] + g; GB_i_j = Math.max (GB_i_j, GB_i[j-1] + h); S_i_j = S_im1[j-1] + delta_A_i[B_j]; S_i_j = Math.max (S_i_j, GA_i_j); S_i_j = Math.max (S_i_j, GB_i_j); S_i_j = Math.max (S_i_j, 0); if (S_i_j > maxScore) { maxScore = S_i_j; theQueryFinish = i; theSubjectFinish = j; } S_i[j] = S_i_j; GA_i[j] = GA_i_j; GB_i[j] = GB_i_j; } } // Do the traceback. return computeTraceback (maxScore, theQueryFinish, theSubjectFinish); } }

Ads help maintain this website.