FFSM++ 1.1.0
French Forest Sector Model ++
Loading...
Searching...
No Matches
Pixel.h
Go to the documentation of this file.
1/***************************************************************************
2 * Copyright (C) 2015 by Laboratoire d'Economie Forestière *
3 * http://ffsm-project.org *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 3 of the License, or *
8 * (at your option) any later version, given the compliance with the *
9 * exceptions listed in the file COPYING that is distribued together *
10 * with this file. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the *
19 * Free Software Foundation, Inc., *
20 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21 ***************************************************************************/
22#ifndef PIXELS_H
23#define PIXELS_H
24
25#include <string>
26#include <vector>
27#include <stdexcept>
28#include <iostream>
29#include <sstream>
30
31//#include <Eigen/Dense>
32
33// regmas headers...
34#include "BaseClass.h"
35#include "ModelData.h"
36
37class Gis; //forward declaration
38
39//using namespace Eigen;
40
41/// Pixel-level class
42
43/**
44This class manage the info at the pixel level. A vector of pixel objects is owned by the class Gis.
45@author Antonello Lobianco
46*/
47class Pixel: public BaseClass{
48
49public:
50 Pixel(double ID_h, ThreadManager* MTHREAD_h);
51 ~Pixel();
52
53 /// Return the value for a specific layer
54 double getDoubleValue (const string& layerName_h, const bool& returnZeroForNoValue = false) const;
55 double getDoubleValue (const string& parName, const string& forName, const string& dClass, const int& year, const bool& returnZeroForNoValue = false);
56 double getMultiplier (const string& multiplierName, const string& forName, int year=DATA_NOW);
57 double getPathMortality(const string& forType, const string& dC, int year=DATA_NOW); ///< Return the INCREASED mortality due to pathogen presence for a given ft and dc in a certain year (default the running year)
58 void correctInputMultiplier (const string& multiplierName, const string& forName, double coefficient=1); ///< It apply a given coefficient to all the multipliers layers of a given ft
59 void newYear();
60 double getPastRegArea(const int& ft_idx, const int& year);
61 void setPastRegArea(const double& value, const int& ft_idx, const int& year);
62 ModelRegion* getMyRegion(const int& rLevel = 2);
63 double getSTData(const string& parName, const string& forName, int year, const string& d2 ="", double naToReturn = RETNA); // Get spatio-temporal data from layers whose name follows a given pattern
64
65
66 // space..
67 double getID() const {return ID;} ;
68 int getX() const {return pxX;} ;
69 int getY() const {return pxY;};
70 /// Return a vector of pixels at the specified distance (in levels, not in physical units)
71 vector <Pixel *> getPixelsAtDistLevel (int distLevel_h) const;
72
73 string getPxComments() const {return pxComments;};
74 double getCachedDouble() const {return cachedDouble;};
75
76
77 /// Insert a new layer and its value
78 void setValue ( const string& layerName_h, const double& value_h ){values.insert(pair<string, double>(layerName_h, value_h));}
79 //inline void setValue ( const string& parName, const string& forName, const string& dClass, const int& year, const double& value_h); // never used ???
80 /// Change the value of an existing layerMTHREAD->GIS->pack(parName, forName, dClass, year), value_h,
81 void changeValue (const string& layerName_h, const double& value_h, const bool& setNoValueForZero=false );
82 //void changeValue (const double& value_h, const string& parName, const string& forName, const string& dClass, const int& year, const bool& setNoValueForZero=false);
83 void setCoordinates ( int x_h, int y_h ) {pxX=x_h; pxY=y_h;};
84 void setPxComments ( std::string pxComments_h ) {pxComments = pxComments_h;};
85 void setCachedDouble(double cachedDouble_h){cachedDouble=cachedDouble_h;};
87 void setSpModifier(const double& value, const int& ftindex){spMods.at(ftindex)=value;};
88 double getSpModifier(const string& ft);
89 void swap(const int &swap_what); ///< Assign to the delayed value the current values, e.g. vol_l = vol
90 void setMyRegion(ModelRegion* region_h){l2region = region_h;};
91
92 // matrices of (ft,dc)
93 /*MatrixXd vol;
94 MatrixXd area;
95 MatrixXd regArea;
96 MatrixXd hVol;
97 MatrixXd vol_l;
98 MatrixXd area_l;
99 MatrixXd regArea_l;
100 MatrixXd hVol_l;
101 MatrixXd beta;
102 MatrixXd mort;
103 MatrixXd tp;
104 MatrixXd cumTp;*/
105
106 vector <vector <double> > vol; // by ft,dc
107 vector <vector <double> > area; // by ft,dc
108 vector <vector <double> > deltaArea; // by ft_in + "", ft_out + "" // delta areas, transiction matrix
109 vector <double> initialDc0Area; // by ft
110 vector <vector <double> > hArea; // by ft, dc // possibly in ha, but to be check for 100% sure
111 vector <vector <double> > hVol; // by ft.dc
112 vector <vector <double> > hProductivity; // by ft,dc
113 vector < vector <vector <double> > >hVol_byPrd; // by ft, dc, pp
114 map <int, vector <double> > regArea; // by year, ft
115 //vector <double> in; // by pp
116 //vector <double> hr; // by pp
117 vector <double> vReg; // by ft
118 vector <vector <double> > vMort; // by ft,dc
119 vector <vector <double> > vMortAdd; // by ft dc fire mortality
120 vector <double> expectedReturns; // by ft
121 vector <int> optDc; // The "optimal" diameter class chosen in project evaluation for the regeneration. By ft evaluated (not necessarily those then chosen)
122 vector <int> optFtChosen; // The ft (index) chosen as optimal in regeneration for each ft in input (harvested)
123 vector <int> optDcChosen; // The "optimal" diameter class of the ft chosen for regeneration. By ft in input (harvested)
124 vector <double> expectedAnnualIncome_carbon; //by ft
125 vector <double> expectedAnnualIncome_timber; // by ft
126
127 vector <double> expectedReturnsNotCorrByRa; ///< by ft. Attenction, reported expReturns at "forest" level (compared with those at forest type level) do NOT include ra
128
129 vector <vector <double> > vol_l; ///< store the volumes of the previous year
130 vector <vector <double> > area_l; ///< store the areas of the previous year
131
132 vector <vector <double> > beta;
133 vector <vector <double> > mort;
134 vector <vector <double> > addMort; // fire mortality
135 vector <vector <double> > tp;
136 vector <vector <double> > cumTp; ///< This is time of passage to REACH a diameter class (while the exogenous tp by diameter class is the time of passage to LEAVE to the next d class). By ft,dc
137 vector <vector <double> > vHa; ///< Volume at hectar by each diameter class [m^3/ha]
138 vector <vector <double> > cumAlive; ///< Cumulative prob of remaining alive at beginnin of a given diam class
139 vector <vector <double> > cumTp_exp; ///< This is the **expected** version of cumTp, used for calculating profits
140 vector <vector <double> > vHa_exp; ///< This is the **expected** version of vHa, used for calculating profits
141 vector <vector <double> > cumAlive_exp; ///< This is the **expected** version of cumAlive, used for calculating profits
142
143 // management variables (pixel==agent)
144 double portfolioVarRa; ///< Sampling derived risk aversion on portfolio variance for of this agent
145 double expType; ///< Sampling derived expectation types of this agent (forest bilogical parameters: growth, mortality)
146 double expTypePrices; ///< Sampling derived expectation types of this agent (prices)
147 bool usePortfolio; ///< Sampling derived usage of portfolio management (false/true)
148 vector <double> avalCoef; ///< Availability (of wood resources) coefficient. A [0,1] coefficient (new: by forest type) that reduces avaiability of wood resources to exploitation due to local reasons (protected area, altimetry..)
149
150private:
151 map<string, double> values; ///< Map of values for each layer
152 mutable map<string, double>::const_iterator vIter; //< Iterator for the map of values
153 double ID;
154 int pxX;
155 int pxY;
157 double cachedDouble; ///< Cachable double used in some optimized algorithms
158 vector<double> spMods; ///< The sampled spatial modifiers (by forest type)
159 ModelRegion* l2region; ///< Pointer to level 2 region where this pixel is
160
161};
162
163#endif
This file is the header of BaseClass and it is included by ALL compiled code.
@ DATA_NOW
The required data is for the current year.
Definition BaseClass.h:73
@ RETNA
Request the (scenario specific) NO VALUE to be returned.
Definition BaseClass.h:79
Base class for the regmas application.
Definition BaseClass.h:239
Class to manage the spatial dimension.
Definition Gis.h:67
Pixel-level class.
Definition Pixel.h:47
vector< double > expectedAnnualIncome_carbon
Definition Pixel.h:124
double getCachedDouble() const
Definition Pixel.h:74
map< int, vector< double > > regArea
Definition Pixel.h:114
vector< vector< vector< double > > > hVol_byPrd
Definition Pixel.h:113
vector< vector< double > > area
Definition Pixel.h:107
vector< vector< double > > area_l
store the areas of the previous year
Definition Pixel.h:130
void newYear()
Definition Pixel.cpp:385
vector< double > expectedReturns
Definition Pixel.h:120
ModelRegion * getMyRegion(const int &rLevel=2)
Definition Pixel.cpp:449
vector< vector< double > > mort
Definition Pixel.h:133
double portfolioVarRa
Sampling derived risk aversion on portfolio variance for of this agent.
Definition Pixel.h:144
vector< vector< double > > vHa_exp
This is the expected version of vHa, used for calculating profits.
Definition Pixel.h:140
void setCachedDouble(double cachedDouble_h)
Definition Pixel.h:85
vector< vector< double > > hVol
Definition Pixel.h:111
vector< double > expectedReturnsNotCorrByRa
by ft. Attenction, reported expReturns at "forest" level (compared with those at forest type level) d...
Definition Pixel.h:127
double getSTData(const string &parName, const string &forName, int year, const string &d2="", double naToReturn=RETNA)
Definition Pixel.cpp:246
void setMyRegion(ModelRegion *region_h)
Definition Pixel.h:90
map< string, double >::const_iterator vIter
Definition Pixel.h:152
void swap(const int &swap_what)
Assign to the delayed value the current values, e.g. vol_l = vol.
Definition Pixel.cpp:422
double getPathMortality(const string &forType, const string &dC, int year=DATA_NOW)
Return the INCREASED mortality due to pathogen presence for a given ft and dc in a certain year (defa...
Definition Pixel.cpp:329
void setSpModifier(const double &value, const int &ftindex)
Definition Pixel.h:87
vector< double > avalCoef
Availability (of wood resources) coefficient. A [0,1] coefficient (new: by forest type) that reduces ...
Definition Pixel.h:148
void setPxComments(std::string pxComments_h)
Definition Pixel.h:84
int pxX
Definition Pixel.h:154
vector< double > expectedAnnualIncome_timber
Definition Pixel.h:125
map< string, double > values
Map of values for each layer.
Definition Pixel.h:151
double expTypePrices
Sampling derived expectation types of this agent (prices)
Definition Pixel.h:146
double expType
Sampling derived expectation types of this agent (forest bilogical parameters: growth,...
Definition Pixel.h:145
vector< vector< double > > hProductivity
Definition Pixel.h:112
int pxY
Definition Pixel.h:155
void correctInputMultiplier(const string &multiplierName, const string &forName, double coefficient=1)
It apply a given coefficient to all the multipliers layers of a given ft.
Definition Pixel.cpp:369
~Pixel()
Definition Pixel.cpp:39
double getSpModifier(const string &ft)
Definition Pixel.cpp:437
vector< double > spMods
The sampled spatial modifiers (by forest type)
Definition Pixel.h:158
vector< vector< double > > cumAlive_exp
This is the expected version of cumAlive, used for calculating profits.
Definition Pixel.h:141
vector< vector< double > > vMort
Definition Pixel.h:118
double getPastRegArea(const int &ft_idx, const int &year)
Definition Pixel.cpp:390
void clearCache()
Definition Pixel.h:86
double ID
Definition Pixel.h:153
vector< double > initialDc0Area
Definition Pixel.h:109
vector< int > optFtChosen
Definition Pixel.h:122
double getID() const
Definition Pixel.h:67
void changeValue(const string &layerName_h, const double &value_h, const bool &setNoValueForZero=false)
Change the value of an existing layerMTHREAD->GIS->pack(parName, forName, dClass, year),...
Definition Pixel.cpp:135
vector< vector< double > > vHa
Volume at hectar by each diameter class [m^3/ha].
Definition Pixel.h:137
vector< vector< double > > vol_l
store the volumes of the previous year
Definition Pixel.h:129
vector< vector< double > > vol
Definition Pixel.h:106
vector< vector< double > > deltaArea
Definition Pixel.h:108
vector< vector< double > > addMort
Definition Pixel.h:134
ModelRegion * l2region
Pointer to level 2 region where this pixel is.
Definition Pixel.h:159
vector< vector< double > > tp
Definition Pixel.h:135
vector< vector< double > > cumTp_exp
This is the expected version of cumTp, used for calculating profits.
Definition Pixel.h:139
vector< vector< double > > hArea
Definition Pixel.h:110
vector< vector< double > > vMortAdd
Definition Pixel.h:119
string pxComments
Definition Pixel.h:156
vector< vector< double > > cumAlive
Cumulative prob of remaining alive at beginnin of a given diam class.
Definition Pixel.h:138
double getDoubleValue(const string &layerName_h, const bool &returnZeroForNoValue=false) const
Return the value for a specific layer.
Definition Pixel.cpp:158
vector< int > optDc
Definition Pixel.h:121
vector< int > optDcChosen
Definition Pixel.h:123
string getPxComments() const
Definition Pixel.h:73
int getX() const
Definition Pixel.h:68
vector< vector< double > > cumTp
This is time of passage to REACH a diameter class (while the exogenous tp by diameter class is the ti...
Definition Pixel.h:136
vector< double > vReg
Definition Pixel.h:117
vector< vector< double > > beta
Definition Pixel.h:132
void setValue(const string &layerName_h, const double &value_h)
Insert a new layer and its value.
Definition Pixel.h:78
void setCoordinates(int x_h, int y_h)
Definition Pixel.h:83
void setPastRegArea(const double &value, const int &ft_idx, const int &year)
Definition Pixel.cpp:400
bool usePortfolio
Sampling derived usage of portfolio management (false/true)
Definition Pixel.h:147
int getY() const
Definition Pixel.h:69
double cachedDouble
Cachable double used in some optimized algorithms.
Definition Pixel.h:157
vector< Pixel * > getPixelsAtDistLevel(int distLevel_h) const
Return a vector of pixels at the specified distance (in levels, not in physical units)
Definition Pixel.cpp:53
double getMultiplier(const string &multiplierName, const string &forName, int year=DATA_NOW)
Definition Pixel.cpp:184
Thread manager. Responsable to manage the main thread and "speak" with the GUI.
Forest types (struct)
Definition ModelData.h:293