Commit ab095b4b4795f6437adb0df80f2fc02ada76a2fd

Authored by Jürgen Knödlseder
2 parents a6dd93fd 11742474

Merge branch 'integration' into devel

1 Juergen Knoedlseder (jurgen.knodlseder@irap.omp.eu) 1 Juergen Knoedlseder (jurgen.knodlseder@irap.omp.eu)
2 Jean-Baptiste Cayrou (cayrou@etud.insa-toulouse.fr) 2 Jean-Baptiste Cayrou (cayrou@etud.insa-toulouse.fr)
3 Christoph Deil (Christoph.Deil@mpi-hd.mpg.de) 3 Christoph Deil (Christoph.Deil@mpi-hd.mpg.de)
4 - 4 +Michael Mayer (michael.mayer@desy.de)
ChangeLog
1 -2013-11-19 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> 1 +2013-11-20 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
2 2
3 * Version 0.7.0 released 3 * Version 0.7.0 released
4 ======================== 4 ========================
@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 Adapt to GammaLib-00-08-00 interface 6 Adapt to GammaLib-00-08-00 interface
7 ctobssim now only simulates events within ROI and supports 7 ctobssim now only simulates events within ROI and supports
8 all kinds of data space models 8 all kinds of data space models
  9 + ctbin now implements LIN and FILE binning algorithms
9 10
10 2012-12-21 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> 11 2012-12-21 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
11 12
@@ -2,7 +2,7 @@ New Features and Important Changes in ctools 00-07-00 @@ -2,7 +2,7 @@ New Features and Important Changes in ctools 00-07-00
2 2
3 Author(s) : Juergen Knoedlseder 3 Author(s) : Juergen Knoedlseder
4 4
5 -19 November 2013 5 +20 November 2013
6 6
7 7
8 1. Introduction 8 1. Introduction
@@ -45,7 +45,12 @@ None @@ -45,7 +45,12 @@ None
45 45
46 6. ctbin - CTA event binning 46 6. ctbin - CTA event binning
47 ---------------------------- 47 ----------------------------
48 -None 48 +The ebinalg parameter is now used to specify the type of binning.
  49 +Linear (LIN) binning and binning retrieved from a FITS file (FILE)
  50 +is now supported. For the latter, an extension named EBOUNDS or
  51 +ENERGYBINS is expected.
  52 +
  53 +The ebinalg and ebinfile parameters are now automatic.
49 54
50 55
51 7. ctlike - CTA maximum likelihood fitting 56 7. ctlike - CTA maximum likelihood fitting
src/ctbin/ctbin.cpp
@@ -432,9 +432,19 @@ void ctbin::get_parameters(void) @@ -432,9 +432,19 @@ void ctbin::get_parameters(void)
432 m_xref = (*this)["xref"].real(); 432 m_xref = (*this)["xref"].real();
433 m_yref = (*this)["yref"].real(); 433 m_yref = (*this)["yref"].real();
434 } 434 }
435 - m_emin = (*this)["emin"].real();  
436 - m_emax = (*this)["emax"].real();  
437 - m_enumbins = (*this)["enumbins"].integer(); 435 + m_ebinalg = (*this)["ebinalg"].string();
  436 +
  437 + // If we have the binning given by a file then read filename
  438 + if (m_ebinalg == "FILE") {
  439 + m_ebinfile = (*this)["ebinfile"].filename();
  440 + }
  441 +
  442 + // ... otherwise read emin, emax and nebins
  443 + else{
  444 + m_emin = (*this)["emin"].real();
  445 + m_emax = (*this)["emax"].real();
  446 + m_enumbins = (*this)["enumbins"].integer();
  447 + }
438 m_proj = (*this)["proj"].string(); 448 m_proj = (*this)["proj"].string();
439 m_coordsys = (*this)["coordsys"].string(); 449 m_coordsys = (*this)["coordsys"].string();
440 m_binsz = (*this)["binsz"].real(); 450 m_binsz = (*this)["binsz"].real();
@@ -483,10 +493,74 @@ void ctbin::bin_events(GCTAObservation* obs) @@ -483,10 +493,74 @@ void ctbin::bin_events(GCTAObservation* obs)
483 throw GException::no_list(G_BIN_EVENTS); 493 throw GException::no_list(G_BIN_EVENTS);
484 } 494 }
485 495
486 - // Setup energy range covered by data  
487 - GEnergy emin(m_emin, "TeV");  
488 - GEnergy emax(m_emax, "TeV");  
489 - GEbounds ebds(m_enumbins, emin, emax); 496 + // Initialise empty Ebounds object
  497 + GEbounds ebds;
  498 +
  499 + // First check wether we have FITS-file defining
  500 + // the binning
  501 + if (m_ebinalg == "FILE") {
  502 +
  503 + // Open fits file to check which extension is given
  504 + GFits file(m_ebinfile);
  505 +
  506 + if (file.hashdu("EBOUNDS")) {
  507 +
  508 + // Close file and load ebounds
  509 + file.close();
  510 + ebds.load(m_ebinfile,"EBOUNDS");
  511 +
  512 + } // endif: EBOUNDS extension was given
  513 +
  514 + else if (file.hashdu("ENERGYBINS")) {
  515 +
  516 + // Close file and load ebounds
  517 + file.close();
  518 + ebds.load(m_ebinfile,"ENERGYBINS");
  519 +
  520 + } // endelse: ENERGYBINS extension was given
  521 +
  522 + else {
  523 +
  524 + // Close file
  525 + file.close();
  526 +
  527 + // Signal that no energy boundaries have been found
  528 + std::string msg = "No extension with name \"EBOUNDS\" or"
  529 + " \"ENERGYBINS\" found in FITS file"
  530 + " \""+m_ebinfile+"\".\n"
  531 + "An \"EBOUNDS\" or \"ENERGYBINS\" extension"
  532 + " is required if the parameter \"ebinalg\""
  533 + " is set to \"FILE\".";
  534 + throw GException::invalid_value(G_BIN_EVENTS, msg);
  535 +
  536 + } // endelse: no suited extension found
  537 +
  538 + // Set enumbins parameter to number of ebounds
  539 + m_enumbins = ebds.size();
  540 +
  541 + } // endif: ebinalg was "FILE"
  542 +
  543 + else {
  544 +
  545 + // Initialise log mode for ebinning
  546 + bool log = true;
  547 +
  548 + // check if algorithm is linear
  549 + if (m_ebinalg == "LIN") {
  550 + log = false;
  551 + }
  552 +
  553 + // todo: should we also check if m_ebinalg is "LOG"
  554 + // and throw an exception if neither LIN/LOG/FILE
  555 + // is given?
  556 +
  557 + // Setup energy range covered by data
  558 + GEnergy emin(m_emin, "TeV");
  559 + GEnergy emax(m_emax, "TeV");
  560 + GEbounds ebounds(m_enumbins, emin, emax,log);
  561 + ebds = ebounds;
  562 +
  563 + } //endif: ebinalg was not "FILE"
490 564
491 // Get Good Time intervals 565 // Get Good Time intervals
492 GGti gti = obs->events()->gti(); 566 GGti gti = obs->events()->gti();
@@ -605,6 +679,8 @@ void ctbin::init_members(void) @@ -605,6 +679,8 @@ void ctbin::init_members(void)
605 m_prefix.clear(); 679 m_prefix.clear();
606 m_proj.clear(); 680 m_proj.clear();
607 m_coordsys.clear(); 681 m_coordsys.clear();
  682 + m_ebinalg.clear();
  683 + m_ebinfile.clear();
608 m_usepnt = false; 684 m_usepnt = false;
609 m_emin = 0.0; 685 m_emin = 0.0;
610 m_emax = 0.0; 686 m_emax = 0.0;
@@ -642,6 +718,8 @@ void ctbin::copy_members(const ctbin&amp; app) @@ -642,6 +718,8 @@ void ctbin::copy_members(const ctbin&amp; app)
642 m_prefix = app.m_prefix; 718 m_prefix = app.m_prefix;
643 m_proj = app.m_proj; 719 m_proj = app.m_proj;
644 m_coordsys = app.m_coordsys; 720 m_coordsys = app.m_coordsys;
  721 + m_ebinalg = app.m_ebinalg;
  722 + m_ebinfile = app.m_ebinfile;
645 m_usepnt = app.m_usepnt; 723 m_usepnt = app.m_usepnt;
646 m_emin = app.m_emin; 724 m_emin = app.m_emin;
647 m_emax = app.m_emax; 725 m_emax = app.m_emax;
src/ctbin/ctbin.hpp
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 33
34 /* __Definitions _________________________________________________________ */ 34 /* __Definitions _________________________________________________________ */
35 #define CTBIN_NAME "ctbin" 35 #define CTBIN_NAME "ctbin"
36 -#define CTBIN_VERSION "00-04-00" 36 +#define CTBIN_VERSION "00-05-00"
37 37
38 38
39 /***********************************************************************//** 39 /***********************************************************************//**
@@ -89,6 +89,8 @@ protected: @@ -89,6 +89,8 @@ protected:
89 int m_enumbins; //!< Number of energy bins 89 int m_enumbins; //!< Number of energy bins
90 std::string m_proj; //!< WCS projection 90 std::string m_proj; //!< WCS projection
91 std::string m_coordsys; //!< Coordinate system 91 std::string m_coordsys; //!< Coordinate system
  92 + std::string m_ebinalg; //!< Algorithm for energy binning
  93 + std::string m_ebinfile; //!< FITS-file containing energy binning
92 double m_xref; //!< Longitude reference coordinate 94 double m_xref; //!< Longitude reference coordinate
93 double m_yref; //!< Latitude reference coordinate 95 double m_yref; //!< Latitude reference coordinate
94 double m_binsz; //!< Pixel size 96 double m_binsz; //!< Pixel size
src/ctbin/ctbin.par
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 # ------------------------------------------------------------------------- # 5 # ------------------------------------------------------------------------- #
6 # # 6 # #
7 # File: ctbin.par # 7 # File: ctbin.par #
8 -# Version: 00-04-00 # 8 +# Version: 00-05-00 #
9 # # 9 # #
10 # Author: Jurgen Knodlseder # 10 # Author: Jurgen Knodlseder #
11 # Jurgen.Knodlseder@irap.omp.eu # 11 # Jurgen.Knodlseder@irap.omp.eu #
@@ -23,11 +23,11 @@ prefix, s, h, &quot;cntmap_&quot;,,,&quot;Prefix for counts maps in observation definition fil @@ -23,11 +23,11 @@ prefix, s, h, &quot;cntmap_&quot;,,,&quot;Prefix for counts maps in observation definition fil
23 # 23 #
24 # Energy binning parameters 24 # Energy binning parameters
25 #========================== 25 #==========================
26 -ebinalg, s, h, "LOG", FILE|LIN|LOG,,"Algorithm for defining energy bins" 26 +ebinalg, s, a, "LOG", FILE|LIN|LOG,,"Algorithm for defining energy bins"
27 emin, r, a, 0.1,,,"Start value for first energy bin in TeV" 27 emin, r, a, 0.1,,,"Start value for first energy bin in TeV"
28 emax, r, a, 100.0,,,"Stop value for last energy bin in TeV" 28 emax, r, a, 100.0,,,"Stop value for last energy bin in TeV"
29 enumbins, i, a, 20,,,"Number of energy bins" 29 enumbins, i, a, 20,,,"Number of energy bins"
30 -ebinfile, f, h, "NONE",,,"Name of the file containing the energy bin definition" 30 +ebinfile, f, a, "NONE",,,"Name of the file containing the energy bin definition"
31 # 31 #
32 # Spatial binning parameters 32 # Spatial binning parameters
33 #=========================== 33 #===========================
test/test_ctools.sh
@@ -143,6 +143,7 @@ $ctbin evfile=&quot;events.fits&quot; \ @@ -143,6 +143,7 @@ $ctbin evfile=&quot;events.fits&quot; \
143 emin=0.1 \ 143 emin=0.1 \
144 emax=100.0 \ 144 emax=100.0 \
145 enumbins=20 \ 145 enumbins=20 \
  146 + ebinalg="LOG" \
146 nxpix=200 \ 147 nxpix=200 \
147 nypix=200 \ 148 nypix=200 \
148 binsz=0.02 \ 149 binsz=0.02 \
@@ -165,6 +166,7 @@ $ctbin evfile=&quot;events2.fits&quot; \ @@ -165,6 +166,7 @@ $ctbin evfile=&quot;events2.fits&quot; \
165 emin=0.3 \ 166 emin=0.3 \
166 emax=8.0 \ 167 emax=8.0 \
167 enumbins=10 \ 168 enumbins=10 \
  169 + ebinalg="LOG" \
168 nxpix=50 \ 170 nxpix=50 \
169 nypix=50 \ 171 nypix=50 \
170 binsz=0.02 \ 172 binsz=0.02 \