OSDN Git Service

Please enter the commit message for your changes. Lines starting v2.4.20p0370
authorTakuo Yasunaga <yasuanga@phys.kyutech.ac.jp>
Tue, 6 Dec 2022 10:04:25 +0000 (19:04 +0900)
committerTakuo Yasunaga <yasuanga@phys.kyutech.ac.jp>
Tue, 6 Dec 2022 10:04:25 +0000 (19:04 +0900)
 with '#' will be ignored, and an empty message aborts the commit.

 On branch master
 Your branch is up to date with 'origin/master'.

 Changes to be committed:
modified:   src/Tools/Config/Define.inc
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/Config/OptionControlFile
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/inc/mrcImageSeriesNormalizing.h
new file:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/:
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/argCheck.c
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/init.c
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/mrcImageSeriesNormalizing.c
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/mrcImageSeriesNormalizing.html
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/mrcImageSeriesNormalizing.pane
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/test/Makefile
modified:   src/Tools/mrcImage/mrcImageSeriesNormalizing/src/usage.c

 Changes not staged for commit:
modified:   hostdepend/ARM64MAC64 (new commits)
modified:   include/eosMATH.h

src/Tools/Config/Define.inc
src/Tools/mrcImage/mrcImageSeriesNormalizing/Config/OptionControlFile
src/Tools/mrcImage/mrcImageSeriesNormalizing/inc/mrcImageSeriesNormalizing.h
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/: [new file with mode: 0644]
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/argCheck.c
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/init.c
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/mrcImageSeriesNormalizing.c
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/mrcImageSeriesNormalizing.html
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/mrcImageSeriesNormalizing.pane
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/test/Makefile
src/Tools/mrcImage/mrcImageSeriesNormalizing/src/usage.c

index 9ee2d89..ee2bc8b 100644 (file)
@@ -1 +1,9 @@
 WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
index 1268717..a4174bc 100755 (executable)
@@ -1,12 +1,14 @@
 # OptionControlFile
 # FileFormat
 "-i","-i[nput]","Input: name list of mrcImage","Essential","1","1","In","inFileList","NULL"
+"-iw","-i[nput]w[eight]","weight: list of 0 or 1 ","Optional","1","1","Weight","inFile","NULL"
 "-o","-o[utput]","Output: name list of mrcImage","Essential","1","1","Out","outFileList","NULL"
 "-param","-param[eters]","Output: Parameters","Optional","1","1","Param","outFile","stdout"
 "-Low","-Low[ValueArea]","LowValueArea: rate","Optional","1","1","thresOfLowValueArea","Real","0.01"
 "-High","-High[ValueArea]","HighValueArea: rate","Optional","1","1","thresOfHighValueArea","Real","0.99"
 "-L","-L[ow]","Low","Optional","1","1","Low","Real","0.1"
 "-H","-H[igh]","High","Optional","1","1","High","Real","0.9"
+"-UseLH","-UseLH","Use Low and High","Optional","2","1","UseLow","Integer","1","2","UseHigh","Integer","1"
 "-LowExp","-Low[ValueArea]Exp","Alow * exp(-Klow * i) + Blow","Optional","3","1","ALow","Real","1.0","2","KLow","Real","0.1","3","BLow","Real","1.0"
 "-HighExp","-High[ValueArea]Exp","Ahigh * exp(-Khigh * i) + Bhigh","Optional","3","1","AHigh","Real","0.1","2","KHigh","Real","0.1","3","BHigh","Real","0.0"
 "-maxIter","-maxIter","maxIteration","Optional","1","1","maxIter","Integer","100"
index 9dde98f..6c04993 100755 (executable)
@@ -19,6 +19,10 @@ typedef struct mrcImageSeriesNormalizingInfo {
     FILE** fptIn;
     FILE* fptInList;
     
+    long flagWeight;
+    char* Weight;
+    FILE* fptWeight;
+    
     long flagOut;
     char** Out;
     char* OutList;
@@ -41,6 +45,12 @@ typedef struct mrcImageSeriesNormalizingInfo {
     long flagHigh;
     float High;
     
+    long flagUseLow;
+    long UseLow;
+    
+    long flagUseHigh;
+    long UseHigh;
+    
     long flagALow;
     float ALow;
     
@@ -71,10 +81,6 @@ typedef struct mrcImageSeriesNormalizingInfo {
     long flagftol;
     float ftol;
     
-    long flagParamOut;
-    char* ParamOut;
-    FILE* fptParamOut;
-    
     long flagconfigFile;
     char* configFile;
     FILE* fptconfigFile;
diff --git a/src/Tools/mrcImage/mrcImageSeriesNormalizing/src/: b/src/Tools/mrcImage/mrcImageSeriesNormalizing/src/:
new file mode 100644 (file)
index 0000000..a536172
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+# mrcImageSeriesNormalizing : $Revision$  
+# $Date$ 
+# Created by $Author$
+# Usage : mrcImageSeriesNormalizing
+# Attention
+#   $Loccker$
+#      $State$ 
+#
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>                  
+#define GLOBAL_DECLARATION
+#include "../inc/config.h"
+
+#define DEBUG
+#include "genUtil.h"
+#include "Memory.h"
+#include "mrcImage.h"
+#include "eosNonLinearFitting.h"
+
+typedef struct lmrcImageSeriesNormalizingInfo {
+    int N;
+    int useHigh;
+       float High;
+    int useLow;
+       float Low;
+       float thresOfLowValueArea;
+       float thresOfHighValueArea;
+    double A;
+    double B;
+    eosNonLinearFittingParams outHigh;
+    eosNonLinearFittingParams outLow;
+    int maxIter;
+    FILE* paramOut;
+    double* weight;
+    mrcImageInformation* originalInfo;
+    mrcImageInformation* normalizedInfo;
+} lmrcImageSeriesNormalizingInfo;
+
+typedef enum lmrcImageSeriesNormalizingMode {
+       lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea=0
+} lmrcImageSeriesNormalizingMode;
+
+
+extern int lmrcImageSeriesNormalizingOutputParam(FILE* fpt, lmrcImageSeriesNormalizingInfo linfo,  lmrcImageSeriesNormalizingMode mode);
+extern int lmrcImageSeriesNormalizing(mrcImage* out, mrcImage* in, lmrcImageSeriesNormalizingInfo* linfo, lmrcImageSeriesNormalizingMode mode);
+
+int
+main(int argc, char* argv[]) 
+{
+       mrcImageSeriesNormalizingInfo  info;
+       lmrcImageSeriesNormalizingInfo linfo;
+    mrcImage* in;
+    mrcImage* out;
+    int i, j;
+    char s[1024];
+
+       init0(&info);
+    argCheck(&info, argc, argv);
+    init1(&info);
+
+       DEBUGPRINT("Program Start\n");
+    linfo.thresOfLowValueArea = info.thresOfLowValueArea;
+    linfo.thresOfHighValueArea = info.thresOfHighValueArea;
+    linfo.High = info.High;
+    linfo.Low  = info.Low;
+    linfo.outHigh.Ainit = info.AHigh;
+    linfo.outHigh.Kinit = info.KHigh;
+    linfo.outHigh.Binit = info.BHigh;
+    linfo.outLow.Ainit = info.ALow;
+    linfo.outLow.Kinit = info.KLow;
+    linfo.outLow.Binit = info.BLow;
+    linfo.N = info.flagIn;
+    linfo.outLow.xtol = linfo.outHigh.xtol = info.xtol;
+    linfo.outLow.gtol = linfo.outHigh.gtol = info.gtol;
+    linfo.outLow.ftol = linfo.outHigh.ftol = info.ftol;
+    linfo.outLow.maxIter = linfo.outHigh.maxIter = linfo.maxIter = info.maxIter;
+    if(info.flagIn!=info.flagOut) {
+        fprintf(stderr, "In num %ld is diffrenct from Out num %ld\n", info.flagIn, info.flagOut);
+    }
+    linfo.paramOut = info.fptParam;
+    linfo.useLow  = info.UseLow;
+    linfo.useHigh = info.UseHigh;
+    in  = (mrcImage*)memoryAllocate(sizeof(mrcImage)*linfo.N, "in main"); 
+    out = (mrcImage*)memoryAllocate(sizeof(mrcImage)*linfo.N, "in main"); 
+    linfo.weight = (double*)memoryAllocate(sizeof(double)*linfo.N, "in main"); 
+    linfo.originalInfo= (mrcImageInformation*)memoryAllocate(sizeof(double)*linfo.N, "in main"); 
+    linfo.normalizedInfo= (mrcImageInformation*)memoryAllocate(sizeof(double)*linfo.N, "in main"); 
+
+    for(i=0; i<info.flagIn; i++) {
+        mrcFileRead(&(in[i]), info.In[i], "in main", 0);
+    }    
+
+    if(info.flagWeight) {
+        fseek(info.fptWeight, 0L, SEEK_SET);
+        for(i=0; i<linfo.N; i++) {
+            fgets(s, 1024, info.fptWeight);
+            linfo.weight[i] = atof(s); 
+        }
+    } else {
+        for(i=0; i<linfo.N; i++) {
+            linfo.weight[i] =  1;
+        }
+    }
+
+    lmrcImageSeriesNormalizing(out, in, &linfo, info.mode);
+    
+    lmrcImageSeriesNormalizingOutputParam(info.fptParam, linfo, info.mode);
+
+    fprintf(info.fptParam, "# Original Images\n");
+    for(i=0; i<info.flagOut; i++) {
+        mrcStatDataSet(&(in[i]), 0); 
+        switch(info.mode) {
+            case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
+                fprintf(info.fptParam, "original(name,min,LowMean,LowSD,LowMed,Low(%f),mean,High(%f),HighMed,HighMean,HighSD,max): %s %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f\n",
+                   linfo.originalInfo[i].thresLow, linfo.originalInfo[i].thresHigh, 
+                   info.In[i],
+                   in[i].HeaderAMin, 
+                   linfo.originalInfo[i].meanOfLowValueArea, linfo.originalInfo[i].sdOfLowValueArea, linfo.originalInfo[i].medianOfLowValueArea, linfo.originalInfo[i].maxOfLowValueArea, 
+                   in[i].HeaderAMean, 
+                   linfo.originalInfo[i].minOfHighValueArea,linfo.originalInfo[i].medianOfHighValueArea, linfo.originalInfo[i].meanOfHighValueArea, linfo.originalInfo[i].sdOfHighValueArea,
+                   in[i].HeaderAMax);
+                break;
+            }
+            default: {
+                fprintf(info.fptParam, "original(name,min,mean,max): %s %f %f %f\n", info.Out[i], out[i].HeaderAMin, out[i].HeaderAMean, out[i].HeaderAMax); 
+                break;
+            }
+        }
+    } 
+    fprintf(info.fptParam, "# Normalized Images\n");
+    for(i=0; i<info.flagOut; i++) {
+        mrcStatDataSet(&(out[i]), 0); 
+        switch(info.mode) {
+            case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
+                fprintf(info.fptParam, "normal(name,min,LowMean,LowSD,LowMed,Low(%f),mean,High(%f),HighMed,HighMean,HighSD,max):   %s %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f\n",
+                   linfo.normalizedInfo[i].thresLow, linfo.normalizedInfo[i].thresHigh,
+                   info.Out[i],
+                   out[i].HeaderAMin,
+                   linfo.normalizedInfo[i].meanOfLowValueArea, linfo.normalizedInfo[i].sdOfLowValueArea,  linfo.normalizedInfo[i].medianOfLowValueArea, linfo.normalizedInfo[i].maxOfLowValueArea,
+                   out[i].HeaderAMean,
+                   linfo.normalizedInfo[i].minOfHighValueArea, linfo.normalizedInfo[i].medianOfHighValueArea, linfo.normalizedInfo[i].meanOfHighValueArea, linfo.normalizedInfo[i].sdOfHighValueArea,
+                   out[i].HeaderAMax);
+                break;
+            }
+            default: {
+                fprintf(info.fptParam, "normal(name,min,mean,max): %s %f %f %f\n", info.Out[i], out[i].HeaderAMin, out[i].HeaderAMean, out[i].HeaderAMax); 
+                break;
+            }
+        }
+        mrcFileWrite(&(out[i]), info.Out[i], "in main", 0);
+    }    
+    //
+       exit(EXIT_SUCCESS);
+}
+
+void
+additionalUsage()
+{
+       fprintf(stderr, "----- Additional Usage -----\n");
+       fprintf(stderr, "mode: %d\n", lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea);
+       fprintf(stderr, "    t  = i/N\n" );
+       fprintf(stderr, "    low  = Alow  * exp(-Klow  t) * Blow\n" );
+       fprintf(stderr, "    high = Ahigh * exp(-Khigh t) * Bhigh\n" );
+       fprintf(stderr, "    Dnor= High*(D-low)/(high-low) + Low\n" );
+}
+
+int 
+lmrcImageSeriesNormalizingOutputParam(FILE* fpt, lmrcImageSeriesNormalizingInfo linfo, lmrcImageSeriesNormalizingMode mode)
+{
+    int i;
+    switch(mode) {
+           case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
+            fprintf(fpt, "method: %s\n", linfo.outHigh.method);  
+            fprintf(fpt, "iter(low,high): %d %d\n", linfo.outLow.iter, linfo.outHigh.iter);  
+            fprintf(fpt, "functionEval(low,high): %f %f\n", linfo.outLow.functionEvaluations, linfo.outHigh.functionEvaluations);  
+            fprintf(fpt, "JacobianEval(low,high): %f %f\n", linfo.outLow.JacobianEvaluations, linfo.outHigh.JacobianEvaluations);  
+            fprintf(fpt, "reason(low,high): %s %s\n", linfo.outLow.reason, linfo.outHigh.reason);  
+            fprintf(fpt, "status(low,high): %s %s\n", linfo.outLow.status, linfo.outHigh.status);  
+            fprintf(fpt, "DegreeOfFreedom(low,high): %f %f\n", linfo.outLow.degreeOfFreedom, linfo.outHigh.degreeOfFreedom);  
+            fprintf(fpt, "c(low,high): %f %f\n", linfo.outLow.c, linfo.outHigh.c);  
+            fprintf(fpt, "chisq/degreeOfFreedom(low,high): %f %f\n", linfo.outLow.chisq_per_degreeOfFreedom, linfo.outHigh.chisq_per_degreeOfFreedom);  
+            fprintf(fpt, "high(A,dA,K,dK,B,dB): %f %f %f %f %f %f\n", linfo.outHigh.A, linfo.outHigh.sigA, linfo.outHigh.K, linfo.outHigh.sigK, linfo.outHigh.B, linfo.outHigh.sigB);
+            fprintf(fpt, "low(A,dA,K,dK,B,dB):  %f %f %f %f %f %f\n", linfo.outLow.A,  linfo.outLow.sigA,  linfo.outLow.K,  linfo.outLow.sigK,  linfo.outLow.B,  linfo.outLow.sigB);
+            fprintf(fpt, "Iteration:High\n");
+            for(i=0; i<=linfo.maxIter; i++) {
+                if(linfo.outHigh.message[i]!=NULL) {
+                    fprintf(fpt, "%s\n",linfo.outHigh.message[i]);  
+                }
+            }
+            fprintf(fpt, "Iteration:Low\n");
+            for(i=0; i<=linfo.maxIter; i++) {
+                if(linfo.outLow.message[i]!=NULL) {
+                    fprintf(fpt, "%s\n",linfo.outLow.message[i]);  
+                }
+            }
+            break;
+        }
+        default: {
+            fprintf(stderr, "Not supported mode: %d\n", mode);
+            exit(EXIT_FAILURE);
+            break;
+        }
+    }
+    return 0;
+}
+
+int
+lmrcImageSeriesNormalizing(mrcImage* out, mrcImage* in, lmrcImageSeriesNormalizingInfo* linfo, lmrcImageSeriesNormalizingMode mode)
+{
+    double* frame;
+    double* high;
+    double* sighigh;
+    double* low;
+    double* siglow;
+    int i, j, Nj;
+    double data, highi, lowi;
+    mrcImageParaTypeReal x, y, z;
+    double High, Low;
+    
+    frame = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
+    low = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
+    high  = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
+    siglow = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
+    sighigh  = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
+    switch(mode) {
+           case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
+            // low/high= A*exp(-Kt) + B 
+            // ln low/high = ln A - K log t
+            //mrcImageInformation inInfo;
+            for(i=0, j=0; i<linfo->N; i++) {
+                linfo->originalInfo[i].mode = meanOfLowValueAreaAndHighValueArea;
+                linfo->originalInfo[i].thresLow  = linfo->thresOfLowValueArea;
+                linfo->originalInfo[i].thresHigh = linfo->thresOfHighValueArea;
+                lmrcImageInformation(&(linfo->originalInfo[i]), &(in[i]));
+                if(0<linfo->weight[i]) {
+                    frame[j] = (double)i/(double)linfo->N;
+                    high[j] = linfo->originalInfo[i].meanOfHighValueArea;
+                    sighigh[j] = linfo->originalInfo[i].sdOfHighValueArea;
+                    low[j] = linfo->originalInfo[i].meanOfLowValueArea; 
+                    siglow[j] = linfo->originalInfo[i].sdOfLowValueArea; 
+                    j++;
+                    Nj++;
+                } else {
+                }
+            }
+            DEBUGPRINT("HIGH\n");
+            eosNonLinearFitting(&linfo->outHigh, frame, high, sighigh, Nj, eosNonLinearFittingModeSingleExpDecay);
+            DEBUGPRINT("LOW\n");
+            eosNonLinearFitting(&linfo->outLow,  frame, low,  siglow,  Nj, eosNonLinearFittingModeSingleExpDecay);
+
+            if(linfo->useHigh) {
+                High = linfo->High;
+            } else {
+                High = linfo->outHigh.A*exp( - linfo->outHigh.K * frame[0] ) + linfo->outHigh.B;
+            }
+            if(linfo->useLow) {
+                Low  = linfo->Low;        
+            } else {
+                Low  = linfo->outLow.A *exp( - linfo->outLow.K  * frame[0] ) + linfo->outLow.B;
+            }
+            DEBUGPRINT2("Normalization(High,Low):%f %f", High, Low); 
+            for(i=0; i<linfo->N; i++) {
+                out[i].Header = in[i].Header;
+                mrcInit(&out[i], NULL);
+                for(z=0; z<in[i].HeaderN.z; z++) {
+                for(y=0; y<in[i].HeaderN.y; y++) {
+                for(x=0; x<in[i].HeaderN.x; x++) {
+                    mrcPixelDataGet(&in[i], x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest); 
+                    lowi  = linfo->outLow.A *exp( - linfo->outLow.K  * (double)i/linfo->N) + linfo->outLow.B;
+                    highi = linfo->outHigh.A*exp( - linfo->outHigh.K * (double)i/linfo->N) + linfo->outHigh.B;
+                    data = High*(data-lowi)/(highi -lowi) + Low; 
+                    mrcPixelDataSet(&out[i], x, y, z, data, mrcPixelRePart); 
+                }
+                }
+                }
+                //
+                linfo->normalizedInfo[i].mode = meanOfLowValueAreaAndHighValueArea;
+                linfo->normalizedInfo[i].thresLow  = linfo->thresOfLowValueArea;
+                linfo->normalizedInfo[i].thresHigh = linfo->thresOfHighValueArea;
+                lmrcImageInformation(&(linfo->normalizedInfo[i]), &(out[i]));
+            }
+            break;
+        }
+        default: {
+            fprintf(stderr, "Not supported mode: %d\n", mode);
+            exit(EXIT_FAILURE);
+            break;
+        }
+    }
+    return 0;
+}
index 01aeec5..95accb4 100755 (executable)
@@ -39,6 +39,17 @@ argCheck(mrcImageSeriesNormalizingInfo* info, int argc, char* argv[])
                     }
                     SBREAK;
                 }
+                SCASE("iw") {
+                    if(i+1<argc) {
+                        info->Weight = stringGetNthWord(argv[i+1], 1, " ,");
+                        i++;
+                        info->flagWeight++;
+                    } else {
+                        usage(argv[0]);
+                        exit(EXIT_FAILURE);
+                    }
+                    SBREAK;
+                }
                 SCASE("o") {
                     if(i+1<argc) {
                         info->OutList = stringGetNthWord(argv[i+1], 1, " ,");
@@ -105,6 +116,20 @@ argCheck(mrcImageSeriesNormalizingInfo* info, int argc, char* argv[])
                     }
                     SBREAK;
                 }
+                SCASE("UseLH") {
+                    if(i+2<argc) {
+                        info->UseLow = stringGetNthIntegerData(argv[i+1], 1, " ,");
+                        i++;
+                        info->flagUseLow++;
+                        info->UseHigh = stringGetNthIntegerData(argv[i+1], 1, " ,");
+                        i++;
+                        info->flagUseHigh++;
+                    } else {
+                        usage(argv[0]);
+                        exit(EXIT_FAILURE);
+                    }
+                    SBREAK;
+                }
                 SCASE("LowExp") {
                     if(i+3<argc) {
                         info->ALow = stringGetNthRealData(argv[i+1], 1, " ,");
@@ -183,17 +208,6 @@ argCheck(mrcImageSeriesNormalizingInfo* info, int argc, char* argv[])
                     }
                     SBREAK;
                 }
-                SCASE("paramo") {
-                    if(i+1<argc) {
-                        info->ParamOut = stringGetNthWord(argv[i+1], 1, " ,");
-                        i++;
-                        info->flagParamOut++;
-                    } else {
-                        usage(argv[0]);
-                        exit(EXIT_FAILURE);
-                    }
-                    SBREAK;
-                }
                 SCASE("c") {
                     if(i+1<argc) {
                         info->configFile = stringGetNthWord(argv[i+1], 1, " ,");
index a7724a9..1f82eb0 100755 (executable)
@@ -13,12 +13,15 @@ void
 init0(mrcImageSeriesNormalizingInfo* info)
 {
     info->fptIn     = NULL;    info->fptInList = NULL;    info->flagIn = 0;
+    info->fptWeight = NULL;    info->flagWeight = 0;
     info->fptOut     = NULL;    info->fptOutList = NULL;    info->flagOut = 0;
     info->fptParam = stdout;    info->flagParam = 0;
     info->thresOfLowValueArea = 0.01;    info->flagthresOfLowValueArea = 0;
     info->thresOfHighValueArea = 0.99;    info->flagthresOfHighValueArea = 0;
     info->Low = 0.1;    info->flagLow = 0;
     info->High = 0.9;    info->flagHigh = 0;
+    info->UseLow = 1;    info->flagUseLow = 0;
+    info->UseHigh = 1;    info->flagUseHigh = 0;
     info->ALow = 1.0;    info->flagALow = 0;
     info->KLow = 0.1;    info->flagKLow = 0;
     info->BLow = 1.0;    info->flagBLow = 0;
@@ -29,7 +32,6 @@ init0(mrcImageSeriesNormalizingInfo* info)
     info->xtol = 1e-8;    info->flagxtol = 0;
     info->gtol = 1e-8;    info->flaggtol = 0;
     info->ftol = 0.0;    info->flagftol = 0;
-    info->fptParamOut = stdout;    info->flagParamOut = 0;
     info->fptconfigFile = NULL;    info->flagconfigFile = 0;
     info->mode = 0;    info->flagmode = 0;
 }
@@ -63,6 +65,10 @@ init1(mrcImageSeriesNormalizingInfo* info)
         }
     }
     
+    if(info->flagWeight) {
+        info->fptWeight = fileOpen(info->Weight, "r");
+    }
+    
     if(!info->flagOut) {
         stringGetFromFile(s, "Out", stdin, stdout, 0);
         info->OutList = stringGetNthWord(s, 1, " ,\t");
@@ -103,6 +109,12 @@ init1(mrcImageSeriesNormalizingInfo* info)
     if(info->flagHigh) {
     }
     
+    if(info->flagUseLow) {
+    }
+    
+    if(info->flagUseHigh) {
+    }
+    
     if(info->flagALow) {
     }
     
@@ -133,10 +145,6 @@ init1(mrcImageSeriesNormalizingInfo* info)
     if(info->flagftol) {
     }
     
-    if(info->flagParamOut) {
-        info->fptParamOut = fileOpen(info->ParamOut, "w");
-    }
-    
     if(info->flagconfigFile) {
         info->fptconfigFile = fileOpen(info->configFile, "r");
     }
index 0d27a53..18320a8 100755 (executable)
@@ -23,7 +23,9 @@
 
 typedef struct lmrcImageSeriesNormalizingInfo {
     int N;
+    int useHigh;
        float High;
+    int useLow;
        float Low;
        float thresOfLowValueArea;
        float thresOfHighValueArea;
@@ -33,6 +35,9 @@ typedef struct lmrcImageSeriesNormalizingInfo {
     eosNonLinearFittingParams outLow;
     int maxIter;
     FILE* paramOut;
+    double* weight;
+    mrcImageInformation* originalInfo;
+    mrcImageInformation* normalizedInfo;
 } lmrcImageSeriesNormalizingInfo;
 
 typedef enum lmrcImageSeriesNormalizingMode {
@@ -51,6 +56,7 @@ main(int argc, char* argv[])
     mrcImage* in;
     mrcImage* out;
     int i, j;
+    char s[1024];
 
        init0(&info);
     argCheck(&info, argc, argv);
@@ -75,25 +81,79 @@ main(int argc, char* argv[])
     if(info.flagIn!=info.flagOut) {
         fprintf(stderr, "In num %ld is diffrenct from Out num %ld\n", info.flagIn, info.flagOut);
     }
-    linfo.paramOut = info.fptParamOut;
-    
-    in  = (mrcImage*)memoryAllocate(sizeof(mrcImage)*info.flagIn, "in main"); 
-    out = (mrcImage*)memoryAllocate(sizeof(mrcImage)*info.flagOut, "in main"); 
+    linfo.paramOut = info.fptParam;
+    linfo.useLow  = info.UseLow;
+    linfo.useHigh = info.UseHigh;
+    in  = (mrcImage*)memoryAllocate(sizeof(mrcImage)*linfo.N, "in main"); 
+    out = (mrcImage*)memoryAllocate(sizeof(mrcImage)*linfo.N, "in main"); 
+    linfo.weight = (double*)memoryAllocate(sizeof(double)*linfo.N, "in main"); 
+    linfo.originalInfo= (mrcImageInformation*)memoryAllocate(sizeof(double)*linfo.N, "in main"); 
+    linfo.normalizedInfo= (mrcImageInformation*)memoryAllocate(sizeof(double)*linfo.N, "in main"); 
 
     for(i=0; i<info.flagIn; i++) {
         mrcFileRead(&(in[i]), info.In[i], "in main", 0);
     }    
 
+    if(info.flagWeight) {
+        fseek(info.fptWeight, 0L, SEEK_SET);
+        for(i=0; i<linfo.N; i++) {
+            fgets(s, 1024, info.fptWeight);
+            linfo.weight[i] = atof(s); 
+        }
+    } else {
+        for(i=0; i<linfo.N; i++) {
+            linfo.weight[i] =  1;
+        }
+    }
+
     lmrcImageSeriesNormalizing(out, in, &linfo, info.mode);
     
     lmrcImageSeriesNormalizingOutputParam(info.fptParam, linfo, info.mode);
 
+    fprintf(info.fptParam, "# Original Images\n");
+    for(i=0; i<info.flagOut; i++) {
+        mrcStatDataSet(&(in[i]), 0); 
+        switch(info.mode) {
+            case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
+                fprintf(info.fptParam, "original(name,min,LowMean,LowSD,LowMed,Low(%f),mean,High(%f),HighMed,HighMean,HighSD,max): %s %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f\n",
+                   linfo.originalInfo[i].thresLow, linfo.originalInfo[i].thresHigh, 
+                   info.In[i],
+                   in[i].HeaderAMin, 
+                   linfo.originalInfo[i].meanOfLowValueArea, linfo.originalInfo[i].sdOfLowValueArea, linfo.originalInfo[i].medianOfLowValueArea, linfo.originalInfo[i].maxOfLowValueArea, 
+                   in[i].HeaderAMean, 
+                   linfo.originalInfo[i].minOfHighValueArea,linfo.originalInfo[i].medianOfHighValueArea, linfo.originalInfo[i].meanOfHighValueArea, linfo.originalInfo[i].sdOfHighValueArea,
+                   in[i].HeaderAMax);
+                break;
+            }
+            default: {
+                fprintf(info.fptParam, "original(name,min,mean,max): %s %f %f %f\n", info.Out[i], out[i].HeaderAMin, out[i].HeaderAMean, out[i].HeaderAMax); 
+                break;
+            }
+        }
+    } 
+    fprintf(info.fptParam, "# Normalized Images\n");
     for(i=0; i<info.flagOut; i++) {
         mrcStatDataSet(&(out[i]), 0); 
-        fprintf(info.fptParam, "(name,min,mean,max): %s %f %f %f\n", info.Out[i], out[i].HeaderAMin, out[i].HeaderAMean, out[i].HeaderAMax);
+        switch(info.mode) {
+            case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
+                fprintf(info.fptParam, "normal(name,min,LowMean,LowSD,LowMed,Low(%f),mean,High(%f),HighMed,HighMean,HighSD,max):   %s %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f %+-f\n",
+                   linfo.normalizedInfo[i].thresLow, linfo.normalizedInfo[i].thresHigh,
+                   info.Out[i],
+                   out[i].HeaderAMin,
+                   linfo.normalizedInfo[i].meanOfLowValueArea, linfo.normalizedInfo[i].sdOfLowValueArea,  linfo.normalizedInfo[i].medianOfLowValueArea, linfo.normalizedInfo[i].maxOfLowValueArea,
+                   out[i].HeaderAMean,
+                   linfo.normalizedInfo[i].minOfHighValueArea, linfo.normalizedInfo[i].medianOfHighValueArea, linfo.normalizedInfo[i].meanOfHighValueArea, linfo.normalizedInfo[i].sdOfHighValueArea,
+                   out[i].HeaderAMax);
+                break;
+            }
+            default: {
+                fprintf(info.fptParam, "normal(name,min,mean,max): %s %f %f %f\n", info.Out[i], out[i].HeaderAMin, out[i].HeaderAMean, out[i].HeaderAMax); 
+                break;
+            }
+        }
         mrcFileWrite(&(out[i]), info.Out[i], "in main", 0);
     }    
-
+    //
        exit(EXIT_SUCCESS);
 }
 
@@ -114,14 +174,6 @@ lmrcImageSeriesNormalizingOutputParam(FILE* fpt, lmrcImageSeriesNormalizingInfo
     int i;
     switch(mode) {
            case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
-            for(i=0; i<=linfo.maxIter; i++) {
-                if(linfo.outHigh.message[i]!=NULL) {
-                    fprintf(fpt, "%s\n",linfo.outHigh.message[i]);  
-                }
-                if(linfo.outLow.message[i]!=NULL) {
-                    fprintf(fpt, "%s\n",linfo.outLow.message[i]);  
-                }
-            }
             fprintf(fpt, "method: %s\n", linfo.outHigh.method);  
             fprintf(fpt, "iter(low,high): %d %d\n", linfo.outLow.iter, linfo.outHigh.iter);  
             fprintf(fpt, "functionEval(low,high): %f %f\n", linfo.outLow.functionEvaluations, linfo.outHigh.functionEvaluations);  
@@ -133,6 +185,18 @@ lmrcImageSeriesNormalizingOutputParam(FILE* fpt, lmrcImageSeriesNormalizingInfo
             fprintf(fpt, "chisq/degreeOfFreedom(low,high): %f %f\n", linfo.outLow.chisq_per_degreeOfFreedom, linfo.outHigh.chisq_per_degreeOfFreedom);  
             fprintf(fpt, "high(A,dA,K,dK,B,dB): %f %f %f %f %f %f\n", linfo.outHigh.A, linfo.outHigh.sigA, linfo.outHigh.K, linfo.outHigh.sigK, linfo.outHigh.B, linfo.outHigh.sigB);
             fprintf(fpt, "low(A,dA,K,dK,B,dB):  %f %f %f %f %f %f\n", linfo.outLow.A,  linfo.outLow.sigA,  linfo.outLow.K,  linfo.outLow.sigK,  linfo.outLow.B,  linfo.outLow.sigB);
+            fprintf(fpt, "Iteration:High\n");
+            for(i=0; i<=linfo.maxIter; i++) {
+                if(linfo.outHigh.message[i]!=NULL) {
+                    fprintf(fpt, "%s\n",linfo.outHigh.message[i]);  
+                }
+            }
+            fprintf(fpt, "Iteration:Low\n");
+            for(i=0; i<=linfo.maxIter; i++) {
+                if(linfo.outLow.message[i]!=NULL) {
+                    fprintf(fpt, "%s\n",linfo.outLow.message[i]);  
+                }
+            }
             break;
         }
         default: {
@@ -152,9 +216,10 @@ lmrcImageSeriesNormalizing(mrcImage* out, mrcImage* in, lmrcImageSeriesNormalizi
     double* sighigh;
     double* low;
     double* siglow;
-    int i;
+    int i, j, Nj;
     double data, highi, lowi;
     mrcImageParaTypeReal x, y, z;
+    double High, Low;
     
     frame = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
     low = (double*)memoryAllocate(sizeof(double)*linfo->N, "in main");
@@ -165,23 +230,39 @@ lmrcImageSeriesNormalizing(mrcImage* out, mrcImage* in, lmrcImageSeriesNormalizi
            case lmrcImageSeriesNormalizingModeLowValueAreaToHighValueArea: {
             // low/high= A*exp(-Kt) + B 
             // ln low/high = ln A - K log t
-            mrcImageInformation inInfo;
-            inInfo.mode = meanOfLowValueAreaAndHighValueArea;
-            inInfo.thresLow  = linfo->thresOfLowValueArea;
-            inInfo.thresHigh = linfo->thresOfHighValueArea;
-            for(i=0; i<linfo->N; i++) {
-                lmrcImageInformation(&inInfo, &(in[i]));
-                frame[i] = (double)i/(double)linfo->N;
-                high[i] = inInfo.meanOfHighValueArea;
-                sighigh[i] = inInfo.sdOfHighValueArea;
-                low[i] = inInfo.meanOfLowValueArea; 
-                siglow[i] = inInfo.sdOfLowValueArea; 
+            //mrcImageInformation inInfo;
+            for(i=0, j=0; i<linfo->N; i++) {
+                linfo->originalInfo[i].mode = meanOfLowValueAreaAndHighValueArea;
+                linfo->originalInfo[i].thresLow  = linfo->thresOfLowValueArea;
+                linfo->originalInfo[i].thresHigh = linfo->thresOfHighValueArea;
+                lmrcImageInformation(&(linfo->originalInfo[i]), &(in[i]));
+                if(0<linfo->weight[i]) {
+                    frame[j] = (double)i/(double)linfo->N;
+                    high[j] = linfo->originalInfo[i].meanOfHighValueArea;
+                    sighigh[j] = linfo->originalInfo[i].sdOfHighValueArea;
+                    low[j] = linfo->originalInfo[i].meanOfLowValueArea; 
+                    siglow[j] = linfo->originalInfo[i].sdOfLowValueArea; 
+                    j++;
+                    Nj++;
+                } else {
+                }
             }
             DEBUGPRINT("HIGH\n");
-            eosNonLinearFitting(&linfo->outHigh, frame, high, sighigh, linfo->N, eosNonLinearFittingModeSingleExpDecay);
+            eosNonLinearFitting(&linfo->outHigh, frame, high, sighigh, Nj, eosNonLinearFittingModeSingleExpDecay);
             DEBUGPRINT("LOW\n");
-            eosNonLinearFitting(&linfo->outLow,  frame, low,  siglow,  linfo->N, eosNonLinearFittingModeSingleExpDecay);
+            eosNonLinearFitting(&linfo->outLow,  frame, low,  siglow,  Nj, eosNonLinearFittingModeSingleExpDecay);
 
+            if(linfo->useHigh) {
+                High = linfo->High;
+            } else {
+                High = linfo->outHigh.A*exp( - linfo->outHigh.K * frame[0] ) + linfo->outHigh.B;
+            }
+            if(linfo->useLow) {
+                Low  = linfo->Low;        
+            } else {
+                Low  = linfo->outLow.A *exp( - linfo->outLow.K  * frame[0] ) + linfo->outLow.B;
+            }
+            DEBUGPRINT2("Normalization(High,Low):%f %f", High, Low); 
             for(i=0; i<linfo->N; i++) {
                 out[i].Header = in[i].Header;
                 mrcInit(&out[i], NULL);
@@ -189,13 +270,18 @@ lmrcImageSeriesNormalizing(mrcImage* out, mrcImage* in, lmrcImageSeriesNormalizi
                 for(y=0; y<in[i].HeaderN.y; y++) {
                 for(x=0; x<in[i].HeaderN.x; x++) {
                     mrcPixelDataGet(&in[i], x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest); 
-                    lowi  = linfo->outLow.A *exp( - linfo->outLow.K  * frame[i] ) + linfo->outLow.B;
-                    highi = linfo->outHigh.A*exp( - linfo->outHigh.K * frame[i] ) + linfo->outHigh.B;
-                    data = linfo->High*(data-lowi)/(highi -lowi) + linfo->Low; 
+                    lowi  = linfo->outLow.A *exp( - linfo->outLow.K  * (double)i/linfo->N) + linfo->outLow.B;
+                    highi = linfo->outHigh.A*exp( - linfo->outHigh.K * (double)i/linfo->N) + linfo->outHigh.B;
+                    data = High*(data-lowi)/(highi -lowi) + Low; 
                     mrcPixelDataSet(&out[i], x, y, z, data, mrcPixelRePart); 
                 }
                 }
                 }
+                //
+                linfo->normalizedInfo[i].mode = meanOfLowValueAreaAndHighValueArea;
+                linfo->normalizedInfo[i].thresLow  = linfo->thresOfLowValueArea;
+                linfo->normalizedInfo[i].thresHigh = linfo->thresOfHighValueArea;
+                lmrcImageInformation(&(linfo->normalizedInfo[i]), &(out[i]));
             }
             break;
         }
index 4abd489..68f05c6 100755 (executable)
@@ -9,12 +9,15 @@
 Usage: mrcImageSeriesNormalizing
 Options:
     [-i[nput]            In                  (NULL      ).as(inFileList          ) ] :Essential :Input: name list of mrcImage
+    [-i[nput]w[eight]    Weight              (NULL      ).as(inFile              ) ] :Optional  :weight: list of 0 or 1 
     [-o[utput]           Out                 (NULL      ).as(outFileList         ) ] :Essential :Output: name list of mrcImage
     [-param[eters]       Param               (stdout    ).as(outFile             ) ] :Optional  :Output: Parameters
     [-Low[ValueArea]     thresOfLowValueArea (0.01      ).as(Real                ) ] :Optional  :LowValueArea: rate
     [-High[ValueArea]    thresOfHighValueArea(0.99      ).as(Real                ) ] :Optional  :HighValueArea: rate
     [-L[ow]              Low                 (0.1       ).as(Real                ) ] :Optional  :Low
     [-H[igh]             High                (0.9       ).as(Real                ) ] :Optional  :High
+    [-UseLH              UseLow              (1         ).as(Integer             ) 
+                         UseHigh             (1         ).as(Integer             ) ] :Optional  :Use Low and High
     [-Low[ValueArea]Exp  ALow                (1.0       ).as(Real                ) 
                          KLow                (0.1       ).as(Real                ) 
                          BLow                (1.0       ).as(Real                ) ] :Optional  :Alow * exp(-Klow * i) + Blow
@@ -25,7 +28,6 @@ Options:
     [-xtol               xtol                (1e-8      ).as(Real                ) ] :Optional  :xtol
     [-gtol               gtol                (1e-8      ).as(Real                ) ] :Optional  :gtol
     [-ftol               ftol                (0.0       ).as(Real                ) ] :Optional  :ftol
-    [-param[eter]o[out]  ParamOut            (stdout    ).as(outFile             ) ] :Optional  :parameterFile
     [-c[onfig]           configFile          (NULL      ).as(inFile              ) ] :Optional  :ConfigurationFile
     [-m[ode]             mode                (0         ).as(Integer             ) ] :Optional  :Mode
 ----- Additional Usage -----
index b6cedc3..60033bf 100755 (executable)
@@ -8,21 +8,22 @@
         -H 1  5x1+41+0 'Help' 'help page' $EOS/src/Tools/mrcImage/mrcImageSeriesNormalizing/doc/mrcImageSeriesNormalizing.doc help
         -Q 1 0 5.25x1+47+0 'Close'
         -I 1 0 1 1 0 1 -1x1+1+1.500000 ' ' 'In' 'Input: name list of mrcImage' i
-        -O 1 0 1 1 0 1 -1x1+1+3.000000 ' ' 'Out' 'Output: name list of mrcImage' o
-        -O 1 0 1 0 0 1 -1x1+1+4.500000 ' ' 'Param' 'Output: Parameters' param
-        -f 1 0 1 0 0 -1x1+1+6.000000 0 0 0.010000 0 0 0 'thresOfLowValueArea' 'LowValueArea: rate' Low
-        -f 1 0 1 0 0 -1x1+1+7.500000 0 0 0.990000 0 0 0 'thresOfHighValueArea' 'HighValueArea: rate' High
-        -f 1 0 1 0 0 -1x1+1+9.000000 0 0 0.100000 0 0 0 'Low' 'Low' L
-        -f 1 0 1 0 0 -1x1+1+10.500000 0 0 0.900000 0 0 0 'High' 'High' H
-        -I  1 0 0 1 0 1 -1x1+1+12 ' ' '1.0' 'ALow' Alow * exp(-Klow * i) + Blow
-        -I  1 0 0 1 0 1 -1x1+1+13 ' ' '0.1' 'AHigh' Ahigh * exp(-Khigh * i) + Bhigh
-        -i 1 0 1 0 0 -1x1+1+15.000000 0 0 100 0 0 'maxIter' 'maxIteration' maxIter
-        -f 1 0 1 0 0 -1x1+1+16.500000 0 0 0.000000 0 0 0 'xtol' 'xtol' xtol
-        -f 1 0 1 0 0 -1x1+1+18.000000 0 0 0.000000 0 0 0 'gtol' 'gtol' gtol
-        -f 1 0 1 0 0 -1x1+1+19.500000 0 0 0.000000 0 0 0 'ftol' 'ftol' ftol
-        -O 1 0 1 0 0 1 -1x1+1+21.000000 ' ' 'ParamOut' 'parameterFile' paramo
-        -I 1 0 1 0 0 1 -1x1+1+22.500000 ' ' 'configFile' 'ConfigurationFile' c
-        -i 1 0 1 0 0 -1x1+1+24.000000 0 0 0 0 0 'mode' 'Mode' m
+        -I 1 0 1 0 0 1 -1x1+1+3.000000 ' ' 'Weight' 'weight: list of 0 or 1 ' iw
+        -O 1 0 1 1 0 1 -1x1+1+4.500000 ' ' 'Out' 'Output: name list of mrcImage' o
+        -O 1 0 1 0 0 1 -1x1+1+6.000000 ' ' 'Param' 'Output: Parameters' param
+        -f 1 0 1 0 0 -1x1+1+7.500000 0 0 0.010000 0 0 0 'thresOfLowValueArea' 'LowValueArea: rate' Low
+        -f 1 0 1 0 0 -1x1+1+9.000000 0 0 0.990000 0 0 0 'thresOfHighValueArea' 'HighValueArea: rate' High
+        -f 1 0 1 0 0 -1x1+1+10.500000 0 0 0.100000 0 0 0 'Low' 'Low' L
+        -f 1 0 1 0 0 -1x1+1+12.000000 0 0 0.900000 0 0 0 'High' 'High' H
+        -I  1 0 0 1 0 1 -1x1+1+13 ' ' '1' 'UseLow' Use Low and High
+        -I  1 0 0 1 0 1 -1x1+1+15 ' ' '1.0' 'ALow' Alow * exp(-Klow * i) + Blow
+        -I  1 0 0 1 0 1 -1x1+1+16 ' ' '0.1' 'AHigh' Ahigh * exp(-Khigh * i) + Bhigh
+        -i 1 0 1 0 0 -1x1+1+18.000000 0 0 100 0 0 'maxIter' 'maxIteration' maxIter
+        -f 1 0 1 0 0 -1x1+1+19.500000 0 0 0.000000 0 0 0 'xtol' 'xtol' xtol
+        -f 1 0 1 0 0 -1x1+1+21.000000 0 0 0.000000 0 0 0 'gtol' 'gtol' gtol
+        -f 1 0 1 0 0 -1x1+1+22.500000 0 0 0.000000 0 0 0 'ftol' 'ftol' ftol
+        -I 1 0 1 0 0 1 -1x1+1+24.000000 ' ' 'configFile' 'ConfigurationFile' c
+        -i 1 0 1 0 0 -1x1+1+25.500000 0 0 0 0 0 'mode' 'Mode' m
     -E
   -E
 -E
index 36d799f..a052bd8 100755 (executable)
@@ -22,8 +22,10 @@ help:
 
 exec:
        @echo "----- Execution Check -----"
-       ../$(OSTYPE)/$(OBJECTNAME) -i data/test.in.lst -o data/test.out.lst -H 0.9 -L 0.1  -High 0.95 -Low 0.7 -param data/test.param -m 0 -LowExp 0.32 5 0  -HighExp 32 5 0 -maxIter 100
+       ../$(OSTYPE)/$(OBJECTNAME) -i data/test.in.lst -o data/test.out.lst -H 0.9 -L 0.1  -High 0.95 -Low 0.7 -param data/test.param  -m 0 -LowExp 0.32 5 0  -HighExp 32 5 0 -maxIter 100 -UseLH 1 1
+       ../$(OSTYPE)/$(OBJECTNAME) -i data/test.in.lst -o data/test.out.lst -H 0.9 -L 0.1  -High 0.95 -Low 0.7 -param data/test2.param -m 0 -LowExp 0.32 5 0  -HighExp 32 5 0 -maxIter 100 -UseLH 1 0
        cat data/test.param
+       cat data/test2.param
        @echo "----- Calc check -----"          
 
 clean:
index 1f01897..2de43bf 100755 (executable)
@@ -8,19 +8,20 @@ usage(char* thisProgram)
     fprintf(stderr, "Usage: %s\n", thisProgram);
     fprintf(stderr, "Options:\n");
     fprintf(stderr, "    [-i[nput]            In                  (NULL      ).as(inFileList          ) ] :Essential :Input: name list of mrcImage\n");
+    fprintf(stderr, "    [-i[nput]w[eight]    Weight              (NULL      ).as(inFile              ) ] :Optional  :weight: list of 0 or 1 \n");
     fprintf(stderr, "    [-o[utput]           Out                 (NULL      ).as(outFileList         ) ] :Essential :Output: name list of mrcImage\n");
     fprintf(stderr, "    [-param[eters]       Param               (stdout    ).as(outFile             ) ] :Optional  :Output: Parameters\n");
     fprintf(stderr, "    [-Low[ValueArea]     thresOfLowValueArea (0.01      ).as(Real                ) ] :Optional  :LowValueArea: rate\n");
     fprintf(stderr, "    [-High[ValueArea]    thresOfHighValueArea(0.99      ).as(Real                ) ] :Optional  :HighValueArea: rate\n");
     fprintf(stderr, "    [-L[ow]              Low                 (0.1       ).as(Real                ) ] :Optional  :Low\n");
     fprintf(stderr, "    [-H[igh]             High                (0.9       ).as(Real                ) ] :Optional  :High\n");
+    fprintf(stderr, "    [-UseLH              UseLow              (1         ).as(Integer             ) \n                         UseHigh             (1         ).as(Integer             ) ] :Optional  :Use Low and High\n");
     fprintf(stderr, "    [-Low[ValueArea]Exp  ALow                (1.0       ).as(Real                ) \n                         KLow                (0.1       ).as(Real                ) \n                         BLow                (1.0       ).as(Real                ) ] :Optional  :Alow * exp(-Klow * i) + Blow\n");
     fprintf(stderr, "    [-High[ValueArea]Exp AHigh               (0.1       ).as(Real                ) \n                         KHigh               (0.1       ).as(Real                ) \n                         BHigh               (0.0       ).as(Real                ) ] :Optional  :Ahigh * exp(-Khigh * i) + Bhigh\n");
     fprintf(stderr, "    [-maxIter            maxIter             (100       ).as(Integer             ) ] :Optional  :maxIteration\n");
     fprintf(stderr, "    [-xtol               xtol                (1e-8      ).as(Real                ) ] :Optional  :xtol\n");
     fprintf(stderr, "    [-gtol               gtol                (1e-8      ).as(Real                ) ] :Optional  :gtol\n");
     fprintf(stderr, "    [-ftol               ftol                (0.0       ).as(Real                ) ] :Optional  :ftol\n");
-    fprintf(stderr, "    [-param[eter]o[out]  ParamOut            (stdout    ).as(outFile             ) ] :Optional  :parameterFile\n");
     fprintf(stderr, "    [-c[onfig]           configFile          (NULL      ).as(inFile              ) ] :Optional  :ConfigurationFile\n");
     fprintf(stderr, "    [-m[ode]             mode                (0         ).as(Integer             ) ] :Optional  :Mode\n");
     additionalUsage();