@@ -48,22 +48,32 @@ def _load_beer_mcstas(f, bank=1):
4848 positions = {
4949 name : f'/entry1/instrument/components/{ key } /Position'
5050 for key in f ['/entry1/instrument/components' ]
51- for name in ['sampleMantid' , 'PSC1' , 'PSC2' , 'PSC3' , 'MCA' , 'MCC' ]
51+ for name in ['sampleMantid' , 'PSC1' , 'PSC2' , 'PSC3' , 'MCA' , 'MCB' , ' MCC' ]
5252 if name in key
5353 }
54- data , events , params , sample_pos , psc1_pos , psc2_pos , psc3_pos , mca_pos , mcc_pos = (
55- _load_h5 (
56- f ,
57- f'NXentry/NXdetector/bank{ bank :02} _events_dat_list_p_x_y_n_id_t' ,
58- f'NXentry/NXdetector/bank{ bank :02} _events_dat_list_p_x_y_n_id_t/events' ,
59- 'NXentry/simulation/Param' ,
60- positions ['sampleMantid' ],
61- positions ['PSC1' ],
62- positions ['PSC2' ],
63- positions ['PSC3' ],
64- positions ['MCA' ],
65- positions ['MCC' ],
66- )
54+ (
55+ data ,
56+ events ,
57+ params ,
58+ sample_pos ,
59+ psc1_pos ,
60+ psc2_pos ,
61+ psc3_pos ,
62+ mca_pos ,
63+ mcb_pos ,
64+ mcc_pos ,
65+ ) = _load_h5 (
66+ f ,
67+ f'NXentry/NXdetector/bank{ bank :02} _events_dat_list_p_x_y_n_id_t' ,
68+ f'NXentry/NXdetector/bank{ bank :02} _events_dat_list_p_x_y_n_id_t/events' ,
69+ 'NXentry/simulation/Param' ,
70+ positions ['sampleMantid' ],
71+ positions ['PSC1' ],
72+ positions ['PSC2' ],
73+ positions ['PSC3' ],
74+ positions ['MCA' ],
75+ positions ['MCB' ],
76+ positions ['MCC' ],
6777 )
6878
6979 events = events [()]
@@ -86,7 +96,10 @@ def _load_beer_mcstas(f, bank=1):
8696 if k in ('mode' , 'sample_filename' , 'lambda' ):
8797 da .coords [k ] = sc .scalar (v )
8898
89- if da .coords ['lambda' ].value == '0' :
99+ if 'lambda' in da .coords :
100+ da .coords ['wavelength_estimate' ] = da .coords .pop ('lambda' )
101+
102+ if da .coords ['wavelength_estimate' ].value == '0' :
90103 if da .coords ['mode' ].value in [
91104 '0' ,
92105 '3' ,
@@ -100,28 +113,28 @@ def _load_beer_mcstas(f, bank=1):
100113 '15' ,
101114 '16' ,
102115 ]:
103- da .coords ['lambda ' ] = sc .scalar (2.1 , unit = 'angstrom' )
116+ da .coords ['wavelength_estimate ' ] = sc .scalar (2.1 , unit = 'angstrom' )
104117 elif da .coords ['mode' ].value in ['1' , '2' ]:
105- da .coords ['lambda ' ] = sc .scalar (3.1 , unit = 'angstrom' )
118+ da .coords ['wavelength_estimate ' ] = sc .scalar (3.1 , unit = 'angstrom' )
106119 elif da .coords ['mode' ].value == '11' :
107- da .coords ['lambda ' ] = sc .scalar (3.0 , unit = 'angstrom' )
120+ da .coords ['wavelength_estimate ' ] = sc .scalar (3.0 , unit = 'angstrom' )
108121 elif da .coords ['mode' ].value == '12' :
109- da .coords ['lambda ' ] = sc .scalar (3.5 , unit = 'angstrom' )
122+ da .coords ['wavelength_estimate ' ] = sc .scalar (3.5 , unit = 'angstrom' )
110123 elif da .coords ['mode' ].value == '13' :
111- da .coords ['lambda ' ] = sc .scalar (6.0 , unit = 'angstrom' )
124+ da .coords ['wavelength_estimate ' ] = sc .scalar (6.0 , unit = 'angstrom' )
112125 elif da .coords ['mode' ].value == '14' :
113- da .coords ['lambda ' ] = sc .scalar (4.0 , unit = 'angstrom' )
126+ da .coords ['wavelength_estimate ' ] = sc .scalar (4.0 , unit = 'angstrom' )
114127 else :
115- da .coords ['lambda ' ] = sc .scalar (
116- float (da .coords ['lambda ' ].value ), unit = 'angstrom'
128+ da .coords ['wavelength_estimate ' ] = sc .scalar (
129+ float (da .coords ['wavelength_estimate ' ].value ), unit = 'angstrom'
117130 )
118131
119132 da .coords ['sample_position' ] = sc .vector (sample_pos [:], unit = 'm' )
120133 da .coords ['detector_position' ] = sc .vector (
121134 list (map (float , da .coords .pop ('position' ).value .split (' ' ))), unit = 'm'
122135 )
123136
124- if da .coords ['mode' ].value in ['0' , '1' , '2' , '11' , '16' ]:
137+ if da .coords ['mode' ].value in ['0' , '1' , '2' , '11' ]:
125138 da .coords ['chopper_position' ] = sc .vector ([0.0 , 0.0 , 0.0 ], unit = 'm' )
126139 elif da .coords ['mode' ].value in ['3' , '4' , '12' , '13' , '15' ]:
127140 da .coords ['chopper_position' ] = sc .vector (
@@ -132,9 +145,13 @@ def _load_beer_mcstas(f, bank=1):
132145 0.5 * (psc1_pos [:] + psc2_pos [:]), unit = 'm'
133146 )
134147 elif da .coords ['mode' ].value in ['7' , '8' , '9' , '10' ]:
135- da .coords ['chopper_position' ] = sc .vector (0.5 * mca_pos [:], unit = 'm' )
148+ da .coords ['chopper_position' ] = sc .vector (mca_pos [:], unit = 'm' )
136149 elif da .coords ['mode' ].value == '14' :
137150 da .coords ['chopper_position' ] = sc .vector (mcc_pos [:], unit = 'm' )
151+ elif da .coords ['mode' ].value == '16' :
152+ da .coords ['chopper_position' ] = sc .vector (
153+ 0.5 * (mca_pos [:] + mcb_pos [:]), unit = 'm'
154+ )
138155 else :
139156 raise ValueError (f'Unkonwn chopper mode { da .coords ["mode" ].value } .' )
140157
@@ -143,7 +160,6 @@ def _load_beer_mcstas(f, bank=1):
143160 da .coords ['t' ].unit = 's'
144161
145162 z = sc .norm (da .coords ['detector_position' ] - da .coords ['sample_position' ])
146- # z = da.coords['position'].fields.z - da.coords['sample_position'].fields.z
147163 L1 = sc .norm (da .coords ['sample_position' ] - da .coords ['chopper_position' ])
148164 L2 = sc .sqrt (da .coords ['x' ] ** 2 + da .coords ['y' ] ** 2 + z ** 2 )
149165
@@ -159,17 +175,15 @@ def _load_beer_mcstas(f, bank=1):
159175 da .coords .pop ('y' )
160176 da .coords .pop ('n' )
161177
162- # expression of temporal offset delta_t checked for pulse shaping mode: 4,5,6
163- delta_t = (
178+ t = da .coords .pop ('t' )
179+ da .coords ['event_time_offset' ] = t % sc .scalar (1 / 14 , unit = 's' ).to (unit = t .unit )
180+ da .coords ["tc" ] = (
164181 sc .constants .m_n
165182 / sc .constants .h
166- * da .coords ['lambda ' ]
167- * sc . norm ( da .coords ['chopper_position' ] ).to (unit = 'angstrom' )
168- ).to (unit = 's' )
183+ * da .coords ['wavelength_estimate ' ]
184+ * da .coords ['L0' ]. min ( ).to (unit = 'angstrom' )
185+ ).to (unit = 's' ) - sc . scalar ( 1 / 14 , unit = 's' ) / 2
169186
170- t = da .coords .pop ('t' )
171- da .coords ['event_time_offset' ] = t % sc .scalar (1 / 14 , unit = t .unit )
172- da .coords ["approximate_tof" ] = da .coords ['event_time_offset' ] - delta_t
173187 return da
174188
175189
@@ -218,10 +232,8 @@ def mcstas_chopper_delay_from_mode(
218232 da : DetectorData [SampleRun ],
219233) -> WavelengthDefinitionChopperDelay :
220234 mode = next (iter (d .coords ['mode' ] for d in da .values ())).value
221- if mode in ('7' , '8' ):
222- return sc .scalar (0.00245635 , unit = 's' )
223- if mode in ('9' , '10' ):
224- return sc .scalar (0.0033730158730158727 , unit = 's' )
235+ if mode in ('7' , '8' , '9' , '10' ):
236+ return sc .scalar (0.0024730158730158727 , unit = 's' )
225237 if mode == '16' :
226238 return sc .scalar (0.000876984126984127 , unit = 's' )
227239 raise ValueError (f'Mode { mode } is not known.' )
0 commit comments