/***************************************************************************
* GException_model.cpp - Model exception handlers *
* ----------------------------------------------------------------------- *
* copyright (C) 2010-2011 by Jurgen Knodlseder *
* ----------------------------------------------------------------------- *
* *
* This program 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. *
* *
* This program 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 this program. If not, see . *
* *
***************************************************************************/
/**
* @file GException_model.cpp
* @brief Implement exceptions for the model module
* @author J. Knodlseder
*/
/* __ Includes ___________________________________________________________ */
#ifdef HAVE_CONFIG_H
#include
#endif
#include "GException.hpp"
#include "GModelRegistry.hpp"
#include "GModelSpatialRegistry.hpp"
#include "GModelSpectralRegistry.hpp"
#include "GModelTemporalRegistry.hpp"
#include "GTools.hpp"
/***********************************************************************//**
* @brief Invalid model type
*
* @param[in] origin Method that throws the error.
* @param[in] type Model type that has been encountered.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid::model_invalid(std::string origin,
std::string type,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid model type \""+type+"\" encountered. " + message;
// Add list of valid models
GModelRegistry registry;
if (registry.size() > 0) {
m_message += "The following models are registered: ";
for (int i = 0; i < registry.size(); ++i) {
if (i > 0)
m_message += ", ";
m_message += "\"" + registry.name(i) + "\"";
}
m_message += ".";
}
else
m_message += "No models are registered.";
// Return
return;
}
/***********************************************************************//**
* @brief Invalid spatial model type
*
* @param[in] origin Method that throws the error.
* @param[in] type Spatial model type that has been encountered.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_spatial::model_invalid_spatial(std::string origin,
std::string type,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid spatial model type \""+type+"\" encountered. " +
message;
// Add list of valid spatial models
GModelSpatialRegistry registry;
if (registry.size() > 0) {
m_message += "The following models are registered: ";
for (int i = 0; i < registry.size(); ++i) {
if (i > 0)
m_message += ", ";
m_message += "\"" + registry.name(i) + "\"";
}
m_message += ".";
}
else
m_message += "No models are registered.";
// Return
return;
}
/***********************************************************************//**
* @brief Invalid spectral model type
*
* @param[in] origin Method that throws the error.
* @param[in] type Spectral model type that has been encountered.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_spectral::model_invalid_spectral(std::string origin,
std::string type,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid spectral model type \""+type+"\" encountered. " +
message;
// Add list of valid spectral models
GModelSpectralRegistry registry;
if (registry.size() > 0) {
m_message += "The following models are registered: ";
for (int i = 0; i < registry.size(); ++i) {
if (i > 0)
m_message += ", ";
m_message += "\"" + registry.name(i) + "\"";
}
m_message += ".";
}
else
m_message += "No models are registered.";
// Return
return;
}
/***********************************************************************//**
* @brief Invalid temporal model type
*
* @param[in] origin Method that throws the error.
* @param[in] type Temporal model type that has been encountered.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_temporal::model_invalid_temporal(std::string origin,
std::string type,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid temporal model type \""+type+"\" encountered. " +
message;
// Add list of valid spectral models
GModelTemporalRegistry registry;
if (registry.size() > 0) {
m_message += "The following models are registered: ";
for (int i = 0; i < registry.size(); ++i) {
if (i > 0)
m_message += ", ";
m_message += "\"" + registry.name(i) + "\"";
}
m_message += ".";
}
else
m_message += "No models are registered.";
// Return
return;
}
/***********************************************************************//**
* @brief Invalid number of model parameters in XML element
*
* @param[in] origin Method that throws the error.
* @param[in] xml XML element.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_parnum::model_invalid_parnum(std::string origin,
GXmlElement xml,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid number of model parameters found in XML element. " +
message;
// Return
return;
}
/***********************************************************************//**
* @brief Invalid model parameter names in XML element
*
* @param[in] origin Method that throws the error.
* @param[in] xml XML element.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_parnames::model_invalid_parnames(std::string origin,
GXmlElement xml,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid model parameter names found in XML element. " +
message;
// Return
return;
}
/***********************************************************************//**
* @brief Invalid model parameter value in XML element
*
* @param[in] origin Method that throws the error.
* @param[in] xml XML element.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_parvalue::model_invalid_parvalue(std::string origin,
GXmlElement xml,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid model parameter value found in XML element. " +
message;
// Return
return;
}
/***********************************************************************//**
* @brief Invalid model parameter limit in XML element
*
* @param[in] origin Method that throws the error.
* @param[in] xml XML element.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_parlimit::model_invalid_parlimit(std::string origin,
GXmlElement xml,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid model parameter limit found in XML element. " +
message;
// Return
return;
}
/***********************************************************************//**
* @brief Model parameter has invalid scale
*
* @param[in] origin Method that throws the error.
* @param[in] scale Scale.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_parscale::model_invalid_parscale(std::string origin,
double scale,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Model parameter has invalid scale="+gammalib::str(scale)+". " +
message;
// Return
return;
}
/***********************************************************************//**
* @brief Model parameter has invalid scale
*
* @param[in] origin Method that throws the error.
* @param[in] xml XML element.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_invalid_parscale::model_invalid_parscale(std::string origin,
GXmlElement xml,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Model parameter with invalid scale found in XML element. " +
message;
// Return
return;
}
/***********************************************************************//**
* @brief Not enough nodes in file function
*
* @param[in] origin Method that throws the error.
* @param[in] filename File function filename.
* @param[in] num Number of nodes.
* @param[in] message Optional error message.
***************************************************************************/
GException::file_function_data::file_function_data(std::string origin,
std::string filename,
int num,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "File function \""+filename+"\" contains "+gammalib::str(num)+
" energy nodes while at least 2 are required to describe a"
" spectral shape.";
if (message.length() > 0) {
m_message += " "+message;
}
// Return
return;
}
/***********************************************************************//**
* @brief Not enough columns in file function
*
* @param[in] origin Method that throws the error.
* @param[in] filename File function filename.
* @param[in] num Number of columns.
* @param[in] message Optional error message.
***************************************************************************/
GException::file_function_columns::file_function_columns(std::string origin,
std::string filename,
int num,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "File function \""+filename+"\" contains "+gammalib::str(num)+
" columns while at least 2 are required to define"
" energy and intensity.";
if (message.length() > 0) {
m_message += " "+message;
}
// Return
return;
}
/***********************************************************************//**
* @brief Invalid value in file function
*
* @param[in] origin Method that throws the error.
* @param[in] filename File function filename.
* @param[in] value Number of columns.
* @param[in] message Optional error message.
***************************************************************************/
GException::file_function_value::file_function_value(std::string origin,
std::string filename,
double value,
std::string message)
{
// Set origin and message
m_origin = origin;
m_message = "Invalid value \""+gammalib::str(value)+"\" encountered in"
" file function \""+filename+"\".";
if (message.length() > 0) {
m_message += " "+message;
}
// Return
return;
}
/***********************************************************************//**
* @brief Parameter not found
*
* @param[in] origin Method that throws the error.
* @param[in] name Parameter name.
* @param[in] message Optional error message.
***************************************************************************/
GException::par_not_found::par_not_found(std::string origin,
std::string name,
std::string message)
{
// Set origin
m_origin = origin;
// Set message
m_message = "Parameter \""+name+"\" not found in container.";
if (message.length() > 0)
m_message += " "+message;
// Return
return;
}
/***********************************************************************//**
* @brief Model not found
*
* @param[in] origin Method that throws the error.
* @param[in] name Model name.
* @param[in] message Optional error message.
***************************************************************************/
GException::model_not_found::model_not_found(std::string origin,
std::string name,
std::string message)
{
// Set origin
m_origin = origin;
// Set message
m_message = "Model \""+name+"\" not found in container.";
if (message.length() > 0)
m_message += " "+message;
// Return
return;
}
/***********************************************************************//**
* @brief No point source model component found
*
* @param[in] origin Method that throws the error.
* @param[in] name Model name.
* @param[in] message Optional error message.
***************************************************************************/
GException::no_point_source::no_point_source(std::string origin,
std::string name,
std::string message)
{
// Set origin
m_origin = origin;
// Set message
m_message = "No point source model component found in model \""+name+"\".";
if (message.length() > 0)
m_message += " "+message;
// Return
return;
}
/***********************************************************************//**
* @brief No extended source model component found
*
* @param[in] origin Method that throws the error.
* @param[in] name Model name.
* @param[in] message Optional error message.
***************************************************************************/
GException::no_extended_source::no_extended_source(std::string origin,
std::string name,
std::string message)
{
// Set origin
m_origin = origin;
// Set message
m_message = "No extended source model component found in model \""+name+"\".";
if (message.length() > 0)
m_message += " "+message;
// Return
return;
}