hPDB-examples-1.2.0.1: tests/TestParser.hs
{-# LANGUAGE OverloadedStrings, FlexibleContexts, NoMonomorphismRestriction #-}
module Main(main) where
import Control.Concurrent(getNumCapabilities)
import Data.Time(diffUTCTime, getCurrentTime)
import System.Process
import Control.Exception(throw)
import System.Environment(getProgName, getArgs)
import System.Exit(exitWith, exitSuccess, ExitCode(ExitSuccess), ExitCode(..))
import System.Directory(doesFileExist)
import qualified Bio.PDB as PDB(parse, numResidues)
import Data.Iterable
import Control.Monad.IfElse(whenM)
import Control.Monad(unless)
cmd cmdLine = do exitCode <- system cmdLine
unless (exitCode == ExitSuccess) $ throw exitCode
inputPath="tests/1htq.ent"
gzPath=inputPath ++ ".gz"
assureInputPath = whenM (not `fmap` doesFileExist inputPath) $ do
cmd $ "wget --quiet http://rcsb.org/pdb/files/1htq.pdb.gz -O " ++ inputPath ++ ".gz"
cmd $ "gzip --decompress " ++ gzPath
timeIt io = do
cpus <- getNumCapabilities
putStrLn $ "Running with " ++ show cpus ++ " threads."
t1 <- getCurrentTime
r <- io
t2 <- getCurrentTime
print $ t2 `diffUTCTime` t1
return r
main = do
assureInputPath
timeIt $ do
Just structure <- PDB.parse inputPath
print $ PDB.numResidues structure