2 # ctfDeterminationByBayes : $Revision$
5 # Usage : ctfDeterminationByBayes
15 #define GLOBAL_DECLARATION
16 #include "../inc/config.h"
19 #include "ctffuncforbayes.h"
24 #include "ctfDeterminationByBayes.h"
29 typedef struct lctfDeterminationByBayesInfo {
32 } lctfDeterminationByBayesInfo;
34 typedef enum lctfDeterminationByBayesMode {
37 } lctfDeterminationByBayesMode;
40 void DefocusEstimationLoop(ctfDeterminationByBayesInfo info, eosBayes* out, ctfInfo* ctfinfo, ctfforbayes* ctf, intensityforbayes* intensity, defocuslikelihoodforbayes* likelihood, int count, int mode);
43 main(int argc, char* argv[])
48 ctfDeterminationByBayesInfo info;
50 eosBayesDistributionInfo llinfo;
55 intensityforbayes intensity;
56 defocuslikelihoodforbayes likelihood;
65 argCheck(&info, argc, argv);
68 DEBUGPRINT("Program Start\n");
69 DEBUGPRINT("local binary:MTF plus\n");
74 leosBayesInit(&out, info.numDistribution, info.numLikelihood, info.mode);
75 eosBayesCondition(info.fptIn, &out, &llinfo, 0);
76 eosBayesPriorWrite(&out,0);
77 DistributionChangeCheck(&out, 0, 0);
80 /*For CTF and intensity*/
81 ctfforbayesInit(info.fptIn2,&ctf,0);
82 intensityforbayesInit(&intensity,ctf.n,info.MTFmode,info.Ainmode,0);
83 spatialfrequencyRead(info.fptIn2,&ctf,info.rmax,info.rmin,0);
84 ctfInfoRead(info.fptIn3,&ctfinfo,"",0);
85 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);
89 DEBUGPRINT2("flagAliasing:%ld flagSampling:%ld\n",ctfinfo.flagAliasing,ctfinfo.flagSampling);
90 DEBUGPRINT1("NyquistFrequency:%f\n",ctfinfo.NyquistFrequency);
92 ctfinfo.flagMolecEnvTable = 0;
93 DEBUGPRINT1("flagMolecEnvTable:%ld\n",ctfinfo.flagMolecEnvTable);
94 ctfinfo.flagElastic = 0;
95 DEBUGPRINT1("flagElastic:%ld\n",ctfinfo.flagElastic);
97 ctfinfo.flagWithInElasticTable = 0;
98 DEBUGPRINT1("flagWithInElasticEnvTable:%ld\n",ctfinfo.flagWithInElasticTable);
99 ctfinfo.flagInElastic = 0;
100 DEBUGPRINT1("flagInElastic:%ld\n",ctfinfo.flagInElastic);
101 ctfinfo.flagWithInElastic = 0;
102 DEBUGPRINT1("flagWithInElastic:%ld\n",ctfinfo.flagWithInElastic);
104 ctfinfo.flagVibration = 0;
105 DEBUGPRINT1("flagVibration:%ld\n",ctfinfo.flagVibration);
106 ctfinfo.VibrationMode = 0;
107 DEBUGPRINT1("VibrationMode:%ld\n",ctfinfo.VibrationMode);
109 ctfinfo.Magnification = 0;
110 DEBUGPRINT1("Magnification:%f\n",ctfinfo.Magnification);
111 ctfinfo.flagMagnification = 0;
112 DEBUGPRINT1("flagMagnification:%ld\n",ctfinfo.flagMagnification);
115 DEBUGPRINT1("flagIn4:%ld\n",info.flagIn4);
119 Rintermediate = info.rintermediate;
120 Rfirstpeak = info.rfirstpeak;
122 /*global carse search B*/
123 DEBUGPRINT("carse search start\n");
125 ctf.rmin = Rintermediate;
126 DEBUGPRINT2("set R range:%f~%f\n",ctf.rmin,ctf.rmax);
127 DefocusEstimationLoop(info,&out,&ctfinfo,&ctf,&intensity,&likelihood,0,0);
128 DEBUGPRINT("carse search finish\n");
129 ctfforbayescheckIntensityOfMaxPosterior(ctf,out.posterior,out.numDistribution,&ctfinfo,intensity.MTFmode,intensity.Ainmode,1,1);
131 /*MTF serch start\n*/
132 DEBUGPRINT("MTF,B search start\n");
134 ctf.rmin = Rintermediate;
135 DEBUGPRINT2("set R range:%f~%f\n",ctf.rmin,ctf.rmax);
136 DEBUGPRINT("----maxflagcheck----\n");
138 for(i=0;i<out.numDistribution;i++){
139 printf("dist%d:%d\n",i,(out.posterior[i].maxposteriorflag));
143 DEBUGPRINT("set canstantflag of Ain");
144 out.posterior[0].constantflag = 1;
145 out.posterior[1].constantflag = 1;
146 out.posterior[3].constantflag = 1;
147 out.posterior[5].constantflag = 1;
149 DEBUGPRINT("set resetflag of \n");
150 out.prior[4].resetflag = 1;
151 eosBayesProbabilityReset(info.fptIn,&out,10,0);
153 DEBUGPRINT("set rangechangeflag of B\n");
154 eosBayesRangeChangeflagSet(&out,2,0.95,100);
155 eosBayesProbabilityRangeChange(&out,0);
157 DistributionChangeCheck(&out, 1, 0);
159 DefocusEstimationLoop(info,&out,&ctfinfo,&ctf,&intensity,&likelihood,1,1);
160 DEBUGPRINT("MTF,B search finish\n");
162 DEBUGPRINT("----maxflagcheck----\n");
164 for(i=0;i<out.numDistribution;i++){
165 printf("dist%d:%d\n",i,(out.posterior[i].maxposteriorflag));
169 ctfforbayescheckIntensityOfMaxPosterior(ctf,out.posterior,out.numDistribution,&ctfinfo,intensity.MTFmode,intensity.Ainmode,1,1);
173 DEBUGPRINT("df, A, B search start\n");
174 ctf.rmax = Rintermediate;
176 DEBUGPRINT2("set R range:%f~%f\n",ctf.rmin,ctf.rmax);
178 DEBUGPRINT("set maxposteriorflag of MTF,B\n");
179 eosBayesMaxposteriorflagSet(&out,4);
181 DEBUGPRINT("set canstantflag of Ain");
182 out.posterior[3].constantflag = 1;
183 out.posterior[5].constantflag = 1;
185 DEBUGPRINT("set resetflag of df,k\n");
186 out.prior[0].resetflag = 1;
187 out.prior[1].resetflag = 1;
188 eosBayesProbabilityReset(info.fptIn,&out,1,0);
190 DEBUGPRINT("set rangechangeflag of B\n");
191 eosBayesRangeChangeflagSet(&out,2,0.95,20);
192 eosBayesProbabilityRangeChange(&out,0);
195 DistributionChangeCheck(&out, 4, 0);
196 DEBUGPRINT("----maxflagcheck----\n");
198 for(i=0;i<out.numDistribution;i++){
199 printf("dist%d:%d\n",i,(out.posterior[i].maxposteriorflag));
203 DefocusEstimationLoop(info,&out,&ctfinfo,&ctf,&intensity,&likelihood,4,1);
204 DEBUGPRINT("A,B,df search finish\n");
205 ctfforbayescheckIntensityOfMaxPosterior(ctf,out.posterior,out.numDistribution,&ctfinfo,intensity.MTFmode,intensity.Ainmode,1,1);
209 DEBUGPRINT("df, A, B search 2 start\n");
210 ctf.rmax = Rintermediate;
212 DEBUGPRINT2("set R range:%f~%f\n",ctf.rmin,ctf.rmax);
214 DEBUGPRINT("set maxposteriorflag of MTF,B\n");
215 eosBayesMaxposteriorflagSet(&out,4);
217 DEBUGPRINT("set canstantflag of Ain");
218 out.posterior[3].constantflag = 1;
219 out.posterior[5].constantflag = 1;
221 DEBUGPRINT("set resetflag of df,k\n");
222 out.prior[0].resetflag = 1;
223 eosBayesProbabilityReset(info.fptIn,&out,5,0);
226 DEBUGPRINT("set rangechangeflag of A\n");
227 eosBayesRangeChangeflagSet(&out,1,0.95,20);
228 eosBayesRangeChangeflagSet(&out,2,0.95,20);
229 eosBayesProbabilityRangeChange(&out,0);
231 DistributionChangeCheck(&out, 5, 0);
232 DEBUGPRINT("----maxflagcheck----\n");
234 for(i=0;i<out.numDistribution;i++){
235 printf("dist%d:%d\n",i,(out.posterior[i].maxposteriorflag));
236 printf("rangechange%d:%d\n",i,(out.posterior[i].rangechangeflag));
241 DefocusEstimationLoop(info,&out,&ctfinfo,&ctf,&intensity,&likelihood,5,1);
242 DEBUGPRINT("A,df,k search finish\n");
243 ctfforbayescheckIntensityOfMaxPosterior(ctf,out.posterior,out.numDistribution,&ctfinfo,intensity.MTFmode,intensity.Ainmode,1,1);
247 DEBUGPRINT("defocus refinement start\n");
249 ctf.rmin = Rfirstpeak;
250 DEBUGPRINT2("set R range:%f~%f\n",ctf.rmin,ctf.rmax);
252 DEBUGPRINT("set maxposteriorflag of defocus,A,B,MTF\n");
253 out.posterior[0].maxposteriorflag = 0;
254 out.posterior[1].maxposteriorflag = 0;
255 out.posterior[3].maxposteriorflag = 0;
256 out.posterior[4].maxposteriorflag = 0;
257 out.posterior[5].maxposteriorflag = 0;
258 // eosBayesMaxposteriorflagSet(&out,4);
260 DEBUGPRINT("set canstantflag of Ain");
261 out.posterior[3].constantflag = 0;
262 out.posterior[5].constantflag = 0;
264 DEBUGPRINT("set resetflag of df,k\n");
265 out.prior[3].resetflag = 1;
266 out.prior[5].resetflag = 1;
267 eosBayesProbabilityReset(info.fptIn,&out,1,0);
269 DEBUGPRINT("set rangechangeflag of A\n");
270 eosBayesRangeChangeflagSet(&out,0,0.70,10);
271 eosBayesRangeChangeflagSet(&out,1,0.95,20);
272 eosBayesRangeChangeflagSet(&out,2,0.95,20);
273 eosBayesRangeChangeflagSet(&out,4,0.40,5);
274 eosBayesProbabilityRangeChange(&out,0);
276 DistributionChangeCheck(&out, 6, 0);
277 defocusLikelihoodInit(&likelihood,&out,1);
279 DefocusEstimationLoop(info,&out,&ctfinfo,&ctf,&intensity,&likelihood,6,1);
280 DEBUGPRINT("defocus refinement finish\n");
281 ctfforbayescheckIntensityOfMaxPosterior(ctf,out.posterior,out.numDistribution,&ctfinfo,intensity.MTFmode,intensity.Ainmode,1,1);
283 eosBayesPosteriorWrite(&out,0);
285 ctfforbayesFree(&ctf,&intensity,&likelihood,out.numLikelihood);
292 void DefocusEstimationLoop(ctfDeterminationByBayesInfo info, eosBayes* out, ctfInfo* ctfinfo, ctfforbayes* ctf, intensityforbayes* intensity, defocuslikelihoodforbayes* likelihood, int count,int mode){
295 defocusLikelihoodInit(likelihood,out,mode);
296 DEBUGPRINT("In DefocusEstimationLoop\n");
297 for(i=0;i<info.flagIn4;i++){
299 intensityRead(info.In4[i],intensity,i,0);
300 DEBUGPRINT("ctf start\n");
301 ctfFunctionforbayes(ctf,intensity,out,ctfinfo,likelihood,count,1);
303 DEBUGPRINT("estimate start\n");
304 eosBayesEstimation(out,0);
305 DistributionChangeCheck(out,count,1);
307 DEBUGPRINT("change start\n");
308 eosBayesPosteriortoPrior(out,0);
317 fprintf(stderr, "----- Additional Usage -----\n");