C************************************************************* C C This code is distributed under the terms and conditions of the C CCP4 licence agreement as `Part ii)' software. See the conditions C in the CCP4 manual for a copyright statement. C C************************************************************** PROGRAM COORDS_CONV c this program converts various coordinate formats to c brookhaven c c it could be extended... c c It reads cell dimensions and orthogonalises c the coordinates C .. C .. Parameters .. INTEGER NPARM PARAMETER (NPARM = 200) C .. C .. Local Scalars .. REAL B,OCC,PI,UF,VOL,XF,XO,YF,YO,ZF,ZO INTEGER I,IATTYP,ICN,ICNT,IDUM,IFAIL,INTYPE,IRES,IS,ISHELX,ITOK, + IXYZIN,IXYZOUT,IOUT,IZ,J,LL,LUNOUT,NCODEI,NCODEO,NTOK, + OUTYPE CHARACTER*1 MAT1,MCH,ALTCOD,INSCOD CHARACTER*4 KEY,MAT,PDBMAT,MCH4,MRES,RESNO,ID,SEGID CHARACTER*10 WORD,OUTLOG CHARACTER*80 LIN80,REMARK CHARACTER*600 LINE CHARACTER*80 LINE80 LOGICAL LEND,IPRINT C .. C .. Local Arrays .. REAL BIN(6),CELL(6),FVALUE(NPARM),ROIN(4,4),RFIN(4,4),ROOUT(4,4), + RFOUT(4,4),roxp(4,4),rfxp(4,4),RR(3,3,6) INTEGER IBEG(NPARM),IDEC(NPARM),IEND(NPARM),ITYPE(NPARM) CHARACTER*4 CVALUE(NPARM) C .. C .. External Functions .. INTEGER LUNSTO LOGICAL CCPONL EXTERNAL CCPONL,LUNSTO C .. C .. External Routines .. EXTERNAL CCPDPN,CCPERR,CCPFYP,CCPRCS,CCPUPC,CVFRAC2,GTPINT, + GTPREA,MTZINI,PARSER,RBFRO1,RBRINV,RBRORF, + XYZADVANCE,XYZATOM,XYZCLOSE, + XYZCOORD,XYZINIT,XYZOPEN,WBCELL C .. C .. Data Statements .. DATA PI /3.14159/ LUNOUT=LUNSTO(IDUM) CALL CCPRCS (LUNOUT,'COORDCONV', '$Date: 2001/10/01 15:17:26 $') CALL CCPFYP CALL MTZINI CALL XYZINIT C SETTING UP INPUT AND OUTPUT DATA TYPES LL = 0 IFAIL = 0 IXYZIN = 0 IXYZOUT = 0 OUTLOG = 'NO' IOUT = 0 OCC=1 B=5. mch='A' INSCOD = ' ' MRES = 'UNK ' ALTCOD = ' ' RESNO = ' ' SEGID = ' ' ICN=0 IZ = 0 ICNT = 0 IRES = 0 c DO 120 I=1,6 BIN(I) = 0.0 120 CONTINUE c ROIN(4,4)=1 RFIN(4,4)=1 ROOUT(4,4)=1 RFOUT(4,4)=1 ROXP(4,4)=1 RFXP(4,4)=1 DO 144 I=1,3 ROIN(4,I)=0 ROIN(I,4)=0 RFIN(4,I)=0 RFIN(I,4)=0 c ROOUT(4,I)=0 ROOUT(I,4)=0 RFOUT(4,I)=0 RFOUT(I,4)=0 c ROXP(4,I)=0 ROXP(I,4)=0 RFXP(4,I)=0 RFXP(I,4)=0 c 144 CONTINUE C CELL(1) = 0.0 NCODEI=0 NCODEO=0 C IF (CCPONL (1)) THEN WRITE(6,1234) 1234 FORMAT(//,' INPUT KEYWORDS: INPUT, OUTPUT and CELL ') WRITE(6,2301) 2301 FORMAT(//,' INPUT:',/,' -----') WRITE(6,1235) 1235 FORMAT(' Subsidiary KEYWORDS for INPUT (on same line) ',/, 1 '1) describe style of INPUT COORDINATES.',/, 1 ' Possible words are: FRAC, HA, PDB, SHELX-FULL or SHELX-SHORT', 1 ', CSD or XPLOR',/, 1 ' FRAC FRACTIONAL - york "traditional fractional" ',/, 1 ' HA FRACTIONAL - mlphare style - GUI.ha plus cell',/, 1 ' PDB BROOKHAVEN with or without CRYST SCALE CARDS' ) WRITE(6,1145) 1145 FORMAT 1(' SHELX-F SHELX-FULL (2 lines per atom) ',/, 1 ' SHELX-S SHELX-SHORT (1 line per atom)' ,/, 1 ' CSD CAMBRIDGE data base ',/, 1 ' XPLOR BROOKHAVEN - XPLOR VERSION - ',/, 1 ' you will have to split chains later, and ', 1 'correct some atom names.',/, 1 ' NUCLIN NUCLIN atom format - ',//, 1 '2) ORTH followed by NCODEI - this is needed ',/, 1 ' unless INPUT is PDB with CRYST.') WRITE(6,2302) 2302 FORMAT(//,' OUTPUT:',/,' ------') WRITE(6,1236) 1236 FORMAT(' Subsiduary KEYWORDS for OUTPUT( on same line) ',/, 1 ' 1) Style defined as : FRAC or HA or PDB or XPLOR',/, 1 ' 2) ORTH followed by NCODEO - this is needed for ',/, 1 ' orthogonalisation if OUTPUT is PDB.') C line 83 WRITE(6,2303) 2303 FORMAT(//,' CELL:',/,' ----') WRITE(6,*) ' CELL followed by a b c alpha beta gamma. ' WRITE(6,*) 1 ' Necessary if input file is not PDB with CRYST card.' WRITE(6,2304) 2304 FORMAT(//,' END:',/,' ---') WRITE(6,2305) 2305 FORMAT(' The end of input cards.') C (online:) ENDIF WRITE(6,2306) 2306 FORMAT(//,' **BEWARE ** ATOM NAMES MAY BE MISPLACED IN PDB **') WRITE(6,2307) 2307 FORMAT(//,' ') 1 CONTINUE NTOK=NPARM LINE=' ' IPRINT = .TRUE. CALL PARSER (KEY,LINE,IBEG,IEND,ITYPE,FVALUE,CVALUE,IDEC,NTOK, + LEND,IPRINT) IF(LEND) GO TO 5 IF (KEY.EQ.'CELL') THEN CELL(4)=90.0 CELL(5)=90.0 CELL(6)=90.0 DO ITOK=2,NTOK CALL GTPREA (ITOK,CELL(ITOK-1),NTOK,ITYPE,FVALUE) END DO GO TO 1 C ELSE IF (KEY.EQ.'INPU') THEN CALL CCPUPC(LINE) WORD = LINE(IBEG(2):IEND(2)) C Which type of input? IF (WORD(1:4).EQ.'FRAC') THEN INTYPE = 1 ELSE IF (WORD(1:2).EQ.'HA') THEN INTYPE = 7 ELSE IF (WORD(1:3).EQ.'PDB') THEN INTYPE = 2 cpjx Commented out the following line which prevents rwbrook cpjx automatically detecting the orthogonalisation from the scale cards cpjx NCODEI = 1 ELSE IF (WORD(1:5).EQ.'SHELX') THEN INTYPE = 3 IF (WORD(1:7).EQ.'SHELX-S') ISHELX = 1 IF (WORD(1:7).EQ.'SHELX-F') ISHELX = 0 ELSE IF (WORD(1:3).EQ.'CSD') THEN INTYPE = 4 ELSE IF (WORD(1:3).EQ.'XPL') THEN INTYPE = 5 ELSE IF (WORD(1:3).EQ.'NUC') THEN INTYPE = 6 ELSE CALL CCPERR(1,'*** Bad INPUT type.') ENDIF IF (NTOK.GT.2) THEN WORD = LINE(IBEG(3):IEND(3)) IF(WORD(1:4).EQ.'ORTH') THEN C Which convention for input information? CALL GTPINT (4,NCODEI,NTOK,ITYPE,FVALUE) ELSE CALL CCPERR (1, 'Incorrect INPUT line') ENDIF END IF GO TO 1 C ELSE IF (KEY.EQ.'OUTP') THEN CALL CCPUPC(LINE) WORD = LINE(IBEG(2):IEND(2)) C Which type of output? IF (WORD(1:4).EQ.'FRAC') THEN OUTYPE = 1 ELSE IF (WORD(1:2).EQ.'HA') THEN OUTYPE = 7 ELSE IF (WORD(1:3).EQ.'PDB') THEN OUTYPE = 2 NCODEO = 1 IF (INTYPE .EQ. 2) OUTLOG = 'YES' ELSE IF (WORD(1:3).EQ.'XPL') THEN OUTYPE = 5 NCODEO = 1 ELSE IF (WORD(1:3).EQ.'NUC') THEN OUTYPE = 6 ELSE CALL CCPERR (1, 'Bad OUTPUT type') ENDIF IF (NTOK.GT.2) THEN WORD = LINE(IBEG(3):IEND(3)) IF(WORD(1:4).EQ.'ORTH') THEN C Which convention for output information? CALL GTPINT (4,NCODEO,NTOK,ITYPE,FVALUE) ELSE CALL CCPERR (1, 'Incorrect OUTPUT line') END IF END IF GO TO 1 ELSE IF (KEY.EQ.'END') THEN GO TO 5 ENDIF c 5 CONTINUE C C---- Open files appropriately C IF (INTYPE .EQ. 2) THEN CALL XYZOPEN('XYZIN','INPUT','PDB',IXYZIN,IFAIL) ELSE CALL CCPDPN(IXYZIN,'XYZIN','OLD','F',LL,ifail) ENDIF IF(INTYPE.EQ.7) THEN C Search for line CELL rewind ixyzin 6 line80 = ' ' read(ixyzin,'(A)',END = 7)line80 if(line80.eq.' ' ) go to 6 NTOK=NPARM IPRINT = .TRUE. CALL PARSER (KEY,LINE80,IBEG,IEND,ITYPE,FVALUE,CVALUE,IDEC, + NTOK,LEND,IPRINT) IF(LEND) GO TO 7 IF(KEY.NE.'CELL') GO TO 6 IF(NTOK.LT.4)call ccperr(1,' CELL line has insufficient info') CELL(4)=90.0 CELL(5)=90.0 CELL(6)=90.0 DO ITOK=2,NTOK CALL GTPREA (ITOK,CELL(ITOK-1),NTOK,ITYPE,FVALUE) END DO GO TO 8 7 CONTINUE call ccperr(2,' Cell not given in HA file') END IF C 8 CONTINUE REWIND IXYZIN C IF(OUTYPE.EQ.2 .AND. INTYPE.NE.2 .AND. 1 (CELL(1).EQ.0.0 .OR. NCODEO .EQ.0)) 1 CALL CCPERR(1, 1 ' You have not provided a cell or a orthogonalisation code') C IF (OUTYPE .EQ. 2) THEN CALL XYZOPEN('XYZOUT','OUTPUT','PDB',IXYZOUT,IFAIL) IF (OUTLOG .EQ. 'YES') IOUT = IXYZOUT ELSE CALL CCPDPN(IXYZOUT,'XYZOUT','UNKNOWN','F',LL,ifail) ENDIF c Do you have shelx ; full - 2 lines/atom or short -1 line/atom c IF(INTYPE.EQ.3)ishelx=0 c IF(INTYPE.EQ.-3)ishelx=1 c IF(INTYPE.EQ.-3)intype = 3 IF (CELL(1).NE.0.0) THEN CALL RBFRO1(CELL,VOL,RR) ENDIF c c c c Brookhaven?? IF(INTYPE.EQ.2)THEN c c Read cell dimensions from PDB file. IF(NCODEI.EQ.0 .OR. CELL(1).EQ.0.0)then c Get orthogonalising matrix for XPLOR pdb ( ncode = 1) IF (CELL(1) .EQ. 0.0) THEN vol = 0.0 CALL RBFRO1(cell,vol,rr) C Fill orthogonalising matrices for input PDB from SCALEi cards ROIN(1,1) = 0.0 CALL RBRORF(ROIN,RFIN) END IF END IF END IF C IF(NCODEO.EQ.0)NCODEO=1 DO 14 I=1,3 DO 15 J=1,3 IF(NCODEI.NE.0)ROIN(4,J)=0 IF(NCODEI.NE.0)ROIN(J,4)=0 ROOUT(J,I)=RR(J,I,NCODEO) ROXP(J,I)=RR(J,I,1) IF(NCODEI.NE.0)ROIN(J,I)=RR(J,I,NCODEI) 15 CONTINUE 14 CONTINUE CALL RBRINV(ROOUT,RFOUT) CALL RBRINV(ROXP,RFXP) IF(NCODEI.NE.0)CALL RBRINV(ROIN,RFIN) C Put orthogonalising matrices for input PDB ready for SCALEi cards IF(NCODEI.NE.0) CALL RBRORF(ROIN,RFIN) c C IF (OUTYPE.EQ.2)THEN CALL WBCELL(IXYZOUT,CELL,NCODEO) END IF C C IF INTYPE IS BROOKHAVEN WILL READ CELL FROM FILE C C Loop over input records C 10 CONTINUE C C---- Reading Fractional or Nuclin data or HA data *************************** C IF (INTYPE.EQ.1 .OR. INTYPE.GE.6) THEN C C---- READING IN TRADITIONAL DATA C IF(INTYPE.EQ.1) READ(IXYZIN,5555,END=910)ICNT,XF,YF,ZF,B, + OCC,IZ,IRES,MAT,MRES,MCH,IS C C---- READING IN HA data C 11 IF(INTYPE.EQ.7) THEN READ(IXYZIN,'(a)',END=910)LINE80 IF(LINE80.EQ.' ' ) GO TO 11 CALL CCPUPC(LINE80) CALL PARSER (KEY,LINE80,IBEG,IEND,ITYPE,FVALUE,CVALUE,IDEC, + NTOK,LEND,IPRINT) IF(LEND) GO TO 910 MRES = 'UNK' MCH = ' ' IF(KEY.NE.'ATOM' ) GO TO 11 ICNT = ICNT + 1 IRES = IRES + 1 MAT = LINE80(IBEG(2):IEND(2)) XF = FVALUE(3) YF = FVALUE(4) ZF = FVALUE(5) IF(ITYPE(6).EQ.2) OCC = FVALUE(6) IF(CVALUE(7)(1:2) .EQ.'BF') B = FVALUE(8) IF(CVALUE(8)(1:2) .EQ.'BF') B = FVALUE(9) END IF C C---- Read NUCLIN type coordinates C IF (INTYPE.EQ.6)THEN READ(IXYZIN,5556,END=910)ICNT,MAT1,IRES,MAT,IZ,XF,YF,ZF,B,OCC MRES = MAT1//' ' MCH = 'N' END IF c Calculate orthog coords XO=ROOUT(1,1)*XF + ROOUT(1,2)*YF + ROOUT(1,3)*ZF YO=ROOUT(2,1)*XF + ROOUT(2,2)*YF + ROOUT(2,3)*ZF ZO=ROOUT(3,1)*XF + ROOUT(3,2)*YF + ROOUT(3,3)*ZF IF(IS.EQ.0)IS=1 5555 FORMAT(I5,4F10.5,F5.2,I5,I10,A4,1X,A4,A1,I2) 5556 FORMAT(I5,3x,A1,I2,A4,I3,5F10.5) ICN=ICN+1 C C---- Brookhaven input ************************************** C ELSE IF (INTYPE.EQ.2) THEN CALL XYZADVANCE(IXYZIN,IOUT,0,*910,*910) CALL XYZATOM(IXYZIN,ICNT,MAT,MRES,MCH,IRES,RESNO,INSCOD, + ALTCOD,SEGID,IZ,ID) CALL XYZCOORD(IXYZIN,'F','U',XF,YF,ZF,OCC,B,BIN) C C---- Skip ANISOU cards in PDB, unless PDB output C IF (OUTYPE .NE. 2) THEN IF (BIN(2).NE.0.0 .AND. BIN(3).NE.0.0) THEN IF (XF.EQ.0.0 .AND. YF.EQ.0.0 .AND. ZF.EQ.0.0) THEN GOTO 10 ENDIF ENDIF ENDIF C C---- New orthogonal coordinates with NCODEO C IF (NCODEO.NE.0) THEN XO=ROOUT(1,1)*XF + ROOUT(1,2)*YF + ROOUT(1,3)*ZF YO=ROOUT(2,1)*XF + ROOUT(2,2)*YF + ROOUT(2,3)*ZF ZO=ROOUT(3,1)*XF + ROOUT(3,2)*YF + ROOUT(3,3)*ZF END IF C C---- READING IN SHELX DATA ************************************ C ELSE IF (INTYPE.EQ.3) THEN 30 continue if(ishelx.eq.0) READ(IXYZIN,5566,END=910)MAT,IATTYP,XF,YF,ZF, + FJNK1,FJNK2,FJNK3,FJNK4 5566 FORMAT(A4,I5,6F10.5,/,5X,F10.5) IF (ISHELX.EQ.1) THEN READ(IXYZIN,'(a)',END=910) lin80 CALL CCPUPC(LIN80) IF (LIN80(1:3).EQ.'END') GO TO 910 IF (LIN80(1:4).EQ.'CELL') + READ(LIN80(14:80),*)CELL IF(LIN80(1:4).EQ.' ' .OR. LIN80(1:4).EQ.'CELL' + .OR.LIN80(1:4).EQ.'TITL' .OR. LIN80(1:4).EQ.'ZERR' + .OR.LIN80(1:3).EQ.'REM' .OR. LIN80(1:4).EQ.'LATT' + .OR.LIN80(1:4).EQ.'SFAC' .OR. LIN80(1:4).EQ.'UNIT' + .OR.LIN80(1:4).EQ.'CGLS' .OR. LIN80(1:4).EQ.'FMAP' + .OR.LIN80(1:4).EQ.'SHEL' .OR. LIN80(1:4).EQ.'MERG' + .OR.LIN80(1:4).EQ.'PLAN' .OR. LIN80(1:4).EQ.'WGHT' + .OR.LIN80(1:4).EQ.'FVAR' .OR. LIN80(1:3).EQ.'HKL') GO TO 30 IF(LIN80(1:4).EQ.' ') GO TO 30 IF (LIN80(1:4).EQ.'RESI') THEN READ(LIN80,'(4x,I4,2x,A3)')IRES,MRES ELSE READ(LIN80,5588)MAT,IATTYP,XF,YF,ZF,OCC,UF 5588 FORMAT(A4,I3,5(2X,F10.0)) ENDIF ENDIF IF(OCC.GT.10.0) OCC = OCC - 10.0 IF(OCC.EQ.0.00) GO TO 30 IF(UF.LT.1.5) B = 8*PI*PI*UF C C---- Calculate orthog coords C XO=ROOUT(1,1)*XF + ROOUT(1,2)*YF + ROOUT(1,3)*ZF YO=ROOUT(2,1)*XF + ROOUT(2,2)*YF + ROOUT(2,3)*ZF ZO=ROOUT(3,1)*XF + ROOUT(3,2)*YF + ROOUT(3,3)*ZF IF(IS.EQ.0)IS=1 ICN=ICN+1 ICNT=ICN C C---- READING IN CAMBRIDGE DATA BASE FORMAT *********************** C ELSE IF (INTYPE.EQ.4) THEN READ(IXYZIN,5567,END=910)MAT,XF,YF,ZF 5567 FORMAT(1X,A,F14.0,2F16.0) C5567 FORMAT(5X,A,1X,3F10.5) C C---- Calculate orthog coords C XO=ROOUT(1,1)*XF + ROOUT(1,2)*YF + ROOUT(1,3)*ZF YO=ROOUT(2,1)*XF + ROOUT(2,2)*YF + ROOUT(2,3)*ZF ZO=ROOUT(3,1)*XF + ROOUT(3,2)*YF + ROOUT(3,3)*ZF IF(IS.EQ.0)IS=1 IZ=0 ICN=ICN+1 ICNT=ICN IRES=ICNT mres='CAM ' mch='A' C C---- READING XPLOR OUTPUT - skip REMARK lines ********************** C ELSE IF (INTYPE.EQ.5) THEN 50 CONTINUE 2013 FORMAT(6x,I5,1X,A4,1X,A4,1x,I4,I3,1X,3F8.3,2F6.2,6x,A4) read(IXYZIN,'(A)',end=910) REMARK IF (REMARK(1:6).EQ.'REMARK') THEN WRITE(LUNOUT,'(A)')REMARK GO TO 50 END IF read(REMARK,2013) ICNT, MAT, MRES, IRES, IS, XO, YO, + ZO, OCC, B, mch4 51 CONTINUE C C---- Select first non blank character of mch4 as mch C mch=' ' if(mch4(4:4).ne.' ') mch=mch4(4:4) if(mch4(3:3).ne.' ') mch=mch4(3:3) if(mch4(2:2).ne.' ') mch=mch4(2:2) if(mch4(1:1).ne.' ') mch=mch4(1:1) SEGID = MCH4 C C---- Chuck out the hydrogens.. C mat1=mat(1:1) if(mat1.eq.' ') mat1=mat(2:2) if (mat1.eq.'H' .or. mat1.eq.'h') then read(IXYZIN,2013,end=910)ICNT,MAT,MRES,IRES,IS,XO,YO,ZO, + OCC,B,mch4 go to 51 ENDIF c c---- Calculate frac coords with "ncode 1" - ie standard orthogonalisation C XF=Rfxp(1,1)*XO + Rfxp(1,2)*YO + Rfxp(1,3)*ZO + Rfxp(1,4) YF=Rfxp(2,1)*XO + Rfxp(2,2)*YO + Rfxp(2,3)*ZO + Rfxp(2,4) ZF=Rfxp(3,1)*XO + Rfxp(3,2)*YO + Rfxp(3,3)*ZO + Rfxp(3,4) c c---- Calculate orthog coords with input ncode, if ncode ne 1 C if(ncodeo.ne.1)then XO=ROOUT(1,1)*XF + ROOUT(1,2)*YF + ROOUT(1,3)*ZF YO=ROOUT(2,1)*XF + ROOUT(2,2)*YF + ROOUT(2,3)*ZF ZO=ROOUT(3,1)*XF + ROOUT(3,2)*YF + ROOUT(3,3)*ZF endif ENDIF C C---- end of input types C C---- Deal with output C C---- FRAC ********************************************* C IF (OUTYPE.EQ.1) THEN WRITE(IXYZOUT,5555)ICNT,XF,YF,ZF,B,OCC,IZ,IRES,MAT,MRES,MCH C C HA ********************************************* C ELSE IF (OUTYPE.EQ.7) THEN IF(ICNT.LE.9) THEN WRITE(IXYZOUT,'(A5,I1,4x,A4,3F10.5,F8.2,A,F10.3)') + ' ATOM',ICNT,MAT,XF,YF,ZF,OCC,' 0.0 BFAC ',B C ELSE IF(ICNT.LE.99) THEN WRITE(IXYZOUT,'(A5,I2,3x,A4,3F10.5,F8.2,A,F10.3)') + ' ATOM',ICNT,MAT,XF,YF,ZF,OCC,' 0.0 BFAC ',B C ELSE IF(ICNT.GT.99) THEN WRITE(IXYZOUT,'(A5,I3,2x,A4,3F10.5,F8.2,A,F10.3)') + ' ATOM',ICNT,MAT,XF,YF,ZF,OCC,' 0.0 BFAC ',B END IF C C C NUC ********************************************* C ELSE IF (OUTYPE.EQ.6) THEN WRITE(IXYZOUT,5556)ICNT,MRES(1:1),IRES,MAT,IZ,XF,YF,ZF,B,OCC C C PDB ********************************************* C ELSE IF (OUTYPE.EQ.2) THEN C---- if no aniso U, then BIN(1) holds Biso, else BIN(i) holds U(i) IF (BIN(2).EQ.0.0 .AND. BIN(3).EQ.0.0) BIN(1) = B ID = ' ' IF (IZ .EQ. 1) ID = ' H' IF (IZ .EQ. 6) ID = ' C' IF (IZ .EQ. 7) ID = ' N' IF (IZ .EQ. 8) ID = ' O' IF (IZ .EQ. 15)ID = ' P' IF (IZ .EQ. 16)ID = ' S' C PDBMAT must be left-justified IF (MAT(1:1).EQ.' ') THEN PDBMAT = MAT(2:4)//' ' ELSE PDBMAT = MAT(1:4) ENDIF CALL XYZATOM(IXYZOUT,ICNT,PDBMAT,MRES,MCH,IRES,RESNO,INSCOD, + ALTCOD,SEGID,IZ,ID) CALL XYZCOORD(IXYZOUT,'O','U',XO,YO,ZO,OCC,B,BIN) CALL XYZADVANCE(IXYZOUT,0,0,*910,*910) C C Xplor type "pdb" *********************************** C ELSE IF (OUTYPE.EQ.5) THEN C C Calculate orthog coords with "ncode 1" - ie standard C orthogonalisation C XO=ROxp(1,1)*XF + ROxp(1,2)*YF + ROxp(1,3)*ZF YO=ROxp(2,1)*XF + ROxp(2,2)*YF + ROxp(2,3)*ZF ZO=ROxp(3,1)*XF + ROxp(3,2)*YF + ROxp(3,3)*ZF IF(IZ.LE.5 .OR. IZ.GE.20) 1 WRITE(IXYZOUT,1013)ICNT,MAT,MRES,IRES,IS,XO,YO,ZO,OCC,B,mch, 2 ' ' 1013 FORMAT('ATOM ',I5,1X,A4,1X,A4,1x,I4,I3,1X,3F8.3,2F6.2,6x,a1,a3) IF(IZ.GT.5 .AND.IZ.LT.20) 1 WRITE(IXYZOUT,1012)ICNT,MAT,MRES,IRES,IS,XO,YO,ZO,OCC,B,mch, 2 ' ' 1012 FORMAT('ATOM ',I5,2X,A4,A4,1x,I4,I3,1X,3F8.3,2F6.2,6x,a1,a3) ELSE CALL CCPERR (1, 'Internal error: bad OUTYPE') ENDIF GO TO 10 910 CONTINUE IF (INTYPE .EQ. 2) THEN CALL XYZCLOSE(IXYZIN) ELSE CLOSE(UNIT=IXYZIN,STATUS='KEEP') ENDIF IF (OUTYPE .EQ. 2) THEN CALL XYZCLOSE(IXYZOUT) ELSE CLOSE(UNIT=IXYZOUT,STATUS='KEEP') ENDIF CALL CCPERR (0, 'COORDCONV: normal termination') END