#include <Analyzer.h>
Collaboration diagram for model::Analyzer:

Public Types | |
| enum | e_PCAMode { ALL, JACOBI, HOUSEHOLDER, OTHER } |
Public Member Functions | |
| Analyzer () | |
| Constructor for the PCA. | |
| ~Analyzer () | |
| Analyzer (const Analyzer &other) | |
| Analyzer & | operator= (const Analyzer &other) |
| void | mergeData (ReferenceModel refModel, vector< ExampleModel * > lmodels, int size) |
| void | mergeData (ReferenceModel refModel, vector< ExampleModel * > lmodels) |
| void | mean () |
| Calculates the emperical mean of a matrix. | |
| void | adjust () |
| void | covariance () |
| void | findComponents () |
| void | findComponents (e_PCAMode mode) |
| void | selectComponents () |
| void | computeEnergy () |
| void | setData (Matrix data) |
| void | transformation () |
| int | getInputDimension () |
| ReferenceModel | getModel () |
| ReferenceModel | getModel (Matrix input) |
| bool | save (char *filename) |
| bool | load (char *filename) |
Private Attributes | |
| Matrix | m_ExampleData |
| Matrix | m_mean |
| Matrix | m_AdjustedData |
| Matrix | m_Covariance |
| SymmetricMatrix | m_EigenValues |
| Matrix | m_EigenVectors |
| Matrix | m_TotalEnergy |
| Matrix | m_Components |
| Matrix | m_Transformation |
| int | N |
| int | M |
| ReferenceModel | m_refModel |
Write detailed description for Analyzer here.
Definition at line 33 of file Analyzer.h.
|
|
Write brief comment for e_PCAMode here. Write detailed description for e_PCAMode here.
Definition at line 63 of file Analyzer.h. 00063 {
00064 ALL,
00065 JACOBI,
00066 HOUSEHOLDER,
00067 OTHER
00068 };
|
|
|
Constructor for the PCA. This default constructer does stuff and initiates a PCA process Definition at line 9 of file Analyzer.cpp. References log::write(). 00010 {
00011 log::write("Analyzer Init");
00012 }
|
Here is the call graph for this function:

|
|
Write brief comment for ~Analyzer here.
Definition at line 29 of file Analyzer.cpp. References m_AdjustedData, m_Covariance, m_EigenValues, m_EigenVectors, m_ExampleData, and m_mean. 00030 {
00031 m_ExampleData = 0;
00032 m_mean = 0;
00033 m_AdjustedData = 0;
00034 m_Covariance = 0;
00035 m_EigenValues = 0;
00036 m_EigenVectors = 0;
00037 }
|
|
|
Write brief comment for Analyzer here.
Definition at line 583 of file Analyzer.cpp. References M, m_AdjustedData, m_Components, m_Covariance, m_EigenValues, m_EigenVectors, m_ExampleData, m_mean, m_refModel, m_TotalEnergy, m_Transformation, and N. 00583 {
00584 m_ExampleData = other.m_ExampleData;
00585 m_mean = other.m_mean;
00586 m_AdjustedData = other.m_AdjustedData;
00587 m_Covariance = other.m_Covariance;
00588 m_EigenValues = other.m_EigenValues;
00589 m_EigenVectors = other.m_EigenVectors;
00590 m_TotalEnergy = other.m_TotalEnergy;
00591 m_Components = other.m_Components;
00592 m_Transformation = other.m_Transformation;
00593 N = other.N;
00594 M = other.M;
00595 m_refModel = other.m_refModel;
00596 }
|
|
|
Write brief comment for adjust here.
Definition at line 179 of file Analyzer.cpp. References m_AdjustedData, m_ExampleData, m_mean, N, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00180 {
00181 log::write("Analyzer adjust");
00182 Matrix h = Matrix(1,N);
00183 h = 1;
00184 /*cout << setw(10) << setprecision(5) << m_ExampleData;
00185 cout << setw(10) << setprecision(5) << m_mean;
00186 cout << setw(10) << setprecision(5) << h;
00187 cout << setw(10) << setprecision(5) << (m_mean * h);*/
00188 m_AdjustedData = m_ExampleData - (m_mean * h);
00189 log::write("Adjusted Data",m_AdjustedData);
00190 }
|
Here is the call graph for this function:

|
|
Write brief comment for computeEnergy here.
Definition at line 301 of file Analyzer.cpp. References M, m_EigenValues, m_TotalEnergy, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00302 {
00303 log::write("Analyzer compute energy");
00304 //Requires that EigenVectors and Values are sorted pair-wise. Should be done
00305 //by the matrix library i believe (this should be tested somehow)
00306
00307 m_TotalEnergy = Matrix(M,1); // [ M x 1 ]
00308 m_EigenValues = m_EigenValues.Reverse();
00309 m_TotalEnergy(1,1) = m_EigenValues(1,1);
00310 for(int i=2;i<=M;i++)
00311 {
00312 m_TotalEnergy(i,1) = m_TotalEnergy(i-1,1) + m_EigenValues(i,i);
00313 }
00314 log::write("Total Energy",m_TotalEnergy);
00315 }
|
Here is the call graph for this function:

|
|
Write brief comment for covariance here.
Definition at line 207 of file Analyzer.cpp. References m_AdjustedData, m_Covariance, N, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00208 {
00209 log::write("Analyzer covariance");
00210 m_Covariance = m_AdjustedData/(N-1) * m_AdjustedData.t();
00211 log::write("Covariance",m_Covariance);
00212 }
|
Here is the call graph for this function:

|
|
Write brief comment for findComponents here.
Definition at line 252 of file Analyzer.cpp. References HOUSEHOLDER, JACOBI, M, m_EigenValues, m_EigenVectors, OTHER, and log::write(). 00253 {
00254 log::write("Analyzer find components");
00255 DiagonalMatrix dm(M);
00256 SymmetricMatrix test;
00257 test << m_Covariance;
00258
00259 switch (mode)
00260 {
00261 case JACOBI:
00262 log::write("Calculating with Jacobi");
00263 Jacobi(test, dm, m_EigenVectors);
00264 break;
00265 case HOUSEHOLDER:
00266 log::write("Calculating with Householder");
00267 EigenValues(test, dm, m_EigenVectors);
00268 break;
00269 case OTHER:
00270 log::write("Calculating with Jacobi (matched OTHER)");
00271 Jacobi(test, dm, m_EigenVectors);
00272 break;
00273 default:
00274 log::write("Calculating with Jacobi (matched default)");
00275 Jacobi(test, dm, m_EigenVectors);
00276 break;
00277 }
00278 //Jacobi(test, dm, m_EigenVectors);
00279 //EigenValues(test, dm, m_EigenVectors);
00280 m_EigenValues << dm;
00281
00282 log::write("Eigen Vectors",m_EigenVectors);
00283 log::write("Eigen Values",m_EigenValues);
00284 }
|
Here is the call graph for this function:

|
|
Write brief comment for findComponents here.
Definition at line 229 of file Analyzer.cpp. References JACOBI. Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00230 {
00231 findComponents(JACOBI);
00232 }
|
|
|
Write brief comment for getInputDimension here.
Definition at line 450 of file Analyzer.cpp. References m_Components. Referenced by Batch::getRandomModels(). 00450 {
00451 return m_Components.Ncols();
00452 }
|
|
|
Write brief comment for getModel here.
Definition at line 421 of file Analyzer.cpp. References m_Components, m_mean, m_refModel, N, model::Model::updateVertices(), and log::write(). 00421 {
00422 log::write("Analyzer::getModel\n");
00423 Matrix h = Matrix(1,N);
00424 h = 1;
00425 Matrix in = m_Components*input+(m_mean * h);
00426 log::write("Analyzer-in",in);
00427 m_refModel.updateVertices(in);
00428 log::write("Analyzer-refModel",m_refModel);
00429 return m_refModel;
00430 }
|
Here is the call graph for this function:

|
|
Write brief comment for getModel here.
Definition at line 393 of file Analyzer.cpp. References m_Components, m_mean, m_refModel, m_Transformation, N, and model::Model::updateVertices(). Referenced by Batch::getRandomModels(). 00393 {
00394 Matrix h = Matrix(1,N);
00395 h = 1;
00396 m_refModel.updateVertices(m_Components*m_Transformation+(m_mean*h));
00397 return m_refModel;
00398 }
|
Here is the call graph for this function:

|
|
Write brief comment for load here.
Definition at line 513 of file Analyzer.cpp. References model::ReferenceModel::load(), m_Components, m_mean, m_refModel, and Tokenize(). Referenced by pcggui::LoadAnalyzer(). 00513 {
00514 m_mean.CleanUp();
00515 m_Components.CleanUp();
00516 m_refModel = model::ReferenceModel();
00517
00518 string line;
00519 vector<string> tokens;
00520 vector<string> coords;
00521
00522 ifstream loadFile(filename);
00523 if(loadFile.is_open()) {
00524 getline(loadFile,line);//Mean Dim
00525 getline(loadFile,line);//Dim
00526 tokens.clear();
00527 Tokenize(line,tokens,",");
00528 m_mean = Matrix(convertTo<int>(tokens[0]),convertTo<int>(tokens[1]));
00529
00530 for(int i=0;i<m_mean.Nrows();i++) {
00531 getline(loadFile,line);//Data
00532 tokens.clear();
00533 Tokenize(line,tokens," ");
00534 for(int n=0;n<m_mean.Ncols();n++) {
00535 m_mean(i+1,n+1) = convertTo<float>(tokens[n]);
00536 }
00537 }
00538
00539 getline(loadFile,line);//
00540 getline(loadFile,line);//Components Dim
00541 getline(loadFile,line);//Dim
00542 tokens.clear();
00543 Tokenize(line,tokens,",");
00544 m_Components = Matrix(convertTo<int>(tokens[0]),convertTo<int>(tokens[1]));
00545
00546 for(int i=0;i<m_Components.Nrows();i++) {
00547 getline(loadFile,line);//Data
00548 tokens.clear();
00549 Tokenize(line,tokens," ");
00550 for(int n=0;n<m_Components.Ncols();n++) {
00551 m_Components(i+1,n+1) = convertTo<float>(tokens[n]);
00552 }
00553 }
00554
00555 getline(loadFile,line);//
00556 m_refModel.load(&loadFile);
00557 loadFile.close();
00558 return true;
00559 } else {
00560 return false;
00561 }
00562 }
|
Here is the call graph for this function:

|
|
Calculates the emperical mean of a matrix. Write brief comment for mean here.
Definition at line 150 of file Analyzer.cpp. References M, m_ExampleData, m_mean, N, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00151 {
00152 log::write("Analyzer mean");
00153 m_mean = Matrix(M,1); //[M x 1]
00154 for(int i=1;i <= M; i++)
00155 {
00156 /* printf("Integer %d\n", i);
00157 printf("Cols: %d\n", data.Ncols());
00158 printf("Sum: %f\n", data.Row(i).Sum());*/
00159 m_mean(i,1) = 1.0/N * m_ExampleData.Row(i).Sum();
00160 }
00161 log::write("Mean",m_mean);
00162 }
|
Here is the call graph for this function:

|
||||||||||||
|
Write brief comment for mergeData here.
Definition at line 60 of file Analyzer.cpp. References mergeData(). 00060 {
00061 mergeData(refModel, lmodels,(int)lmodels.size());
00062 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Write brief comment for mergeData here.
Definition at line 88 of file Analyzer.cpp. References model::Model::getModelVertexs(), M, m_ExampleData, m_refModel, N, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), mergeData(), and Batch::TestAnalyzer(). 00089 {
00090 log::write("Analyzer merge data");
00091 log::write("Number of models",size);
00092 m_refModel = refModel;
00093 for(int i=0;i<size;i++) {
00094 Matrix mv = lmodels[i]->getModelVertexs();
00095 if(i==0) {
00096 m_ExampleData = mv;
00097 } else {
00098 m_ExampleData = m_ExampleData | mv;
00099 }
00100 }
00101 N = m_ExampleData.Ncols();
00102 M = m_ExampleData.Nrows();
00103 log::write("N",N);
00104 log::write("M",M);
00105 log::write("Example Data",m_ExampleData);
00106 }
|
Here is the call graph for this function:

|
|
Write brief comment for operator = here.
Definition at line 620 of file Analyzer.cpp. References M, m_AdjustedData, m_Components, m_Covariance, m_EigenValues, m_EigenVectors, m_ExampleData, m_mean, m_refModel, m_TotalEnergy, m_Transformation, and N. 00621 {
00622 // if same object
00623 if ( this == &other )
00624 return *this;
00625
00626 m_ExampleData = other.m_ExampleData;
00627 m_mean = other.m_mean;
00628 m_AdjustedData = other.m_AdjustedData;
00629 m_Covariance = other.m_Covariance;
00630 m_EigenValues = other.m_EigenValues;
00631 m_EigenVectors = other.m_EigenVectors;
00632 m_TotalEnergy = other.m_TotalEnergy;
00633 m_Components = other.m_Components;
00634 m_Transformation = other.m_Transformation;
00635 N = other.N;
00636 M = other.M;
00637 m_refModel = other.m_refModel;
00638
00639 return *this;
00640 }
|
|
|
Write brief comment for save here.
Definition at line 475 of file Analyzer.cpp. References m_Components, m_mean, m_refModel, and model::ReferenceModel::save(). Referenced by pcggui::SaveAnalyzer(). 00475 {
00476 ofstream saveFile(filename);
00477 if(saveFile.is_open()) {
00478 saveFile << "Mean Dim\n";
00479 saveFile << m_mean.Nrows() << "," << m_mean.Ncols() << "\n";
00480 saveFile << m_mean << "\n";
00481 saveFile << "Components Dim\n";
00482 saveFile << m_Components.Nrows() << "," << m_Components.Ncols() << "\n";
00483 saveFile << m_Components << "\n";
00484 m_refModel.save(&saveFile);
00485 saveFile.close();
00486 return true;
00487 } else {
00488 return false;
00489 }
00490 }
|
Here is the call graph for this function:

|
|
Write brief comment for selectComponents here.
Definition at line 333 of file Analyzer.cpp. References m_Components, m_EigenVectors, m_TotalEnergy, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00334 {
00335 log::write("Analyzer select Components");
00336 int index = 1;
00337 float percent = 0.0;
00338
00339 do
00340 {
00341 percent = ((m_TotalEnergy(1,m_TotalEnergy.Ncols()) - m_TotalEnergy(1,index)) * m_TotalEnergy(1,m_TotalEnergy.Ncols()))/100.0;
00342 log::write("Percent calc",percent);
00343 index++;
00344 }
00345 while(percent <= 90.0 && percent > 0.0);
00346
00347 m_Components = m_EigenVectors.Reverse().Columns(1,index-1).Reverse();
00348 log::write("Components",m_Components);
00349 }
|
Here is the call graph for this function:

|
|
Write brief comment for setData here.
Definition at line 126 of file Analyzer.cpp. References m_ExampleData. 00127 {
00128 m_ExampleData = data;
00129 }
|
|
|
Write brief comment for transformation here.
Definition at line 367 of file Analyzer.cpp. References m_Components, m_Transformation, and log::write(). Referenced by pcggui::Analyze(), Batch::analyzeModel(), and Batch::TestAnalyzer(). 00368 {
00369 log::write("Analyzer Transformation Matrix");
00370 // m_Covariance should perhaps be normalized - see wikipedia for info.
00371 m_Transformation = m_Components.t() * m_AdjustedData;
00372 log::write("Transformation",m_Transformation);
00373 }
|
Here is the call graph for this function:

|
|
Definition at line 44 of file Analyzer.h. Referenced by Analyzer(), computeEnergy(), findComponents(), mean(), mergeData(), and operator=(). |
|
|
Definition at line 37 of file Analyzer.h. Referenced by adjust(), Analyzer(), covariance(), operator=(), and ~Analyzer(). |
|
|
Definition at line 42 of file Analyzer.h. Referenced by Analyzer(), getInputDimension(), getModel(), load(), operator=(), save(), selectComponents(), and transformation(). |
|
|
Definition at line 38 of file Analyzer.h. Referenced by Analyzer(), covariance(), operator=(), and ~Analyzer(). |
|
|
Definition at line 39 of file Analyzer.h. Referenced by Analyzer(), computeEnergy(), findComponents(), operator=(), and ~Analyzer(). |
|
|
Definition at line 40 of file Analyzer.h. Referenced by Analyzer(), findComponents(), operator=(), selectComponents(), and ~Analyzer(). |
|
|
Definition at line 35 of file Analyzer.h. Referenced by adjust(), Analyzer(), mean(), mergeData(), operator=(), setData(), and ~Analyzer(). |
|
|
Definition at line 36 of file Analyzer.h. Referenced by adjust(), Analyzer(), getModel(), load(), mean(), operator=(), save(), and ~Analyzer(). |
|
|
Definition at line 45 of file Analyzer.h. Referenced by Analyzer(), getModel(), load(), mergeData(), operator=(), and save(). |
|
|
Definition at line 41 of file Analyzer.h. Referenced by Analyzer(), computeEnergy(), operator=(), and selectComponents(). |
|
|
Definition at line 43 of file Analyzer.h. Referenced by Analyzer(), getModel(), operator=(), and transformation(). |
|
|
Definition at line 44 of file Analyzer.h. Referenced by adjust(), Analyzer(), covariance(), getModel(), mean(), mergeData(), and operator=(). |
1.3.9.1