#include "Vector.h"
#include "mrcImage.h"
#include "lmrc3Dto2D.h"
+#include "lmrcFFTCentralSection.h"
typedef enum lmrc3Dto2DObjectAreaMode {
lmrc3D2DObjectAreaModeCubic=0,
} lmrc3Dto2DSingleInfo;
+typedef struct lmrc3Dto2DFFTInfoOut{
+ mrcImage out;
+ char EulerMode[5];
+ double Rot[3];
+ double Prior;
+}lmrc3Dto2DFFTInfoOut;
+
+typedef struct lmrc3Dto2DFFTInfo{
+
+ lmrc3Dto2DFFTInfoOut* Out;
+ lmrcFFTCentralSectionsGetInfo llinfo;
+}lmrc3Dto2DFFTInfo;
+
+
+
extern void lmrcImage3Dto2D(mrcImage* out, mrcImage* in, lmrc3Dto2DInfo* linfo, int mode);
extern void lmrcImage3Dto2DFollowingTailer(mrcImage* out, mrcImage* in, mrcImage* ref, lmrc3Dto2DInfo* linfo, int mode);
extern void lmrcImage3Dto2DSingle(mrcImage* out, mrcImage* in,
lmrc3Dto2DInfo* linfo,
lmrc3Dto2DSingleInfo* llinfo,
int mode);
-
+/*3DFFT to 2DFFT*/
+extern void lmrc3Dto2DFFT(lmrc3Dto2DFFTInfoOut* Out, mrcImage* template, mrcImage* volume, lmrc3Dto2DFFTInfo* linfo, int mode);
+extern void lmrc3Dto2DFFTInfoWrite(FILE* fpt, char* filename, char* file3d, lmrc3Dto2DFFTInfoOut* Out, lmrc3Dto2DFFTInfo* linfo,int mode);
+extern
#endif /* LMRC2DTO3D_H */
typedef struct lmrcMultiFFTCentralSectionsCompareInfoOut{
mrcImage out;
-// char EulerMode[5];
+ char volume[256];
+ char EulerMode[5];
double Rot[3];
double Likelihood;
double Prob;
- double Weight;
+ double Prior;
+ double Post;
+ //double Variat;
+ int OriginNum;
}lmrcMultiFFTCentralSectionsCompareInfoOut;
typedef struct lmrcMultiFFTCentralSectionsCompareInfo{
char EulerMode[5];
lmrcFFTCentralSectionsGetInfo llinfo;
- lmrcMultiFFTCentralSectionsCompareInfoOut* Out;
+ int OutSize;
+ int PriorSize;
+ double Variat;
+ double** Sigma;
+ lmrcMultiFFTCentralSectionsCompareInfoOut* Out;
+ lmrcMultiFFTCentralSectionsCompareInfoOut* Prior;
}lmrcMultiFFTCentralSectionsCompareInfo;
typedef struct lmrcFFTCentralSectionCompareInfo{
extern void lmrcFFTCentralSectionGet(mrcImage* out, mrcImage* template, mrcImage* volume, lmrcFFTCentralSectionInfo* linfo, int mode);
extern void lmrcFFTCentralSectionCompare(mrcImage* in, mrcImage* volume, lmrcFFTCentralSectionCompareInfo* linfo, int mode);
extern void lmrcFFTCentralSectionCompareInfoWrite(FILE* fpt, float Likelihood, int mode);
-extern void lmrcFFTCentralSectionsGet(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* template, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode);
-extern void lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode);
+extern void lmrcFFTCentralSectionsGet(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* template, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode);
+extern void lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode);
extern void lmrcMultiFFTCentralSectionsCompareNormalization(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode);
-extern void lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int Mode, float mode1, float mode2);
+extern void lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2);
extern void lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInfoOut Out[], int left, int right);
+//extern void lmrcMultiFFTCentralSectionsCompareInfoSortPre(lmrcMultiFFTCentralSectionsCompareInfo* linfo, int left, int right);
+extern void lmrcMultiFFTCentralSectionsCompareInfoProbSet(lmrcMultiFFTCentralSectionsCompareInfo* linfo ,int mode);
+extern void lmrcMultiFFTCentralSectionsCompareInfoLimit(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2);
+extern void lmrcMultiFFTCentralSectionsCompareInfoUpdate(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo);
+extern void lmrcMultiFFTCentralSectionsCompareInfoVariation(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo);
/* prototype end */
#ifdef __cplusplus
--- /dev/null
+/*
+# %M% %Y% %I%
+# The latest update : %G% at %U%
+#
+#%Z% lmrcMultiFFTCentralSectionsCompare ver %I%
+#%Z% Created by
+#%Z%
+#%Z% Usage : lmrcMultiFFTCentralSectionsCompare
+#%Z% Attention
+#%Z%
+*/
+static char __sccs_id[] = "%Z%lmrcMultiFFTCentralSectionsCompare ver%I%; Date:%D% %Z%";
+
+#define DEBUG
+#include "genUtil.h"
+#include "Memory.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <math.h>
+#include "./lmrcFFTCentralSection.h"
+#include "../inc/mrcImage.h"
+
+void
+lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode){
+ mrcImageParaTypeReal x, y;
+ double likelihood;
+ double likelihoodxre, likelihoodyre, likelihoodxyre;
+ double likelihoodxim, likelihoodyim, likelihoodxyim;
+ double rein, imin;
+ double revol, imvol;
+ int i,j, flag;
+ clock_t start,end;
+
+ DEBUGPRINT("lmrcMultiFFTCentralSectionsCompare start\n");
+
+ for(i=0; i < linfo->OutSize; i++){
+ flag =0;
+ for(j=0; j< linfo->PriorSize; j++){
+ if(Out[i].OriginNum == linfo->Prior[j].OriginNum){
+ if(mode == 1){
+ likelihoodxre = 0.0;
+ likelihoodyre = 0.0;
+ likelihoodxyre = 0.0;
+ likelihoodxim = 0.0;
+ likelihoodyim = 0.0;
+ likelihoodxyim = 0.0;
+ for(x=-in->HeaderN.x/2.0; x < in->HeaderN.x/2.0 ; x++){
+ for(y=-in->HeaderN.y/2.0; y < in -> HeaderN.y/2.0 ; y++){
+
+ mrcPixelDataGet(in, x, y, 0, &rein, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(in, x, y, 0, &imin, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(&Out[i].out, x, y, 0, &revol, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(&Out[i].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+
+ likelihoodxre = likelihoodxre + rein*rein;
+ likelihoodxim = likelihoodxim + imin*imin;
+ likelihoodyre = likelihoodyre + revol*revol;
+ likelihoodyim = likelihoodyim + imvol*imvol;
+ likelihoodxyre = likelihoodxyre + rein*revol;
+ likelihoodxyim = likelihoodxyim + imin*imvol;
+ }
+ }
+ Out[i].Likelihood = likelihoodxyre/sqrt(likelihoodxre*likelihoodyre) + likelihoodxyim/sqrt(likelihoodxim*likelihoodyim);
+ }else{
+ likelihood = 0.0;
+ for(x= -in->HeaderN.x/2.0; x < in -> HeaderN.x/2.0 ; x++){
+ for(y= -in->HeaderN.y/2.0; y < in -> HeaderN.y/2.0 ; y++){
+ mrcPixelDataGet(in, x, y, 0, &rein, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(in, x, y, 0, &imin, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(&Out[i].out, x, y, 0, &revol, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(&Out[i].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+
+ likelihood = likelihood + ((rein - revol)*(rein - revol) + (imin - imvol)*(imin - imvol))/(-2);
+ }
+ }
+ Out[i].Likelihood = exp(likelihood)/(2*M_PI);
+ }
+ flag = 1;
+ }
+ }
+ if(flag == 0){
+ Out[i].Likelihood = 0;
+ }
+ }
+ DEBUGPRINT("lmrcMultiFFTCentralSectionsCompare end\n");
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareNormalization(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode){
+
+ int i;
+ double sum=0.0;
+ double min;
+ double max;
+ double delta = 0.0;
+ double weight = 0.0;
+
+ min = Out[0].Post;
+ max = Out[0].Post;
+
+ if(mode ==1){
+ for(i=0; i < linfo->OutSize; i++){
+ if(min > Out[i].Post){
+ min = Out[i].Post;
+ }else if(max < Out[i].Post){
+ max = Out[i].Post;
+ }
+ sum = sum + Out[i].Post;
+ }
+ DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
+ delta = max - min;
+ for(i=0; i<linfo->OutSize; i++){
+ Out[i].preProb = (exp((Out[i].Post - min)/delta) - 1)/(exp(1)-1);
+ weight = weight + exp(Out[i].preProb);
+ }
+
+ for(i=0; i<linfo->OutSize; i++){
+ if(Out[i].Post > 0){
+ Out[i].Prob = exp(Out[i].preProb)/weight;
+ }else{
+ Out[i].Prob = 0;
+ }
+ }
+ }else{
+ for(i=0; i<linfo->OutSize; i++){
+ sum = sum + Out[i].Post;
+ }
+ DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
+ for(i=0; i<linfo->OutSize; i++){
+ Out[i].Prob = Out[i].Post / sum;
+ Out[i].Post = Out[i].Post / sum;
+ }
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2){
+ int i;
+
+ for(i=0; i< linfo->OutSize; i++){
+ if(Out[i].Prob == 0){
+ }else{
+ fprintf(fpt,"%s %s %15.4f %15.4f %15.4f %s %15d %15.6e\n", filename, linfo->Out[i].EulerMode, Out[i].Rot[0]*DEGREE, Out[i].Rot[1]*DEGREE, Out[i].Rot[2]*DEGREE, Out[i].volume, Out[i].OriginNum, Out[i].Prob);
+ }
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoLimit(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2){
+ int i,j;
+ double sum=0;
+
+ for(i=0; i< linfo->OutSize; i++){
+ if(Out[i].Prob < mode1){
+ Out[i].Prob = 0;
+ Out[i].Post = 0;
+ }else if(mode2 != 0){
+ if(sum <= mode2){
+ DEBUGPRINT1("Limit sum: %f\n",sum);
+ sum = sum + Out[i].Prob;
+ }else{
+ Out[i].Prob = 0;
+ Out[i].Post = 0;
+ }
+ }
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInfoOut Out[], int left, int right){
+
+ int pl=left;
+ int pr=right;
+ int middle=(left+right)/2;
+ lmrcMultiFFTCentralSectionsCompareInfoOut temp;
+ double pivot;
+
+ pivot = Out[middle].Prob;
+
+ do{
+ while(Out[pl].Prob > pivot) pl++;
+ while(Out[pr].Prob < pivot) pr--;
+
+ if(pl <= pr){
+ temp = Out[pl];
+ Out[pl] = Out[pr];
+ Out[pr] = temp;
+ pl++;
+ pr--;
+ }
+ }while(pl <= pr);
+
+ if(left < pr) lmrcMultiFFTCentralSectionsCompareInfoSort(Out, left, pr);
+ if(pl < right) lmrcMultiFFTCentralSectionsCompareInfoSort(Out, pl, right);
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoUpdate(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo){
+ int i;
+
+ for(i=0; i<linfo->PriorSize; i++){
+ //Out[i].Post = Out[i].Prior * Out[i].Likelihood;
+ linfo->Out[linfo->Prior[i].OriginNum].Post = linfo->Prior[i].Prior * linfo->Out[linfo->Prior[i].OriginNum].Likelihood;
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoProbSet(lmrcMultiFFTCentralSectionsCompareInfo* linfo ,int mode){
+ int i;
+ for(i=0; i<linfo->PriorSize; i++){
+ if(mode == 0){
+ linfo->Prior[i].Prior = 1/(double)(linfo->PriorSize);
+ }else if(mode == 1){
+ // linfo->Out[i].Post = linfo->Prior[i].Prior * linfo->Out[Prior[i].OriginNum].Likelihood;
+ }
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoVariation(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo){
+ int i;
+ double var=0,temp=0;
+
+ for(i=0; i< linfo->PriorSize; i++){
+ printf("OriginNum: %d\n", linfo->Prior[i].OriginNum );
+ printf("Out.Prob: %f\n", Out[linfo->Prior[i].OriginNum].Prob );
+ var = var + sqrt((Out[linfo->Prior[i].OriginNum].Prob - linfo->Prior[i].Prior)*(Out[linfo->Prior[i].OriginNum].Prob - linfo->Prior[i].Prior));
+ /* temp = Out[linfo->Prior[i].OriginNum].Prob - linfo->Prior[i].Prior;
+ if(temp < 0){
+ temp = temp * (-1);
+ }
+ var = var + temp;
+ }*/
+}
+ linfo->Variat = var;
+ printf("Variation: %f\n",linfo->Variat);
+}
typedef struct lmrcMultiFFTCentralSectionsCompareInfoOut{
mrcImage out;
-// char EulerMode[5];
+ char volume[256];
+ char EulerMode[5];
double Rot[3];
double Likelihood;
double Prob;
- double Weight;
+ double Prior;
+ double Post;
+ //double Variat;
+ int OriginNum;
}lmrcMultiFFTCentralSectionsCompareInfoOut;
typedef struct lmrcMultiFFTCentralSectionsCompareInfo{
char EulerMode[5];
lmrcFFTCentralSectionsGetInfo llinfo;
- lmrcMultiFFTCentralSectionsCompareInfoOut* Out;
+ int OutSize;
+ int PriorSize;
+ double Variat;
+ double** Sigma;
+ lmrcMultiFFTCentralSectionsCompareInfoOut* Out;
+ lmrcMultiFFTCentralSectionsCompareInfoOut* Prior;
}lmrcMultiFFTCentralSectionsCompareInfo;
typedef struct lmrcFFTCentralSectionCompareInfo{
extern void lmrcFFTCentralSectionGet(mrcImage* out, mrcImage* template, mrcImage* volume, lmrcFFTCentralSectionInfo* linfo, int mode);
extern void lmrcFFTCentralSectionCompare(mrcImage* in, mrcImage* volume, lmrcFFTCentralSectionCompareInfo* linfo, int mode);
extern void lmrcFFTCentralSectionCompareInfoWrite(FILE* fpt, float Likelihood, int mode);
-extern void lmrcFFTCentralSectionsGet(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* template, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode);
-extern void lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode);
+extern void lmrcFFTCentralSectionsGet(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* template, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode);
+extern void lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode);
extern void lmrcMultiFFTCentralSectionsCompareNormalization(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode);
-extern void lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int Mode, float mode1, float mode2);
+extern void lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2);
extern void lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInfoOut Out[], int left, int right);
+//extern void lmrcMultiFFTCentralSectionsCompareInfoSortPre(lmrcMultiFFTCentralSectionsCompareInfo* linfo, int left, int right);
+extern void lmrcMultiFFTCentralSectionsCompareInfoProbSet(lmrcMultiFFTCentralSectionsCompareInfo* linfo ,int mode);
+extern void lmrcMultiFFTCentralSectionsCompareInfoLimit(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2);
+extern void lmrcMultiFFTCentralSectionsCompareInfoUpdate(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo);
+extern void lmrcMultiFFTCentralSectionsCompareInfoVariation(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo);
/* prototype end */
#ifdef __cplusplus
#include "../inc/mrcImage.h"
void
-lmrcFFTCentralSectionsGet(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* template, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode){
+lmrcFFTCentralSectionsGet(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* template, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode){
int i=0;
float x, y, z;
- for(x = linfo->llinfo.Rot1Start; x < (linfo->llinfo.Rot1End - linfo->llinfo.Rot1Delta); x += linfo->llinfo.Rot1Delta){
- for(y = linfo->llinfo.Rot2Start; y < (linfo->llinfo.Rot2End - linfo->llinfo.Rot2Delta); y += linfo->llinfo.Rot2Delta){
- for(z = linfo->llinfo.Rot3Start; z < (linfo->llinfo.Rot3End - linfo->llinfo.Rot3Delta); z += linfo->llinfo.Rot3Delta){
+ if(nummode == 0){
+ for(x = linfo->llinfo.Rot1Start; x < (linfo->llinfo.Rot1End - linfo->llinfo.Rot1Delta); x += linfo->llinfo.Rot1Delta){
+ for(y = linfo->llinfo.Rot2Start; y < (linfo->llinfo.Rot2End - linfo->llinfo.Rot2Delta); y += linfo->llinfo.Rot2Delta){
+ for(z = linfo->llinfo.Rot3Start; z < (linfo->llinfo.Rot3End - linfo->llinfo.Rot3Delta); z += linfo->llinfo.Rot3Delta){
- linfo->llinfo.llinfo.Rot1 = x;
- linfo->llinfo.llinfo.Rot2 = y;
- linfo->llinfo.llinfo.Rot3 = z;
+ linfo->llinfo.llinfo.Rot1 = x;
+ linfo->llinfo.llinfo.Rot2 = y;
+ linfo->llinfo.llinfo.Rot3 = z;
- lmrcFFTCentralSectionGet(&Out[i].out, template, volume, &linfo->llinfo.llinfo, mode);
+ lmrcFFTCentralSectionGet(&Out[i].out, template, volume, &linfo->llinfo.llinfo, mode);
- Out[i].Rot[0] = x;
- Out[i].Rot[1] = y;
- Out[i].Rot[2] = z;
-
- if(i< linfo->llinfo.RotSize){
+ Out[i].Rot[0] = x;
+ Out[i].Rot[1] = y;
+ Out[i].Rot[2] = z;
+
i++;
}
- }
- }
- }
+ }
+ }
+ }else{
+ for(i=0; i<linfo->llinfo.RotSize; i++){
+ if(Out[i].Prior == 0){
+ }else{
+ linfo->llinfo.llinfo.Rot1 = Out[i].Rot[0];
+ linfo->llinfo.llinfo.Rot2 = Out[i].Rot[1];
+ linfo->llinfo.llinfo.Rot3 = Out[i].Rot[2];
+ lmrcFFTCentralSectionGet(&Out[i].out, template, volume, &linfo->llinfo.llinfo, mode);
+ }
+ }
+ }
}
#include "../inc/mrcImage.h"
void
-lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode){
+lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode, int nummode){
mrcImageParaTypeReal x, y;
double likelihood;
double likelihoodxre, likelihoodyre, likelihoodxyre;
double likelihoodxim, likelihoodyim, likelihoodxyim;
double rein, imin;
double revol, imvol;
- int i;
+ int i,j, flag;
clock_t start,end;
+ int sig_x,sig_y;
+ double sigma;
DEBUGPRINT("lmrcMultiFFTCentralSectionsCompare start\n");
- start=clock();
- lmrcFFTCentralSectionsGet(Out, in, volume, linfo,mode);
- end=clock();
- DEBUGPRINT1(" SectionsGet time:%f\n", (double)(end-start)/CLOCKS_PER_SEC);
-
- for(i=0; i < linfo->llinfo.RotSize; i++){
- if(mode == 1){
- likelihoodxre = 0.0;
- likelihoodyre = 0.0;
- likelihoodxyre = 0.0;
- likelihoodxim = 0.0;
- likelihoodyim = 0.0;
- likelihoodxyim = 0.0;
- for(x=0; x < in->HeaderN.x/2.0 ; x++){
- for(y=0; y < in -> HeaderN.y/2.0 ; y++){
+
+ //Sigma init
+ linfo->Sigma = malloc(sizeof(double*)*(in->HeaderN.x));
+ if(linfo->Sigma ==NULL){
+ DEBUGPRINT("malloc error\n");
+ }
+ sig_x = 0;
+ for(x=-in->HeaderN.x/2.0; x< in->HeaderN.x/2.0; x++){
+ linfo->Sigma[sig_x] = malloc(sizeof(double)*in->HeaderN.y);
+ if(linfo->Sigma[sig_x]==NULL){
+ DEBUGPRINT("malloc error\n");
+ }
+ sig_x ++;
+ }
+
+ //Sigma calculate
+ sig_x=0;
+ for(x = -in->HeaderN.x/2.0 ; x < in->HeaderN.x/2.0; x++){
+ sig_y=0;
+ for(y = -in->HeaderN.y/2.0 ; y < in->HeaderN.y/2.0; y++){
+ sigma=0;
+ for(i=0; i < linfo->PriorSize; i++){
+ mrcPixelDataGet(in, x, y, 0, &rein, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(in, x, y, 0, &imin, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(&Out[linfo->Prior[i].OriginNum].out, x, y, 0, &revol, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
+ mrcPixelDataGet(&Out[linfo->Prior[i].OriginNum].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+ sigma = sigma + linfo->Prior[i].Prior*((rein - revol)*(rein - revol) - (imin - imvol)*(imin - imvol));
+ }
+ linfo->Sigma[sig_x][sig_y] = sigma/2;
+
+ if(sqrt(linfo->Sigma[sig_x][sig_y]*linfo->Sigma[sig_x][sig_y]) < 1.0){
+ linfo->Sigma[sig_x][sig_y] = 1.0;
+ }
+ DEBUGPRINT3("sigma %d %d %f\n",sig_x, sig_y, linfo->Sigma[sig_x][sig_y]);
+ sig_y++;
+ }
+ sig_x++;
+ }
+
+ for(i=0; i < linfo->OutSize; i++){
+ flag =0;
+ for(j=0; j< linfo->PriorSize; j++){
+ if(Out[i].OriginNum == linfo->Prior[j].OriginNum){
+ if(mode == 1){
+ likelihoodxre = 0.0;
+ likelihoodyre = 0.0;
+ likelihoodxyre = 0.0;
+ likelihoodxim = 0.0;
+ likelihoodyim = 0.0;
+ likelihoodxyim = 0.0;
+ for(x=-in->HeaderN.x/2.0; x < in->HeaderN.x/2.0 ; x++){
+ for(y=-in->HeaderN.y/2.0; y < in -> HeaderN.y/2.0 ; y++){
- if(i>13000 && x == 0.0){
- DEBUGPRINT2("x y:%f %f\t",x, y);
- }
mrcPixelDataGet(in, x, y, 0, &rein, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
mrcPixelDataGet(in, x, y, 0, &imin, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
-
mrcPixelDataGet(&Out[i].out, x, y, 0, &revol, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
mrcPixelDataGet(&Out[i].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
-
+
likelihoodxre = likelihoodxre + rein*rein;
likelihoodxim = likelihoodxim + imin*imin;
likelihoodyre = likelihoodyre + revol*revol;
- likelihoodyim = likelihoodyre + imvol*imvol;
+ likelihoodyim = likelihoodyim + imvol*imvol;
likelihoodxyre = likelihoodxyre + rein*revol;
likelihoodxyim = likelihoodxyim + imin*imvol;
}
- }
- Out[i].Likelihood = likelihoodxyre/sqrt(likelihoodxre*likelihoodyre) + likelihoodxyim/sqrt(likelihoodxim*likelihoodyim);
-
- if(i>13000){
- DEBUGPRINT2("lmrcMultiFFTCentralSectionsComapre Likelihood:%d %f\n", i, Out[i].Likelihood);
- }
- }else{
- likelihood = 0.0;
- for(x= -in->HeaderN.x/2.0; x < in->HeaderN.x/2.0 ; x++){
- for(y= -in->HeaderN.y/2.0; y < in -> HeaderN.y/2.0 ; y++){
- if(i>373000){
- DEBUGPRINT2("x y:%f %f\t",x ,y);
- }
+ }
+ Out[i].Likelihood = likelihoodxyre/sqrt(likelihoodxre*likelihoodyre) + likelihoodxyim/sqrt(likelihoodxim*likelihoodyim);
+ }else{
+ likelihood = 0;
+ sigma = 1;
+ sig_x =0;
+ for(x= -in->HeaderN.x/2.0; x < in -> HeaderN.x/2.0 ; x++){
+ sig_y=0;
+ for(y= -in->HeaderN.y/2.0; y < in -> HeaderN.y/2.0 ; y++){
mrcPixelDataGet(in, x, y, 0, &rein, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
mrcPixelDataGet(in, x, y, 0, &imin, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
- if(i>373000 ){
- DEBUGPRINT2("rein imin:%f %f\t", rein, imin);
- }
mrcPixelDataGet(&Out[i].out, x, y, 0, &revol, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
- if(i>373000 ){
- DEBUGPRINT1("revol:%f ", revol);
- }
mrcPixelDataGet(&Out[i].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
- if(i>373000 ){
- DEBUGPRINT1("imvol:%f \n", imvol);
- }
- likelihood = likelihood + ((rein - revol)*(rein - revol) + (imin - imvol)*(imin - imvol))/(-2);
- }
+
+ likelihood = likelihood + (rein - revol)*(rein - revol) + (imin - imvol)*(imin - imvol)/((-2)*linfo->Sigma[sig_x][sig_y]);
+ //sigma = sigma*(linfo->Sigma[sig_x][sig_y]);
+ sigma = sigma*(linfo->Sigma[sig_x][sig_y])*2*M_PI;
+ // DEBUGPRINT7(" Likelihood sigma %d %f %f %d %d %f %f\n", i, x, y, sig_x, sig_y, likelihood, sigma);
+ sig_y ++;
+ }
+ sig_x ++;
+ }
+ DEBUGPRINT2("sigma likelihood %f %f\n", linfo->Sigma[sig_x-1][sig_y-1], likelihood);
+ // if(sigma < 1.0){
+ // sigma = 1.0;
+ // }
+ //Out[i].Likelihood = exp(likelihood)/2*M_PI*sigma;
+ Out[i].Likelihood = exp(likelihood)/sigma;
}
- Out[i].Likelihood = exp(likelihood)/(2*M_PI);
- if(i>373000){
- DEBUGPRINT3("lmrcMultiFFTCentralSectionsComapre Likelihood:%d %f %f\n", i, likelihood, Out[i].Likelihood);
+ flag = 1;
}
}
+ if(flag == 0){
+ Out[i].Likelihood = 0;
+ }
+ DEBUGPRINT2("Likelihood %d %f\n", i, Out[i].Likelihood);
}
DEBUGPRINT("lmrcMultiFFTCentralSectionsCompare end\n");
}
double max;
double delta = 0.0;
double weight = 0.0;
+ double* preProb;
- min = Out[0].Likelihood;
- max = Out[0].Likelihood;
+ min = Out[0].Post;
+ max = Out[0].Post;
if(mode ==1){
- for(i=0; i < linfo->llinfo.RotSize; i++){
- if(min > Out[i].Likelihood){
- min = Out[i].Likelihood;
- }else if(max < Out[i].Likelihood){
- max = Out[i].Likelihood;
+ preProb = (double*)malloc(sizeof(double)*linfo->OutSize);
+ for(i=0; i < linfo->OutSize; i++){
+ if(min > Out[i].Post){
+ min = Out[i].Post;
+ }else if(max < Out[i].Post){
+ max = Out[i].Post;
}
- sum = sum + Out[i].Likelihood;
+ sum = sum + Out[i].Post;
}
- DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
+ // DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
delta = max - min;
- for(i=0; i<linfo->llinfo.RotSize; i++){
- Out[i].Prob = (exp((Out[i].Likelihood - min)/delta) - 1)/(exp(1)-1);
- weight = weight + exp(Out[i].Prob);
+ for(i=0; i<linfo->OutSize; i++){
+ preProb[i] = (exp((Out[i].Post - min)/delta) - 1)/(exp(1)-1);
+ weight = weight + exp(preProb[i]);
}
- for(i=0; i<linfo->llinfo.RotSize; i++){
- if(Out[i].Likelihood > 0){
- Out[i].Weight = exp(Out[i].Prob)/weight;
+ for(i=0; i<linfo->OutSize; i++){
+ if(Out[i].Post > 0){
+ Out[i].Prob = exp(preProb[i])/weight;
+ Out[i].Post = exp(preProb[i])/weight;
}else{
- Out[i].Weight = 0;
+ Out[i].Prob = 0;
+ Out[i].Post = 0;
}
}
}else{
- for(i=0; i<linfo->llinfo.RotSize; i++){
- sum = sum + Out[i].Likelihood;
+ for(i=0; i<linfo->OutSize; i++){
+ sum = sum + Out[i].Post;
}
- DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
- for(i=0; i<linfo->llinfo.RotSize; i++){
- Out[i].Weight = Out[i].Likelihood / sum;
+ // DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
+ for(i=0; i<linfo->OutSize; i++){
+ if(sum != 0){
+ Out[i].Prob = Out[i].Post / sum;
+ Out[i].Post = Out[i].Post / sum;
+ }else{
+ Out[i].Prob = 1/(double)(linfo->OutSize);
+ }
+
}
}
}
void
-lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int Mode, float mode1, float mode2){
-
- int i,j=0;
- double sum = 0;
-
- if(mode2 == 0){
- for(i=0; i< linfo->llinfo.RotSize; i++){
- if(Out[i].Weight >= mode1){
- fprintf(fpt,"%s %s %15.4f %15.4f %15.4f %15.6e\n", filename, linfo->EulerMode, Out[i].Rot[0]*DEGREE, Out[i].Rot[1]*DEGREE, Out[i].Rot[2]*DEGREE, Out[i].Weight);
- }
- }
- }else{
- for(i=0; i< linfo->llinfo.RotSize; i++){
- if(sum < mode2){
- sum = sum + Out[i].Weight;
- j++;
- }else{
- break;
- }
+lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2){
+ int i;
+
+ for(i=0; i< linfo->OutSize; i++){
+ if(Out[i].Prob == 0){
+ }else{
+ fprintf(fpt,"%s %s %15.4f %15.4f %15.4f %s %15d %15.6e\n", filename, linfo->Out[i].EulerMode, Out[i].Rot[0]*DEGREE, Out[i].Rot[1]*DEGREE, Out[i].Rot[2]*DEGREE, Out[i].volume, Out[i].OriginNum, Out[i].Prob);
}
- for(i=0; i<j; i++){
- if(Out[i].Weight >= mode1){
- fprintf(fpt,"%s %s %15.4f %15.4f %15.4f %15.6e\n", filename, linfo->EulerMode, Out[i].Rot[0]*DEGREE, Out[i].Rot[1]*DEGREE, Out[i].Rot[2]*DEGREE, Out[i].Weight);
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoLimit(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, float mode1, float mode2){
+ int i,j;
+ double sum=0;
+
+ for(i=0; i< linfo->OutSize; i++){
+ if(Out[i].Prob < mode1){
+ Out[i].Prob = 0;
+ Out[i].Post = 0;
+ }else if(mode2 != 0){
+ if(sum <= mode2){
+ sum = sum + Out[i].Prob;
+ }else{
+ Out[i].Prob = 0;
+ Out[i].Post = 0;
}
}
}
}
-
void
lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInfoOut Out[], int left, int right){
lmrcMultiFFTCentralSectionsCompareInfoOut temp;
double pivot;
- pivot = Out[middle].Weight;
+ pivot = Out[middle].Prob;
do{
- while(Out[pl].Weight > pivot) pl++;
- while(Out[pr].Weight < pivot) pr--;
+ while(Out[pl].Prob > pivot) pl++;
+ while(Out[pr].Prob < pivot) pr--;
if(pl <= pr){
temp = Out[pl];
if(left < pr) lmrcMultiFFTCentralSectionsCompareInfoSort(Out, left, pr);
if(pl < right) lmrcMultiFFTCentralSectionsCompareInfoSort(Out, pl, right);
+}
+void
+lmrcMultiFFTCentralSectionsCompareInfoUpdate(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo){
+ int i;
+
+ for(i=0; i<linfo->PriorSize; i++){
+ linfo->Out[linfo->Prior[i].OriginNum].Post = linfo->Prior[i].Prior * linfo->Out[linfo->Prior[i].OriginNum].Likelihood;
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoProbSet(lmrcMultiFFTCentralSectionsCompareInfo* linfo ,int mode){
+ int i;
+ for(i=0; i<linfo->PriorSize; i++){
+ if(mode == 0){
+ linfo->Prior[i].Prior = 1/(double)(linfo->PriorSize);
+ }else if(mode == 1){
+ // linfo->Out[i].Post = linfo->Prior[i].Prior * linfo->Out[Prior[i].OriginNum].Likelihood;
+ }
+ }
+}
+
+void
+lmrcMultiFFTCentralSectionsCompareInfoVariation(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo){
+ int i,j;
+ double var=0,temp=0;
+
+ for(i=0; i< linfo->PriorSize; i++){
+ for(j=0; j< linfo->OutSize; j++){
+ if(linfo->Prior[i].OriginNum == Out[j].OriginNum){
+ var = var + sqrt((Out[j].Prob - linfo->Prior[i].Prior)*(Out[j].Prob - linfo->Prior[i].Prior));
+ /* temp = Out[linfo->Prior[i].OriginNum].Prob - linfo->Prior[i].Prior;
+ if(temp < 0){
+ temp = temp * (-1);
+ }
+ var = var + temp;
+ */
+ }
+ }
+ }
+ linfo->Variat = var;
+ printf("Variation: %f\n",linfo->Variat);
}
#include "Vector.h"
#include "mrcImage.h"
#include "lmrc3Dto2D.h"
+#include "lmrcFFTCentralSection.h"
typedef enum lmrc3Dto2DObjectAreaMode {
lmrc3D2DObjectAreaModeCubic=0,
} lmrc3Dto2DSingleInfo;
+typedef struct lmrc3Dto2DFFTInfoOut{
+ mrcImage out;
+ char EulerMode[5];
+ double Rot[3];
+ double Prior;
+}lmrc3Dto2DFFTInfoOut;
+
+typedef struct lmrc3Dto2DFFTInfo{
+
+ lmrc3Dto2DFFTInfoOut* Out;
+ lmrcFFTCentralSectionsGetInfo llinfo;
+}lmrc3Dto2DFFTInfo;
+
+
+
extern void lmrcImage3Dto2D(mrcImage* out, mrcImage* in, lmrc3Dto2DInfo* linfo, int mode);
extern void lmrcImage3Dto2DFollowingTailer(mrcImage* out, mrcImage* in, mrcImage* ref, lmrc3Dto2DInfo* linfo, int mode);
extern void lmrcImage3Dto2DSingle(mrcImage* out, mrcImage* in,
lmrc3Dto2DInfo* linfo,
lmrc3Dto2DSingleInfo* llinfo,
int mode);
-
+/*3DFFT to 2DFFT*/
+extern void lmrc3Dto2DFFT(lmrc3Dto2DFFTInfoOut* Out, mrcImage* template, mrcImage* volume, lmrc3Dto2DFFTInfo* linfo, int mode);
+extern void lmrc3Dto2DFFTInfoWrite(FILE* fpt, char* filename, char* file3d, lmrc3Dto2DFFTInfoOut* Out, lmrc3Dto2DFFTInfo* linfo,int mode);
+extern
#endif /* LMRC2DTO3D_H */
--- /dev/null
+/*
+# %M% %Y% %I%
+# The latest update : %G% at %U%
+#
+#%Z% lmrc3Dto2DFFT ver %I%
+#%Z% Created by
+#%Z%
+#%Z% Usage : lmrc3Dto2DFFT
+#%Z% Attention
+#%Z%
+*/
+static char __sccs_id[] = "%Z%lmrc3Dto2DFFT ver%I%; Date:%D% %Z%";
+
+#define DEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include "./lmrc3Dto2D.h"
+
+
+void
+lmrc3Dto2DFFT(lmrc3Dto2DFFTInfoOut* Out, mrcImage* template, mrcImage* volume, lmrc3Dto2DFFTInfo* linfo, int mode){
+
+ float x,y,z;
+ int i=0;
+
+ if(mode == 0){
+ for(x = linfo->llinfo.Rot1Start; x < (linfo->llinfo.Rot1End - linfo->llinfo.Rot1Delta); x += linfo->llinfo.Rot1Delta){
+ for(y = linfo->llinfo.Rot2Start; y < (linfo->llinfo.Rot2End - linfo->llinfo.Rot2Delta); y += linfo->llinfo.Rot2Delta){
+ for(z = linfo->llinfo.Rot2Start; z < (linfo->llinfo.Rot3End - linfo->llinfo.Rot3Delta); z += linfo->llinfo.Rot3Delta){
+
+ linfo->llinfo.llinfo.Rot1 = x;
+ linfo->llinfo.llinfo.Rot2 = y;
+ linfo->llinfo.llinfo.Rot3 = z;
+
+ lmrcFFTCentralSectionGet(&Out[i].out, template, volume, &linfo->llinfo.llinfo, 0);
+
+ Out[i].Rot[0]= x;
+ Out[i].Rot[1]= y;
+ Out[i].Rot[2]= z;
+
+ i++;
+ }
+ }
+ }
+ }else{
+ for(i=0;i<linfo->llinfo.RotSize;i++){
+ // if(Out[i].Prior != 0.0){
+ linfo->llinfo.llinfo.Rot1 = Out[i].Rot[0];
+ linfo->llinfo.llinfo.Rot2 = Out[i].Rot[1];
+ linfo->llinfo.llinfo.Rot3 = Out[i].Rot[2];
+
+ lmrcFFTCentralSectionGet(&Out[i].out, template, volume, &linfo->llinfo.llinfo, 0);
+ // }
+ }
+ }
+
+}
+
+void
+lmrc3Dto2DFFTInfoWrite(FILE* fpt, char* filename, char* file3d, lmrc3Dto2DFFTInfoOut* Out, lmrc3Dto2DFFTInfo* linfo, int mode){
+ int i;
+ char fileNAME[256];
+
+ for(i=0; i< linfo->llinfo.RotSize; i++){
+ sprintf(fileNAME, "%s-%d.fft2d", filename,i);
+ fprintf(fpt,"%s %s %15.4f %15.4f %15.4f %s %d\n", fileNAME, linfo->llinfo.llinfo.EulerMode, Out[i].Rot[0]*DEGREE, Out[i].Rot[1]*DEGREE, Out[i].Rot[2]*DEGREE, file3d, i);
+ }
+
+}
+
# OptionControlFile
# FileFormat
"-i","-i[nput]","Input: 2D(FFT)","Essential","1","1","In2D","inFile::mrcImage","NULL"
-"-i3d","-i[nput]3d","Input: 3D(FFT)","Essential","1","1","In3D","inFile::mrcImage","NULL"
+"-i3d","-i[nput]3d","Input: 3D(FFT)","Essential","2","1","In3D","inFile::","NULL","2","volPath","String","NULL"
+"-Prior","-Prior","Input: Prior","Optional","2","1","Prior","inFile::","NULL","2","PriPath","String","NULL"
"-EulerMode","-EulerMode","Input: EulerMode","Optional","1","1","EulerMode","String","YOYS"
"-Rot1","-Rot1","OutputDataFile","Optional","3","1","Rot1Start","Real","0.0","2","Rot1End","Real","360.0","3","Rot1Delta","Real","10"
"-Rot2","-Rot2","OutputDataFile","Optional","3","1","Rot2Start","Real","0.0","2","Rot2End","Real","360.0","3","Rot2Delta","Real","10"
"-Rot3","-Rot3","OutputDataFile","Optional","3","1","Rot3Start","Real","0.0","2","Rot3End","Real","360.0","3","Rot3Delta","Real","10"
"-trans","-trans[late]","Input: Translation","Optional","2","1","TransX","Real","0.0","2","TransY","Real","0.0"
"-InterpMode","-InterpMode","Interpolation Mode","Optional","1","1","InterpMode","Integer","0"
-"-o","-o[utput]","Output: Likelihood","Optional","1","1","Out","outFile","stdout"
+"-o","-o[utput]","Output: Likelihood","Optional","1","1","Out1","outFile","stdout"
"-c","-c[onfig]","ConfigurationFile","Optional","1","1","configFile","inFile","NULL"
"-Lmode","-L[ikelihood]mode","Input: Likelihoodmode","Optional","3","1","Lcalcmode","Integer","0","2","Lmode1","Real","0.0","3","Lmode2","Real","0.0"
"-m","-m[ode]","Mode","Optional","1","1","mode","Integer","0"
char* In3D;
FILE* fptIn3D;
+ long flagvolPath;
+ char* volPath;
+
+ long flagPrior;
+ char* Prior;
+ FILE* fptPrior;
+
+ long flagPriPath;
+ char* PriPath;
+
long flagEulerMode;
char* EulerMode;
long flagInterpMode;
long InterpMode;
- long flagOut;
- char* Out;
- FILE* fptOut;
+ long flagOut1;
+ char* Out1;
+ FILE* fptOut1;
long flagconfigFile;
char* configFile;
lmrcMultiFFTCentralSectionsCompareInfo linfo;
mrcImage in;
mrcImage volume;
- int i,len;
+ int i,buf;
clock_t start,end;
+ char filename[256], fname[256], EAMode[5];
+ double rot[3];
+ char Buf[256];
+ FILE* fp;
start = clock();
DEBUGPRINT("Program Start\n");
mrcFileRead(&in, info.In2D, "in main", 0);
- mrcFileRead(&volume, info.In3D, "in main", 0);
+ // mrcFileRead(&volume, info.In3D, "in main", 0);
strncpy(linfo.EulerMode, info.EulerMode, 4);
strncpy(linfo.llinfo.llinfo.EulerMode, info.EulerMode, 4);
linfo.llinfo.RotSize = ((linfo.llinfo.nRot1))*((linfo.llinfo.nRot2))*((linfo.llinfo.nRot3));
DEBUGPRINT1("RotSize: %d\n",linfo.llinfo.RotSize);
- linfo.Out = (lmrcMultiFFTCentralSectionsCompareInfoOut*)malloc(sizeof(lmrcMultiFFTCentralSectionsCompareInfoOut)*linfo.llinfo.RotSize);
+ linfo.OutSize = 0;
+ linfo.PriorSize = 0;
+
+ while(fgets(Buf, 256, info.fptIn3D) != NULL){
+ linfo.OutSize ++;
+ }
+ if(info.Prior == NULL){
+ linfo.PriorSize = linfo.OutSize;
+ }else{
+ while(fgets(Buf, 256, info.fptPrior) != NULL){
+ linfo.PriorSize ++;
+ }
+ }
+ DEBUGPRINT1("OutSize: %d\t",linfo.OutSize);
+ DEBUGPRINT1("PriotSize: %d\n",linfo.PriorSize);
+
+ linfo.Out = (lmrcMultiFFTCentralSectionsCompareInfoOut*)malloc(sizeof(lmrcMultiFFTCentralSectionsCompareInfoOut)*linfo.OutSize);
if(linfo.Out == NULL){
DEBUGPRINT("malloc error\n");
}
+
+ rewind(info.fptIn3D);
+ if(info.fptPrior != NULL){
+ rewind(info.fptPrior);
+ }
- lmrcMultiFFTCentralSectionsCompare(linfo.Out, &in, &volume, &linfo, info.Lcalcmode);
+ linfo.Prior = (lmrcMultiFFTCentralSectionsCompareInfoOut*)malloc(sizeof(lmrcMultiFFTCentralSectionsCompareInfoOut)*linfo.PriorSize);
+ if(linfo.Prior == NULL){
+ DEBUGPRINT("malloc error\n");
+ }
+
+ i=0;
+ while(fscanf(info.fptIn3D, "%s %s %lf %lf %lf %s %d",filename, linfo.Out[i].EulerMode, &linfo.Out[i].Rot[0], &linfo.Out[i].Rot[1], &linfo.Out[i].Rot[2], linfo.Out[i].volume, &linfo.Out[i].OriginNum) != EOF){
+ sprintf(fname, "%s%s", info.volPath, filename);
+ mrcFileRead(&(linfo.Out[i].out), fname, "in main", 0);
+ //mrcFileRead(&(linfo.Out[i].volume), file3d, "in main", 0);
+ linfo.Out[i].Rot[0] = linfo.Out[i].Rot[0]/DEGREE;
+ linfo.Out[i].Rot[1] = linfo.Out[i].Rot[1]/DEGREE;
+ linfo.Out[i].Rot[2] = linfo.Out[i].Rot[2]/DEGREE;
+ if(info.Prior == NULL){
+ linfo.Prior[i].OriginNum = linfo.Out[i].OriginNum;
+ }
+ i++;
+ }
+
+ i=0;
+ if(info.Prior == NULL){
+ lmrcMultiFFTCentralSectionsCompareInfoProbSet(&linfo ,0);
+ }else{
+ DEBUGPRINT("Prior In\n");
+ while((buf = fscanf(info.fptPrior, "%s %s %lf %lf %lf %s %d %lf",filename, linfo.Prior[i].EulerMode, &linfo.Prior[i].Rot[0], &linfo.Prior[i].Rot[1], &linfo.Prior[i].Rot[2], linfo.Prior[i].volume, &linfo.Prior[i].OriginNum, &linfo.Prior[i].Prior)) != EOF){
+ sprintf(fname, "%s%s", info.PriPath, filename);
+ // mrcFileRead(&(linfo.Prior[i].out), fname, "in main", 0);
+ // mrcFileRead(&(linfo.Prior[i].volume), file3d, "in main", 0);
+ linfo.Prior[i].Rot[0] = linfo.Prior[i].Rot[0]/DEGREE;
+ linfo.Prior[i].Rot[1] = linfo.Prior[i].Rot[1]/DEGREE;
+ linfo.Prior[i].Rot[2] = linfo.Prior[i].Rot[2]/DEGREE;
+ i++;
+ }
+ }
+
+ DEBUGPRINT1("Prior: %f\n",linfo.Prior[0].Prior);
+
+ lmrcMultiFFTCentralSectionsCompare(linfo.Out, &in, &volume, &linfo, info.Lcalcmode, 0);
+ lmrcMultiFFTCentralSectionsCompareInfoUpdate(linfo.Out, &linfo); //Bayes
+ lmrcMultiFFTCentralSectionsCompareNormalization(linfo.Out, &linfo, info.Lcalcmode);
+ lmrcMultiFFTCentralSectionsCompareInfoSort(linfo.Out, 0, linfo.OutSize-1);
+ lmrcMultiFFTCentralSectionsCompareInfoLimit(linfo.Out, &linfo, info.Lmode1, info.Lmode2);
lmrcMultiFFTCentralSectionsCompareNormalization(linfo.Out, &linfo, info.Lcalcmode);
- lmrcMultiFFTCentralSectionsCompareInfoSort(linfo.Out, 0, linfo.llinfo.RotSize-1);
- lmrcMultiFFTCentralSectionsCompareInfoWrite(info.fptOut, info.In2D, linfo.Out, &linfo, info.Lcalcmode, info.Lmode1, info.Lmode2 );
+ lmrcMultiFFTCentralSectionsCompareInfoWrite(info.fptOut1, info.In2D, linfo.Out, &linfo, info.Lmode1, info.Lmode2);
+ lmrcMultiFFTCentralSectionsCompareInfoVariation(linfo.Out, &linfo);
+ // lmrcMultiFFTCentralSectionsCompareInfoProbSet(linfo.Out, &linfo ,1);
+
+ DEBUGPRINT1("Prior: %f\n",linfo.Out[0].Prob);
free(linfo.Out);
+ free(linfo.Prior);
end = clock();
DEBUGPRINT1("time %f\n", (double)(end-start)/CLOCKS_PER_SEC);