11 #include <alignment/PedeResult.h>
29 int PedeResult::getParameterIndex(
int parameterLabel)
31 auto index = labelIndices.find(parameterLabel);
32 if (index != labelIndices.end())
37 void PedeResult::readEigenFile(
string filename)
43 ifstream file(filename);
48 int eigenPairIndex = -1;
50 for (
auto& pData : data) {
51 pData.eigenweights.clear();
52 pData.eigenweights.reserve(20);
55 while (getline(file, line)) {
59 string tmp1, tmp2, tmp3;
62 ss >> tmp1 >> eigenPairNumber >> tmp2 >> tmp3 >> eigenvalue;
63 cout << tmp1 <<
" " << tmp2 <<
" " << tmp3 <<
" " << eigenPairNumber <<
" " << eigenvalue << endl;
64 if (tmp1 ==
"Eigenvector")
70 vector<pair<int, double>> elements;
71 while (getline(file, line) && line.length() > 2) {
78 triplet >> lab1 >> w1 >> lab2 >> w2 >> lab3 >> w3;
79 if (lab1) elements.push_back({lab1, w1});
80 if (lab2) elements.push_back({lab2, w2});
81 if (lab3) elements.push_back({lab3, w3});
84 for (
auto& pData : data) {
85 pData.eigenweights.push_back(0.);
87 for (
auto el : elements) {
88 int index = getParameterIndex(el.first);
90 data[index].eigenweights[eigenPairIndex] = el.second;
92 eigenNumbers.push_back(eigenvalue);
97 void PedeResult::read(
string filename)
100 ifstream res(filename);
104 noDeterminedParams = 0;
106 labelIndices.clear();
109 while (getline(res, line)) {
113 double presigma = 0.;
118 ss >> label >> param >> presigma >> differ >> error;
119 data.push_back(
parameterData(index, label, param, error, presigma));
120 labelIndices.insert(make_pair(label, index));
121 if (isParameterDetermined(index))
122 ++noDeterminedParams;
128 PedeResult::PedeResult(
const string& filename): data(), eigenNumbers(), valid(false), labelIndices()
136 return data[parameterIndex].label;
141 return data[parameterIndex].correction;
146 return data[parameterIndex].error;
151 return data[parameterIndex].presigma;
156 return data[parameterIndex].presigma < 0;
161 return !
isParameterFixed(parameterIndex) &&
data[parameterIndex].correction != 0. &&
data[parameterIndex].error != 0.;
173 if (eigenPairIndex >= element.eigenweights.size())
176 return data[parameterIndex].eigenweights[eigenPairIndex];
180 for (
auto pdata :
data) {
181 std::cout << pdata.index <<
" : " << pdata.label <<
" corr: " << pdata.correction <<
" err: " << pdata.error <<
" presigma: " <<
182 pdata.presigma << endl;