{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-} -- | Parsing MASTER records. module Bio.PDB.EventParser.ParseMASTER(parseMASTER) where import Prelude hiding(String) import qualified Data.ByteString.Char8 as BS import Bio.PDB.EventParser.PDBEvents import Bio.PDB.EventParser.PDBParsingAbstractions --------------- {{{ MASTER records {-- COLUMNS DATA TYPE FIELD DEFINITION ---------------------------------------------------------------------------------- 1 - 6 Record name "MASTER" 11 - 15 Integer numRemark Number of REMARK records 16 - 20 Integer "0" 21 - 25 Integer numHet Number of HET records 26 - 30 Integer numHelix Number of HELIX records 31 - 35 Integer numSheet Number of SHEET records 36 - 40 Integer numTurn deprecated 41 - 45 Integer numSite Number of SITE records 46 - 50 Integer numXform Number of coordinate transformation records (ORIGX+SCALE+MTRIX) 51 - 55 Integer numCoord Number of atomic coordinate records records (ATOM+HETATM) 56 - 60 Integer numTer Number of MASTER records 61 - 65 Integer numConect Number of CONECT records 66 - 70 Integer numSeq Number of SEQRES records --} {-# INLINE masterFields #-} -- | Fields of the MASTER record masterFields :: [(Int, String -> ParsedField)] masterFields = [(6, mKeyword "record header" "MASTER" ), (10, mSpc 4 ), (15, mInt "number of REMARK records" ), (20, mInt "" ), (25, mInt "number of HET records" ), (30, mInt "number of HELIX records" ), (35, mInt "number of SHEET records" ), (40, pInt "number of TURN records" ), -- deprecated (45, mInt "number of SITE records" ), (50, mInt "number of coordinate transform records (ORIGX, SCALE,MTRIX)"), (55, mInt "number of atomic coordinate records (ATOM, HETATM)"), (60, mInt "number of MASTER records" ), (65, mInt "number of CONECT records" ), (70, mInt "number of SEQRES records" )] -- | Parses a MASTER record. -- -- Arguments: -- -- (1) input line -- -- (2) input line number -- -- Result is a mionad action returning a list of 'PDBEvent's. parseMASTER line line_no = return $ if null errs then [result] else errs where -- parse (fields, errs) = parseFields masterFields line line_no [fRec, _, fNumRemark, fZero, fNumHet, fNumHelix, fNumSheet, fNumTurn, fNumSite, fNumXform, fNumAts, fNumMaster, fNumConect, fNumSeqres] = fields IFInt numRemark = fNumRemark IFInt 0 = fZero IFInt numHet = fNumHet IFInt numHelix = fNumHelix IFInt numSheet = fNumSheet IFInt numTurn = fNumTurn IFInt numSite = fNumSite IFInt numXform = fNumXform IFInt numAts = fNumAts IFInt numMaster = fNumMaster IFInt numConect = fNumConect IFInt numSeqres = fNumSeqres -- unpack fields result = MASTER numRemark numHet numHelix numSheet numTurn numSite numXform numAts numMaster numConect numSeqres --------------- }}} MASTER records