gribskov@FCRFV1.NCIFCRF.GOV ("Gribskov, Michael") (09/06/90)
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".