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)

示例#4
0
    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)
    _spimage.sp_image_write(fmodel_out,
                            f"{args.outdir}/fourier_space-{args.affix}.h5", 0)