VTK
dox/Infovis/vtkKMeansStatistics.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003 Program:   Visualization Toolkit
00004 Module:    vtkKMeansStatistics.h
00005 
00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007 All rights reserved.
00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010 This software is distributed WITHOUT ANY WARRANTY; without even
00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012 PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 /*-------------------------------------------------------------------------
00016   Copyright 2010 Sandia Corporation.
00017   Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00018   the U.S. Government retains certain rights in this software.
00019   -------------------------------------------------------------------------*/
00101 #ifndef __vtkKMeansStatistics_h
00102 #define __vtkKMeansStatistics_h
00103 
00104 #include "vtkStatisticsAlgorithm.h"
00105 
00106 class vtkIdTypeArray;
00107 class vtkIntArray;
00108 class vtkDoubleArray;
00109 class vtkKMeansDistanceFunctor;
00110 class vtkMultiBlockDataSet;
00111 
00112 class VTK_INFOVIS_EXPORT vtkKMeansStatistics : public vtkStatisticsAlgorithm
00113 {
00114 public:
00115   vtkTypeMacro(vtkKMeansStatistics, vtkStatisticsAlgorithm);
00116   virtual void PrintSelf( ostream& os, vtkIndent indent );
00117   static vtkKMeansStatistics* New();
00118  
00120 
00121   virtual void SetDistanceFunctor( vtkKMeansDistanceFunctor* );
00122   vtkGetObjectMacro(DistanceFunctor,vtkKMeansDistanceFunctor);
00124 
00126 
00128   vtkSetMacro(DefaultNumberOfClusters, int);
00129   vtkGetMacro(DefaultNumberOfClusters, int);
00131 
00133 
00134   vtkSetStringMacro(KValuesArrayName);
00135   vtkGetStringMacro(KValuesArrayName);
00137 
00139 
00141   vtkSetMacro( MaxNumIterations, int );
00142   vtkGetMacro( MaxNumIterations, int );
00144 
00146 
00148   vtkSetMacro( Tolerance, double );
00149   vtkGetMacro( Tolerance, double );
00151 
00153 
00155   virtual void Aggregate( vtkDataObjectCollection*,
00156                           vtkMultiBlockDataSet* ) { return; };
00158 
00159   //BTX
00161 
00162   virtual bool SetParameter(
00163     const char* parameter, int index, vtkVariant value );
00164   //ETX
00166 
00167 protected:
00168   vtkKMeansStatistics();
00169   ~vtkKMeansStatistics();
00170 
00172 
00173   virtual void Learn( vtkTable*,
00174                       vtkTable*,
00175                       vtkMultiBlockDataSet* );
00177 
00179   virtual void Derive( vtkMultiBlockDataSet* );
00180 
00182 
00183   virtual void Assess( vtkTable*, 
00184                        vtkMultiBlockDataSet*, 
00185                        vtkTable* );
00187 
00189 
00190   virtual void Test( vtkTable*,
00191                      vtkMultiBlockDataSet*,
00192                      vtkTable* ) { return; };
00194 
00195   //BTX  
00197 
00198   virtual void SelectAssessFunctor( vtkTable* inData, 
00199                                     vtkDataObject* inMeta,
00200                                     vtkStringArray* rowNames,
00201                                     AssessFunctor*& dfunc );
00202   //ETX  
00204 
00205 
00208   virtual void UpdateClusterCenters( vtkTable* newClusterElements, 
00209                                      vtkTable* curClusterElements, 
00210                                      vtkIdTypeArray* numMembershipChanges,
00211                                      vtkIdTypeArray* numElementsInCluster, 
00212                                      vtkDoubleArray* error,
00213                                      vtkIdTypeArray* startRunID, 
00214                                      vtkIdTypeArray* endRunID, 
00215                                      vtkIntArray *computeRun );
00217 
00221   virtual vtkIdType GetTotalNumberOfObservations( vtkIdType numObservations );
00222 
00224 
00228   int InitializeDataAndClusterCenters(vtkTable* inParameters,
00229                                       vtkTable* inData,
00230                                       vtkTable*  dataElements,
00231                                       vtkIdTypeArray*  numberOfClusters,
00232                                       vtkTable*  curClusterElements,
00233                                       vtkTable*  newClusterElements,
00234                                       vtkIdTypeArray*  startRunID,
00235                                       vtkIdTypeArray*  endRunID);
00237 
00239 
00242   virtual void CreateInitialClusterCenters(vtkIdType numToAllocate, 
00243                                            vtkIdTypeArray* numberOfClusters, 
00244                                            vtkTable* inData, 
00245                                            vtkTable* curClusterElements, 
00246                                            vtkTable* newClusterElements);
00248 
00249 
00252   int DefaultNumberOfClusters;
00256   char* KValuesArrayName;
00259   int MaxNumIterations;
00261   double Tolerance;
00264   vtkKMeansDistanceFunctor* DistanceFunctor;
00265   
00266 private:
00267   vtkKMeansStatistics( const vtkKMeansStatistics& ); // Not implemented
00268   void operator=( const vtkKMeansStatistics& );  // Not implemented
00269 };
00270 
00271 #endif