OSDN Git Service

"create new Tool mrc3Dto2DFFT"
author中野沙紀 <nakanosaki@nakanosaki-no-Mac-mini.local>
Sat, 6 Feb 2016 13:28:26 +0000 (22:28 +0900)
committer中野沙紀 <nakanosaki@nakanosaki-no-Mac-mini.local>
Sat, 6 Feb 2016 13:28:26 +0000 (22:28 +0900)
include/lmrc3Dto2D.h
include/lmrcFFTCentralSection.h
src/Objects/DataManip/mrcImage/src/1 [new file with mode: 0644]
src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSection.h
src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSectionsGet.c
src/Objects/DataManip/mrcImage/src/lmrcMultiFFTCentralSectionsCompare.c
src/Objects/DataManip/transform/src/lmrc3Dto2D.h
src/Objects/DataManip/transform/src/lmrc3Dto2DFFT.c [new file with mode: 0644]
src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/Config/OptionControlFile
src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/inc/mrcMultiFFTCentralSectionsCompare.h
src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/src/mrcMultiFFTCentralSectionsCompare.c

index 992ed19..ffa5455 100644 (file)
@@ -21,6 +21,7 @@
 #include "Vector.h"
 #include "mrcImage.h"
 #include "lmrc3Dto2D.h"
+#include "lmrcFFTCentralSection.h"
 
 typedef enum lmrc3Dto2DObjectAreaMode {
        lmrc3D2DObjectAreaModeCubic=0,
@@ -73,6 +74,21 @@ typedef struct lmrc3Dto2DSingleInfo {
 
 } 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, 
@@ -83,5 +99,8 @@ 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 */
index 5640b0c..10edaa4 100644 (file)
@@ -58,18 +58,27 @@ typedef struct lmrcFFTCentralSectionsGetInfo{
 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{
@@ -92,11 +101,16 @@ extern "C" {
 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
diff --git a/src/Objects/DataManip/mrcImage/src/1 b/src/Objects/DataManip/mrcImage/src/1
new file mode 100644 (file)
index 0000000..3ee0b1f
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+# %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);
+}
index 5640b0c..10edaa4 100644 (file)
@@ -58,18 +58,27 @@ typedef struct lmrcFFTCentralSectionsGetInfo{
 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{
@@ -92,11 +101,16 @@ extern "C" {
 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
index c5a864c..7495c02 100644 (file)
@@ -21,30 +21,40 @@ static char __sccs_id[] = "%Z%lmrcFFTCentralSectionsGet ver%I%; Date:%D% %Z%";
  #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);
+            }
+        }
+    }
 }
index fac0c82..5c89298 100644 (file)
@@ -22,83 +22,120 @@ static char __sccs_id[] = "%Z%lmrcMultiFFTCentralSectionsCompare ver%I%; Date:%D
 #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");
 }
@@ -112,74 +149,86 @@ lmrcMultiFFTCentralSectionsCompareNormalization(lmrcMultiFFTCentralSectionsCompa
     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){
 
@@ -189,11 +238,11 @@ lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInf
     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];
@@ -206,5 +255,47 @@ lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInf
     
     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);
 }
index 992ed19..ffa5455 100755 (executable)
@@ -21,6 +21,7 @@
 #include "Vector.h"
 #include "mrcImage.h"
 #include "lmrc3Dto2D.h"
+#include "lmrcFFTCentralSection.h"
 
 typedef enum lmrc3Dto2DObjectAreaMode {
        lmrc3D2DObjectAreaModeCubic=0,
@@ -73,6 +74,21 @@ typedef struct lmrc3Dto2DSingleInfo {
 
 } 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, 
@@ -83,5 +99,8 @@ 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 */
diff --git a/src/Objects/DataManip/transform/src/lmrc3Dto2DFFT.c b/src/Objects/DataManip/transform/src/lmrc3Dto2DFFT.c
new file mode 100644 (file)
index 0000000..627b459
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+# %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);
+    }
+
+}
+
index 83129cf..d46d2bd 100755 (executable)
@@ -2,14 +2,15 @@
 # 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"
index a059fa7..c97270a 100755 (executable)
@@ -21,6 +21,16 @@ typedef struct mrcMultiFFTCentralSectionsCompareInfo {
     char* In3D;
     FILE* fptIn3D;
     
+    long flagvolPath;
+    char* volPath;
+    
+    long flagPrior;
+    char* Prior;
+    FILE* fptPrior;
+    
+    long flagPriPath;
+    char* PriPath;
+    
     long flagEulerMode;
     char* EulerMode;
     
@@ -60,9 +70,9 @@ typedef struct mrcMultiFFTCentralSectionsCompareInfo {
     long flagInterpMode;
     long InterpMode;
     
-    long flagOut;
-    char* Out;
-    FILE* fptOut;
+    long flagOut1;
+    char* Out1;
+    FILE* fptOut1;
     
     long flagconfigFile;
     char* configFile;
index 9258d3d..35f5c84 100755 (executable)
@@ -39,8 +39,12 @@ main(int argc, char* argv[])
     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();
 
@@ -50,7 +54,7 @@ main(int argc, char* argv[])
 
     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);
@@ -79,17 +83,83 @@ main(int argc, char* argv[])
     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);