source: trunk/src/Utils/Section.hh @ 621

Last change on this file since 621 was 537, checked in by MatthewWhiting, 15 years ago

Changing some uint calls to "unsigned int" in the header files. Also an extra check on growth thresholds in checkPars().

File size: 4.3 KB
RevLine 
[301]1// -----------------------------------------------------------------------
2// Section.hh: Definition of the Section class, used to store
3//             definitions of subsections of a FITS file.
4// -----------------------------------------------------------------------
5// Copyright (C) 2006, Matthew Whiting, ATNF
6//
7// This program is free software; you can redistribute it and/or modify it
8// under the terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2 of the License, or (at your
10// option) any later version.
11//
12// Duchamp is distributed in the hope that it will be useful, but WITHOUT
13// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15// for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with Duchamp; if not, write to the Free Software Foundation,
19// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
20//
21// Correspondence concerning Duchamp may be directed to:
22//    Internet email: Matthew.Whiting [at] atnf.csiro.au
23//    Postal address: Dr. Matthew Whiting
24//                    Australia Telescope National Facility, CSIRO
25//                    PO Box 76
26//                    Epping NSW 1710
27//                    AUSTRALIA
28// -----------------------------------------------------------------------
[254]29#ifndef SECTION_H
30#define SECTION_H
31
32#include <string>
33#include <vector>
34
[378]35namespace duchamp
[254]36{
37
[528]38  /// @brief A class to store information on subsections of a cube.
39  ///
40  /// @details This keeps the subsection itself as a string, plus the
41  /// parsed information in the format of vectors of starting
42  /// positions and lengths of each dimension.
[254]43
[378]44  class Section
45  {
46  public:
47    Section();
48    Section(std::string &s){subsection=s;};
49    Section(const Section& s);
50    Section& operator= (const Section& s);
51    virtual ~Section(){};
[254]52
[528]53    /// @brief Convert the subsection string into the lists of numerical values.
[378]54    int parse(std::vector<long> dimAxes);
[497]55    int parse(long *dim, int size);
[254]56
[528]57    /// @brief Test whether a given voxel (x,y,z) lies within the subsection
[378]58    bool isInside(int x, int y, int z){
59      return (  ( (x>=starts[0])&&(x<starts[0]+dims[0])  ) &&
60                ( (y>=starts[1])&&(y<starts[1]+dims[1])  ) &&
61                ( (z>=starts[2])&&(z<starts[2]+dims[2])  )   );
62    }
[254]63
[528]64    /// @brief Save the subsection string
[378]65    void setSection(std::string s){subsection=s;};
[528]66    /// @brief Return the subsection string
[378]67    std::string getSection(){return subsection;};
[254]68
[528]69    /// @brief Save a single dimension's subsection string
[537]70    void setSection(unsigned int i, std::string s){sections[i] = s;};
[528]71    /// @brief Return a particular dimension's subsection string
[537]72    std::string getSection(unsigned int i){if(i>=numSections) return "*"; else return sections[i];};
[507]73
[528]74    /// @brief Return a particular starting value
[537]75    int getStart(unsigned int i){if(i>=numSections) return 0; else return starts[i];};
[528]76    /// @brief Set a particular starting value
[537]77    void setStart(unsigned int i, unsigned int val){starts[i]=val;};
[254]78
[528]79    /// @brief Return a particular dimension length
[537]80    int getDim(unsigned int i){if(i>=numSections) return 1; else return dims[i];};
[528]81    /// @brief Set a particular dimension length
[537]82    void setDim(unsigned int i, unsigned int val){dims[i]=val;};
[254]83
[528]84    /// @brief Return a particular ending value
[537]85    int getEnd(unsigned int i){if(i>=numSections) return 0; else return starts[i]+dims[i]-1;};
[528]86    /// @brief Set a particular ending value, using the current starting value
[537]87    void setEnd(unsigned int i, unsigned int val){dims[i]=val-starts[i]+1;};
[378]88
[528]89    /// @brief Return the full list of start values
[378]90    std::vector<int> getStartList(){return starts;};
[528]91    /// @brief Return the full list of dimension lengths
[378]92    std::vector<int> getDimList(){return dims;};
93
94  private:
[507]95    std::string subsection;   ///< The string indicating the subsection, of the format [a:b,c:d,e:f] etc.
96    std::vector<std::string> sections; // The individual section strings for each dimension
[537]97    unsigned int numSections;         ///< The number of sections in the string.
[378]98    std::vector<int> starts;  ///< The list of starting values (a,c,e)
[507]99    std::vector<int> dims;    ///< The list of lengths of each dimension (b-a+1,d-c+1,f-e+1)
[378]100  };
101
[507]102  std::string nullSection(int ndim);
103
[378]104}
105
[254]106#endif //SECTION_H
Note: See TracBrowser for help on using the repository browser.