#include "mrcImage.h"
-
+/* prototype begin */
extern void lmrcImageAverage(mrcImage* out, mrcImage* in, int n, int mode);
+extern void lmrcImageAverageOverThreshold(mrcImage* out, mrcImage* in, int n, float* cor, float thres, int mode);
extern void lmrcImageAverageWithWeight(mrcImage* out, mrcImage* outW, mrcImage* in, mrcImage* inW, int n, int mode) ;
+/* prototype end */
}
void
+lmrcImageAverageOverThreshold(mrcImage* out, mrcImage* in, int n, float* cor, float thres, int mode)
+{
+ int i;
+ long num=0;
+
+ for(i=0; i<n; i++) {
+ if(thres<cor[i]) {
+ lmrcImageAdd(out, &(in[i]), &num);
+ }
+ }
+ if(num==n) {
+ lmrcImageDividedByReal(out, (double)num);
+ } else {
+ fprintf(stderr, "Something wrong: n %d != num %d\n", n, num);
+ }
+}
+
+/*
+ For Subtomogram averaging, with considering missing-wedge
+*/
+void
lmrcImageAverageWithWeight(mrcImage* out, mrcImage* outW, mrcImage* in, mrcImage* inW, int n, int mode)
{
int i;
#include "mrcImage.h"
-
+/* prototype begin */
extern void lmrcImageAverage(mrcImage* out, mrcImage* in, int n, int mode);
+extern void lmrcImageAverageOverThreshold(mrcImage* out, mrcImage* in, int n, float* cor, float thres, int mode);
extern void lmrcImageAverageWithWeight(mrcImage* out, mrcImage* outW, mrcImage* in, mrcImage* inW, int n, int mode) ;
+/* prototype end */
WORLDNAME=Tools
WORLDNAME=Tools
WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
+WORLDNAME=Tools
"-Periodic","-Periodic","Periodic","Optional","0"
"-maxIter","-maxIter[aration]","MaxIteration","Optional","1","1","maxIter","Integer","10"
"-rmsd","-rmsd","rmsd","Optional","1","1","rmsd","Real","1e-2"
-"-log","-log","logFile","Optional","1","1","Log","inFile::ASCII","stdout"
+"-log","-log","logFile","Optional","1","1","Log","outFile::ASCII","stdout"
+"-thres","-thres[hold]","threshold: Linear Correlation","Optional","1","1","Thres","Real","0.2"
"-c","-c[onfig]","ConfigurationFile","Optional","1","1","configFile","inFile","NULL"
"-m","-m[ode]","Mode","Optional","1","1","mode","Integer","0"
char* Log;
FILE* fptLog;
+ long flagThres;
+ float Thres;
+
long flagconfigFile;
char* configFile;
FILE* fptconfigFile;
}
SBREAK;
}
+ SCASE("thres") {
+ if(i+1<argc) {
+ info->Thres = stringGetNthRealData(argv[i+1], 1, " ,");
+ i++;
+ info->flagThres++;
+ } else {
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ SBREAK;
+ }
SCASE("c") {
if(i+1<argc) {
info->configFile = stringGetNthWord(argv[i+1], 1, " ,");
info->maxIter = 10; info->flagmaxIter = 0;
info->rmsd = 1e-2; info->flagrmsd = 0;
info->fptLog = stdout; info->flagLog = 0;
+ info->Thres = 0.2; info->flagThres = 0;
info->fptconfigFile = NULL; info->flagconfigFile = 0;
info->mode = 0; info->flagmode = 0;
}
}
if(info->flagLog) {
- info->fptLog = fileOpen(info->Log, "r");
+ info->fptLog = fileOpen(info->Log, "w");
+ }
+
+ if(info->flagThres) {
}
if(info->flagconfigFile) {
mrcImage ref;
mrcImage* fit;
mrcImage* cor;
+ float* corC;
mrcImage out;
mrcImageAutoRotationAverageInfo info;
lmrcImageAutoRotationCorrelationInfo* linfo;
in = (mrcImage*)memoryAllocate(sizeof(mrcImage)*info.flagIn, "in main");
fit = (mrcImage*)memoryAllocate(sizeof(mrcImage)*info.flagIn, "in main");
cor = (mrcImage*)memoryAllocate(sizeof(mrcImage)*info.flagIn, "in main");
+ corC = (float*)memoryAllocate(sizeof(float)*info.flagIn, "in main");
linfo = (lmrcImageAutoRotationCorrelationInfo*)memoryAllocate(sizeof(lmrcImageAutoRotationCorrelationInfo)*info.flagIn, "in main");
for(i=0; i<info.flagIn; i++) {
mrcFileRead(&(in[i]), info.In[i], "in main", 0);
for(i=0; i<info.flagIn; i++) {
DEBUGPRINT2("%d: %d\n", k, i);
lmrcImageAutoRotationCorrelation(&(fit[i]), &(cor[i]), &(in[i]), &ref, &(linfo[i]), info.CorMode);
+ corC[i] = linfo[i].LinearCorrelation;
}
+ lmrcImageAverageOverThreshold(&out, fit, info.flagIn, corC, info.Thres, info.mode);
+ mrcImageFree(&ref, "in main");
+ ref = out;
}
- lmrcImageAverage(&out, fit, info.flagIn, info.mode);
+ lmrcImageAverageOverThreshold(&out, fit, info.flagIn, corC, info.Thres, info.mode);
mrcFileWrite(&out, info.Out, "in main", 0);
for(i=0; i<info.flagIn; i++) {
- fprintf(info.fptLog, "%d %f %f %f %f\n", i, linfo[i].max, linfo[i].maxTheta*DEGREE, linfo[i].maxP.x, linfo[i].maxP.y);
+ float w;
+ if(corC[i]<info.Thres) {
+ w = 0;
+ } else {
+ w = 1;
+ }
+ fprintf(info.fptLog, "%d weight %f correlation %f linesr %f theta %f at %f %f\n",
+ i,
+ w,
+ linfo[i].max,
+ linfo[i].LinearCorrelation,
+ linfo[i].maxTheta*DEGREE, linfo[i].maxP.x, linfo[i].maxP.y
+ );
}
exit(EXIT_SUCCESS);
}
[-Periodic ] :Optional :Periodic
[-maxIter[aration] maxIter (10 ).as(Integer ) ] :Optional :MaxIteration
[-rmsd rmsd (1e-2 ).as(Real ) ] :Optional :rmsd
- [-log Log (stdout ).as(inFile::ASCII ) ] :Optional :logFile
+ [-log Log (stdout ).as(outFile::ASCII ) ] :Optional :logFile
+ [-thres[hold] Thres (0.2 ).as(Real ) ] :Optional :threshold: Linear Correlation
[-c[onfig] configFile (NULL ).as(inFile ) ] :Optional :ConfigurationFile
[-m[ode] mode (0 ).as(Integer ) ] :Optional :Mode
----- Additional Usage -----
-t 1 0 1 0 0 6x1+1+12 'Periodic' 'Periodic' Periodic
-i 1 0 1 0 0 -1x1+1+13.500000 0 0 10 0 0 'maxIter' 'MaxIteration' maxIter
-f 1 0 1 0 0 -1x1+1+15.000000 0 0 0.010000 0 0 0 'rmsd' 'rmsd' rmsd
- -I 1 0 1 0 0 1 -1x1+1+16.500000 ' ' 'Log' 'logFile' log
- -I 1 0 1 0 0 1 -1x1+1+18.000000 ' ' 'configFile' 'ConfigurationFile' c
- -i 1 0 1 0 0 -1x1+1+19.500000 0 0 0 0 0 'mode' 'Mode' m
+ -O 1 0 1 0 0 1 -1x1+1+16.500000 ' ' 'Log' 'logFile' log
+ -f 1 0 1 0 0 -1x1+1+18.000000 0 0 0.200000 0 0 0 'Thres' 'threshold: Linear Correlation' thres
+ -I 1 0 1 0 0 1 -1x1+1+19.500000 ' ' 'configFile' 'ConfigurationFile' c
+ -i 1 0 1 0 0 -1x1+1+21.000000 0 0 0 0 0 'mode' 'Mode' m
-E
-E
-E
exec:
@echo "----- Execution Check -----"
- ../$(OSTYPE)/$(OBJECTNAME) -i data/in.lst -r data/test-000.mrc -o data/test.avg -Periodic -range 0 360 5 -M 18 -m 0 -maxIter 10 -iter 4;
+ ../$(OSTYPE)/$(OBJECTNAME) -i data/in.lst -r data/test-000.mrc -o data/test.avg -Periodic -range 0 360 5 -M 18 -m 0 -maxIter 10 -iter 4 -log data/test.log -thres 0.4
+ cat data/test.log
@echo "----- Calc check -----"
init:
- pdb2mrc2d -i data/121p-GC.pdb -o data/test-000.mrc -d 2.5 2.5 -s -40 -40 -n 32 32 -sig 2.0 -w 1.0
+ pdb2mrc2d -i data/121p-GC.pdb -o data/test-000.roi -d 2.5 2.5 -s -40 -40 -n 32 32 -sig 2.0 -w 1.0
echo "data/test-000.mrc" > data/in.lst
for i in 030 060 090 120 150 180 ; do \
- mrcImageRotation -i data/test-000.mrc -o data/test-$$i.mrc -a $$i -Periodic; \
+ mrcImageRotation -i data/test-000.roi -o data/test-$$i.roi -a $$i -Periodic; \
echo "data/test-$$i.mrc" >> data/in.lst; \
done
+ for i in 000 030 060 090 120 150 180 ; do \
+ mrcImageNoiseAdd -i data/test-$$i.roi -o data/test-$$i.mrc -SN 1.5 ; \
+ done
clean:
fprintf(stderr, " [-Periodic ] :Optional :Periodic\n");
fprintf(stderr, " [-maxIter[aration] maxIter (10 ).as(Integer ) ] :Optional :MaxIteration\n");
fprintf(stderr, " [-rmsd rmsd (1e-2 ).as(Real ) ] :Optional :rmsd\n");
- fprintf(stderr, " [-log Log (stdout ).as(inFile::ASCII ) ] :Optional :logFile\n");
+ fprintf(stderr, " [-log Log (stdout ).as(outFile::ASCII ) ] :Optional :logFile\n");
+ fprintf(stderr, " [-thres[hold] Thres (0.2 ).as(Real ) ] :Optional :threshold: Linear Correlation\n");
fprintf(stderr, " [-c[onfig] configFile (NULL ).as(inFile ) ] :Optional :ConfigurationFile\n");
fprintf(stderr, " [-m[ode] mode (0 ).as(Integer ) ] :Optional :Mode\n");
additionalUsage();