packages feed

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