3 # The latest update : %G% at %U%
5 #%Z% llDataMultiCTFCompensation ver %I%
8 #%Z% Usage : llDataMultiCTFCompensation
12 static char __sccs_id[] = "%Z%llDataMultiCTFCompensation ver%I%; Date:%D% %Z%";
17 #define GLOBAL_DECLARATION
21 #include "eosString.h"
22 #include "../inc/config.h"
25 #include "lllDataLowPassFiltering.h"
26 #include "lllDataFitAndAverage.h"
27 #include "lllDataCTFCompensation.h"
30 main(int argc, char* argv[])
33 llDataMultiCTFCompensationInfo info;
34 lllDataFitAndAverageInfo linfo;
39 llDataFittedParam* paraFit;
40 llDataParamToFit range;
45 argCheck(&info, argc, argv);
48 memoryClear(&linfo, sizeof(linfo), 0);
49 /* Set Fitting Parameter */
50 memoryClear(&range, sizeof(range), 0);
51 range.r.Min = info.rmin;
52 range.r.Max = info.rmax;
53 range.r.Delta = info.dr;
54 range.phi.Min = info.phimin*RADIAN;
55 range.phi.Max = info.phimax*RADIAN;
56 range.phi.Delta = info.dphi*RADIAN;
57 range.z.Min = info.zmin;
58 range.z.Max = info.zmax;
59 range.z.Delta = info.dz;
60 linfo.noise = info.Noise;
61 /* Allocate paraFit */
62 paraFit=(llDataFittedParam*)memoryAllocate(info.flagIn*sizeof(llDataFittedParam), "in main");
63 for(i=0; i<info.flagIn; i++) {
64 paraFit[i].Para = range;
66 /* Input reference data */
67 DEBUGPRINT("----- Input Ref Data -----\n");
68 memoryClear(&llRef, sizeof(llRef), 0);
69 llDataFileRead(info.fptRef, &llRef, &status);
70 DEBUGPRINT("----- Set Weight -----\n");
71 lllDataWeightSet(info.fptllInfo, &llRef, 0.0, 0);
72 llRef.truePitch = info.truePitch;
75 lllDataLowPassFiltering(&llRef, info.Rmax, 1);
79 DEBUGPRINT("----- Input Data -----\n");
80 llIn = (llData*) memoryAllocate(sizeof(llData)*info.flagIn, "in main");
81 llOut = (llData*) memoryAllocate(sizeof(llData)*info.flagIn, "in main");
82 linfo.nFile = info.flagIn;
84 linfo.fptLog = info.fptOutParam;
86 linfo.ctfMode = info.mode;
87 linfo.CTF = (ctfInfo*)memoryAllocate(sizeof(ctfInfo)*info.flagIn, "in main");
89 linfo.weight = (llDataParaTypeReal*)memoryAllocate(sizeof(llDataParaTypeReal)*info.flagIn, "in main");
90 linfo.mode = PVALUE_MODE|lllDataFitFitProcessPrint ;
91 fseek(info.fptInList, 0L, SEEK_SET);
92 for(i=0; i<info.flagIn; i++) {
93 llDataFileReadFollowingllData(info.fptIn[i], &(llIn[i]), &llRef, &status);
94 llDataInitWithReference(&(llOut[i]), &(llIn[i]));
95 lllDataWeightSet(info.fptllInfo, &(llIn[i]), 0.0, 0);
97 llIn[i].truePitch = info.truePitch;
100 lllDataLowPassFiltering(&(llIn[i]), info.Rmax, 1);
102 stringGetFromFile(s, "", info.fptInList, stdout, 1);
103 linfo.weight[i] = stringGetNthRealData(s, 2, " ,");
104 linfo.CTF[i].defocus = stringGetNthRealData(s, 3, " ,");
105 linfo.CTF[i].Cs = stringGetNthRealData(s, 4, " ,");
106 linfo.CTF[i].kV = stringGetNthRealData(s, 5, " ,");
107 linfo.CTF[i].ratioOfAmpToPhase = stringGetNthRealData(s, 6, " ,");
108 linfo.CTF[i].mode = ctfInfoModePhaseAndAmpCTF;
109 paraFit[i].Para.flagCTF = linfo.flagCTF;
110 paraFit[i].Para.ctfCompensationMode = linfo.ctfMode;
111 paraFit[i].Para.CTF = linfo.CTF[i];
113 llDataInitWithReference(&llAve, &llRef);
115 for(iter=0; iter<info.MaxIter; iter++) {
116 LOGPRINT1(linfo.fptLog, "ITER","FIT","The %ldth Iteration\n", iter);
117 lllDataFitAndAverage(&llAve, llOut, llIn, llRef, paraFit, linfo);
118 lllDataCopy(&llRef, &llAve);
119 for(i=0; i<info.flagIn; i++) {
120 LOGPRINT7(info.fptOutParam, "ITER","FIT",
121 "%s %s %15.6f %15.6f %15.6f %15.6f %5d",
124 paraFit[i].Para.R*DEGREE,
125 paraFit[i].Para.phi.Value*DEGREE,
126 paraFit[i].Para.z.Value,
127 paraFit[i].Para.r.Value,
128 paraFit[i].Para.Pole);
131 llDataFileWrite(info.fptAve, &llAve, &status);
133 if(info.flagOut!=info.flagIn) {
134 fprintf(stderr, "The number of In (%d) is different from that of Out (%d) \n",
135 info.flagIn, info.flagOut);
137 for(i=0; i<info.flagOut; i++) {
138 llDataFileWrite(info.fptOut[i], &(llOut[i]), &status);
147 ERRORPRINT("---- InputFileFormat ----\n");
148 ERRORPRINT("filename weight(NumberOfAveragedFile) deltaF[A] Cs[mm] kV[kV] ratioOfAmpToPhase\n");
149 lllDataMultiCTFCompensationModePrint(stderr);