lmrcImageClusterAnalysis(API)

From EosPedia
Jump to: navigation, search

DataManip/mrcImage/src/lmrcImageClusterAnalysis is API for mrcImageClusterAnalysis.

constant

struct

typedef enum lmrcImageClusterAnalysisMode {
	lmrcImageClusterAnalysisModeCorrelation    = 0,
	lmrcImageClusterAnalysisModeEuclidDistance = 1,
	lmrcImageClusterAnalysisModeWardMethod     = 2,
	lmrcImageClusterAnalysisModeWardMethodLinearCorrelation     = 3,
	lmrcImageClusterAnalysisModeLinearCorrelation     = 4
} lmrcImageClusterAnalysisMode;
#ifdef GLOBAL_DECLARATION
char* lmrcImageClusterAnalysisModeMessage[] = {
	"By Correlation",
	"By Euclid Distance",
	"By Ward Method (default) : Euclid Length (no rotation) or its square (rotation)",
	"By Ward Method using Linear Correlation : (1 - Correlation)/(1 + Correlation)",
	"By Linear Correlation :                   (1 - Correlation)/(1 + Correlation)",
	NULL
};
#endif
typedef struct lmrcImageClusterAnalysisInfo {
	lmrcImageClusterAnalysisMode mode;          /* ClusterAnalysisMode */
	int flagIteration;                          /* */
	int flagAutoRotation; 
	char** filename;                            /* filename */
	int correlationMode;                        /* correlationMode */
	mrcImage* averagedImage;
	lmrcImageAutoRotationCorrelationInfo arInitial;

	int flagPVM;

	int flagLogIn;
	FILE* fptLogIn;
	int previousFileNumber;

	int   flagLog;
	FILE* fptLog;  /* All Log */

	int   flagLog2;
	FILE* fptLog2; /* Cluster Node Log */

	/* Output */
	float** Distance;
	
} lmrcImageClusterAnalysisInfo;

API

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);
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);
float lmrcImageClusterAnalysisByIteration(int* group, mrcImage* in, int clusternum, int N, int mode);
void lmrcImageClusterAnalysisDistanceToLog(FILE* fpt, int n, int m, int prevM, int prevN, float distance);
void lmrcImageClusterAnalysisDistanceFromLog(int* skip, float* distance, FILE* fpt);