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]
예제 #3
0
    # 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)
예제 #5
0
    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)