Commit 8140e337613ed3f1fdfe15f5980a41ae28e4dd98

Authored by knodlseder
1 parent c496e8e7

new implementation using logger and separate methods

pyext/ctbin.i
1 /*************************************************************************** 1 /***************************************************************************
2 * ctbin - CTA data binning tool * 2 * ctbin - CTA data binning tool *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2010 by Jurgen Knodlseder * 4 + * copyright (C) 2010-2011 by Jurgen Knodlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 7 * This program is free software; you can redistribute it and/or modify *
@@ -30,10 +30,14 @@ @@ -30,10 +30,14 @@
30 class ctbin : public GApplication { 30 class ctbin : public GApplication {
31 public: 31 public:
32 // Constructors and destructors 32 // Constructors and destructors
33 - ctbin(void) : GApplication(CTBIN_NAME, CTBIN_VERSION) { return; } 33 + ctbin(void);
  34 + ctbin(int argc, char *argv[]);
  35 + ~ctbin(void);
34 36
35 // Methods 37 // Methods
36 - int run(void); 38 + void run(void);
  39 + void get_parameters(void);
  40 + void bin(void);
37 }; 41 };
38 42
39 43
src/ctbin/ctbin.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * ctbin - CTA data binning tool * 2 * ctbin - CTA data binning tool *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2010 by Jurgen Knodlseder * 4 + * copyright (C) 2010-2011 by Jurgen Knodlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 7 * This program is free software; you can redistribute it and/or modify *
@@ -24,36 +24,142 @@ @@ -24,36 +24,142 @@
24 #include "ctbin.hpp" 24 #include "ctbin.hpp"
25 #include "GTools.hpp" 25 #include "GTools.hpp"
26 26
  27 +/* __ Debug definitions __________________________________________________ */
  28 +
  29 +/* __ Coding definitions _________________________________________________ */
  30 +
  31 +
  32 +/*==========================================================================
  33 + = =
  34 + = Constructors/destructors =
  35 + = =
  36 + ==========================================================================*/
  37 +
  38 +/***********************************************************************//**
  39 + * @brief Void constructor
  40 + ***************************************************************************/
  41 +ctbin::ctbin(void) : GApplication(CTBIN_NAME, CTBIN_VERSION)
  42 +{
  43 + // Initialise members
  44 + init_members();
  45 +
  46 + // Write header into logger
  47 + log_header();
  48 +
  49 + // Return
  50 + return;
  51 +}
  52 +
  53 +
  54 +/***********************************************************************//**
  55 + * @brief Command line constructor
  56 + *
  57 + * @param[in] argc Number of arguments in command line.
  58 + * @param[in] argv Array of command line arguments.
  59 + ***************************************************************************/
  60 +ctbin::ctbin(int argc, char *argv[]) :
  61 + GApplication(CTBIN_NAME, CTBIN_VERSION, argc, argv)
  62 +{
  63 + // Initialise members
  64 + init_members();
  65 +
  66 + // Write header into logger
  67 + log_header();
  68 +
  69 + // Return
  70 + return;
  71 +}
  72 +
  73 +
  74 +/***********************************************************************//**
  75 + * @brief Destructor
  76 + ***************************************************************************/
  77 +ctbin::~ctbin(void)
  78 +{
  79 + // Free members
  80 + free_members();
  81 +
  82 + // Return
  83 + return;
  84 +}
  85 +
  86 +
  87 +/*==========================================================================
  88 + = =
  89 + = Operators =
  90 + = =
  91 + ==========================================================================*/
  92 +
  93 +/*==========================================================================
  94 + = =
  95 + = Public methods =
  96 + = =
  97 + ==========================================================================*/
27 98
28 /***********************************************************************//** 99 /***********************************************************************//**
29 * @brief Run gtbin application 100 * @brief Run gtbin application
30 ***************************************************************************/ 101 ***************************************************************************/
31 -int ctbin::run(void) 102 +void ctbin::run(void)
32 { 103 {
33 - // Test dump  
34 - std::cout << *this << std::endl; 104 + // Get parameters
  105 + get_parameters();
35 106
36 - // Get events and output file names  
37 - std::string evfile = par("evfile")->value();  
38 - std::string outfile = par("outfile")->value();  
39 -  
40 - // Get clobber  
41 - std::string sclobber = par("clobber")->value();  
42 - int clobber = 0;  
43 - if (tolower(sclobber) == "yes")  
44 - clobber = 1; 107 + // Write parameters into logger
  108 + if (logTerse()) {
  109 + log_parameters();
  110 + log << std::endl;
  111 + }
  112 +
  113 + // Bin data
  114 + bin();
45 115
  116 + // Return
  117 + return;
  118 +}
  119 +
  120 +
  121 +/***********************************************************************//**
  122 + * @brief Get application parameters
  123 + *
  124 + * Get all task parameters from parameter file or (if required) by querying
  125 + * the user.
  126 + ***************************************************************************/
  127 +void ctbin::get_parameters(void)
  128 +{
  129 + // Get parameters
  130 + m_evfile = par("evfile")->value();
  131 + m_outfile = par("outfile")->value();
  132 + m_emin = par("emin")->real();
  133 + m_emax = par("emax")->real();
  134 + m_enumbins = par("enumbins")->integer();
  135 + m_proj = par("proj")->value();
  136 + m_coordsys = par("coordsys")->value();
  137 + m_xref = par("xref")->real();
  138 + m_yref = par("yref")->real();
  139 + m_binsz = par("binsz")->real();
  140 + m_nxpix = par("nxpix")->integer();
  141 + m_nypix = par("nypix")->integer();
  142 +
  143 + // Return
  144 + return;
  145 +}
  146 +
  147 +
  148 +/***********************************************************************//**
  149 + * @brief Run gtbin application
  150 + ***************************************************************************/
  151 +void ctbin::bin(void)
  152 +{
46 // Load events as unbinned data 153 // Load events as unbinned data
47 GCTAObservation obs; 154 GCTAObservation obs;
48 - obs.load_unbinned(evfile); 155 + obs.load_unbinned(m_evfile);
49 156
50 // Setup energy range covered by data 157 // Setup energy range covered by data
51 GEnergy emin; 158 GEnergy emin;
52 GEnergy emax; 159 GEnergy emax;
53 - emin.TeV(todouble(par("emin")->value()));  
54 - emax.TeV(todouble(par("emax")->value()));  
55 - int enumbins = toint(par("enumbins")->value());  
56 - obs.ebounds()->setlog(emin, emax, enumbins); 160 + emin.TeV(m_emin);
  161 + emax.TeV(m_emax);
  162 + obs.ebounds()->setlog(emin, emax, m_enumbins);
57 163
58 // Setup time range covered by data 164 // Setup time range covered by data
59 GTime tstart; 165 GTime tstart;
@@ -62,18 +168,17 @@ int ctbin::run(void) @@ -62,18 +168,17 @@ int ctbin::run(void)
62 tstop.met(10000.0); 168 tstop.met(10000.0);
63 obs.gti()->add(tstart, tstop); 169 obs.gti()->add(tstart, tstop);
64 170
65 - std::cout << obs;  
66 - 171 + // Log observation
  172 + if (logExplicit()) {
  173 + log << std::endl;
  174 + log.header1("Observation");
  175 + log << obs << std::endl;
  176 + }
  177 +
67 // Create skymap 178 // Create skymap
68 - std::string wcs = par("proj")->value();  
69 - std::string coords = par("coordsys")->value();  
70 - double x = todouble(par("xref")->value());  
71 - double y = todouble(par("yref")->value());  
72 - double dx = todouble(par("binsz")->value());  
73 - double dy = todouble(par("binsz")->value());  
74 - int nx = toint(par("nxpix")->value());  
75 - int ny = toint(par("nypix")->value());  
76 - GSkymap map = GSkymap(wcs, coords, x, y, dx, dy, nx, ny, enumbins); 179 + GSkymap map = GSkymap(m_proj, m_coordsys,
  180 + m_xref, m_yref, m_binsz, m_binsz,
  181 + m_nxpix, m_nypix, m_enumbins);
77 182
78 // Fill sky map 183 // Fill sky map
79 GCTAEventList* events = (GCTAEventList*)obs.events(); 184 GCTAEventList* events = (GCTAEventList*)obs.events();
@@ -85,8 +190,8 @@ int ctbin::run(void) @@ -85,8 +190,8 @@ int ctbin::run(void)
85 GSkyPixel pixel = map.dir2xy(dir); 190 GSkyPixel pixel = map.dir2xy(dir);
86 191
87 // Skip if pixel is out of range 192 // Skip if pixel is out of range
88 - if (pixel.x() < -0.5 || pixel.x() > (nx-0.5) ||  
89 - pixel.y() < -0.5 || pixel.y() > (ny-0.5)) 193 + if (pixel.x() < -0.5 || pixel.x() > (m_nxpix-0.5) ||
  194 + pixel.y() < -0.5 || pixel.y() > (m_nypix-0.5))
90 continue; 195 continue;
91 196
92 // Determine energy bin. Skip if we are outside the energy range 197 // Determine energy bin. Skip if we are outside the energy range
@@ -99,15 +204,65 @@ int ctbin::run(void) @@ -99,15 +204,65 @@ int ctbin::run(void)
99 204
100 } // endfor: looped over all events 205 } // endfor: looped over all events
101 206
102 - std::cout << map; 207 + // Log observation
  208 + if (logTerse()) {
  209 + log << std::endl;
  210 + log.header1("Counts map");
  211 + log << map << std::endl;
  212 + }
103 213
104 // Save counts map 214 // Save counts map
105 GFits file; 215 GFits file;
106 map.write(&file); 216 map.write(&file);
107 obs.ebounds()->write(&file); 217 obs.ebounds()->write(&file);
108 obs.gti()->write(&file); 218 obs.gti()->write(&file);
109 - file.saveto(outfile, clobber); 219 + file.saveto(m_outfile, clobber());
  220 +
  221 + // Return
  222 + return;
  223 +}
  224 +
  225 +
  226 +/*==========================================================================
  227 + = =
  228 + = Private methods =
  229 + = =
  230 + ==========================================================================*/
  231 +
  232 +/***********************************************************************//**
  233 + * @brief Initialise class members
  234 + ***************************************************************************/
  235 +void ctbin::init_members(void)
  236 +{
  237 + // Initialise members
  238 + m_evfile.clear();
  239 + m_outfile.clear();
  240 + m_emin = 0.0;
  241 + m_emax = 0.0;
  242 + m_enumbins = 0;
  243 + m_proj.clear();
  244 + m_coordsys.clear();
  245 + m_xref = 0.0;
  246 + m_yref = 0.0;
  247 + m_binsz = 0.0;
  248 + m_nxpix = 0;
  249 + m_nypix = 0;
  250 +
  251 + // Set logger properties
  252 + log.date(true);
  253 +
  254 + // Return
  255 + return;
  256 +}
  257 +
  258 +
  259 +/***********************************************************************//**
  260 + * @brief Delete class members
  261 + ***************************************************************************/
  262 +void ctbin::free_members(void)
  263 +{
  264 + // Free members
110 265
111 // Return 266 // Return
112 - return 0; 267 + return;
113 } 268 }
src/ctbin/ctbin.hpp
1 /*************************************************************************** 1 /***************************************************************************
2 * ctbin - CTA data binning tool * 2 * ctbin - CTA data binning tool *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2010 by Jurgen Knodlseder * 4 + * copyright (C) 2010-2011 by Jurgen Knodlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 7 * This program is free software; you can redistribute it and/or modify *
@@ -36,13 +36,33 @@ @@ -36,13 +36,33 @@
36 class ctbin : public GApplication { 36 class ctbin : public GApplication {
37 public: 37 public:
38 // Constructors and destructors 38 // Constructors and destructors
39 - ctbin(void) :  
40 - GApplication(CTBIN_NAME, CTBIN_VERSION) { return; }  
41 - ctbin(int argc, char *argv[]) :  
42 - GApplication(CTBIN_NAME, CTBIN_VERSION, argc, argv) { return; } 39 + ctbin(void);
  40 + ctbin(int argc, char *argv[]);
  41 + ~ctbin(void);
43 42
44 // Methods 43 // Methods
45 - int run(void); 44 + void run(void);
  45 + void get_parameters(void);
  46 + void bin(void);
  47 +
  48 +protected:
  49 + // Protected methods
  50 + void init_members(void);
  51 + void free_members(void);
  52 +
  53 + // User parameters
  54 + std::string m_evfile; //!< Input event list
  55 + std::string m_outfile; //!< Output counts map
  56 + double m_emin; //!< Lower energy
  57 + double m_emax; //!< Upper energy
  58 + int m_enumbins; //!< Number of energy bins
  59 + std::string m_proj; //!< WCS projection
  60 + std::string m_coordsys; //!< Coordinate system
  61 + double m_xref; //!< Longitude reference coordinate
  62 + double m_yref; //!< Latitude reference coordinate
  63 + double m_binsz; //!< Pixel size
  64 + int m_nxpix; //!< Number of pixels in longitude
  65 + int m_nypix; //!< Number of pixels in latitude
46 }; 66 };
47 67
48 #endif /* CTBIN_HPP */ 68 #endif /* CTBIN_HPP */
src/ctbin/main.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * ctbin - CTA data binning main code * 2 * ctbin - CTA data binning main code *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2010 by Jurgen Knodlseder * 4 + * copyright (C) 2010-2011 by Jurgen Knodlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 7 * This program is free software; you can redistribute it and/or modify *