-
Notifications
You must be signed in to change notification settings - Fork 1
GenerateTiltPairs
Adrian Quintana edited this page Dec 11, 2017
·
1 revision
#include <data/xmipp_image.h>
#include <data/projection.h>
int main()
{
try {
Image<double> V;
Projection P;
V.read("1rux64.vol");
V().setXmippOrigin();
FileName fnUntiltedStk="imagesU.stk";
FileName fnTiltedStk="imagesT.stk";
const int N=50;
double rotAxisAngle=30;
double tiltAxisAngle=20;
Matrix2D<double> Etilt, Eu, Et;
Euler_angles2matrix(rotAxisAngle,tiltAxisAngle,0.0,Etilt);
MetaData md;
for (int n=0; n<N; ++n)
{
double rotu=rnd_unif(0,360);
double tiltu=rnd_unif(0,90);
double psiu=0.0;
// Generate untilted image
projectVolume(V(), P, YSIZE(V()), XSIZE(V()), rotu, tiltu, psiu);
FileName fnUntilted=formatString("%03d@%s",n+1,fnUntiltedStk.c_str());
P.write(fnUntilted,true,WRITE_REPLACE);
// Generate tilted image
Euler_angles2matrix(rotu, tiltu, psiu, Eu);
Et=Etilt*Eu;
double rott, tiltt, psit;
Euler_matrix2angles(Et, rott, tiltt, psit);
projectVolume(V(), P, YSIZE(V()), XSIZE(V()), rott, tiltt, psit);
FileName fnTilted=formatString("%03d@%s",n+1,fnTiltedStk.c_str());
P.write(fnTilted,true,WRITE_REPLACE);
size_t objId=md.addObject();
md.setValue(MDL_IMAGE,fnUntilted,objId);
md.setValue(MDL_ANGLE_ROT,rotu,objId);
md.setValue(MDL_ANGLE_TILT,tiltu,objId);
md.setValue(MDL_ANGLE_PSI,psiu,objId);
objId=md.addObject();
md.setValue(MDL_IMAGE,fnTilted,objId);
md.setValue(MDL_ANGLE_ROT,rott,objId);
md.setValue(MDL_ANGLE_TILT,tiltt,objId);
md.setValue(MDL_ANGLE_PSI,psit,objId);
}
md.write("anglesToReconstruct.xmd");
}
catch (XmippError e)
{
std::cout << e << std::endl;
}
return 0;
}
To compile this code use
scipion xmipp_compile generateTiltPairs.cpp
Invoke as
./generateTiltPairs
-- Main.CoSS - 2015-07-31