def merge(self): '''Merge multiple reflection files into one file.''' if not self._hklin_files: raise RuntimeError('no hklin files defined') self.check_hklout() hklin_counter = 0 # for each reflection file, need to gather the column names # and so on, to put in the cad input here - also check to see # if the column names clash... check also that the spacegroups # match up... spacegroup = None column_names = [] column_names_by_file = {} for hklin in self._hklin_files: md = Mtzdump() md.set_working_directory(self.get_working_directory()) md.set_hklin(hklin) md.dump() columns = md.get_columns() spag = md.get_spacegroup() if spacegroup is None: spacegroup = spag if spag != spacegroup: raise RuntimeError('spacegroups do not match') column_names_by_file[hklin] = [] for c in columns: name = c[0] if name in ['H', 'K', 'L']: continue if name in column_names: raise RuntimeError('duplicate column names') column_names.append(name) column_names_by_file[hklin].append(name) # if we get to here then this is a good set up... # create the command line hklin_counter = 0 for hklin in self._hklin_files: hklin_counter += 1 self.add_command_line('hklin%d' % hklin_counter) self.add_command_line(hklin) self.start() hklin_counter = 0 for hklin in self._hklin_files: column_counter = 0 hklin_counter += 1 labin_command = 'labin file_number %d' % hklin_counter for column in column_names_by_file[hklin]: column_counter += 1 labin_command += ' E%d=%s' % (column_counter, column) self.input(labin_command) self.close_wait() try: self.check_for_errors() self.check_ccp4_errors() except RuntimeError as e: # something went wrong; remove the output file try: os.remove(self.get_hklout()) except Exception: pass raise e return self.get_ccp4_status()