39 return eprm->evaluateAlignment(aux);
55 <<
"Reference: " <<
fnRef << std::endl
56 <<
"Dual: " <<
fnDual << std::endl
57 <<
"Output: " <<
fnOut << std::endl
65 addUsageLine(
"Align two dual tilt series that have been previously internally aligned");
69 addParamsLine(
" : The selfile must contain the list of micrographs");
72 addParamsLine(
" [-o <rootname=\"\">] : Rootname for the aligned tilt series");
73 addParamsLine(
" : If not given, the dual tilt series+_aligned");
74 addParamsLine(
" [--scale <s=0.25>] : Scale for performing the common line comparisons");
85 double minAbsTilt=1000;
113 std::cout <<
"Reading data...\n";
122 double minAbsTilt=1000;
127 if (fabs(
tiltRef(i))<minAbsTilt)
163 Iref().setXmippOrigin();
164 Idual().setXmippOrigin();
172 save.
write(
"PPPref0.xmp");
174 save.
write(
"PPPdual0.xmp");
182 save.
write(
"PPPdual0Aligned.xmp");
183 std::cout <<
"M0\n" << M0 << std::endl;
184 std::cout <<
"M0inv\n" << M0inv << std::endl;
185 std::cout <<
"Press any key\n";
205 std::cout <<
"First estimate (180) of (rot,tilt,psi,x,y,z)=\n" 208 std::cout <<
"First estimate (0) of (rot,tilt,psi,x,y,z)=\n" 220 double X,
double Y,
double Z)
252 save.
write(
"PPPref.xmp");
262 save.
write(
"PPPrefaligned.xmp");
269 save.
write(
"PPPdual.xmp");
277 double cj=
COSD(angj);
278 double sj=
SIND(angj);
291 save.
write(
"PPPdualAligned.xmp");
296 std::cout <<
"refi=" << refi <<
" dualj=" << dualj << std::endl
297 <<
" tiltRef=" <<
tiltRef(refi) <<
" tiltDual=" <<
tiltDual(dualj) << std::endl
304 <<
" angi=" << angi <<
" angj=" << angj << std::endl
305 <<
" A\n" <<
A << std::endl
312 std::cout <<
"Press any key\n";
325 double X=_alignment(3);
326 double Y=_alignment(4);
327 double Z=_alignment(5);
332 double avgDistance=0;
333 for (
int nref=0; nref<Nref; nref++)
334 for (
int ndual=0; ndual<Ndual; ndual++)
344 avgDistance/=Ncomparisons;
415 Idual().setXmippOrigin();
422 double rot, tilt,
psi;
447 for (
int ndual=0; ndual<Ndual; ndual++)
451 std::cout <<
"objective0=" << objective0 <<
" objective180=" << objective180 << std::endl;
452 if (objective0<objective180)
485 A2D_ELEM(Ifft,
i,
j)*=std::complex<double>(cos(arg),sin(arg));
#define VECTOR_R2(v, x, y)
Matrix1D< double > commonlinei
#define A2D_ELEM(v, i, j)
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
double distanceBetweenCommonLines(int refi, int dualj, const Matrix2D< double > &E, double X, double Y, double Z)
Distance between a pair of common lines.
double getDoubleParam(const char *param, int arg=0)
double wrapperDualAligment(double *p, void *prm)
FileName fnOut
Aligned tilt series.
Matrix1D< double > commonlinej
double alignImages(const MultidimArray< double > &Iref, const AlignmentTransforms &IrefTransforms, MultidimArray< double > &I, Matrix2D< double > &M, bool wrap, AlignmentAux &aux, CorrelationAux &aux2, RotationalCorrelationAux &aux3)
void Euler_angles2matrix(T alpha, T beta, T gamma, Matrix2D< T > &A, bool homogeneous)
void Euler_direction(double alpha, double beta, double gamma, Matrix1D< double > &v)
void readParams()
Read parameters from command line.
MultidimArray< double > profilei
Matrix1D< double > vectorR3(double x, double y, double z)
void write(const FileName &name="", size_t select_img=ALL_IMAGES, bool isStack=false, int mode=WRITE_OVERWRITE, CastWriteMode castMode=CW_CAST, int _swapWrite=0)
double correlationIndex(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=NULL, MultidimArray< double > *Contributions=NULL)
void readDual()
Read dual series.
void shiftProjectionInZ(MultidimArray< double > &I, int dualj, double Z) const
Shift the projection in Z.
void compose(const String &str, const size_t no, const String &ext="")
FileName removeDirectories(int keep=0) const
void inv(Matrix2D< T > &result) const
void produceSideInfo()
Produce side info.
Matrix2D< T > transpose() const
Matrix1D< T > vectorProduct(const Matrix1D< T > &v1, const Matrix1D< T > &v2)
void FFT_idx2digfreq(T &v, const Matrix1D< int > &idx, Matrix1D< double > &freq)
std::vector< MultidimArray< double > > imgDual
void show()
Show parameters.
#define FOR_ALL_ELEMENTS_IN_ARRAY2D(m)
Matrix1D< T > transpose() const
void addSeeAlsoLine(const char *seeAlso)
MultidimArray< double > tiltRef
#define MAT_ELEM(m, i, j)
#define FOR_ALL_ELEMENTS_IN_MATRIX1D(v)
Matrix1D< double > alignment
MultidimArray< double > I
const char * getParam(const char *param, int arg=0)
Matrix1D< double > commonlinejE
MultidimArray< double > tiltDual
#define XMIPP_EQUAL_ACCURACY
void resize(size_t Xdim, bool copy=true)
void write(const FileName &fn) const
Matrix1D< double > normalj
void alignDual()
Align dual.
MultidimArray< double > profilej
Matrix1D< double > vectorR2(double x, double y)
void defineParams()
Usage.
#define M3x3_BY_V3x1(a, M, b)
void findParametersAt0degrees(bool rotateDual)
Find parameters (shift+rotation) at 0 degrees.
Matrix1D< double > commonline
FileName withoutExtension() const
double scaleFactor
Scale factor.
double optimizeAlignment()
Optimize current alignment.
double psi(const double x)
void Euler_matrix2angles(const Matrix2D< double > &A, double &alpha, double &beta, double &gamma, bool homogeneous)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
FileName fnRef
Reference tilt series.
void addUsageLine(const char *line, bool verbatim=false)
void initZeros(const MultidimArray< T1 > &op)
std::vector< MultidimArray< double > > imgRef
void Uproject_to_plane(const Matrix1D< double > &point, const Matrix1D< double > &direction, double distance, Matrix1D< double > &result)
double fitness(double *p)
Matrix1D< double > normali
void addParamsLine(const String &line)
#define SPEED_UP_temps012
double evaluateAlignment(const Matrix1D< double > &_alignment)
Evaluate alignment.
FileName fnDual
Dual tilt series.