96 lines
2.9 KiB
Fortran
96 lines
2.9 KiB
Fortran
SUBROUTINE MOVGEL(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,IDBSIZ,
|
|
+GEL,FROM,TO,IDEVR,IDEVW,IDEVN,MAXGEL,KBOUT)
|
|
C Subroutine to move a gel from line from to line to
|
|
C Extended 22-5-91
|
|
C AUTHOR: RODGER STADEN
|
|
INTEGER RELPG(IDBSIZ),FROM,TO
|
|
INTEGER LNGTHG(IDBSIZ),LNBR(IDBSIZ),RNBR(IDBSIZ)
|
|
CHARACTER NAMGEL*16,GEL(MAXGEL)
|
|
INTEGER GCLIN,CHAINL
|
|
LOGICAL LEFTE,RIGHTE
|
|
EXTERNAL GCLIN,CHAINL
|
|
LEFTE = .FALSE.
|
|
RIGHTE = .FALSE.
|
|
C
|
|
C left end ?
|
|
C
|
|
IF(LNBR(FROM).EQ.0) LEFTE = .TRUE.
|
|
C
|
|
C right end ?
|
|
C
|
|
IF(RNBR(FROM).EQ.0) RIGHTE = .TRUE.
|
|
C
|
|
C if both true remove the contig line, then overwrite the gel
|
|
C
|
|
IF(LEFTE.AND.RIGHTE) THEN
|
|
NCONTO = GCLIN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,
|
|
+ IDBSIZ,FROM)
|
|
IF(NCONTO.EQ.0)THEN
|
|
WRITE(KBOUT,*)
|
|
+ 'This gel has no left neighbour but does not'
|
|
WRITE(KBOUT,*)'appear in a contig line!'
|
|
ELSE
|
|
LNBR(NCONTO) = TO
|
|
RNBR(NCONTO) = TO
|
|
CALL WRITER(IDEVR,NCONTO,RELPG(NCONTO),LNGTHG(NCONTO),
|
|
+ LNBR(NCONTO),RNBR(NCONTO))
|
|
END IF
|
|
ELSE IF(LEFTE) THEN
|
|
NCONTO = GCLIN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,
|
|
+ IDBSIZ,FROM)
|
|
IF(NCONTO.EQ.0)THEN
|
|
WRITE(KBOUT,*)
|
|
+ 'This gel has no left neighbour but does not'
|
|
WRITE(KBOUT,*)'appear in a contig line!'
|
|
ELSE
|
|
LNBR(NCONTO) = TO
|
|
CALL WRITER(IDEVR,NCONTO,RELPG(NCONTO),LNGTHG(NCONTO),
|
|
+ LNBR(NCONTO),RNBR(NCONTO))
|
|
END IF
|
|
ELSE IF(RIGHTE) THEN
|
|
I = CHAINL(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,
|
|
+ IDBSIZ,FROM)
|
|
NCONTO = GCLIN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,
|
|
+ IDBSIZ,I)
|
|
IF(NCONTO.EQ.0)THEN
|
|
WRITE(KBOUT,*)
|
|
+ 'This gel has no right neighbour and does not'
|
|
WRITE(KBOUT,*)'appear in a contig!'
|
|
ELSE
|
|
IF(RNBR(NCONTO).NE.FROM)THEN
|
|
WRITE(KBOUT,*)
|
|
+ 'This gel has no right neighbour but does not'
|
|
WRITE(KBOUT,*)'appear in a contig line!'
|
|
ELSE
|
|
RNBR(NCONTO) = TO
|
|
CALL WRITER(IDEVR,NCONTO,RELPG(NCONTO),LNGTHG(NCONTO),
|
|
+ LNBR(NCONTO),RNBR(NCONTO))
|
|
END IF
|
|
END IF
|
|
END IF
|
|
RELPG(TO)=RELPG(FROM)
|
|
LNGTHG(TO)=LNGTHG(FROM)
|
|
LNBR(TO)=LNBR(FROM)
|
|
RNBR(TO)=RNBR(FROM)
|
|
CALL READW(IDEVW,FROM,GEL,MAXGEL)
|
|
CALL WRITEW(IDEVW,TO,GEL,MAXGEL)
|
|
CALL READN(IDEVN,FROM,NAMGEL)
|
|
CALL WRITEN(IDEVN,TO,NAMGEL)
|
|
CALL WRITER(IDEVR,TO,RELPG(TO),LNGTHG(TO),
|
|
+LNBR(TO),RNBR(TO))
|
|
C Do neighbours
|
|
IF(LNBR(FROM).NE.0) THEN
|
|
I=LNBR(FROM)
|
|
RNBR(I)=TO
|
|
CALL WRITER(IDEVR,I,RELPG(I),LNGTHG(I),
|
|
+ LNBR(I),RNBR(I))
|
|
END IF
|
|
IF(RNBR(FROM).NE.0) THEN
|
|
I=RNBR(FROM)
|
|
LNBR(I)=TO
|
|
CALL WRITER(IDEVR,I,RELPG(I),LNGTHG(I),
|
|
+ LNBR(I),RNBR(I))
|
|
END IF
|
|
CALL MOVTAG(FROM,TO)
|
|
END
|