27 #include "../TFitBin.h"
32 #include "TPostScript.h"
35 #include "TMatrixDSym.h"
36 #include "TMatrixDSymEigen.h"
47 #include "TPrincipal.h"
58 map<TString,unsigned int> waveindex;
60 ifstream file(wavepool.Data());
66 unsigned int pos=line.find(
" ");
67 string name=line.substr(0,pos);
69 if(pos<line.length()){
70 thres=atof(line.substr(pos,line.length()).c_str());
73 waveindex[name.c_str()]=index;
78 unsigned int d=waveindex.size();
79 cout << d <<
" waves in wavepool." << endl;
82 vector<double> fitness;
88 vector<TMatrixD> csomes;
92 ifstream results(resultfile.Data());
93 while(results.good()){
94 getline(results,line);
95 unsigned int pos=line.find(
" ");
96 string name=line.substr(0,pos);
98 if(pos<line.length()){
99 fit=atof(line.substr(pos,line.length()).c_str());
102 fitness.push_back(fit);
103 set<wsetentry> myset;
108 set<wsetentry>::iterator it=myset.begin();
109 while(it!=myset.end()){
110 unsigned int index=waveindex[it->name];
114 csomes.push_back(ch);
129 mean*=1./(double)csomes.size();
137 for(
unsigned int i=0;
i<csomes.size();++
i){
138 TMatrixD u=csomes[
i]-mean;
139 TMatrixD c(u,TMatrixD::kMultTranspose,u);
143 cov*=1./(double)csomes.size();
149 TMatrixDSym sym; sym.Use(cov.GetNrows(),cov.GetMatrixArray());
150 TMatrixDSymEigen eigen(sym);
151 TMatrixD EigenVectors = eigen.GetEigenVectors();
152 TVectorD EigenValues = eigen.GetEigenValues();
159 TVectorD u1=TMatrixDColumn(EigenVectors,0);
160 TVectorD u2=TMatrixDColumn(EigenVectors,1);
162 TCanvas* c=
new TCanvas(
"c",
"PCA",10,10,1200,800);
165 TH2D* hpca=
new TH2D(
"hpca",
"PCA",100,-5,5,100,-5,5);
168 unsigned int n=csomes.size();
169 TMatrixD* dist=
new TMatrixD(n,n);
171 for(
unsigned int i=0;
i<
n;++
i){
172 TVectorD x=TMatrixDColumn(csomes[
i],0);
173 for(
unsigned int j=0;j<
n;++j){
174 TVectorD y=TMatrixDColumn(csomes[j],0);
176 (*dist)(
i,j)=dis.Norm1();
180 cout << x1 <<
" " << x2 << endl;
186 TLatex* maker=
new TLatex(x1,x2,mark);
187 maker->SetTextColor(col);
188 maker->SetTextSize(0.02);
193 dist->DrawClone(
"COL");
194 dist->DrawClone(
"TEXT SAME");