def test_calculate_magnification(self): AG = AcquisitionGeometry.create_Parallel2D() out = AG.config.system.calculate_magnification() self.assertEqual(out, [None, None, 1])
def get_geometry(self): ''' Parse NEXUS file and returns either ImageData or Acquisition Data depending on file content ''' with h5py.File(self.file_name,'r') as dfile: if np.string_(dfile.attrs['creator']) != np.string_('NEXUSDataWriter.py'): raise Exception('We can parse only files created by NEXUSDataWriter.py') ds_data = dfile['entry1/tomo_entry/data/data'] if ds_data.attrs['data_type'] == 'ImageData': self._geometry = ImageGeometry(voxel_num_x = int(ds_data.attrs['voxel_num_x']), voxel_num_y = int(ds_data.attrs['voxel_num_y']), voxel_num_z = int(ds_data.attrs['voxel_num_z']), voxel_size_x = ds_data.attrs['voxel_size_x'], voxel_size_y = ds_data.attrs['voxel_size_y'], voxel_size_z = ds_data.attrs['voxel_size_z'], center_x = ds_data.attrs['center_x'], center_y = ds_data.attrs['center_y'], center_z = ds_data.attrs['center_z'], channels = ds_data.attrs['channels']) if ds_data.attrs.__contains__('channel_spacing') == True: self._geometry.channel_spacing = ds_data.attrs['channel_spacing'] # read the dimension_labels from dim{} dimension_labels = self.read_dimension_labels(ds_data.attrs) else: # AcquisitionData if ds_data.attrs.__contains__('dist_source_center') or dfile['entry1/tomo_entry'].__contains__('config/source/position'): geom_type = 'cone' else: geom_type = 'parallel' if ds_data.attrs.__contains__('num_pixels_v'): num_pixels_v = ds_data.attrs.get('num_pixels_v') elif ds_data.attrs.__contains__('pixel_num_v'): num_pixels_v = ds_data.attrs.get('pixel_num_v') else: num_pixels_v = 1 if num_pixels_v > 1: dim = 3 else: dim = 2 if self.is_old_file_version(): num_pixels_h = ds_data.attrs.get('pixel_num_h', 1) num_channels = ds_data.attrs['channels'] ds_angles = dfile['entry1/tomo_entry/data/rotation_angle'] if geom_type == 'cone' and dim == 3: self._geometry = AcquisitionGeometry.create_Cone3D(source_position=[0, -ds_data.attrs['dist_source_center'], 0], detector_position=[0, ds_data.attrs['dist_center_detector'],0]) elif geom_type == 'cone' and dim == 2: self._geometry = AcquisitionGeometry.create_Cone2D(source_position=[0, -ds_data.attrs['dist_source_center']], detector_position=[0, ds_data.attrs['dist_center_detector']]) elif geom_type == 'parallel' and dim == 3: self._geometry = AcquisitionGeometry.create_Parallel3D() elif geom_type == 'parallel' and dim == 2: self._geometry = AcquisitionGeometry.create_Parallel2D() else: num_pixels_h = ds_data.attrs.get('num_pixels_h', 1) num_channels = ds_data.attrs['num_channels'] ds_angles = dfile['entry1/tomo_entry/config/angles'] rotation_axis_position = list(dfile['entry1/tomo_entry/config/rotation_axis/position']) detector_position = list(dfile['entry1/tomo_entry/config/detector/position']) ds_detector = dfile['entry1/tomo_entry/config/detector'] if ds_detector.__contains__('direction_x'): detector_direction_x = list(dfile['entry1/tomo_entry/config/detector/direction_x']) else: detector_direction_x = list(dfile['entry1/tomo_entry/config/detector/direction_row']) if ds_detector.__contains__('direction_y'): detector_direction_y = list(dfile['entry1/tomo_entry/config/detector/direction_y']) elif ds_detector.__contains__('direction_col'): detector_direction_y = list(dfile['entry1/tomo_entry/config/detector/direction_col']) ds_rotate = dfile['entry1/tomo_entry/config/rotation_axis'] if ds_rotate.__contains__('direction'): rotation_axis_direction = list(dfile['entry1/tomo_entry/config/rotation_axis/direction']) if geom_type == 'cone': source_position = list(dfile['entry1/tomo_entry/config/source/position']) if dim == 2: self._geometry = AcquisitionGeometry.create_Cone2D(source_position, detector_position, detector_direction_x, rotation_axis_position) else: self._geometry = AcquisitionGeometry.create_Cone3D(source_position,\ detector_position, detector_direction_x, detector_direction_y,\ rotation_axis_position, rotation_axis_direction) else: ray_direction = list(dfile['entry1/tomo_entry/config/ray/direction']) if dim == 2: self._geometry = AcquisitionGeometry.create_Parallel2D(ray_direction, detector_position, detector_direction_x, rotation_axis_position) else: self._geometry = AcquisitionGeometry.create_Parallel3D(ray_direction,\ detector_position, detector_direction_x, detector_direction_y,\ rotation_axis_position, rotation_axis_direction) # for all Aquisition data #set angles angles = list(ds_angles) angle_unit = ds_angles.attrs.get('angle_unit','degree') initial_angle = ds_angles.attrs.get('initial_angle',0) self._geometry.set_angles(angles, initial_angle=initial_angle, angle_unit=angle_unit) #set panel pixel_size_v = ds_data.attrs.get('pixel_size_v', ds_data.attrs['pixel_size_h']) origin = ds_data.attrs.get('panel_origin','bottom-left') self._geometry.set_panel((num_pixels_h, num_pixels_v),\ pixel_size=(ds_data.attrs['pixel_size_h'], pixel_size_v),\ origin=origin) # set channels self._geometry.set_channels(num_channels) dimension_labels = [] dimension_labels = self.read_dimension_labels(ds_data.attrs) #set labels self._geometry.set_labels(dimension_labels) return self._geometry
def test_get_centre_slice(self): AG = AcquisitionGeometry.create_Parallel2D() AG2 = AG.copy() AG2.config.system.get_centre_slice() self.assertEqual(AG.config.system, AG2.config.system)