99 RunType ,
1010 SampleRotationOffset ,
1111)
12+ from .beamline import DETECTOR_BANK_SIZES
1213from .mcstas import parse_events_ascii , parse_events_h5
1314
1415
@@ -38,11 +39,14 @@ def load_mcstas_events(
3839 unit = da .coords ['sample_rotation' ].unit
3940 )
4041
41- xbins = sc .linspace ('x' , - 0.25 , 0.25 , 14 * 32 + 1 )
42- ybins = sc .linspace ('y' , - 0.25 , 0.25 , 65 )
43- da = da .bin (x = xbins , y = ybins ).rename_dims ({'y' : 'stripe' })
44- da .coords ['stripe' ] = sc .arange ('stripe' , 0 , 64 )
45- da .coords ['z_index' ] = sc .arange ('x' , 14 * 32 - 1 , - 1 , - 1 )
42+ nblades = DETECTOR_BANK_SIZES ['multiblade_detector' ]['blade' ]
43+ nwires = DETECTOR_BANK_SIZES ['multiblade_detector' ]['wire' ]
44+ nstrips = DETECTOR_BANK_SIZES ['multiblade_detector' ]['strip' ]
45+ xbins = sc .linspace ('x' , - 0.25 , 0.25 , nblades * nwires + 1 )
46+ ybins = sc .linspace ('y' , - 0.13 , 0.13 , nstrips + 1 )
47+ da = da .bin (y = ybins , x = xbins ).rename_dims ({'y' : 'strip' })
48+ da .coords ['strip' ] = sc .arange ('strip' , 0 , nstrips )
49+ da .coords ['z_index' ] = sc .arange ('x' , nblades * nwires - 1 , - 1 , - 1 )
4650
4751 # Information is not available in the mcstas output files, therefore it's hardcoded
4852 da .coords ['sample_position' ] = sc .vector ([0.264298 , - 0.427595 , 35.0512 ], unit = 'm' )
@@ -64,7 +68,7 @@ def load_mcstas_events(
6468 x = sc .midpoints (da .coords ['x' ]) * sc .scalar (1.0 , unit = 'm' ),
6569 y = sc .midpoints (da .coords ['y' ]) * sc .scalar (1.0 , unit = 'm' ),
6670 z = sc .scalar (0.0 , unit = 'm' ),
67- )
71+ ). transpose ( da . dims )
6872 da .coords ['position' ] = (
6973 da .coords ['detector_position' ] + rotation_by_detector_rotation * position
7074 )
@@ -82,7 +86,14 @@ def load_mcstas_events(
8286 )
8387 da .coords ["beam_size" ] = sc .scalar (2.0 , unit = 'mm' )
8488
85- da = da .fold ('x' , sizes = {'blade' : 14 , 'wire' : 32 })
89+ da = da .fold (
90+ 'x' ,
91+ sizes = {
92+ k : v
93+ for k , v in DETECTOR_BANK_SIZES ['multiblade_detector' ].items ()
94+ if k in ('blade' , 'wire' )
95+ },
96+ )
8697 da .bins .coords .pop ('L' )
8798 da .bins .coords .pop ('t' )
8899 return DetectorData [RunType ](da )
0 commit comments