@@ -42,6 +42,35 @@ def configure_detector(self, **kwargs):
4242 self .detector .file .external_name .put (file_prefix )
4343 self .detector .file .write_path_template = data_directory_name
4444
45+ def configure_zebra (self , ** kwargs ):
46+ angle_start = kwargs ["angle_start" ]
47+ exposurePeriodPerImage = kwargs ["exposure_period_per_image" ]
48+ detector_dead_time = kwargs ["detector_dead_time" ]
49+ scanWidth = kwargs ["scan_width" ]
50+ imgWidth = kwargs ["img_width" ]
51+ numImages = kwargs ["num_images" ]
52+ self .zebra_daq_prep ()
53+ self .zebra .pc .encoder .put (3 ) # encoder 0=x, 1=y,2=z,3=omega
54+ ttime .sleep (1.0 ) # used since LSDC 1 - reason unknown
55+ self .zebra .pc .direction .put (0 ) # direction 0 = positive
56+ self .zebra .pc .gate .sel .put (0 )
57+ self .zebra .pc .pulse .sel .put (1 )
58+ self .zebra .pc .pulse .start .put (0 )
59+
60+ PW = (exposurePeriodPerImage - detector_dead_time ) * 1000
61+ PS = (exposurePeriodPerImage ) * 1000
62+ GW = scanWidth - (1.0 - (PW / PS )) * (imgWidth / 2.0 )
63+ self .setup_zebra_vector_scan (
64+ angle_start = angle_start ,
65+ gate_width = GW ,
66+ scan_width = scanWidth + 0.001 , # JA not sure why, but done in old LSDC
67+ pulse_width = PW ,
68+ pulse_step = PS ,
69+ exposure_period_per_image = exposurePeriodPerImage ,
70+ num_images = numImages ,
71+ is_still = imgWidth == 0 ,
72+ )
73+
4574 # expected zebra setup:
4675 # time in ms
4776 # Posn direction: positive
@@ -68,6 +97,8 @@ def setup_zebra_vector_scan(
6897 self .zebra .pc .pulse .step .put (pulse_step )
6998 self .zebra .pc .pulse .delay .put (exposure_period_per_image / 2 * 1000 )
7099 self .zebra .pc .pulse .max .put (num_images )
100+ self .vector .hold .put (0 ) # necessary to prevent problems upon
101+ # exposure time change
71102
72103 def detector_arm (self , ** kwargs ):
73104 start = kwargs ["angle_start" ]
0 commit comments