module Bio.PDB.EventParser.ParseSLTBRG(parseSLTBRG)
where
import Prelude hiding(String)
import qualified Data.ByteString.Char8 as BS
import Bio.PDB.EventParser.PDBEvents
import Bio.PDB.EventParser.PDBParsingAbstractions
sltbrgFields = [(6, mKeyword "record header" "SLTBRG" ),
(12, mSpc 6 ),
(16, mStr "first atom name" ),
(17, mChr "alternate location indicator 1" ),
(20, mStr "residue name 1" ),
(21, mSpc 1 ),
(22, mChr "chain identifier 1" ),
(26, mInt "residue 1 sequence number" ),
(27, mChr "insertion code" ),
(42, mSpc 15 ),
(46, mStr "second atom name" ),
(47, mChr "alternate location indicator 2" ),
(50, mStr "residue name 2" ),
(51, mSpc 1 ),
(52, mChr "chain identifier 2" ),
(56, mInt "residue sequence number 2" ),
(57, mChr "insertion code 2" ),
(59, pSpc ),
(65, pStr "symmetry operator for residue 1" ),
(66, pSpc ),
(72, pStr "symmetry operator for residue 2" )]
parseSLTBRG :: (Monad m) => String -> Int -> m [PDBEvent]
parseSLTBRG line line_no = return $ if null errs
then [result]
else errs
where
errs = fErrs ++ fgErrs
(fields, fErrs) = parseFields sltbrgFields line line_no
[fRec, _,
fAtomName1, fAltLoc1, fResname1, _, fChain1, fResnum1, fInsCode1, _,
fAtomName2, fAltLoc2, fResname2, _, fChain2, fResnum2, fInsCode2, _,
fSymOp1, _, fSymOp2] = fields
IFChar altloc1 = fAltLoc1
IFChar altloc2 = fAltLoc2
IFStr symOp1 = fSymOp1
IFStr symOp2 = fSymOp2
fgErrs = liftFgErrs line_no [fgAtom1, fgAtom2]
fgAtom1 = fgAtom "first residue of SLTBRG" 16 fAtomName1 fResname1 fChain1 fResnum1 fInsCode1
fgAtom2 = fgAtom "second residue of SLTBRG" 46 fAtomName1 fResname1 fChain2 fResnum2 fInsCode2
[atom1, atom2] = rights [fgAtom1, fgAtom2]
result = SLTBRG atom1 altloc1 atom2 altloc2 symOp1 symOp2