Source code for transphire.transphire_train2d

"""
    TranSPHIRE is supposed to help with the cryo-EM data collection
    Copyright (C) 2017 Markus Stabrin

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""

import re
import shutil
import os

from . import transphire_utils as tu


[docs]def create_substack_command(class_average_name, input_stack, isac_dir, output_dir, settings): command = [] block_gpu = False gpu_list = [] shell = True check_files = [] gpu_list = [] try: shutil.rmtree(output_dir) except IOError: pass command.append("PATH=$(dirname $(which {0})):${{PATH}}".format(settings['Path']['sp_pipe.py'])) command.append(settings['Path']['sp_pipe.py']) command.append('isac_substack') command.append(input_stack) command.append(os.path.join(isac_dir, 'ISAC2')) command.append(os.path.join(output_dir, 'STACK')) command.append('--isac_class_avgs_path={0}'.format(class_average_name)) #picking_name = settings['Copy']['Picking'] #if settings[picking_name]['--filament'] == 'True': # command.append('--min_nr_segments={0}'.format(settings[picking_name]['--minimum_number_boxes'])) return ' '.join(command), check_files, block_gpu, gpu_list, shell, 'bdb:{0}/{1}'.format(os.path.join(output_dir, 'STACK'), 'isac_substack')
[docs]def create_restack_command(stack_name, output_dir, settings): prog_name = settings['Copy']['Train2d'] command = [] block_gpu = False gpu_list = [] shell = True check_files = [] gpu_list = [] command.append("PATH=$(dirname $(which {0})):${{PATH}}".format(settings['Path']['sp_pipe.py'])) command.append(settings['Path']['sp_pipe.py']) command.append('restacking') command.append(stack_name) command.append(os.path.join(output_dir, 'BOX')) command.append('--rb_box_size={0}'.format(settings[prog_name]['Box size'])) command.append('--reboxing') return ' '.join(command), check_files, block_gpu, gpu_list, shell, os.path.join(output_dir, 'BOX')
[docs]def create_eval_command(config_file, weight_file, log_file, settings, name): prog_name = settings['Path']['cryolo_evaluation.py'] command = [] block_gpu = False gpu_list = [] shell = False check_files = [] gpu_list = [] with open(log_file, 'r') as read: match = re.search('^.*Wrote runfile to: (.*)$', read.read(), re.M) # https://regex101.com/r/BY0m3B/1 if match is None: return None, check_files, block_gpu, gpu_list, shell command.append(prog_name) command.append('--config={0}'.format(config_file)) command.append('--weights={0}'.format(weight_file)) command.append('--runfile={0}'.format(match.group(1).strip())) prog_name_train = settings['Copy']['Train2d'] if settings[prog_name_train]['Split Gpu?'] == 'True': try: gpu_id = int(name.split('_')[-1])-1 except ValueError: gpu_id = 0 try: gpu = settings[prog_name_train]['--gpu'].split()[gpu_id] except IndexError: raise UserWarning('There are less gpus provided than threads available! Please restart with the same number of pipeline processors as GPUs provided and restart! Stopping this thread!') else: gpu = settings[prog_name_train]['--gpu'] command.append('--gpu={0}'.format(gpu)) return ' '.join(command), check_files, block_gpu, gpu.split(), shell
[docs]def create_train_command(sum_folder, box_folder, output_dir, name, settings): prog_name = settings['Copy']['Train2d'] picking_name = settings['Copy']['Picking'] command = [] block_gpu = False shell = True check_files = [] config_file = os.path.join(output_dir, 'config.json') weight_file = os.path.join(output_dir, 'weight.h5') command.append("PATH=$(dirname $(which {0})):${{PATH}}".format(settings['Path']['cryolo_gui.py'])) command.append(settings['Path']['cryolo_gui.py']) command.append('config') command.append(config_file) command.append(settings[prog_name]['Box size']) command.append('--train_image_folder={0}'.format(sum_folder)) command.append('--train_annot_folder={0}'.format(box_folder)) command.append('--saved_weights_name={0}'.format(weight_file)) command.append('--batch_size={0}'.format(settings[prog_name]['--batch_size'])) command.append('--pretrained_weights={0}'.format(settings[picking_name]['--weights_old'])) command.append('--filtered_output={0}'.format(os.path.join( settings['project_folder'], 'XXX_Filtered_Images' ))) command.append('--train_times={0}'.format(settings[prog_name]['--train_times'])) command.append(';') command.append("PATH=$(dirname $(which {0})):${{PATH}}".format(settings['Path'][prog_name])) command.append(settings['Path'][prog_name]) command.append('-c {0}'.format(config_file)) ignore_list = [] ignore_list.append('--fine_tune') ignore_list.append('--use_multithreading') for entry in ignore_list: try: if settings[prog_name][entry] == 'True': command.append(entry) except KeyError: pass if tu.is_higher_version(prog_name, '1.7.4'): try: command.remove('--use_multithreading') except ValueError: pass ignore_list.append('Split Gpu?') ignore_list.append('--gpu') ignore_list.append('Box size') ignore_list.append('--train_times') ignore_list.append('--batch_size') ignore_list.append('Maximum micrographs') ignore_list.append('Use centered') if settings[prog_name]['Split Gpu?'] == 'True': try: gpu_id = int(name.split('_')[-1])-1 except ValueError: gpu_id = 0 try: gpu = settings[prog_name]['--gpu'].split()[gpu_id] except IndexError: raise UserWarning('There are less gpus provided than threads available! Please restart with the same number of pipeline processors as GPUs provided and restart! Stopping this thread!') else: gpu = settings[prog_name]['--gpu'] command.append('--gpu') command.append('{0}'.format(gpu)) for key in settings[prog_name]: if key in ignore_list: continue else: command.append(key) command.append( '{0}'.format(settings[prog_name][key]) ) return ' '.join(command), check_files, block_gpu, gpu.split(), shell, weight_file, config_file