54#define G_RESPONSE "GCOMObservation::response(GResponse&)"
55#define G_READ "GCOMObservation::read(GXmlElement&)"
56#define G_WRITE "GCOMObservation::write(GXmlElement&)"
57#define G_LOAD_DRB "GCOMObservation::load_drb(GFilename&)"
58#define G_LOAD_DRW "GCOMObservation::load_drw(GFilename&)"
59#define G_LOAD_DRG "GCOMObservation::load_drg(GFilename&)"
60#define G_CONVOLVE "GCOMObservation::convolve(GModels&)"
61#define G_DRM "GCOMObservation::drm(GModels&)"
62#define G_COMPUTE_DRB "GCOMObservation::compute_drb(std::string&, GCOMDri&, "\
63 "int&, int&, int&, int&"
64#define G_COMPUTE_DRB_PHINOR "GCOMObservation::compute_drb_phinor(GCOMDri&)"
65#define G_COMPUTE_DRB_BGDLIXA "GCOMObservation::compute_drb_bgdlixa("\
66 "GCOMDri&, int&, int&, int&, int&)"
67#define G_COMPUTE_DRB_BGDLIXE "GCOMObservation::compute_drb_bgdlixe("\
68 "GCOMDri&, int&, int&, int&, int&)"
69#define G_COMPUTE_DRB_BGDLIXF "GCOMObservation::compute_drb_bgdlixf("\
70 "GCOMDri&, int&, int&, int&, int&)"
269 const std::vector<GFilename>& oadnames,
270 const std::vector<GFilename>& hkdnames,
277 load(evpname, timname, oadnames, hkdnames, bvcname);
404 if (comrsp == NULL) {
405 std::string cls = std::string(
typeid(&rsp).
name());
406 std::string msg =
"Response of type \""+cls+
"\" is "
407 "not a COMPTEL response. Please specify a COMPTEL "
408 "response as argument.";
466 int nevents = model_vector.
size();
469 for (
int i = 0; i < nevents; ++i) {
481 double model_value = model_vector[i] * bin->
size();
484 npred += model_value;
551 std::vector<GFilename> oadnames;
552 for (
int i = 0; i < xml.
elements(
"parameter"); ++i) {
554 if (element->
attribute(
"name") ==
"OAD") {
555 std::string oadname = element->
attribute(
"file");
562 std::vector<GFilename> hkdnames;
563 for (
int i = 0; i < xml.
elements(
"parameter"); ++i) {
565 if (element->
attribute(
"name") ==
"HKD") {
566 std::string hkdname = element->
attribute(
"file");
573 std::string bvcname =
"";
580 load(evpname, timname, oadnames, hkdnames, bvcname);
612 GFilename filename_expanded(iaqname_expanded);
613 if (filename_expanded.
is_fits()) {
712 for (
int i = 0; i < xml.
elements(
"parameter"); ++i) {
714 if (element->
attribute(
"name") ==
"OAD") {
862 const std::vector<GFilename>& oadnames,
863 const std::vector<GFilename>& hkdnames,
888 std::vector<GCOMOads>
oads;
891 for (
int i = 0; i < oadnames.size(); ++i) {
897 if (oad.
size() < 1) {
903 for (; index <
oads.
size(); ++index) {
904 if (oad[0].tstop() <
oads[index][
oads[index].size()-1].tstart()) {
920 for (
int i = 0; i <
oads.
size(); ++i) {
925 for (
int i = 0; i < hkdnames.size(); ++i) {
931 if (hdks.
size() < 1) {
975 std::string msg =
"Events of type \""+cls+
"\" is not a COMPTEL event "
976 "cube. Please specify a COMPTEL event cube when "
977 "using this method.";
988 for (
int i = 0; i < drm_cube.
size(); ++i) {
1036 if (method ==
"PHINOR") {
1039 else if (method ==
"BGDLIXA") {
1042 else if (method ==
"BGDLIXE") {
1045 else if (method ==
"BGDLIXF") {
1049 std::string msg =
"Unknown background method \""+method+
"\". "
1050 "Specify either \"PHINOR\", \"BGDLIXA\" or "
1102 result.append(
"=== GCOMObservation ===");
1122 result.append(
" - ");
1376 std::string msg =
"DRB data cube \""+
drbname+
"\" incompatible with "
1420 std::string msg =
"DRW data cube \""+
drwname+
"\" incompatible with "
1465 std::string msg =
"DRG data cube \""+
drgname+
"\" incompatible with "
1526 bool same_dimension = ((map.
nx() == ref.
nx()) &&
1527 (map.
ny() == ref.
ny()) &&
1531 bool same_projection =
false;
1534 if ((proj_ref == NULL) && (proj_map == NULL)) {
1535 same_projection =
true;
1537 else if ((proj_ref != NULL) && (proj_map != NULL)) {
1538 same_projection = (*proj_map == *proj_ref);
1542 return (same_dimension && same_projection);
1610 std::string msg =
"Observation \""+this->
name()+
"\" ("+this->
id()+
") "
1611 "does not contain a COMPTEL event cube. Please "
1612 "specify a COMPTEL observation containing and event "
1619 std::string msg =
"Specified DRM cube is incompatible with DRE. Please "
1620 "specify a DRM with a data-space definition that is "
1621 "identical to that of the DRE.";
1639 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1640 double sum_dre = 0.0;
1641 double sum_drm = 0.0;
1642 double sum_drg = 0.0;
1643 for (
int ipix = 0; ipix < npix; ++ipix) {
1644 sum_dre += map_dre(ipix, iphibar);
1645 sum_drm += map_drm(ipix, iphibar);
1646 sum_drg += map_drg(ipix, iphibar);
1648 if (sum_drg > 0.0) {
1649 double norm = (sum_dre - sum_drm) / sum_drg;
1650 for (
int ipix = 0; ipix < npix; ++ipix) {
1651 map_drb(ipix, iphibar) = map_drg(ipix, iphibar) *
norm;
1655 for (
int ipix = 0; ipix < npix; ++ipix) {
1656 map_drb(ipix, iphibar) = 0.0;
1662 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1663 for (
int ipix = 0; ipix < npix; ++ipix) {
1664 if (map_drb(ipix, iphibar) < 0.0) {
1665 map_drb(ipix, iphibar) = 0.0;
1702 std::string msg =
"Observation \""+this->
name()+
"\" ("+this->
id()+
") "
1703 "does not contain a COMPTEL event cube. Please "
1704 "specify a COMPTEL observation containing and event "
1711 std::string msg =
"Specified DRM cube is incompatible with DRE. Please "
1712 "specify a DRM with a data-space definition that is "
1713 "identical to that of the DRE.";
1732 int npix = nchi * npsi;
1735 int navgr2 = int(navgr/2);
1738 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1739 for (
int ipix = 0; ipix < npix; ++ipix) {
1740 map_drb(ipix, iphibar) = 0.0;
1741 map_dri(ipix, iphibar) = 0.0;
1746 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1747 double sum_dre = 0.0;
1748 double sum_drm = 0.0;
1749 double sum_drg = 0.0;
1750 for (
int ipix = 0; ipix < npix; ++ipix) {
1751 sum_dre += map_dre(ipix, iphibar);
1752 sum_drm += map_drm(ipix, iphibar);
1753 sum_drg += map_drg(ipix, iphibar);
1755 if (sum_drg > 0.0) {
1756 double norm = (sum_dre - sum_drm) / sum_drg;
1757 for (
int ipix = 0; ipix < npix; ++ipix) {
1758 map_dri(ipix, iphibar) = map_drg(ipix, iphibar) *
norm;
1771 for (
int ichi = 0; ichi < nchi; ++ichi) {
1774 int kchi_min = ichi - nrunav;
1775 int kchi_max = ichi + nrunav;
1779 if (kchi_max >= nchi) {
1780 kchi_max = nchi - 1;
1784 for (
int ipsi = 0; ipsi < npsi; ++ipsi) {
1787 int kpsi_min = ipsi - nrunav;
1788 int kpsi_max = ipsi + nrunav;
1792 if (kpsi_max >= npsi) {
1793 kpsi_max = npsi - 1;
1797 double sum_dre = 0.0;
1798 double sum_drm = 0.0;
1799 double sum_dri = 0.0;
1802 for (
int kchi = kchi_min; kchi <= kchi_max; ++kchi) {
1803 for (
int kpsi = kpsi_min; kpsi <= kpsi_max; ++kpsi) {
1804 int kpix = kchi + kpsi * nchi;
1805 for (
int kphibar = 0; kphibar < nphibar; ++kphibar) {
1806 if (map_drg(kpix, kphibar) != 0.0) {
1807 sum_dre += map_dre(kpix, kphibar);
1808 sum_drm += map_drm(kpix, kphibar);
1809 sum_dri += map_dri(kpix, kphibar);
1816 if (sum_dri != 0.0) {
1817 int ipix = ichi + ipsi * nchi;
1818 double norm = (sum_dre - sum_drm) / sum_dri;
1819 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1820 map_dri(ipix, iphibar) *=
norm;
1837 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1841 &ksel1, &kex1, &kex2, &ksel2);
1844 for (
int ipix = 0; ipix < npix; ++ipix) {
1847 map_drb(ipix, iphibar) = 0.0;
1850 if (map_dri(ipix, iphibar) != 0.0) {
1853 double sum_dri = 0.0;
1857 for (
int kphibar = ksel1; kphibar <= kex1; ++kphibar) {
1858 sum_dri += map_dri(ipix, kphibar);
1863 if (kex2 < nphibar) {
1864 for (
int kphibar = kex2; kphibar <= ksel2; ++kphibar) {
1865 sum_dri += map_dri(ipix, kphibar);
1870 if (sum_dri != 0.0) {
1871 map_drb(ipix, iphibar) = map_dri(ipix, iphibar) / sum_dri;
1890 for (
int ichi = 0; ichi < nchi; ++ichi) {
1893 int kchi_min = ichi - navgr2;
1894 int kchi_max = ichi + navgr2;
1898 if (kchi_max >= nchi) {
1899 kchi_max = nchi - 1;
1903 for (
int ipsi = 0; ipsi < npsi; ++ipsi) {
1906 int kpsi_min = ipsi - navgr2;
1907 int kpsi_max = ipsi + navgr2;
1911 if (kpsi_max >= npsi) {
1912 kpsi_max = npsi - 1;
1916 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1919 double sum_dre = 0.0;
1920 double sum_drm = 0.0;
1921 double sum_drg = 0.0;
1924 for (
int kchi = kchi_min; kchi <= kchi_max; ++kchi) {
1925 for (
int kpsi = kpsi_min; kpsi <= kpsi_max; ++kpsi) {
1926 int kpix = kchi + kpsi * nchi;
1927 sum_dre += map_dre(kpix, iphibar);
1928 sum_drm += map_drm(kpix, iphibar);
1929 sum_drg += map_drg(kpix, iphibar);
1934 int ipix = ichi + ipsi * nchi;
1935 if (sum_drg > 0.0) {
1936 double norm = (sum_dre - sum_drm) / sum_drg;
1937 map_dri(ipix, iphibar) = map_drg(ipix, iphibar) *
norm;
1940 map_dri(ipix, iphibar) = 0.0;
1952 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1956 &ksel1, &kex1, &kex2, &ksel2);
1959 for (
int ipix = 0; ipix < npix; ++ipix) {
1962 if (map_drb(ipix, iphibar) != 0.0) {
1965 double sum_dri = 0.0;
1969 for (
int kphibar = ksel1; kphibar <= kex1; ++kphibar) {
1970 sum_dri += map_dri(ipix, kphibar);
1975 if (kex2 < nphibar) {
1976 for (
int kphibar = kex2; kphibar <= ksel2; ++kphibar) {
1977 sum_dri += map_dri(ipix, kphibar);
1982 map_drb(ipix, iphibar) *= sum_dri;
1991 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
1992 double sum_dre = 0.0;
1993 double sum_drm = 0.0;
1994 double sum_drb = 0.0;
1995 for (
int ipix = 0; ipix < npix; ++ipix) {
1996 sum_dre += map_dre(ipix, iphibar);
1997 sum_drm += map_drm(ipix, iphibar);
1998 sum_drb += map_drb(ipix, iphibar);
2000 if (sum_drb > 0.0) {
2001 double norm = (sum_dre - sum_drm) / sum_drb;
2002 for (
int ipix = 0; ipix < npix; ++ipix) {
2003 map_drb(ipix, iphibar) *=
norm;
2007 for (
int ipix = 0; ipix < npix; ++ipix) {
2008 map_drb(ipix, iphibar) = 0.0;
2014 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2015 for (
int ipix = 0; ipix < npix; ++ipix) {
2016 if (map_drb(ipix, iphibar) < 0.0) {
2017 map_drb(ipix, iphibar) = 0.0;
2053 std::string msg =
"Observation \""+this->
name()+
"\" ("+this->
id()+
") "
2054 "does not contain a COMPTEL event cube. Please "
2055 "specify a COMPTEL observation containing and event "
2062 std::string msg =
"Specified DRM cube is incompatible with DRE. Please "
2063 "specify a DRM with a data-space definition that is "
2064 "identical to that of the DRE.";
2083 int npix = nchi * npsi;
2086 int navgr2 = int(navgr/2);
2089 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2090 for (
int ipix = 0; ipix < npix; ++ipix) {
2091 map_drb(ipix, iphibar) = 0.0;
2092 map_dri(ipix, iphibar) = 0.0;
2097 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2098 double sum_dre = 0.0;
2099 double sum_drm = 0.0;
2100 double sum_drg = 0.0;
2101 for (
int ipix = 0; ipix < npix; ++ipix) {
2102 sum_dre += map_dre(ipix, iphibar);
2103 sum_drm += map_drm(ipix, iphibar);
2104 sum_drg += map_drg(ipix, iphibar);
2106 if (sum_drg > 0.0) {
2107 double norm = (sum_dre - sum_drm) / sum_drg;
2108 for (
int ipix = 0; ipix < npix; ++ipix) {
2109 map_dri(ipix, iphibar) = map_drg(ipix, iphibar) *
norm;
2115 for (
int ichi = 0; ichi < nchi; ++ichi) {
2118 int kchi_min = ichi - navgr2;
2119 int kchi_max = ichi + navgr2;
2123 if (kchi_max >= nchi) {
2124 kchi_max = nchi - 1;
2128 for (
int ipsi = 0; ipsi < npsi; ++ipsi) {
2131 int kpsi_min = ipsi - navgr2;
2132 int kpsi_max = ipsi + navgr2;
2136 if (kpsi_max >= npsi) {
2137 kpsi_max = npsi - 1;
2141 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2149 &ksel1, &kex1, &kex2, &ksel2);
2152 double sum_dre = 0.0;
2153 double sum_drm = 0.0;
2154 double sum_dri = 0.0;
2157 for (
int kchi = kchi_min; kchi <= kchi_max; ++kchi) {
2158 for (
int kpsi = kpsi_min; kpsi <= kpsi_max; ++kpsi) {
2161 int kpix = kchi + kpsi * nchi;
2165 for (
int kphibar = ksel1; kphibar <= kex1; ++kphibar) {
2166 sum_dre += map_dre(kpix, kphibar);
2167 sum_drm += map_drm(kpix, kphibar);
2168 sum_dri += map_dri(kpix, kphibar);
2173 if (kex2 < nphibar) {
2174 for (
int kphibar = kex2; kphibar <= ksel2; ++kphibar) {
2175 sum_dre += map_dre(kpix, kphibar);
2176 sum_drm += map_drm(kpix, kphibar);
2177 sum_dri += map_dri(kpix, kphibar);
2185 int ipix = ichi + ipsi * nchi;
2186 if (sum_dri > 0.0) {
2187 double norm = (sum_dre - sum_drm) / sum_dri;
2188 map_drb(ipix, iphibar) = map_dri(ipix, iphibar) *
norm;
2191 map_drb(ipix, iphibar) = 0.0;
2201 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2202 double sum_dre = 0.0;
2203 double sum_drm = 0.0;
2204 double sum_drb = 0.0;
2205 for (
int ipix = 0; ipix < npix; ++ipix) {
2206 sum_dre += map_dre(ipix, iphibar);
2207 sum_drm += map_drm(ipix, iphibar);
2208 sum_drb += map_drb(ipix, iphibar);
2210 if (sum_drb > 0.0) {
2211 double norm = (sum_dre - sum_drm) / sum_drb;
2212 for (
int ipix = 0; ipix < npix; ++ipix) {
2213 map_drb(ipix, iphibar) *=
norm;
2217 for (
int ipix = 0; ipix < npix; ++ipix) {
2218 map_drb(ipix, iphibar) = 0.0;
2224 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2225 for (
int ipix = 0; ipix < npix; ++ipix) {
2226 if (map_drb(ipix, iphibar) < 0.0) {
2227 map_drb(ipix, iphibar) = 0.0;
2264 std::string msg =
"Observation \""+this->
name()+
"\" ("+this->
id()+
") "
2265 "does not contain a COMPTEL event cube. Please "
2266 "specify a COMPTEL observation containing and event "
2273 std::string msg =
"Specified DRM cube is incompatible with DRE. Please "
2274 "specify a DRM with a data-space definition that is "
2275 "identical to that of the DRE.";
2294 int npix = nchi * npsi;
2297 int navgr2 = int(navgr/2);
2300 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2301 for (
int ipix = 0; ipix < npix; ++ipix) {
2302 map_drb(ipix, iphibar) = 0.0;
2303 map_dri(ipix, iphibar) = 0.0;
2308 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2309 double sum_dre = 0.0;
2310 double sum_drm = 0.0;
2311 double sum_drw = 0.0;
2312 for (
int ipix = 0; ipix < npix; ++ipix) {
2313 sum_dre += map_dre(ipix, iphibar);
2314 sum_drm += map_drm(ipix, iphibar);
2315 sum_drw += map_drw(ipix, iphibar);
2317 if (sum_drw > 0.0) {
2318 double norm = (sum_dre - sum_drm) / sum_drw;
2319 for (
int ipix = 0; ipix < npix; ++ipix) {
2320 map_dri(ipix, iphibar) = map_drw(ipix, iphibar) *
norm;
2326 for (
int ichi = 0; ichi < nchi; ++ichi) {
2329 int kchi_min = ichi - navgr2;
2330 int kchi_max = ichi + navgr2;
2334 if (kchi_max >= nchi) {
2335 kchi_max = nchi - 1;
2339 for (
int ipsi = 0; ipsi < npsi; ++ipsi) {
2342 int kpsi_min = ipsi - navgr2;
2343 int kpsi_max = ipsi + navgr2;
2347 if (kpsi_max >= npsi) {
2348 kpsi_max = npsi - 1;
2352 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2360 &ksel1, &kex1, &kex2, &ksel2);
2363 double sum_dre = 0.0;
2364 double sum_drm = 0.0;
2365 double sum_dri = 0.0;
2368 for (
int kchi = kchi_min; kchi <= kchi_max; ++kchi) {
2369 for (
int kpsi = kpsi_min; kpsi <= kpsi_max; ++kpsi) {
2372 int kpix = kchi + kpsi * nchi;
2376 for (
int kphibar = ksel1; kphibar <= kex1; ++kphibar) {
2377 sum_dre += map_dre(kpix, kphibar);
2378 sum_drm += map_drm(kpix, kphibar);
2379 sum_dri += map_dri(kpix, kphibar);
2384 if (kex2 < nphibar) {
2385 for (
int kphibar = kex2; kphibar <= ksel2; ++kphibar) {
2386 sum_dre += map_dre(kpix, kphibar);
2387 sum_drm += map_drm(kpix, kphibar);
2388 sum_dri += map_dri(kpix, kphibar);
2396 int ipix = ichi + ipsi * nchi;
2397 if (sum_dri > 0.0) {
2398 double norm = (sum_dre - sum_drm) / sum_dri;
2399 map_drb(ipix, iphibar) = map_dri(ipix, iphibar) *
norm;
2402 map_drb(ipix, iphibar) = 0.0;
2412 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2413 double sum_dre = 0.0;
2414 double sum_drm = 0.0;
2415 double sum_drb = 0.0;
2416 for (
int ipix = 0; ipix < npix; ++ipix) {
2417 sum_dre += map_dre(ipix, iphibar);
2418 sum_drm += map_drm(ipix, iphibar);
2419 sum_drb += map_drb(ipix, iphibar);
2421 if (sum_drb > 0.0) {
2422 double norm = (sum_dre - sum_drm) / sum_drb;
2423 for (
int ipix = 0; ipix < npix; ++ipix) {
2424 map_drb(ipix, iphibar) *=
norm;
2428 for (
int ipix = 0; ipix < npix; ++ipix) {
2429 map_drb(ipix, iphibar) = 0.0;
2435 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2436 for (
int ipix = 0; ipix < npix; ++ipix) {
2437 if (map_drb(ipix, iphibar) < 0.0) {
2438 map_drb(ipix, iphibar) = 0.0;
2462 int npix =
drg.npix();
2463 int nphibar =
drg.nmaps();
2466 for (
int ipix = 0; ipix < npix; ++ipix) {
2467 double omega =
drg.solidangle(ipix);
2468 for (
int iphibar = 0; iphibar < nphibar; ++iphibar) {
2469 drg(ipix,iphibar) *= omega;
2507 int imax = nphibar - 1;
2510 int nexcl2 = int(nexcl/2);
2511 int nincl2 = int(nincl/2);
2514 *iex1 = iphibar - nexcl2 - 1;
2515 *iex2 = iphibar + nexcl2 + 1;
2516 *isel1 = iphibar - nincl2;
2517 *isel2 = iphibar + nincl2;
2530 if (*isel2 > imax) {
2543 if (*isel2 == imax) {
2544 *isel1 = nphibar - nincl;
COMPTEL event bin class interface definition.
const GCOMObservation g_obs_com_seed
#define G_COMPUTE_DRB_BGDLIXF
#define G_COMPUTE_DRB_BGDLIXA
#define G_COMPUTE_DRB_PHINOR
#define G_COMPUTE_DRB_BGDLIXE
COMPTEL observation class interface definition.
COMPTEL instrument status class definition.
Implementation of support function used by COMPTEL classes.
Calibration database class interface definition.
Exception handler interface definition.
Abstract FITS extension base class definition.
FITS file class interface definition.
Mathematical function definitions.
Sky model class interface definition.
Constant spectral model class interface definition.
Model container class definition.
Observation registry class definition.
double norm(const GVector &vector)
Computes vector norm.
XML element node class interface definition.
void clear(void)
Clear COMPTEL Solar System Barycentre Data container.
void load(const GFilename &filename)
Load COMPTEL Solar System Barycentre Data FITS file.
bool is_empty(void) const
Signals if there are no Solar System Barycentre Data in container.
std::string print(const GChatter &chatter=NORMAL) const
Print COMPTEL Solar System Barycentre Data container.
COMPTEL Data Space class.
virtual void clear(void)
Clear COMPTEL Data Space.
int nchi(void) const
Return number of Chi bins.
const GSkyMap & map(void) const
Return DRI sky map.
int npsi(void) const
Return number of Psi bins.
int nphibar(void) const
Return number of Phibar bins.
void read(const GFitsImage &image)
Read COMPTEL Data Space from DRI FITS image.
virtual double size(void) const
Return size of event bin.
virtual double counts(void) const
Return number of counts in event bin.
COMPTEL event bin container class.
virtual int size(void) const
Return number of bins in event cube.
const GCOMDri & dre(void) const
Return reference to DRE data.
COMPTEL event list class.
COMPTEL Housekeeping Data collection class.
int size(void) const
Return number of Housekeeping parameters in collection.
void clear(void)
Clear Housekeeping Data collection.
std::string print(const GChatter &chatter=NORMAL) const
Print Housekeeping Data collection.
void extend(const GCOMHkds &hkds)
Extend Housekeeping Data collection.
bool is_empty(void) const
Signals if there are no Housekeeping Data containers in collection.
COMPTEL Orbit Aspect Data container class.
void extend(const GCOMOads &oads)
Append Orbit Aspect Data container.
std::string print(const GChatter &chatter=NORMAL) const
Print COMPTEL Orbit Aspect Data container.
void clear(void)
Clear COMPTEL Orbit Aspect Data container.
int size(void) const
Return number of Orbit Aspect Data in container.
bool is_empty(void) const
Signals if there are no Orbit Aspect Data in container.
GCOMOad & insert(const int &index, const GCOMOad &oad)
Insert Orbit Aspect Data into container.
Interface class for COMPTEL observations.
void free_members(void)
Delete class members.
GCOMDri m_drw
Weighting cube.
GCOMDri drm(const GModels &models) const
Compute DRM cube.
void init_members(void)
Initialise class members.
const GFilename & drename(void) const
Return DRE filename.
GFilename m_drgname
DRG filename.
bool is_unbinned(void) const
Check whether observation is unbinned.
void compute_drb_phinor(const GCOMDri &drm)
Compute DRB cube using PHINOR method.
void load(const GFilename &drename, const GFilename &drbname, const GFilename &drwname, const GFilename &drgname, const GFilename &drxname)
Load data for a binned observation.
GFilename m_drxname
DRX filename.
const GFilename & drgname(void) const
Return DRG filename.
const GFilename & drxname(void) const
Return DRX filename.
double m_ontime
Ontime (sec)
void compute_drb_bgdlixa(const GCOMDri &drm, const int &nrunav=3, const int &navgr=3, const int &nincl=15, const int &nexcl=0)
Compute DRB cube using BGDLIXA method.
void get_bgdlixa_phibar_indices(const int &iphibar, const int &nincl, const int &nexcl, int *isel1, int *iex1, int *iex2, int *isel2) const
Compute Phibar index range for BGDLIXA background method.
bool check_dri(const GCOMDri &map) const
Check if DRI is compatible with event cube.
virtual double npred(const GModel &model) const
Return total number of predicted counts for one model.
const GCOMDri & drb(void) const
Return background model.
virtual double ontime(void) const
Return ontime.
virtual GCOMObservation * clone(void) const
Clone COMPTEL observation.
GCOMBvcs m_bvcs
Solar System Barycentre Data.
void read_attributes(const GFitsHDU *hdu)
Read observation attributes.
const int & phi_first(void) const
Return index of first Phibar layer to be used for likelihood fitting.
void compute_drb_bgdlixe(const GCOMDri &drm, const int &nrunav=3, const int &navgr=3, const int &nincl=15, const int &nexcl=0)
Compute DRB cube using BGDLIXE method.
const GCOMOads & oads(void) const
Return Orbit Aspect Data.
int m_phi_last
Last Phibar layer to use for likelihood.
GFilename m_drename
DRE filename.
void load_drg(const GFilename &drgname)
Load geometry factors from DRG file.
virtual std::string instrument(void) const
Return instrument.
double m_livetime
Livetime (sec)
virtual double grad_step_size(const GModelPar &par) const
Return gradient step size for a given model parameter.
std::vector< GFilename > m_hkdnames
HKD filenames.
virtual void read(const GXmlElement &xml)
Read observation from XML element.
void compute_drb_bgdlixf(const GCOMDri &drm, const int &nrunav=3, const int &navgr=3, const int &nincl=15, const int &nexcl=0)
Compute DRB cube using BGDLIXF method.
GSkyMap get_weighted_drg_map(void) const
Return weighted DRG map.
void compute_drb(const std::string &method, const GCOMDri &drm, const int &nrunav=3, const int &navgr=3, const int &nincl=15, const int &nexcl=0)
Compute DRB cube.
virtual void clear(void)
Clear COMPTEL observation.
GCOMHkds m_hkds
Housekeeping Data.
double m_obs_id
Observation ID.
virtual void write(GXmlElement &xml) const
Write observation into XML element.
GCOMOads m_oads
Orbit Aspect Data.
int m_phi_first
First Phibar layer to use for likelihood.
GCOMObservation(void)
Void constructor.
GCOMTim m_tim
COMPTEL Good Time Intervals.
GCOMDri m_drg
Geometry factors.
virtual const GCOMResponse * response(void) const
Return response function.
virtual std::string print(const GChatter &chatter=NORMAL) const
Print observation information.
const GCOMDri & drw(void) const
Return weighting cube.
GCOMDri m_drb
Background model.
bool is_binned(void) const
Check whether observation is binned.
void load_dre(const GFilename &drename)
Load event cube data from DRE file.
const int & phi_last(void) const
Return index of last Phibar layer to be used for likelihood fitting.
void write_attributes(GFitsHDU *hdu) const
Write observation attributes.
void load_drw(const GFilename &drwname)
Load weighting cube from DRW file.
const GFilename & drwname(void) const
Return DRW filename.
double m_ewidth
Energy width (MeV)
const GFilename & rspname(void) const
Return response cache filename.
GFilename m_drbname
DRB filename.
GFilename m_evpname
EVP filename.
virtual bool use_event_for_likelihood(const int &index) const
Check whether bin should be used for likelihood analysis.
const GCOMDri & drx(void) const
Return exposure.
double m_deadc
Deadtime correction.
const GCOMDri & drg(void) const
Return geometry factors.
virtual double livetime(void) const
Return livetime.
const GFilename & drbname(void) const
Return DRB filename.
GFilename m_timname
TIM filename.
GFilename m_drwname
DRW filename.
GCOMResponse m_response
Response functions.
std::vector< GFilename > m_oadnames
OAD filenames.
virtual ~GCOMObservation(void)
Destructor.
std::string m_instrument
Instrument name.
GFilename m_bvcname
BVC filename.
void load_drx(const GFilename &drxname)
Load exposure from DRX file.
void copy_members(const GCOMObservation &obs)
Copy class members.
void load_drb(const GFilename &drbname)
Load background model from DRB file.
virtual GCOMObservation & operator=(const GCOMObservation &obs)
Assignment operator.
GCOMDri m_drx
Exposure map.
GFilename m_rspname
Response cache filename.
Interface for the COMPTEL instrument response function.
void save_cache(const GFilename &filename) const
Save response cache.
const std::string & rspname(void) const
Return response name.
void caldb(const GCaldb &caldb)
Set calibration database.
void load_cache(const GFilename &filename)
Load response cache.
virtual void clear(void)
Clear instance.
void load(const std::string &rspname)
Load COMPTEL response.
const GGti & gti(void) const
Return Good Time Intervals.
virtual void clear(void)
Clear COMPTEL good time intervals.
virtual std::string print(const GChatter &chatter=NORMAL) const
Print COMPTEL Good Time Intervals.
void load(const GFilename &filename, const std::string &usage="YES", const std::string &mode="NORMAL")
Load COMPTEL Good Time Intervals from FITS file.
Calibration database class.
double MeV(void) const
Return energy in MeV.
Abstract interface for the event bin class.
virtual double size(void) const =0
Abstract event bin container class.
Abstract event container class.
void gti(const GGti >i)
Set Good Time Intervals.
virtual void read(const GFits &file)=0
virtual std::string print(const GChatter &chatter=NORMAL) const =0
Print content of object.
const GEnergy & emax(void) const
Return maximum energy.
const GEnergy & emin(void) const
Return minimum energy.
bool is_fits(void) const
Checks whether file is a FITS file.
bool exists(void) const
Checks whether file exists.
bool is_empty(void) const
Signal if filename is empty.
void clear(void)
Clear file name.
Abstract FITS extension base class.
bool has_card(const int &cardno) const
Check existence of header card.
double real(const std::string &keyname) const
Return card value as double precision.
std::string string(const std::string &keyname) const
Return card value as string.
Abstract FITS image base class.
GFitsImage * image(const int &extno)
Get pointer to image HDU.
void close(void)
Close FITS file.
int size(void) const
Return number of Good Time Intervals.
const double & ontime(void) const
Returns ontime.
double eval(const GEvent &event, const GObservation &obs, const bool &gradients=false) const
Evaluate sum of all models.
GModel * append(const GModel &model)
Append model to container.
Interface definition for the observation registry class.
Abstract observation base class.
const std::string & statistic(void) const
Return optimizer statistic.
virtual double model(const GModels &models, const GEvent &event, GVector *gradients=NULL) const
Return model value and (optionally) gradients.
const std::string & id(void) const
Return observation identifier.
const std::string & name(void) const
Return observation name.
virtual GEvents * events(void)
Return events.
void init_members(void)
Initialise class members.
virtual GObservation & operator=(const GObservation &obs)
Assignment operator.
GEvents * m_events
Pointer to event container.
void free_members(void)
Delete class members.
std::string m_name
Observation name.
std::string m_id
Observation identifier.
Abstract instrument response base class.
const int & nmaps(void) const
Returns number of maps.
const int & nx(void) const
Returns number of pixels in x coordinate.
const int & npix(void) const
Returns number of pixels.
const int & ny(void) const
Returns number of pixels in y coordinate.
const GSkyProjection * projection(void) const
Returns pointer to sky projection.
Abstract sky projection base class.
const int & size(void) const
Return size of vector.
const GXmlAttribute * attribute(const int &index) const
Return attribute.
bool has_attribute(const std::string &name) const
Check if element has a given attribute.
virtual GXmlNode * append(const GXmlNode &node)
Append XML child node.
virtual void remove(const int &index)
Remove XML child node.
virtual GXmlElement * element(const int &index)
Return pointer to GXMLElement child.
virtual int elements(void) const
Return number of GXMLElement children of node.
std::string parformat(const std::string &s, const int &indent=0)
Convert string in parameter format.
std::string str(const unsigned short int &value)
Convert unsigned short integer value into string.
std::string xml_get_attr(const std::string &origin, const GXmlElement &xml, const std::string &name, const std::string &attribute)
Return attribute value for a given parameter in XML element.
int toint(const std::string &arg)
Convert string into integer value.
GXmlElement * xml_need_par(const std::string &origin, GXmlElement &xml, const std::string &name)
Return pointer to parameter with given name in XML element.
GFilename xml_file_reduce(const GXmlElement &xml, const std::string &filename)
Reduce file name provided for writing as XML attribute.
void com_wcs_mer2car(GSkyMap &map)
Changes Mercator's projection to cartesian projection.
GChatter reduce(const GChatter &chatter)
Reduce chattiness by one level.
bool xml_has_par(const GXmlElement &xml, const std::string &name)
Checks if parameter with given name in XML element exists.
GFilename xml_file_expand(const GXmlElement &xml, const std::string &filename)
Expand file name provided as XML attribute for loading.