void
lmrcMultiFFTCentralSectionsCompare(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, mrcImage* in, mrcImage* volume, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode){
mrcImageParaTypeReal x, y;
- float likelihood;
- float likelihoodxre, likelihoodyre, likelihoodxyre;
- float likelihoodxim, likelihoodyim, likelihoodxyim;
+ double likelihood;
+ double likelihoodxre, likelihoodyre, likelihoodxyre;
+ double likelihoodxim, likelihoodyim, likelihoodxyim;
double rein, imin;
double revol, imvol;
- int i;
+ int i,j;
clock_t start,end;
-
+
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);
- //DEBUGPRINT2(" HeaderN x y:%d %d \n", in->HeaderN.x, in->HeaderN.y);
-
for(i=0; i < linfo->llinfo.RotSize; i++){
if(mode == 1){
- likelihoodxre = 0;
- likelihoodyre = 0;
- likelihoodxyre = 0;
- likelihoodxim = 0;
- likelihoodyim = 0;
- likelihoodxyim = 0;
-
+ likelihoodxre = 0.0;
+ likelihoodyre = 0.0;
+ likelihoodxyre = 0.0;
+ likelihoodxim = 0.0;
+ likelihoodyim = 0.0;
+ likelihoodxyim = 0.0;
+ j=0;
for(x=0; x < in->HeaderN.x ; x++){
for(y=0; y < in -> HeaderN.y ; y++){
+ if(j==32){
+ rein = 0;
+ imin = 0;
+ revol = 0;
+ imvol = 0;
+ }else{
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;
likelihoodxyre = likelihoodxyre + rein*revol;
likelihoodxyim = likelihoodxyim + imin*imvol;
+ j++;
+ if(i>12300){
+ if(j<50){
+ DEBUGPRINT1(" %d", j);
+ }
+ }
}
}
- DEBUGPRINT("\n");
- (Out +i)->Likelihood = likelihoodxyre/sqrt(likelihoodxre*likelihoodyre) + likelihoodxyim/sqrt(likelihoodxim*likelihoodyim);
+ Out[i].Likelihood = likelihoodxyre/sqrt(likelihoodxre*likelihoodyre) + likelihoodxyim/sqrt(likelihoodxim*likelihoodyim);
+ if(i>12300){
+ DEBUGPRINT("\n");
+ DEBUGPRINT2("lmrcMultiFFTCentralSectionsComapre Likelihood:%d %f\n", i, Out[i].Likelihood);
+ }
}else{
- likelihood = 0;
- for(x=0; x < in->HeaderN.x ; x++){
+ likelihood = 0.0;
+ j=0;
+ for(x=0; x < in->HeaderN.x ; x++){
for(y=0; y < in -> HeaderN.y ; y++){
+ if(j==32){
+ rein = 0;
+ imin = 0;
+ revol = 0;
+ imvol = 0;
+ }else{
mrcPixelDataGet(in, x, y, 0, &rein, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
- //DEBUGPRINT1(" rein:%f\n", rein);
mrcPixelDataGet(in, x, y, 0, &imin, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
- // DEBUGPRINT1("imin:%f\n", imin);
mrcPixelDataGet(&Out[i].out, x, y, 0, &revol, mrcPixelRePart, linfo->llinfo.llinfo.InterpMode);
- // DEBUGPRINT1(" revol:%f\n", revol);
- mrcPixelDataGet(&Out[i].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
- // DEBUGPRINT1("imvol:%f\n", imvol);
+ mrcPixelDataGet(&Out[i].out, x, y, 0, &imvol, mrcPixelImPart, linfo->llinfo.llinfo.InterpMode);
+ }
likelihood = likelihood + ((rein - revol)*(rein - revol) + (imin - imvol)*(imin - imvol))/(-2);
+ j++;
+ if(i>13500){
+ if(j<50){
+ DEBUGPRINT1(" %d", j);
+ }
+ }
}
}
-
- DEBUGPRINT("\n");
+ if(i>13500){
+ DEBUGPRINT("\n");
+ }
Out[i].Likelihood = exp(likelihood)/(2*M_PI);
DEBUGPRINT3("lmrcMultiFFTCentralSectionsComapre Likelihood:%d %f %f\n", i, likelihood, Out[i].Likelihood);
}
lmrcMultiFFTCentralSectionsCompareNormalization(lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int mode){
int i;
- float sum=0;
- float min;
- float max;
- float delta = 0;
- float weight = 0;
+ double sum=0.0;
+ double min;
+ double max;
+ double delta = 0.0;
+ double weight = 0.0;
min = Out[0].Likelihood;
max = Out[0].Likelihood;
}
DEBUGPRINT1("lmrcMultiFFTCentralSectionsComapreNormalization sum: %f\n",sum);
for(i=0; i<linfo->llinfo.RotSize; i++){
- Out[i].Prob = Out[i].Likelihood / sum;
+ Out[i].Weight = Out[i].Likelihood / sum;
}
}
}
lmrcMultiFFTCentralSectionsCompareInfoWrite(FILE* fpt, char* filename, lmrcMultiFFTCentralSectionsCompareInfoOut* Out, lmrcMultiFFTCentralSectionsCompareInfo* linfo, int Mode, float mode1, float mode2){
int i,j=0;
- float sum = 0;
+ double sum = 0;
if(mode2 == 0){
for(i=0; i< linfo->llinfo.RotSize; i++){
- if(Mode == 1){
- 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{
- if(Out[i].Prob >= 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].Prob);
- }
+ 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){
- if(Mode == 1){
- sum = sum + Out[i].Weight;
- }else{
- sum = sum + Out[i].Prob;
- }
+ sum = sum + Out[i].Weight;
j++;
}else{
break;
}
}
-
for(i=0; i<j; i++){
- if(Mode ==1){
- 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);
- }
- if(Out[i].Prob >= 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].Prob);
- }
+ 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
lmrcMultiFFTCentralSectionsCompareInfoSort(lmrcMultiFFTCentralSectionsCompareInfoOut Out[], int left, int right){
int pr=right;
int middle=(left+right)/2;
lmrcMultiFFTCentralSectionsCompareInfoOut temp;
- float pivot;
+ double pivot;
pivot = Out[middle].Prob;