NAPISD
PAHdb website C++ backend
Loading...
Searching...
No Matches
SpectralFitter.cpp
1#include "SpectralFitter.h"
2
3SpectralFitter::SpectralFitter(std::vector<double> &spectrum,
4 std::vector<std::vector<double>> &pool)
5 : _spectrum(spectrum), _pool(pool) {}
6
7void SpectralFitter::fitSpectrum() {
8
9 _weights.clear();
10
11 _indices.clear();
12
13 unsigned int npool = _pool.size();
14 unsigned int nspectrum = _spectrum.size();
15
16 double **nnlsMatrix = new double *[npool];
17
18 double yArray[nspectrum];
19
20 if (_uncertainties.size() == nspectrum) { // NNLC
21 for (size_t i = 0; i < npool; i++) {
22
23 nnlsMatrix[i] = new double[nspectrum];
24
25 for (size_t j = 0; j < nspectrum; j++) {
26
27 nnlsMatrix[i][j] = _pool[i][j] / _uncertainties[j];
28 }
29 }
30
31 for (size_t i = 0; i < nspectrum; i++) {
32
33 yArray[i] = _spectrum[i] / _uncertainties[i];
34 }
35 } else { // NNLS
36 for (size_t i = 0; i < npool; i++) {
37
38 nnlsMatrix[i] = new double[nspectrum];
39
40 for (size_t j = 0; j < nspectrum; j++) {
41
42 nnlsMatrix[i][j] = _pool[i][j];
43 }
44 }
45
46 for (size_t i = 0; i < nspectrum; i++) {
47
48 yArray[i] = _spectrum[i];
49 }
50 }
51
52 double X[npool], ZZ[nspectrum], W[npool];
53
54 int idx[npool];
55
56 nnls(nnlsMatrix, nspectrum, npool, yArray, X, &_norm, W, ZZ, idx);
57
58 for (const auto &value : X) {
59
60 _weights.push_back(value);
61 }
62
63 for (size_t i = 0; i < npool; i++) {
64
65 delete[] nnlsMatrix[i];
66 }
67
68 delete[] nnlsMatrix;
69}
70
71const std::vector<unsigned int> &SpectralFitter::getNonZeroIndices() {
72
73 if (_indices.size() > 0) {
74
75 return _indices;
76 }
77
78 size_t i = 0;
79 for (auto value : _weights) {
80
81 if (value > 0) {
82
83 _indices.push_back(i);
84 }
85
86 ++i;
87 }
88
89 return _indices;
90}

Since FY2019 the NASA Ames PAH IR Spectroscopic Database is being supported through a directed Work Package at NASA Ames titled: "Laboratory Astrophysics - The NASA Ames PAH IR Spectroscopic Database".
Since FY2023 the NASA Ames PAH IR Spectroscopic Database is being supported through the Laboratory Astrophysics Rd 2 directed Work Package at NASA Ames.
© Copyright 2021-2025, Christiaan Boersma