VTK
dox/Filters/Statistics/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 "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