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

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

Changing the documentation comments to match the askapsoft style. Also have split ChanMap? and Object3D into separate files.

File size: 4.2 KB
Line 
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// -----------------------------------------------------------------------
29#ifndef SECTION_H
30#define SECTION_H
31
32#include <string>
33#include <vector>
34
35namespace duchamp
36{
37
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.
43
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(){};
52
53    /// @brief Convert the subsection string into the lists of numerical values.
54    int parse(std::vector<long> dimAxes);
55    int parse(long *dim, int size);
56
57    /// @brief Test whether a given voxel (x,y,z) lies within the subsection
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    }
63
64    /// @brief Save the subsection string
65    void setSection(std::string s){subsection=s;};
66    /// @brief Return the subsection string
67    std::string getSection(){return subsection;};
68
69    /// @brief Save a single dimension's subsection string
70    void setSection(int i, std::string s){sections[i] = s;};
71    /// @brief Return a particular dimension's subsection string
72    std::string getSection(int i){if(i>=numSections) return "*"; else return sections[i];};
73
74    /// @brief Return a particular starting value
75    int getStart(int i){if(i>=numSections) return 0; else return starts[i];};
76    /// @brief Set a particular starting value
77    void setStart(int i, int val){starts[i]=val;};
78
79    /// @brief Return a particular dimension length
80    int getDim(int i){if(i>=numSections) return 1; else return dims[i];};
81    /// @brief Set a particular dimension length
82    void setDim(int i, int val){dims[i]=val;};
83
84    /// @brief Return a particular ending value
85    int getEnd(int i){if(i>=numSections) return 0; else return starts[i]+dims[i]-1;};
86    /// @brief Set a particular ending value, using the current starting value
87    void setEnd(int i, int val){dims[i]=val-starts[i]+1;};
88
89    /// @brief Return the full list of start values
90    std::vector<int> getStartList(){return starts;};
91    /// @brief Return the full list of dimension lengths
92    std::vector<int> getDimList(){return dims;};
93
94  private:
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
97    int numSections;          ///< The number of sections in the string.
98    std::vector<int> starts;  ///< The list of starting values (a,c,e)
99    std::vector<int> dims;    ///< The list of lengths of each dimension (b-a+1,d-c+1,f-e+1)
100  };
101
102  std::string nullSection(int ndim);
103
104}
105
106#endif //SECTION_H
Note: See TracBrowser for help on using the repository browser.