{{lastupdated_at}} by {{lastupdated_by}} h1. GRegion {{>toc}} h2. GRegion class The @GRegion@ class is an abstract virtual base class that describes a region on the sky in arbitrary coordinates. Here a draft of the class definition:
class GRegion {
    virtual void        clear(void) = 0;
    virtual GRegion*    clone(void) const = 0;
    virtual bool        isin(const GSkyDir& dir) const = 0;
    virtual void        read(const GXmlElement& xml) = 0;
    virtual void        write(GXmlElement& xml) const = 0;
    virtual std::string print(void) const = 0;
}
h2. GRegions class The @GRegions@ class is a container to hold derived classes of type @GRegion@. Here a draft of the class definition:
class GRegions {
    GRegion&       operator[](const int& index);
    const GRegion& operator[](const int& index) const;
    void           clear(void);
    int            size(void) const;
    void           append(const GRegion& region, const bool& include = true);
    void           insert(const int& index, const GRegion& region, const bool& include = true);
    void           extend(const GRegions& regions);
    void           pop(const int& index = -1);
    void           load(const std::string& filename);
    void           save(const std::string& filename) const;
    void           read(const GXml& xml);
    void           write(GXml& xml) const;
    bool           isin(const GSkyDir& dir) const = 0;
    std::string    print(void) const;
}
Note that the @append@, @insert@, @extend@ and @pop@ methods are standard methods for container classes (although @insert@, @extend@ and @pop@ is so far rarly implemented in GammaLib). The @load@ and @save@ methods should act on XML files, the @read@ and @write@ methods on @GXml@ objects (which are basically opened XML files). We may also implement methods for loading and saving ds9 region files (e.g. @load_ds9@ and @save_ds9@). The @GRegions@ container could then be used as follows to select pixels from a sky map:
GRegions regions("my_preferred_regions.xml");
GSkymap  map("my_nice_sky_map.fits");
GSkymap  selected = map.select(regions);
selected.save("my_selected_pixels.fits");
In the same way it can be used internally by the CTA event cube class, as the event cube data are stored in a @GSkymap@ object. h2. Region XML format We can of course invent whatever format we like, but it would be worth checking if some XML format exists already for regions, e.g. in the virtual observatory.