VTK
|
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