module Bio.PDB.EventParser.ParseSITE(parseSITE)
where
import Prelude hiding(String)
import qualified Data.ByteString.Char8 as BS
import Bio.PDB.EventParser.PDBEvents
import Bio.PDB.EventParser.PDBParsingAbstractions
siteFields = [(6, mKeyword "record header" "SITE " ),
(7, mSpc 1 ),
(10, mInt "record serial number" ),
(11, mSpc 1 ),
(14, mStr "site id" ),
(15, mSpc 1 ),
(17, mInt "number of residues" ),
(18, mSpc 1 ),
(21, mStr "residue name 1" ),
(22, mSpc 1 ),
(23, mChr "chain id 1" ),
(27, mInt "residue sequence number 1" ),
(28, mChr "insertion code 1" ),
(29, pSpc ),
(32, pStr "residue name 2" ),
(33, pSpc ),
(34, pChr "chain id 2" ),
(38, pInt "residue sequence number 2" ),
(39, pChr "insertion code 2" ),
(40, pSpc ),
(43, pStr "residue name 3" ),
(44, pSpc ),
(45, pChr "chain id 3" ),
(49, pInt "residue sequence number 3" ),
(50, pChr "insertion code 3" ),
(51, pSpc ),
(54, pStr "residue name 4" ),
(55, pSpc ),
(56, pChr "chain id 4" ),
(60, pInt "residue sequence number 4" ),
(61, pChr "insertion code 4" )]
parseSITE :: (Monad m) => String -> Int -> m [PDBEvent]
parseSITE line line_no = return $ if null errs
then [result]
else errs
where
errs = if null fErrs then fgErrs else fErrs
(fields, fErrs) = parseFields siteFields line line_no
[fRec, _, fSerial, _, fSiteId, _, fNumRes, _,
fResname1, _, fChain1, fResnum1, fInsCode1, _,
fResname2, _, fChain2, fResnum2, fInsCode2, _,
fResname3, _, fChain3, fResnum3, fInsCode3, _,
fResname4, _, fChain4, fResnum4, fInsCode4] = fields
IFInt serial = fSerial
IFStr siteid = fSiteId
IFInt numres = fNumRes
fgRes1 = fgResidue False "residue 1" 21 fResname1 fChain1 fResnum1 fInsCode1
fgRes2 = maybeFgResidue False "residue 2" 32 fResname2 fChain2 fResnum2 fInsCode2
fgRes3 = maybeFgResidue False "residue 3" 43 fResname3 fChain3 fResnum3 fInsCode3
fgRes4 = maybeFgResidue False "residue 4" 54 fResname4 fChain4 fResnum4 fInsCode4
residues = rights [fgRes1] ++ maybeList (rights [fgRes2, fgRes3, fgRes4])
fgErrs = liftFgErrs line_no [fgRes1] ++
liftFgErrs line_no [fgRes2, fgRes3, fgRes4]
result = SITE serial siteid numres residues