openModeller  Version 1.4.0
Occurrence.hh
Go to the documentation of this file.
00001 
00029 #ifndef _OCCURRENCEHH_
00030 #define _OCCURRENCEHH_
00031 
00032 #include <openmodeller/om_defs.hh>
00033 #include <openmodeller/Sample.hh>
00034 #include <openmodeller/Normalizer.hh>
00035 
00036 #include <openmodeller/refcount.hh>
00037 
00038 #include <string>
00039 
00040 /****************************************************************/
00041 /************************** Occurrence **************************/
00042 
00043 class OccurrenceImpl;
00044 typedef ReferenceCountedPointer< OccurrenceImpl > OccurrencePtr;
00045 typedef ReferenceCountedPointer< const OccurrenceImpl > ConstOccurrencePtr;
00046 
00053 class dllexp OccurrenceImpl : private ReferenceCountedObject
00054 {
00055   friend class ReferenceCountedPointer<OccurrenceImpl>;
00056   friend class ReferenceCountedPointer<const OccurrenceImpl>;
00057 public:
00058 
00061   OccurrenceImpl( ) :
00062     id_( ),
00063     x_( 0.0 ),
00064     y_( 0.0 ),
00065     error_( 0.0 ),
00066     abundance_( 0.0 ),
00067     attr_(),
00068     unnormEnv_(),
00069     normEnv_()
00070   {}
00071 
00085   OccurrenceImpl( const std::string& id, 
00086                   Coord x, Coord y, Scalar error,
00087       Scalar abundance,
00088       int num_attributes=0,
00089       Scalar *attributes=0,
00090       int num_env=0,
00091       Scalar *env=0) :
00092     id_( id ),
00093     x_( x ),
00094     y_( y ),
00095     error_( error ),
00096     abundance_( abundance ),
00097     attr_( num_attributes, attributes ),
00098     unnormEnv_( num_env, env ),
00099     normEnv_()
00100   { }
00101 
00112   OccurrenceImpl( const std::string& id, 
00113                   Coord x, Coord y, Scalar error,
00114       Scalar abundance,
00115       std::vector<Scalar> attributes,
00116       std::vector<Scalar> env) :
00117     id_( id ),
00118     x_( x ),
00119     y_( y ),
00120     error_( error ),
00121     abundance_( abundance ),
00122     attr_( attributes ),
00123     unnormEnv_( env ),
00124     normEnv_()
00125   { }
00126 
00137   OccurrenceImpl( const std::string& id, 
00138                   Coord x, Coord y, Scalar error,
00139       Scalar abundance,
00140       const Sample& attributes,
00141       const Sample& env) :
00142     id_( id ),
00143     x_( x ),
00144     y_( y ),
00145     error_( error ),
00146     abundance_( abundance ),
00147     attr_( attributes ),
00148     unnormEnv_( env ),
00149     normEnv_()
00150   { }
00151 
00163   OccurrenceImpl( const std::string& id, 
00164                   Coord x, Coord y,
00165                   Scalar abundance,
00166                   int num_attributes=0,
00167                   Scalar *attributes=0 ) :
00168     id_( id ),
00169     x_( x ),
00170     y_( y ),
00171     error_( -1.0 ),
00172     abundance_( abundance ),
00173     attr_( num_attributes, attributes ),
00174     unnormEnv_(),
00175     normEnv_()
00176   { }
00177 
00178   ~OccurrenceImpl();
00179 
00180   OccurrenceImpl( const OccurrenceImpl& rhs ) :
00181     id_( rhs.id_ ),
00182     x_( rhs.x_ ),
00183     y_( rhs.y_ ),
00184     error_( rhs.error_ ),
00185     abundance_( rhs.abundance_ ),
00186     attr_( rhs.attr_ ),
00187     unnormEnv_( rhs.unnormEnv_ ),
00188     normEnv_( rhs.normEnv_ )
00189   {};
00190 
00191   OccurrenceImpl& operator=(const OccurrenceImpl & );
00192 
00193   // Access to the locality information.
00194   std::string id() const   { return id_; }
00195   Coord  x() const         { return x_; }
00196   Coord  y() const         { return y_; }
00197   Scalar error() const     { return error_; }
00198   Scalar abundance() const { return abundance_; }
00199 
00200   Sample const & attributes() const { return attr_; }
00201 
00202   Sample const & environment() const; 
00203 
00204   Sample const & originalEnvironment() const; 
00205 
00206   void normalize( Normalizer * normalizerPtr, size_t categoricalThreshold=0 );
00207 
00208   void setNormalizedEnvironment( const Sample& s );
00209 
00210   void setUnnormalizedEnvironment( const Sample& s );
00211 
00212   bool hasEnvironment() const;
00213 
00214   void setId( const std::string& id );
00215 
00216   void setAbundance( Scalar value );
00217 
00218   void dump() const;
00219 
00220 private:
00221 
00222   std::string id_; // Unique identifier
00223   Coord  x_; // Longitude
00224   Coord  y_; // Latitude
00225   Scalar error_;  // coordinate uncertanty in meters (unused so far)
00226   Scalar abundance_; // used only to distinguish between presence (1) and absence (0)
00227 
00228   Sample attr_; // extra attributes
00229   Sample unnormEnv_; // unnormalized environment
00230   Sample normEnv_; // normalized enviroment
00231 };
00232 
00233 #endif