source: trunk/src/PixelMap/Voxel.hh @ 1155

Last change on this file since 1155 was 1155, checked in by MatthewWhiting, 11 years ago

Fixing issues with having moved the findShape function. Solving allocation bugs, and making sure the flags are worked out correctly.

File size: 4.1 KB
Line 
1// -----------------------------------------------------------------------
2// Voxel.hh: Definition of the Voxel class, storing a single 3D voxel
3//           plus an associated flux.
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 VOXEL_H
30#define VOXEL_H
31
32#include <iostream>
33
34namespace PixelInfo
35{
36  //==========================================================================
37
38  /// Voxel class.
39  ///  A 3-dimensional pixel, with x,y,z position + flux
40
41  class Voxel
42  {
43  public:
44    /// @brief Default constructor.
45    Voxel(){};
46    /// @brief Specific constructor, defining an (x,y,z) location and flux f.
47    Voxel(long x, long y, long z, float f);
48    /// @brief Specific constructor, defining an (x,y,z) location, setting f=0.
49    Voxel(long x, long y, long z);
50    /// @brief Copy constructor.
51    Voxel(const Voxel& v);
52    /// @brief Assignment operator.
53    Voxel& operator= (const Voxel& v);
54    virtual ~Voxel(){};
55
56    // accessor functions
57    void   setX(long x){itsX = x;};
58    void   setY(long y){itsY = y;};
59    void   setZ(long z){itsZ = z;};
60    void   setF(float f){itsF = f;};
61    /// @brief Define an (x,y) coordinate
62    void   setXY(long x, long y){itsX = x; itsY = y;};
63    /// @brief Define an (x,y,z) coordinate
64    void   setXYZ(long x, long y, long z){itsX = x; itsY = y; itsZ = z;};
65    /// @brief Define an (x,y) coordinate with a flux f
66    void   setXYF(long x, long y, float f){itsX = x; itsY = y; itsF = f;};
67    /// @brief Define an (x,y,z) coordinate with a flux f
68    void   setXYZF(long x, long y, long z, float f){itsX = x; itsY = y; itsZ = z; itsF = f;};
69    long   getX(){return itsX;};
70    long   getY(){return itsY;};
71    long   getZ(){return itsZ;};
72    float  getF(){return itsF;};
73   
74    /// @brief Return an index value for an array
75    size_t arrayIndex(const size_t *dim);
76
77    /// @brief Operator to print information of voxel.
78    friend std::ostream& operator<< ( std::ostream& theStream, Voxel& vox);
79
80    /// @brief Operator to test for equality.
81    friend bool operator== (Voxel lhs, Voxel rhs);
82
83    /// @brief Less-than operator to allow ordering
84    friend bool operator< (Voxel lhs, Voxel rhs);
85   
86    /// @brief Function to test for equality of positions only.
87    bool match(Voxel other);
88   
89
90  protected:
91    long  itsX;         ///< x-position of pixel
92    long  itsY;         ///< y-position of pixel
93    long  itsZ;         ///< z-position of pixel
94    float itsF;         ///< flux of pixel
95  };
96
97  //==========================================================================
98
99  /// Pixel class.
100  ///  A 2-dimensional type of voxel, with just x & y position + flux
101
102  class Pixel : public Voxel
103  {
104  public:
105    Pixel(){itsZ=0;};
106    Pixel(long x, long y, float f);
107    Pixel(const Pixel& p);
108    Pixel& operator= (const Pixel& p);
109    virtual ~Pixel(){};
110    // accessor functions
111    void  setXY(long x, long y){itsX = x; itsY = y;};
112    void  setXYF(long x, long y, float f){itsX = x; itsY = y; itsF = f;};
113
114  };
115
116
117}
118
119#endif // VOXEL_H
Note: See TracBrowser for help on using the repository browser.