1#include "SpectralFitter.h" 
    3SpectralFitter::SpectralFitter(std::vector<double> &spectrum,
 
    4                               std::vector<std::vector<double>> &pool)
 
    5    : _spectrum(spectrum), _pool(pool) {}
 
    7void SpectralFitter::fitSpectrum() {
 
   13  unsigned int npool = _pool.size();
 
   14  unsigned int nspectrum = _spectrum.size();
 
   16  double **nnlsMatrix = 
new double *[npool];
 
   18  double yArray[nspectrum];
 
   20  if (_uncertainties.size() == nspectrum) { 
 
   21    for (
size_t i = 0; i < npool; i++) {
 
   23      nnlsMatrix[i] = 
new double[nspectrum];
 
   25      for (
size_t j = 0; j < nspectrum; j++) {
 
   27        nnlsMatrix[i][j] = _pool[i][j] / _uncertainties[j];
 
   31    for (
size_t i = 0; i < nspectrum; i++) {
 
   33      yArray[i] = _spectrum[i] / _uncertainties[i];
 
   36    for (
size_t i = 0; i < npool; i++) {
 
   38      nnlsMatrix[i] = 
new double[nspectrum];
 
   40      for (
size_t j = 0; j < nspectrum; j++) {
 
   42        nnlsMatrix[i][j] = _pool[i][j];
 
   46    for (
size_t i = 0; i < nspectrum; i++) {
 
   48      yArray[i] = _spectrum[i];
 
   52  double X[npool], ZZ[nspectrum], W[npool];
 
   56  nnls(nnlsMatrix, nspectrum, npool, yArray, X, &_norm, W, ZZ, idx);
 
   58  for (
const auto &value : X) {
 
   60    _weights.push_back(value);
 
   63  for (
size_t i = 0; i < npool; i++) {
 
   65    delete[] nnlsMatrix[i];
 
   71const std::vector<unsigned int> &SpectralFitter::getNonZeroIndices() {
 
   73  if (_indices.size() > 0) {
 
   79  for (
auto value : _weights) {
 
   83      _indices.push_back(i);