iLand
svdstate.h
Go to the documentation of this file.
1#ifndef SVDSTATE_H
2#define SVDSTATE_H
3#include <QHash>
4#include <QVector>
5
6#include "grid.h"
7
8class SVDStates;
9struct SVDState
10{
11 SVDState(): composition(0), structure(0), function(0), dominant_species_index(-1), Id(0) { for (int i=0;i<5;++i) admixed_species_index[i]=-1; }
12 int composition; // a kind of hash number combining all species (can be negative)
14 int function;
18 int Id;
21 QString compositionString() const;
23 QString stateLabel() const;
25 float neighborhoodAnalysis(QVector<float> &v);
27 static SVDStates *svd;
28};
29
30// functions for the hashing of states
31inline bool operator==(const SVDState &s1, const SVDState &s2)
32{
33 // this does not include comparing the 'Id'!
35 if (!equal) return false;
36 for (int i=0;i<5;++i)
37 equal = equal && (s1.admixed_species_index[i]==s2.admixed_species_index[i]);
38 return equal;
39}
40
41inline uint qHash(const SVDState &key, uint seed)
42{
43 uint hash_value = qHash(key.composition, seed) ^ qHash(key.structure, seed) ^ qHash(key.function, seed);
44 return hash_value;
45}
46
47class ResourceUnit; // forward
49{
50public:
51 SVDStates();
52 enum EStructureClassification { Structure4m, // 0-4, 4-8, 8-12, ... + irregular
53 Structure2m }; // 0-2, 2-4, 4-6, .... + irregular
55 Functioning5Classes}; // LAI 0-1, 1-2, 2-3, 3-4, >4
56
61 const SVDState &state(int index) const { return mStates[index]; }
63 bool isStateValid(int state) const { return state>=0 && state<mStates.size(); }
65 int count() const { return mStates.size(); }
66
70
73 QString compositionString(int index) { return mCompositionString[index]; }
74
76 QString stateLabel(int index);
77
78private:
79 EStructureClassification mStructureClassification;
80 EFunctioningClassification mFunctioningClassification;
81
82 inline void executeNeighborhood(QVector<float> &vec, QPoint center_point, QVector<QPoint> &list, const Grid<ResourceUnit*> &grid);
83 QString createCompositionString(const SVDState &s);
84 QVector<SVDState> mStates;
85 QVector<QString> mCompositionString;
86 QHash<SVDState, int> mStateLookup;
87};
88#endif // SVDSTATE_H
Grid class (template).
Definition: grid.h:44
ResourceUnit is the spatial unit that encapsulates a forest stand and links to several environmental ...
Definition: resourceunit.h:49
Definition: svdstate.h:49
const SVDState & state(int index) const
access the state with the id 'index'
Definition: svdstate.h:61
EStructureClassification
Definition: svdstate.h:52
@ Structure2m
Definition: svdstate.h:53
@ Structure4m
Definition: svdstate.h:52
EFunctioningClassification
Definition: svdstate.h:54
@ Functioning3Classes
Definition: svdstate.h:54
@ Functioning5Classes
Definition: svdstate.h:55
bool isStateValid(int state) const
return true if 'state' is a valid state Id
Definition: svdstate.h:63
QString compositionString(int index)
get a string with the main species on the resource unit dominant species is uppercase,...
Definition: svdstate.h:73
SVDStates()
Definition: svdstate.cpp:9
int evaluateState(ResourceUnit *ru)
calculate and returns the Id ofthe state that the resource unit is currently in
Definition: svdstate.cpp:39
void evaluateNeighborhood(ResourceUnit *ru)
evaluate the species composition in the neighborhood of the cell this is executed in parallel.
Definition: svdstate.cpp:143
QString stateLabel(int index)
create a human readable string representation of the string
Definition: svdstate.cpp:168
int count() const
return the number of states
Definition: svdstate.h:65
Definition: svdstate.h:10
SVDState()
Definition: svdstate.h:11
int composition
Definition: svdstate.h:12
int function
Definition: svdstate.h:14
static SVDStates * svd
link to the SVD container class
Definition: svdstate.h:27
int admixed_species_index[5]
Definition: svdstate.h:16
QString compositionString() const
get a string with the main species on the resource unit dominant species is uppercase,...
Definition: svdstate.cpp:255
float neighborhoodAnalysis(QVector< float > &v)
calculate neighborhood population, return total weight added to the vector of species
Definition: svdstate.cpp:271
int Id
the unique Id of the state within the current simulation.
Definition: svdstate.h:18
QString stateLabel() const
a human readable string describing the state
Definition: svdstate.cpp:263
int dominant_species_index
Definition: svdstate.h:15
int structure
Definition: svdstate.h:13
bool operator==(const SVDState &s1, const SVDState &s2)
Definition: svdstate.h:31
uint qHash(const SVDState &key, uint seed)
Definition: svdstate.h:41