Mercurial > repos > rv43 > tomo
comparison tomo.py @ 21:3caba2116858 draft
"planemo upload for repository https://github.com/rolfverberg/galaxytools commit e32e37ee46f47b185f924884685eb1d464761e86"
author | rv43 |
---|---|
date | Mon, 18 Apr 2022 19:43:15 +0000 |
parents | c033f8843dc0 |
children | ac2f726f9054 |
comparison
equal
deleted
inserted
replaced
20:c033f8843dc0 | 21:3caba2116858 |
---|---|
1881 self.config = msnc.update('config.txt', 'check_centers', True, 'find_centers') | 1881 self.config = msnc.update('config.txt', 'check_centers', True, 'find_centers') |
1882 | 1882 |
1883 def reconstructTomoStacks(self, galaxy_param=None, num_core=None): | 1883 def reconstructTomoStacks(self, galaxy_param=None, num_core=None): |
1884 """Reconstruct tomography stacks. | 1884 """Reconstruct tomography stacks. |
1885 """ | 1885 """ |
1886 print('OK1') | |
1887 if num_core is None: | 1886 if num_core is None: |
1888 num_core = self.num_core | 1887 num_core = self.num_core |
1888 if self.galaxy_flag: | |
1889 assert(galaxy_param) | |
1890 if not os.path.exists('center_slice_pngs'): | |
1891 os.mkdir('center_slice_pngs') | |
1889 logging.debug('Reconstruct tomography stacks') | 1892 logging.debug('Reconstruct tomography stacks') |
1890 stacks = self.config['stack_info']['stacks'] | 1893 stacks = self.config['stack_info']['stacks'] |
1891 assert(len(self.tomo_stacks) == self.config['stack_info']['num']) | 1894 assert(len(self.tomo_stacks) == self.config['stack_info']['num']) |
1892 assert(len(self.tomo_stacks) == len(stacks)) | 1895 assert(len(self.tomo_stacks) == len(stacks)) |
1893 assert(len(self.tomo_recon_stacks) == len(stacks)) | 1896 assert(len(self.tomo_recon_stacks) == len(stacks)) |
1894 print('OK2') | |
1895 if self.galaxy_flag: | 1897 if self.galaxy_flag: |
1896 assert(isinstance(galaxy_param, dict)) | 1898 assert(isinstance(galaxy_param, dict)) |
1897 # Get rotation axis centers | 1899 # Get rotation axis centers |
1898 center_offsets = galaxy_param['center_offsets'] | 1900 center_offsets = galaxy_param['center_offsets'] |
1899 assert(isinstance(center_offsets, list) and len(center_offsets) == 2) | 1901 assert(isinstance(center_offsets, list) and len(center_offsets) == 2) |
1905 if galaxy_param: | 1907 if galaxy_param: |
1906 logging.warning('Ignoring galaxy_param in reconstructTomoStacks (only for Galaxy)') | 1908 logging.warning('Ignoring galaxy_param in reconstructTomoStacks (only for Galaxy)') |
1907 galaxy_param = None | 1909 galaxy_param = None |
1908 lower_center_offset = None | 1910 lower_center_offset = None |
1909 upper_center_offset = None | 1911 upper_center_offset = None |
1910 print('OK3') | |
1911 | 1912 |
1912 # Get rotation axis rows and centers | 1913 # Get rotation axis rows and centers |
1913 find_center = self.config['find_center'] | 1914 find_center = self.config['find_center'] |
1914 lower_row = find_center.get('lower_row') | 1915 lower_row = find_center.get('lower_row') |
1915 if lower_row is None: | 1916 if lower_row is None: |
1932 logging.error('Unable to read upper_center_offset from config') | 1933 logging.error('Unable to read upper_center_offset from config') |
1933 return | 1934 return |
1934 center_slope = (upper_center_offset-lower_center_offset)/(upper_row-lower_row) | 1935 center_slope = (upper_center_offset-lower_center_offset)/(upper_row-lower_row) |
1935 | 1936 |
1936 # Set thetas (in radians) | 1937 # Set thetas (in radians) |
1937 print('OK4') | |
1938 theta_range = self.config['theta_range'] | 1938 theta_range = self.config['theta_range'] |
1939 theta_start = theta_range['start'] | 1939 theta_start = theta_range['start'] |
1940 theta_end = theta_range['end'] | 1940 theta_end = theta_range['end'] |
1941 num_theta = theta_range['num'] | 1941 num_theta = theta_range['num'] |
1942 num_theta_skip = self.config['preprocess'].get('num_theta_skip', 0) | 1942 num_theta_skip = self.config['preprocess'].get('num_theta_skip', 0) |
1943 thetas = np.radians(np.linspace(theta_start, theta_end, | 1943 thetas = np.radians(np.linspace(theta_start, theta_end, |
1944 int(num_theta/(num_theta_skip+1)), endpoint=False)) | 1944 int(num_theta/(num_theta_skip+1)), endpoint=False)) |
1945 | 1945 |
1946 print('OK5') | |
1947 # Reconstruct tomo stacks | 1946 # Reconstruct tomo stacks |
1948 zoom_perc = self.config['preprocess'].get('zoom_perc', 100) | 1947 zoom_perc = self.config['preprocess'].get('zoom_perc', 100) |
1949 if zoom_perc == 100: | 1948 if zoom_perc == 100: |
1950 basetitle = 'recon stack full' | 1949 basetitle = 'recon stack fullres' |
1951 else: | 1950 else: |
1952 basetitle = f'recon stack {zoom_perc}p' | 1951 basetitle = f'recon stack {zoom_perc}p' |
1953 load_error = False | 1952 load_error = False |
1954 stacks = self.config['stack_info']['stacks'] | 1953 stacks = self.config['stack_info']['stacks'] |
1955 for i,stack in enumerate(stacks): | 1954 for i,stack in enumerate(stacks): |
1969 continue | 1968 continue |
1970 stack['reconstructed'] = False | 1969 stack['reconstructed'] = False |
1971 if not self.tomo_stacks[i].size: | 1970 if not self.tomo_stacks[i].size: |
1972 self.tomo_stacks[i], available = self._loadTomo('red stack', index, | 1971 self.tomo_stacks[i], available = self._loadTomo('red stack', index, |
1973 required=True) | 1972 required=True) |
1974 print(f'self.tomo_stacks.shape = {self.tomo_stacks[i].shape}') | |
1975 if not self.tomo_stacks[i].size: | 1973 if not self.tomo_stacks[i].size: |
1976 logging.error(f'Unable to load tomography stack {index} for reconstruction') | 1974 logging.error(f'Unable to load tomography stack {index} for reconstruction') |
1977 stack[i]['preprocessed'] = False | 1975 stack[i]['preprocessed'] = False |
1978 load_error = True | 1976 load_error = True |
1979 continue | 1977 continue |
1983 t0 = time() | 1981 t0 = time() |
1984 self.tomo_recon_stacks[i]= self._reconstructOneTomoStack(self.tomo_stacks[i], | 1982 self.tomo_recon_stacks[i]= self._reconstructOneTomoStack(self.tomo_stacks[i], |
1985 thetas, center_offsets=center_offsets, sigma=0.1, num_core=num_core, | 1983 thetas, center_offsets=center_offsets, sigma=0.1, num_core=num_core, |
1986 algorithm='gridrec', run_secondary_sirt=True, secondary_iter=25) | 1984 algorithm='gridrec', run_secondary_sirt=True, secondary_iter=25) |
1987 logging.info(f'Reconstruction of stack {index} took {time()-t0:.2f} seconds!') | 1985 logging.info(f'Reconstruction of stack {index} took {time()-t0:.2f} seconds!') |
1988 if not self.test_mode and not self.galaxy_flag: | 1986 if self.galaxy_flag: |
1989 row_slice = int(self.tomo_stacks[i].shape[0]/2) | 1987 x_slice = int(self.tomo_stacks[i].shape[0]/2) |
1990 title = f'{basetitle} {index} slice{row_slice}' | 1988 title = f'{basetitle} {index} xslice{x_slice}' |
1991 msnc.quickImshow(self.tomo_recon_stacks[i][row_slice,:,:], title=title, | 1989 msnc.quickImshow(self.tomo_recon_stacks[i][x_slice,:,:], title=title, |
1990 path='center_slice_pngs', save_fig=True, save_only=True) | |
1991 y_slice = int(self.tomo_stacks[i].shape[0]/2) | |
1992 title = f'{basetitle} {index} yslice{y_slice}' | |
1993 msnc.quickImshow(self.tomo_recon_stacks[i][:,y_slice,:], title=title, | |
1994 path='center_slice_pngs', save_fig=True, save_only=True) | |
1995 z_slice = int(self.tomo_stacks[i].shape[0]/2) | |
1996 title = f'{basetitle} {index} zslice{z_slice}' | |
1997 msnc.quickImshow(self.tomo_recon_stacks[i][:,:,z_slice], title=title, | |
1998 path='center_slice_pngs', save_fig=True, save_only=True) | |
1999 elif not self.test_mode: | |
2000 x_slice = int(self.tomo_stacks[i].shape[0]/2) | |
2001 title = f'{basetitle} {index} xslice{x_slice}' | |
2002 msnc.quickImshow(self.tomo_recon_stacks[i][x_slice,:,:], title=title, | |
1992 path=self.output_folder, save_fig=self.save_plots, | 2003 path=self.output_folder, save_fig=self.save_plots, |
1993 save_only=self.save_plots_only) | 2004 save_only=self.save_plots_only) |
1994 msnc.quickPlot(self.tomo_recon_stacks[i] | 2005 msnc.quickPlot(self.tomo_recon_stacks[i] |
1995 [row_slice,int(self.tomo_recon_stacks[i].shape[2]/2),:], | 2006 [x_slice,int(self.tomo_recon_stacks[i].shape[2]/2),:], |
1996 title=f'{title} cut{int(self.tomo_recon_stacks[i].shape[2]/2)}', | 2007 title=f'{title} cut{int(self.tomo_recon_stacks[i].shape[2]/2)}', |
1997 path=self.output_folder, save_fig=self.save_plots, | 2008 path=self.output_folder, save_fig=self.save_plots, |
1998 save_only=self.save_plots_only) | 2009 save_only=self.save_plots_only) |
1999 self._saveTomo('recon stack', self.tomo_recon_stacks[i], index) | 2010 self._saveTomo('recon stack', self.tomo_recon_stacks[i], index) |
2000 # else: | |
2001 # np.savetxt(self.output_folder+f'recon_stack_{index}.txt', | |
2002 # self.tomo_recon_stacks[i][row_slice,:,:], fmt='%.6e') | |
2003 self.tomo_stacks[i] = np.array([]) | 2011 self.tomo_stacks[i] = np.array([]) |
2004 print('OK6') | |
2005 | 2012 |
2006 # Update config and save to file | 2013 # Update config and save to file |
2007 stack['reconstructed'] = True | 2014 stack['reconstructed'] = True |
2008 combine_stacks = self.config.get('combine_stacks') | 2015 combine_stacks = self.config.get('combine_stacks') |
2009 if combine_stacks and index in combine_stacks.get('stacks', []): | 2016 if combine_stacks and index in combine_stacks.get('stacks', []): |
2010 combine_stacks['stacks'].remove(index) | 2017 combine_stacks['stacks'].remove(index) |
2011 self.cf.saveFile(self.config_out) | 2018 self.cf.saveFile(self.config_out) |
2012 | 2019 |
2013 print('OK7') | |
2014 # Save reconstructed tomography stack to file | 2020 # Save reconstructed tomography stack to file |
2015 if self.galaxy_flag: | 2021 if self.galaxy_flag: |
2016 t0 = time() | 2022 t0 = time() |
2017 output_name = galaxy_param['output_name'] | 2023 output_name = galaxy_param['output_name'] |
2018 logging.info(f'Saving reconstructed tomography stack to {output_name} ...') | 2024 logging.info(f'Saving reconstructed tomography stack to {output_name} ...') |