964 lines
32 KiB
Fortran
964 lines
32 KiB
Fortran
C SIP (similarity investigation program)
|
|
C copyright Rodger Staden
|
|
C 23-7-92 Added facility to list exact matches
|
|
C 16-7-92 changed equivalencing of arrays and upped maxseq to 100000 and
|
|
C maxcom to 50000. Also allowed quickscan and identities plot to
|
|
C ignore main diagonal.
|
|
C Jan 25th 1990 changes to allow switches between protein and dna sequences
|
|
C 8-2-90 Changed to give xhair access when alignm chosen with D
|
|
C 16-3-90 removed escape after bpause
|
|
C 5-4-90 Changed getdev to redir and all that implies (see redir)
|
|
C 12-06-90 Changed all occurrences of lh to lf
|
|
C 21-06-90 Added calls to showfu
|
|
C 6-07-90 If no seq read forced retry (used to exit)
|
|
C 9-7-90 renamed menu routine
|
|
C 11-12-90 Changed handling of pir libraries. New string and paramter
|
|
C 25-4-91 Fixed bug in cfsq
|
|
C statment
|
|
C 13-04-91 removed initial CLEARV
|
|
C 3-7-91 set namlen = 60
|
|
C 25-2-92 changed call to rdseq
|
|
C AUTHOR RODGER STADEN MRC LMB, CAMBRIDGE
|
|
C DIMENSION VARIABLES USED:
|
|
C MXSPAN= MAXIMUM SPAN
|
|
C MAXSEQ= MAXIMUM SEQUENCE LENGTH
|
|
C MAXCOM= MAXIMUM LENGTH OF SEQUENCE THAT CAN BE COMPARED IN ONE
|
|
C MXCOMP= MAXIMUM SPAN + MAXCOM
|
|
C MXSPSP= MAXIMUM SPAN + MAXIMUM SEQUENCE - 1
|
|
C MSPO2= MAXIMUM SPAN / 2
|
|
C MSPO21= MAXIMUM SPAN / 2 +1
|
|
C IDIMV = ACTUAL SEQUENCE LENGTH (VERTICAL)
|
|
C IDIMVA= ACTIVE SEQUENCE
|
|
C IDIMVP= ACTIVE SEQUENCE LENGTH + SPAN
|
|
C IDPOLY= DIMENSION OF POLYNOMIAL, PERC, SCORE ARRAYS
|
|
C ISXMAX= MAXIMUM SCREEN DIMENSION IN X
|
|
C POINTERS
|
|
C ISV1, ISV2, IDIMVA = START, END, LENGTH OF ACTIVE REGION VERTICAL
|
|
C ISH1, ISH2, IDIMHA = START, END, LENGTH OF ACTIVE REGION HORIZ
|
|
C IDIMVP=IDIMVA+SPAN
|
|
C IDIMHP=IDIMHA+SPAN
|
|
C IW1, IW2, IDIML1 = START, END, LENGTH FOR WRITING BOTH SEQ (VERT)
|
|
C IW3, IW4, IDIML = START, END, LENGTH FOR WRITING BOTH SEQ (HORIZ)
|
|
C IHX,IHY XHAIR POSITION IN SEQ UNITS
|
|
C IWX3, IWX4, = IHX+-SPAN/2 FOR SAVING XHAIR POSITION
|
|
C IWX1, IWX2, = IHY+-SPAN/2 FOR SAVING XHAIR POSITION
|
|
C
|
|
C
|
|
SUBROUTINE FMAIN()
|
|
PARAMETER (MAXDEV=9)
|
|
PARAMETER (NAMLEN = 60)
|
|
CHARACTER*(NAMLEN) HELPF,POINTF,FILOUT,FILEH,FILEV,FILEM,FILEP
|
|
CHARACTER*(NAMLEN) FILNAM
|
|
CHARACTER*(NAMLEN) LIBLF
|
|
CHARACTER*(NAMLEN*2) CURFIL
|
|
PARAMETER (MAXPRM = 4)
|
|
CHARACTER PROMPT(2)*(MAXPRM)
|
|
INTEGER BOTOPT,TOPOPT,DEVNOS(MAXDEV)
|
|
PARAMETER (MXSPAN=401,
|
|
+ MAXSEQ=100000,
|
|
+ MXSPSP=MXSPAN-1+MAXSEQ,
|
|
+ MAXCOM=50000,
|
|
+ MXCOMP=MAXCOM+MXSPAN-1,
|
|
+ MSPO2=MXSPAN/2,
|
|
+ MSPO21=MSPO2+1,
|
|
+ IDPOLY=4000,
|
|
+ BOTOPT=0,
|
|
+ TOPOPT=34,
|
|
+ MAXOPT=34,
|
|
+ MINMEN=-4,
|
|
+ HELPF='SIPHELP',
|
|
+ POINTF='SIPHPNT',
|
|
+ FILEM='SIPMARG',
|
|
+ FILEP='PROTMAT',
|
|
+ LIBLF='SEQUENCELIBRARIES')
|
|
C WARNING TO RS: MAX CONTINUATION LINES USED HERE!
|
|
PARAMETER (LCONSM = 75)
|
|
C LCONSM SET FOR MAX PROTEIN WORD LENGTH OF 3 (I.E. 3*(IDM-1))
|
|
PARAMETER (IDMM = 26)
|
|
PARAMETER (MAXWRD = 16384)
|
|
INTEGER SEQV(MXCOMP),SEQH(MXCOMP),OPT
|
|
CHARACTER SEQVC(MAXSEQ),SEQHC(MAXSEQ)
|
|
CHARACTER NOROO,NOROE,VORH
|
|
CHARACTER CHRSET(IDMM),CHRDNA(5)
|
|
INTEGER LINEB(MXCOMP),LINEC(MXCOMP),LINEE(MXCOMP)
|
|
INTEGER MATRIX(IDMM,IDMM),MATDNA(25)
|
|
REAL PERC(IDPOLY),POLYA(IDPOLY),POLYB(IDPOLY)
|
|
INTEGER SCORE(IDPOLY)
|
|
INTEGER HELPS(BOTOPT:TOPOPT),HELPE(BOTOPT:TOPOPT)
|
|
INTEGER MARG1(1),MARG2(1)
|
|
C NOTE THE MARG ARRAYS ARE FOR COMPATIBILITY WITH GETMRG
|
|
INTEGER WORDP(MAXWRD),CONSTS(0:LCONSM)
|
|
C ALIGNMENT PARAMETERS AND VARIABLES
|
|
INTEGER STKREC
|
|
PARAMETER (MAXSA = 5000,
|
|
+ STKREC = 11,
|
|
+ MAXSTK = MAXSA*3*STKREC)
|
|
C THE STACK SIZE ASSUMES A MAXIMUM SEQUENCE SIZE OF MAXSA
|
|
C AND THAT THE ESTIMATE OF 2.5 * SEQUENCE LENGTH FOR THE STACK
|
|
C IS CORRECT.
|
|
INTEGER STACK(0:MAXSTK)
|
|
INTEGER WTS(0:IDMM,0:IDMM)
|
|
CHARACTER SEQ1A(MAXSA),SEQ2A(MAXSA)
|
|
INTEGER CC(0:MAXSA+1),DD(0:MAXSA+1)
|
|
INTEGER RR(0:MAXSA+1),SS(0:MAXSA+1)
|
|
INTEGER SOP(0:2*MAXSA)
|
|
INTEGER MAIND(IDMM),SEQS(MAXCOM),HIST(-MAXCOM:MAXCOM)
|
|
INTEGER POSN(MAXCOM)
|
|
PARAMETER (LENEQ = MAXCOM*4 + MXCOMP*3 + MAXWRD + 1)
|
|
INTEGER EQ1(LENEQ)
|
|
EQUIVALENCE (EQ1,HIST)
|
|
EQUIVALENCE (EQ1(2+2*MAXCOM),SEQS)
|
|
EQUIVALENCE (EQ1(2+3*MAXCOM),POSN)
|
|
EQUIVALENCE (EQ1(2+4*MAXCOM),LINEB)
|
|
EQUIVALENCE (EQ1(2+4*MAXCOM+MXCOMP),LINEC)
|
|
EQUIVALENCE (EQ1(2+4*MAXCOM+2*MXCOMP),LINEE)
|
|
EQUIVALENCE (EQ1(2+4*MAXCOM+3*MXCOMP),WORDP)
|
|
EQUIVALENCE (EQ1,STACK)
|
|
EQUIVALENCE (CHRSET,CHRDNA)
|
|
C EQUIVALENCE (STACK,HIST)
|
|
C EQUIVALENCE (STACK(1+2*MAXCOM),SEQS)
|
|
C EQUIVALENCE (STACK(1+3*MAXCOM),POSN)
|
|
C EQUIVALENCE (STACK(1+4*MAXCOM),LINEB)
|
|
C EQUIVALENCE (STACK(1+4*MAXCOM+MXCOMP),LINEC)
|
|
C EQUIVALENCE (STACK(1+4*MAXCOM+2*MXCOMP),LINEE)
|
|
C EQUIVALENCE (STACK(1+4*MAXCOM+3*MXCOMP),WORDP)
|
|
C NOTE 1+4*MAXCOM+3*MXCOMP MUST BE < MAXSA*STKREC*3
|
|
EQUIVALENCE (PERC,CC)
|
|
EQUIVALENCE (POLYA,DD)
|
|
EQUIVALENCE (POLYB,RR)
|
|
EQUIVALENCE (SCORE,SS)
|
|
C NOTE MAXSA SHOULD BE SIMILAR TO IDPOLY
|
|
EXTERNAL NORP
|
|
DATA MATDNA/
|
|
+1,0,0,0,0,
|
|
+0,1,0,0,0,
|
|
+0,0,1,0,0,
|
|
+0,0,0,1,0,
|
|
+0,0,0,0,0/
|
|
DATA CHRDNA/'T','C','A','G','-'/
|
|
C Initialise help
|
|
CALL INTHLP('sip', TOPOPT)
|
|
CALL UNITNO(KBIN,KBOUT,DEVNOS,MAXDEV)
|
|
C I = 1+4*MAXCOM+3*MXCOMP
|
|
C J = MAXSA*STKREC*3
|
|
C IF(I.GT.J) THEN
|
|
C WRITE(KBOUT,*)'Equivalencing of arrays suspect'
|
|
C GO TO 9999
|
|
C END IF
|
|
IFORNO = 0
|
|
LIBNO = 2
|
|
IGORT = 0
|
|
C OPEN UNIT DEVNOS(3) FOR PLOTTING
|
|
CALL OPENGR(DEVNOS(3))
|
|
WRITE(KBOUT,1000)
|
|
1000 FORMAT(
|
|
+' SIP (Similarity investigation program) V5.0 July 1992',/,
|
|
+' Author: Rodger Staden')
|
|
FILEV = ' '
|
|
FILEH = ' '
|
|
C GET HELP POINTERS
|
|
CALL SETHLP(HELPS,HELPE,BOTOPT,TOPOPT,POINTF,DEVNOS(4),KBOUT)
|
|
CALL INITGR(KBIN,KBOUT,HELPS(0),HELPE(0),HELPF,DEVNOS(4))
|
|
CALL GETMRG(
|
|
+ISXMAX,ISYMAX,MARGL,MARGR,MARG1,MARG2,1,DEVNOS(1),FILEM)
|
|
LCONST = LCONSM
|
|
JSAME = 0
|
|
MARKI = 0
|
|
RNSD = 3.
|
|
IGAPH = 10
|
|
IGAPG = 10
|
|
MARGB=MARG1(1)
|
|
MARGT=MARG2(1)
|
|
IHX=0
|
|
IHY=0
|
|
IOK=0
|
|
IDMIN = 0
|
|
LENGTH = 11
|
|
LB=(LENGTH+1)/2
|
|
LF=LENGTH/2
|
|
IDEV=KBOUT
|
|
MOPT=0
|
|
IDIMH = 0
|
|
IDIMV = 0
|
|
20 CONTINUE
|
|
C
|
|
C CALL SHOWFU(KBOUT,'Select horizontal sequence')
|
|
FILEH = ' '
|
|
IDEVLL = DEVNOS(5)
|
|
IDEVEN = DEVNOS(6)
|
|
IDEVAN = DEVNOS(7)
|
|
IDEVDL = DEVNOS(8)
|
|
IDEVLF = DEVNOS(9)
|
|
CALL RDSEQ(
|
|
+SEQHC,MAXSEQ,IDIMH,ISH1,ISH2,ISTARH,IENDH,IDIMHA,IDIMBH,
|
|
+DEVNOS(1),FILNAM,KBIN,KBOUT,
|
|
+HELPS(3),HELPE(3),HELPF,DEVNOS(4),IDEV,IFORNO,
|
|
+IDEVLL,IDEVEN,IDEVAN,IDEVDL,
|
|
+IDEVLF,LIBNO,LIBLF,HIST(-MAXCOM),MAXCOM,IOK)
|
|
FILEH = FILNAM
|
|
CURFIL = FILEV(1:1+INDEX(FILEV,' '))//FILEH
|
|
CALL SHOWFI(KBOUT,CURFIL)
|
|
IF((IOK.NE.0).OR.(IDIMH.LT.LENGTH)) GO TO 20
|
|
CALL REDEFD(IDIMH,ISH1,ISH2,MAXCOM,IDIMHA,ISTARH,IENDH,IDIMBH)
|
|
IDM = NORP(SEQHC,IDIMBH)
|
|
IF(IDMIN.NE.IDM)THEN
|
|
IF(IDM.EQ.26) THEN
|
|
C READ IN THE SCORE MATRIX (USUALLY MDM78)
|
|
CALL GETMAT(DEVNOS(1),FILEP,MATRIX,IDM,CHRSET,KBOUT,IOK)
|
|
IF(IOK.NE.0) GO TO 9999
|
|
L17 = 3
|
|
MINPER = 2
|
|
ELSE
|
|
L17 = 7
|
|
MINPER = 8
|
|
CALL FILLI(MATRIX,676,0)
|
|
CALL COPYI(MATDNA,MATRIX,25)
|
|
END IF
|
|
CALL INITLU(IDM)
|
|
C NEED TO KNOW LARGEST SCORE IN MATRIX FOR STATS
|
|
MATMAX=0
|
|
DO 7 I=1,IDM
|
|
DO 7 J=1,IDM
|
|
IF(MATMAX.LT.MATRIX(I,J))MATMAX=MATRIX(I,J)
|
|
7 CONTINUE
|
|
MATMAX=MATMAX+1
|
|
C SET AVERAGE SCORE FOR DEFAULTS
|
|
AVSCOR=0.75
|
|
IF(IDM.EQ.26)AVSCOR=AVSCOR*16.
|
|
C GET INITIAL SCORE
|
|
MINPRO = INT(AVSCOR*LENGTH)
|
|
END IF
|
|
IDMIN = IDM
|
|
C GIVE COMPOSITION AS A CHECK
|
|
IF(IDIMBH.GT.0)THEN
|
|
IF(IDM.EQ.5)CALL BCOMP(SEQHC,IDIMBH,
|
|
+ISH1,ISH2,ISTARH,KBOUT)
|
|
IF(IDM.EQ.26)CALL MWCALC(SEQHC,
|
|
+IDIMBH,ISH1-ISTARH+1,ISH2-ISTARH+1,KBOUT,KBOUT)
|
|
END IF
|
|
C set pointers to sequence
|
|
********
|
|
C MAXSEQ = THE DIMENSION OF THE RAM BUFFER SEQ
|
|
C IDIMH = THE ACTUAL SEQUENCE LENGTH (AND THEREFORE THE NUMBER OF ELEMENTS
|
|
C IN THE DISK BUFFER)
|
|
C ISTARH = THE SEQUENCE NUMBER OF THE CHARACTER OCCUPYING SEQHC(1)
|
|
C ISH1 = THE SEQUENCE NUMBER OF THE FIRST CHARACTER IN THE ACTIVE REGION
|
|
C ISH2 = THE SEQUENCE NUMBER OF THE LAST CHARACTER IN THE ACTIVE REGION
|
|
C IDIMHA = ISH2-ISH11+1 I.E. THE NUMBER OF ELEMENTS IN THE ACTIVE REGION
|
|
C IENDH = THE SEQUENCE NUMBER OF THE LAST ELEMENT OF SEQ
|
|
C IDIMBH = IEND-ISTART+1 I.E. THE NUMBER OF ELEMENTS IN THE RAM BUFFER
|
|
********
|
|
IF((IOK.NE.0).OR.(IDIMHA.LT.LENGTH)) GO TO 9999
|
|
IDIMHP=IDIMHA+LENGTH
|
|
CALL CONNUM(SEQHC(ISH1-ISTARH+1),SEQH(MSPO21),IDIMHA)
|
|
CALL FILEDG(SEQHC,IDIMBH,ISH1,ISH2,SEQH,MXCOMP,LENGTH,
|
|
+CHRSET,IDM,MSPO2,ISTARH,IENDH)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
IH1 = ISH1
|
|
I = MIN(MAXSA,IDIMHA) - 1
|
|
IH2 = IH1 + I
|
|
IF(OPT.EQ.3)GO TO 30
|
|
C
|
|
21 CONTINUE
|
|
C CALL SHOWFU(KBOUT,'Select vertical sequence')
|
|
FILEV = ' '
|
|
CALL RDSEQ(
|
|
+SEQVC,MAXSEQ,IDIMV,ISV1,ISV2,ISTARV,IENDV,IDIMVA,IDIMBV,
|
|
+DEVNOS(1),FILNAM,KBIN,KBOUT,
|
|
+HELPS(3),HELPE(3),HELPF,DEVNOS(4),IDEV,IFORNO,
|
|
+IDEVLL,IDEVEN,IDEVAN,IDEVDL,
|
|
+IDEVLF,LIBNO,LIBLF,HIST(-MAXCOM),MAXCOM,IOK)
|
|
FILEV = FILNAM
|
|
CURFIL = FILEV(1:1+INDEX(FILEV,' '))//FILEH
|
|
CALL SHOWFI(KBOUT,CURFIL)
|
|
IF((IOK.NE.0).OR.(IDIMV.LT.LENGTH)) GO TO 21
|
|
CALL REDEFD(IDIMV,ISV1,ISV2,MAXCOM,IDIMVA,ISTARV,IENDV,IDIMBV)
|
|
C GIVE COMPOSITION AS A CHECK
|
|
IDM = NORP(SEQVC,IDIMBV)
|
|
IF(IDM.NE.IDMIN) CALL INITLU(IDM)
|
|
IF(IDIMBV.GT.0)THEN
|
|
IF(IDM.EQ.5)CALL BCOMP(SEQVC,IDIMBV,
|
|
+ISV1,ISV2,ISTARV,KBOUT)
|
|
IF(IDM.EQ.26)CALL MWCALC(SEQVC,
|
|
+IDIMBV,ISV1-ISTARV+1,ISV2-ISTARV+1,KBOUT,KBOUT)
|
|
END IF
|
|
C set pointers to sequence
|
|
********
|
|
C MAXSEQ = THE DIMENSION OF THE RAM BUFFER SEQ
|
|
C IDIMV = THE ACTUAL SEQUENCE LENGTH (AND THEREFORE THE NUMBER OF ELEMENTS
|
|
C IN THE DISK BUFFER)
|
|
C ISTARV = THE SEQUENCE NUMBER OF THE CHARACTER OCCUPYING SEQHC(1)
|
|
C ISV1 = THE SEQUENCE NUMBER OF THE FIRST CHARACTER IN THE ACTIVE REGION
|
|
C ISV2 = THE SEQUENCE NUMBER OF THE LAST CHARACTER IN THE ACTIVE REGION
|
|
C IDIMVA = ISV2-ISV1+1 I.E. THE NUMBER OF ELEMENTS IN THE ACTIVE REGION
|
|
C IENDV = THE SEQUENCE NUMBER OF THE LAST ELEMENT OF SEQ
|
|
C IDIMBV = IEND-ISTART+1 I.E. THE NUMBER OF ELEMENTS IN THE RAM BUFFER
|
|
********
|
|
C change region
|
|
C IF(IDIMV.GT.0)THEN
|
|
C CALL REDEFA
|
|
C +(SEQVC,IDIMV,ISV1,ISV2,MAXCOM,IDIMVA,ISTARV,IENDV,IDIMBV,
|
|
C +DEVNOS(6),KBIN,KBOUT,
|
|
C +IOK,SEQW,LREC,NREC,
|
|
C +HELPS(4),HELPE(4),HELPF,DEVNOS(4),MACTYP,MACSHT,MACLNG)
|
|
C END IF
|
|
*****************
|
|
IF((IOK.NE.0).OR.(IDIMVA.LT.LENGTH)) GO TO 9999
|
|
**********************
|
|
IDIMVP=IDIMVA+LENGTH
|
|
C DECODE CHARACTERS INTO INTEGERS IN ACTIVE REGION
|
|
CALL CONNUM(SEQVC(ISV1-ISTARV+1),SEQV(MSPO21),IDIMVA)
|
|
CALL FILEDG(SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,LENGTH,
|
|
+CHRSET,IDM,MSPO2,ISTARV,IENDV)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
IV1 = ISV1
|
|
I = MIN(MAXSA,IDIMVA) - 1
|
|
IV2 = IV1 + I
|
|
IF(OPT.EQ.3)GO TO 30
|
|
1008 FORMAT(I6)
|
|
WRITE(KBOUT,*)' '
|
|
CALL DSTAT(FILEH,ISH1,ISH2,FILEV,ISV1,ISV2,
|
|
+ LENGTH,MINPRO,MINPER,KBOUT,JSAME,MARKI)
|
|
30 CONTINUE
|
|
C
|
|
C MENU AND OPTION SELECTION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
C
|
|
C
|
|
CALL BPAUSE(KBIN,KBOUT,IOK)
|
|
C IF(IOK.EQ.1) GO TO 9999
|
|
C CALL SHOWFU(KBOUT,' ')
|
|
CALL MENU(OPT,KOPT,MOPT,MAXOPT,MINMEN,KBIN,KBOUT,
|
|
+HELPS(0),HELPE(0),HELPF,DEVNOS(4))
|
|
1010 FORMAT(I6)
|
|
IF(OPT.EQ.18) THEN
|
|
C CALL SHOWFU(KBOUT,'Plot proportional matches')
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL DP20(LENGTH,MXSPAN,IDIMVA,IDIMHA,IDIMVP,IDIMHP,
|
|
+ NOROO,NOROE,MAXSEQ,
|
|
+ SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV,
|
|
+ SEQHC,IDIMBH,ISH1,ISH2,SEQH,
|
|
+ ISTARH,IENDH,LB,LF,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP21(MATMAX,AVSCOR,LENGTH,MINPRO,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
END IF
|
|
CALL CLEARV
|
|
CALL VECTOM
|
|
CALL FRAME(MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX)
|
|
ISAME = 0
|
|
IF((JSAME.EQ.1).AND.(ISH1.EQ.ISV1)) ISAME = 1
|
|
IF(MARKI.EQ.1)THEN
|
|
CALL DIAPRI(SEQV(MSPO21-LB),SEQV(LF+MSPO21),
|
|
+ IDIMVP,SEQH(MSPO21-LB),SEQH(LF+MSPO21),
|
|
+ IDIMHP,MATRIX,IDM,LINEB,LINEC,LINEE,LENGTH,MINPRO,
|
|
+ MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX,KBOUT,ISAME)
|
|
ELSE
|
|
CALL DIAPRO(SEQV(MSPO21-LB),SEQV(LF+MSPO21),
|
|
+ IDIMVP,SEQH(MSPO21-LB),SEQH(LF+MSPO21),
|
|
+ IDIMHP,MATRIX,IDM,LINEB,LINEC,LINEE,LENGTH,MINPRO,
|
|
+ MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX,KBOUT,ISAME)
|
|
END IF
|
|
CALL VT100M
|
|
GO TO 30
|
|
END IF
|
|
IF(OPT.EQ.17) THEN
|
|
C CALL SHOWFU(KBOUT,'Plot identical matches')
|
|
IDO = 1
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL DP22(IDM,MINPER,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
PROMPT(1) = 'Plot'
|
|
PROMPT(2) = 'List'
|
|
CALL RADION('Select output mode',PROMPT,2,IDO,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),KBIN,KBOUT)
|
|
IF (IDO.LT.1) GO TO 30
|
|
END IF
|
|
L17A = MIN(MINPER,L17)
|
|
IDE = (IDM-1)**L17A
|
|
ISAME = 0
|
|
IF((JSAME.EQ.1).AND.(ISH1.EQ.ISV1)) ISAME = 1
|
|
IF (IDO.EQ.1) THEN
|
|
CALL CLEARV
|
|
CALL VECTOM
|
|
CALL FRAME(MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX)
|
|
CALL CFSQ(SEQV(MSPO21),IDIMVA,SEQH(MSPO21),
|
|
+ IDIMHA,POSN,WORDP,IDE,IDM,CONSTS,LCONST,L17A,MINPER,
|
|
+ MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX,KBOUT,ISAME)
|
|
CALL VT100M
|
|
ELSE
|
|
CALL CFSQL(SEQV(MSPO21),IDIMVA,SEQH(MSPO21),
|
|
+ IDIMHA,POSN,WORDP,IDE,IDM,CONSTS,LCONST,L17A,MINPER,
|
|
+ IDEV,KBOUT,ISAME,SEQVC(ISV1),HIST,MAXCOM)
|
|
END IF
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C RESET PROPORTIONAL SCORE
|
|
C
|
|
IF(OPT.EQ.21)THEN
|
|
C CALL SHOWFU(KBOUT,'Reset proportional score')
|
|
CALL DP21(MATMAX,AVSCOR,LENGTH,MINPRO,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C RESET IDENTITIES SCORE
|
|
C
|
|
IF(OPT.EQ.22)THEN
|
|
C CALL SHOWFU(KBOUT,'Reset identities score')
|
|
CALL DP22(IDM,MINPER,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C RESET SPAN (LENGTH)
|
|
C
|
|
IF(OPT.EQ.20)THEN
|
|
C CALL SHOWFU(KBOUT,'Reset span length')
|
|
CALL DP20(LENGTH,MXSPAN,IDIMVA,IDIMHA,IDIMVP,IDIMHP,
|
|
+ NOROO,NOROE,MAXSEQ,
|
|
+ SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV,
|
|
+ SEQHC,IDIMBH,ISH1,ISH2,SEQH,
|
|
+ ISTARH,IENDH,LB,LF,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C RESET HORIZONTAL REGION
|
|
C
|
|
IF(OPT.EQ.4)THEN
|
|
C CALL SHOWFU(KBOUT,'Reset active region')
|
|
CALL QVORH(VORH,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),
|
|
+ KBIN,KBOUT,FILEH,FILEV)
|
|
IF(VORH.EQ.'H')THEN
|
|
CALL GTREG(KBIN,KBOUT,ISTARH,IENDH,ISH1,ISH2,
|
|
+ 'Define active region',
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
CALL REDEFD(IDIMH,ISH1,ISH2,MAXCOM,IDIMHA,ISTARH,IENDH,IDIMBH)
|
|
C CALL REDEFA
|
|
C +(SEQHC,IDIMH,ISH1,ISH2,MAXCOM,IDIMHA,ISTARH,IENDH,IDIMBH,
|
|
C +DEVNOS(5),KBIN,KBOUT,
|
|
C +IOK,SEQW,LREC,NREC,
|
|
C +HELPS(4),HELPE(4),HELPF,DEVNOS(4),MACTYP,MACSHT,MACLNG)
|
|
IDIMHP=IDIMHA+LENGTH
|
|
CALL CONNUM(SEQHC(ISH1-ISTARH+1),SEQH(MSPO21),IDIMHA)
|
|
CALL FILEDG(SEQHC,IDIMBH,ISH1,ISH2,SEQH,MXCOMP,LENGTH,
|
|
+ CHRSET,IDM,MSPO2,ISTARH,IENDH)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
IH1 = ISH1
|
|
I = MIN(MAXSA,IDIMHA) - 1
|
|
IH2 = IH1 + I
|
|
GO TO 30
|
|
END IF
|
|
IF(VORH.EQ.'V')THEN
|
|
C
|
|
C RESET VERTICAL REGION
|
|
C
|
|
CALL GTREG(KBIN,KBOUT,ISTARV,IENDV,ISV1,ISV2,
|
|
+ 'Define active region',
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
CALL REDEFD(IDIMV,ISV1,ISV2,MAXCOM,IDIMVA,
|
|
+ ISTARV,IENDV,IDIMBV)
|
|
C CALL REDEFA
|
|
C +(SEQVC,IDIMV,ISV1,ISV2,MAXCOM,IDIMVA,ISTARV,IENDV,IDIMBV,
|
|
C +DEVNOS(6),KBIN,KBOUT,
|
|
C +IOK,SEQW,LREC,NREC,
|
|
C +HELPS(4),HELPE(4),HELPF,DEVNOS(4),MACTYP,MACSHT,MACLNG)
|
|
IDIMVP=IDIMVA+LENGTH
|
|
C DECODE CHARACTERS INTO INTEGERS IN ACTIVE REGION
|
|
CALL CONNUM(SEQVC(ISV1-ISTARV+1),SEQV(MSPO21),IDIMVA)
|
|
CALL FILEDG(SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,LENGTH,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
I = MIN(MAXSA,IDIMVA) - 1
|
|
IV1 = ISV1
|
|
IV2 = IV1 + I
|
|
GO TO 30
|
|
END IF
|
|
END IF
|
|
C
|
|
C WRITE ALIGNED SEQUENCES
|
|
C
|
|
IF(OPT.EQ.5)THEN
|
|
C CALL SHOWFU(KBOUT,'List sequences')
|
|
CALL WRITAL(SEQHC,IDIMBH,ISTARH,IENDH,
|
|
+ SEQVC,IDIMBV,ISTARV,IENDV,IDEV,KBIN,KBOUT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C XHAIRS
|
|
C
|
|
IF(OPT.EQ.13)THEN
|
|
C CALL SHOWFU(KBOUT,'Use crosshair')
|
|
XMIN=ISH1
|
|
XMAX=ISH2
|
|
YMIN=ISV1
|
|
YMAX=ISV2
|
|
CALL CLEARV
|
|
CALL XHAIRN(XMAX,XMIN,YMAX,YMIN,MARGL,MARGR,MARGB,MARGT,
|
|
+ ISXMAX,ISYMAX,IHX,IHY,N,KBOUT,
|
|
+ SEQHC,ISTARH,IDIMBH,SEQVC,ISTARV,IDIMBV,2)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C RULER
|
|
C
|
|
IF(OPT.EQ.12)THEN
|
|
C CALL SHOWFU(KBOUT,'Display ruler')
|
|
WRITE(KBOUT,*)' Horizontal scale'
|
|
CALL RULER(ISH1,ISH2,MARGL,MARGR,MARGB,MARGT,
|
|
+ ISXMAX,ISYMAX,KBIN,KBOUT,1,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
WRITE(KBOUT,*)' Vertical scale'
|
|
CALL RULER(ISV1,ISV2,MARGL,MARGR,MARGB,MARGT,
|
|
+ ISXMAX,ISYMAX,KBIN,KBOUT,2,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C CLEAR GRAPHICS
|
|
C
|
|
IF(OPT.EQ.10)THEN
|
|
CALL CLEARG
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C KLEAR TEXT
|
|
C
|
|
IF(OPT.EQ.11)THEN
|
|
CALL CLEARV
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C CALCULATE EXPECTED SCORES
|
|
C
|
|
IF(OPT.EQ.23)THEN
|
|
C CALL SHOWFU(KBOUT,'Calculate expected proportional scores')
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL DP20(LENGTH,MXSPAN,IDIMVA,IDIMHA,IDIMVP,IDIMHP,
|
|
+ NOROO,NOROE,MAXSEQ,
|
|
+ SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV,
|
|
+ SEQHC,IDIMBH,ISH1,ISH2,SEQH,
|
|
+ ISTARH,IENDH,LB,LF,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP21(MATMAX,AVSCOR,LENGTH,MINPRO,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
END IF
|
|
C ARRAYS LARGE ENOUGH?
|
|
ITEMP=MATMAX*LENGTH
|
|
IF(ITEMP.LE.IDPOLY)THEN
|
|
CALL DIAEXP(SEQVC,IDIMBV,SEQHC,IDIMBH,
|
|
+ MATRIX,IDM,LENGTH,MATMAX,POLYA,POLYB,IDPOLY,KBIN,KBOUT,
|
|
+ IDEV,CHRSET,NOROE,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
GO TO 30
|
|
END IF
|
|
C OVER RANGE
|
|
CALL ERROM(KBOUT,
|
|
+'Polynomial out of range with this span and matrix')
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C CALCULATE OBSERVED SCORES (NO PLOTING)
|
|
C
|
|
IF(OPT.EQ.24)THEN
|
|
C CALL SHOWFU(KBOUT,'Calculate observed proportional scores')
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL DP20(LENGTH,MXSPAN,IDIMVA,IDIMHA,IDIMVP,IDIMHP,
|
|
+ NOROO,NOROE,MAXSEQ,
|
|
+ SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV,
|
|
+ SEQHC,IDIMBH,ISH1,ISH2,SEQH,
|
|
+ ISTARH,IENDH,LB,LF,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP21(MATMAX,AVSCOR,LENGTH,MINPRO,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
END IF
|
|
ISAME = 0
|
|
IF((JSAME.EQ.1).AND.(ISH1.EQ.ISV1)) ISAME = 1
|
|
CALL DIAOBS(SEQV(MSPO21-LB),SEQV(LF+MSPO21),IDIMVP,
|
|
+ SEQH(MSPO21-LB),SEQH(LF+MSPO21),IDIMHP,MATRIX,IDM,
|
|
+ LINEB,LINEC,LINEE,LENGTH,NOROO,PERC,SCORE,IDPOLY,KBIN,KBOUT,
|
|
+ IDEV,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),ISAME)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C SHOW CURRENT PARAMETERS
|
|
C
|
|
IF(OPT.EQ.25)THEN
|
|
CALL CLEARV
|
|
C CALL SHOWFU(KBOUT,'Show settings')
|
|
CALL DSTAT(FILEH,ISH1,ISH2,FILEV,ISV1,ISV2,
|
|
+ LENGTH,MINPRO,MINPER,KBOUT,JSAME,MARKI)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C QUICK SCAN
|
|
C
|
|
IF(OPT.EQ.26)THEN
|
|
C CALL SHOWFU(KBOUT,'Quick scan')
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL DP22(IDM,MINPER,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP20(LENGTH,MXSPAN,IDIMVA,IDIMHA,IDIMVP,IDIMHP,
|
|
+ NOROO,NOROE,MAXSEQ,
|
|
+ SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV,
|
|
+ SEQHC,IDIMBH,ISH1,ISH2,SEQH,
|
|
+ ISTARH,IENDH,LB,LF,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP21(MATMAX,AVSCOR,LENGTH,MINPRO,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP33(RNSD,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
END IF
|
|
CALL CLEARV
|
|
CALL VECTOM
|
|
CALL FRAME(MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX)
|
|
L17A = MIN(MINPER,L17)
|
|
IDE = (IDM-1)**L17A
|
|
CALL VT100M
|
|
ISAME = 0
|
|
IF((JSAME.EQ.1).AND.(ISH1.EQ.ISV1)) ISAME = 1
|
|
CALL QICKS(SEQV(MSPO21),IDIMVA,POSN,WORDP,IDE,SEQH(MSPO21),
|
|
+ IDIMHA,CONSTS,L17A,IDM,LCONST,HIST,
|
|
+ MAXCOM,MATRIX,SEQS,
|
|
+ MAIND,MARGL,MARGR,MARGB,MARGT,ISXMAX,ISYMAX,
|
|
+ LENGTH,MINPRO,KBOUT,RNSD,ISAME)
|
|
CALL VT100M
|
|
C CALL SHOBOX(SEQVC,IDIMBV,SEQHC,IDIMBH,IWX1,IWX2,IWX3,IWX4,
|
|
C + HELPS(OPT),HELPE(OPT),
|
|
C + HELPF,DEVNOS(4),KBIN,KBOUT,ISTARH,ISTARV,IENDH,IENDV)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C EDIT
|
|
C
|
|
IF(OPT.EQ.9)THEN
|
|
C CALL SHOWFU(KBOUT,'Edit sequences')
|
|
CALL ALIGN(SEQVC,IDIMV,SEQHC,IDIMH,MAXSEQ,KBIN,KBOUT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),ISTARV,IENDV,
|
|
+ ISTARH,IENDH,FILEH,FILEV)
|
|
WRITE(KBOUT,1003)
|
|
1003 FORMAT(
|
|
+' Warning: if you have just edited either sequence you must',/,
|
|
+' redefine the active region before comparing the sequences')
|
|
C MAY HAVE CHANGED SEQUENCE SO REDO INTEGER VERSION
|
|
C DECODE CHARACTERS INTO INTEGERS IN ACTIVE REGION
|
|
C CALL CONNUM(SEQVC(ISV1-ISTARV+1),SEQV(MSPO21),IDIMVA,CHRSET,IDM)
|
|
C CALL FILEDG(SEQVC,IDIMVA,ISV1,ISV2,SEQV,MXCOMP,LENGTH,
|
|
C +CHRSET,IDM,MSPO2,ISTARV,IENDV)
|
|
C DECODE CHARACTERS INTO INTEGERS IN ACTIVE REGION
|
|
C CALL CONNUM(SEQHC(ISH1-ISTARH+1),SEQH(MSPO21),IDIMHA,CHRSET,IDM)
|
|
C CALL FILEDG(SEQHC,IDIMHA,ISH1,ISH2,SEQH,MXCOMP,LENGTH,
|
|
C +CHRSET,IDM,MSPO2,ISTARH,IENDH)
|
|
C NOROO='N'
|
|
C NOROE='N'
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C WRITE HORIZONTAL SEQUENCE TO DISK
|
|
C
|
|
IF(OPT.EQ.8)THEN
|
|
C CALL SHOWFU(KBOUT,'Save active sequence')
|
|
CALL QVORH(VORH,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),
|
|
+ KBIN,KBOUT,FILEH,FILEV)
|
|
IF(VORH.EQ.'H')THEN
|
|
CALL WRTACT(DEVNOS(1),FILOUT,KBIN,KBOUT,
|
|
+ SEQHC(ISH1),IDIMHA,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C WRITE VERTICAL SEQUENCE TO DISK
|
|
C
|
|
IF(VORH.EQ.'V')THEN
|
|
CALL WRTACT(DEVNOS(1),FILOUT,KBIN,KBOUT,
|
|
+ SEQVC(ISV1),IDIMVA,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
GO TO 30
|
|
END IF
|
|
END IF
|
|
C
|
|
C STOP
|
|
C
|
|
IF(OPT.EQ.2) GO TO 9999
|
|
C
|
|
C DRAW A /
|
|
C
|
|
IF(OPT.EQ.27)THEN
|
|
C CALL SHOWFU(KBOUT,'Draw diagonal line')
|
|
CALL VECTOM
|
|
CALL DIALIN(ISXMAX,ISYMAX,MARGL,MARGR,MARGB,MARGT)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C GIVE HELP
|
|
C
|
|
IF(OPT.EQ.1)THEN
|
|
C CALL SHOWFU(KBOUT,'Help')
|
|
CALL HELP(HELPS,HELPE,BOTOPT,TOPOPT,HELPF,DEVNOS(4),KBIN,KBOUT)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C READ NEW SEQUENCE
|
|
C
|
|
IF(OPT.EQ.3)THEN
|
|
C CALL SHOWFU(KBOUT,'Read new sequence')
|
|
CALL QVORH(VORH,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),
|
|
+ KBIN,KBOUT,FILEH,FILEV)
|
|
IF(VORH.EQ.'H')GO TO 20
|
|
IF(VORH.EQ.'V')GO TO 21
|
|
END IF
|
|
C
|
|
C CHANGE MARGINS
|
|
C
|
|
IF(OPT.EQ.14)THEN
|
|
C CALL SHOWFU(KBOUT,'Change margins')
|
|
CALL MARGC1(ISXMAX,ISYMAX,MARGL,MARGR,MARGB,MARGT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),KBIN,KBOUT)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C LIST MATCHING SPANS
|
|
C
|
|
IF(OPT.EQ.19)THEN
|
|
C CALL SHOWFU(KBOUT,'List matching spans')
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL DP20(LENGTH,MXSPAN,IDIMVA,IDIMHA,IDIMVP,IDIMHP,
|
|
+ NOROO,NOROE,MAXSEQ,
|
|
+ SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV,
|
|
+ SEQHC,IDIMBH,ISH1,ISH2,SEQH,
|
|
+ ISTARH,IENDH,LB,LF,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
CALL DP21(MATMAX,AVSCOR,LENGTH,MINPRO,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
END IF
|
|
ISAME = 0
|
|
IF((JSAME.EQ.1).AND.(ISH1.EQ.ISV1)) ISAME = 1
|
|
CALL DIAPRW(SEQV(MSPO21-LB),SEQV(LF+MSPO21),
|
|
+ IDIMVP,SEQH(MSPO21-LB),SEQH(LF+MSPO21),
|
|
+ IDIMHP,MATRIX,IDM,LINEB,LINEC,LINEE,
|
|
+ LENGTH,MINPRO,SEQVC,IDIMBV,SEQHC,IDIMBH,
|
|
+ KBOUT,IDEV,ISV1,ISH1,ISTARH,ISTARV,ISAME)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C LABEL
|
|
C
|
|
IF(OPT.EQ.15)THEN
|
|
C CALL SHOWFU(KBOUT,'Label a diagram')
|
|
CALL LABLER(KBIN,KBOUT,ISXMAX,ISYMAX,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
END IF
|
|
C
|
|
C type text
|
|
C
|
|
IF(OPT.EQ.6)THEN
|
|
C CALL SHOWFU(KBOUT,'Page through a text file')
|
|
CALL TTEXT(DEVNOS(1),FILNAM,KBIN,KBOUT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
END IF
|
|
C
|
|
C DIRECT OUTPUT TO DISK
|
|
C
|
|
IF(OPT.EQ.7)THEN
|
|
C CALL SHOWFU(KBOUT,'Redirect output')
|
|
CALL REDIR(IDEV,DEVNOS(2),DEVNOS(3),IGORT,FILNAM,KBIN,KBOUT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),KOPT)
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C ALIGN
|
|
C
|
|
IF(OPT.EQ.28)THEN
|
|
C CALL SHOWFU(KBOUT,'Align the sequences')
|
|
IF(KOPT.EQ.1) THEN
|
|
WRITE(KBOUT,1019)
|
|
CALL BPAUSE(KBIN,KBOUT,IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
XMIN=ISH1
|
|
XMAX=ISH2
|
|
YMIN=ISV1
|
|
YMAX=ISV2
|
|
CALL CLEARV
|
|
CALL XHAIRN(XMAX,XMIN,YMAX,YMIN,MARGL,MARGR,MARGB,MARGT,
|
|
+ ISXMAX,ISYMAX,IHX,IHY,N,KBOUT,
|
|
+ SEQHC,ISTARH,IDIMBH,SEQVC,ISTARV,IDIMBV,2)
|
|
IH1 = MAX(1,IHX)
|
|
IV1 = MAX(1,IHY)
|
|
CALL XHAIRN(XMAX,XMIN,YMAX,YMIN,MARGL,MARGR,MARGB,MARGT,
|
|
+ ISXMAX,ISYMAX,IHX,IHY,N,KBOUT,
|
|
+ SEQHC,ISTARH,IDIMBH,SEQVC,ISTARV,IDIMBV,2)
|
|
IH2 = MIN(IHX,IDIMH)
|
|
IV2 = MIN(IHY,IDIMV)
|
|
END IF
|
|
LENV = IV2 - IV1 + 1
|
|
LENH = IH2 - IH1 + 1
|
|
IF((LENV.LT.10).OR.(LENH.LT.10)
|
|
+ .OR.(LENV.GT.MAXSA).OR.(LENH.GT.MAXSA)) THEN
|
|
WRITE(KBOUT,1019)
|
|
1019 FORMAT(/,
|
|
+' Define the region to align using the cross-hair.',/,
|
|
+' First identify the bottom left position and exit',/,
|
|
+' the cross-hair routine. Then the top right.')
|
|
GO TO 30
|
|
END IF
|
|
IF(KOPT.EQ.1) THEN
|
|
CALL GETGAP(KBIN,KBOUT,IGAPG,IGAPH,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IDM,IOK)
|
|
IF(IOK.NE.0) GO TO 30
|
|
END IF
|
|
WRITE(KBOUT,*)'Aligning region',IV1,' to',IV2
|
|
WRITE(KBOUT,*)' with region',IH1,' to',IH2
|
|
CALL PAMDIS(MATRIX,WTS,IDM)
|
|
CALL ALIGNM(SEQV(MSPO21+IV1-ISV1),SEQH(MSPO21+IH1-ISH1),
|
|
+ LENV,LENH,CC,DD,RR,SS,SOP,MAXSA,IV1,IH1,IDIMBV,IDIMBH,
|
|
+ MAXSEQ,
|
|
+ WTS,IDM,ISCORE,IGAPG,IGAPH,KBIN,KBOUT,IDEV,SEQVC,
|
|
+ SEQHC,SEQ1A,SEQ2A,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),KEEP,STACK,MAXSTK,STKREC,
|
|
+ IOK)
|
|
NOROE = 'N'
|
|
NOROO = 'N'
|
|
IF(IOK.NE.0)GO TO 30
|
|
C IDIMH = THE ACTUAL SEQUENCE LENGTH (AND THEREFORE THE NUMBER OF ELEMENTS
|
|
C IN THE DISK BUFFER)
|
|
C ISTARH = THE SEQUENCE NUMBER OF THE CHARACTER OCCUPYING SEQHC(1)
|
|
C ISH1 = THE SEQUENCE NUMBER OF THE FIRST CHARACTER IN THE ACTIVE REGION
|
|
C ISH2 = THE SEQUENCE NUMBER OF THE LAST CHARACTER IN THE ACTIVE REGION
|
|
C IDIMHA = ISH2-ISH11+1 I.E. THE NUMBER OF ELEMENTS IN THE ACTIVE REGION
|
|
C IENDH = THE SEQUENCE NUMBER OF THE LAST ELEMENT OF SEQ
|
|
C IDIMBH = IEND-ISTART+1 I.E. THE NUMBER OF ELEMENTS IN THE RAM BUFFER
|
|
IF(KEEP.EQ.0) THEN
|
|
WRITE(KBOUT,1004)
|
|
1004 FORMAT(' Warning: active region extended rightwards')
|
|
C NEXT FOUR LINES FOR NONDISKBUFFERED VERSION !!!!!!!!!!!
|
|
IDIMV = MAX(IDIMV,IDIMBV)
|
|
IDIMBV = IDIMV
|
|
IDIMH = MAX(IDIMH,IDIMBH)
|
|
IDIMBH = IDIMH
|
|
IENDV = IDIMV
|
|
IENDH = IDIMH
|
|
ISV2 = MIN(IENDV,ISV1+MAXCOM-1)
|
|
ISH2 = MIN(IENDH,ISH1+MAXCOM-1)
|
|
IDIMVA = ISV2 - ISV1 + 1
|
|
IENDBV = IENDV - ISTARV + 1
|
|
IDIMHA = ISH2 - ISH1 + 1
|
|
IENDBH = IENDH - ISTARH + 1
|
|
IDIMHP=IDIMHA+LENGTH
|
|
CALL CONNUM(SEQHC(ISH1-ISTARH+1),SEQH(MSPO21),IDIMHA)
|
|
CALL FILEDG(SEQHC,IDIMBH,ISH1,ISH2,SEQH,MXCOMP,LENGTH,
|
|
+ CHRSET,IDM,MSPO2,ISTARH,IENDH)
|
|
IDIMVP=IDIMVA+LENGTH
|
|
CALL CONNUM(SEQVC(ISV1-ISTARV+1),SEQV(MSPO21),IDIMVA)
|
|
CALL FILEDG(SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,LENGTH,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
END IF
|
|
GO TO 30
|
|
END IF
|
|
********
|
|
C
|
|
C COMPLEMENT SEQUENCE
|
|
C
|
|
IF(OPT.EQ.29)THEN
|
|
C CALL SHOWFU(KBOUT,'Complement sequence')
|
|
IF(IDM.EQ.26)THEN
|
|
WRITE(KBOUT,*)'Not done for proteins!'
|
|
GO TO 30
|
|
ELSE
|
|
CALL QVORH(VORH,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),
|
|
+ KBIN,KBOUT,FILEH,FILEV)
|
|
IF(VORH.EQ.'H')THEN
|
|
CALL SQREV(SEQHC,IDIMBH)
|
|
CALL SQCOM(SEQHC,IDIMBH)
|
|
CALL CONNUM(SEQHC(ISH1-ISTARH+1),SEQH(MSPO21),IDIMHA)
|
|
CALL FILEDG(SEQHC,IDIMBH,ISH1,ISH2,SEQH,MXCOMP,LENGTH,
|
|
+ CHRSET,IDM,MSPO2,ISTARH,IENDH)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
GO TO 30
|
|
END IF
|
|
IF(VORH.EQ.'V')THEN
|
|
CALL SQREV(SEQVC,IDIMBV)
|
|
CALL SQCOM(SEQVC,IDIMBV)
|
|
C DECODE CHARACTERS INTO INTEGERS IN ACTIVE REGION
|
|
CALL CONNUM(SEQVC(ISV1-ISTARV+1),SEQV(MSPO21),IDIMVA)
|
|
CALL FILEDG(SEQVC,IDIMBV,ISV1,ISV2,SEQV,MXCOMP,LENGTH,
|
|
+ CHRSET,IDM,MSPO2,ISTARV,IENDV)
|
|
NOROO='N'
|
|
NOROE='N'
|
|
GO TO 30
|
|
END IF
|
|
END IF
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C SWITCH MAIN DIAGONAL
|
|
C
|
|
IF(OPT.EQ.30)THEN
|
|
C CALL SHOWFU(KBOUT,'Toggle main diagonal switch')
|
|
CALL SWTCHD(JSAME,KBIN,KBOUT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
NOROO='N'
|
|
GO TO 30
|
|
END IF
|
|
IF(OPT.EQ.31)THEN
|
|
C CALL SHOWFU(KBOUT,'Toggle identities switch')
|
|
CALL SWTCHI(MARKI,KBIN,KBOUT,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
GO TO 30
|
|
END IF
|
|
C
|
|
C CHANGE SCORE MATRIX
|
|
C
|
|
IF(OPT.EQ.32)THEN
|
|
C CALL SHOWFU(KBOUT,'Select score matrix')
|
|
CALL MATTIN(MATRIX,IDM,FILNAM,FILEP,CHRSET,
|
|
+ KBIN,KBOUT,DEVNOS(1),MATMAX,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4))
|
|
C SET AVERAGE SCORE FOR DEFAULTS
|
|
AVSCOR=0.75
|
|
IF(MATMAX.GT.3)AVSCOR=AVSCOR*16.
|
|
NOROO='N'
|
|
NOROE='N'
|
|
GO TO 30
|
|
END IF
|
|
IF(OPT.EQ.33) THEN
|
|
C CALL SHOWFU(KBOUT,'Reset number of standard deviations')
|
|
CALL DP33(RNSD,
|
|
+ KBIN,KBOUT,HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IOK)
|
|
GO TO 30
|
|
END IF
|
|
IF(OPT.EQ.34) THEN
|
|
C CALL SHOWFU(KBOUT,'Reset gap penalties')
|
|
CALL GETGAP(KBIN,KBOUT,IGAPG,IGAPH,
|
|
+ HELPS(OPT),HELPE(OPT),HELPF,DEVNOS(4),IDM,IOK)
|
|
GO TO 30
|
|
END IF
|
|
GO TO 30
|
|
9999 CONTINUE
|
|
CALL SHUTD
|
|
END
|