#include "log.h"
#include "emdata.h"
#include "xydata.h"
#include "assert.h"
#include "projector.h"
#include <sys/types.h>
#include <sys/times.h>
#include <time.h>
#include <sys/time.h>
#include "spidutil.h"
Include dependency graph for doapmd.cpp:
Go to the source code of this file.
Defines | |
#define | CLK_TCK 60 |
Functions | |
double | mytimer () |
int | main () |
#define CLK_TCK 60 |
int main | ( | ) |
Definition at line 66 of file doapmd.cpp.
References angles, apmd(), EMAN::EMData::get_ndim(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), APMDopt::iskip, APMDopt::mode, APMDopt::mr, mytimer(), newangles, APMDopt::nr, nx, ny, EMAN::EMData::project(), EMAN::EMData::read_image(), and status.
00067 { 00068 EMData *volume = new EMData(); // initial volume 00069 EMData *expimg = new EMData(); // experimental image 00070 00071 Dict refparams; 00072 APMDopt options; 00073 00074 vector <float> angles; 00075 float delta, tlb, tub, plb, pub; 00076 int ndim, nx, ny, nz, nang, status; 00077 int nref, nimg, i; 00078 double t0, t1; 00079 float *newangles; 00080 00081 printf("reading a 3-D volume...\n"); 00082 volume->read_image("vol001.tfc"); 00083 00084 ndim = volume->get_ndim(); 00085 nx = volume->get_xsize(); 00086 ny = volume->get_ysize(); 00087 nz = volume->get_zsize(); 00088 00089 // print some stats 00090 printf("ndim = %d, nx = %d, ny = %d, nz = %d\n", ndim, nx, ny, nz); 00091 00092 // generate a set of reference projections from the volume 00093 00094 delta = 15.0; 00095 tlb = 0.0; 00096 tub = 90.0; 00097 plb = 0.0; 00098 pub = 359.9; 00099 00100 // angles used to generate reference projections 00101 angles = Util::voea(delta, tlb, tub, plb, pub); 00102 nang = angles.size()/3; 00103 printf("size(angles) = %d\n", nang); 00104 00105 refparams["anglelist"] = angles; 00106 refparams["angletype"] = "SPIDER"; 00107 refparams["radius"] = 30.0; 00108 t0 = mytimer(); 00109 printf("generating reference projections...\n"); 00110 EMData* refprj = volume->project("pawel", refparams); 00111 t1 = mytimer() - t0; 00112 nref = refprj->get_zsize(); 00113 printf("nref = %d\n", nref); 00114 00115 printf("time used in ref projection calculation = %11.3e\n", t1); 00116 00117 // read experimental images 00118 expimg->read_image("tf2d0001.tfc"); 00119 nimg = expimg->get_zsize(); 00120 00121 options.mr = 5; 00122 options.nr = 30; 00123 options.iskip = 1; 00124 options.mode = 'F'; 00125 00126 // run APMD on expimg using refprj as the reference, 00127 00128 printf("running APMD...\n"); 00129 00130 newangles = new float[nimg*3]; 00131 status = apmd(refprj, refparams, expimg, options, newangles); 00132 if (status != 0) { 00133 fprintf(stderr, "APMD failed!\n"); 00134 goto EXIT; 00135 } 00136 00137 for (i = 1; i<=nimg; i++) 00138 printf("psi = %g, theta = %g, phi = %g\n", 00139 newangles(1,i), newangles(2,i), newangles(3,i)); 00140 00141 EXIT: 00142 if (volume) delete volume; 00143 if (expimg) delete expimg; 00144 if (refprj) delete refprj; 00145 if (newangles) delete newangles; 00146 return status; 00147 }
double mytimer | ( | ) |
Definition at line 47 of file doapmd.cpp.
References CLK_TCK.
Referenced by main().
00048 { 00049 struct tms use; 00050 double tmp; 00051 times(&use); 00052 tmp = use.tms_utime; 00053 tmp += use.tms_stime; 00054 return (double)(tmp) / CLK_TCK; 00055 }