flavour
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
eigen.cpp
Go to the documentation of this file.
1 #include <Eigen/Eigenvalues>
2 #include <iostream>
3 #include <vector>
4 using namespace std;
5 using namespace Eigen;
6 
7 class points{
8 public:
9  points(double p, double m, double e):prediction(p),measure(m),error(e){}
10 double prediction, measure, error;
11 };
12 
13 double chi2(double * v){
14  double buu = v[0], auu = v[1];
15  double add = v[2], bdd = v[3];
16  double eu =v[4], gu = v[5];
17  double ed = v[6], gd = v[7];
18 complex<double> bu = buu*exp(complex<double>(0,gu*M_PI_2)), au = auu*exp(complex<double>(0,eu*M_PI_2));
19 complex<double> ad = add*exp(complex<double>(0,ed*M_PI_2)), bd = bdd*exp(complex<double>(0,gd*M_PI_2));
20 complex<double> cd = bd - ad;
21 complex<double> cu =bu + au;
22 
23 //Matrix3cd X = Matrix3cd::Random(3,3);
24 Matrix3cd mu,md;
25 mu<<1,1,1.0+au+bu,1,1,1.0+bu,1.0+bu+au,1.0+bu,1.0+cu;
26 md<<1,1,1.0+ad+bd,1,1,1.0+bd,1.0+bd+ad,1.0+bd,1.0+cd;
27  mu=mu*v[8];
28  md=md*v[9];
29 
30 Matrix3cd Hu = mu*mu.adjoint(), Hd = md*md.adjoint();
31 SelfAdjointEigenSolver<Matrix3cd> usolver(Hu), dsolver(Hd);
32 Vector3d Du=usolver.eigenvalues();//.asDiagonal();
33 Vector3d Dd=dsolver.eigenvalues();//.asDiagonal();
34 Matrix3cd VLd=dsolver.eigenvectors().adjoint();
35 Matrix3cd VLu=usolver.eigenvectors().adjoint();
36 Matrix3cd Vckm=VLu*VLd.adjoint();
37 double lambda=sqrt(norm(Vckm(0,1))/(norm(Vckm(0,0))+norm(Vckm(0,1))));
38 double A=abs(Vckm(1,2))/abs(Vckm(0,1))/lambda;
39 complex<double> rhoeta=-Vckm(0,0)*conj(Vckm(0,2))/Vckm(1,0)/conj(Vckm(1,2));
40 double rho=real(rhoeta), eta=imag(rhoeta);
41 
42 vector<points> comp;
43 comp.push_back(points(lambda, 0.22535, 0.00065));
44 comp.push_back(points(A, 0.811, 0.017));
45 comp.push_back(points(rho, 0.131, 0.02));
46 comp.push_back(points(eta, 0.345, 0.014));
47 comp.push_back(points(eta, 0.345, 0.014));
48 comp.push_back(points(Du[0], 1.27e-3, 0.46e-3));
49 comp.push_back(points(Dd[0], 2.9e-3, 1.22e-3));
50 comp.push_back(points(Dd[1], 55e-3, 16e-3));
51 comp.push_back(points(Du[1], 0.619, 0.084));
52 comp.push_back(points(Dd[2], 2.89, 0.09));
53 comp.push_back(points(Du[2], 171.7, 3.0));
54 
55 double chi=0;
56 
57 for(uint i=0;i<comp.size();i++){
58  chi+=pow((comp[i].prediction-comp[i].measure)/comp[i].error,2);
59  }
60 return chi/comp.size();
61 }
62 
63 int main(){
64 double buu = 0.0162, auu = 0.0009;
65 double add = 0.018, bdd = 0.09;
66 //double x = 1.0/3;
67 double eu = -1.8, gu = -1.0/2;
68 double ed = -1.0/2, gd = -2;
69 complex<double> bu = buu*exp(complex<double>(0,gu*M_PI_2)), au = auu*exp(complex<double>(0,eu*M_PI_2));
70 complex<double> ad = add*exp(complex<double>(0,ed*M_PI_2)), bd = bdd*exp(complex<double>(0,gd*M_PI_2));
71 complex<double> cd = exp(complex<double>(0,0.09/1.8));
72 
73 //Matrix3cd X = Matrix3cd::Random(3,3);
74 Matrix3cd mu,md;
75 mu<<1,1,1.0+au+bu,1,1,1.0+bu,1.0+bu+au,1.0+bu,1.0+bu;
76 //md<<1,1,1.0+ad+bd,1,1,1.0+bd,1.0+bd+ad,1.0+bd,1.0+bd;
77 md<<1,1,1.0+ad+bd,1,1,1.0+bd,cd*(1.0+bd+ad),cd*(1.0+bd),cd*(1.0+bd);
78 mu=mu*57.4822;
79 md=md*1.0147;
80 
81 Matrix3cd Hu = mu*mu.adjoint(), Hd = md*md.adjoint();
82 SelfAdjointEigenSolver<Matrix3cd> usolver(Hu), dsolver(Hd);
83 Vector3d Du=usolver.eigenvalues();//.asDiagonal();
84 Vector3d Dd=dsolver.eigenvalues();//.asDiagonal();
85 Matrix3cd VLd=dsolver.eigenvectors().adjoint();
86 Matrix3cd VLu=usolver.eigenvectors().adjoint();
87 Matrix3cd Vckm=VLu*VLd.adjoint();
88 double lambda=sqrt(norm(Vckm(0,1))/(norm(Vckm(0,0))+norm(Vckm(0,1))));
89 double A=abs(Vckm(1,2))/abs(Vckm(0,1))/lambda;
90 complex<double> rhoeta=-Vckm(0,0)*conj(Vckm(0,2))/Vckm(1,0)/conj(Vckm(1,2));
91 double rho=real(rhoeta), eta=imag(rhoeta);
92 double fu=173.5/sqrt(Du[2]), fd=2.89/sqrt(Dd[2]);
93 
94 vector<points> comp;
95 comp.push_back(points(lambda, 0.22535, 0.00065));
96 comp.push_back(points(A, 0.811, 0.017));
97 comp.push_back(points(rho, 0.131, 0.02));
98 comp.push_back(points(eta, 0.345, 0.014));
99 comp.push_back(points(sqrt(Du[0]), 1.27e-3, 0.46e-3));
100 comp.push_back(points(sqrt(Dd[0]), 2.9e-3, 1.22e-3));
101 comp.push_back(points(sqrt(Dd[1]), 55e-3, 16e-3));
102 comp.push_back(points(sqrt(Du[1]), 0.619, 0.084));
103 comp.push_back(points(sqrt(Dd[2]), 2.89, 0.09));
104 comp.push_back(points(sqrt(Du[2]), 171.7, 3.0));
105 
106 double chi=0;
107 
108 for(uint i=0;i<comp.size();i++){
109  double aa=(comp[i].prediction-comp[i].measure)/comp[i].error;
110  cout<<i<<" "<<aa<<endl;
111  chi+=pow((comp[i].prediction-comp[i].measure)/comp[i].error,2);
112  }
113 chi/=comp.size();
114 
115 cout<<lambda<<" "<<A<<" "<<rho<<" "<<eta<<endl;
116 cout<<sqrt(Du[2])<<" "<<sqrt(Du[1])<<" "<<sqrt(Du[0])<<endl;
117 cout<<sqrt(Dd[2])<<" "<<sqrt(Dd[1])<<" "<<sqrt(Dd[0])<<endl;
118 cout<<chi<<endl;
119 /*
120 cout << "The eigenvalues of mu are:" << endl << es.eigenvalues() << endl;
121 cout << "The matrix of eigenvectors, V, is:" << endl << es.eigenvectors() << endl << endl;
122 double lambda = es.eigenvalues()[0];
123 cout << "Consider the first eigenvalue, lambda = " << lambda << endl;
124 Vector3cd v = es.eigenvectors().col(0);
125 cout << "If v is the corresponding eigenvector, then lambda * v = " << endl << lambda * v << endl;
126 cout << "... and A * v = " << endl << A * v << endl << endl;
127 Matrix3d D = es.eigenvalues().asDiagonal();
128 Matrix3cd V = es.eigenvectors();
129 cout << "Finally, V * D * V^(-1) = " << endl << V * D * V.inverse() << endl;
130 */
131 return 0;
132 }
points(double p, double m, double e)
Definition: eigen.cpp:9
A class containing the value and uncertainty of an experimental measure.
Definition: model.h:20
double chi2(double *v)
Definition: eigen.cpp:13
Definition: multivector.h:4
Definition: eigen.cpp:7
unsigned int uint
Definition: script.cpp:4
int main()
Definition: eigen.cpp:63
double prediction
Definition: eigen.cpp:10
theoretical expression for an experimental measure
Definition: model.h:344