BUG REPORT:
PROGRAM: ProfileScan
SOURCE: Michael Gribskov
GRIBSKOV @ NCIFCRF.GOV
DESCRIPTION: ProfileScan compares a sequence to a library of known
sequence and structural motifs. In the version distributed by GCG in
the incremental release 6.2, and in versions distributed by myself
numbered version 4.40 or lower, the bug causes ProfileScan to skip the
library entry immediately following any entry that finds a match. Such
successive matches are rare, so this should not have caused serious
problems.
FIX: Modify the module ProfMalign as follows. You will be less likely
to make a mistake if you first get a listing of the module with line
numbers as follows: $fortran/lis ProfMalign. Line numbers are given
below for both the GCG release 6.2 version (GCG) and version 4.30
obtained directly from me (MRG). All line numbers are in terms of the
unmodified code.
There are two parts to the fix: Part 1) is essential and corrects the
problem described above. Part 2) is an enhancement that ensures that the
multiple alignments will be "distinct" at a certain level. These
changes are optional, but prevent the generation of alignments that
differ by only a few residues.
--------------------------------------------------------------------------------
Part 1) At line 133-147 (GCG) or 130-144 (MRG) remove the following code
If ( ListPos .gt. 0 ) then
MaxQual = QMax( Order(ListPos) )
Do while ( ListPos .gt. 0 .and.
& .not.ProfTraceMPath( Profile, S1, S2, Ns1, Ns2,
& Path, RowBase, Threshold, Offset1, Offset2,
& XMax(Order(ListPos)), YMax(Order(ListPos)),
& Ngaps, QMax(Order(ListPos)), NAbort ) )
ListPos = ListPos - 1
If ( ListPos .gt. 0 ) MaxQual = QMax( Order(ListPos) )
End do
If ( ListPos .gt. 0) ProfMAlign = .true.
ListPos = ListPos - 1
Else
HavePath = .False.
End if
and replace it with
If ( ListPos .le. 0 ) then
HavePath = .False.
Return
End if
C
MaxQual = QMax( Order(ListPos) )
CutOff = Min( Threshold, Distinct*QMax(Order(ListPos)) ) !*
Do while ( ListPos .gt. 0 .and.
. MaxQual .gt. Threshold .and.
. .not.TraceMPath( Profile, S1, S2, Ns1, Ns2,
. Path, RowBase, CutOff, Offset1, Offset2, !*
. XMax(Order(ListPos)), YMax(Order(ListPos)),
. Ngaps, QMax(Order(ListPos)), NAbort ) )
ListPos = ListPos - 1
If ( ListPos .gt. 0 ) MaxQual = QMax( Order(ListPos) )
End do
C
If ( ListPos .gt. 0 ) then
ProfMAlign = .true.
Else
HavePath = .False.
End if
C
ListPos = ListPos - 1
--------------------------------------------------------------------------------
Part(2) At line 55 (GCG) or line 52 (MRG) insert the following.
Real Distinct
Parameter ( Distinct = 0.5 )
At line 72 (GCG) or line 69 (MRG) insert
Real CutOff
if you decide NOT to implement Part 2) you must change the two lines
marked with !* in Part 1). Simply delete the first, and in the second
change "Cutoff" to "Threshold".