staden-lg/src/staden/xsapConEdit.f

138 lines
4.6 KiB
Fortran

C 1-10-91 SD Remove prompting from CONEDT and JOINED
C 1-10-91 SD Removed LLINOL and LLINOR from DOJOIN
C 20-Aug-92 SD Added new IOK argument to CXEDIT and JXEDIT call
C
SUBROUTINE CONEDT(KBIN,KBOUT,
+GELNOS,GELSTR,GELEND,
+MAXDB,GELNO,LINNO,MAXLIN,RELPG,LNGTHG,LNBR,RNBR,
+IDBSIZ,NGELS,NCONTS,GEL,GEL2,MAXGEL,LINCON,PERCD,IDM,
+IHELPS,IHELPE,HELPF,IDEVH,IDEV,IDEV1,IDEV2,IDEV3,
+IDEVT,IDEVC,LINLEN,FILNAM,LLINO,IOK,IERR,TEMP1)
C AUTHOR: SIMON DEAR
INTEGER RELPG(MAXDB),LNGTHG(MAXDB),LNBR(MAXDB),RNBR(MAXDB)
CHARACTER GEL(MAXGEL),GEL2(MAXGEL)
CHARACTER FILNAM*(*),HELPF*(*)
INTEGER GELNOS(MAXDB),GELSTR(MAXDB),GELEND(MAXDB)
INTEGER GELNO(MAXLIN,2),LINNO(MAXLIN,2)
CALL SHOWFU(KBOUT,'Contig editor')
C WRITE(KBOUT,*)'Identify contig to edit'
CALL GETLN2(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LINCON,
+LLINO,IGELNO,IOK,IDBSIZ,KBIN,KBOUT,IDEV3,
+IHELPS,IHELPE,HELPF,IDEVH)
IF(IOK.NE.0) RETURN
CALL CXEDIT(IDEV1,IDEV2,IDEV3,IDEVT,IDEVC,
+RELPG,LNGTHG,LNBR,RNBR,MAXGEL,
+IDBSIZ,LINCON,LLINO,IGELNO,1,PERCD,IDM,0,IOK)
CALL DBCHEK(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,IDBSIZ,
+TEMP1,IERR,KBOUT)
END
SUBROUTINE JOINED(KBIN,KBOUT,
+GELNOS,GELSTR,GELEND,
+MAXDB,GELNO,LINNO,MAXLIN,RELPG,LNGTHG,LNBR,RNBR,
+IDBSIZ,NGELS,NCONTS,GEL,GEL2,MAXGEL,LINCON,PERCD,IDM,
+IHELPS,IHELPE,HELPF,IDEVH,IDEV,IDEV1,IDEV2,IDEV3,
+IDEVT,IDEVC,LINLEN,FILNAM,LLINO,IOK,IERR,TEMP1)
C AUTHOR: SIMON DEAR
INTEGER RELPG(MAXDB),LNGTHG(MAXDB),LNBR(MAXDB),RNBR(MAXDB)
CHARACTER GEL(MAXGEL),GEL2(MAXGEL)
CHARACTER FILNAM*(*),HELPF*(*)
INTEGER GELNOS(MAXDB),GELSTR(MAXDB),GELEND(MAXDB)
INTEGER GELNO(MAXLIN,2),LINNO(MAXLIN,2)
C JOIN
CALL SHOWFU(KBOUT,'Join editor')
C JOIN
WRITE(KBOUT,1006)
1006 FORMAT(' Which contigs do you want to join ?')
C WRITE(KBOUT,1017)
C1017 FORMAT( ' Left contig')
LLINOL = 0
LLINOR = 0
CALL GETLN2(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LNCONL,
+LLINOL,IGELL,IOK,IDBSIZ,KBIN,KBOUT,IDEV3,
+IHELPS,IHELPE,HELPF,IDEVH)
IF(IOK.EQ.0)THEN
C WRITE(KBOUT,1018)
C1018 FORMAT( ' Right contig')
CALL GETLN2(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LNCONR,
+ LLINOR,IGELR,IOK,IDBSIZ,KBIN,KBOUT,IDEV3,
+ IHELPS,IHELPE,HELPF,IDEVH)
IF(IOK.EQ.0)THEN
C CHECK TO SEE IF MAKING A CIRCLE!
IF(LLINOL.EQ.LLINOR)THEN
WRITE(KBOUT,*)' Making circles is not allowed!'
GO TO 200
END IF
CALL JXEDIT(IDEV1,IDEV2,IDEV3,IDEVT,IDEVC,
+ RELPG,LNGTHG,LNBR,RNBR,MAXGEL,
+ IDBSIZ,LNCONL,LLINOL,LNCONR,LLINOR,
+ IGELL,1,IGELR,1,PERCD,NGELS,NCONTS,IDM,0,IOK)
CALL DBCHEK(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,IDBSIZ,
+ TEMP1,IERR,KBOUT)
END IF
END IF
200 CONTINUE
END
SUBROUTINE DOJOIN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,
+LNCONL,LNCONR,
+IDBSIZ,IDEVR,IDEVW,
+RELX)
C AUTHOR: RODGER STADEN
C TAKEN FROM: JOIN
INTEGER LLINOL,LLINOR
INTEGER RELPG(IDBSIZ)
INTEGER X,RELX
INTEGER LNGTHG(IDBSIZ),RNBR(IDBSIZ),LNBR(IDBSIZ)
C SET UP LLINOL, LLINOR
LLINOL = LNBR(LNCONL)
LLINOR = LNBR(LNCONR)
C COMPLETE JOIN
C ADJUST ALL RELATIVE POSITIONS IN RIGHT CONTIG
N=LLINOR
RELPG(N)=RELX
50 CONTINUE
IF(RNBR(N).EQ.0)GO TO 60
N=RNBR(N)
RELPG(N)=RELPG(N)+RELX-1
GO TO 50
60 CONTINUE
C
C FIX UP NEW GEL LINE FOR OLD LEFT OF RIGHT CONTIG
LNBR(LLINOR)=RNBR(LNCONL)
C FIX UP RIGHT GEL OF LEFT CONTIG
N=RNBR(LNCONL)
RNBR(N)=LLINOR
CALL MERGE(RELPG,LNGTHG,LNBR,RNBR,LNCONL,IDBSIZ)
C MERGE DOES NOT WRITE TO DISK
N=LNBR(LNCONL)
65 CONTINUE
CALL WRITER(IDEVR,N,RELPG(N),LNGTHG(N),
+LNBR(N),RNBR(N))
N=RNBR(N)
IF(N.NE.0)GO TO 65
C CONTIG LINES
X=RELPG(LNCONR)+RELX-1
IF(X.GT.RELPG(LNCONL))RELPG(LNCONL)=X
CALL WRITER(IDEVR,LNCONL,RELPG(LNCONL),LNGTHG(LNCONL),
+LNBR(LNCONL),RNBR(LNCONL))
C NOW MOVE ALL DATA DOWN TO DELETE OLD RIGHT END
N=IDBSIZ-NCONTS
M=LNCONR-N
IF(M.EQ.0)GO TO 80
K=LNCONR
J=LNCONR-1
DO 70 I=1,M
RELPG(K)=RELPG(J)
LNGTHG(K)=LNGTHG(J)
LNBR(K)=LNBR(J)
RNBR(K)=RNBR(J)
CALL WRITER(IDEVR,K,RELPG(K),LNGTHG(K),
+LNBR(K),RNBR(K))
K=K-1
J=J-1
70 CONTINUE
80 CONTINUE
NCONTS=NCONTS-1
CALL WRITER(IDEVR,IDBSIZ,NGELS,NCONTS,NGELS,NCONTS)
RETURN
END