OSDN Git Service

modified ctfDeterminationByBayes v2.3.9p0203
author久永浩司 <hisanagakouji@hisanagakouji-no-MacBook-Air.local>
Thu, 26 Jan 2017 12:48:22 +0000 (21:48 +0900)
committer久永浩司 <hisanagakouji@hisanagakouji-no-MacBook-Air.local>
Thu, 26 Jan 2017 12:48:22 +0000 (21:48 +0900)
include/ctffuncforbayes.h
src/Objects/DataManip/ctfInfo/src/#ctfFunction.c#
src/Objects/DataManip/ctfInfo/src/ctfInfoRead.c
src/Objects/DataManip/ctfInfo/src/ctfInfoWrite.c
src/Objects/DataManip/ctfInfo/src/ctfforbayes.c
src/Objects/DataManip/ctfInfo/src/ctffuncforbayes.h
src/Tools/ctfInfo/ctfDeterminationByBayes/src/ctfDeterminationByBayes.c

index 4510a48..acf2e4a 100644 (file)
@@ -95,7 +95,6 @@ extern void spatialfrequencyRead(FILE* fpt, ctfforbayes* ctf, float rmax, float
 extern void intensityRead(char* filename, intensityforbayes* intensity, int count, int mode);
 
 extern void ctfFunctionforbayes(ctfforbayes* ctf, intensityforbayes* intensity, eosBayes* d, ctfInfo* info, defocuslikelihoodforbayes* l, int count, int mode);
-extern float MTFFunctionforbayes(float R, float m, int mode);
 extern float ctfforbayesIntensityCalculation(float* parameter, float R, ctfInfo* info, int MTFmode, int Ainmode,  int mode);
 extern void ctfforbayesFree(ctfforbayes* ctf, intensityforbayes* intensity, defocuslikelihoodforbayes* likedihood, int numLikelihood);
 
index e617410..169a661 100644 (file)
@@ -510,8 +510,7 @@ ctfMTFFunction(ctfInfo* info, float R, long mode)
                        break;
                }
        }
-       DEBUGPRINT2("Env(MTF) : %e at %e\n", Env1, R);
-       if(1==info->flagSampling) {
+
                Env1 *= ctfFunctionSampling(R*1e-10, info->NyquistFrequency, mode);
        }
        return Env1;
index 757f4a7..e4b1085 100644 (file)
@@ -137,6 +137,18 @@ ctfInfoRead(FILE* fpt, ctfInfo* ctf, char* head, int mode)
                                        ctf->MolecEnv = stringGetNthRealData(s, 2, ": ,\t");
                                        SBREAK;
                                }
+                               SCASE("NyquistFrequency") {
+                                       ctf->NyquistFrequency= stringGetNthRealData(s, 2, ": ,\t");
+                                       SBREAK;
+                               }
+                               SCASE("flagAliasing") {
+                                       ctf->flagAliasing = stringGetNthIntegerData(s, 2, ": ,\t");
+                                       SBREAK;
+                               }
+                               SCASE("flagSampling") {
+                                       ctf->flagSampling = stringGetNthIntegerData(s, 2, ": ,\t");
+                                       SBREAK;
+                               }
                                SCASE("MET-File") {
                                        if(ctf->flagMolecEnvTable==1) {
                                                FILE* fpt;
index 871fc09..3a6baca 100644 (file)
@@ -41,6 +41,9 @@ ctfInfoWrite(FILE* fpt, ctfInfo ctf, char* head, int mode)
     fprintf(fpt, "%sflagSN2:       %15d  \n", head, ctf.flagWhiteNoise2);
     fprintf(fpt, "%sSN2:           %15.6g\n", head, ctf.WhiteNoise2);
     fprintf(fpt, "%sInoise2:       %15.6g\n", head, ctf.I0*ctf.WhiteNoise2);
+    fprintf(fpt, "%sNyquistFrequency: %15.6g\n", head, ctf.NyquistFrequency);
+    fprintf(fpt, "%sflagAliasing:  %15d\n", head, ctf.flagAliasing);
+    fprintf(fpt, "%sflagSampling:  %15d\n", head, ctf.flagSampling);
     fprintf(fpt, "%sflagMolecEnvTable: %15d\n", head, ctf.flagMolecEnvTable);
        switch(ctf.flagMolecEnvTable) {
                case 0: { /* No Table */
index 938ff66..91bfbc4 100644 (file)
@@ -227,29 +227,6 @@ void ctfFunctionforbayes(ctfforbayes* ctf, intensityforbayes* intensity, eosBaye
 }
 
 
-float MTFFunctionforbayes(float R, float m, int mode){
-  
-  float MTF;
-  
-  MTF = 0;
-  
-  switch(mode){
-       
-  case 0:
-       MTF = exp(-(m*R));
-       break;
-
-  default:
-       fprintf(stderr,"\n");
-       break;
-
-  }
-
-  return MTF;
-  
-}
-
-
 float ctfforbayesIntensityCalculation(float* parameter, float R, ctfInfo* info, int MTFmode, int Ainmode, int mode){
 
        float S;
@@ -259,17 +236,14 @@ float ctfforbayesIntensityCalculation(float* parameter, float R, ctfInfo* info,
        float MTF;
        float A;
        float B;
-//     float m;
-
-//     m = 0;
 
        A = 0;
        B = 0;
        k = 0;
 
        info->defocus = parameter[0];
-       S = parameter[1];
-       N = parameter[2];
+       info->I0 = parameter[1];
+       info->WhiteNoise = parameter[2]/parameter[1];
 
        switch(MTFmode){
          
@@ -301,28 +275,26 @@ float ctfforbayesIntensityCalculation(float* parameter, float R, ctfInfo* info,
          break;
          
        }
-       
-       CTF = ctfFunction(info, R, 0);
-       MTF = ctfMTFFunction(info, R, 0);
 
-       //MTF = MTFFunctionforbayes(R, m, 0);
-       //DEBUGPRINT1("MTF:%f\n",MTF);
-       
-       
+//     CTF = ctfFunction(info, R, 0);
+//     MTF = ctfMTFFunction(info, R, 0);
+
        /*value check*/
 
        switch(mode){
 
        case 0:
          //DEBUGPRINT("----ctfmode 0----\n");
-         A = S;
+        // A = S*S;
+         A = ctfSignalPowerFunction(info,R,0);
          break;
          
        case 1:
          //DEBUGPRINT("----ctfmode 1----\n");
-         //k = d[3].min+(d[3].delta*L[3]);
          k = parameter[3];
-         A = S*S*exp(-2*(k*k)*(R*R));
+         info->MolecEnv = 0;
+         //A = S*S*exp(-2*(k*k)*(R*R));
+         A = ctfSignalPowerFunction(info,R,0)*exp(-2*(k*k)*(R*R));
          break;
 
        default:
@@ -331,12 +303,12 @@ float ctfforbayesIntensityCalculation(float* parameter, float R, ctfInfo* info,
 
        }
        
-       B = N*N;
+       B = ctfNoisePowerFunction(info,R,0);
 
        //      fprintf(stderr,"R:%f,p[1]:%f,p[2]%f,p[3]:%f,p[4]:%f,MTF:%f\n",R,info->defocus,S,N,k,m);
 
 
-       return (CTF*CTF*A+B)*MTF*MTF;
+       return A+B;
 
 }
 
index 4510a48..acf2e4a 100644 (file)
@@ -95,7 +95,6 @@ extern void spatialfrequencyRead(FILE* fpt, ctfforbayes* ctf, float rmax, float
 extern void intensityRead(char* filename, intensityforbayes* intensity, int count, int mode);
 
 extern void ctfFunctionforbayes(ctfforbayes* ctf, intensityforbayes* intensity, eosBayes* d, ctfInfo* info, defocuslikelihoodforbayes* l, int count, int mode);
-extern float MTFFunctionforbayes(float R, float m, int mode);
 extern float ctfforbayesIntensityCalculation(float* parameter, float R, ctfInfo* info, int MTFmode, int Ainmode,  int mode);
 extern void ctfforbayesFree(ctfforbayes* ctf, intensityforbayes* intensity, defocuslikelihoodforbayes* likedihood, int numLikelihood);
 
index 2132de0..102b1c7 100755 (executable)
@@ -83,6 +83,14 @@ main(int argc, char* argv[])
   spatialfrequencyRead(info.fptIn2,&ctf,info.rmax,info.rmin,0);
   ctfInfoRead(info.fptIn3,&ctfinfo,"",0);
   DEBUGPRINT6("kV:%f  Cs:%f  Ain:%f Cc:%f MTF:%f ctfMode:%ld\n",ctfinfo.kV,ctfinfo.Cs,ctfinfo.Ain,ctfinfo.Cc,ctfinfo.BofMTF,ctfinfo.mode);
+
+
+//  ctfinfo.flagAliasing=1;
+//  ctfinfo.flagSampling=1;
+  DEBUGPRINT2("flagAliasing:%ld flagSampling:%ld\n",ctfinfo.flagAliasing,ctfinfo.flagSampling);
+
+//  ctfinfo.NyquistFrequency = 0.154799;
+  DEBUGPRINT1("NyquistFrequency:%f\n",ctfinfo.NyquistFrequency);
   DEBUGPRINT1("flagIn4:%ld\n",info.flagIn4);
 
   Rmax = ctf.rmax;
@@ -211,8 +219,8 @@ main(int argc, char* argv[])
 
 /*Defocus ref*/
   DEBUGPRINT("defocus refinement start\n");
-  ctf.rmax = Rintermediate;
-  ctf.rmin = Rmin;
+  ctf.rmax = Rmax;
+  ctf.rmin = Rfirstpeak;
   DEBUGPRINT2("set R range:%f~%f\n",ctf.rmin,ctf.rmax);
 
   DEBUGPRINT("set maxposteriorflag of defocus,A,B,MTF\n");
@@ -220,7 +228,7 @@ main(int argc, char* argv[])
   out.posterior[1].maxposteriorflag = 0;
   out.posterior[3].maxposteriorflag = 0;
   out.posterior[5].maxposteriorflag = 0;
-//  eosBayesMaxposteriorflagSet(&out,4);
+  eosBayesMaxposteriorflagSet(&out,4);
 
   DEBUGPRINT("set canstantflag of Ain");
   out.posterior[3].constantflag = 0;
@@ -232,10 +240,10 @@ main(int argc, char* argv[])
   eosBayesProbabilityReset(info.fptIn,&out,1,0);
 
   DEBUGPRINT("set rangechangeflag of A\n");
-  eosBayesRangeChangeflagSet(&out,0,0.95,20);
+  eosBayesRangeChangeflagSet(&out,0,0.70,10);
   eosBayesRangeChangeflagSet(&out,1,0.95,20);
   eosBayesRangeChangeflagSet(&out,2,0.95,20);
-  eosBayesRangeChangeflagSet(&out,4,0.70,5);
+//  eosBayesRangeChangeflagSet(&out,4,0.70,5);
   eosBayesProbabilityRangeChange(&out,0);