[contrib] add the solve method.
[hkl.git] / contrib / haskell / src / ghkl.hs
bloba30c24c7b0d1fdfd77282f87be977b55f35a2676
1 module Main where
3 import Control.Monad
4 import Data.Map.Strict (lookup)
5 import Data.Maybe (isNothing, fromJust)
6 import Hkl
7 import Numeric.Units.Dimensional.Prelude (nano, meter, degree,
8 (*~),
9 (*~~), (/~~))
10 import Prelude hiding (lookup)
12 main' :: IO ()
13 main' = do
14 factories <- factories
15 let mfactory = lookup "E6C" factories
16 if isNothing mfactory
17 then
18 return $ error $ "wrong diffractometer:" ++ show factories
19 else do
20 let factory = fromJust mfactory
21 let sample = Sample "test" (Cubic (1.54 *~ nano meter))
22 let geometry = Geometry (Source (1.54 *~ nano meter)) [0, 30, 0, 0, 0, 60]
23 let detector = Detector DetectorType0D
25 -- compute the pseudo axes values
26 pseudoAxes <- compute factory geometry detector sample
27 print pseudoAxes
29 -- solve the pseudo axis problem
30 let engine = Engine "hkl" [ Parameter "h" 0.0 (Range (-1.0) 1.0)
31 , Parameter "k" 0.0 (Range (-1.0) 1.0)
32 , Parameter "l" 1.0 (Range (-1.0) 1.0)
34 (Mode "bissector_vertical" [])
35 solutions <- solve factory geometry detector sample engine
36 print solutions
37 return ()
39 main :: IO ()
40 main = replicateM_ 1 main'