Spaces:
No application file
No application file
/******************************************************************************/ | |
/* The C Clustering Library. | |
* Copyright (C) 2002 Michiel Jan Laurens de Hoon. | |
* | |
* This library was written at the Laboratory of DNA Information Analysis, | |
* Human Genome Center, Institute of Medical Science, University of Tokyo, | |
* 4-6-1 Shirokanedai, Minato-ku, Tokyo 108-8639, Japan. | |
* Contact: michiel.dehoon 'AT' riken.jp | |
* | |
* Permission to use, copy, modify, and distribute this software and its | |
* documentation with or without modifications and for any purpose and | |
* without fee is hereby granted, provided that any copyright notices | |
* appear in all copies and that both those copyright notices and this | |
* permission notice appear in supporting documentation, and that the | |
* names of the contributors or copyright holders not be used in | |
* advertising or publicity pertaining to distribution of the software | |
* without specific prior permission. | |
* | |
* THE CONTRIBUTORS AND COPYRIGHT HOLDERS OF THIS SOFTWARE DISCLAIM ALL | |
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED | |
* WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE | |
* CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT | |
* OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS | |
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE | |
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE | |
* OR PERFORMANCE OF THIS SOFTWARE. | |
* | |
*/ | |
/* Chapter 2 */ | |
double clusterdistance(int nrows, int ncolumns, double** data, int** mask, | |
double weight[], int n1, int n2, int index1[], int index2[], char dist, | |
char method, int transpose); | |
void distancematrix(int ngenes, int ndata, double** data, int** mask, | |
double* weight, char dist, int transpose, double** distances); | |
/* Chapter 3 */ | |
int getclustercentroids(int nclusters, int nrows, int ncolumns, | |
double** data, int** mask, int clusterid[], double** cdata, int** cmask, | |
int transpose, char method); | |
void getclustermedoids(int nclusters, int nelements, double** distance, | |
int clusterid[], int centroids[], double errors[]); | |
void kcluster(int nclusters, int ngenes, int ndata, double** data, | |
int** mask, double weight[], int transpose, int npass, char method, char dist, | |
int clusterid[], double* error, int* ifound); | |
void kmedoids(int nclusters, int nelements, double** distance, | |
int npass, int clusterid[], double* error, int* ifound); | |
/* Chapter 4 */ | |
typedef struct {int left; int right; double distance;} Node; | |
/* | |
* A Node struct describes a single node in a tree created by hierarchical | |
* clustering. The tree can be represented by an array of n Node structs, | |
* where n is the number of elements minus one. The integers left and right | |
* in each Node struct refer to the two elements or subnodes that are joined | |
* in this node. The original elements are numbered 0..nelements-1, and the | |
* nodes -1..-(nelements-1). For each node, distance contains the distance | |
* between the two subnodes that were joined. | |
*/ | |
Node* treecluster(int nrows, int ncolumns, double** data, int** mask, | |
double weight[], int transpose, char dist, char method, double** distmatrix); | |
int sorttree(const int nnodes, Node* tree, const double order[], int indices[]); | |
int cuttree(int nelements, const Node* tree, int nclusters, int clusterid[]); | |
/* Chapter 5 */ | |
void somcluster(int nrows, int ncolumns, double** data, int** mask, | |
const double weight[], int transpose, int nxnodes, int nynodes, | |
double inittau, int niter, char dist, double*** celldata, | |
int clusterid[][2]); | |
/* Chapter 6 */ | |
int pca(int m, int n, double** u, double** v, double* w); | |
/* Utility routines, currently undocumented */ | |
void sort(int n, const double data[], int index[]); | |
double mean(int n, double x[]); | |
double median (int n, double x[]); | |
double* calculate_weights(int nrows, int ncolumns, double** data, int** mask, | |
double weights[], int transpose, char dist, double cutoff, double exponent); | |