1
2
3 """
4 Monitor normalization correction.
5 """
6
7 from numpy import sqrt
8 from reflectometry.reduction.correction import Correction
9 from reflectometry.reduction import err1d
10
13 """
14 Define the kind of monitor normalization.
15 base is 'time', 'counts', 'power', 'auto' or 'none'.
16 """
17 self.base = base
18
20 base = data.monitor.base if self.base == 'auto' else self.base
21 C = data.detector.counts
22 varC = C
23 if base == 'counts':
24 M = data.monitor.counts
25 varM = M
26 units = 'counts per monitor count'
27 elif base == 'time':
28 M = data.monitor.count_time
29
30 varM = data.monitor.time_step/12.
31 units = 'counts per second'
32 elif base == 'power':
33 M = data.monitor.source_power
34 varM = 0
35 units = 'counts per '+data.monitor.source_power_units
36 elif base == 'none':
37 M = 1
38 varM = 0
39 units = 'counts'
40 else:
41 raise ValueError,\
42 "Expected normalization of auto, counts, time, power or none"
43 data.R,data.varR = err1d.div(C,varC,M,varM)
44 data.vunits = units
45 data.vlabel = 'Intensity'
46
48 return "Normalize('%s')"%self.base
49