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 "vtkFiltersStatisticsModule.h" // For export macro 00105 #include "vtkStatisticsAlgorithm.h" 00106 00107 class vtkIdTypeArray; 00108 class vtkIntArray; 00109 class vtkDoubleArray; 00110 class vtkKMeansDistanceFunctor; 00111 class vtkMultiBlockDataSet; 00112 00113 class VTKFILTERSSTATISTICS_EXPORT vtkKMeansStatistics : public vtkStatisticsAlgorithm 00114 { 00115 public: 00116 vtkTypeMacro(vtkKMeansStatistics, vtkStatisticsAlgorithm); 00117 virtual void PrintSelf( ostream& os, vtkIndent indent ); 00118 static vtkKMeansStatistics* New(); 00119 00121 00122 virtual void SetDistanceFunctor( vtkKMeansDistanceFunctor* ); 00123 vtkGetObjectMacro(DistanceFunctor,vtkKMeansDistanceFunctor); 00125 00127 00129 vtkSetMacro(DefaultNumberOfClusters, int); 00130 vtkGetMacro(DefaultNumberOfClusters, int); 00132 00134 00135 vtkSetStringMacro(KValuesArrayName); 00136 vtkGetStringMacro(KValuesArrayName); 00138 00140 00142 vtkSetMacro( MaxNumIterations, int ); 00143 vtkGetMacro( MaxNumIterations, int ); 00145 00147 00149 vtkSetMacro( Tolerance, double ); 00150 vtkGetMacro( Tolerance, double ); 00152 00154 00156 virtual void Aggregate( vtkDataObjectCollection*, 00157 vtkMultiBlockDataSet* ) { return; }; 00159 00160 //BTX 00162 00163 virtual bool SetParameter( 00164 const char* parameter, int index, vtkVariant value ); 00165 //ETX 00167 00168 protected: 00169 vtkKMeansStatistics(); 00170 ~vtkKMeansStatistics(); 00171 00173 00174 virtual void Learn( vtkTable*, 00175 vtkTable*, 00176 vtkMultiBlockDataSet* ); 00178 00180 virtual void Derive( vtkMultiBlockDataSet* ); 00181 00183 00184 virtual void Assess( vtkTable*, 00185 vtkMultiBlockDataSet*, 00186 vtkTable* ); 00188 00190 00191 virtual void Test( vtkTable*, 00192 vtkMultiBlockDataSet*, 00193 vtkTable* ) { return; }; 00195 00196 //BTX 00198 00199 virtual void SelectAssessFunctor( vtkTable* inData, 00200 vtkDataObject* inMeta, 00201 vtkStringArray* rowNames, 00202 AssessFunctor*& dfunc ); 00203 //ETX 00205 00206 00209 virtual void UpdateClusterCenters( vtkTable* newClusterElements, 00210 vtkTable* curClusterElements, 00211 vtkIdTypeArray* numMembershipChanges, 00212 vtkIdTypeArray* numElementsInCluster, 00213 vtkDoubleArray* error, 00214 vtkIdTypeArray* startRunID, 00215 vtkIdTypeArray* endRunID, 00216 vtkIntArray *computeRun ); 00218 00222 virtual vtkIdType GetTotalNumberOfObservations( vtkIdType numObservations ); 00223 00225 00229 int InitializeDataAndClusterCenters(vtkTable* inParameters, 00230 vtkTable* inData, 00231 vtkTable* dataElements, 00232 vtkIdTypeArray* numberOfClusters, 00233 vtkTable* curClusterElements, 00234 vtkTable* newClusterElements, 00235 vtkIdTypeArray* startRunID, 00236 vtkIdTypeArray* endRunID); 00238 00240 00243 virtual void CreateInitialClusterCenters(vtkIdType numToAllocate, 00244 vtkIdTypeArray* numberOfClusters, 00245 vtkTable* inData, 00246 vtkTable* curClusterElements, 00247 vtkTable* newClusterElements); 00249 00250 00253 int DefaultNumberOfClusters; 00257 char* KValuesArrayName; 00260 int MaxNumIterations; 00262 double Tolerance; 00265 vtkKMeansDistanceFunctor* DistanceFunctor; 00266 00267 private: 00268 vtkKMeansStatistics( const vtkKMeansStatistics& ); // Not implemented 00269 void operator=( const vtkKMeansStatistics& ); // Not implemented 00270 }; 00271 00272 #endif