Commit f369b08f46ce44634f83fabbc312982367bd5049
1 parent
f89f94b3
Integrate code (#1872).
Changed method name component_scale() to scale(). Changed member names from m_component_names to m_names and m_component_scales to m_scales.
Showing
6 changed files
with
63 additions
and
61 deletions
include/GModelSpatialComposite.hpp
| @@ -79,10 +79,10 @@ public: | @@ -79,10 +79,10 @@ public: | ||
| 79 | int components(void) const; | 79 | int components(void) const; |
| 80 | void append(const GModelSpatial& component, | 80 | void append(const GModelSpatial& component, |
| 81 | const std::string& name = "", | 81 | const std::string& name = "", |
| 82 | - const double& scale = 1.); | 82 | + const double& scale = 1.0); |
| 83 | const GModelSpatial* component(const int& index) const; | 83 | const GModelSpatial* component(const int& index) const; |
| 84 | const GModelSpatial* component(const std::string& name) const; | 84 | const GModelSpatial* component(const std::string& name) const; |
| 85 | - double component_scale(const int& index) const; | 85 | + double scale(const int& index) const; |
| 86 | double sum_of_scales(void) const; | 86 | double sum_of_scales(void) const; |
| 87 | 87 | ||
| 88 | 88 | ||
| @@ -93,10 +93,10 @@ protected: | @@ -93,10 +93,10 @@ protected: | ||
| 93 | void free_members(void); | 93 | void free_members(void); |
| 94 | 94 | ||
| 95 | // Protected members | 95 | // Protected members |
| 96 | - std::string m_type; //!< Model type | ||
| 97 | - std::vector<GModelSpatial*> m_components; //!< Components | ||
| 98 | - std::vector<std::string> m_component_names; //!< Component names | ||
| 99 | - std::vector<double> m_component_scales; //!< Component scales | 96 | + std::string m_type; //!< Model type |
| 97 | + std::vector<GModelSpatial*> m_components; //!< Components | ||
| 98 | + std::vector<std::string> m_names; //!< Component names | ||
| 99 | + std::vector<double> m_scales; //!< Component scales | ||
| 100 | }; | 100 | }; |
| 101 | 101 | ||
| 102 | 102 |
inst/cta/src/GCTAResponseCube.cpp
| @@ -1530,14 +1530,16 @@ double GCTAResponseCube::irf_composite(const GEvent& event, | @@ -1530,14 +1530,16 @@ double GCTAResponseCube::irf_composite(const GEvent& event, | ||
| 1530 | GSource src(source.name(), spat, source.energy(), source.time()); | 1530 | GSource src(source.name(), spat, source.energy(), source.time()); |
| 1531 | 1531 | ||
| 1532 | // Compute irf value | 1532 | // Compute irf value |
| 1533 | - irf += this->irf(event, source, obs) * model->component_scale(i); | 1533 | + irf += this->irf(event, source, obs) * model->scale(i); |
| 1534 | 1534 | ||
| 1535 | } | 1535 | } |
| 1536 | 1536 | ||
| 1537 | // Divide by number of model components | 1537 | // Divide by number of model components |
| 1538 | - if (model->sum_of_scales() > 0) { | ||
| 1539 | - irf /= model->sum_of_scales(); | 1538 | + double sum = model->sum_of_scales(); |
| 1539 | + if (sum > 0.0) { | ||
| 1540 | + irf /= sum; | ||
| 1540 | } | 1541 | } |
| 1541 | 1542 | ||
| 1543 | + // Return IRF value | ||
| 1542 | return irf; | 1544 | return irf; |
| 1543 | } | 1545 | } |
inst/cta/src/GCTAResponseIrf.cpp
| @@ -2883,13 +2883,14 @@ double GCTAResponseIrf::irf_composite(const GEvent& event, | @@ -2883,13 +2883,14 @@ double GCTAResponseIrf::irf_composite(const GEvent& event, | ||
| 2883 | GSource src(source.name(), spat, source.energy(), source.time()); | 2883 | GSource src(source.name(), spat, source.energy(), source.time()); |
| 2884 | 2884 | ||
| 2885 | // Compute irf value | 2885 | // Compute irf value |
| 2886 | - irf += this->irf(event, src, obs) * model->component_scale(i); | 2886 | + irf += this->irf(event, src, obs) * model->scale(i); |
| 2887 | 2887 | ||
| 2888 | } | 2888 | } |
| 2889 | 2889 | ||
| 2890 | // Divide by number of model components | 2890 | // Divide by number of model components |
| 2891 | - if (model->sum_of_scales() > 0) { | ||
| 2892 | - irf /= model->sum_of_scales(); | 2891 | + double sum = model->sum_of_scales(); |
| 2892 | + if (sum > 0.0) { | ||
| 2893 | + irf /= sum; | ||
| 2893 | } | 2894 | } |
| 2894 | 2895 | ||
| 2895 | // Return IRF value | 2896 | // Return IRF value |
| @@ -3536,14 +3537,15 @@ double GCTAResponseIrf::nroi_composite(const GModelSky& model, | @@ -3536,14 +3537,15 @@ double GCTAResponseIrf::nroi_composite(const GModelSky& model, | ||
| 3536 | sky.spatial(comp->component(i)); | 3537 | sky.spatial(comp->component(i)); |
| 3537 | 3538 | ||
| 3538 | // Compute nroi | 3539 | // Compute nroi |
| 3539 | - nroi += this->nroi(sky, srcEng, srcTime, obsEng, obsTime, obs) | ||
| 3540 | - * comp->component_scale(i); | 3540 | + nroi += this->nroi(sky, srcEng, srcTime, obsEng, obsTime, obs) * |
| 3541 | + comp->scale(i); | ||
| 3541 | 3542 | ||
| 3542 | } | 3543 | } |
| 3543 | 3544 | ||
| 3544 | // Divide by number of model components | 3545 | // Divide by number of model components |
| 3545 | - if (comp->sum_of_scales() > 0) { | ||
| 3546 | - nroi /= comp->sum_of_scales(); | 3546 | + double sum = comp->sum_of_scales(); |
| 3547 | + if (sum > 0.0) { | ||
| 3548 | + nroi /= sum; | ||
| 3547 | } | 3549 | } |
| 3548 | 3550 | ||
| 3549 | // Return nroi | 3551 | // Return nroi |
pyext/GModelSpatialComposite.i
| @@ -64,10 +64,10 @@ public: | @@ -64,10 +64,10 @@ public: | ||
| 64 | int components(void) const; | 64 | int components(void) const; |
| 65 | void append(const GModelSpatial& component, | 65 | void append(const GModelSpatial& component, |
| 66 | const std::string& name = "", | 66 | const std::string& name = "", |
| 67 | - const double& scale = 1.); | 67 | + const double& scale = 1.0); |
| 68 | const GModelSpatial* component(const int& index) const; | 68 | const GModelSpatial* component(const int& index) const; |
| 69 | const GModelSpatial* component(const std::string& name) const; | 69 | const GModelSpatial* component(const std::string& name) const; |
| 70 | - double component_scale(const int& index) const; | 70 | + double scale(const int& index) const; |
| 71 | double sum_of_scales(void) const; | 71 | double sum_of_scales(void) const; |
| 72 | }; | 72 | }; |
| 73 | 73 |
src/model/GModelSpatialComposite.cpp
| @@ -245,8 +245,7 @@ double GModelSpatialComposite::eval(const GPhoton& photon, | @@ -245,8 +245,7 @@ double GModelSpatialComposite::eval(const GPhoton& photon, | ||
| 245 | 245 | ||
| 246 | // Sum over all components | 246 | // Sum over all components |
| 247 | for (int i = 0; i < m_components.size(); ++i) { | 247 | for (int i = 0; i < m_components.size(); ++i) { |
| 248 | - value += m_components[i]->eval(photon, gradients) | ||
| 249 | - * m_component_scales[i]; | 248 | + value += m_components[i]->eval(photon, gradients) * m_scales[i]; |
| 250 | } | 249 | } |
| 251 | 250 | ||
| 252 | // Normalise sum by sum of scales | 251 | // Normalise sum by sum of scales |
| @@ -280,10 +279,10 @@ GSkyDir GModelSpatialComposite::mc(const GEnergy& energy, | @@ -280,10 +279,10 @@ GSkyDir GModelSpatialComposite::mc(const GEnergy& energy, | ||
| 280 | double random = ran.uniform() * sum_of_scales(); | 279 | double random = ran.uniform() * sum_of_scales(); |
| 281 | 280 | ||
| 282 | // Find index of chosen model component | 281 | // Find index of chosen model component |
| 283 | - double sum = 0.; | ||
| 284 | - int index = 0; | ||
| 285 | - for (int i = 0; i < m_component_scales.size(); ++i) { | ||
| 286 | - sum += m_component_scales[i]; | 282 | + double sum = 0.0; |
| 283 | + int index = 0; | ||
| 284 | + for (int i = 0; i < m_scales.size(); ++i) { | ||
| 285 | + sum += m_scales[i]; | ||
| 287 | if (random <= sum) { | 286 | if (random <= sum) { |
| 288 | index = i; | 287 | index = i; |
| 289 | break; | 288 | break; |
| @@ -320,8 +319,7 @@ bool GModelSpatialComposite::contains(const GSkyDir& dir, | @@ -320,8 +319,7 @@ bool GModelSpatialComposite::contains(const GSkyDir& dir, | ||
| 320 | 319 | ||
| 321 | // Loop over all components | 320 | // Loop over all components |
| 322 | for (int i = 0; i < m_components.size(); ++i) { | 321 | for (int i = 0; i < m_components.size(); ++i) { |
| 323 | - if (m_components[i]->contains(dir, margin) | ||
| 324 | - && m_component_scales[i] != 0) { | 322 | + if (m_components[i]->contains(dir, margin) && m_scales[i] != 0.0) { |
| 325 | containment = true; | 323 | containment = true; |
| 326 | break; | 324 | break; |
| 327 | } | 325 | } |
| @@ -357,10 +355,10 @@ void GModelSpatialComposite::read(const GXmlElement& xml) | @@ -357,10 +355,10 @@ void GModelSpatialComposite::read(const GXmlElement& xml) | ||
| 357 | GModelSpatial* ptr = registry.alloc(*spec); | 355 | GModelSpatial* ptr = registry.alloc(*spec); |
| 358 | 356 | ||
| 359 | // Get component attribute from XML file | 357 | // Get component attribute from XML file |
| 360 | - std::string component_name = spec->attribute("component"); | 358 | + std::string name = spec->attribute("component"); |
| 361 | 359 | ||
| 362 | // Initialise scale | 360 | // Initialise scale |
| 363 | - double scale = 1.; | 361 | + double scale = 1.0; |
| 364 | 362 | ||
| 365 | // Get scale value | 363 | // Get scale value |
| 366 | if (spec-> has_attribute("scale")) { | 364 | if (spec-> has_attribute("scale")) { |
| @@ -368,7 +366,7 @@ void GModelSpatialComposite::read(const GXmlElement& xml) | @@ -368,7 +366,7 @@ void GModelSpatialComposite::read(const GXmlElement& xml) | ||
| 368 | } | 366 | } |
| 369 | 367 | ||
| 370 | // Append spatial component to container | 368 | // Append spatial component to container |
| 371 | - append(*ptr, component_name, scale); | 369 | + append(*ptr, name, scale); |
| 372 | 370 | ||
| 373 | } // endfor: loop over components | 371 | } // endfor: loop over components |
| 374 | 372 | ||
| @@ -418,8 +416,7 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | @@ -418,8 +416,7 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | ||
| 418 | // Find XML element with matching name | 416 | // Find XML element with matching name |
| 419 | GXmlElement *matching_model = NULL; | 417 | GXmlElement *matching_model = NULL; |
| 420 | for (int k = 0; k < xml.elements("spatialModel"); ++k) { | 418 | for (int k = 0; k < xml.elements("spatialModel"); ++k) { |
| 421 | - if (xml.element("spatialModel", k)->attribute("name") == | ||
| 422 | - m_component_names[i]) { | 419 | + if (xml.element("spatialModel", k)->attribute("name") == m_names[i]) { |
| 423 | matching_model = xml.element("spatialModel", k); | 420 | matching_model = xml.element("spatialModel", k); |
| 424 | break; | 421 | break; |
| 425 | } | 422 | } |
| @@ -450,8 +447,8 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | @@ -450,8 +447,8 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | ||
| 450 | spatial->write(*matching_model); | 447 | spatial->write(*matching_model); |
| 451 | 448 | ||
| 452 | // Write scale to XML element if needed | 449 | // Write scale to XML element if needed |
| 453 | - if (m_component_scales[i] != 1. || matching_model->has_attribute("scale")) { | ||
| 454 | - matching_model->attribute("scale", gammalib::str(m_component_scales[i])); | 450 | + if (m_scales[i] != 1.0 || matching_model->has_attribute("scale")) { |
| 451 | + matching_model->attribute("scale", gammalib::str(m_scales[i])); | ||
| 455 | } | 452 | } |
| 456 | } | 453 | } |
| 457 | 454 | ||
| @@ -461,8 +458,8 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | @@ -461,8 +458,8 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | ||
| 461 | spatial->write(element); | 458 | spatial->write(element); |
| 462 | 459 | ||
| 463 | // Write scale to XML element if needed | 460 | // Write scale to XML element if needed |
| 464 | - if (m_component_scales[i] != 1.) { | ||
| 465 | - element.attribute("scale", gammalib::str(m_component_scales[i])); | 461 | + if (m_scales[i] != 1.0) { |
| 462 | + element.attribute("scale", gammalib::str(m_scales[i])); | ||
| 466 | } | 463 | } |
| 467 | xml.append(element); | 464 | xml.append(element); |
| 468 | } | 465 | } |
| @@ -482,14 +479,15 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | @@ -482,14 +479,15 @@ void GModelSpatialComposite::write(GXmlElement& xml) const | ||
| 482 | /***********************************************************************//** | 479 | /***********************************************************************//** |
| 483 | * @brief Append spatial component | 480 | * @brief Append spatial component |
| 484 | * | 481 | * |
| 485 | - * @param[in] component Spatial model component to append | ||
| 486 | - * @param[in] name Name of spatial model (can be empty) | ||
| 487 | - * | 482 | + * @param[in] component Spatial model component to append. |
| 483 | + * @param[in] name Name of spatial model (can be empty). | ||
| 484 | + * @param[in] scale Optional spatial model scaling factor. | ||
| 485 | + * | ||
| 488 | * Appends a spatial component to the composite model | 486 | * Appends a spatial component to the composite model |
| 489 | ***************************************************************************/ | 487 | ***************************************************************************/ |
| 490 | void GModelSpatialComposite::append(const GModelSpatial& component, | 488 | void GModelSpatialComposite::append(const GModelSpatial& component, |
| 491 | const std::string& name, | 489 | const std::string& name, |
| 492 | - const double& scale) | 490 | + const double& scale) |
| 493 | { | 491 | { |
| 494 | // Append model container | 492 | // Append model container |
| 495 | m_components.push_back(component.clone()); | 493 | m_components.push_back(component.clone()); |
| @@ -502,7 +500,7 @@ void GModelSpatialComposite::append(const GModelSpatial& component, | @@ -502,7 +500,7 @@ void GModelSpatialComposite::append(const GModelSpatial& component, | ||
| 502 | : gammalib::str(m_components.size()); | 500 | : gammalib::str(m_components.size()); |
| 503 | 501 | ||
| 504 | // Check if component name is unique, throw exception if not | 502 | // Check if component name is unique, throw exception if not |
| 505 | - if (gammalib::contains(m_component_names, component_name)) { | 503 | + if (gammalib::contains(m_names, component_name)) { |
| 506 | std::string msg = "Attempt to append component \""+component_name+"\" " | 504 | std::string msg = "Attempt to append component \""+component_name+"\" " |
| 507 | "to composite spatial model, but a component with the " | 505 | "to composite spatial model, but a component with the " |
| 508 | "same name exists already. Each component needs a " | 506 | "same name exists already. Each component needs a " |
| @@ -511,7 +509,7 @@ void GModelSpatialComposite::append(const GModelSpatial& component, | @@ -511,7 +509,7 @@ void GModelSpatialComposite::append(const GModelSpatial& component, | ||
| 511 | } | 509 | } |
| 512 | 510 | ||
| 513 | // Add component name | 511 | // Add component name |
| 514 | - m_component_names.push_back(component_name); | 512 | + m_names.push_back(component_name); |
| 515 | 513 | ||
| 516 | // Get number of spectral parameters from model | 514 | // Get number of spectral parameters from model |
| 517 | int npars = m_components[index]->size(); | 515 | int npars = m_components[index]->size(); |
| @@ -530,7 +528,8 @@ void GModelSpatialComposite::append(const GModelSpatial& component, | @@ -530,7 +528,8 @@ void GModelSpatialComposite::append(const GModelSpatial& component, | ||
| 530 | 528 | ||
| 531 | } // endfor: loop over model parameters | 529 | } // endfor: loop over model parameters |
| 532 | 530 | ||
| 533 | - m_component_scales.push_back(scale); | 531 | + // Push back model scale |
| 532 | + m_scales.push_back(scale); | ||
| 534 | 533 | ||
| 535 | // Return | 534 | // Return |
| 536 | return; | 535 | return; |
| @@ -576,8 +575,8 @@ const GModelSpatial* GModelSpatialComposite::component(const std::string& name) | @@ -576,8 +575,8 @@ const GModelSpatial* GModelSpatialComposite::component(const std::string& name) | ||
| 576 | { | 575 | { |
| 577 | // Check if model name is found | 576 | // Check if model name is found |
| 578 | int index = -1; | 577 | int index = -1; |
| 579 | - for (int i = 0; i < m_component_names.size(); ++i) { | ||
| 580 | - if (m_component_names[i] == name) { | 578 | + for (int i = 0; i < m_names.size(); ++i) { |
| 579 | + if (m_names[i] == name) { | ||
| 581 | index = i; | 580 | index = i; |
| 582 | break; | 581 | break; |
| 583 | } | 582 | } |
| @@ -605,7 +604,7 @@ const GModelSpatial* GModelSpatialComposite::component(const std::string& name) | @@ -605,7 +604,7 @@ const GModelSpatial* GModelSpatialComposite::component(const std::string& name) | ||
| 605 | * | 604 | * |
| 606 | * Returns the scale of a spatial component to the composite model | 605 | * Returns the scale of a spatial component to the composite model |
| 607 | ***************************************************************************/ | 606 | ***************************************************************************/ |
| 608 | -double GModelSpatialComposite::component_scale(const int& index) const | 607 | +double GModelSpatialComposite::scale(const int& index) const |
| 609 | { | 608 | { |
| 610 | // Check if index is in validity range | 609 | // Check if index is in validity range |
| 611 | if (index < 0 || index >= m_components.size()) { | 610 | if (index < 0 || index >= m_components.size()) { |
| @@ -613,25 +612,26 @@ double GModelSpatialComposite::component_scale(const int& index) const | @@ -613,25 +612,26 @@ double GModelSpatialComposite::component_scale(const int& index) const | ||
| 613 | index, m_components.size()); | 612 | index, m_components.size()); |
| 614 | } | 613 | } |
| 615 | 614 | ||
| 616 | - // Return spatial component | ||
| 617 | - return m_component_scales[index]; | 615 | + // Return spatial component scale |
| 616 | + return m_scales[index]; | ||
| 618 | } | 617 | } |
| 619 | 618 | ||
| 619 | + | ||
| 620 | /***********************************************************************//** | 620 | /***********************************************************************//** |
| 621 | - * @brief Returns sum over all scales | 621 | + * @brief Returns sum of all model scales |
| 622 | * | 622 | * |
| 623 | - * @return sum | 623 | + * @return Sum of all model scales |
| 624 | ***************************************************************************/ | 624 | ***************************************************************************/ |
| 625 | double GModelSpatialComposite::sum_of_scales(void) const | 625 | double GModelSpatialComposite::sum_of_scales(void) const |
| 626 | { | 626 | { |
| 627 | // Initialise sum | 627 | // Initialise sum |
| 628 | - double sum = 0.; | 628 | + double sum = 0.0; |
| 629 | 629 | ||
| 630 | // Loop over all component scales | 630 | // Loop over all component scales |
| 631 | - for (int i = 0; i < m_component_scales.size(); ++i) { | 631 | + for (int i = 0; i < m_scales.size(); ++i) { |
| 632 | 632 | ||
| 633 | // Add scale to sum | 633 | // Add scale to sum |
| 634 | - sum += m_component_scales[i]; | 634 | + sum += m_scales[i]; |
| 635 | } | 635 | } |
| 636 | 636 | ||
| 637 | // Return sum | 637 | // Return sum |
| @@ -690,8 +690,8 @@ void GModelSpatialComposite::init_members(void) | @@ -690,8 +690,8 @@ void GModelSpatialComposite::init_members(void) | ||
| 690 | 690 | ||
| 691 | // Initialise models vector | 691 | // Initialise models vector |
| 692 | m_components.clear(); | 692 | m_components.clear(); |
| 693 | - m_component_names.clear(); | ||
| 694 | - m_component_scales.clear(); | 693 | + m_names.clear(); |
| 694 | + m_scales.clear(); | ||
| 695 | 695 | ||
| 696 | // Return | 696 | // Return |
| 697 | return; | 697 | return; |
| @@ -706,9 +706,9 @@ void GModelSpatialComposite::init_members(void) | @@ -706,9 +706,9 @@ void GModelSpatialComposite::init_members(void) | ||
| 706 | void GModelSpatialComposite::copy_members(const GModelSpatialComposite& model) | 706 | void GModelSpatialComposite::copy_members(const GModelSpatialComposite& model) |
| 707 | { | 707 | { |
| 708 | // Copy members | 708 | // Copy members |
| 709 | - m_type = model.m_type; | ||
| 710 | - m_component_names = model.m_component_names; | ||
| 711 | - m_component_scales = model.m_component_scales; | 709 | + m_type = model.m_type; |
| 710 | + m_names = model.m_names; | ||
| 711 | + m_scales = model.m_scales; | ||
| 712 | 712 | ||
| 713 | // Initialise components | 713 | // Initialise components |
| 714 | m_components.clear(); | 714 | m_components.clear(); |
| @@ -755,5 +755,3 @@ void GModelSpatialComposite::free_members(void) | @@ -755,5 +755,3 @@ void GModelSpatialComposite::free_members(void) | ||
| 755 | // Return | 755 | // Return |
| 756 | return; | 756 | return; |
| 757 | } | 757 | } |
| 758 | - | ||
| 759 | - |
test/test_GModel.cpp
| @@ -1433,8 +1433,8 @@ void TestGModel::test_spatial_composite(void) | @@ -1433,8 +1433,8 @@ void TestGModel::test_spatial_composite(void) | ||
| 1433 | GModelSpatialComposite model2(*element); | 1433 | GModelSpatialComposite model2(*element); |
| 1434 | test_value(model2.size(), 5); | 1434 | test_value(model2.size(), 5); |
| 1435 | test_value(model2.type(), "Composite", "Check model type"); | 1435 | test_value(model2.type(), "Composite", "Check model type"); |
| 1436 | - test_value(model2.component_scale(0), 1.0); | ||
| 1437 | - test_value(model2.component_scale(1), 3.0); | 1436 | + test_value(model2.scale(0), 1.0); |
| 1437 | + test_value(model2.scale(1), 3.0); | ||
| 1438 | test_value(model2.sum_of_scales(), 4.0); | 1438 | test_value(model2.sum_of_scales(), 4.0); |
| 1439 | 1439 | ||
| 1440 | // Test access of individual parameters | 1440 | // Test access of individual parameters |