void lmrcImageClusterAnalysis(int* group, mrcImage* in, int finalclusternum, int N, lmrcImageClusterAnalysisInfo* linfo);
void lmrcImageClusterMerge(mrcImage* in1, mrcImage* in2, int* index, int* averagednum, int m, int n, int* N);
-float lmrcImageDistanceCalc(mrcImage* in1, mrcImage* in2, int mode);
-float lmrcImageDistanceCalcByWardMethod(mrcImage* in1, mrcImage* in2, int num1, int num2, int mode);
+void lmrcImageDistanceCalc(float* dis, mrcImage* in1, mrcImage* in2, int mode);
+void lmrcImageDistanceCalcByWardMethod(float* dis, mrcImage* in1, mrcImage* in2, int num1, int num2, int mode);
-float lmrcImageDistanceCalcWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
-float lmrcImageDistanceCalcByWardMethodWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
+void lmrcImageDistanceCalcWithAutoRotation(float* dis, mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
+void lmrcImageDistanceCalcByWardMethodWithAutoRotation(float* dis, mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
float lmrcImageClusterAnalysisByIteration(int* group, mrcImage* in, int clusternum, int N, int mode);
int flagXshiftOnly;
int flagNoShift;
+/* Control */
+
/* Output */
float max; //
float maxTheta; //
extern void lmrcImageAutoRotationCorrelation(mrcImage* out, mrcImage* cor, mrcImage* in, mrcImage* ref, lmrcImageAutoRotationCorrelationInfo* linfo, int mode);
extern void lmrcImageAutoRotationCorrelationRotationalCrossCorrelationFunction(mrcImage* out, mrcImage* cor, mrcImage* in, mrcImage* ref, lmrcImageAutoRotationCorrelationInfo* linfo, int mode);
extern double lmrcImageLinearCorrelation(mrcImage* in1, mrcImage* in2, long mode);
+extern void lmrcImageLinearCorrelation2(double* cor, mrcImage* in1, mrcImage* in2, long mode);
extern void lmrcImageCorrelation(mrcImage* cor, mrcImage* in, mrcImage* ref, long mode);
extern double lmrcImageEuclidDistanceCalc(mrcImage* in1, mrcImage* in2, int mode);
+extern void lmrcImageEuclidDistanceCalc2(double* cor, mrcImage* in1, mrcImage* in2, int mode);
extern void lmrcImageCorrelationRefinement(mrcImage* cor, mrcImage* shift, mrcImage* in, mrcImage* ref, lmrcImageCorrelationRefinementInfo* info, long mode);
INSTALL = /usr/bin/install
-CC = gcc --std=gnu99
+CC = gcc --std=gnu99 -fno-builtin
#CC = icc
CXX = g++
#CXX = /opt/intel/compiler80/bin/icc
#CXX = icc
-SHAREDCC = gcc --std=gnu99 -fpic
+SHAREDCC = gcc --std=gnu99 -fpic -fno-builtin
#CC = icc
SHAREDCXX = g++ -fpic
<H2>Information from source codes</H2>
</A>
<PRE>
-../src/fftn.c:
-
-../src/lmrcFETnormalizeBySD.c:
-
-../src/lmrcFFTExpression.c:
-
-../src/lmrcFFTFGconj.c:
-
-../src/lmrcFFTFxG.c:
-
-../src/lmrcFFTInfo.c:
-
-../src/lmrcImage3DPad.c:
-
-../src/lmrcImage3DWindowing.c:
-
-../src/lmrcImageAddValue.c:
-
-../src/lmrcImageAsProbability.c:
-
-../src/lmrcImageAverage.c:
-
-../src/lmrcImageBandPassFilter.c:
-
-../src/lmrcImageBilateralFilter.c:
-
-../src/lmrcImageBinarization.c:
-
-../src/lmrcImageBottomHatTransform.c:
-
-../src/lmrcImageBoundaryInfo.c:
-
-../src/lmrcImageCTFCompensation.c:
-
-../src/lmrcImageCTFDetermination.c:
-
-../src/lmrcImageCTFObservation.c:
-
-../src/lmrcImageCTFSN.c:
-
-../src/lmrcImageCVE.c:
-
-../src/lmrcImageCalcArea.c:
-
-../src/lmrcImageCenterGet.c:
-
-../src/lmrcImageCentre.c:
-
-../src/lmrcImageClosing.c:
-
-../src/lmrcImageClusterAnalysis.c:
-
-../src/lmrcImageCommonLine.c:
-
-../src/lmrcImageConnection.c:
-
-../src/lmrcImageConnectivityNumberCalc.c:
-
-../src/lmrcImageContourSurface.c:
-
-../src/lmrcImageContraction.c:
-
-../src/lmrcImageCorrelation.c:
- $lmrcImageEuclidDistanceCalc: Calculate Euclid distance between two images $
- $arg: in1: input mrcImage1 $
- $arg: in2: input mrcImage2 $
- $arg: mode: input int $
- $mode: 0 Sum of SQR $
- $mode: 1 Distance $
- $return: EuclidDistance $
-
-../src/lmrcImageCorrelationPVM.c:
-
-../src/lmrcImageCorrelationWithCTFCompensation.c:
-
-../src/lmrcImageCorrelationinSpace.c:
-
-../src/lmrcImageCrystalCreate.c:
-
-../src/lmrcImageDataMaxAndMinGetByImage.c:
-
-../src/lmrcImageDataStraightCopy.c:
-
-../src/lmrcImageDeconvolution.c:
-
-../src/lmrcImageDensity.c:
-
-../src/lmrcImageDensityInverse.c:
-
-../src/lmrcImageDensityNormalizationByImage.c:
-
-../src/lmrcImageDifferential.c:
-
-../src/lmrcImageDilation.c:
-
-../src/lmrcImageDistanceConversion.c:
-
-../src/lmrcImageEdge.c:
-
-../src/lmrcImageEdgeAverage.c:
-
-../src/lmrcImageEdgeEnhancement.c:
-
-../src/lmrcImageErosion.c:
-
-../src/lmrcImageFFT.c:
-
-../src/lmrcImageFOMCalc.c:
-
-../src/lmrcImageFeatureExtraction.c:
-
-../src/lmrcImageFeatureExtractionCoOccurrence.c:
-
-../src/lmrcImageFeatureExtractionRunLength.c:
-
-../src/lmrcImageFilterCreate.c:
-
-../src/lmrcImageFirstNoiseReductionByRelaxation.c:
-
-../src/lmrcImageFloating.c:
-
-../src/lmrcImageFourierNeighborCorrelation.c:
-
-../src/lmrcImageFourierPowerSpectrum.c:
-
-../src/lmrcImageFourierShellCorrelation.c:
-
-../src/lmrcImageHighPassFilter.c:
-
-../src/lmrcImageHighlighting.c:
-
-../src/lmrcImageLabeling.c:
-
-../src/lmrcImageLogicalOperation.c:
-
-../src/lmrcImageLowPassFilter.c:
-
-../src/lmrcImageMasking.c:
-
-../src/lmrcImageMaxDataGet.c:
-
-../src/lmrcImageMirroring.c:
- $lmrcImageMirroring: (mrcImage* out, mrcImage* in, lmrcImageMirroring mode) $
-
-../src/lmrcImageModeChange.c:
-
-../src/lmrcImageModelCreate.c:
-
-../src/lmrcImageMontageCreate.c:
-
-../src/lmrcImageMorphology.c:
-
-../src/lmrcImageMove.c:
-
-../src/lmrcImageMultiCTFCompensation.c:
-
-../src/lmrcImageMultiplying.c:
-
-../src/lmrcImageNegativeLaplacian.c:
-
-../src/lmrcImageNoiseCreate.c:
-
-../src/lmrcImageNormalizing.c:
-
-../src/lmrcImageOneLineSimilarityCalc.c:
-
-../src/lmrcImageOpening.c:
-
-../src/lmrcImagePad.c:
-
-../src/lmrcImagePartImageSegmentation.c:
-
-../src/lmrcImagePixelSummationOfProbabilityGetByImage.c:
-
-../src/lmrcImagePosterization.c:
-
-../src/lmrcImagePrewitt.c:
-
-../src/lmrcImageProjection.c:
-
-../src/lmrcImageProportionalDensityLevelSetByImage.c:
-
-../src/lmrcImageROI2D.c:
-
-../src/lmrcImageROI3D.c:
-
-../src/lmrcImageROInotChangeHeaderLength.c:
-
-../src/lmrcImageRadialDistribution.c:
-
-../src/lmrcImageRhoFiltering.c:
-
-../src/lmrcImageRoberts.c:
-
-../src/lmrcImageRotation.c:
-
-../src/lmrcImageSSDA.c:
-
-../src/lmrcImageSamplingUnitChange.c:
-
-../src/lmrcImageSecondNoiseReductionByRelaxation.c:
-
-../src/lmrcImageSecondNoiseReductionByRelaxationDijDimensionSet.c:
-
-../src/lmrcImageSecondNoiseReductionByRelaxationDijValueCalculate.c:
-
-../src/lmrcImageSecondNoiseReductionByRelaxationDijValueSet.c:
-
-../src/lmrcImageSecondNoiseReductionByRelaxationQValueSet.c:
-
-../src/lmrcImageSecondNoiseReductionByRelaxationRValueSet.c:
-
-../src/lmrcImageShapePCA.c:
-
-../src/lmrcImageShift.c:
-
-../src/lmrcImageShrink.c:
-
-../src/lmrcImageSigmaCalculate.c:
-
-../src/lmrcImageSinogram.c:
-
-../src/lmrcImageSinogramCorrelation.c:
-
-../src/lmrcImageSinogramFFT.c:
-
-../src/lmrcImageSmoothing.c:
-
-../src/lmrcImageSobel.c:
-
-../src/lmrcImageSolventFlattening.c:
-
-../src/lmrcImageSpatialFrequencyFilter.c:
-
-../src/lmrcImageSphere.c:
-
-../src/lmrcImageSplit.c:
-
-../src/lmrcImageStack.c:
-
-../src/lmrcImageStudentCalculate.c:
-
-../src/lmrcImageSubtractionCalc.c:
-
-../src/lmrcImageSummationCalculate.c:
-
-../src/lmrcImageSymmetryFind.c:
-
-../src/lmrcImageTfunction.c:
-
-../src/lmrcImageTopHatTransform.c:
-
-../src/lmrcImageTrans.c:
-
-../src/lmrcImageTransformDescartesIntoPolar.c:
-
-../src/lmrcImageTriming.c:
-
-../src/lmrcImageVolumeCalc.c:
-
-../src/lmrcImageWindowing.c:
-
-../src/lmrcImagesFTest.c:
-
-../src/lmrcImagesStatDataGet.c:
-
-../src/lmrcImagesTTest.c:
-
-../src/lmrcImagesVarianceAnalysis.c:
-
-../src/lmrcImagesVarianceMap.c:
-
-../src/lmrcSinogramFET.c:
-
-../src/lmrcSinogramFETPCA.c:
-
-../src/lmrcSinogramFETcalcWeight.c:
-
-../src/lmrcSinogramFETcorrelationMap.c:
-
-../src/lmrcSinogramFETnormalizedMap.c:
-
-../src/lmrcSinogramFETreferredCorrelation.c:
-
-../src/lmrcSinogramFETsmoothParameterMatching.c:
-
-../src/mrcImageCheckFFT.c:
-
-../src/mrcImageCheckSameSize.c:
-
-../src/mrcImageCopy.c:
-
-../src/mrcImageDataSet.c:
-
-../src/mrcImageError.c:
-
-../src/mrcImageGet.c:
-
-../src/mrcImageGetPixels.c:
-
-../src/mrcImageInfo.c:
-
-../src/mrcImageInit.c:
-
-../src/mrcImageOperation.c:
-
-../src/mrcImagePVM.c:
-
-../src/mrcImagePrint.c:
-
-../src/mrcImageRead.c:
-
-../src/mrcImageSectionGet.c:
-
-../src/mrcImageSectionSet.c:
-
-../src/mrcImageSet.c:
-
-../src/mrcImageTailer.c:
-
-../src/mrcImageToIntImage.c:
-
-../src/mrcImageUtil.c:
-
-../src/mrcImageUtilityforVariance.c:
-
-../src/mrcImageWrite.c:
-
-../src/mrcImageWrite2.c:
-
-../src/mrcImagefuncmin.c:
-
-../src/mrcRefUtil.c:
</PRE>
<HR>
<A NAME="include">
+++ /dev/null
-/*
-# %M% %Y% %I%
-# The latest update : %G% at %U%
-#
-#%Z% lmrcImageMultiCTFCompensation ver %I%
-#%Z% Created by tacyas
-#%Z%
-#%Z% Usage : void lmrcImageMultiCTFCompensation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, long mode)
-#%Z% Attention
-#%Z%
-*/
-static char __sccs_id[] = "%Z%lmrcImageMultiCTFCompensation ver%I%; Date:%D% %Z%";
-#define DEBUG
-#include "genUtil.h"
-#include "Memory.h"
-#include "../inc/mrcImage.h"
-#include "ctfInfo.h"
-#include "./lmrcImageCTFCompensation.h"
-
-extern void __lmrcImageMultiCTFCompensationMode0(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode);
-extern void __lmrcImageMultiCTFCompensationMode1(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode);
-
-void
-lmrcImageMultiCTFCompensation(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode)
-{
- switch(mode&0xf) {
- case 0: {
- __lmrcImageMultiCTFCompensationMode0(dst, src, ctf, nfile, info, mode);
- break;
- }
- case 1: {
- __lmrcImageMultiCTFCompensationMode1(dst, src, ctf, nfile, info, mode);
- break;
- }
- default: {
- fprintf(stderr, "Not supported mode in lmrcImageMultiCTFCompensation: %ld\n", mode);
- exit(EXIT_FAILURE);
- }
- }
-}
-
-void
-lmrcImageMultiCTFCompensationUsage(FILE* fpt)
-{
- fprintf(fpt, "mode: 0 : CTF-weighted compensation, CTF/(SQR(CTF) + (NS)^2)\n");
- fprintf(fpt, "mode: +1 : Adding solvent-flattening process\n");
- fprintf(fpt, "mode: +16: Without phase flipping, in case of images after phase only correction.\n ");
-}
-
-void
-__lmrcImageMultiCTFCompensationMode1(mrcImage* dstfft, /* Fourier transform of CTF-corrected image */
- mrcImage* srcfft, /* Fourier transforms of observed images */
- ctfInfo* ctf, /* CTFs of observed images */
- long nfile, /* Number of observed images */
- lmrcImageMultiCTFCompensationInfo info,
- long mode)
-{
- long i;
- mrcImage* predict; /* Predicted observed images */
- mrcImage* predictfft; /* Fourier transforms of predicted observed images */
- mrcImage* deltasrc;
- mrcImage* deltasrcfft;
- mrcImage deltadstfft;
- mrcImage deltadst;
- mrcImage* src; /* Observed images */
- mrcImage dst; /* CTF-coorected image */
- mrcImage mindst; /* CTF-coorected image (minimum)*/
- mrcImageParaTypeReal x, y, z;
- double rms, minrms;
- double okrms, diversefactor = 10;
- double data, delta, tmppredict, tmpsrc;
- long iteration, maxiteration;
- double* hist;
- double maxhist, maxhistdens;
- long nhist;
-
- maxiteration = info.maxiteration;
- okrms = info.okrms;
- diversefactor = info.diversefactor;
- z = info.z;
- nhist = info.nhist;
-
- predictfft = (mrcImage*)memoryAllocate(sizeof(mrcImage)*nfile, "in __lmrcImageMultiCTFCompensation");
- predict = (mrcImage*)memoryAllocate(sizeof(mrcImage)*nfile, "in __lmrcImageMultiCTFCompensation");
- src = (mrcImage*)memoryAllocate(sizeof(mrcImage)*nfile, "in __lmrcImageMultiCTFCompensation");
-
- deltasrcfft = predictfft;
- deltasrc = predict;
-
- /* Create the observed images */
- for(i=0; i<nfile; i++) {
- DEBUGPRINT1("Create the observed image[%ld]\n", i);
- /* lfft2d(&(src[i]), &(srcfft[i])); */
- lmrcImageFFT(&(src[i]), &(srcfft[i]), 0);
- }
-
- /* Create the fisrt CTF-corrected image and its Fourier transform */
- DEBUGPRINT("Create the first CTF-corrected image on Fourier space\n");
- __lmrcImageMultiCTFCompensationMode0(dstfft, srcfft, ctf, nfile, info, mode);
- for(i=0; i<nfile; i++) {
- mrcImageFree(&(srcfft[i]), "in __mrcImageMultiCTFCompensation");
- }
-
- DEBUGPRINT("Create the first CTF-corrected image on real space\n");
- /* lfft2d(&dst, dstfft); */
- lmrcImageFFT(&dst, dstfft, 0);
- mrcImageFree(dstfft, "in __lmrcImageMultiModeCTFCompensation");
-
- rms = minrms = 1e6;
- iteration = 0;
- mindst.Image = NULL;
- do {
- DEBUGPRINT1("#Iter: %10ld Start\n", iteration);
- switch(info.solventMode) {
- case lmrcImageMultiCTFCompensationSolventFlatteningModeDensityPeakIsSolvent: {
-
- /* non-linear filtering : solvent flattening : mode of density is density of solvent*/
- /* density in the defined solvent area is density of solvent*/
- mrcStatDataSet(&dst, 0);
- lmrcImageHistgram(&hist, nhist, &dst);
- maxhist = 0.0;
- maxhistdens = 0;
- for(i=0; i<nhist; i++) {
- if(maxhist<hist[i]) {
- maxhist = hist[i];
- maxhistdens = i;
- }
- }
- free(hist);
- maxhistdens = maxhistdens/(nhist-1)*(dst.HeaderAMax - dst.HeaderAMin) + dst.HeaderAMin;
- for(x=0; x<dst.HeaderN.x; x++) {
- for(y=0; y<dst.HeaderN.y; y++) {
- mrcPixelDataGet(&dst, x, y, z, &data, mrcPixelMag, mrcPixelHowNearest);
- if(data<maxhistdens) {
- mrcPixelDataSet(&dst, x, y, z, (double)maxhistdens, mrcPixelMag);
- }
- }
- }
- break;
- }
- case lmrcImageMultiCTFCompensationSolventFlatteningModeDefinedSTDIsSolvent: {
- mrcImageInformation imageInfo;
- double threshold;
-
- imageInfo.mode = meanOfAll;
- lmrcImageInformation(&imageInfo, &dst);
- threshold = imageInfo.mean + imageInfo.sd*info.definedSTD;
- for(x=0; x<dst.HeaderN.x; x++) {
- for(y=0; y<dst.HeaderN.y; y++) {
- mrcPixelDataGet(&dst, x, y, z, &data, mrcPixelMag, mrcPixelHowNearest);
- if(data<threshold) {
- mrcPixelDataSet(&dst, x, y, z, (double)threshold, mrcPixelMag);
- }
- }
- }
- break;
- }
- default: {
- fprintf(stderr, "Not supported Mode for lmrcImageMultiCTFCompensationSolventFlatteningMode %d", info.solventMode);
- exit(EXIT_FAILURE);
- }
- }
- DEBUGPRINT("Create Fourier transforms of CTF-corrected image\n");
- /* lfft2d(dstfft, &dst); */
- lmrcImageFFT(dstfft, &dst, 0);
-
- DEBUGPRINT("Create the predicted observed images\n");
- for(i=0; i<nfile; i++) {
- /* Determine CTF : on real space*/
- /* If r is max, then OK !! */
-
- /* Create Fourier transforms of the predicted observed images */
- DEBUGPRINT1("%ld: CTF Observation dstfft -> predictfft \n", i);
- lmrcImageCTFObservation(&(predictfft[i]), dstfft, &(ctf[i]), 0);
-
- /* Create the predicted images to observe */
- DEBUGPRINT1("%ld: fft predictfft to predict\n", i);
- /* lfft2d(&(predict[i]), &(predictfft[i])); */
- lmrcImageFFT(&(predict[i]), &(predictfft[i]), 0);
-
- /* predictfft Image Area Free */
- mrcImageFree(&(predictfft[i]), "in __lmrcImageMultiModeCTFCompensation");
- }
- mrcImageFree(dstfft, "in __lmrcImageMultiModeCTFCompensation");
-
- /* Normarize the observed image against the predicted observed image */
- /* Now not supported for normalization */
- /*
-
- */
-
- /* Compare the predicted defocused image with real images and change dst*/
- for(x=0; x<dst.HeaderN.x; x++) {
- for(y=0; y<dst.HeaderN.y; y++) {
- /* check the difference between predicted images (predict) and obseved images (src) */
- for(i=0; i<nfile; i++) {
- /* predict -> deltasrc : Attention !!! Now common memories are used */
- mrcPixelDataGet(&(predict[i]), x, y, z, &tmppredict, mrcPixelMag, mrcPixelHowNearest);
- mrcPixelDataGet(&(src[i]), x, y, z, &tmpsrc, mrcPixelMag, mrcPixelHowNearest);
- /* src - predict */
- delta = tmpsrc - tmppredict;
- mrcPixelDataSet(&(deltasrc[i]), x, y, z, delta , mrcPixelMag);
- }
- }
- }
- /* deltasrc -> deltasrcfft */
- for(i=0; i<nfile; i++) {
- DEBUGPRINT1("%ld: fft deltasrc to deltasrcfft \n", i);
- /* lfft2d(&(deltasrcfft[i]), &(deltasrc[i])); */
- lmrcImageFFT(&(deltasrcfft[i]), &(deltasrc[i]), 0);
- mrcImageFree(&(deltasrc[i]), "in __lmrcImageMultiModeCTFCompensation");
- }
-
- /* deltasrcfft -> deltadst */
- DEBUGPRINT1("Create the %ld th delta image \n", iteration);
- __lmrcImageMultiCTFCompensationMode0(&deltadstfft, deltasrcfft, ctf, nfile, info, mode);
- for(i=0; i<nfile; i++) {
- mrcImageFree(&(deltasrcfft[i]), "in __lmrcImageMultiModeCTFCompensation");
- }
- /* lfft2d(&deltadst, &deltadstfft); */
- lmrcImageFFT(&deltadst, &deltadstfft, 0);
- mrcImageFree(&deltadstfft, "in __lmrcImageMultiModeCTFCompensation");
-
- /* change the CTF-corrected image (dst = dst - deltadst ) */
- for(x=0; x<dst.HeaderN.x; x++) {
- for(y=0; y<dst.HeaderN.y; y++) {
- mrcPixelDataGet(&deltadst, x, y, z, &delta, mrcPixelMag, mrcPixelHowNearest);
- rms += SQR(delta);
- mrcPixelDataGet(&dst, x, y, z, &data, mrcPixelMag, mrcPixelHowNearest);
- data += delta;
- mrcPixelDataSet(&dst, x, y, z, data, mrcPixelMag);
- }
- }
- mrcStatDataSet(&dst, 0);
- rms = sqrt(rms/dst.HeaderN.x/dst.HeaderN.y)/dst.HeaderAMean;
- mrcImageFree(&deltadst, "in __lmrcImageMultiModeCTFCompensation");
-
- fprintf(info.logfile, "iter %10ld : rms %15.6e : min %15.6e\n", iteration, rms, minrms);
- DEBUGPRINT3("iter %10ld : rms %15.6e : min %15.6e\n", iteration, rms, minrms);
- if(rms<minrms) {
- if(fabs(rms-minrms)<1e-6) {
- break;
- }
- minrms = rms;
- if(NULL!=mindst.Image) {
- DEBUGPRINT("old mindst free\n");
- mrcImageFree(&mindst, "in __lmrcImageMultiMOdeCTFCompensation");
- }
- mindst = dst;
- dst.Image = NULL;
- mrcInit(&dst, NULL);
- for(x=0; x<dst.HeaderN.x; x++) {
- for(y=0; y<dst.HeaderN.y; y++) {
- mrcPixelDataGet(&mindst, x, y, z, &data, mrcPixelRePart, mrcPixelHowNearest);
- mrcPixelDataSet(&dst, x, y, z, data, mrcPixelRePart);
- }
- }
- }
- iteration++;
- } while(okrms < rms
- && iteration < maxiteration
- && rms < diversefactor*minrms); /* Condition for ending iteration */
- /* lfft2d(dstfft, &dst); */
- lmrcImageFFT(dstfft, &mindst, 0);
- mrcImageFree(&mindst, "in __mrcImageMultiCTFCompensationMode1");
- mrcImageFree(&dst, "in __mrcImageMultiCTFCompensationMode1");
-}
-
-void
-__lmrcImageMultiCTFCompensationMode0(mrcImage* dst, mrcImage* src, ctfInfo* ctf, long nfile, lmrcImageMultiCTFCompensationInfo info, long mode)
-{
- double W, NW;
- double Win;
- double re, im, dstre, dstim;
- double* Weight;
- float X, Y, R;
- float dX, dY;
- long i;
-
- DEBUGPRINT(" __lmrcImageMultiCTFCompensationMode0\n");
- Weight = (double*)memoryAllocate(sizeof(double)*nfile, "in __lmrcImageMultiCTFCompensation");
- dst->Header = src[0].Header;
- mrcInit(dst, NULL);
- for(X=0; X <= dst->HeaderN.x/2; X++) {
- for(Y=-dst->HeaderN.y/2; Y < dst->HeaderN.y/2; Y++) {
- W = 0.0;
- mrcPixelDataSet(dst, X, Y, 0.0, 0.0, mrcPixelRePart);
- mrcPixelDataSet(dst, X, Y, 0.0, 0.0, mrcPixelImPart);
- for(i=0; i<nfile; i++) {
- dX = 1.0/(src[i].HeaderN.x*src[i].HeaderLength.x);
- dY = 1.0/(src[i].HeaderN.y*src[i].HeaderLength.y);
- R = sqrt(SQR(X*dX) + SQR(Y*dY));
-
- if(ctf[i].flagAstigmatism) {
- Weight[i] = ctfFunction2D(&(ctf[i]), X*dX, Y*dY, 0);
- } else {
- Weight[i] = ctfFunction(&(ctf[i]), R, 0);
- }
- if(mode&0x10) {
- Weight[i] = fabs(Weight[i]);
- }
- W += SQR(Weight[i]);
-
-
- if(ctf[i].flagWhiteNoiseRaising) {
- NW = SQR(ctf[i].WhiteNoise*exp(ctf[i].WhiteNoiseRaising*R));
- } else if(ctf[i].flagWhiteNoise) {
- NW = SQR(ctf[i].WhiteNoise);
- }
- W += NW;
- DEBUGPRINT3("R: %f Weight %f NW %f\n", R, Weight[i], NW);
- if(ctf[i].flagWin) {
- if(R<ctf[i].CutLow) {
- Win = 1.0;
- } else if(ctf[i].CutLow<R && R<ctf[i].CutHigh) {
- Win = (cos((R - ctf[i].CutLow)/(ctf[i].CutHigh - ctf[i].CutLow)*M_PI)+1.0)/2.0;
- DEBUGPRINT2("%f %f\n", R, Win);
- } else {
- Win = 0.0;
- }
- } else {
- Win = 1.0;
- }
-
- mrcPixelDataGet(dst, X, Y, 0.0, &dstre, mrcPixelRePart, mrcPixelHowNearest);
- mrcPixelDataGet(dst, X, Y, 0.0, &dstim, mrcPixelImPart, mrcPixelHowNearest);
- mrcPixelDataGet(&(src[i]), X, Y, 0.0, &re, mrcPixelRePart, mrcPixelHowNearest);
- mrcPixelDataGet(&(src[i]), X, Y, 0.0, &im, mrcPixelImPart, mrcPixelHowNearest);
- dstre += (re*Weight[i]*Win);
- dstim += (im*Weight[i]*Win);
- mrcPixelDataSet(dst, X, Y, 0.0, dstre, mrcPixelRePart);
- mrcPixelDataSet(dst, X, Y, 0.0, dstim, mrcPixelImPart);
- }
-
- mrcPixelDataGet(dst, X, Y, 0.0, &dstre, mrcPixelRePart, mrcPixelHowNearest);
- mrcPixelDataGet(dst, X, Y, 0.0, &dstim, mrcPixelImPart, mrcPixelHowNearest);
- if(0.0!=W) {
- mrcPixelDataSet(dst, X, Y, 0.0, dstre/W, mrcPixelRePart);
- mrcPixelDataSet(dst, X, Y, 0.0, dstim/W, mrcPixelImPart);
- } else {
- mrcPixelDataSet(dst, X, Y, 0.0, 0.0, mrcPixelRePart);
- mrcPixelDataSet(dst, X, Y, 0.0, 0.0, mrcPixelImPart);
- }
- }
- }
-}
-
-
#include <stdlib.h>
#include <string.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "String.h"
*/
/* $Log$ */
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "./lmrcImageAverage.h"
#include <string.h>
#include <math.h>
-//#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "../inc/mrcImage.h"
static char __sccs_id[] = "%Z%lmrcImageCTFCompensation ver%I%; Date:%D% %Z%";
#include <stdlib.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "mrcImage.h"
#include "ctfInfo.h"
#
*/
/* $Log$ */
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "./lmrcImageLabeling.h"
#include <stdlib.h>
#include <string.h>
#include <math.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
+#include "eosPThread.h"
#include "Memory.h"
#include "./lmrcImageClusterAnalysis.h"
+typedef struct lmrcImageDistanceCalc0ForPThreadArgs {
+ int iCount;
+ mrcImage* out;
+ mrcImage* cor;
+ mrcImage* clusterN;
+ mrcImage* clusterM;
+ int numN;
+ int numM;
+ lmrcImageClusterAnalysisInfo linfo;
+ float** distance;
+ int n;
+ int m;
+ double retValue;
+ int prevN;
+ int prevM;
+ int* minn;
+ int* minm;
+ float* min;
+ mrcImage* minCor;
+ mrcImage* minOut;
+ lmrcImageAutoRotationCorrelationInfo* minInfo;
+
+
+ eosPThread* pthread;
+ int flagSkip;
+ int flagNoValue;
+} lmrcImageDistanceCalc0ForPThreadArgs;
/*
Historically, we created the mrcImageClusterAnalysis first.
fflush(fpt);
}
-double
-lmrcImageDistanceCalc0(mrcImage* out, mrcImage* cor, mrcImage* clusterN, mrcImage* clusterM, int numN, int numM, lmrcImageClusterAnalysisInfo* linfo) {
- double distance = 0;
+void
+lmrcImageDistanceCalc0(mrcImage* out, mrcImage* cor, mrcImage* clusterN, mrcImage* clusterM, int numN, int numM, lmrcImageClusterAnalysisInfo* linfo, float* distance) {
+ //double distance = 0;
mrcImageParaTypeRealCoord offset;
-
+ *distance = 0;
offset.x = offset.y = offset.z = 0;
- DEBUGPRINT("n lmrcImageDistanceCalc0:");
+ DEBUGPRINT2("lmrcImageDistanceCalc0: numN %d numM %d\n", numN, numM);
switch(linfo->mode) {
case lmrcImageClusterAnalysisModeCorrelation:
case lmrcImageClusterAnalysisModeLinearCorrelation:
case lmrcImageClusterAnalysisModeEuclidDistance: {
if(linfo->flagAutoRotation) {
- distance = lmrcImageDistanceCalcWithAutoRotation(out, cor,
+ lmrcImageDistanceCalcWithAutoRotation(distance, out, cor,
clusterN, clusterM,
&(linfo->arInitial), linfo->correlationMode, linfo->mode);
} else {
DEBUGPRINT("ByCorrelation:");
- distance = lmrcImageDistanceCalc(clusterN, clusterM, linfo->mode);
+ lmrcImageDistanceCalc(distance, clusterN, clusterM, linfo->mode);
*out = *clusterN;
cor->Image = NULL;
}
case lmrcImageClusterAnalysisModeWardMethod:
case lmrcImageClusterAnalysisModeWardMethodLinearCorrelation: {
if(linfo->flagAutoRotation) {
- distance = lmrcImageDistanceCalcByWardMethodWithAutoRotation(out, cor,
+ lmrcImageDistanceCalcByWardMethodWithAutoRotation(distance, out, cor,
clusterN, clusterM,
numN, numM,
&(linfo->arInitial), linfo->correlationMode, linfo->mode);
} else {
DEBUGPRINT("By Ward: ");
- distance = lmrcImageDistanceCalcByWardMethod(
+ lmrcImageDistanceCalcByWardMethod(distance,
clusterN, clusterM,
numN, numM,
linfo->mode);
break;
}
}
- DEBUGPRINT1("Distance: %f\n", distance)
- if(0<distance) {
- return distance;
+ DEBUGPRINT1("Distance: %f\n", *distance)
+/*
+ if(0<*distance) {
+ return *distance;
} else {
return (0);
}
+*/
}
+void
+lmrcImageDistanceCalc0ForPThread(void* args)
+{
+ int n;
+ int m;
+ float data;
+ lmrcImageDistanceCalc0ForPThreadArgs* Arg ;
+
+ Arg = (lmrcImageDistanceCalc0ForPThreadArgs*)args;
+ DEBUGPRINT2("lmrcImageDistanceCalc0ForPThread: %d %d\n", Arg->n, Arg->m)
+ n = Arg->n;
+ m = Arg->m;
+
+ lmrcImageDistanceCalc0(Arg->out, Arg->cor, Arg->clusterN, Arg->clusterM, Arg->numN, Arg->numM, &(Arg->linfo), &data);
+
+ eosPThreadMutexLock(Arg->pthread);
+ Arg->distance[n][m] = data;
+ DEBUGPRINT3("%d %d %f\n", n, m, Arg->distance[n][m]);
+ /* Evaluate Distance betweeen cluster[index[n]] and cluster[index[m]] */
+ if(Arg->distance[n][m]<=*Arg->min) {
+ *Arg->min = Arg->distance[n][m];
+ *Arg->minn = n;
+ *Arg->minm = m;
+ if(Arg->flagSkip) {
+ Arg->flagNoValue = 1;
+ } else {
+ Arg->flagNoValue = 0;
+ mrcImageFree(Arg->minCor, "in lmrcImageClusterAnalysis");
+ mrcImageFree(Arg->minOut, "in lmrcImageClusterAnalysis");
+ *Arg->minCor = *Arg->cor;
+ *Arg->minOut = *Arg->out;
+ *Arg->minInfo = Arg->linfo.arInitial;
+ }
+ } else {
+ if(!Arg->flagSkip) {
+ mrcImageFree(Arg->cor, "in lmrcImageClusterAnalysis");
+ mrcImageFree(Arg->out, "in lmrcImageClusterAnalysis");
+ }
+ }
+ eosPThreadMutexUnlock(Arg->pthread);
+}
+
void
lmrcImageClusterAnalysis(
int* group, /* Output: Group Index */
mrcImageParaTypeRealCoord offset;
mrcImage out;
mrcImage cor;
+ mrcImage* outs;
+ mrcImage* cors;
mrcImage minOut;
mrcImage minCor;
lmrcImageAutoRotationCorrelationInfo minInfo;
int flagNoValue= 1;
int flagNoSkip = 0;
clusterLog* clusterLog=NULL;
+ int threadNum = 1; /* Thrad Number */
+ int iThread = 0; /* Thread ID */
+ eosPThread pthread;
+ lmrcImageDistanceCalc0ForPThreadArgs* pthreadArg=NULL;
+ int flagMutex = 0;
+ DEBUGPRINT("Start lmrcImageClusterAnalysis\n");
minn = minm = 0;
clusternum = N; /* the current number of clusters */
prevN = N; /* previous N */
linfo->averagedImage = (mrcImage*)memoryAllocate(sizeof(mrcImage)*N, "Enough memory is not available!");
if(linfo->flagLogIn) {
- DEBUGPRINT("LogIn\n");
+ DEBUGPRINT("Use LogIn\n");
fseek(linfo->fptLogIn, 0L, SEEK_SET);
clusterLog = clusterLogReadAll(clusterLog, linfo->fptLogIn, 0);
clusterLogClusterNumberSet2(clusterLog, linfo->previousFileNumber, 0);
*: Calc
-: No Calc
*/
+ DEBUGPRINT2("eosPThread: flag %d Num %d\n", __eosPThread__, __eosPThreadNum__);
+ if(__eosPThread__) {
+ threadNum = __eosPThreadNum__;
+ eosPThreadInit(&pthread, threadNum, 0);
+ eosPThreadMutexInit(&pthread);
+ pthreadArg =(lmrcImageDistanceCalc0ForPThreadArgs*)
+ memoryAllocate(sizeof(lmrcImageDistanceCalc0ForPThreadArgs)*threadNum, "in lmrcImageClusterAnalysis");
+ outs = (mrcImage*)memoryAllocate(sizeof(mrcImage)*threadNum, "in lmrcImageClusterAnalysis");
+ cors = (mrcImage*)memoryAllocate(sizeof(mrcImage)*threadNum, "in lmrcImageClusterAnalysis");
+ for(iThread=0; iThread<threadNum; iThread++) {
+ pthreadArg[iThread].out = &(outs[iThread]); // work out
+ pthreadArg[iThread].cor = &(cors[iThread]); // work cor
+ pthreadArg[iThread].linfo = *linfo; // work linfo
+ pthreadArg[iThread].distance = distance; // Output: distance[N][M] ; Shared
+ pthreadArg[iThread].minCor = &minCor; // Output: minCor
+ pthreadArg[iThread].minOut = &minOut; // Output: minOut
+ pthreadArg[iThread].minn = &minn; // Output: minN
+ pthreadArg[iThread].minm = &minm; // Output: minM
+ pthreadArg[iThread].min = &min; // Output: min
+ pthreadArg[iThread].minInfo = &minInfo; // Output: minInfo
+ pthreadArg[iThread].pthread = &pthread; // control: pthread
+ }
+ eosPThreadMutexInit(&pthread);
+ } else {
+ threadNum = 1;
+ }
+ i = 0;
+ DEBUGPRINT2("cluster condition %d<%d?\n", finalclusternum, clusternum);
while (finalclusternum<clusternum) {
min=MAXFLOAT;
for (n=0; n<clusternum; n++) {
for (m=0; m<n; m++) {
+ if(__eosPThread__) {
+ eosPThreadMutexLock(&pthread);
- /* Check whether correlation between index[n] and index[m] must be calculated. */
- if( clusternum != N /* At the first step (N==clusternum), we cannot skip */
- && index[n] != index[prevM]
- && index[m] != index[prevM]
- && min <= distance[n][m]) {
- flagSkip = 1;
- } else {
- flagSkip = 0;
- }
- if(linfo->flagLogIn && !flagSkip && !flagNoSkip) {
- clusterTypeReal d = -1;
- clusterLog->current = clusterLogGetDistance(clusterLog, n, m, clusternum - (N - linfo->previousFileNumber), &d);
- if(d<=0) {
- DEBUGPRINT3("Zero:: n: %d m: %d d: %g\n", n, m, d);
- flagNoSkip = 1; /* The log file has an error log line */
+ iThread = i%threadNum;
+ DEBUGPRINT4("thread %d/%d at (n: %d, m: %d)\n", iThread, i, n, m);
+ eosPThreadMutexUnlock(&pthread);
+
+ if(pthread.status[iThread] == eosPThreadStatusRunning) {
+ eosPThreadJoin(&pthread, iThread, 0);
}
- if(0<d) {
- distance[n][m] = d;
- flagSkip = 1;
+ eosPThreadMutexLock(&pthread);
+
+ /* Check whether correlation between index[n] and index[m] must be calculated. */
+ if( clusternum != N /* At the first step (N==clusternum), we cannot skip */
+ && index[n] != index[prevM]
+ && index[m] != index[prevM]
+ && min <= distance[n][m]) {
+ flagSkip = 1;
} else {
flagSkip = 0;
}
- }
+ if(linfo->flagLogIn && !flagSkip && !flagNoSkip) {
+ clusterTypeReal d = -1;
+ clusterLog->current = clusterLogGetDistance(clusterLog, n, m, clusternum - (N - linfo->previousFileNumber), &d);
+ if(d<=0) {
+ DEBUGPRINT3("Zero:: n: %d m: %d d: %g\n", n, m, d);
+ flagNoSkip = 1; /* The log file has an error log line */
+ }
+ if(0<d) {
+ distance[n][m] = d;
+ flagSkip = 1;
+ } else {
+ flagSkip = 0;
+ }
+ }
+ /* Calc distance[n][m] */
+ if(flagSkip && 0 < distance[n][m]) {
+ DEBUGPRINT4("skip: n: %d m: %d prevM: %d prevN: %d\n", n, m, prevM, prevN);
+ DEBUGPRINT4("index: n: %d m: %d prevM: %d prevN: %d\n", index[n], index[m], index[prevM], index[prevN]);
+ /* Skip because of no need of calculation */
+ eosPThreadMutexUnlock(&pthread);
+ } else {
+ DEBUGPRINT4("noskip: n: %d m: %d prevM: %d prevN: %d\n", n, m, prevM, prevN);
+ DEBUGPRINT4("index: n: %d m: %d prevM: %d prevN: %d\n", index[n], index[m], index[prevM], index[prevN]);
+ distance[n][m] = 0;
+ pthreadArg[iThread].iCount = iThread;
+ pthreadArg[iThread].clusterN= &(cluster[index[n]]);
+ pthreadArg[iThread].clusterM= &(cluster[index[m]]);
+ pthreadArg[iThread].numN = averagednum[index[n]];
+ pthreadArg[iThread].numM = averagednum[index[m]];
+ pthreadArg[iThread].n = n;
+ pthreadArg[iThread].m = m;
+ pthreadArg[iThread].prevN = prevN;
+ pthreadArg[iThread].prevM = prevM;
+ pthreadArg[iThread].flagSkip = flagSkip;
+ pthreadArg[iThread].flagNoValue = flagNoValue;
+
+ eosPThreadMutexUnlock(&pthread);
+
+ eosPThreadCreate(&pthread, iThread, (void*)lmrcImageDistanceCalc0ForPThread, &(pthreadArg[iThread]), 0);
+ }
- /* Calc distance[n][m] */
- if(flagSkip && 0 < distance[n][m]) {
- DEBUGPRINT4("skip: n: %d m: %d prevM: %d prevN: %d\n", n, m, prevM, prevN);
- DEBUGPRINT4("index: n: %d m: %d prevM: %d prevN: %d\n", index[n], index[m], index[prevM], index[prevN]);
- /* Skip because of no need of calculation */
+ eosPThreadMutexLock(&pthread);
+ i++;
+ eosPThreadMutexUnlock(&pthread);
} else {
- DEBUGPRINT4("noskip: n: %d m: %d prevM: %d prevN: %d\n", n, m, prevM, prevN);
- DEBUGPRINT4("index: n: %d m: %d prevM: %d prevN: %d\n", index[n], index[m], index[prevM], index[prevN]);
- distance[n][m] = lmrcImageDistanceCalc0(&out, &cor,
- &cluster[index[n]], &cluster[index[m]],
- averagednum[index[n]], averagednum[index[m]], linfo);
- }
-
- /* Evaluate Distance betweeen cluster[index[n]] and cluster[index[m]] */
- if(distance[n][m]<=min) {
- min = distance[n][m];
- minn = n;
- minm = m;
- if(flagSkip) {
- flagNoValue = 1;
+ /* Check whether correlation between index[n] and index[m] must be calculated. */
+ if( clusternum != N /* At the first step (N==clusternum), we cannot skip */
+ && index[n] != index[prevM]
+ && index[m] != index[prevM]
+ && min <= distance[n][m]) {
+ flagSkip = 1;
} else {
- flagNoValue = 0;
- mrcImageFree(&minCor, "in lmrcImageClusterAnalysis");
- mrcImageFree(&minOut, "in lmrcImageClusterAnalysis");
- minCor = cor;
- minOut = out;
- minInfo = linfo->arInitial;
+ flagSkip = 0;
}
- } else {
- if(!flagSkip) {
- mrcImageFree(&cor, "in lmrcImageClusterAnalysis");
- mrcImageFree(&out, "in lmrcImageClusterAnalysis");
+ if(linfo->flagLogIn && !flagSkip && !flagNoSkip) {
+ clusterTypeReal d = -1;
+ clusterLog->current = clusterLogGetDistance(clusterLog, n, m, clusternum - (N - linfo->previousFileNumber), &d);
+ if(d<=0) {
+ DEBUGPRINT3("Zero:: n: %d m: %d d: %g\n", n, m, d);
+ flagNoSkip = 1; /* The log file has an error log line */
+ }
+ if(0<d) {
+ distance[n][m] = d;
+ flagSkip = 1;
+ } else {
+ flagSkip = 0;
+ }
+ }
+ /* Calc distance[n][m] */
+ if(flagSkip && 0 < distance[n][m]) {
+ DEBUGPRINT4("skip: n: %d m: %d prevM: %d prevN: %d\n", n, m, prevM, prevN);
+ DEBUGPRINT4("index: n: %d m: %d prevM: %d prevN: %d\n", index[n], index[m], index[prevM], index[prevN]);
+ /* Skip because of no need of calculation */
+ } else {
+ DEBUGPRINT4("noskip: n: %d m: %d prevM: %d prevN: %d\n", n, m, prevM, prevN);
+ DEBUGPRINT4("index: n: %d m: %d prevM: %d prevN: %d\n", index[n], index[m], index[prevM], index[prevN]);
+ lmrcImageDistanceCalc0(&out, &cor,
+ &cluster[index[n]], &cluster[index[m]],
+ averagednum[index[n]], averagednum[index[m]], linfo, &distance[n][m]);
+ }
+ /* Evaluate Distance betweeen cluster[index[n]] and cluster[index[m]] */
+ if(distance[n][m]<=min) {
+ min = distance[n][m];
+ minn = n;
+ minm = m;
+ if(flagSkip) {
+ flagNoValue = 1;
+ } else {
+ flagNoValue = 0;
+ mrcImageFree(&minCor, "in lmrcImageClusterAnalysis");
+ mrcImageFree(&minOut, "in lmrcImageClusterAnalysis");
+ minCor = cor;
+ minOut = out;
+ minInfo = linfo->arInitial;
+ }
+ } else {
+ if(!flagSkip) {
+ mrcImageFree(&cor, "in lmrcImageClusterAnalysis");
+ mrcImageFree(&out, "in lmrcImageClusterAnalysis");
+ }
}
+ lmrcImageClusterAnalysisDistanceToLog(linfo->fptLog, n, m, prevN, prevM, distance[n][m]);
}
- lmrcImageClusterAnalysisDistanceToLog(linfo->fptLog, n, m, prevN, prevM, distance[n][m]);
- }
+ }
+
+ if(__eosPThread__) {
+ DEBUGPRINT4("Log: thread %d/%d at (n: %d m: %d)\n", iThread, i, n, m);
+ for(iThread=0; iThread < threadNum ; iThread++) {
+ if(pthread.status[iThread] == eosPThreadStatusRunning) {
+ eosPThreadJoin(&pthread, iThread, 0);
+ }
+ }
+ eosPThreadMutexLock(&pthread);
+ for (m=0; m<n; m++) {
+ lmrcImageClusterAnalysisDistanceToLog(linfo->fptLog, n, m, prevN, prevM, distance[n][m]);
+ }
+ eosPThreadMutexUnlock(&pthread);
+ }
} /* End: Calc Distance */
#ifdef DEBUG
averagednum
*/
if(flagNoValue) {
- distance[minn][minm] = lmrcImageDistanceCalc0(&out, &cor,
+ lmrcImageDistanceCalc0(&out, &cor,
&cluster[index[minn]], &cluster[index[minm]],
- averagednum[index[minn]], averagednum[index[minm]], linfo);
+ averagednum[index[minn]], averagednum[index[minm]], linfo, &distance[minn][minm]);
mrcImageFree(&minCor, "in lmrcImageClusterAnalysis");
mrcImageFree(&minOut, "in lmrcImageClusterAnalysis");
minCor = cor;
mrcImageFree(&in2mul,"");
}
-float
-lmrcImageDistanceCalcWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode)
+void
+lmrcImageDistanceCalcWithAutoRotation(float* distance, mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode)
{
- double distance;
+ //double distance;
switch(mode) {
case lmrcImageClusterAnalysisModeCorrelation: {
lmrcImageAutoRotationCorrelation(out, cor, in1, in2, linfo, lmode);
- distance = -linfo->max;
+ *distance = -linfo->max;
break;
}
case lmrcImageClusterAnalysisModeEuclidDistance: {
lmrcImageAutoRotationCorrelation(out, cor, in1, in2, linfo, lmode);
- distance = linfo->EuclidDistance;
+ *distance = linfo->EuclidDistance;
break;
}
case lmrcImageClusterAnalysisModeLinearCorrelation: {
lmrcImageAutoRotationCorrelation(out, cor, in1, in2, linfo, lmode);
- distance = linfo->LinearCorrelation;
+ *distance = linfo->LinearCorrelation;
break;
}
default: {
break;
}
}
- return distance;
+ //return distance;
}
-float
-lmrcImageDistanceCalc(mrcImage* in1, mrcImage* in2, int mode)
+void
+lmrcImageDistanceCalc(float* data, mrcImage* in1, mrcImage* in2, int mode)
{
- double data;
+ //double data;
switch (mode) {
case lmrcImageClusterAnalysisModeCorrelation: {
- data = -lmrcImageCorrelationinSpace(in1, in2, 0);
+ *data = lmrcImageCorrelationinSpace(in1, in2, 0);
+ *data *= (-1);
break;
}
case lmrcImageClusterAnalysisModeEuclidDistance: {
- data = lmrcImageEuclidDistanceCalc(in1, in2, 1);
+ double d;
+ lmrcImageEuclidDistanceCalc2(&d, in1, in2, 1);
+ *data = d;
break;
}
case lmrcImageClusterAnalysisModeWardMethod: {
- data = lmrcImageEuclidDistanceCalc(in1, in2, 1);
- data = SQR(data);
+ double d;
+ lmrcImageEuclidDistanceCalc2(&d, in1, in2, 1);
+ *data = SQR(d);
break;
}
case lmrcImageClusterAnalysisModeWardMethodLinearCorrelation:
case lmrcImageClusterAnalysisModeLinearCorrelation: {
- data = lmrcImageLinearCorrelation(in1, in2, 1);
- data = exp(SQR(data-1.0)/(1/log(1e4)))-1.0;
+ double d;
+ lmrcImageLinearCorrelation2(&d, in1, in2, 1);
+ *data = exp(SQR(d-1.0)/(1/log(1e4)))-1.0;
break;
}
default: {
break;
}
}
- return data;
+ //return data;
}
-float
-lmrcImageDistanceCalcByWardMethodWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode)
+void
+lmrcImageDistanceCalcByWardMethodWithAutoRotation(float* distance, mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode)
{
- double distance;
+ //double distance;
+ DEBUGPRINT2("lmrcImageDistanceCalcByWardMethodWithAutoRotation: %p %p\n", distance, linfo);
switch(mode) {
case lmrcImageClusterAnalysisModeWardMethod: {
lmrcImageAutoRotationCorrelation(out, cor, in1, in2, linfo, lmode);
- distance = SQR(linfo->EuclidDistance)*(num1*num2)/(num1+num2);
+ *distance = SQR(linfo->EuclidDistance)*(num1*num2)/(num1+num2);
break;
}
case lmrcImageClusterAnalysisModeWardMethodLinearCorrelation: {
lmrcImageAutoRotationCorrelation(out, cor, in1, in2, linfo, lmode);
- distance = (exp(SQR(linfo->LinearCorrelation-1.0)/(1/log(1e4)))-1.0)*(num1*num2)/(num1+num2);
+ *distance = (exp(SQR(linfo->LinearCorrelation-1.0)/(1/log(1e4)))-1.0)*(num1*num2)/(num1+num2);
break;
}
default: {
break;
}
}
- return distance;
+ //return distance;
}
-float
-lmrcImageDistanceCalcByWardMethod(mrcImage* in1, mrcImage* in2, int num1, int num2, int mode)
+void
+lmrcImageDistanceCalcByWardMethod(float* distance, mrcImage* in1, mrcImage* in2, int num1, int num2, int mode)
{
double data;
- double distance;
+ //double distance;
+ DEBUGPRINT3("lmrcImageDistanceCalcByWardMethod: distance %p num1 %d num2 %d\n", distance, num1, num2);
switch(mode) {
case lmrcImageClusterAnalysisModeWardMethod: {
- data = lmrcImageEuclidDistanceCalc(in1, in2, 0);
- distance = (data)*((num1*num2)/(num1+num2));
+ lmrcImageEuclidDistanceCalc2(&data, in1, in2, 0);
+ *distance = (data)*((num1*num2)/(num1+num2));
break;
}
case lmrcImageClusterAnalysisModeWardMethodLinearCorrelation: {
- data = lmrcImageLinearCorrelation(in1, in2, 0);
+ lmrcImageLinearCorrelation2(&data, in1, in2, 0);
if(0<data) {
- distance = (200.0/(data+1.0)-100)*(num1*num2)/(num1+num2);
+ *distance = (200.0/(data+1.0)-100)*(num1*num2)/(num1+num2);
} else {
- distance = (200.0/(data+1.0)-100)*(num1*num2)/(num1+num2);
+ *distance = (200.0/(data+1.0)-100)*(num1*num2)/(num1+num2);
}
break;
}
break;
}
}
- return data;
+ //return data;
}
float lmrcImageClusterAnalysisByIteration(int* group, mrcImage* in, int clusternum, int N, int mode)
for (n=0; n<N; n++){
distancemin = 1e+16;
for (m=0; m<clusternum; m++){
- distance = lmrcImageDistanceCalc(&in[n], ¢er[m], mode);
+ lmrcImageDistanceCalc(&distance, &in[n], ¢er[m], mode);
if (distance < distancemin){
distancemin = distance;
group[n] = m;
mrcImageFree(&tmpimage, "");
clustervar=0;
for (n=0; n<clusternum; n++){
- clustervar += lmrcImageDistanceCalc(¢erofclusters, ¢er[n], 2);
+ float data;
+ lmrcImageDistanceCalc(&data, ¢erofclusters, ¢er[n], 2);
+ clustervar += data;
}
clustervar /= clusternum;
if (mode != 2){
distancesum = 0;
for (n=0; n<N; n++){
- distancesum += lmrcImageDistanceCalc(&in[n], ¢er[group[n]], 2);
+ float data;
+ lmrcImageDistanceCalc(&data, &in[n], ¢er[group[n]], 2);
+ distancesum += data;
}
}
distancesum/=N;
void lmrcImageClusterAnalysis(int* group, mrcImage* in, int finalclusternum, int N, lmrcImageClusterAnalysisInfo* linfo);
void lmrcImageClusterMerge(mrcImage* in1, mrcImage* in2, int* index, int* averagednum, int m, int n, int* N);
-float lmrcImageDistanceCalc(mrcImage* in1, mrcImage* in2, int mode);
-float lmrcImageDistanceCalcByWardMethod(mrcImage* in1, mrcImage* in2, int num1, int num2, int mode);
+void lmrcImageDistanceCalc(float* dis, mrcImage* in1, mrcImage* in2, int mode);
+void lmrcImageDistanceCalcByWardMethod(float* dis, mrcImage* in1, mrcImage* in2, int num1, int num2, int mode);
-float lmrcImageDistanceCalcWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
-float lmrcImageDistanceCalcByWardMethodWithAutoRotation(mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
+void lmrcImageDistanceCalcWithAutoRotation(float* dis, mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
+void lmrcImageDistanceCalcByWardMethodWithAutoRotation(float* dis, mrcImage* out, mrcImage* cor, mrcImage* in1, mrcImage* in2, int num1, int num2, lmrcImageAutoRotationCorrelationInfo* linfo, int lmode, int mode);
float lmrcImageClusterAnalysisByIteration(int* group, mrcImage* in, int clusternum, int N, int mode);
#%Z%
*/
static char __sccs_id[] = "%Z%lmrcImageCommonLine ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "./lmrcImageSinogram.h"
#include "./lmrcImageCommonLine.h"
static char __sccs_id[] = "%Z%lmrcImageConnection ver%I%; Date:%D% %Z%";
#include "lmrcImageConnection.h"
-#define DEBUG
+#undef DEBUG
void
lmrcImageConnection( mrcImage* out,
double
lmrcImageEuclidDistanceCalc(mrcImage* in1, mrcImage* in2, int mode)
{
+ double r;
+ lmrcImageEuclidDistanceCalc2(&r, in1, in2, mode);
+ return r;
+}
+
+void
+lmrcImageEuclidDistanceCalc2(double* r, mrcImage* in1, mrcImage* in2, int mode)
+{
double data1, data2;
double data;
mrcImageParaTypeReal x, y, z;
||in1->HeaderN.y!=in2->HeaderN.y
||in1->HeaderN.z!=in2->HeaderN.z) {
fprintf(stderr, "Attention in lmrcImageEuclidDistanceCalc\n");
- fprintf(stderr, "size is different (%f, %f, %f) != (%f, %f, %f)\n",
+ fprintf(stderr, "size is different (%d, %d, %d) != (%d, %d, %d)\n",
in1->HeaderN.x, in1->HeaderN.y, in1->HeaderN.z,
in2->HeaderN.x, in2->HeaderN.y, in2->HeaderN.z);
}
data /= count;
}
- return data;
+ *r = data;
+ //return data;
}
/*
{
int i;
int ntheta;
+ int itheta;
float dtheta;
float theta;
float minTheta;
mrcImage inImage;
double data;
mrcImageParaTypeReal x, y, z;
+ double distance;
DEBUGPRINT("Start lmrcImageAutoRotationCorrelation---\n");
/*
lmrcImageFFT(&inImage, in, 0);
inFFT = *in;
} else {
- fprintf(stderr, "Not supported mode: %ld\n", in->HeaderMode);
+ fprintf(stderr, "Not supported mode: %d\n", in->HeaderMode);
}
/*
case lmrcImageAutoRotationCorrelationMethodRotationAndCorrelationSSDA: {
current = -1e30; linfo->max = maxOld = -1e30; /* Initial */
for(i=0; i<linfo->iter; i++) {
- for(theta=minTheta; theta<maxTheta; theta+=dtheta) {
+ //for(theta=minTheta; theta<maxTheta; theta+=dtheta) {
+ for(itheta=0; itheta<ntheta; itheta++) {
+ theta = minTheta + itheta*dtheta;
/* Rotate ref to rotproj */
//fprintf(stderr, "nRot: %d theta: %f %f<->%f delta %f\n", ntheta, theta*DEGREE, maxTheta*DEGREE, minTheta*DEGREE, dtheta*DEGREE);
DEBUGPRINT5("nRot: %d theta: %f %f<->%f delta %f\n", ntheta, theta, maxTheta, minTheta, dtheta);
lmrcImageRotation2DPeriodicBoundary(out, &rotproj, -linfo->maxTheta, mrcPixelHowCubicConv);
//lmrcImageRotation2DPeriodicBoundary(&rotproj, &inImage, -linfo->maxTheta, mrcPixelHowCubicConv);
//lmrcImageShift(&out, &rotproj, currentp, mrcPixelHowCubicConv);
- linfo->EuclidDistance = lmrcImageEuclidDistanceCalc(out, ref, 1);
- linfo->LinearCorrelation = lmrcImageLinearCorrelation (out, ref, 1);
+ lmrcImageEuclidDistanceCalc2(&distance, out, ref, 1);
+ linfo->EuclidDistance = distance;
+ lmrcImageLinearCorrelation2 (&distance,out, ref, 1);
+ linfo->LinearCorrelation = distance;
DEBUGPRINT1("EuclidDistance: %f \n", linfo->EuclidDistance);
DEBUGPRINT1("LinearCorrelation: %f \n", linfo->LinearCorrelation);
} else if(IsFT(in, "IsFT", 0)) {
mrcImageFree(&inImage, 0);
} else {
- fprintf(stderr, "Not supported mode: %ld\n", in->HeaderMode);
+ fprintf(stderr, "Not supported mode: %d\n", in->HeaderMode);
}
}
inFFT = *in;
refFFT = *ref;
} else {
- fprintf(stderr, "Nut supported Mode (in %ld, ref %ld)\n", in->HeaderMode, ref->HeaderMode);
+ fprintf(stderr, "Nut supported Mode (in %d, ref %d)\n", in->HeaderMode, ref->HeaderMode);
exit(EXIT_FAILURE);
}
break;
}
default: {
- fprintf(stderr, "Not supported mode: %ld in lmrcImageCorrelation\n", info->mode);
+ fprintf(stderr, "Not supported mode: %d in lmrcImageCorrelation\n", info->mode);
exit(EXIT_FAILURE);
break;
}
double
lmrcImageLinearCorrelation(mrcImage* in1, mrcImage* in2, long mode)
{
+ double r;
+
+ lmrcImageLinearCorrelation2(&r, in1, in2, mode);
+ return r;
+}
+
+void
+lmrcImageLinearCorrelation2(double* r, mrcImage* in1, mrcImage* in2, long mode)
+{
mrcImageParaTypeReal x, y, z;
double data1, data2;
double sum1, sum2;
double avg1, avg2;
double xy, xx, yy;
double count;
- double r;
+ //double r;
sum1 = sum2 = count = 0.0;
for(x=0; x<in1->HeaderN.x; x++) {
}
}
- r = xy/sqrt(xx)/sqrt(yy);
+ *r = xy/sqrt(xx)/sqrt(yy);
- return r;
+ //return r;
}
-void
+void
lmrcImageCorrelation(mrcImage* out, mrcImage* in, mrcImage* ref, long mode)
{
mrcImage inFFT;
if(!( in->HeaderN.x==ref->HeaderN.x
&&in->HeaderN.y==ref->HeaderN.y
&&in->HeaderN.z==ref->HeaderN.z)) {
- fprintf(stderr, "Different size between in(%ld,%ld,%ld) and ref(%ld,%ld,%ld)\n"
+ fprintf(stderr, "Different size between in(%d,%d,%d) and ref(%d,%d,%d)\n"
,in->HeaderN.x, ref->HeaderN.x
,in->HeaderN.y, ref->HeaderN.y
,in->HeaderN.z, ref->HeaderN.z);
inFFT = *in;
refFFT = *ref;
} else {
- fprintf(stderr, "Nut supported Mode (in %ld, ref %ld)\n", in->HeaderMode, ref->HeaderMode);
+ fprintf(stderr, "Nut supported Mode (in %d, ref %d)\n", in->HeaderMode, ref->HeaderMode);
exit(EXIT_FAILURE);
}
switch(mode&0x0000000f) {
mrcImage out;
mrcImage fit;
mrcImage cor;
- long i, inext;
- long i1, i2, i3;
+ int i, inext;
+ int i1, i2, i3;
mrcImageParaTypeReal x, y;
char s[5];
double correlationMax=-1e30;
mrcPixelDataSet(&out, 5, 0, i, y, mrcPixelRePart);
mrcPixelDataSet(&out, 6, 0, i, correlation, mrcPixelRePart);
- fprintf(info->fptOutASC, "%ld: ", i);
+ fprintf(info->fptOutASC, "%d: ", i);
strncpy(s, ref->Tailer[i].Cont.EulerAngleMode, 4);
LOGPRINT12(info->fptOutASC, "", "", \
"%4s %15.6f %15.6f %15.6f : %15.6f theta %15.6f at %15.6f %15.6f onMap %15.6f %15.6f %s Cor %15.6f\n",
int flagXshiftOnly;
int flagNoShift;
+/* Control */
+
/* Output */
float max; //
float maxTheta; //
extern void lmrcImageAutoRotationCorrelation(mrcImage* out, mrcImage* cor, mrcImage* in, mrcImage* ref, lmrcImageAutoRotationCorrelationInfo* linfo, int mode);
extern void lmrcImageAutoRotationCorrelationRotationalCrossCorrelationFunction(mrcImage* out, mrcImage* cor, mrcImage* in, mrcImage* ref, lmrcImageAutoRotationCorrelationInfo* linfo, int mode);
extern double lmrcImageLinearCorrelation(mrcImage* in1, mrcImage* in2, long mode);
+extern void lmrcImageLinearCorrelation2(double* cor, mrcImage* in1, mrcImage* in2, long mode);
extern void lmrcImageCorrelation(mrcImage* cor, mrcImage* in, mrcImage* ref, long mode);
extern double lmrcImageEuclidDistanceCalc(mrcImage* in1, mrcImage* in2, int mode);
+extern void lmrcImageEuclidDistanceCalc2(double* cor, mrcImage* in1, mrcImage* in2, int mode);
extern void lmrcImageCorrelationRefinement(mrcImage* cor, mrcImage* shift, mrcImage* in, mrcImage* ref, lmrcImageCorrelationRefinementInfo* info, long mode);
#include <stdlib.h>
#include <math.h>
#include <string.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "../inc/mrcImage.h"
#include "./lmrcImageDeconvolution.h"
#include <string.h>
#include <math.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "mrcImage.h"
#%Z%
*/
static char __sccs_id[] = "%Z%lmrcImageDensityNormalizationByImage ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "nr2.h"
static char __sccs_id[] = "%Z%lmrcImageFFT ver%I%; Date:%D% %Z%";
#undef DEBUG
-//#define DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "eosPThread.h"
*/
/* $Log$ */
-//#define DEBUG
#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
*/
static char __sccs_id[] = "%Z%lmrcImageHoughTransform ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "./lmrcImageHoughTransform.h"
*/
/* $Log$ */
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "./lmrcImageLabeling.h"
#include <stdlib.h>
#include <math.h>
#include "../inc/mrcImage.h"
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include <string.h>
#include <math.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "../inc/mrcImage.h"
*/
static char __sccs_id[] = "%Z%lmrcImageRadialDistribution ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "mrcImage.h"
#include "lmrcImageRadialDistribution.h"
DEBUGPRINT("FFT End\n")
mrcPixelDataGet(&counterFFT, 0, 0, 0, &F000, mrcPixelMag, mrcPixelHowNearest);
if(0==F000) fprintf(stderr, "F000 = %f\n", F000);
-#define DEBUG
+#undef DEBUG
#ifdef DEBUG
DEBUGPRINT1("F000:%g\n", F000);
mrcPixelDataGet(counter, 0, 0, 0, &re, mrcPixelMag, mrcPixelHowNearest);
#include <math.h>
-#define DEBUG
+#undef DEBUG
#include "../inc/mrcImage.h"
#include "genUtil.h"
#include "mrcImage.h"
*/
static char __sccs_id[] = "%Z%lmrcImageSinogram ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "./lmrcImageSinogram.h"
#include "./lmrcImageBinarization.h"
#
*/
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "./lmrcImageSinogram.h"
#include "./lmrcImageBinarization.h"
static char __sccs_id[] = "%Z%lmrcImageSolventFlattening ver%I%; Date:%D% %Z%";
#include "../inc/mrcImage.h"
#include "lmrcImageSolventFlattening.h"
-#define DEBUG
+#undef DEBUG
+#include "genUtil.h"
void
lmrcImageSolventFlattening( mrcImage* out,
#include <math.h>
#define GLOBAL_DECLARATION
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "mrcImage.h"
#include <math.h>
#define GLOBAL_DECLARATION
-#define DEBUG
+#undef DEBUG
#undef DEBUG2
#include "genUtil.h"
#include "../inc/mrcImage.h"
static char __sccs_id[] = "%Z%lmrcImageWindowing ver%I%; Date:%D% %Z%";
#include <stdlib.h>
#include <math.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "../inc/mrcImage.h"
static char __sccs_id[] = "@(#)lmrcImagesTTest ver1.1; Date:97/01/23 @(#)";
#include <stdlib.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "nr2.h"
static char __sccs_id[] = "@(#)lmrcImagesTTest ver1.1; Date:97/01/23 @(#)";
#include <stdlib.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "nr2.h"
#include "../inc/mrcImage.h"
#include "lmrcSinogramFET.h"
-#define DEBUG
+#undef DEBUG
#include "lmrcImageBinarization.h"
#include "lmrcImagePosterization.h"
#include <stdlib.h>
#include <string.h>
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "String.h"
break;
}
case mrcPixelHowLinear: {
- static mrcImageParaTypeInteger ix0, iy0, iz0;
- static mrcImageParaTypeInteger ix1, iy1, iz1;
+ mrcImageParaTypeInteger ix0, iy0, iz0;
+ mrcImageParaTypeInteger ix1, iy1, iz1;
ix0 = floor(x);
iy0 = floor(y);
iz0 = floor(z);
*/
static char __sccs_id[] = "%Z%mrcImageGetPixels ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "Memory.h"
#include "eosCuda.h"
#%Z%
*/
static char __sccs_id[] = "%Z%mrcImageWrite2 ver%I%; Date:%D% %Z%";
-#define DEBUG
+#undef DEBUG
#include "genUtil.h"
#include "../inc/mrcImage.h"
WORLDNAME=Tools
WORLDNAME=Tools
WORLDNAME=Tools
+WORLDNAME=Tools
+++ /dev/null
-include ../Config/Define.inc
-include Config/Define.inc
-include .Source
-
-include Config/Target.inc
--- /dev/null
+/Users/tacyas/Eos/src/Config/Template/ToolsHomeTemplate.Dir/Makefile
\ No newline at end of file
"-ARiter","-A[uto]R[otation]iter[ation]","AutoRotationIteration","Optional","1","1","AutoRotationIteration","Integer","2"
"-ARMethod","-A[uto]R[otation]Method","Method for Correlation for Auto Rotation","Optional","1","1","AutoRotationMethod","Integer","0"
"-M","-M[odeForCorrelation]","Correlation Mode for AutoRotation","Optional","1","1","correlationMode","Integer","19"
-"-pvm","-pvm","Parallel Analysis by PVM","Optional","0"
-"-pvmList","-pvmList","pvmList: Input","Optional","1","1","pvmList","inFile","NULL"
"-Log","-Log","Log: Output","Optional","1","1","Log","appendFile","stdout"
"-Log2","-Log2","Log2: Output: ClusterNode Only","Optional","1","1","Log2","appendFile","NULL"
"-LogIn","-LogIn","previousLog: Input","Optional","1","1","LogIn","inFile","NULL"
"-prevF","-prevF[ileNum]","previousLogFileNum: Input","Optional","1","1","prevFileNum","Integer","0"
+"-pthread","-pthread","pthread: Input","Optional","1","1","pthread","Integer","0"
+"-pvm","-pvm","Parallel Analysis by PVM","Optional","0"
+"-pvmList","-pvmList","pvmList: Input","Optional","1","1","pvmList","inFile","NULL"
"-c","-c[onfig]","ConfigurationFile","Optional","1","1","configFile","inFile","NULL"
"-m","-m[ode]","Mode","Optional","1","1","mode","Integer","2"
long flagcorrelationMode;
long correlationMode;
- long pvm;
-
- long flagpvmList;
- char* pvmList;
- FILE* fptpvmList;
-
long flagLog;
char* Log;
FILE* fptLog;
long flagprevFileNum;
long prevFileNum;
+ long flagpthread;
+ long pthread;
+
+ long pvm;
+
+ long flagpvmList;
+ char* pvmList;
+ FILE* fptpvmList;
+
long flagconfigFile;
char* configFile;
FILE* fptconfigFile;
}
SBREAK;
}
- SCASE("pvm") {
- if(i+0<argc) {
- info->pvm++;
+ SCASE("Log") {
+ if(i+1<argc) {
+ info->Log = stringGetNthWord(argv[i+1], 1, " ,");
+ i++;
+ info->flagLog++;
} else {
usage(argv[0]);
exit(EXIT_FAILURE);
}
SBREAK;
}
- SCASE("pvmList") {
+ SCASE("Log2") {
if(i+1<argc) {
- info->pvmList = stringGetNthWord(argv[i+1], 1, " ,");
+ info->Log2 = stringGetNthWord(argv[i+1], 1, " ,");
i++;
- info->flagpvmList++;
+ info->flagLog2++;
} else {
usage(argv[0]);
exit(EXIT_FAILURE);
}
SBREAK;
}
- SCASE("Log") {
+ SCASE("LogIn") {
if(i+1<argc) {
- info->Log = stringGetNthWord(argv[i+1], 1, " ,");
+ info->LogIn = stringGetNthWord(argv[i+1], 1, " ,");
i++;
- info->flagLog++;
+ info->flagLogIn++;
} else {
usage(argv[0]);
exit(EXIT_FAILURE);
}
SBREAK;
}
- SCASE("Log2") {
+ SCASE("prevF") {
if(i+1<argc) {
- info->Log2 = stringGetNthWord(argv[i+1], 1, " ,");
+ info->prevFileNum = stringGetNthIntegerData(argv[i+1], 1, " ,");
i++;
- info->flagLog2++;
+ info->flagprevFileNum++;
} else {
usage(argv[0]);
exit(EXIT_FAILURE);
}
SBREAK;
}
- SCASE("LogIn") {
+ SCASE("pthread") {
if(i+1<argc) {
- info->LogIn = stringGetNthWord(argv[i+1], 1, " ,");
+ info->pthread = stringGetNthIntegerData(argv[i+1], 1, " ,");
i++;
- info->flagLogIn++;
+ info->flagpthread++;
} else {
usage(argv[0]);
exit(EXIT_FAILURE);
}
SBREAK;
}
- SCASE("prevF") {
+ SCASE("pvm") {
+ if(i+0<argc) {
+ info->pvm++;
+ } else {
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ SBREAK;
+ }
+ SCASE("pvmList") {
if(i+1<argc) {
- info->prevFileNum = stringGetNthIntegerData(argv[i+1], 1, " ,");
+ info->pvmList = stringGetNthWord(argv[i+1], 1, " ,");
i++;
- info->flagprevFileNum++;
+ info->flagpvmList++;
} else {
usage(argv[0]);
exit(EXIT_FAILURE);
info->AutoRotationIteration = 2; info->flagAutoRotationIteration = 0;
info->AutoRotationMethod = 0; info->flagAutoRotationMethod = 0;
info->correlationMode = 19; info->flagcorrelationMode = 0;
- info->pvm=0;
- info->fptpvmList = NULL; info->flagpvmList = 0;
info->fptLog = stdout; info->flagLog = 0;
info->fptLog2 = NULL; info->flagLog2 = 0;
info->fptLogIn = NULL; info->flagLogIn = 0;
info->prevFileNum = 0; info->flagprevFileNum = 0;
+ info->pthread = 0; info->flagpthread = 0;
+ info->pvm=0;
+ info->fptpvmList = NULL; info->flagpvmList = 0;
info->fptconfigFile = NULL; info->flagconfigFile = 0;
info->mode = 2; info->flagmode = 0;
}
if(info->flagcorrelationMode) {
}
- if(info->flagpvmList) {
- info->fptpvmList = fileOpen(info->pvmList, "r");
- }
-
if(info->flagLog) {
info->fptLog = fopen(info->Log, "a+");
}
if(info->flagprevFileNum) {
}
+ if(info->flagpthread) {
+ }
+
+ if(info->flagpvmList) {
+ info->fptpvmList = fileOpen(info->pvmList, "r");
+ }
+
if(info->flagconfigFile) {
info->fptconfigFile = fileOpen(info->configFile, "r");
}
#define GLOBAL_DECLARATION
#include "../inc/config.h"
-#undef DEBUG
+#define DEBUG
#include "genUtil.h"
+#include "eosPThread.h"
#include "mrcImage.h"
#include "nr2.h"
#include "mrcRefUtil.h"
linfo->flagLog2 = info.flagLog2;
linfo->fptLog2 = info.fptLog2;
+ if(info.pthread>0) {
+ __eosPThread__ = 1;
+ __eosPThreadNum__ = info.pthread;
+ DEBUGPRINT2("pthread: %d %d\n", __eosPThread__, __eosPThreadNum__);
+ }
DEBUGPRINT3("AutoRotatio Initial Param: %d %d %d\n", linfo->arInitial.nRot, linfo->arInitial.Method, linfo->arInitial.iter);
}
[-A[uto]R[otation]iter[ation]AutoRotationIteration(2 ).as(Integer ) ] :Optional :AutoRotationIteration
[-A[uto]R[otation]MethodAutoRotationMethod (0 ).as(Integer ) ] :Optional :Method for Correlation for Auto Rotation
[-M[odeForCorrelation]correlationMode (19 ).as(Integer ) ] :Optional :Correlation Mode for AutoRotation
- [-pvm ] :Optional :Parallel Analysis by PVM
- [-pvmList pvmList (NULL ).as(inFile ) ] :Optional :pvmList: Input
[-Log Log (stdout ).as(appendFile ) ] :Optional :Log: Output
[-Log2 Log2 (NULL ).as(appendFile ) ] :Optional :Log2: Output: ClusterNode Only
[-LogIn LogIn (NULL ).as(inFile ) ] :Optional :previousLog: Input
[-prevF[ileNum] prevFileNum (0 ).as(Integer ) ] :Optional :previousLogFileNum: Input
+ [-pthread pthread (0 ).as(Integer ) ] :Optional :pthread: Input
+ [-pvm ] :Optional :Parallel Analysis by PVM
+ [-pvmList pvmList (NULL ).as(inFile ) ] :Optional :pvmList: Input
[-c[onfig] configFile (NULL ).as(inFile ) ] :Optional :ConfigurationFile
[-m[ode] mode (2 ).as(Integer ) ] :Optional :Mode
----- Additional Usage -----
-i 1 0 1 0 0 -1x1+1+13.500000 0 0 2 0 0 'AutoRotationIteration' 'AutoRotationIteration' ARiter
-i 1 0 1 0 0 -1x1+1+15.000000 0 0 0 0 0 'AutoRotationMethod' 'Method for Correlation for Auto Rotation' ARMethod
-i 1 0 1 0 0 -1x1+1+16.500000 0 0 19 0 0 'correlationMode' 'Correlation Mode for AutoRotation' M
- -t 1 0 1 0 0 6x1+1+18 'pvm' 'Parallel Analysis by PVM' pvm
- -I 1 0 1 0 0 1 -1x1+1+19.500000 ' ' 'pvmList' 'pvmList: Input' pvmList
- -I 1 0 1 0 0 1 -1x1+1+21.000000 ' ' 'Log' 'Log: Output' Log
- -I 1 0 1 0 0 1 -1x1+1+22.500000 ' ' 'Log2' 'Log2: Output: ClusterNode Only' Log2
- -I 1 0 1 0 0 1 -1x1+1+24.000000 ' ' 'LogIn' 'previousLog: Input' LogIn
- -i 1 0 1 0 0 -1x1+1+25.500000 0 0 0 0 0 'prevFileNum' 'previousLogFileNum: Input' prevF
- -I 1 0 1 0 0 1 -1x1+1+27.000000 ' ' 'configFile' 'ConfigurationFile' c
- -i 1 0 1 0 0 -1x1+1+28.500000 0 0 2 0 0 'mode' 'Mode' m
+ -I 1 0 1 0 0 1 -1x1+1+18.000000 ' ' 'Log' 'Log: Output' Log
+ -I 1 0 1 0 0 1 -1x1+1+19.500000 ' ' 'Log2' 'Log2: Output: ClusterNode Only' Log2
+ -I 1 0 1 0 0 1 -1x1+1+21.000000 ' ' 'LogIn' 'previousLog: Input' LogIn
+ -i 1 0 1 0 0 -1x1+1+22.500000 0 0 0 0 0 'prevFileNum' 'previousLogFileNum: Input' prevF
+ -i 1 0 1 0 0 -1x1+1+24.000000 0 0 0 0 0 'pthread' 'pthread: Input' pthread
+ -t 1 0 1 0 0 6x1+1+25 'pvm' 'Parallel Analysis by PVM' pvm
+ -I 1 0 1 0 0 1 -1x1+1+27.000000 ' ' 'pvmList' 'pvmList: Input' pvmList
+ -I 1 0 1 0 0 1 -1x1+1+28.500000 ' ' 'configFile' 'ConfigurationFile' c
+ -i 1 0 1 0 0 -1x1+1+30.000000 0 0 2 0 0 'mode' 'Mode' m
-E
-E
-E
include ../../../../Config/Define.inc
include ../../../../../Config/Define.inc
+AR=24
+PTHREAD=4
+
all: help exec
help:
exec:
@echo "----- Execution Check -----"
- ../$(OSTYPE)/$(OBJECTNAME) -I data/test.roiinfo -O -N 1 -AR 12 -o data/test.cluster -ARMethod 0 -m 2 -Log data/test.distance -Log2 data/test.log2 2> data/test.err | tee data/test.log
- diff data/test.cluster data/test.cluster.org
+ time ../$(OSTYPE)/$(OBJECTNAME) -I data/test.roiinfo -O -N 1 -AR $(AR) -o data/test.cluster -ARMethod 0 -m 2 -Log data/test.distance -Log2 data/test.log2 2> data/test.err | tee data/test.log
+ diff data/test.distance data/test.distance.org
+ @echo "----- Calc check -----"
+
+exec-pthread:
+ @echo "----- Execution Check -----"
+ time ../$(OSTYPE)/$(OBJECTNAME) -I data/test.roiinfo -O -N 1 -AR $(AR) -o data/test.cluster-pthread -ARMethod 0 -m 2 -Log data/test.distance-pthread -Log2 data/test.log2-pthread -pthread $(PTHREAD) 2> data/test.err-pthread| tee data/test.log-pthread
+ diff data/test.distance-pthread data/test.distance.org
@echo "----- Calc check -----"
exec2:
@echo "----- Execution Check -----"
- ../$(OSTYPE)/$(OBJECTNAME) -I data/test.roiinfo -O -N 1 -AR 12 -o data/test2.cluster -ARMethod 2 -m 2 -Log data/test2.distance -Log2 data/testlog2 2> data/test2.err | tee data/test2.log
+ time ../$(OSTYPE)/$(OBJECTNAME) -I data/test.roiinfo -O -N 1 -AR $(AR) -o data/test2.cluster -ARMethod 2 -m 2 -Log data/test2.distance -Log2 data/testlog2 2> data/test2.err | tee data/test2.log
diff data/test.cluster data/test.cluster.org
@echo "----- Calc check -----"
fprintf(stderr, " [-A[uto]R[otation]iter[ation]AutoRotationIteration(2 ).as(Integer ) ] :Optional :AutoRotationIteration\n");
fprintf(stderr, " [-A[uto]R[otation]MethodAutoRotationMethod (0 ).as(Integer ) ] :Optional :Method for Correlation for Auto Rotation\n");
fprintf(stderr, " [-M[odeForCorrelation]correlationMode (19 ).as(Integer ) ] :Optional :Correlation Mode for AutoRotation\n");
- fprintf(stderr, " [-pvm ] :Optional :Parallel Analysis by PVM\n");
- fprintf(stderr, " [-pvmList pvmList (NULL ).as(inFile ) ] :Optional :pvmList: Input\n");
fprintf(stderr, " [-Log Log (stdout ).as(appendFile ) ] :Optional :Log: Output\n");
fprintf(stderr, " [-Log2 Log2 (NULL ).as(appendFile ) ] :Optional :Log2: Output: ClusterNode Only\n");
fprintf(stderr, " [-LogIn LogIn (NULL ).as(inFile ) ] :Optional :previousLog: Input\n");
fprintf(stderr, " [-prevF[ileNum] prevFileNum (0 ).as(Integer ) ] :Optional :previousLogFileNum: Input\n");
+ fprintf(stderr, " [-pthread pthread (0 ).as(Integer ) ] :Optional :pthread: Input\n");
+ fprintf(stderr, " [-pvm ] :Optional :Parallel Analysis by PVM\n");
+ fprintf(stderr, " [-pvmList pvmList (NULL ).as(inFile ) ] :Optional :pvmList: Input\n");
fprintf(stderr, " [-c[onfig] configFile (NULL ).as(inFile ) ] :Optional :ConfigurationFile\n");
fprintf(stderr, " [-m[ode] mode (2 ).as(Integer ) ] :Optional :Mode\n");
additionalUsage();