Something went wrong on our end
-
Bertram Kopf authored1bfac92f
PawianParameters.cc 7.69 KiB
//************************************************************************//
// //
// Copyright 2013 Bertram Kopf (bertram@ep1.rub.de) //
// Julian Pychy (julian@ep1.rub.de) //
// - Ruhr-Universität Bochum //
// //
// This file is part of Pawian. //
// //
// Pawian is free software: you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation, either version 3 of the License, or //
// (at your option) any later version. //
// //
// Pawian is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with Pawian. If not, see <http://www.gnu.org/licenses/>. //
// //
//************************************************************************//
#include <math.h>
#include <stdio.h>
#include <algorithm>
#include "FitParams/PawianParameters.hh"
PawianParameters::PawianParameters() :
AbsPawianParameters()
{
}
PawianParameters::PawianParameters(std::vector<PawianParameter>& parameters) :
AbsPawianParameters()
{
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=parameters.begin(); itPar!=parameters.end(); ++itPar){
PawianParameter newParam= (*itPar);
_parameters.push_back(newParam);
}
}
PawianParameters::~PawianParameters()
{
}
unsigned int PawianParameters::VariableParameters() const{
unsigned int result=0;
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=_parameters.begin(); itPar!=_parameters.end(); ++itPar){
if (!(itPar->IsFixed())) ++result;
}
return result;
}
AbsPawianParameters* PawianParameters::Clone(){
PawianParameters* result = new PawianParameters(_parameters);
std::map<unsigned int, std::vector<unsigned int> >::iterator it;
for(it=_depMap.begin(); it!=_depMap.end(); ++it){
result->SetDependencies(it->first, it->second);
}
return result;
}
const std::vector<std::string> PawianParameters::ParamNames(){
std::vector<std::string> parNames;
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=_parameters.begin(); itPar!=_parameters.end(); ++itPar){
parNames.push_back(itPar->GetName());
}
return parNames;
}
bool PawianParameters::Add(const std::string & name, double val, double err){
bool alreadyAdded=false;
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=_parameters.begin(); itPar!=_parameters.end(); ++itPar){
if(itPar->Name()==name) alreadyAdded=true;
}
if(alreadyAdded) return false;
_parameters.push_back(PawianParameter(_parameters.size(), name, val, err));
return true;
}
bool PawianParameters::Add(const std::string & name, double val, double err, double low, double up){
bool alreadyAdded=false;
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=_parameters.begin(); itPar!=_parameters.end(); ++itPar){
if(itPar->Name()==name) alreadyAdded=true;
}
if(alreadyAdded) return false;
_parameters.push_back(PawianParameter(_parameters.size(), name, val, err, low, up));
return true;
}
bool PawianParameters::Add(const std::string & name, double val){
bool alreadyAdded=false;
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=_parameters.begin(); itPar!=_parameters.end(); ++itPar){
if(itPar->Name()==name) alreadyAdded=true;
}
if(alreadyAdded) return false;
_parameters.push_back(PawianParameter(_parameters.size(), name, val));
return true;
}
void PawianParameters::Fix(unsigned int idx){
assert(idx < _parameters.size());
_parameters[idx].Fix();
}
void PawianParameters::Release(unsigned int idx){
assert(idx < _parameters.size());
_parameters[idx].Release();
}
void PawianParameters::SetValue(unsigned int idx, double val){
assert(idx < _parameters.size());
_parameters[idx].SetValue(val);
}
void PawianParameters::SetError(unsigned int idx, double err){
assert(idx < _parameters.size());
_parameters[idx].SetError(err);
}
void PawianParameters::SetLimits(unsigned int idx, double low, double up){
assert(idx < _parameters.size());
_parameters[idx].SetLimits(low, up);
}
void PawianParameters::SetUpperLimit(unsigned int idx, double up){
assert(idx < _parameters.size());
_parameters[idx].SetUpperLimit(up);
}
void PawianParameters::SetLowerLimit(unsigned int idx, double low){
assert(idx < _parameters.size());
_parameters[idx].SetLowerLimit(low);
}
void PawianParameters::RemoveLimits(unsigned int idx){
assert(idx < _parameters.size());
_parameters[idx].RemoveLimits();
}
double PawianParameters::Value(unsigned int idx) const{
assert(idx < _parameters.size());
return _parameters[idx].Value();
}
double PawianParameters::Error(unsigned int idx) const{
assert(idx < _parameters.size());
return _parameters[idx].Error();
}
void PawianParameters::Fix(const std::string & pname){
Fix(Index(pname));
}
void PawianParameters::Release(const std::string & pname){
Release(Index(pname));
}
void PawianParameters::SetValue(const std::string & pname, double val){
SetValue(Index(pname), val);
}
void PawianParameters::SetError(const std::string & pname, double err){
SetError(Index(pname), err);
}
void PawianParameters::SetLimits(const std::string & pname, double low, double up){
SetLimits(Index(pname), low, up);
}
void PawianParameters::SetUpperLimit(const std::string & pname, double up){
SetUpperLimit(Index(pname), up);
}
void PawianParameters::SetLowerLimit(const std::string & pname, double low){
SetLowerLimit(Index(pname), low);
}
void PawianParameters::RemoveLimits(const std::string & pname){
RemoveLimits(Index(pname));
}
double PawianParameters::Value(const std::string & pname) const{
return Value(Index(pname));
}
double PawianParameters::Error(const std::string & pname) const{
return Error(Index(pname));
}
bool PawianParameters::IsFixed(unsigned int idx){
assert(idx < _parameters.size());
return _parameters[idx].IsFixed();
}
bool PawianParameters::HasLimits(unsigned int idx){
assert(idx < _parameters.size());
return _parameters[idx].HasLimits();
}
double PawianParameters::UpperLimit(unsigned int idx){
assert(idx < _parameters.size());
return _parameters[idx].UpperLimit();
}
double PawianParameters::LowerLimit(unsigned int idx){
assert(idx < _parameters.size());
return _parameters[idx].LowerLimit();
}
unsigned int PawianParameters::Index(const std::string & name) const{
std::vector<PawianParameter>::const_iterator itPar;
for (itPar=_parameters.begin(); itPar!=_parameters.end(); ++itPar){
if(itPar->Name()==name) break;
}
assert(itPar != _parameters.end());
return (*itPar).Number();
}
const std::string & PawianParameters::GetName(unsigned int idx) const{
assert(idx < _parameters.size());
return _parameters[idx].GetName();
}
const char* PawianParameters::Name(unsigned int idx) const{
assert(idx < _parameters.size());
return _parameters[idx].Name();
}
std::vector<double> PawianParameters::Params() const{
// return std::vector of double with parameter values
unsigned int n = _parameters.size();
std::vector<double> result(n);
for(unsigned int i = 0; i < n; ++i)
result[i] = _parameters[i].Value();
return result;
}
std::vector<double> PawianParameters::Errors() const{
// return std::vector of double with parameter errors
unsigned int n = _parameters.size();
std::vector<double> result(n);
for(unsigned int i = 0; i < n; ++i)
result[i] = _parameters[i].Error();
return result;
}