272 pugi::xml_document xmldoc;
275 std::string xml_input_file =
"plugins/projectbuilder/inputs/inputs.xml";
281 bool light_coord_type =
false;
284 bool is_dirty =
false;
302 float diffuse_extinction_coeff = 0.1;
305 bool enforce_periodic_boundary_x =
true;
308 bool enforce_periodic_boundary_y =
true;
314 std::vector<std::string> bandlabels;
317 std::set<std::string> band_group_names;
320 std::map<std::string, bandGroup> band_group_lookup;
323 std::string current_band_group;
326 std::set<std::string> bandlabels_set;
329 std::set<std::string> bandlabels_set_emissivity;
332 std::set<std::string> bandlabels_set_wavelength;
335 std::map<std::string, int> direct_ray_count_dict;
338 std::map<std::string, int> diffuse_ray_count_dict;
341 std::map<std::string, int> scattering_depth_dict;
344 std::string new_band_label;
347 float wavelength_min = 400.0f;
350 float wavelength_max = 700.0f;
353 bool enable_wavelength;
356 bool enable_emission;
359 std::vector<uint> ground_UUIDs;
365 std::vector<uint> leaf_UUIDs;
368 std::vector<uint> petiolule_UUIDs;
371 std::vector<uint> petiole_UUIDs;
374 std::vector<uint> internode_UUIDs;
377 std::vector<uint> peduncle_UUIDs;
380 std::vector<uint> petal_UUIDs;
383 std::vector<uint> flower_UUIDs;
386 std::vector<uint> sepal_UUIDs;
389 std::vector<uint> pedicel_UUIDs;
392 std::vector<uint> fruit_UUIDs;
395 std::vector<std::string> primitive_names = {
"All",
"ground",
"leaf",
"petiolule",
"petiole",
"internode",
"peduncle",
"petal",
"pedicel",
"fruit"};
398 std::map<std::string, bool> bounding_boxes = {
399 {
"plantID",
false}, {
"leafID",
false}, {
"peduncleID",
false}, {
"closedflowerID",
false}, {
"openflowerID",
false}, {
"fruitID",
false}, {
"rank",
false}, {
"age",
false}, {
"carbohydrate_concentration",
false}};
402 std::map<std::string, int> bounding_boxes_map;
405 std::set<std::string> primitive_names_set = {
"All",
"ground",
"leaf",
"petiolule",
"petiole",
"internode",
"peduncle",
"petal",
"pedicel",
"fruit"};
408 std::map<std::string, std::vector<uint> *> primitive_addresses;
411 std::map<std::string, std::vector<uint>> primitive_UUIDs;
414 std::map<std::string, std::map<std::string, std::vector<uint>>> primitive_UUIDs_dict;
417 std::map<std::string, std::vector<bool>> primitive_continuous;
420 std::map<std::string, std::map<std::string, std::vector<bool>>> primitive_continuous_dict;
423 std::map<std::string, std::vector<std::string>> primitive_spectra;
426 std::map<std::string, std::map<std::string, std::vector<std::string>>> primitive_spectra_dict;
429 std::map<std::string, std::map<std::string, std::vector<float>>> primitive_values;
432 std::map<std::string, std::map<std::string, std::map<std::string, std::vector<float>>>> primitive_values_dict;
435 std::set<std::string> data_groups_set = {
"All"};
441 std::vector<std::string> timeseries_variables;
444 float air_temperature = 300.f;
447 float air_humidity = 0.5f;
462 std::string xml_error_string;
465 std::vector<std::string> rig_labels;
468 std::vector<std::vector<distribution>> rig_position_noise;
471 std::vector<std::vector<distribution>> rig_lookat_noise;
474 std::vector<helios::RGBcolor> rig_colors;
477 std::vector<helios::vec3> camera_positions;
480 std::vector<helios::vec3> camera_lookats;
483 std::vector<std::string> camera_labels;
486 std::vector<helios::int2> camera_resolutions;
489 std::vector<float> focal_plane_distances;
492 std::vector<float> lens_diameters;
495 std::vector<float> FOV_aspect_ratios;
498 std::vector<float> HFOVs;
501 std::map<std::string, int> rig_dict;
504 std::set<std::string> rig_labels_set;
507 std::vector<bool> write_depth;
510 std::vector<bool> write_norm_depth;
516 std::vector<std::vector<int>> keypoint_frames;
519 std::vector<std::vector<helios::vec3>> camera_position_vec;
522 std::vector<std::vector<helios::vec3>> camera_lookat_vec;
528 std::string camera_label =
"RGB";
534 std::vector<int> num_images_vec;
537 std::vector<std::string> camera_names;
540 std::set<std::string> camera_names_set;
546 float focal_plane_distance = 0.4;
549 float lens_diameter = 0.02;
552 float FOV_aspect_ratio = 1.4;
558 std::map<std::string, int> camera_dict;
561 std::vector<std::set<std::string>> rig_camera_labels;
564 std::vector<std::string> light_names;
567 std::set<std::string> light_names_set;
570 std::vector<std::string> light_types;
574 std::vector<std::string> all_light_types = {
"sphere",
"rectangle",
"disk"};
577 std::vector<helios::vec3> light_direction_vec;
580 std::vector<helios::SphericalCoord> light_direction_sph_vec;
583 std::vector<helios::vec3> light_rotation_vec;
586 std::vector<helios::vec2> light_size_vec;
589 std::vector<float> light_radius_vec;
592 std::vector<float> light_flux_vec;
595 std::map<std::string, int> light_dict;
598 std::vector<std::set<std::string>> rig_light_labels;
601 std::map<std::string, std::vector<std::vector<uint>>> arrow_dict;
607 pugi::xml_node helios;
610 bool enable_coordinate_axes =
true;
613 bool enable_colorbar =
false;
616 float latitude = 38.55;
619 float longitude = 121.76;
625 std::string csv_weather_file =
"plugins/projectbuilder/inputs/weather_data.csv";
628 std::string cimis_weather_file;
631 bool is_weather_file_csv =
true;
643 std::string ground_texture_file =
"plugins/projectbuilder/inputs/dirt.jpg";
648 bool use_ground_texture =
true;
651 float ground_color[3] = {0.0, 0.0, 0.0};
654 std::string ground_model_file;
657 std::vector<std::string> canopy_labels;
660 std::set<std::string> canopy_labels_set;
663 std::vector<std::string> canopy_data_groups;
669 std::vector<helios::vec3> canopy_origins;
675 std::vector<helios::int2> plant_counts;
681 std::vector<helios::vec2> plant_spacings;
684 std::vector<std::vector<helios::vec3>> individual_plant_locations;
687 std::string plant_library_name =
"cowpea";
690 std::string plant_library_name_verbose =
"Cowpea (Vigna unguiculata)";
693 std::vector<std::string> plant_library_names;
696 std::vector<std::string> plant_library_names_verbose;
699 std::set<std::string> plant_types = {
"almond",
"apple",
"bindweed",
"butterlettuce",
"cheeseweed",
"bean",
"cowpea",
"easternredbud",
"grapevine_VSP",
"maize",
700 "olive",
"pistachio",
"puncturevine",
"rice",
"sorghum",
"soybean",
"sugarbeet",
"tomato",
"walnut",
"wheat"};
703 std::set<std::string> plant_types_verbose = {
"Almond Tree (Prunus dulcis)",
"Apple Tree (Malus pumila)",
704 "Bindweed (Convolvulus arvensis)",
"Butter Lettuce (Lactuca sativa)",
705 "Cheeseweed (Malva neglecta)",
"Common Bean (Phaseolus vulgaris)",
706 "Cowpea (Vigna unguiculata)",
"Eastern Redbud (Cercis canadensis)",
707 "Grapevine (Vitis vinifera)",
"Maize (Zea mays)",
708 "Olive Tree (Olea europaea)",
"Pistachio Tree (Pistachia vera)",
709 "Puncturevine (Tribulus terrestris)",
"Rice (Oryza sativa)",
710 "Sorghum (Sorghum bicolor)",
"Soybean (Glycine max)",
711 "Sugar Beet (Beta vulgaris)",
"Tomato (Solanum lycopersicum)",
712 "Walnut Tree (Juglans regia)",
"Wheat (Triticum aestivum)"};
715 std::map<std::string, std::string> plant_type_lookup = {{
"Almond Tree (Prunus dulcis)",
"almond"},
716 {
"Apple Tree (Malus pumila)",
"apple"},
717 {
"Bindweed (Convolvulus arvensis)",
"bindweed"},
718 {
"Butter Lettuce (Lactuca sativa)",
"butterlettuce"},
719 {
"Cheeseweed (Malva neglecta)",
"cheeseweed"},
720 {
"Common Bean (Phaseolus vulgaris)",
"bean"},
721 {
"Cowpea (Vigna unguiculata)",
"cowpea"},
722 {
"Eastern Redbud (Cercis canadensis)",
"easternredbud"},
723 {
"Grapevine (Vitis vinifera)",
"grapevine_VSP"},
724 {
"Maize (Zea mays)",
"maize"},
725 {
"Olive Tree (Olea europaea)",
"olive"},
726 {
"Pistachio Tree (Pistachia vera)",
"pistachio"},
727 {
"Puncturevine (Tribulus terrestris)",
"puncturevine"},
728 {
"Rice (Oryza sativa)",
"rice"},
729 {
"Sorghum (Sorghum bicolor)",
"sorghum"},
730 {
"Soybean (Glycine max)",
"soybean"},
731 {
"Sugar Beet (Beta vulgaris)",
"sugarbeet"},
732 {
"Tomato (Solanum lycopersicum)",
"tomato"},
733 {
"Walnut Tree (Juglans regia)",
"walnut"},
734 {
"Wheat (Triticum aestivum)",
"wheat"}};
737 std::map<std::string, std::string> plant_type_verbose_lookup = {{
"almond",
"Almond Tree (Prunus dulcis)"},
738 {
"apple",
"Apple Tree (Malus pumila)"},
739 {
"bindweed",
"Bindweed (Convolvulus arvensis)"},
740 {
"butterlettuce",
"Butter Lettuce (Lactuca sativa)"},
741 {
"cheeseweed",
"Cheeseweed (Malva neglecta)"},
742 {
"bean",
"Common Bean (Phaseolus vulgaris)"},
743 {
"cowpea",
"Cowpea (Vigna unguiculata)"},
744 {
"easternredbud",
"Eastern Redbud (Cercis canadensis)"},
745 {
"grapevine_VSP",
"Grapevine (Vitis vinifera)"},
746 {
"maize",
"Maize (Zea mays)"},
747 {
"olive",
"Olive Tree (Olea europaea)"},
748 {
"pistachio",
"Pistachio Tree (Pistachia vera)"},
749 {
"puncturevine",
"Puncturevine (Tribulus terrestris)"},
750 {
"rice",
"Rice (Oryza sativa)"},
751 {
"sorghum",
"Sorghum (Sorghum bicolor)"},
752 {
"soybean",
"Soybean (Glycine max)"},
753 {
"sugarbeet",
"Sugar Beet (Beta vulgaris)"},
754 {
"tomato",
"Tomato (Solanum lycopersicum)"},
755 {
"walnut",
"Walnut Tree (Juglans regia)"},
756 {
"wheat",
"Wheat (Triticum aestivum)"}};
762 std::vector<float> plant_ages;
765 float ground_clipping_height = 0;
768 std::vector<float> ground_clipping_heights;
771 std::map<std::string, int> canopy_labels_dict;
774 std::vector<std::vector<uint>> canopy_IDs;
777 int direct_ray_count = 100;
780 int diffuse_ray_count = 1000;
783 int scattering_depth = 2;
786 float air_turbidity = 0.05;
789 std::vector<std::string> obj_files;
792 std::vector<std::vector<uint>> obj_UUIDs;
795 std::vector<std::string> obj_names;
798 std::set<std::string> obj_names_set;
801 std::string current_obj;
804 std::map<std::string, int> obj_names_dict;
807 std::vector<helios::vec3> obj_positions;
810 std::vector<helios::vec3> prev_obj_positions;
813 std::vector<helios::vec3> obj_orientations;
816 std::vector<helios::vec3> prev_obj_orientations;
819 std::vector<std::string> obj_data_groups;
822 std::vector<helios::vec3> prev_obj_scales;
825 std::vector<helios::vec3> obj_scales;
828 std::vector<helios::RGBcolor> obj_colors;
831 std::set<std::string> xml_library_files = {
"plugins/radiation/spectral_data/leaf_surface_spectral_library.xml",
"plugins/radiation/spectral_data/soil_surface_spectral_library.xml"};
834 std::set<std::string> possible_spectra;
837 std::set<std::string> camera_xml_library_files = {
"plugins/radiation/spectral_data/camera_spectral_library.xml"};
840 std::vector<std::string> possible_camera_calibrations;
843 std::vector<std::map<std::string, std::string>> camera_calibrations;
846 std::string current_calibration_band;
849 std::set<std::string> light_xml_library_files = {
"plugins/radiation/spectral_data/light_spectral_library.xml"};
852 std::vector<std::string> possible_light_spectra;
855 std::vector<std::string> light_spectra;
858 std::string solar_direct_spectrum =
"solar_spectrum_direct_ASTMG173";
861 float reflectivity = 0.0;
864 float transmissivity = 0.0;
867 float emissivity = 1.0;
870 float leaf_reflectivity = 0.0;
873 float leaf_transmissivity = 0.0;
876 float leaf_emissivity = 0.0;
879 float ground_reflectivity = 0.0;
882 float ground_transmissivity = 0.0;
885 float ground_emissivity = 1.0;
888 float petiolule_reflectivity = 0.0;
891 float petiolule_transmissivity = 0.0;
894 float petiolule_emissivity = 0.0;
897 float petiole_reflectivity = 0.0;
900 float petiole_transmissivity = 0.0;
903 float petiole_emissivity = 0.0;
906 float internode_reflectivity = 0.0;
909 float internode_transmissivity = 0.0;
912 float internode_emissivity = 0.0;
915 float peduncle_reflectivity = 0.0;
918 float peduncle_transmissivity = 0.0;
921 float peduncle_emissivity = 0.0;
924 float petal_reflectivity = 0.0;
927 float petal_transmissivity = 0.0;
930 float petal_emissivity = 0.0;
933 float pedicel_reflectivity = 0.0;
936 float pedicel_transmissivity = 0.0;
939 float pedicel_emissivity = 0.0;
942 float fruit_reflectivity = 0.0;
945 float fruit_transmissivity = 0.0;
948 float fruit_emissivity = 0.0;
951 std::string reflectivity_spectrum;
954 std::string transmissivity_spectrum;
957 std::string emissivity_spectrum;
960 std::string leaf_reflectivity_spectrum =
"grape_leaf_reflectivity_0000";
963 std::string leaf_transmissivity_spectrum =
"grape_leaf_transmissivity_0000";
966 std::string leaf_emissivity_spectrum;
969 std::string ground_reflectivity_spectrum =
"soil_reflectivity_0000";
972 std::string ground_transmissivity_spectrum;
975 std::string ground_emissivity_spectrum;
978 std::string petiolule_reflectivity_spectrum;
981 std::string petiolule_transmissivity_spectrum;
984 std::string petiolule_emissivity_spectrum;
987 std::string petiole_reflectivity_spectrum;
990 std::string petiole_transmissivity_spectrum;
993 std::string petiole_emissivity_spectrum;
996 std::string internode_reflectivity_spectrum;
999 std::string internode_transmissivity_spectrum;
1002 std::string internode_emissivity_spectrum;
1005 std::string peduncle_reflectivity_spectrum;
1008 std::string peduncle_transmissivity_spectrum;
1011 std::string peduncle_emissivity_spectrum;
1014 std::string petal_reflectivity_spectrum;
1017 std::string petal_transmissivity_spectrum;
1020 std::string petal_emissivity_spectrum;
1023 std::string pedicel_reflectivity_spectrum;
1026 std::string pedicel_transmissivity_spectrum;
1029 std::string pedicel_emissivity_spectrum;
1032 std::string fruit_reflectivity_spectrum;
1035 std::string fruit_transmissivity_spectrum;
1038 std::string fruit_emissivity_spectrum;
1041 std::set<std::string> visualization_types_primitive = {
"radiation_flux_PAR",
"radiation_flux_NIR",
"radiation_flux_LW"};
1044 std::set<std::string> visualization_types_object = {};
1047 std::map<std::string, helios::HeliosDataType> primitive_data_types;
1050 std::map<std::string, helios::HeliosDataType> object_data_types;
1053 std::string visualization_type =
"RGB";
1056 std::string current_canopy;
1059 std::string current_rig;
1062 std::string current_cam;
1065 std::string current_light;
1068 std::string current_keypoint;
1071 std::string current_primitive =
"All";
1074 std::string current_data_group =
"All";
1077 std::string current_band =
"red";
1080 std::string current_band_reflectivity =
"red";
1083 std::string current_band_transmissivity =
"red";
1086 std::string current_band_emissivity =
"red";
1089 std::map<std::string, std::vector<uint>> camera_models_dict;
1092 void deleteArrows();
1098 void deleteCanopy(
const std::string &
canopy);
1104 void deleteObject(
const std::string &
obj);
1110 void updateCanopy(
const std::string &
canopy);
1116 void updateArrows();
1119 void updateCameraModels();
1122 void deleteCameraModels();
1125 void updateDataGroups();
1128 void updatePrimitiveTypes();
1134 std::string currently_dragging;
1137 std::string currently_dragging_type;
1140 bool disable_dragging =
false;
1143 void canopyTab(std::string curr_canopy_name,
int id);
1146 void rigTab(std::string curr_rig_name,
int id);
1149 void objectTab(std::string curr_obj_name,
int id);
1152 void saveObject(std::string file_name, std::vector<uint> obj_UUID_vec, std::string file_extension);
1155 void saveCanopy(std::string file_name, std::vector<uint> canopy_ID_vec,
helios::vec3 position, std::string file_extension)
const;
1158 void saveCanopy(std::string file_name_base, std::vector<uint> canopy_ID_vec, std::vector<helios::vec3> positions, std::string file_extension)
const;
1161 bool save_plants_individually =
false;
1164 void addBand(std::string label,
float wavelength_min,
float wavelength_max,
bool enable_emission);
1167 void addBand(std::string label,
bool enable_emission);
1170 std::map<std::string, std::string> distribution_types;
1173 std::map<std::string, std::vector<float>> distribution_params;
1176 std::map<std::string, int> distribution_dict;
1179 std::map<std::string, taggedPtr> randomized_variable_lookup;
1182 std::default_random_engine generator;
1185 std::string current_distribution =
"Normal (Gaussian)";
1188 std::string current_axis =
"X";
1191 std::set<std::string> possible_axes = {
"X",
"Y",
"Z"};
1194 std::vector<std::string> distribution_names = {
"N/A",
"Normal (Gaussian)",
"Uniform",
"Weibull"};
1197 std::vector<distribution> distributions;
1200 std::vector<float> curr_distribution_params = {0.0, 0.0};
1203 bool randomize_repeatedly =
false;
1206 std::streambuf *old_cout_stream_buf = std::cout.rdbuf();
1209 std::stringstream captured_cout;
1211 std::size_t last_console_size = 0;
1214 int num_recordings = 1;
1217 std::map<std::string, object> objects_dict;
1220 std::map<std::string, canopy> canopy_dict;
1229 std::set<int> dirty_objects = {};
1232 std::set<int> dirty_canopies = {};
1235 std::set<std::string> lighting_models = {
"None",
"Phong",
"Phong Shadowed"};
1238 std::string lighting_model =
"None";
1244 float light_intensity = 1.0;
1278 static int selfTest(
int argc = 0,
char **argv =
nullptr);
1334 std::map<std::string, int>
getNodeLabels(
const std::string &label_name,
const std::string &node_name, std::vector<std::string> &labels_vec);
1342 void getKeypoints(
const std::string &name,
const std::string &field, std::vector<std::vector<int>> &keypoints);
1350 void setKeypoints(
const std::string &name,
const std::string &field, std::vector<std::vector<int>> &keypoints);
1358 void xmlGetValue(
const std::string &name,
const std::string &parent,
int &default_value);
1366 void xmlGetValue(
const std::string &name,
const std::string &parent,
float &default_value);
1374 void xmlGetValue(
const std::string &name,
const std::string &parent, std::string &default_value);
1422 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::vec2> &default_vec);
1430 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::vec3> &default_vec);
1438 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::int2> &default_vec);
1446 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<std::string> &default_vec);
1454 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<float> &default_vec);
1462 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<int> &default_vec);
1470 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<helios::RGBcolor> &default_vec);
1478 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<std::vector<helios::vec3>> &default_vec);
1486 void xmlGetValues(
const std::string &name,
const std::string &parent, std::vector<std::set<std::string>> &default_vec);
1494 void xmlGetValues(
const std::string &name,
const std::string &parent, std::set<std::string> &default_set);
1501 void xmlRemoveField(
const std::string &name,
const std::string &parent);
1509 void xmlSetValue(
const std::string &name,
const std::string &parent,
int &default_value);
1517 void xmlSetValue(
const std::string &name,
const std::string &parent,
float &default_value);
1525 void xmlSetValue(
const std::string &name,
const std::string &parent, std::string &default_value);
1558 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::vec2> &values_vec, std::map<std::string, int> &node_map);
1567 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::vec3> &values_vec, std::map<std::string, int> &node_map);
1576 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::int2> &values_vec, std::map<std::string, int> &node_map);
1585 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<std::string> &values_vec, std::map<std::string, int> &node_map);
1594 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<int> &values_vec, std::map<std::string, int> &node_map);
1603 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<float> &values_vec, std::map<std::string, int> &node_map);
1612 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<helios::RGBcolor> &values_vec, std::map<std::string, int> &node_map);
1621 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<std::vector<helios::vec3>> &values_vec, std::map<std::string, int> &node_map);
1630 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::vector<std::set<std::string>> &values_vec, std::map<std::string, int> &node_map);
1638 void xmlSetValues(
const std::string &field_name,
const std::string &node_name, std::set<std::string> &values_set);
1646 void setNodeLabels(
const std::string &label_name,
const std::string &node_name, std::set<std::string> &labels_set);
1648#ifdef ENABLE_HELIOS_VISUALIZER
1654 void randomizePopup(std::string popup_name,
taggedPtr ptr);
1661 void noisePopup(std::string popup_name, std::vector<distribution> &dist_vec);
1663 void randomizePopup(std::string popup_name,
taggedPtr ptr);
1664 void noisePopup(std::string popup_name, std::vector<distribution> &dist_vec);
1688#ifdef ENABLE_HELIOS_VISUALIZER
1693 void randomizerParams(std::string var_name);
1695 void randomizerParams(std::string var_name);
1702 void sample(std::string var_name);
1707#ifdef ENABLE_HELIOS_VISUALIZER
1709 void outputConsole();
1711 void outputConsole();
1720 void updateColor(std::string curr_obj, std::string obj_type,
float *new_color);
1737#ifdef ENABLE_HELIOS_VISUALIZER
1744 void dropDown(std::string widget_name, std::string &selected, std::vector<std::string> choices);
1752 void dropDown(std::string widget_name, std::string &selected, std::set<std::string> choices);
1754 void dropDown(std::string widget_name, std::string &selected, std::vector<std::string> choices);
1755 void dropDown(std::string widget_name, std::string &selected, std::set<std::string> choices);
1758#ifdef ENABLE_HELIOS_VISUALIZER
1760 void refreshVisualization();
1763 void refreshVisualizationTypes();
1765 void refreshVisualization();
1766 void refreshVisualizationTypes();
1769#ifdef ENABLE_HELIOS_VISUALIZER
1821 std::cout.rdbuf(captured_cout.rdbuf());
1822 primitive_UUIDs = {{
"ground", ground_UUIDs}, {
"leaf", leaf_UUIDs}, {
"petiolule", petiolule_UUIDs}, {
"petiole", petiole_UUIDs}, {
"internode", internode_UUIDs},
1823 {
"peduncle", peduncle_UUIDs}, {
"petal", petal_UUIDs}, {
"pedicel", pedicel_UUIDs}, {
"fruit", fruit_UUIDs}};
1824 primitive_continuous = {{
"All", {
false,
false,
false}}, {
"ground", {
false,
false,
false}}, {
"leaf", {
false,
false,
false}}, {
"petiolule", {
false,
false,
false}}, {
"petiole", {
false,
false,
false}},
1825 {
"internode", {
false,
false,
false}}, {
"peduncle", {
false,
false,
false}}, {
"petal", {
false,
false,
false}}, {
"pedicel", {
false,
false,
false}}, {
"fruit", {
false,
false,
false}}};
1826 bandlabels = {
"red",
"green",
"blue",
"PAR",
"NIR",
"LW"};
1827 bandlabels_set = {
"All",
"red",
"green",
"blue",
"PAR",
"NIR",
"LW"};
1828 bandlabels_set_emissivity = {
"red",
"green",
"blue",
"PAR",
"NIR",
"LW"};
1831 for (std::string band: bandlabels) {
1832 primitive_values[band] = {{
"All", {reflectivity, transmissivity, emissivity}},
1833 {
"ground", {ground_reflectivity, ground_transmissivity, ground_emissivity}},
1834 {
"leaf", {leaf_reflectivity, leaf_transmissivity, leaf_emissivity}},
1835 {
"petiolule", {petiolule_reflectivity, petiolule_transmissivity, petiolule_emissivity}},
1836 {
"petiole", {petiole_reflectivity, petiole_transmissivity, petiole_emissivity}},
1837 {
"internode", {internode_reflectivity, internode_transmissivity, internode_emissivity}},
1838 {
"peduncle", {peduncle_reflectivity, peduncle_transmissivity, peduncle_emissivity}},
1839 {
"petal", {petal_reflectivity, petal_transmissivity, petal_emissivity}},
1840 {
"pedicel", {pedicel_reflectivity, pedicel_transmissivity, pedicel_emissivity}},
1841 {
"fruit", {fruit_reflectivity, fruit_transmissivity, fruit_emissivity}}};
1842 direct_ray_count_dict[band] = direct_ray_count;
1843 diffuse_ray_count_dict[band] = diffuse_ray_count;
1844 scattering_depth_dict[band] = scattering_depth;
1846 primitive_spectra = {{
"All", {reflectivity_spectrum, transmissivity_spectrum, emissivity_spectrum}},
1847 {
"ground", {ground_reflectivity_spectrum, ground_transmissivity_spectrum, ground_emissivity_spectrum}},
1848 {
"leaf", {leaf_reflectivity_spectrum, leaf_transmissivity_spectrum, leaf_emissivity_spectrum}},
1849 {
"petiolule", {petiolule_reflectivity_spectrum, petiolule_transmissivity_spectrum, petiolule_emissivity_spectrum}},
1850 {
"petiole", {petiole_reflectivity_spectrum, petiole_transmissivity_spectrum, petiole_emissivity_spectrum}},
1851 {
"internode", {internode_reflectivity_spectrum, internode_transmissivity_spectrum, internode_emissivity_spectrum}},
1852 {
"peduncle", {peduncle_reflectivity_spectrum, peduncle_transmissivity_spectrum, peduncle_emissivity_spectrum}},
1853 {
"petal", {petal_reflectivity_spectrum, petal_transmissivity_spectrum, petal_emissivity_spectrum}},
1854 {
"pedicel", {pedicel_reflectivity_spectrum, pedicel_transmissivity_spectrum, pedicel_emissivity_spectrum}},
1855 {
"fruit", {fruit_reflectivity_spectrum, fruit_transmissivity_spectrum, fruit_emissivity_spectrum}}};
1860 std::cout.rdbuf(old_cout_stream_buf);
1864#ifdef HELIOS_VISUALIZER
1868#ifdef PLANT_ARCHITECTURE
1872#ifdef RADIATION_MODEL
1881#ifdef ENERGYBALANCEMODEL
1885#ifdef BOUNDARYLAYERCONDUCTANCEMODEL