swps3
Main Page
Classes
Files
File List
File Members
DynProgr_scalar.c
Go to the documentation of this file.
1
5
/*
6
* Copyright (c) 2007-2008 ETH Zürich, Institute of Computational Science
7
*
8
* Permission is hereby granted, free of charge, to any person
9
* obtaining a copy of this software and associated documentation
10
* files (the "Software"), to deal in the Software without
11
* restriction, including without limitation the rights to use,
12
* copy, modify, merge, publish, distribute, sublicense, and/or sell
13
* copies of the Software, and to permit persons to whom the
14
* Software is furnished to do so, subject to the following
15
* conditions:
16
*
17
* The above copyright notice and this permission notice shall be
18
* included in all copies or substantial portions of the Software.
19
*
20
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
22
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27
* OTHER DEALINGS IN THE SOFTWARE.
28
*/
29
30
#include <sys/types.h>
31
#include "
swps3.h
"
32
#include "
debug.h
"
33
#include "
matrix.h
"
34
35
#define INFINITY (1.0/0.0)
36
EXPORT
double
swps3_alignScalar
(
const
DMatrix
matrix,
const
char
*
s1
,
int
ls1
,
const
char
*
s2
,
int
ls2
,
Options
*options)
37
{
38
static
double
coldel[
MAX_SEQ_LENGTH
], S[
MAX_SEQ_LENGTH
];
39
40
int
i, j, k;
41
const
double
DelFixed = options->
gapOpen
;
42
const
double
DelIncr = options->
gapExt
;
43
double
*Score_s1;
44
double
Tcd, t, MaxScore = 0, Sj, Sj1, Tj, Tj1, Trd;
45
46
S[0] = coldel[0] = 0;
47
for
( j=0; j <
ls2
; j++ ) {
48
coldel[j] = -
INFINITY
;
49
S[j] = 0;
50
}
51
52
for
( i=0; i <
ls1
; i++ ) {
53
54
Tj1 = Sj1 = 0;
55
Trd = -
INFINITY
;
56
57
/* setup Score_s1 */
58
k = s1[i];
59
Score_s1 = matrix+k*
MATRIX_DIM
;
60
61
for
( j=0; j <
ls2
; j++ ) {
62
Sj = S[j];
63
Tcd = coldel[j] + DelIncr;
64
65
if
( Tcd < ( t=Sj+DelFixed ) ) Tcd = t;
66
Tj = Sj1 + Score_s1[(int)s2[j]];
67
68
Trd += DelIncr;
69
if
( Trd < ( t=Tj1+DelFixed ) ) Trd = t;
70
71
if
( Tj < Tcd ) Tj = Tcd;
72
if
( Tj < Trd ) Tj = Trd;
73
if
( Tj < 0 ) Tj = 0;
74
if
( Tj > MaxScore ) {
75
MaxScore = Tj;
76
if
( MaxScore >= options->
threshold
) {
return
( MaxScore ); }
77
}
78
79
coldel[j] = Tcd;
80
S[j] = Tj1 = Tj;
81
Sj1 = Sj;
82
}
83
}
84
85
return
( MaxScore );
86
87
}
DynProgr_scalar.c
Generated on Fri Sep 14 2012 11:34:51 for swps3 by
1.8.2