43 const GModelRegistry g_com_drb_fitting_registry(&g_com_drb_fitting_seed);
46 #define G_EVAL "GCOMModelDRBFitting::eval(GEvent&, GObservation&, bool&)"
47 #define G_NRED "GCOMModelDRBFitting::npred(GEnergy&, GTime&, GObservation&)"
48 #define G_MC "GCOMModelDRBFitting::mc(GObservation&, GRan&)"
49 #define G_READ "GCOMModelDRBFitting::read(GXmlElement&)"
50 #define G_WRITE "GCOMModelDRBFitting::write(GXmlElement&)"
161 if (
this != &model) {
242 const bool& gradients)
const
246 if (observation == NULL) {
247 std::string cls = std::string(
typeid(&obs).
name());
248 std::string msg =
"Observation of type \""+cls+
"\" is not a COMPTEL "
249 "observations. Please specify a COMPTEL observation "
257 std::string cls = std::string(
typeid(&event).
name());
258 std::string msg =
"Event of type \""+cls+
"\" is not a COMPTEL event. "
259 "Please specify a COMPTEL event as argument.";
268 for (
int i = 0; i <
m_values.size(); ++i) {
274 int index = bin->
index();
299 double grad = (
m_values[0].is_free())
328 scale =
m_values[inx_left].value() * wgt_left +
329 m_values[inx_right].value() * wgt_right;
335 double g_left = (
m_values[inx_left].is_free())
338 double g_right = (
m_values[inx_right].is_free())
343 m_values[inx_left].factor_gradient(g_left);
344 m_values[inx_right].factor_gradient(g_right);
354 #if defined(G_NAN_CHECK)
356 std::cout <<
"*** ERROR: GCOMModelDRBFitting::eval";
357 std::cout <<
"(index=" << index <<
"):";
358 std::cout <<
" NaN/Inf encountered";
359 std::cout <<
" (value=" << value;
360 std::cout <<
", scale=" <<
scale;
361 std::cout <<
")" << std::endl;
389 const GTime& obsTime,
396 std::string msg =
"Spatial integration of data model is not implemented.";
426 std::string msg =
"Monte Carlo simulation of data model is not implemented.";
470 std::string msg =
"DRB fitting model requires at least one Phibar "
471 "node. Please correct XML format.";
476 for (
int i = 0; i < nodes; ++i) {
491 normalization.
read(*par);
495 std::string normalization_name =
"Scale factor "+
gammalib::str(i);
498 phibar.
name(phibar_name);
503 normalization.
name(normalization_name);
504 normalization.
unit(
"");
563 for (
int k = 0; k < n; ++k) {
574 src = xml.
append(
"source");
584 std::string msg =
"Invalid model type \""+src->
attribute(
"type")+
"\" "
585 "found in XML file. Model type \""+
type()+
"\" "
595 for (
int i = 0; i < nodes; ++i) {
602 std::string msg =
"Invalid number of nodes "+
604 " found in XML file, but model requires exactly "+
610 for (
int i = 0; i < nodes; ++i) {
624 mpar.
name(
"Normalization");
652 result.append(
"=== GCOMModelDRBFitting ===");
662 for (
int i = 0; i <
size(); ++i) {
749 for (
int i = 0; i < nodes; ++i) {
794 for (
int i = 0; i < num; ++i) {
825 for (
int i = 0; i < num; ++i) {
COMPTEL DRB model fitting class.
void phibar(const double &phibar)
Set event Compton scatter angle.
void free_members(void)
Delete class members.
const int & index(void) const
Return bin index.
const std::string & name(void) const
Return parameter name.
std::string print_attributes(void) const
Print model attributes.
virtual void read(const GXmlElement &xml)
Read model from XML element.
Interface definition for the model registry class.
void write(GXmlElement &xml) const
Set or update parameter attributes in XML element.
virtual GCOMModelDRBFitting * clone(void) const
Clone instance.
COMPTEL observation class interface definition.
Abstract interface for the event classes.
const double & wgt_left(void) const
Returns left node weight.
void free_members(void)
Delete class members.
bool m_fixed
All Phibar values are fixed.
void clear(void)
Clear node array.
const GCOMDri & drb(void) const
Return background model.
Random number generator class.
virtual std::string type(void) const
Return model type.
virtual int elements(void) const
Return number of GXMLElement children of node.
void set_value(const double &value) const
Set indices and weighting factors for interpolation.
virtual GCOMModelDRBFitting & operator=(const GCOMModelDRBFitting &model)
Assignment operator.
virtual void clear(void)
Clear instance.
virtual GCOMEventCube * mc(const GObservation &obs, GRan &ran) const
Return simulated list of events.
COMPTEL event bin class interface definition.
bool is_notanumber(const double &x)
Signal if argument is not a number.
std::vector< GModelPar * > m_pars
Pointers to all model parameters.
int size(void) const
Return number of parameters in model.
bool is_infinite(const double &x)
Signal if argument is infinite.
void init_members(void)
Initialise class members.
void init_members(void)
Initialise class members.
bool has_grad(void) const
Signal if parameter gradient is computed analytically.
const double & wgt_right(void) const
Returns right node weight.
const GXmlAttribute * attribute(const int &index) const
Return attribute.
const std::string & name(void) const
Return parameter name.
const GSkyMap & map(void) const
Return DRI sky map.
GXmlElement * xml_need_par(const std::string &origin, GXmlElement &xml, const std::string &name)
Return pointer to parameter with given name in XML element.
virtual std::string print(const GChatter &chatter=NORMAL) const
Print model information.
Abstract data model class.
virtual GModelData & operator=(const GModelData &model)
Assignment operator.
void free_members(void)
Delete class members.
std::string instruments(void) const
Returns instruments to which model applies.
void update_cache(void) const
Update evaluation cache.
const int & inx_left(void) const
Returns left node index.
Abstract observation base class.
COMPTEL event bin container class.
GModelPar & scale(const int &index)
Returns reference to scale parameter by index.
GCOMModelDRBFitting(void)
Void constructor.
const int & inx_right(void) const
Returns right node index.
void write_attributes(GXmlElement &xml) const
Write model attributes.
bool m_scale
Model is a scale factor.
virtual GXmlElement * element(const int &index)
Return pointer to GXMLElement child.
COMPTEL DRB model fitting class interface definition.
virtual const GCOMInstDir & dir(void) const
Return instrument direction of event bin.
virtual double npred(const GEnergy &obsEng, const GTime &obsTime, const GObservation &obs) const
Return spatially integrated data model.
void read(const GXmlElement &xml)
Extract parameter attributes from XML element.
Interface class for COMPTEL observations.
const std::string & unit(void) const
Return parameter unit.
const GCOMModelDRBFitting g_com_drb_fitting_seed
Exception handler interface definition.
std::vector< GModelPar > m_values
Node values.
void read_attributes(const GXmlElement &xml)
Read model attributes.
virtual double eval(const GEvent &event, const GObservation &obs, const bool &gradients=false) const
Evaluate function.
std::vector< double > m_old_phibars
Old Phibar values.
virtual void write(GXmlElement &xml) const
Write model into XML element.
Model registry class definition.
void set_cache(void) const
Set evaluation cache.
virtual GXmlNode * append(const GXmlNode &node)
Append XML child node.
std::vector< GModelPar > m_phibars
Node Phibar values.
std::string parformat(const std::string &s, const int &indent=0)
Convert string in parameter format.
virtual double size(void) const
Return size of event bin.
void append(const double &node)
Append one node to array.
GNodeArray m_nodes
Phibar node values.
virtual ~GCOMModelDRBFitting(void)
Destructor.
const GXmlElement * xml_get_par(const std::string &origin, const GXmlElement &xml, const std::string &name)
Return pointer to parameter with given name in XML element.
const double * pixels(void) const
Returns pointer to pixel data.
void set_pointers(void)
Set pointers.
void init_members(void)
Initialise class members.
Class that handles energies in a unit independent way.
void copy_members(const GCOMModelDRBFitting &model)
Copy class members.
std::string str(const unsigned short int &value)
Convert unsigned short integer value into string.