Source for org.jfree.data.xy.NormalizedMatrixSeries

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * ---------------------------
  28:  * NormalizedMatrixSeries.java
  29:  * ---------------------------
  30:  * (C) Copyright 2003-2005, by Barak Naveh and Contributors.
  31:  *
  32:  * Original Author:  Barak Naveh;;
  33:  * Contributor(s):   David Gilbert (for Object Refinery Limited);
  34:  *
  35:  * $Id: NormalizedMatrixSeries.java,v 1.3.2.1 2005/10/25 21:36:51 mungady Exp $
  36:  *
  37:  * Changes
  38:  * -------
  39:  * 10-Jul-2003 : Version 1 contributed by Barak Naveh (DG);
  40:  *
  41:  */
  42:  
  43: package org.jfree.data.xy;
  44: 
  45: 
  46: /**
  47:  * Represents a dense normalized matrix M[i,j] where each Mij item of the
  48:  * matrix has a value (default is 0). When a matrix item is observed using
  49:  * <code>getItem</code> method, it is normalized, that is, divided by the
  50:  * total sum of all items. It can be also be scaled by setting a scale factor.
  51:  *
  52:  * @author Barak Naveh
  53:  */
  54: public class NormalizedMatrixSeries extends MatrixSeries {
  55:     
  56:     /** The default scale factor. */
  57:     public static final double DEFAULT_SCALE_FACTOR = 1.0;
  58: 
  59:     /**
  60:      * A factor that multiplies each item in this series when observed using 
  61:      * getItem method.
  62:      */
  63:     private double m_scaleFactor = DEFAULT_SCALE_FACTOR;
  64: 
  65:     /** The sum of all items in this matrix */
  66:     private double m_totalSum;
  67: 
  68:     /**
  69:      * Constructor for NormalizedMatrixSeries.
  70:      *
  71:      * @param name  the series name.
  72:      * @param rows  the number of rows.
  73:      * @param columns  the number of columns.
  74:      */
  75:     public NormalizedMatrixSeries(String name, int rows, int columns) {
  76:         super(name, rows, columns);
  77: 
  78:         /*
  79:          * we assum super is always initialized to all-zero matrix, so the
  80:          * total sum should be 0 upon initialization. However, we set it to
  81:          * Double.MIN_VALUE to get the same effect and yet avoid division by 0
  82:          * upon initialization.
  83:          */
  84:         this.m_totalSum = Double.MIN_VALUE;
  85:     }
  86: 
  87:     /**
  88:      * Returns an item.
  89:      * 
  90:      * @param itemIndex  the index.
  91:      * 
  92:      * @return The value.
  93:      * 
  94:      * @see org.jfree.data.xy.MatrixSeries#getItem(int)
  95:      */
  96:     public Number getItem(int itemIndex) {
  97:         int i = getItemRow(itemIndex);
  98:         int j = getItemColumn(itemIndex);
  99: 
 100:         double mij = get(i, j) * this.m_scaleFactor;
 101:         Number n = new Double(mij / this.m_totalSum);
 102: 
 103:         return n;
 104:     }
 105: 
 106:     /**
 107:      * Sets the factor that multiplies each item in this series when observed
 108:      * using getItem mehtod.
 109:      *
 110:      * @param factor new factor to set.
 111:      *
 112:      * @see #DEFAULT_SCALE_FACTOR
 113:      */
 114:     public void setScaleFactor(double factor) {
 115:         this.m_scaleFactor = factor;
 116:     }
 117: 
 118: 
 119:     /**
 120:      * Returns the factor that multiplies each item in this series when
 121:      * observed using getItem mehtod.
 122:      *
 123:      * @return The factor
 124:      */
 125:     public double getScaleFactor() {
 126:         return this.m_scaleFactor;
 127:     }
 128: 
 129: 
 130:     /**
 131:      * @see org.jfree.data.xy.MatrixSeries#update(int, int, double)
 132:      */
 133:     public void update(int i, int j, double mij) {
 134:         this.m_totalSum -= get(i, j);
 135:         this.m_totalSum += mij;
 136: 
 137:         super.update(i, j, mij);
 138:     }
 139: 
 140:     /**
 141:      * @see org.jfree.data.xy.MatrixSeries#zeroAll()
 142:      */
 143:     public void zeroAll() {
 144:         this.m_totalSum = 0;
 145:         super.zeroAll();
 146:     }
 147: }