23 float numberlayers = 1.5;
24 float brownpigments = 0.f;
25 float chlorophyllcontent = 30.f;
26 float carotenoidcontent = 7.f;
27 float anthocyancontent = 1;
28 float watermass = 0.015f;
29 float drymass = 0.09f;
31 float carbonconstituents = 0.f;
61 LeafOpticsProperties(
float chlorophyllcontent,
float carotenoidcontent,
float anthocyancontent,
float watermass,
float drymass,
float protein,
float carbonconstituents) :
62 chlorophyllcontent(chlorophyllcontent), carotenoidcontent(carotenoidcontent), anthocyancontent(anthocyancontent), watermass(watermass), drymass(drymass), protein(protein), carbonconstituents(carbonconstituents) {
132 static int selfTest(
int argc = 0,
char **argv =
nullptr);
140 void run(
const std::vector<uint> &UUIDs,
const LeafOpticsProperties &leafproperties,
const std::string &label);
163 void PROSPECT(
float numberlayers,
float Chlorophyllcontent,
float carotenoidcontent,
float anthocyancontent,
float brownpigments,
float watermass,
float drymass,
float protein,
float carbonconstituents, std::vector<float> &reflectivities_fit,
164 std::vector<float> &transmissivities_fit);
251 std::vector<float> R_spec_normal, R_spec_diffuse, wave_length, Rtotal, Ttotal;
254 const uint nw = 2101;
259 std::map<std::string, LeafOpticsProperties> spectrum_parameters_map;
261 std::map<std::string, LeafOpticsProperties> species_library;
263 void initializeSpeciesLibrary();
266 float chlorophyll_default = 43.0;
267 float chlorophyll_default_grass = 57.0;
268 float carotenoid2chlorophyll = 0.23;
269 float carotenoid2chlorophyll_grass = 0.21;
270 float anthocyanin2carotenoid = 0.06;
271 float anthocyanin2carotenoid_grass = 0.006;
272 float drymass2chlorophyll = 1.2669e-04;
273 float drymass2chlorophyll_grass = 9.2196e-05;
274 float watercontent = 0.9;
277 std::vector<float> refractiveindex, absorption_chlorophyll, absorption_carotenoid, absorption_anthocyanin, absorption_brown, absorption_water, absorption_drymass;
278 std::vector<float> absorption_protein, absorption_carbonconstituents;
279 std::vector<float> Rcof, Tcof;
289 float transmittance(
double k);
292 void surface(
float degree, std::vector<float> &reflectivities);
295 bool message_flag =
true;
298 std::vector<std::string> output_prim_data;
303 bool nitrogen_mode_active =
false;
311 std::string spectrum_label;
315 std::vector<SpectrumBin> nitrogen_bins;
318 struct ObjectAssignment {
320 float N_at_assignment;
321 std::vector<uint> primitive_UUIDs;
325 std::map<uint, ObjectAssignment> object_assignments;
328 std::map<uint, uint> primitive_to_object;
336 std::map<uint, std::vector<uint>> groupPrimitivesByObject(
const std::vector<uint> &UUIDs);
339 void createAdaptiveBins(
const std::vector<float> &nitrogen_values);
342 uint findNearestBin(
float N_value);
345 bool shouldReassign(
float current_N,
uint current_bin);
348 bool isSignificantImprovement(
float current_N,
uint old_bin,
uint new_bin);
351 void assignSpectrumToPrimitives(
const std::vector<uint> &UUIDs,
uint bin_index);