[contrib][haskell] add the DataSource type
[hkl.git] / contrib / haskell / src / Hkl / D2AM / XRD.hs
blob4e1306a3e5ce45d5d3c12628f26eb2dec2b24422
1 {-# LANGUAGE CPP #-}
2 {-# LANGUAGE OverloadedStrings #-}
4 module Hkl.D2AM.XRD
5 ( d2am ) where
7 import Control.Concurrent.Async (mapConcurrently)
8 import Data.Array.Repa (DIM1, ix1)
9 -- import Data.Char (toUpper)
10 import Numeric.LinearAlgebra (ident)
11 import System.FilePath ((</>))
12 import Text.Printf (printf)
14 import Prelude hiding (concat, lookup, readFile, writeFile)
16 import Hkl.MyMatrix
17 import Hkl.PyFAI.PoniExt
18 -- import Hkl.Types
19 import Hkl.Xrd
20 import Hkl.Detector
22 -- | Samples
24 project :: FilePath
25 project = "/home/experiences/instrumentation/picca/data/d2am"
26 -- project = "/nfs/ruche-diffabs/diffabs-soleil/com-diffabs/"
28 published :: FilePath
29 published = project </> "published-data"
31 sampleRef :: XRDRef
32 sampleRef = XRDRef "reference"
33 (published </> "calibration")
34 (XrdRefEdf
35 (project </> "16Dec08D5_0268-rsz.edf")
36 (project </> "16Dec08D5_0268-rsz.poni")
39 sampleCalibration :: XRDCalibration
40 sampleCalibration = XRDCalibration { xrdCalibrationName = "calibration"
41 , xrdCalibrationOutputDir = published </> "calibration" -- TODO pourquoi ce output
42 , xrdCalibrationEntries = entries
44 where
46 idxs :: [Int]
47 idxs = [268, 271, 285, 295]
49 entry :: Int -> XRDCalibrationEntry
50 entry idx = XRDCalibrationEntryEdf
51 { xrdCalibrationEntryEdf'Edf = project </> printf "16Dec08D5_%04d-rsz.edf" idx
52 , xrdCalibrationEntryEdf'NptPath = project </> printf "16Dec08D5_%04d-rsz.npt" idx
55 entries :: [XRDCalibrationEntry]
56 entries = [ entry idx | idx <- idxs]
58 bins :: DIM1
59 bins = ix1 1000
61 multibins :: DIM1
62 multibins = ix1 10000
64 threshold :: Threshold
65 threshold = Threshold 5000
67 lab6 :: XRDSample
68 lab6 = XRDSample "test"
69 (published </> "test")
70 [XrdNxs bins multibins threshold entries]
71 where
72 idxs :: [Int]
73 idxs = [268, 271, 285, 295]
75 entry :: Int -> FilePath
76 entry idx = project </> printf "16Dec08D5_%04d-rsz.edf" idx
78 entries :: XrdSource
79 entries = XrdSourceEdf [entry idx | idx <- idxs]
81 -- | Main
83 d2am :: IO ()
84 d2am = do
85 let samples = [lab6]
87 p <- getPoniExtRef sampleRef
89 -- let poniextref = setPose (Hkl.PyFAI.PoniExt.flip p) (MyMatrix HklB (ident 3))
90 let poniextref = setPose p (MyMatrix HklB (ident 3))
92 -- full calibration
93 poniextref' <- calibrate sampleCalibration poniextref Xpad32
95 print poniextref
96 print poniextref'
98 -- integrate each step of the scan
99 _ <- mapConcurrently (integrateMulti poniextref') samples
100 return ()