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
WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
# 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"
FILE** fptIn;
FILE* fptInList;
+ long flagWeight;
+ char* Weight;
+ FILE* fptWeight;
+
long flagOut;
char** Out;
char* OutList;
long flagHigh;
float High;
+ long flagUseLow;
+ long UseLow;
+
+ long flagUseHigh;
+ long UseHigh;
+
long flagALow;
float ALow;
long flagftol;
float ftol;
- long flagParamOut;
- char* ParamOut;
- FILE* fptParamOut;
-
long flagconfigFile;
char* configFile;
FILE* fptconfigFile;
--- /dev/null
+/*
+# 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;
+}
}
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, " ,");
}
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, " ,");
}
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, " ,");
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;
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;
}
}
}
+ if(info->flagWeight) {
+ info->fptWeight = fileOpen(info->Weight, "r");
+ }
+
if(!info->flagOut) {
stringGetFromFile(s, "Out", stdin, stdout, 0);
info->OutList = stringGetNthWord(s, 1, " ,\t");
if(info->flagHigh) {
}
+ if(info->flagUseLow) {
+ }
+
+ if(info->flagUseHigh) {
+ }
+
if(info->flagALow) {
}
if(info->flagftol) {
}
- if(info->flagParamOut) {
- info->fptParamOut = fileOpen(info->ParamOut, "w");
- }
-
if(info->flagconfigFile) {
info->fptconfigFile = fileOpen(info->configFile, "r");
}
typedef struct lmrcImageSeriesNormalizingInfo {
int N;
+ int useHigh;
float High;
+ int useLow;
float Low;
float thresOfLowValueArea;
float thresOfHighValueArea;
eosNonLinearFittingParams outLow;
int maxIter;
FILE* paramOut;
+ double* weight;
+ mrcImageInformation* originalInfo;
+ mrcImageInformation* normalizedInfo;
} lmrcImageSeriesNormalizingInfo;
typedef enum lmrcImageSeriesNormalizingMode {
mrcImage* in;
mrcImage* out;
int i, j;
+ char s[1024];
init0(&info);
argCheck(&info, argc, 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);
}
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);
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: {
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");
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);
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;
}
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
[-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 -----
-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
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:
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();