def _get_curr_model(self,**kwargs): shifted = kwargs.get("shifted",False) state = kwargs.get("state","before_projection") if self._iteration > 0: if state == "before_projection": tmp1 = spimage.sp_phaser_model_before_projection(self._phaser) tmp2 = spimage.sp_phaser_support(self._phaser) img = tmp1.image.copy() msk = np.int32(tmp2.image.real) #spimage.sp_image_free(tmp1) #spimage.sp_image_free(tmp2) elif state == "after_projection": tmp = spimage.sp_phaser_model_with_support(self._phaser) img = tmp.image.copy() msk = tmp.mask.copy() #spimage.sp_image_free(tmp) else: img = self._phaser.model.image.copy() msk = np.array(self._sp_initial_support.image.real,dtype="bool") if not shifted: return [np.fft.fftshift(img),np.fft.fftshift(msk)] else: return [img,msk]
def _get_curr_model(self,**kwargs): shifted = kwargs.get("shifted",False) state = kwargs.get("state","before_projection") if self._iteration > 0: if state == "before_projection": tmp1 = spimage.sp_phaser_model_before_projection(self._sp_phaser) tmp2 = spimage.sp_phaser_support(self._sp_phaser) img = tmp1.image.copy() msk = np.int32(tmp2.image.real) #spimage.sp_image_free(tmp1) #spimage.sp_image_free(tmp2) elif state == "after_projection": tmp = spimage.sp_phaser_model_with_support(self._sp_phaser) img = tmp.image.copy() msk = tmp.mask.copy() #spimage.sp_image_free(tmp) else: img = self._sp_phaser.model.image.copy() msk = np.array(self._sp_initial_support.image.real,dtype="bool") if not shifted: return [np.fft.fftshift(img),np.fft.fftshift(msk)] else: return [img,msk]
# create phaser phaser = _spimage.sp_phaser_alloc() _spimage.sp_phaser_init(phaser, phase_alg, sup_alg, _spimage.SpEngineCUDA) _spimage.sp_phaser_set_amplitudes(phaser, amplitudes) _spimage.sp_phaser_init_model(phaser, real_space, 0) _spimage.sp_phaser_init_support(phaser, support, 0, 0) #real_space_s = _spimage.sp_image_shift(real_space) fourier_space = _spimage.sp_image_ifftw3(real_space) ereal_start = _numpy.sqrt((abs(real_space.image[~_numpy.bool8(support.image)])**2).sum() / (abs(real_space.image)**2).sum()) efourier_start = _numpy.sqrt(((abs(fourier_space.image[_numpy.bool8(amplitudes.mask)]) - abs(amplitudes.image[_numpy.bool8(amplitudes.mask)]))**2).sum() / ((abs(amplitudes.image[_numpy.bool8(amplitudes.mask)])**2).sum() + (abs(fourier_space.image[~_numpy.bool8(amplitudes.mask)])**2).sum())) _spimage.sp_phaser_iterate(phaser, options.number_of_iterations) model_out = _spimage.sp_phaser_model(phaser) support_out = _spimage.sp_phaser_support(phaser) fmodel_out = _spimage.sp_phaser_fmodel(phaser) real_space_end = _spimage.sp_phaser_model_before_projection(phaser) fourier_space_end = _spimage.sp_phaser_fmodel(phaser) ereal_end = _numpy.sqrt((abs(real_space_end.image[~_numpy.bool8(support.image)])**2).sum() / (abs(real_space_end.image)**2).sum()) efourier_end = _numpy.sqrt(((abs(fourier_space_end.image[_numpy.bool8(amplitudes.mask)]) - abs(amplitudes.image[_numpy.bool8(amplitudes.mask)]))**2).sum() / ((abs(amplitudes.image[_numpy.bool8(amplitudes.mask)])**2).sum() + (abs(fourier_space_end.image[~_numpy.bool8(amplitudes.mask)])**2).sum())) _spimage.sp_image_write(model_out, "%s/real_space-%s.h5" % (options.output_dir, options.output_affix), 0) _spimage.sp_image_write(support_out, "%s/support-%s.h5" % (options.output_dir, options.output_affix), 0) _spimage.sp_image_write(fmodel_out, "%s/fourier_space-%s.h5" % (options.output_dir, options.output_affix), 0) print "Ereal: %g -> %g" % (ereal_start, ereal_end) print "Efourier: %g -> %g" % (efourier_start, efourier_end)
spimage.sp_phaser_set_amplitudes(phaser, amplitudes) spimage.sp_phaser_init_model(phaser, None, spimage.SpModelRandomPhases) spimage.sp_phaser_init_support(phaser, support, 0, 0) def run_it(number_of_iterations): spimage.sp_phaser_iterate(phaser, number_of_iterations) run_it(NUMBER_OF_ITERATIONS) phaser.algorithm = phase_alg_refine run_it(NUMBER_OF_REFINE_ITERATIONS) # Output data model = spimage.sp_phaser_model(phaser) support = spimage.sp_phaser_support(phaser) fmodel = spimage.sp_phaser_fmodel(phaser) spimage.sp_image_write(model, OUTPUT_DIR + "run_{}_model.h5".format(run_id), 0) spimage.sp_image_write(support, OUTPUT_DIR + "run_{}_support.h5".format(run_id), 0) spimage.sp_image_write(fmodel, OUTPUT_DIR + "run_{}_fmodel.h5".format(run_id), 0) ereal = spimage.sp_phaser_ereal(phaser) efourier = spimage.sp_phaser_efourier(phaser) filename = OUTPUT_DIR + '/run_{}_error.h5'.format(run_id) with h5py.File(filename, "w") as file_handle: file_handle.create_dataset('ereal', data=ereal) file_handle.create_dataset('efourier', data=efourier)
fourier_space = _spimage.sp_image_ifftw3(real_space) support = _numpy.bool8(support.image) ereal_start = _numpy.sqrt((abs(real_space.image[~support])**2).sum() / (abs(real_space.image)**2).sum()) mask = _numpy.bool8(amplitudes.mask) efourier_start = _numpy.sqrt( ((abs(fourier_space.image[mask]) - abs(amplitudes.image[mask]))** 2).sum() / ((abs(amplitudes.image[mask])**2).sum() + (abs(fourier_space.image[~mask])**2).sum())) _spimage.sp_phaser_iterate(phaser, args.number_of_iterations) model_out = _spimage.sp_phaser_model(phaser) support_out = _spimage.sp_phaser_support(phaser) fmodel_out = _spimage.sp_phaser_fmodel(phaser) real_space_end = _spimage.sp_phaser_model_before_projection(phaser) fourier_space_end = _spimage.sp_phaser_fmodel(phaser) ereal_end = _numpy.sqrt((abs(real_space_end.image[~support])**2).sum() / (abs(real_space_end.image)**2).sum()) efourier_end = _numpy.sqrt( ((abs(fourier_space_end.image[mask]) - abs(amplitudes.image[mask]))** 2).sum() / ((abs(amplitudes.image[mask])**2).sum() + (abs(fourier_space_end.image[~mask])**2).sum())) _spimage.sp_image_write(model_out, f"{args.outdir}/real_space-{args.affix}.h5", 0) _spimage.sp_image_write(support_out, f"{args.outdir}/support-{args.affix}.h5", 0)