X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMain.hs;h=84485589683f114a381ff4de372b034fb46646a5;hb=65c78573af4a1049a848a3df8a968a4eb1b1acc1;hp=5e10d6cfdc16146d7d8844de335558253c6ef5b2;hpb=02df1d5763a5d2bfe750bbc30b5c001ee9b23b17;p=spline3.git diff --git a/src/Main.hs b/src/Main.hs index 5e10d6c..8448558 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,19 +1,24 @@ {-# LANGUAGE RecordWildCards, DoAndIfThenElse #-} -module Main +module Main (main) where -import Data.Maybe (fromJust) -import Control.Monad (when) +import Control.Monad ( when ) import qualified Data.Array.Repa as R -import Data.Maybe (isJust) -import GHC.Conc (getNumProcessors, setNumCapabilities) -import System.IO (hPutStrLn, stderr) -import System.Exit (exitSuccess, exitWith, ExitCode(..)) - -import CommandLine (Args(..), apply_args) -import ExitCodes -import Grid (zoom) +import Data.Maybe ( fromJust ) +import GHC.Conc ( getNumProcessors, setNumCapabilities ) +import System.IO ( hPutStrLn, stderr ) +import System.Exit ( + ExitCode( ExitFailure ), + exitSuccess, + exitWith ) + +import CommandLine ( + Args(Args, depth, height, input, lower_threshold, output, + scale, slice, upper_threshold, width), + apply_args ) +import ExitCodes ( exit_arg_not_positive, exit_arg_out_of_bounds ) +import Grid ( zoom ) import Volumetric ( bracket_array, flip_x, @@ -23,8 +28,7 @@ import Volumetric ( swap_bytes, write_values_to_bmp, write_word16s, - z_slice - ) + z_slice ) validate_args :: Args -> IO () @@ -66,20 +70,17 @@ main = do num_procs <- getNumProcessors setNumCapabilities num_procs - -- Determine whether we're doing 2d or 3d. If we're given a slice, - -- assume 2d. let shape = (R.Z R.:. depth R.:. height R.:. width) :: R.DIM3 - if (isJust slice) then - main2d args shape - else - main3d args shape + -- Determine whether we're doing 2d or 3d. If we're given a slice, + -- assume 2d. + let main_function = case slice of + Nothing -> main3d + Just _ -> main2d + main_function args shape exitSuccess - where - - main3d :: Args -> R.DIM3 -> IO () main3d Args{..} shape = do @@ -89,13 +90,16 @@ main3d Args{..} shape = do let arr_shaped = R.reshape shape arr_swapped dbl_data <- R.computeUnboxedP $ R.map fromIntegral arr_shaped raw_output <- zoom dbl_data zoom_factor - word16_output <- R.computeUnboxedP $ round_array raw_output - write_word16s output word16_output + let word16_output = round_array raw_output + -- Switch the bytes order back to what it was. This lets us use the + -- same program to view the input/output data. + swapped_output <- R.computeUnboxedP $ swap_bytes word16_output + write_word16s output swapped_output main2d :: Args -> R.DIM3 -> IO () main2d Args{..} shape = do - let zoom_factor = (1, scale, scale) + let zoom_factor = (1 :: Int, scale, scale) arr <- read_word16s input shape arrSlice <- R.computeUnboxedP $ z_slice (fromJust slice) @@ -111,8 +115,8 @@ main2d Args{..} shape = do arrSlice0 <- R.computeUnboxedP $ z_slice 0 raw_output -- Make doubles from the thresholds which are given as Ints. - let lt = fromIntegral lower_threshold - let ut = fromIntegral upper_threshold + let lt = fromIntegral lower_threshold :: Double + let ut = fromIntegral upper_threshold :: Double let arr_bracketed = bracket_array lt ut arrSlice0 values <- R.computeUnboxedP $ R.map fromIntegral arr_bracketed