module Bio.MMTF.Type where
import Data.Int (Int32, Int8)
import Data.Text (Text)
data UnitCell = UnitCell { ucA :: !Float
, ucB :: !Float
, ucC :: !Float
, ucAlpha :: !Float
, ucBeta :: !Float
, ucGamma :: !Float
}
deriving (Show, Eq)
data Transform = Transform { chainIndexList :: ![Int32]
, matrix :: ![Float]
}
deriving (Show, Eq)
data Assembly = Assembly { transformList :: ![Transform]
, assemblyName :: !Text
}
deriving (Show, Eq)
data Entity = Entity { entityChainIndexList :: ![Int32]
, entityDescription :: !Text
, entityType :: !Text
, entitySequence :: !Text
}
deriving (Show, Eq)
data GroupType = GroupType { gtFormalChargeList :: ![Int32]
, gtAtomNameList :: ![Text]
, gtElementList :: ![Text]
, gtBondAtomList :: ![Int32]
, gtBondOrderList :: ![Int32]
, gtGroupName :: !Text
, gtSingleLetterCode :: !Char
, gtChemCompType :: !Text
}
deriving (Show, Eq)
data SecondaryStructure = PiHelix
| Bend
| AlphaHelix
| Extended
| ThreeTenHelix
| Bridge
| Turn
| Coil
| Undefined
deriving (Show, Eq)
data FormatData = FormatData { mmtfVersion :: !Text
, mmtfProducer :: !Text
}
deriving (Show, Eq)
data StructureData = StructureData { title :: !(Maybe Text)
, structureId :: !(Maybe Text)
, depositionDate :: !(Maybe Text)
, releaseDate :: !(Maybe Text)
, numBonds :: !Int32
, numAtoms :: !Int32
, numGroups :: !Int32
, numChains :: !Int32
, numModels :: !Int32
, spaceGroup :: !(Maybe Text)
, unitCell :: !(Maybe UnitCell)
, ncsOperatorList :: !(Maybe [[Float]])
, bioAssemblyList :: !(Maybe [Assembly])
, entityList :: !(Maybe [Entity])
, resolution :: !(Maybe Float)
, rFree :: !(Maybe Float)
, rWork :: !(Maybe Float)
, experimentalMethods :: !(Maybe [Text])
, bondAtomList :: !(Maybe [Int32])
, bondOrderList :: !(Maybe [Int8])
}
deriving (Show, Eq)
data ModelData = ModelData { chainsPerModel :: ![Int32] }
deriving (Show, Eq)
data ChainData = ChainData { groupsPerChain :: ![Int32]
, chainIdList :: ![Text]
, chainNameList :: !(Maybe [Text])
}
deriving (Show, Eq)
data GroupData = GroupData { groupList :: ![GroupType]
, groupTypeList :: ![Int32]
, groupIdList :: ![Int32]
, secStructList :: !(Maybe [SecondaryStructure])
, insCodeList :: !(Maybe [Char])
, sequenceIndexList :: !(Maybe [Int32])
}
deriving (Show, Eq)
data AtomData = AtomData { atomIdList :: !(Maybe [Int32])
, altLocList :: !(Maybe [Char])
, bFactorList :: !(Maybe [Float])
, xCoordList :: ![Float]
, yCoordList :: ![Float]
, zCoordList :: ![Float]
, occupancyList :: !(Maybe [Float])
}
deriving (Show, Eq)
data MMTF = MMTF { format :: !FormatData
, structure :: !StructureData
, model :: !ModelData
, chain :: !ChainData
, group :: !GroupData
, atom :: !AtomData
}
deriving (Show, Eq)