From: 中野沙紀 Date: Sat, 6 Feb 2016 13:28:26 +0000 (+0900) Subject: "create new Tool mrc3Dto2DFFT" X-Git-Tag: v2.3.65p0294~65^2~4^2~9 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c37585cd3a8c05249b1574e23b6c8ae65c26dbb9;p=eos%2Fbase.git "create new Tool mrc3Dto2DFFT" --- diff --git a/include/lmrc3Dto2D.h b/include/lmrc3Dto2D.h index 992ed19c3f..ffa5455689 100644 --- a/include/lmrc3Dto2D.h +++ b/include/lmrc3Dto2D.h @@ -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/include/lmrcFFTCentralSection.h b/include/lmrcFFTCentralSection.h index 5640b0c530..10edaa4af3 100644 --- a/include/lmrcFFTCentralSection.h +++ b/include/lmrcFFTCentralSection.h @@ -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 index 0000000000..3ee0b1fc11 --- /dev/null +++ b/src/Objects/DataManip/mrcImage/src/1 @@ -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 +#include +#include +#include +#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; iOutSize; i++){ + Out[i].preProb = (exp((Out[i].Post - min)/delta) - 1)/(exp(1)-1); + weight = weight + exp(Out[i].preProb); + } + + for(i=0; iOutSize; i++){ + if(Out[i].Post > 0){ + Out[i].Prob = exp(Out[i].preProb)/weight; + }else{ + Out[i].Prob = 0; + } + } + }else{ + for(i=0; iOutSize; i++){ + sum = sum + Out[i].Post; + } + DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum); + for(i=0; iOutSize; 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; iPriorSize; 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; iPriorSize; 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); +} diff --git a/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSection.h b/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSection.h index 5640b0c530..10edaa4af3 100644 --- a/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSection.h +++ b/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSection.h @@ -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/lmrcFFTCentralSectionsGet.c b/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSectionsGet.c index c5a864c611..7495c02baf 100644 --- a/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSectionsGet.c +++ b/src/Objects/DataManip/mrcImage/src/lmrcFFTCentralSectionsGet.c @@ -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; illinfo.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); + } + } + } } diff --git a/src/Objects/DataManip/mrcImage/src/lmrcMultiFFTCentralSectionsCompare.c b/src/Objects/DataManip/mrcImage/src/lmrcMultiFFTCentralSectionsCompare.c index fac0c8297a..5c89298861 100644 --- a/src/Objects/DataManip/mrcImage/src/lmrcMultiFFTCentralSectionsCompare.c +++ b/src/Objects/DataManip/mrcImage/src/lmrcMultiFFTCentralSectionsCompare.c @@ -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; illinfo.RotSize; i++){ - Out[i].Prob = (exp((Out[i].Likelihood - min)/delta) - 1)/(exp(1)-1); - weight = weight + exp(Out[i].Prob); + for(i=0; iOutSize; i++){ + preProb[i] = (exp((Out[i].Post - min)/delta) - 1)/(exp(1)-1); + weight = weight + exp(preProb[i]); } - for(i=0; illinfo.RotSize; i++){ - if(Out[i].Likelihood > 0){ - Out[i].Weight = exp(Out[i].Prob)/weight; + for(i=0; iOutSize; 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; illinfo.RotSize; i++){ - sum = sum + Out[i].Likelihood; + for(i=0; iOutSize; i++){ + sum = sum + Out[i].Post; } - DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum); - for(i=0; illinfo.RotSize; i++){ - Out[i].Weight = Out[i].Likelihood / sum; + // DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum); + for(i=0; iOutSize; 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= 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; iPriorSize; 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; iPriorSize; 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); } diff --git a/src/Objects/DataManip/transform/src/lmrc3Dto2D.h b/src/Objects/DataManip/transform/src/lmrc3Dto2D.h index 992ed19c3f..ffa5455689 100755 --- a/src/Objects/DataManip/transform/src/lmrc3Dto2D.h +++ b/src/Objects/DataManip/transform/src/lmrc3Dto2D.h @@ -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 index 0000000000..627b459d4b --- /dev/null +++ b/src/Objects/DataManip/transform/src/lmrc3Dto2DFFT.c @@ -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 +#include +#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;illinfo.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); + } + +} + diff --git a/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/Config/OptionControlFile b/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/Config/OptionControlFile index 83129cfb0a..d46d2bdd28 100755 --- a/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/Config/OptionControlFile +++ b/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/Config/OptionControlFile @@ -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" diff --git a/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/inc/mrcMultiFFTCentralSectionsCompare.h b/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/inc/mrcMultiFFTCentralSectionsCompare.h index a059fa7d1d..c97270abaf 100755 --- a/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/inc/mrcMultiFFTCentralSectionsCompare.h +++ b/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/inc/mrcMultiFFTCentralSectionsCompare.h @@ -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; diff --git a/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/src/mrcMultiFFTCentralSectionsCompare.c b/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/src/mrcMultiFFTCentralSectionsCompare.c index 9258d3d4d3..35f5c843fa 100755 --- a/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/src/mrcMultiFFTCentralSectionsCompare.c +++ b/src/Tools/mrcImage/mrcMultiFFTCentralSectionsCompare/src/mrcMultiFFTCentralSectionsCompare.c @@ -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);