57 if (
ZZ(freqPos)<0 ||
ZZ(freqNeg)>0)
65 double deltaAng,
const std::string &filterType,
const MissingWedge *_MW)
68 buildBasis(Vtomograph,sigma);
74 if (filterType ==
"wall") {
92 Vtomograph(
k,
i,
j) = basis[0](
k,
i,
j) * (a+b*u0*u0) +
93 basis[1](
k,
i,
j) * (a+b*u1*u1) +
94 basis[2](
k,
i,
j) * (a+b*u2*u2) +
95 c*(basis[3](
k,
i,
j) * u0*u1 +
96 basis[4](k,i,
j) * u0*u2 +
97 basis[5](
k,
i,
j) * u1*u2);
103 double tilt = deltaAng*
i;
104 double deltaRoti = deltaAng/
SIND(tilt);
105 double NrotP =
round(360.0/deltaRoti);
106 for (
int j=0;
j<NrotP;
j++){
107 double rot =
j*deltaRoti;
110 double u2 =
COSD(rot);
114 basis[0](
k,
i,
j) * (a+b*u0*u0) +
115 basis[1](
k,
i,
j) * (a+b*u1*u1) +
116 basis[2](
k,
i,
j) * (a+b*u2*u2) +
117 c*(basis[3](
k,
i,
j) * u0*u1 +
118 basis[4](k,i,
j) * u0*u2 +
119 basis[5](
k,
i,
j) * u1*u2);
121 if(filterval>Vtomograph(k,i,
j))
122 Vtomograph(k,i,
j) = filterval;
131 std::vector< MultidimArray<double> > hx1, hy1, hz1;
132 generate1DFilters(sigma, Vtomograph, hx1, hy1, hz1);
133 for (
int n=0;
n<6;
n++)
136 singleFilter(Vtomograph,hx1[
n],hy1[n],hz1[n],aux);
137 basis.push_back(aux);
149 #define MINUS_ONE_POWER(n) (((n)%2==0)? 1:-1) 228 MW->removeWedge(Vout);
242 for (
int i=0;
i<6;
i++) hx1.push_back(aux);
246 for (
int i=0;
i<6;
i++) hy1.push_back(aux);
250 for (
int i=0;
i<6;
i++) hz1.push_back(aux);
252 double sigma2=sigma*sigma;
253 double k1 = 1.0/pow((2.0*
PI*sigma),(3.0/2.0));
254 double k2 = -1.0/sigma2;
259 double g = -exp(-i2/(2.0*sigma2));
260 hx1[0](
i) = k1*k2*g*(1.0-(i2/sigma2));
263 hx1[3](
i) = k1*k2*k2*g*i;
264 hx1[4](
i) = k1*k2*k2*g*i;
265 hx1[5](
i) = k1*k2*k2*g;
270 double g = -exp(-i2/(2.0*sigma2));
272 hy1[1](
i) = g*(1.0-(i2/sigma2));
281 double g = -exp(-i2/(2.0*sigma2));
284 hz1[2](
i) = g*(1.0-(i2/sigma2));
299 for (
int n=0;
n<6;
n++)
300 h3D(
k,
i,
j)+=(hz1[
n](
k)*hy1[
n](
i)*hx1[
n](
j));
void Euler_angles2matrix(T alpha, T beta, T gamma, Matrix2D< T > &A, bool homogeneous)
void removeWedge(MultidimArray< double > &V) const
Remove wedge.
void generate3DFilter(MultidimArray< double > &h3D, std::vector< MultidimArray< double > > &hx1, std::vector< MultidimArray< double > > &hy1, std::vector< MultidimArray< double > > &hz1)
void FFT_idx2digfreq(T &v, const Matrix1D< int > &idx, Matrix1D< double > &freq)
double tiltPos
Tilt of the positive plane.
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define DIRECT_A1D_ELEM(v, i)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
double rotNeg
Rot of the negative plane.
void buildBasis(const MultidimArray< double > &Vtomograph, double sigma)
double tiltNeg
Tilt of the negative plane.
void generate1DFilters(double sigma, const MultidimArray< double > &Vtomograph, std::vector< MultidimArray< double > > &hx1, std::vector< MultidimArray< double > > &hy1, std::vector< MultidimArray< double > > &hz1)
#define DIRECT_A3D_ELEM(v, k, i, j)
double rotPos
Rot of the positive plane.
#define FOR_ALL_ELEMENTS_IN_ARRAY1D(v)
Steerable(double sigma, MultidimArray< double > &Vtomograph, double deltaAng, const std::string &filterType, const MissingWedge *_MW)
#define VECTOR_R3(v, x, y, z)
void initZeros(const MultidimArray< T1 > &op)
void singleFilter(const MultidimArray< double > &Vin, MultidimArray< double > &hx1, MultidimArray< double > &hy1, MultidimArray< double > &hz1, MultidimArray< double > &Vout)
#define MINUS_ONE_POWER(n)