All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgrasstools.gears.utils.clustering.GvmResult Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2007 Tom Gibara
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0

 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */
package org.jgrasstools.gears.utils.clustering;

/**
 * A snapshot of a cluster that has been produced as the result of clustering a
 * number of coordinates.
 * 
 * @author Tom Gibara
 * 
 * @param 
 *            the key type
 */

public class GvmResult {

	/**
	 * The number of points in the cluster.
	 */
	
	private int count;
	
	/**
	 * The aggregate mass of the cluster.
	 */
	
	private double mass;
	
	/**
	 * The space over which the result is defined
	 */
	
	private GvmSpace space;
	
	/**
	 * The coordinates of the cluster's centroid.
	 */
	
	private Object point;
	
	/**
	 * The variance of the cluster.
	 */
	
	private double variance;

	/**
	 * The standard deviation of the cluster.
	 */
	
	private double stdDeviation;
	
	/**
	 * The key associated with the cluster.
	 */
	
	private K key;
	//TODO consider adding key mass

	/**
	 * Creates an empty result object
	 */
	
	public GvmResult() {
	}
	
	GvmResult(GvmCluster cluster) {
		count = cluster.count;
		mass = cluster.m0;
		variance = cluster.var / mass;
		stdDeviation = -1.0;
		key = cluster.key;
		space = cluster.clusters.space;
		point = space.newCopy(cluster.m1);
		space.scale(point, 1.0 / mass);
	}

	/**
	 * The number of points in the cluster.
	 */
	
	public int getCount() {
		return count;
	}
	
	public void setCount(int count) {
		this.count = count;
	}
	
	/**
	 * The aggregate mass of the cluster.
	 */
	
	public double getMass() {
		return mass;
	}
	
	/**
	 * Sets the aggregate mass of the cluster.
	 */
	
	public void setMass(double mass) {
		this.mass = mass;
	}
	
	public GvmSpace getSpace() {
		return space;
	}
	
	public void setSpace(GvmSpace space) {
		this.space = space;
	}
	
	/**
	 * The coordinates of the cluster's centroid. The returned array should not
	 * be modified.
	 */

	public Object getPoint() {
		return point;
	}
	
	/**
	 * Sets the coordinates of the cluster's centroid. The values of the
	 * supplied point are copied.
	 */

	public void setPoint(Object point) {
		this.point = point;
	}

	/**
	 * The variance of the cluster.
	 */
	
	public double getVariance() {
		return variance;
	}
	
	/**
	 * The standard deviation of the cluster.
	 */
	
	public double getStdDeviation() {
		return stdDeviation < 0.0 ? stdDeviation = Math.sqrt(variance) : stdDeviation;
	}
	
	/**
	 * Sets the variance of the cluster.
	 */
	
	public void setVariance(double variance) {
		if (variance < 0.0) throw new IllegalArgumentException("negative variance");
		this.variance = variance;
		this.stdDeviation = -1.0;
	}
	
	/**
	 * The key associated with the cluster.
	 */
	
	public K getKey() {
		return key;
	}
	
	/**
	 * Sets the key associated with the cluster.
	 */
	
	public void setKey(K key) {
		this.key = key;
	}
	
	// object methods
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(String.format("point: %s  count: %d  variance: %3.3f  mass: %3.3f  key: %s", space.toString(point), count, variance, mass, key));
		return sb.toString();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy