module Bio.PDB.EventParser.ParseMODRES(parseMODRES)
where
import qualified Data.ByteString.Char8 as BS
import Bio.PDB.EventParser.PDBEvents
import Bio.PDB.EventParser.PDBParsingAbstractions
modresFields = [(6, mKeyword "record header" "MODRES" ),
(7, mSpc 1 ),
(11, mStr "PDB code" ),
(12, mSpc 1 ),
(15, dStr "modified residue name" " "),
(16, mSpc 1 ),
(17, mChr "chain id" ),
(18, mSpc 1 ),
(22, mInt "sequence number" ),
(23, mChr "insertion code" ),
(24, mSpc 1 ),
(27, dStr "standard residue name" " "),
(70, mStr "comment" )]
parseMODRES :: (Monad m) => BS.ByteString -> Int -> m [PDBEvent]
parseMODRES line line_no = return $ if null errs
then [result]
else errs
where
(fields, fErrs) = parseFields modresFields line line_no
[fRec, _, fPdbCode, _, fModRes, _, fChain, _, fSeqNum, fInsCode, _, fStdRes, fComment] = fields
IFStr pdbcode = fPdbCode
IFStr stdres = fStdRes
IFStr comment = fComment
errs = if null fErrs then fgErrs else fErrs
fgRes = fgResidue True "modified" 15 fModRes fChain fSeqNum fInsCode
fgErrs = liftFgErrs line_no [fgRes]
Right res = fgRes
result = PDBIgnoredLine $ BS.pack $ show (fModRes, fSeqNum, fChain, fInsCode)