RWBROOK interface functions: Examples.
c c .------------------------------------------------------------------. c ! ! c ! Test-demonstration of API mmdb_rwbrook.h ! c ! ! c `------------------------------------------------------------------' c real CellD(6),CVol real x,y,z,occ,BIso,U(6) integer ArgNCode,iSer,iResN,IZ,iRet character*(20) AtNam,ResNam,ChnNam,ResNo character*(20) InsCod,AltCod,SegID,ID character*(40) SpaceGroup c c c .------------------------------------------------------------------. c ! ! c ! 1. On the top of each application, RWBROOK must be initialized ! c ! ! c `------------------------------------------------------------------' c call XYZInit() c c c .------------------------------------------------------------------. c ! ! c ! 2. Test #1: read a PDB file and write it as a binary file under ! c ! different name ! c ! ! c `------------------------------------------------------------------' c c XYZOpen1 associates a unit number (1 in this call) with a disk file; c if this file is intended for input, it is read all immediately. call AutoSerials ( 1 ) call XYZOpen1 ( 'in.file','INPUT','PDB',1,iRet ) c c RBErrStop will either stop or issue a warning in the case of an c error, giving identification of the error and particlular call c caused it call RBErrStop ( 1,iRet,1,0 ) c c change the file type to binary/output call XYZSetType ( 1,'BIN','OUTPUT',iRet ) c c RBCheckErr is merely a simple error messenger which works only c if called immediately after an API function. "0" means "stop c if error". call RBCheckErr ( 2,0 ) c c change the file name call XYZSetName ( 1,'out.bin.file',iRet ) call RBCheckErr ( 3,0 ) c c XYZClose writes the output file and completely disposes it c from memory call XYZClose ( 1,iRet ) call RBCheckErr ( 4,0 ) c c c .------------------------------------------------------------------. c ! ! c ! 3. Test #2: read binary file and write it as a PDB file under ! c ! different name. The steps are quite identical to those ! c ! in Test #1; we use unit 2 now. ! c ! ! c `------------------------------------------------------------------' c call XYZOpen1 ( 'out.bin.file','INPUT','BIN',2,iRet ) call RBCheckErr ( 5,0 ) c call XYZSetType ( 2,'PDB','OUTPUT',iRet ) call RBCheckErr ( 6,0 ) call XYZSetName ( 2,'out.pdb.file',iRet ) call RBCheckErr ( 7,0 ) c call XYZClose ( 2,iRet ) call RBCheckErr ( 8,0 ) c c c .------------------------------------------------------------------. c ! ! c ! 4. Test #3: read binary file (on unit 1) and use it for ! c ! atom-after-atom composition of the other file (on unit 2). ! c ! The other file is saved in ASCII PDB format. ! c ! ! c `------------------------------------------------------------------' c call XYZOpen1 ( 'out.bin.file','INPUT','BIN',1,iRet ) call RBCheckErr ( 9,0 ) c c RBCell1 reads crystallographic information which is needed c for proper translation of atom coordinates call RBCell1 ( 1,CellD,CVol,ArgNCode,SpaceGroup,iRet ) call RBCheckErr ( 10,0 ) c call XYZOpen1 ( 'out1.pdb.file','OUTPUT','PDB',2,iRet ) call RBCheckErr ( 11,0 ) c c RBFrac3 stores the crystallographic information into file c and computes all necessary transformation matrices call RBFrac3 ( 2,CellD(1),CellD(2),CellD(3),CellD(4), . CellD(5),CellD(6),ArgNCode, . SpaceGroup,iRet ) call RBCheckErr ( 12,0 ) c c atom read/write cycle iSer1 = 0 10 continue c call XYZAdvance1 ( 1,0,iRet ) if (iRet.eq.2) goto 20 if ((iRet.ne.1).and.(iRet.ne.3)) then call RBCheckErr ( 13,0 ) endif call XYZAtom1 ( 1,iSer,AtNam,ResNam,ChnNam,iResN, . ResNo,InsCod,AltCod,SegID,IZ,ID,iRet ) call RBCheckErr ( 14,0 ) call XYZCoord1 ( 1,'F','F',x,y,z,occ,BIso,U,iRet ) call RBCheckErr ( 15,0 ) c call XYZAdvance1 ( 2,0,iRet ) call RBCheckErr ( 16,0 ) c c since 'ter' cards will be skipped, we number all atoms c on a fly. If we do not, multiple warnings may appear. iSer1 = iSer1 + 1 call XYZAtom1 ( 2,iSer1,AtNam,ResNam,ChnNam,iResN, . ResNo,InsCod,AltCod,SegID,IZ,ID,iRet ) call RBCheckErr ( 17,0 ) call XYZCoord1 ( 2,'F','F',x,y,z,occ,BIso,U,iRet ) call RBCheckErr ( 18,0 ) c goto 10 c 20 continue c c close files call XYZClose ( 1,iRet ) call RBCheckErr ( 19,0 ) call XYZClose ( 2,iRet ) call RBCheckErr ( 20,0 ) c c c .------------------------------------------------------------------. c ! ! c ! 5. Test #4: same as #3 but "TER" and "HETATM" cards are taken ! c ! care of. ! c ! ! c `------------------------------------------------------------------' c call XYZOpen1 ( 'out.bin.file','INPUT','BIN',1,iRet ) call RBCheckErr ( 21,0 ) call RBCell1 ( 1,CellD,CVol,ArgNCode,SpaceGroup,iRet ) call RBCheckErr ( 22,0 ) call XYZOpen1 ( 'out2.pdb.file','OUTPUT','PDB',2,iRet ) call RBCheckErr ( 23,0 ) call RBFrac3 ( 2,CellD(1),CellD(2),CellD(3),CellD(4), . CellD(5),CellD(6),ArgNCode, . SpaceGroup,iRet ) call RBCheckErr ( 24,0 ) c 30 continue call XYZAdvance1 ( 1,1,iFlag ) if (iFlag.eq.2) goto 40 if ((iFlag.ne.1).and.(iFlag.ne.3)) then call RBCheckErr ( 25,0 ) endif call XYZAtom1 ( 1,iSer,AtNam,ResNam,ChnNam,iResN, . ResNo,InsCod,AltCod,SegID,IZ,ID,iRet ) call RBCheckErr ( 26,0 ) call XYZCoord1 ( 1,'F','F',x,y,z,occ,BIso,U,iRet ) call RBCheckErr ( 27,0 ) c call XYZAdvance1 ( 2,0,iRet ) call RBCheckErr ( 28,0 ) call XYZAtom1 ( 2,iSer,AtNam,ResNam,ChnNam,iResN, . ResNo,InsCod,AltCod,SegID,IZ,ID,iRet ) call RBCheckErr ( 29,0 ) if (iFlag.eq.1) then call XYZSetTer ( 2,iRet ) else if (iFlag.eq.3) then call XYZCoord1 ( 2,'HF','F',x,y,z,occ,BIso,U,iRet ) else call XYZCoord1 ( 2,'F','F',x,y,z,occ,BIso,U,iRet ) endif call RBCheckErr ( 30,0 ) c goto 30 c 40 continue c c close files call XYZClose ( 1,iRet ) call RBCheckErr ( 31,0 ) call XYZClose ( 2,iRet ) call RBCheckErr ( 32,0 ) c c c c .------------------------------------------------------------------. c ! ! c ! 6. Before quitting any application, rwbrook must be disposed. ! c ! Note that RBErrStop does it automatically if it stops. ! c ! ! c `------------------------------------------------------------------' c call XYZQuit () call RBCheckErr ( 100,0 ) c stop c end