Commit 24dbc9ae077ebd03eeff99d9acdd7dded7b02932

Authored by Jürgen Knödlseder
1 parent 44df8963

Add likelihood fit event selection hook (#3912)

ChangeLog
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 * Version 2.0.0 released 3 * Version 2.0.0 released
4 ======================== 4 ========================
5 5
  6 + Add likelihood fit event selection hook (#3912)
6 Add GCOMModelDRM class (#3910) 7 Add GCOMModelDRM class (#3910)
7 Add angle(GVector&,GVector&) friend function (#3908) 8 Add angle(GVector&,GVector&) friend function (#3908)
8 Make extension name check case insensitive in GFits::extno() 9 Make extension name check case insensitive in GFits::extno()
@@ -248,6 +248,8 @@ of functions (#3328). @@ -248,6 +248,8 @@ of functions (#3328).
248 248
249 11. Observation module 249 11. Observation module
250 ---------------------- 250 ----------------------
  251 +Add likelihood fit event selection hook (#3912).
  252 +
251 Add numerical gradient step size as member of GObservation to allow instrument- 253 Add numerical gradient step size as member of GObservation to allow instrument-
252 specific step size values. 254 specific step size values.
253 255
doc/source/admin/release_history/2.0.rst
@@ -36,6 +36,8 @@ Bug fixes @@ -36,6 +36,8 @@ Bug fixes
36 Improvements 36 Improvements
37 ------------ 37 ------------
38 38
  39 +* [`3912 <https://cta-redmine.irap.omp.eu/issues/3912>`_] -
  40 + Add likelihood fit event selection hook
39 * [`3908 <https://cta-redmine.irap.omp.eu/issues/3908>`_] - 41 * [`3908 <https://cta-redmine.irap.omp.eu/issues/3908>`_] -
40 Add ``angle(GVector&,GVector&)`` friend function 42 Add ``angle(GVector&,GVector&)`` friend function
41 * Make extension name check case insensitive in ``GFits::extno()`` 43 * Make extension name check case insensitive in ``GFits::extno()``
src/obs/GObservation.cpp
@@ -1399,8 +1399,10 @@ double GObservation::likelihood_poisson_unbinned(const GModels&amp; models, @@ -1399,8 +1399,10 @@ double GObservation::likelihood_poisson_unbinned(const GModels&amp; models,
1399 // Iterate over all events 1399 // Iterate over all events
1400 for (int i = 0; i < nevents; ++i) { 1400 for (int i = 0; i < nevents; ++i) {
1401 1401
1402 - // Get event pointer  
1403 - const GEvent* event = (*events())[i]; 1402 + // Skip events that should not be used
  1403 + if (!use_event_for_likelihood(i)) {
  1404 + continue;
  1405 + }
1404 1406
1405 // Get model value 1407 // Get model value
1406 double model = model_vector[i]; 1408 double model = model_vector[i];
@@ -1533,6 +1535,11 @@ double GObservation::likelihood_poisson_binned(const GModels&amp; models, @@ -1533,6 +1535,11 @@ double GObservation::likelihood_poisson_binned(const GModels&amp; models,
1533 // Iterate over all bins 1535 // Iterate over all bins
1534 for (int i = 0; i < nevents; ++i) { 1536 for (int i = 0; i < nevents; ++i) {
1535 1537
  1538 + // Skip events that should not be used
  1539 + if (!use_event_for_likelihood(i)) {
  1540 + continue;
  1541 + }
  1542 +
1536 // Update number of bins 1543 // Update number of bins
1537 #if defined(G_OPT_DEBUG) 1544 #if defined(G_OPT_DEBUG)
1538 n_bins++; 1545 n_bins++;
@@ -1735,6 +1742,11 @@ double GObservation::likelihood_gaussian_binned(const GModels&amp; models, @@ -1735,6 +1742,11 @@ double GObservation::likelihood_gaussian_binned(const GModels&amp; models,
1735 // Iterate over all bins 1742 // Iterate over all bins
1736 for (int i = 0; i < nevents; ++i) { 1743 for (int i = 0; i < nevents; ++i) {
1737 1744
  1745 + // Skip events that should not be used
  1746 + if (!use_event_for_likelihood(i)) {
  1747 + continue;
  1748 + }
  1749 +
1738 // Get event pointer 1750 // Get event pointer
1739 const GEventBin* bin = 1751 const GEventBin* bin =
1740 (*(static_cast<GEventCube*>(const_cast<GEvents*>(events()))))[i]; 1752 (*(static_cast<GEventCube*>(const_cast<GEvents*>(events()))))[i];
@@ -1824,6 +1836,23 @@ double GObservation::likelihood_gaussian_binned(const GModels&amp; models, @@ -1824,6 +1836,23 @@ double GObservation::likelihood_gaussian_binned(const GModels&amp; models,
1824 } 1836 }
1825 1837
1826 1838
  1839 +/***********************************************************************//**
  1840 + * @brief Check whether bin should be used for likelihood analysis
  1841 + *
  1842 + * @param[in] index Event index.
  1843 + * @return True.
  1844 + *
  1845 + * This is a dummy virtual method that allows implementation of a hook for
  1846 + * event selection in the likelihood computation. The dummy method always
  1847 + * returns true.
  1848 + ***************************************************************************/
  1849 +bool GObservation::use_event_for_likelihood(const int& index) const
  1850 +{
  1851 + // Return true
  1852 + return true;
  1853 +}
  1854 +
  1855 +
1827 /*========================================================================== 1856 /*==========================================================================
1828 = = 1857 = =
1829 = Model gradient methods = 1858 = Model gradient methods =