From be866d6245d43c108ca84ca7721482650e70db3a Mon Sep 17 00:00:00 2001 From: Daniel Falster Date: Tue, 10 Oct 2023 21:49:38 +1100 Subject: [PATCH] Documentation: Update readme, contributing guide, remove website and vigenettes (#776) * Remove vignettes, docs and website, now that traits.build has more developed documentation. * Enhance Readme & contributing page --------- Co-authored-by: ehwenk --- .github/CONTRIBUTING.md | 80 +- .gitignore | 2 + README.md | 131 +- _pkgdown.yml | 148 - docs/404.html | 149 - docs/CODE_OF_CONDUCT.html | 128 - docs/CONTRIBUTING.html | 132 - docs/ISSUE_TEMPLATE.html | 127 - docs/LICENSE-text.html | 140 - docs/articles/adding_data.html | 1313 --- docs/articles/austraits.build.html | 260 - .../austraits_database_structure.html | 1500 ---- docs/articles/austraits_file_structure.html | 1095 --- .../kePrint-0.0.1/kePrint.js | 8 - .../lightable-0.0.1/lightable.css | 272 - docs/articles/austraits_overview.html | 234 - docs/articles/contributing_data.html | 194 - docs/articles/docker.html | 187 - docs/articles/figures/giz035fig2.png | Bin 56893 -> 0 bytes docs/articles/index.html | 134 - docs/articles/trait_definitions.html | 7099 ----------------- docs/authors.html | 166 - docs/bootstrap-toc.css | 60 - docs/bootstrap-toc.js | 159 - docs/docs/figures/Workflow.png | Bin 78508 -> 0 bytes docs/docs/figures/giz035fig2.png | Bin 56893 -> 0 bytes docs/docs/figures/logo.png | Bin 33406 -> 0 bytes docs/docsearch.css | 148 - docs/docsearch.js | 85 - docs/figures/Workflow.png | Bin 78508 -> 0 bytes docs/figures/giz035fig2.png | Bin 56893 -> 0 bytes docs/figures/logo.png | Bin 33406 -> 0 bytes docs/index.html | 223 - docs/link.svg | 12 - docs/news/index.html | 119 - docs/pkgdown.css | 384 - docs/pkgdown.js | 108 - docs/pkgdown.yml | 17 - docs/reference/Rplot001.png | Bin 1011 -> 0 bytes docs/reference/bib_print.html | 146 - docs/reference/build_add_version.html | 147 - docs/reference/build_combine.html | 145 - docs/reference/build_find_taxon.html | 147 - docs/reference/build_setup_pipeline.html | 154 - docs/reference/build_update_taxonomy.html | 143 - docs/reference/create_tree_branch.html | 153 - docs/reference/dataset_configure.html | 165 - docs/reference/dataset_process.html | 171 - docs/reference/dataset_report.html | 173 - docs/reference/dataset_test.html | 150 - docs/reference/dataset_test_worker.html | 155 - docs/reference/get_schema.html | 155 - docs/reference/get_unit_conversions.html | 146 - docs/reference/index.html | 460 -- docs/reference/metadata_add_contexts.html | 143 - docs/reference/metadata_add_locations.html | 152 - .../reference/metadata_add_source_bibtex.html | 161 - docs/reference/metadata_add_source_doi.html | 149 - docs/reference/metadata_add_substitution.html | 155 - .../metadata_add_substitutions_list.html | 143 - .../metadata_add_substitutions_table.html | 173 - .../metadata_add_taxonomic_change.html | 157 - .../metadata_add_taxonomic_changes_list.html | 145 - docs/reference/metadata_add_traits.html | 139 - .../metadata_check_custom_R_code.html | 142 - docs/reference/metadata_create_template.html | 151 - .../metadata_exclude_observations.html | 151 - .../metadata_find_taxonomic_change.html | 141 - docs/reference/metadata_path_dataset_id.html | 139 - .../metadata_remove_taxonomic_change.html | 147 - .../metadata_update_taxonomic_change.html | 157 - .../metadata_user_select_column.html | 143 - .../reference/metadata_user_select_names.html | 141 - docs/reference/notes_random_string.html | 141 - docs/reference/notetaker_add_note.html | 143 - docs/reference/notetaker_as_note.html | 145 - docs/reference/notetaker_get_note.html | 145 - docs/reference/notetaker_print_all.html | 147 - docs/reference/notetaker_print_note.html | 156 - docs/reference/notetaker_print_notes.html | 147 - docs/reference/notetaker_start.html | 133 - docs/reference/pipe.html | 127 - docs/reference/process_add_all_columns.html | 149 - docs/reference/process_convert_units.html | 147 - .../process_create_observation_id.html | 143 - docs/reference/process_custom_code.html | 144 - .../process_flag_excluded_observations.html | 147 - .../process_flag_unsupported_traits.html | 143 - .../process_flag_unsupported_values.html | 146 - docs/reference/process_format_contexts.html | 150 - .../process_format_contributors.html | 154 - docs/reference/process_format_locations.html | 154 - docs/reference/process_generate_id.html | 152 - docs/reference/process_parse_data.html | 158 - docs/reference/process_standardise_names.html | 139 - docs/reference/process_taxonomic_updates.html | 143 - .../process_unit_conversion_name.html | 145 - docs/reference/read_csv_char.html | 141 - docs/reference/read_metadata.html | 133 - docs/reference/read_metadata_dataset.html | 139 - docs/reference/read_yaml.html | 124 - docs/reference/util_append_to_list.html | 150 - docs/reference/util_bib_to_list.html | 139 - docs/reference/util_check_all_values_in.html | 149 - docs/reference/util_df_convert_character.html | 159 - docs/reference/util_df_to_list.html | 2844 ------- docs/reference/util_extract_list_element.html | 154 - docs/reference/util_get_SHA.html | 144 - docs/reference/util_get_version.html | 139 - docs/reference/util_kable_styling_html.html | 133 - docs/reference/util_list_to_bib.html | 139 - docs/reference/util_list_to_df1.html | 146 - docs/reference/util_list_to_df2.html | 160 - docs/reference/util_replace_null.html | 152 - docs/reference/util_separate_and_sort.html | 150 - docs/reference/util_standardise_doi.html | 133 - docs/reference/util_strip_taxon_names.html | 147 - docs/reference/write_metadata.html | 150 - docs/reference/write_metadata_dataset.html | 148 - docs/reference/write_plaintext.html | 144 - docs/reference/write_yaml.html | 124 - docs/sitemap.xml | 300 - {docs/articles => inst}/figures/Workflow.png | Bin {docs/articles => inst}/figures/logo.png | Bin vignettes/.gitignore | 2 - vignettes/adding_data.Rmd | 1395 ---- vignettes/austraits.build.Rmd | 129 - vignettes/austraits_database_structure.Rmd | 371 - vignettes/austraits_file_structure.Rmd | 598 -- vignettes/austraits_overview.Rmd | 82 - vignettes/config/metadata.yml | 79 - vignettes/config/taxon_list.csv | 12 - vignettes/config/traits.yml | 3925 --------- vignettes/config/unit_conversions.csv | 149 - vignettes/contributing_data.Rmd | 81 - vignettes/figures/Workflow.png | Bin 78508 -> 0 bytes vignettes/figures/giz035fig2.png | Bin 56893 -> 0 bytes vignettes/figures/logo.png | Bin 33406 -> 0 bytes vignettes/trait_definitions.Rmd | 85 - 139 files changed, 162 insertions(+), 36938 deletions(-) delete mode 100644 _pkgdown.yml delete mode 100644 docs/404.html delete mode 100644 docs/CODE_OF_CONDUCT.html delete mode 100644 docs/CONTRIBUTING.html delete mode 100644 docs/ISSUE_TEMPLATE.html delete mode 100644 docs/LICENSE-text.html delete mode 100644 docs/articles/adding_data.html delete mode 100644 docs/articles/austraits.build.html delete mode 100644 docs/articles/austraits_database_structure.html delete mode 100644 docs/articles/austraits_file_structure.html delete mode 100644 docs/articles/austraits_file_structure_files/kePrint-0.0.1/kePrint.js delete mode 100644 docs/articles/austraits_file_structure_files/lightable-0.0.1/lightable.css delete mode 100644 docs/articles/austraits_overview.html delete mode 100644 docs/articles/contributing_data.html delete mode 100644 docs/articles/docker.html delete mode 100644 docs/articles/figures/giz035fig2.png delete mode 100644 docs/articles/index.html delete mode 100644 docs/articles/trait_definitions.html delete mode 100644 docs/authors.html delete mode 100644 docs/bootstrap-toc.css delete mode 100644 docs/bootstrap-toc.js delete mode 100644 docs/docs/figures/Workflow.png delete mode 100644 docs/docs/figures/giz035fig2.png delete mode 100644 docs/docs/figures/logo.png delete mode 100644 docs/docsearch.css delete mode 100644 docs/docsearch.js delete mode 100644 docs/figures/Workflow.png delete mode 100644 docs/figures/giz035fig2.png delete mode 100644 docs/figures/logo.png delete mode 100644 docs/index.html delete mode 100644 docs/link.svg delete mode 100644 docs/news/index.html delete mode 100644 docs/pkgdown.css delete mode 100644 docs/pkgdown.js delete mode 100644 docs/pkgdown.yml delete mode 100644 docs/reference/Rplot001.png delete mode 100644 docs/reference/bib_print.html delete mode 100644 docs/reference/build_add_version.html delete mode 100644 docs/reference/build_combine.html delete mode 100644 docs/reference/build_find_taxon.html delete mode 100644 docs/reference/build_setup_pipeline.html delete mode 100644 docs/reference/build_update_taxonomy.html delete mode 100644 docs/reference/create_tree_branch.html delete mode 100644 docs/reference/dataset_configure.html delete mode 100644 docs/reference/dataset_process.html delete mode 100644 docs/reference/dataset_report.html delete mode 100644 docs/reference/dataset_test.html delete mode 100644 docs/reference/dataset_test_worker.html delete mode 100644 docs/reference/get_schema.html delete mode 100644 docs/reference/get_unit_conversions.html delete mode 100644 docs/reference/index.html delete mode 100644 docs/reference/metadata_add_contexts.html delete mode 100644 docs/reference/metadata_add_locations.html delete mode 100644 docs/reference/metadata_add_source_bibtex.html delete mode 100644 docs/reference/metadata_add_source_doi.html delete mode 100644 docs/reference/metadata_add_substitution.html delete mode 100644 docs/reference/metadata_add_substitutions_list.html delete mode 100644 docs/reference/metadata_add_substitutions_table.html delete mode 100644 docs/reference/metadata_add_taxonomic_change.html delete mode 100644 docs/reference/metadata_add_taxonomic_changes_list.html delete mode 100644 docs/reference/metadata_add_traits.html delete mode 100644 docs/reference/metadata_check_custom_R_code.html delete mode 100644 docs/reference/metadata_create_template.html delete mode 100644 docs/reference/metadata_exclude_observations.html delete mode 100644 docs/reference/metadata_find_taxonomic_change.html delete mode 100644 docs/reference/metadata_path_dataset_id.html delete mode 100644 docs/reference/metadata_remove_taxonomic_change.html delete mode 100644 docs/reference/metadata_update_taxonomic_change.html delete mode 100644 docs/reference/metadata_user_select_column.html delete mode 100644 docs/reference/metadata_user_select_names.html delete mode 100644 docs/reference/notes_random_string.html delete mode 100644 docs/reference/notetaker_add_note.html delete mode 100644 docs/reference/notetaker_as_note.html delete mode 100644 docs/reference/notetaker_get_note.html delete mode 100644 docs/reference/notetaker_print_all.html delete mode 100644 docs/reference/notetaker_print_note.html delete mode 100644 docs/reference/notetaker_print_notes.html delete mode 100644 docs/reference/notetaker_start.html delete mode 100644 docs/reference/pipe.html delete mode 100644 docs/reference/process_add_all_columns.html delete mode 100644 docs/reference/process_convert_units.html delete mode 100644 docs/reference/process_create_observation_id.html delete mode 100644 docs/reference/process_custom_code.html delete mode 100644 docs/reference/process_flag_excluded_observations.html delete mode 100644 docs/reference/process_flag_unsupported_traits.html delete mode 100644 docs/reference/process_flag_unsupported_values.html delete mode 100644 docs/reference/process_format_contexts.html delete mode 100644 docs/reference/process_format_contributors.html delete mode 100644 docs/reference/process_format_locations.html delete mode 100644 docs/reference/process_generate_id.html delete mode 100644 docs/reference/process_parse_data.html delete mode 100644 docs/reference/process_standardise_names.html delete mode 100644 docs/reference/process_taxonomic_updates.html delete mode 100644 docs/reference/process_unit_conversion_name.html delete mode 100644 docs/reference/read_csv_char.html delete mode 100644 docs/reference/read_metadata.html delete mode 100644 docs/reference/read_metadata_dataset.html delete mode 100644 docs/reference/read_yaml.html delete mode 100644 docs/reference/util_append_to_list.html delete mode 100644 docs/reference/util_bib_to_list.html delete mode 100644 docs/reference/util_check_all_values_in.html delete mode 100644 docs/reference/util_df_convert_character.html delete mode 100644 docs/reference/util_df_to_list.html delete mode 100644 docs/reference/util_extract_list_element.html delete mode 100644 docs/reference/util_get_SHA.html delete mode 100644 docs/reference/util_get_version.html delete mode 100644 docs/reference/util_kable_styling_html.html delete mode 100644 docs/reference/util_list_to_bib.html delete mode 100644 docs/reference/util_list_to_df1.html delete mode 100644 docs/reference/util_list_to_df2.html delete mode 100644 docs/reference/util_replace_null.html delete mode 100644 docs/reference/util_separate_and_sort.html delete mode 100644 docs/reference/util_standardise_doi.html delete mode 100644 docs/reference/util_strip_taxon_names.html delete mode 100644 docs/reference/write_metadata.html delete mode 100644 docs/reference/write_metadata_dataset.html delete mode 100644 docs/reference/write_plaintext.html delete mode 100644 docs/reference/write_yaml.html delete mode 100644 docs/sitemap.xml rename {docs/articles => inst}/figures/Workflow.png (100%) rename {docs/articles => inst}/figures/logo.png (100%) delete mode 100644 vignettes/.gitignore delete mode 100644 vignettes/adding_data.Rmd delete mode 100644 vignettes/austraits.build.Rmd delete mode 100644 vignettes/austraits_database_structure.Rmd delete mode 100644 vignettes/austraits_file_structure.Rmd delete mode 100644 vignettes/austraits_overview.Rmd delete mode 100644 vignettes/config/metadata.yml delete mode 100644 vignettes/config/taxon_list.csv delete mode 100644 vignettes/config/traits.yml delete mode 100644 vignettes/config/unit_conversions.csv delete mode 100644 vignettes/contributing_data.Rmd delete mode 100644 vignettes/figures/Workflow.png delete mode 100644 vignettes/figures/giz035fig2.png delete mode 100644 vignettes/figures/logo.png delete mode 100644 vignettes/trait_definitions.Rmd diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b08ffcbce..ffc720524 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,3 +1,5 @@ + + # Contributing to austraits.build We envision AusTraits as an on-going collaborative community resource that: @@ -7,10 +9,78 @@ We envision AusTraits as an on-going collaborative community resource that: 3. Aspires to fully transparent and reproducible research of highest standard, and 4. Builds a sense of community among contributors and users. -We'd love for you to contribute. You can read more about the ways you can contribute on our website. +We'd love for you to contribute. You can read more about the ways you can contribute below. + +- [Contributing new data](#contributing-new-data) +- [Improving data quality and reporting errors ](#improving-data-quality-and-reporting-error) +- [Improving documentation](#improving-documentation) +- [Development of `traits.build` package workflow](development-of-traitsbuild-workflow) + + +Please note that the AusTraits project has adopted a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By contributing to this project you agree to abide by its terms. + +## Improving data quality and reporting error + +All users can contribute to continual improvement, by reporting issues you encounter. + +If you notice a possible error in AusTraits, please [post an issue on GitHub](https://github.com/traitecoevo/austraits.build/issues). If you can, please provide code illustrating the problem. +## Improving documentation + +All users can contribute to continual improvement of AusTraits documentation, by letting us know what parts of our documentation were unclear. + +If you have a suggestion, please [post an issue on GitHub](https://github.com/traitecoevo/austraits.build/issues). +## Development of `traits.build`` workflow + +AusTraits uses the `traits.build` package to harmonise different sources. Interested users can help us develop this package at the package website + +## Contributing new data {#data} + +We gladly accept new data contributions to AusTraits, including recently collected trait data, legacy trait data from your file archives, transcribed reference works, and transcribed datasets from the literature. + +If you would like to contribute data, the requirements are: + +- Data was collected for Australian plant species growing in Australia +- You collected data on one of the traits listed in the [trait definitions table](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html) +- You are willing to release the data under an open license for reuse by the scientific community +- You make it is as easy as possible for us to incorporate your data by following the instructions. + +### What do I need to do? + +The AusTraits curators will merge each dataset into AusTraits. For each study we carefully check to ensure units are accurate, continuous trait values map in the expected range, categorical trait values map onto sensible terms, location data are accurate, taxon names are aligned to current standards, and all metadata are recorded. + + + +As a first step, all we really require is a **Data Spreadsheet** and a copy of your **Manuscript**. + +After completing a series of quality checks, we will send you a report to review that summarises the data and metadata. The reports include plots for each continuous trait, comparing values in your submission to those already in AusTraits. It plots your study locations (sites) on a map. It summarises your metadata and indicates the taxonomic alignments made. The report includes both targeted questions (sometimes) and automated questions, acting as prompts to review aspects of the report. Reviewing your report should not take long, and confirms the transparent, thorough process used to build AusTraits. + +### Data + +**Your dataset, preferably in a spreadsheet format.** + +* **Traits:** Make sure the trait names used in your dataset are easy to interpret or, alternatively, provide a brief definition +* **Units:** Please make sure the units for each trait are provided as part of the trait name or in a separate spreadsheet/worksheet +* **Value type:** We prefer to incorporate raw values (or individual means) in AusTraits, but can use population or multi-site means if that is what is available. For mean values, please provide sample size. +* **Location:** For field studies, please provide location details (see more below). +* **Context:** Optional, but AusTraits can read in one (or more) column(s) with contextual information, such as canopy position, experimental manipulation, dry vs. wet season, etc. +* **Collection date:** Optional, but AusTraits can read in a column with sampling date (in any format) +* **Species/taxa:** Please provide complete species names or a look-up table to match species codes. Out-dated taxonomy is fine – we have name-matching algorithms. + +### Metadata + +The AusTraits structure has fields to input all metadata associated with your study, including methods, location details, and context. In detail: +* **Methods:** For published studies the necessary methods and study information can be extracted from a publication; just attach a copy of the manuscript or the DOI. + - The only commonly missing information is the general sampling period, such as ‘October-December 2020’; this is only required if your data file doesn't have a date column. + - For unpublished studies, provide brief methods for how each trait was measured; you can simply refer to a standard published protocol +* **Study locations:** Whenever possible, AusTraits includes location names, location coordinates (latitude/longitude), and any other location properties you have measured/recorded (vegetation description, soil chemistry, climate data, etc.). This information can be provided as a second spreadsheet or as additional columns in the main data spreadsheet. Just make sure the location name is the same in both spreadsheets. +* **Context:** If your study includes contextual variables, make sure the context values are included as columns in the data spreadsheet. Also, please make sure the contextual values are self-explanatory or provide the necessary explanation. +* **Authors:** Authorship is extended to anyone who played a key intellectual role in the experimental design and data collection. Most studies have 1-3 authors. For each author, please provide a **name**, **institutional affiliation**, **email address**, and their **ORCID** (if available). Please nominate a single contributor to be the dataset's point of contact; this person's email will not be listed in the metadata file, but is the person future AusTraits users are likely to seek out if they have questions. Additional field assistants can be listed. +* **Source:** The published manuscript is generally the source. If different traits or observations from a single dataset were published separately, please provide both references. If the dataset you are submitting is a compilation from many sources, please provide a complete list of sources and indicate which rows of data are attributable to which source. + + +### Common hang-ups -### Code of Conduct +Some home issues with contributions include: -Please note that the austraits project is released with a -[Contributor Code of Conduct](CODE_OF_CONDUCT.md). By contributing to this -project you agree to abide by its terms. +* **Categorical trait values:** If you have categorical traits, please define any trait values (i.e. entries for that trait) that are not self-explanatory. A copy of our definitions file, including allowable values for each trait is available [here](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html). The definitions file is a work-in-progress and additional trait values can be added if needed to capture the exact meaning you intended. +* **Data sourced from others:** For numerical traits, AusTraits strives to only include data collected by you for this project, to avoid having multiple entries of the same measurement/observation. If you have certain trait values that were sourced from the literature, an online database, or colleagues, please indicate that clearly. If trait values for some species were collected by you and others were sourced, it is very helpful if you could add a column to your spreadsheet that indicates the source for different rows of data. diff --git a/.gitignore b/.gitignore index 82e43dd6e..7b47e771a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ temp .local/ .config/ .vs/ +man/* *.Rproj tmp* reports @@ -27,6 +28,7 @@ waiting_to_build ignore inst/doc doc +docs Meta config/APC/* config/NSL/* diff --git a/README.md b/README.md index 9a505ff55..c14b31a23 100644 --- a/README.md +++ b/README.md @@ -4,67 +4,106 @@ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3568417.svg)](https://doi.org/10.5281/zenodo.3568417) [![build](https://github.com/traitecoevo/austraits.build/actions/workflows/check-build.yml/badge.svg)](https://github.com/traitecoevo/austraits.build/actions/workflows/check-build.yml) -[![R-CMD-check](https://github.com/traitecoevo/austraits.build/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/traitecoevo/austraits.build/actions/workflows/R-CMD-check.yaml) -[![Codecov test coverage](https://codecov.io/gh/traitecoevo/austraits.build/branch/develop/graph/badge.svg)](https://app.codecov.io/gh/traitecoevo/austraits.build?branch=develop) - +![](inst/figures/logo.png) -AusTraits is a transformative database, containing measurements on the -traits of Australia’s plant species, standardised from hundreds of -disconnected primary sources. So far, data have been assembled \> 250 -distinct sources, describing more than 400 plant traits and over 25k -taxa. The dataset and approach is documented in detail in the following publication +AusTraits is a transformative database, containing measurements on the traits of Australia’s plant species, standardised from hundreds of disconnected primary sources. So far, data have been assembled \> 300 distinct sources, describing > 500 plant traits for > 25k taxa. The dataset and approach is documented in detail in the following publication -> Falster D, Gallagher R, Wenk, E et al. (2021) AusTraits, a curated plant trait -database for the Australian flora. Scientific Data 8: 254. -DOI: [10.1038/s41597-021-01006-6](http://doi.org/10.1038/s41597-021-01006-6) +> Falster D, Gallagher R, Wenk, E et al. (2021) AusTraits, a curated plant trait database for the Australian flora. Scientific Data 8: 254. DOI: [10.1038/s41597-021-01006-6](http://doi.org/10.1038/s41597-021-01006-6) -Those interested in simply using data from AusTraits, should visit download the -compiled resource from the versioned releases archived on Zenodo at doi: - [10.5281/zenodo.3568417](https://doi.org/10.5281/zenodo.3568417). +The repo contains the data for rebuilding AusTraits, while the workflow to rebuild the dataset is on the [traits.build repo](https://github.com/traitecoevo/traits.build). + +AusTraits is continually evolving, as new datasets are contributed. As such, there is no single canonical version. We are continually making new versions available. Overtime, we expect that different versions will be released and used in different analyses. + +## Accessing data + +Those interested in simply using data from AusTraits, should visit download the compiled resource from the versioned releases archived on Zenodo at DOI: [10.5281/zenodo.3568417](https://doi.org/10.5281/zenodo.3568417). + +Users will want to read up on the [database structure, described in the `traits.build` manual](https://traitecoevo.github.io/traits.build-book/database_structure.html). + +Definitions for the traits are described the AusTraits Plant Dictionary (APD), at + +- Formalised vocabulary at +- preprint Wenk et al 2023, DOI: [10.1101/2023.06.16.545047](https://doi.org/10.1101/2023.06.16.545047) -There you will also find detailed information regarding appropriate use -of AusTraits. Further information about the AusTraits project is available at the project -website [austraits.org](https://austraits.org). +## Citation + +Users of AusTraits are requested to cite the source publication, which documents the dataset and approach: + +> Falster D, Gallagher R, Wenk, E et al. (2021) AusTraits, a curated plant trait database for the Australian flora. Scientific Data 8: 254. DOI: [10.1038/s41597-021-01006-6](http://doi.org/10.1038/s41597-021-01006-6) ## Rebuilding AusTraits from source -This repository (`austraits.build`) contains the raw data and code used to compile AusTraits from diverse, original sources. +This repository (`austraits.build`) contains the raw data and code used to compile AusTraits from diverse, original sources. + +To handle the harmonising of diverse data sources, we use a reproducible workflow to implement the various changes required for each source to reformat it into a form suitable for incorporation in AusTraits. Such changes include restructuring datasets, renaming variables, changing variable units, changing taxon names. For the sake of transparency and continuing development, the entire workflow is made available here. + +![](inst/figures/Workflow.png) + +We use the [`traits.build`](https://traitecoevo.github.io/traits.build/) R package and workflow to harmonise > 300 different sources into a unified dataset. The workflow is fully-reproducible and open, meaning it exposes the decisions made in the processing of data into a harmonised and curated dataset and can also be rerun by others. AusTraits is built so that the database can be rebuilt from its parts at any time. This means that decisions made along the way (in how data is transformed or encoded) can be inspected and modified, and new data can be easily incorporated. + +To build the database follows these steps + +***Install `traits.build`*** -To handle the harmonising of diverse data sources, we use a reproducible -workflow to implement the various changes required for each source to -reformat it suitable for incorporation in AusTraits. Such changes -include restructuring datasets, renaming variables, changing variable -units, changing taxon names. For the sake of transparency and continuing -development, the entire workflow is made available here. +The first step is to install a copy of [traits.build](https://github.com/traitecoevo/austraits.build/): -AusTraits is continually evolving, as new datasets are contributed. As -such, there is no single canonical version. We are continually making -new versions available. Overtime, we expect that different versions will -be released and used in different analyses. +```{r, eval=FALSE, echo=TRUE} +remotes::install_github("traitecoevo/traits.build", quick = TRUE) +``` +***Clone repository*** -Those interested in building AusTraits from source or contributing to AusTraits -should see further information at this -http://traitecoevo.github.io/austraits.build/articles/austraits.build.html +Next you need to download a copy of this repository from Github. Then open the Rstudio project, or open R into the right repo directory. +***Compile via `remake`*** + +One of the packages that will be installed with the `traits.build` is [`remake`](https://github.com/richfitz/remake). This package manages the compiling, and also helps streamline the amount of recompiling needed when new sources are added. + +Running the following command will rebuild AusTraits and save the assembled database into an RDS file located in `export/data/curr/austraits.rds`. + +```{r, eval=FALSE, echo=TRUE} +remake::make() +austraits <- readRDS("export/data/curr/austraits.rds") +``` + +Remake can also load the compiled dataset directly into R by calling: + +```{r, eval=FALSE, echo=TRUE} +austraits <- remake::make("austraits") +``` + +## Contributing to AusTraits + +We envision AusTraits as an ongoing collaborative community resource that: + +1. Increases our collective understanding of the Australian flora +2. Facilitates the accumulation and sharing of trait data +3. Builds a sense of community among contributors and users +4. Aspires to be fully transparent and reproducible research of the highest standard. + +We'd love for you to contribute to the projects. Below are some ways you can contribute: + +- Contributing new data +- Improving data quality and reporting errors +- Improving documentation +- Development of `traits.build`` workflow + +For details on on how to contribute, please see the file [CONTRIBUTING.md](https://github.com/traitecoevo/austraits.build/blob/develop/.github/CONTRIBUTING.md) + +The AusTraits project is released with a [Contributor Code of Conduct](https://github.com/traitecoevo/austraits.build/blob/develop/.github/CODE_OF_CONDUCT.md). By contributing to this project you agree to abide by its terms. ## Acknowledgements -**Funding**: This work was supported via the following funding sources: -fellowship grants from Australian Research Council to Falster -(FT160100113), Gallagher (DE170100208) and Wright (FT100100910), a grant -from Macquarie University to Gallagher, and grants from the[Australian -Research Data Commons (ARDC)](https://ardc.edu.au), via their -“Transformation data collections” [doi: -10.47486/TD044](https://doi.org/10.47486/TD044) and “Data Partnerships” -[doi: 10.47486/DP720](https://doi.org/10.47486/DP720) programs. The ARDC -is enabled by NCRIS. - -**Recognition**: Many people have contributed to AusTraits. A list of contributors -is provdied on the on Zenodo at doi: +**Funding**: This work was supported via the following investments: + +- Investment (https://doi.org/10.47486/TD044, https:// doi.org/10.47486/DP720) from the Australian Research Data Commons (ARDC). The ARDC is funded by the National Collaborative Research Infrastructure Strategy (NCRIS). +- Fellowship from the Australian Research Council to Falster (FT160100113), Gallagher (DE170100208) and Wright (FT100100910), +- A UNSW Research Infrastructure Grant to Falster, and +- A grant from Macquarie University to Gallagher. + +**Recognition**: Many people have contributed to AusTraits. A list of contributors is provided on the on Zenodo at DOI: [10.5281/zenodo.3568417](https://doi.org/10.5281/zenodo.3568417). -**Resuse**: At this stage, only the compiled xAusTraits dataset is available for reuse, -via Zenodo. The raw data sources provided in this repository are not available -for reuse in their current form, without further discussion from data contributors. +Further information about the AusTraits project is available at the project website [austraits.org](https://austraits.org). +**Resuse**: At this stage, only the compiled AusTraits dataset is available for reuse, via Zenodo. The raw data sources provided in this repository are not available for reuse in their current form, without further discussion from data contributors. diff --git a/_pkgdown.yml b/_pkgdown.yml deleted file mode 100644 index aa4def5ea..000000000 --- a/_pkgdown.yml +++ /dev/null @@ -1,148 +0,0 @@ -url: http://traitecoevo.github.io/austraits.build/ - -template: - bootswatch: cosmo - -home: - links: - - text: AusTraits - href: https://github.com/traitecoevo/austraits - - text: Zenodo - href: https://doi.org/10.5281/zenodo.3568417 - - -reference: - - title: Building austraits compilation - desc: Functions that can be used when building individual datasets and entire compilation - contents: - - '`build_setup_pipeline`' - - '`get_schema`' - - '`dataset_configure`' - - '`dataset_process`' - - '`build_combine`' - - '`build_add_version`' - - '`build_update_taxonomy`' - - '`process_add_all_columns`' - - '`process_taxonomic_updates`' - - '`process_convert_units`' - - '`process_parse_data`' - - '`process_custom_code`' - - '`process_format_locations`' - - '`process_flag_excluded_observations`' - - '`process_flag_unsupported_traits`' - - '`process_flag_unsupported_values`' - - '`process_standardise_names`' - - '`process_unit_conversion_name`' - - '`process_create_observation_id`' - - '`process_format_contexts`' - - '`process_format_contributors`' - - '`process_generate_id`' - - '`dataset_report`' - - - - title: Creating metadata files - desc: ~ - contents: - - '`dataset_test`' - - '`dataset_test_worker`' - - '`metadata_create_template`' - - '`metadata_add_traits`' - - '`metadata_add_source_bibtex`' - - '`metadata_add_source_doi`' - - '`metadata_add_locations`' - - '`metadata_add_contexts`' - - '`metadata_add_substitution`' - - '`metadata_add_substitutions_list`' - - '`metadata_add_taxonomic_change`' - - '`metadata_add_taxonomic_changes_list`' - - '`metadata_check_custom_R_code`' - - '`metadata_exclude_observations`' - - '`metadata_find_taxonomic_change`' - - '`metadata_path_dataset_id`' - - '`metadata_remove_taxonomic_change`' - - '`metadata_update_taxonomic_change`' - - '`metadata_add_substitutions_table`' - - '`metadata_user_select_column`' - - '`metadata_user_select_names`' - - - title: Reading & writing files - desc: ~ - contents: - - '`read_csv_char`' - - '`read_metadata`' - - '`read_metadata_dataset`' - - '`read_yaml`' - - '`write_metadata`' - - '`write_metadata_dataset`' - - '`write_yaml`' - - '`write_plaintext`' - - - title: Diverse utility functions for converting and working with various data types - desc: ~ - contents: - - '`util_get_SHA`' - - '`util_append_to_list`' - - '`bib_print`' - - '`util_replace_null`' - - '`util_bib_to_list`' - - '`util_list_to_bib`' - - '`util_df_to_list`' - - '`util_extract_list_element`' - - '`util_list_to_df2`' - - '`util_list_to_df1`' - - '`util_separate_and_sort`' - - '`util_check_all_values_in`' - - '`util_df_convert_character`' - - '`util_get_version`' - - '`util_kable_styling_html`' - - '`util_standardise_doi`' - - '`util_strip_taxon_names`' - - '`build_find_taxon`' - - '`create_tree_branch`' - - '`get_unit_conversions`' - - - title: Functions used when writing reports - desc: ~ - contents: - - '`notes_random_string`' - - '`notetaker_add_note`' - - '`notetaker_as_note`' - - '`notetaker_get_note`' - - '`notetaker_print_all`' - - '`notetaker_print_note`' - - '`notetaker_print_notes`' - - '`notetaker_start`' - -navbar: - type: default - left: - - text: home - icon: fas fa-home fa-lg - href: index.html - - text: Get started - href: articles/austraits.build.html - - text: Details - icon: fas fa-book - menu: - - text: Overview of `AusTraits` workflow - href: articles/austraits_overview.html - - text: Getting started with austraits.build - href: articles/austraits.build.html - - text: Structure of `AusTraits` data compilation - href: articles/austraits_database_structure.html - - text: Definitions for traits in `AusTraits` - href: articles/trait_definitions.html - - text: Repository file structure - href: articles/austraits_file_structure.html - - text: Contributing data to `AusTraits` - href: articles/contributing_data.html - - text: Adding new datasets into `AusTraits` - href: articles/adding_data.html - - text: Docker for reproducible compute environment - href: articles/docker.html - - text: Functions - icon: fa-list - href: reference/index.html - right: - - icon: fa-github fa-lg - href: https://github.com/traitecoevo/austraits.build diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index add9dc25c..000000000 --- a/docs/404.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Page not found (404) • austraits.build - - - - - - - - - - - -
-
- - - - -
-
- - -Content not found. Please use links in the navbar. - -
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/CODE_OF_CONDUCT.html b/docs/CODE_OF_CONDUCT.html deleted file mode 100644 index 424f66a25..000000000 --- a/docs/CODE_OF_CONDUCT.html +++ /dev/null @@ -1,128 +0,0 @@ - -Contributor Code of Conduct • austraits.build - - -
-
- - - -
-
- - -
-

As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

-

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.

-

Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.

-

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.

-

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.

-

This Code of Conduct is adapted from the Contributor Covenant (http://contributor-covenant.org), version 1.0.0, available at http://contributor-covenant.org/version/1/0/0/

-
- -
- - - -
- - - -
- -
-

Site built with pkgdown 2.0.7.

-
- -
- - - - - - - - diff --git a/docs/CONTRIBUTING.html b/docs/CONTRIBUTING.html deleted file mode 100644 index 1a5528830..000000000 --- a/docs/CONTRIBUTING.html +++ /dev/null @@ -1,132 +0,0 @@ - -Contributing to austraits.build • austraits.build - - -
-
- - - -
-
- - -
-

We envision AusTraits as an on-going collaborative community resource that:

-
  1. Increases our collective understanding of the Australian flora;
  2. -
  3. Facilitates accumulating and sharing of trait data;
  4. -
  5. Aspires to fully transparent and reproducible research of highest standard, and
  6. -
  7. Builds a sense of community among contributors and users.
  8. -

We’d love for you to contribute. You can read more about the ways you can contribute on our website.

-
-

Code of Conduct

-

Please note that the austraits project is released with a Contributor Code of Conduct. By contributing to this project you agree to abide by its terms.

-
-
- -
- - - -
- - - -
- -
-

Site built with pkgdown 2.0.7.

-
- -
- - - - - - - - diff --git a/docs/ISSUE_TEMPLATE.html b/docs/ISSUE_TEMPLATE.html deleted file mode 100644 index c009f5a1b..000000000 --- a/docs/ISSUE_TEMPLATE.html +++ /dev/null @@ -1,127 +0,0 @@ - -NA • austraits.build - - -
-
- - - -
-
- - - -

Please briefly describe your problem and what output you expect. If you have a question, please don’t use this form. Instead, ask on https://stackoverflow.com/ or https://community.rstudio.com/.

-

Please include a minimal reproducible example (AKA a reprex). If you’ve never heard of a reprex before, start by reading https://www.tidyverse.org/help/#reprex.

-

Brief description of the problem

-
-# insert reprex here
- - -
- - - -
- - - -
- -
-

Site built with pkgdown 2.0.7.

-
- -
- - - - - - - - diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html deleted file mode 100644 index aea39cf98..000000000 --- a/docs/LICENSE-text.html +++ /dev/null @@ -1,140 +0,0 @@ - -License • austraits.build - - -
-
- - - -
-
- - -
# Compiled database 
-
-The compiled database is available for reuse under CC-BY license.  For details on access, usage and attribution please visit https://doi.org/10.5281/zenodo.3568417
-
-Original data files (in the folder `data`) are not available for reuse without further permission.
-
-# Software licenced under the "BSD 2-clause license"
-
-Copyright (c) 2014, Daniel Falster
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
- -
- - - -
- - - -
- -
-

Site built with pkgdown 2.0.7.

-
- -
- - - - - - - - diff --git a/docs/articles/adding_data.html b/docs/articles/adding_data.html deleted file mode 100644 index 86e81f525..000000000 --- a/docs/articles/adding_data.html +++ /dev/null @@ -1,1313 +0,0 @@ - - - - - - - -Adding new datasets into AusTraits • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - -

This vignette explains the protocol for adding a new study to AusTraits. Before starting this, you should read more about

- -

It is important that all steps are followed so that our automated workflow proceeds without problems.

-
-

An overview of the main steps -

-
    -
  1. Clone the austraits.build repository from github
  2. -
  3. Create a new branch in the repo, named for the new dataset_id in author_year format, e.g. Gallagher_2014.
  4. -
  5. Create a new folder within the folder data with the name dataset_id, e.g. Gallagher_2014.
  6. -
  7. Prepare the file data.csv and place it within the new folder (details here).
  8. -
  9. Prepare the file metadata.yml and place it within the new folder (details here).
  10. -
  11. Add the new study into the build framework and rebuild AusTraits, by running build_setup_pipeline().
  12. -
-

This step updates the file remake.yml with appropriate rules for the new dataset; similarly if you remove datasets, do the same. (At this stage, remake offers no looping constructs, so for now we generate the remake file using: whisker.)

-

You can then rebuild AusTraits, including your dataset.

-
    -
  1. Run tests and quality checks on the newly added dataset and correct the data.csv and metadata.yml files as necessary (details here).
  2. -
  3. Generate and proofread a report on the data. In particular, check that numeric trait values fall within a logical range relative to other studies, and that individual trait observations are not unnecessarily excluded because their trait values are unsupported.
  4. -
  5. Return to step 6 if changes are made to the data.csv or metadata.yml files.
  6. -
  7. Push the GitHub branch.
  8. -
-

It may help to download one of the existing datasets to use as a template for your own files and a guide on required content. You should look at the files in the config folder, particularly the definitions file for the list of traits we cover and the supported trait values for each trait. The GitHub repository also hosts a compiled trait definitions table.

-

The remainder of this vignette provides incredibly detailed instructions for steps 4-8 above. It is intended for anyone wishing to add datasets to either AusTraits itself or to use the austraits.build workflow to create a separate database.

-
-
-

Getting started -

-

The austraits.build repository includes a selection of functions that help build the repository. To use these, you’ll need to make them available.

-

The easiest way to load the functions into your workspace is to run the following (from within the repository)

-
-source("scripts/custom.R")            # source functions written for use within custom_R_code
-library(austraits.build)              # open the austraits.build package that provides the pipeline to build AusTraits
-
-
-

Inputting data -

-
-

Add a new folder -

-

Add a new folder within the data folder. Its name should be the study’s dataset_id, the core organising unit behind AusTraits.

-

The preferred format for dataset_id is the surname of the first author of any corresponding publication, followed by the year, as surname_year. E.g. Falster_2005. Wherever there are multiple studies with the same id, we add a suffix _2, _3 etc. E.g.Falster_2005, Falster_2005_2.

-
-
-

Constructing the data.csv file -

-

All data for a study (dataset_id) must be merged into a single spreadsheet: data.csv. All accompanying metadata is read in through the metadata.yml file. Some information must be input explicitly through the data.csv or metdata.yml file, while other information can be entered via either file; this is explicitly indicated for each element.

-
    -
  1. -Required columns: Columns within the data.csv file must include taxon name, location_name (if there are multiple locations), contexts (if appropriate), and collection_date (if appropriate). The data.csv file can either be in a wide format (1 column for each trait, with trait name as the column header) or long format (a single column for all trait values and additional columns for trait name and units)
  2. -
-
    -
  1. For all field studies, ensure there is a column for location_name. If all measurements were made at a single location, a location_name column can easily be mutated using custom_R_code within the metadata.yml file. See sections adding locations and adding contexts below for more information on compiling location and context data.

  2. -
  3. If available, be sure to include a column with collection date. If possible, provide in yyyy-mm-dd (e.g. 2020-03-05) format or, if the day of the month isn’t known, as yyyy-mm (e.g. 2020-03). However, any format is allowed and the column can be parsed to the proper yyyy-mm-dd format using custom_R_code. If the same collection date applies to the entire study it can be added directly into the metadata.yml file.

  4. -
  5. If applicable, ensure there are columns for an context properties, including experimental treatments, specific differences in method, a stratified sampling scheme within a plot, or sampling season. Additional context columns could be added through custom_R_code or keyed in where traits are added, but it is best to include a column in the data.csv file whenever possible. The protocol for adding context properties to the metadata file is under adding contexts

  6. -
-
    -
  1. -Summarising data: Data submitted by a contributor should be in the rawest form possible; always request data with individual measurements over location/species means. Some studies make replicate measurements on an individual at a single point in time. For these studies, individual means need to be calculated, as AusTraits does not include multiple measurements per individual. The raw values are preserved in the contributor’s raw data files. Be sure to calculate the number of replicates that contributed to each mean value.
  2. -
-

When there is just a single row of values to summarise, use:

-
-read_csv("data/dataset_id/raw/raw_data.csv") %>%
-  mutate(leaf_area_replicates = 1) %>%
-  group_by(individual, `species name`, location, context, etc) %>%
-  summarise(
-    leaf_area_mean = mean(leaf_area),
-    leaf_area_replicates = sum(leaf_area_replicates)
-    ) %>%
-  ungroup()
-

(Make sure you group_by all categorical variables you want to retain, for only columns that are grouping variables will be kept)

-

When you want to take the mean of a series of continuous variables, use:

-
-read_csv("data/dataset_id/raw/raw_data.csv") %>%
-  mutate(replicates = 1) %>%
-  group_by(individual, `species name`, location, context, etc) %>%
-  summarise(
-    across(
-      c(leaf_area, `leaf N`), .fns = mean,
-      c(replicates), .fns = sum,
-      c(growth_form, `photosynthetic pathway`), .fns = first
-    )
-  ) %>%
-  ungroup()
-
    -
  • Categorical variables not included as grouping variables will return NA

  • -
  • This allows you to retain character variables, but can be tedious with many columns. Generally use the function first for categorical variables - it simply retains the trait value in the first column. In the rare case when rows in a particular grouping have different categorical values, more complex manipulations are required.

  • -
  • You can identify runs of columns by column number/position. For instance c(5:25), .fns = mean or c(leaf_area:leaf_N), .fns = mean

  • -
-
    -
  1. -Merging multiple spreadsheets: If multiple spreadsheets of data are submitted these must be merged together.
  2. -
-
    -
  1. If the spreadsheets include different trait measurements made on the same individual (or location means for the same species), they are best merged using full_join, specifying all conditions that need to be matched across spreadsheets (e.g. individual, species, location, context). Ensure the column names are identical between spreadsheets or specify columns that need to be matched.
  2. -
-
-read_csv("data/dataset_id/raw/data_file_1.csv") -> data_1
-read_csv("data/dataset_id/raw/data_file_2.csv") -> data_2
-data_1 %>% full_join(data_2, by = c("Individual", "Taxon", "Location", "Context"))
-
    -
  1. If the spreadsheets include trait measurements for different individuals (or possibly data at different scales - such as individual level data for some traits and species means for other traits), they are best merged using bind_rows. Ensure the column names for taxon name, location name, context, individual, and collection date are identical between spreadsheets. If there are data for the same traits in both spreadsheets, make sure those column headers are identical as well.
  2. -
-
-read_csv("data/dataset_id/raw/data_file_1.csv") -> data_1
-read_csv("data/dataset_id/raw/data_file_2.csv") -> data_2
-data_1 %>% bind_rows(data_2)
-
    -
  1. -Taxon names: Taxon names need to be complete names. If the main data file includes code names, with a key as a separate file, they need to be merged:
  2. -
-
-read_csv("data/dataset_id/raw/species_key.csv") -> species_key
-read_csv("data/dataset_id/raw/data_file.csv") %>%
-  left_join(species_key, by = "code")
-
-

Unexpected hangups -

-
    -
  • When Excel saves an .xls file as a .csv file it only preserves the number of significant figures that are displayed on the screen. This means that if, for some reason, a column has been set to display a very low number of significant figures or a column is very narrow, data quality is lost.
    -
  • -
  • If you’re reading a file into R where there are lots of blanks at the beginning of a column of numeric data, the defaults for read_csv fail to register the column as numeric. It is fixed by adding the argument guess_max:
  • -
-
-read_csv("data/dataset_id/raw/raw_data.csv", guess_max = 10000)
-

This checks 10,000 rows of data before declaring the column is non-numeric. The value can be set even higher…

-
-
-
-

Constructing the metadata.yml file -

-

One way to construct the metadata.yml file is to use one of the existing files and modify yours to follow the same format. As a start, check out some examples from existing studies in AusTraits, e.g. Angevin_2010 or Wright_2009.

-

Note, when editing the metadata.yml, edits should be made in a proper text editor (Microsoft word tends to mess up the formatting). For example, Rstudio, textmate, sublime text, and Visual Studio Code are all good editors.

-

To assist you in constructing the metadata.yml file, we have developed functions to help fill in the different sections of the file. You can then manually edit the file further to fill in missing details.

-

First run the following to make the functions available

- -

The functions for populating the metadata file all begin with metadata_. A list of the available functions is automatically generated within the man/ folder within the austraits.build directory.

-
-

Creating a template -

-

Create a basic template for the metadata.yml file for your study. Note, it requires you to have already created a file data.csv in the folder data/your_dataset_id.

-

Let’s imagine you’re entering a study called Yang_2028

-
-current_study <- "Yang_2028"
-
-metadata_create_template(current_study)
-
-# or simply
-
-metadata_create_template("Yang_2028")
-

The function will ask a series of questions and then create a relatively empty file data/your_dataset_id/metadata.yml. The key questions are:

-
    -
  • Is the data long vs wide? A wide dataset has each variable (i.e. trait ) as a column. A long dataset has a single row containing all trait values and additional columns specifying units and trait_name.

  • -
  • Select column for taxon_name
    -
  • -
  • Select column for trait_name (long datasets only)
  • -
  • Select column for trait values (long datasets only)
  • -
  • Select column for location_name -
  • -
  • Select column for individual_id (a column that links measurements on the same individual)
  • -
  • Select column for collection_date

  • -
-

If your data.csv file does not yet have a location_name column, this information can later be added manually.

-
-
-

Adding a source -

-

Three functions are available to help with entering citation details for the source data.

-

The function metadata_create_template creates a template for the primary source with default fields for a journal article, which you can then edit manually.

-

If you have a doi for your study, use the function:

-
-metadata_add_source_doi(dataset_id = current_study, doi = "doi")
-

and the different elements within the source will automatically be generated. Double check the information added to ensure:
-1. The title is in sentence case
-2. Overall, the information isn’t in all caps (information from a few journals is read in like this)
-3. Pages numbers are present and added as, for example, 123 -- 134 ; note the -- between page numbers

-

By default, details are added as the primary source. If multiple sources are linked to a single dataset_id, you can specify a source as secondary. Attempting to add a second primary source will overwrite the information already input.

-
-metadata_add_source_doi(dataset_id, doi, type = "secondary")
-
    -
  • Secondary sources will be assigned the same dataset_id as the primary source. Manually edit the key in the metadata.yml file to be the appropriate author_yyyy code for the secondary reference. Sequential qualifiers can be used if necessary (e.g. author_yyyy_2)
  • -
  • A “secondary” source might be either a second research output from the main dataset (truly a secondary source) or the original source of some data compiled for a metaanalysis (an original source). After adding a second source, you must manually change the source’s header to beginning with either secondary or original, as is appropriate.
  • -
  • If there are many sources to add (i.e. for datasets compiled for metaanalyses), after you add each reference, go to the metadata.yml file and manually change the source’s header from original to original_01 (and then original_02, etc.; or secondary_01 ; secondary_02). See Richards_2008 for an example of a complex source list.
  • -
-

Alternatively, if you have reference details saved in a bibtex file called myref.bib you can use the function

-
-metadata_add_source_doi(dataset_id, file = "myref.bib")
-

(These options require the packages rcrossref and RefManageR to be installed.)

-

For a book, the proper format is:

-
source:
-  primary:
-      key: Cooper_2013
-      bibtype: Book
-      year: 2013
-      author: Wendy Cooper and William T. Cooper
-      title: Australian rainforest fruits
-      publisher: CSIRO Publishing
-      pages: 272
-

For an online resource, the proper format is:

-
source:
-  primary:
-    key: TMAG_2009
-    bibtype: Online
-    author: '{Tasmanian Herbarium}'
-    year: 2009
-    title: Flora of Tasmania Online
-    publisher: Tasmanian Museum & Art Gallery (Hobart)
-    url: http://www.tmag.tas.gov.au/floratasmania
-

For a thesis, the proper format is:

-
source:
-  primary:   
-      key: Kanowski_2000   
-      bibtype: Thesis  
-      year: 1999  
-      author: John Kanowski  
-      title: Ecological determinants of the distribution and abundance of the folivorous
-        marsupials endemic to the rainforests of the Atherton uplands, north Queensland.  
-      type: PhD  
-      institution: James Cook University, Townsville
-

For an unpublished dataset, the proper format is:

-
source:
-  primary:
-    key: Ooi_2018
-    bibtype: Unpublished
-    year: 2018
-    author: Mark K. J. Ooi
-    title: "Unpublished data: Herbivory survey within Royal National Park, University
-      of New South Wales"
-

If you manually add information, note that if there is a colon (:) or apostrophe (’) in a reference, the text for that line must be in quotes (").

-
-
-

Adding contributors -

-

The skeletal metadata.yml file created by the function metadata_create_template includes a template for entering details about data contributors. Edit this manually, duplicating if details for multiple people are required.

-
    -
  • Authorship is extended to anyone who played a key intellectual role in the experimental design and data collection. Most studies have 1-3 authors. For each author, please provide a last_name, given_name, institutional affiliation, email address, and their ORCID (if available). Nominate a single contributor to be the dataset’s point of contact; this person’s email will not be listed in the metadata file, but is the person future AusTraits users are likely to seek out if they have questions.
  • -
  • Additional field assistants can be listed under assistants: -
  • -
  • The AusTraits data entry person is listed under dataset_curators: -
  • -
-

For example, in Roderick_2002

-
contributors:
-  data_collectors:
-  - last_name: Roderick
-    given_name: Michael
-    ORCID: 0000-0002-3630-7739
-    affiliation: The Australian National University, Australia
-    additional_role: contact
-  assistants: Michelle Cochrane
-  dataset_curators: Elizabeth Wenk
-
-
-

Custom R code -

-

For many studies there are changes we want to make to a dataset before the data.csv file is read into AusTraits. These most often include applying a function to transform data, a function to filter data, or a function to replace a contributor’s “measurement missing” placeholder symbol with NA. In each case it is appropriate to leave the rawer data in data.csv.

-
-
Background -
-

In each case we want to make some custom modifications to a particular dataset before the common pipeline of operations gets applied. To make this possible, the workflow allows for some custom R code to be run as a first step in the processing pipeline. That pipeline (the function process_custom_code called within dataset_process) looks like this:

-
-data <-
-  read_csv(filename_data_raw, col_types = cols(), guess_max = 1e5) %>%
-  process_custom_code(metadata[["dataset"]][["custom_R_code"]])() %>%
-  process_parse_data(dataset_id, metadata)
-

Note the second line. This is where the custom code gets applied, right after the file is loaded.

-
-
-
Summary -
-
    -
  • source the file containing functions the AusTraits team have explicitly developed to use within the custom_R_code field: source("scripts/custom.R") -
  • -
  • assume a single object called data, and apply whatever fixes are needed
    -
  • -
  • use functions from the packages dplyr or tiydr, like mutate, rename, etc, and otherwise avoid external packages
    -
  • -
  • alternatively, use the functions we’ve created explicitly for pre-processing data that were sourced through the file custom.R. In consultation with AusTraits team leaders you can add functions to this file.
  • -
  • be fully self-contained (we’re not going to use any of the other remake machinery here)
    -
  • -
  • use pipes to weave together a single statement, where possible. (Otherwise you’ll need a semi colons ; at the end of each statement).
    -
  • -
  • place a single apostrophe (’) at the start and end of your custom R code; this allows you to add line breaks between pipes.
  • -
-
-
-
Examples of appropriate use of custom R code -
-
    -
  1. -

    Most sources from herbaria record flowering_time and fruiting_time as a span of months, while AusTraits codes these variables as a sequence of 12 N’s and Y’s for the 12 months. A series of functions make this conversion in custom_R_code. These include:

    -
      -
    • format_flowering_months’ (Create flowering times from start to end pair)
      -
    • -
    • convert_month_range_string_to_binary’ (Converts flowering and fruiting month ranges to 12 element character strings of binary data)
      -
    • -
    • convert_month_range_vec_to_binary’ (Convert vectors of month range to 12 element character strings of binary data)
      -
    • -
    • collapse_multirow_phenology_data_to_binary_vec’ (Converts multirow phenology data to a 12 digit binary string)
    • -
    -
  2. -
  3. Many datasets from herbaria record traits like leaf_length, leaf_width, seed_length, etc. as a range (e.g. 2-8). The function separate_range separates this data into a pair of columns with minimum and maximum values, required to properly align units

  4. -
  5. Duplicate values within a study need to be filtered out.

  6. -
-

If a species-level measurement has been entered for all within-location replicates, you need to filter out the duplicates. This is true for both numeric and categorical values.

-
-data %>%
-  group_by(Species) %>%
-    mutate(
-      across(c(`leaf_percentN`, `plant growth form`), replace_duplicates_with_NA)
-      ) %>%
-  ungroup()
-

Note: You would use group_by(Species, Location) if there are unique values at the species x location level.

-
    -
  1. Values that were sourced from a different study need to be filtered out. See Duplicates between studies below - functions to automate this process are in progress.

  2. -
  3. Author has represented missing data values with a symbol, such as 0 :

  4. -
-
-data %>% mutate(across(c(`height (cm)`, `leaf area (mm2)`), ~ na_if(., 0)))
-
    -
  1. If a subset of data in a column are also values for a second trait in AusTraits, some data values can be duplicated in a second temporary column. In the example below, some data in the contributor’s fruit_type column also apply to the trait fruit_fleshiness in AusTraits:
  2. -
-
-data %>% mutate(fruit_fleshiness = ifelse(`fruit type` == "pome", "fleshy", NA))
-
    -
  1. If a subset of data in a column are instead values for a second trait in AusTraits, some data values can be moved to a second column (second trait), using the function ‘move_values_to_new_trait’. In the example below, some data in the contributor’s growth_form column only apply to the trait parasitic in AusTraits. Note you need to create a blank variable to move the trait values to.
  2. -
-
-data %>% 
-  mutate(new_trait = NA_character) %>%
-  move_values_to_new_trait(
-    original_trait= "growth form", 
-    new_trait = "parasitic",
-    original_values = "parasitic",
-    values_for_new_trait = "parasitic",
-    values_to_keep = "NA")
-

or

-
-data %>% 
-  mutate(dispersal_appendage = NA.char) %>%
-  move_values_to_new_trait(
-    "fruits", "dispersal_appendage",
-    c("dry & winged", "enclosed in aril"), 
-    c("wings", "aril"),
-    c("NA", "enclosed")
-  )
-
    -
  • Note, the parameter values_to_keep currently doesn’t accept NA ; this bug is known and will be fixed.
  • -
-
    -
  1. If the data.csv file includes raw data that you want to manipulate into a trait, or the contributor presents the data in a different formulation than AusTraits:
  2. -
-
-data %>% mutate(root_mass_fraction = `root mass` / (`root mass` + `shoot mass`))
-
    -
  1. You can do manipulations, such as adding a column with locations or manipulating location names. This is only recommended for studies with a single (or few) location, where manually adding the location data to the metadata.yml file is fast, since in precludes automatically propagating location data into metadata (see Adding location details). As an example, see Blackman_2010:
  2. -
-
-data %>%
-  mutate(
-    location_name = ifelse(location_name == "Mt Field" & habitat == "Montane rainforest", "Mt Field_wet", location_name),
-    location_name = ifelse(location_name == "Mt Field" & habitat == "Dry sclerophyll", "Mt Field_dry", location_name)
-  )
-
    -
  1. You can generate observation_numbers for sequential measurements on the same individual
  2. -
-
-data %>%
-  group_by(Tree) %>%
-    mutate(observation_number = row_number()) %>%
-  ungroup() 
-
    -
  1. You can generatemeasurement_remarks from more cryptic notes
  2. -
-
-data %>%
-  mutate(
-        measurement_remarks = ifelse(material == "FRESH","fresh leaves (indicating amount of leaf moisture)", NA),
-        measurement_remarks = ifelse(material == "DRIED","dry leaves (indicating amount of leaf moisture)", measurement_remarks),
-        measurement_remarks = ifelse(material == "SENESCED","senesced leaves (indicating amount of leaf moisture)", measurement_remarks),
-  )
-
    -
  1. You can reformat collection_dates supplied into the yyyy-mm-dd format, or add a date column
  2. -
-

Converting from any mdy format to yyyy-mm-dd (e.g. Dec 3 2015 to 2015-12-03)

-
-data %>% mutate(Date = Date %>% mdy())
-

Converting from any dmy format to yyyy-mm-dd (e.g. 3-12-2015 to 2015-12-03)

-
-data %>% mutate(Date = Date %>% dmy())
-

Converting from a mmm-yyyy (string) format to yyyy-mm (e.g. Dec 2015 to 2015-12)

-
-data %>% mutate(Date = parse_date_time(Date, orders = "my") %>% format.Date("%Y-%m"))
-

Converting from a mdy format to yyyy-mm (e.g. Excel has reinterpreted the data as full dates 12-01-2015 but the resolution should be “month” 2015-12)

-
-data %>% mutate(Date = parse_date_time(Date, orders = "mdy") %>% format.Date("%Y-%m"))
-

A particularly complicated example where some dates are presented as yyyy-mm and others as yyyy-mm-dd

-
-data %>%
-    mutate(
-      weird_date = ifelse(str_detect(gathering_date, "^[0-9]{4}"), gathering_date, NA),
-      gathering_date = gathering_date %>% mdy(quiet = T) %>% as.character(),
-      gathering_date = coalesce(gathering_date, weird_date)
-    ) %>% 
-    select(-weird_date)
-
-
-
Testing your custom R code -
-

After you’ve added the custom R code to a file, check that it has completed the intended data frame manipulation:

- -

You could alternatively read the data.csv file into R and run the code line by line.

-
-
-
-

Fill in metadata$dataset -

-

The dataset section is a mix of fields that are filled in automatically during metadata_create_template() and fields that need to be manually filled in.

-
    -
  • -individual_id Individual_id is one of the fields that can be read in during metadata_create_template. However, you may instead mutate your own individual_id using custom_R_code and add it in manually. For a wide dataset individual_id is required anytime there are multiple rows of data for the same individual and you want to keep these linked. This field should only be included if it is required.
  • -
-

WARNING If you have an entry individual_id: unknown this assigns all rows of data to an individual named “unknown” and the entire dataset will be assumed to be from a single individual. This is why it is essential to omit this field if there isn’t an actual row of data being read in.

-
    -
  • collection_date If this is not read in as a specified column, it needs to be filled in manually as start date/end date in yyyy-mm-dd, yyyy-mm, or yyyy format, depending on the relevant resolution. If the collection dates are unknown, write unknown/publication year

  • -
  • description: 1-2 sentence description of the study’s goals. The abstract of a manuscript usually includes some good sentences/phrases to borrow.

  • -
  • basis_of_record: Allowable values include: field, field_experiment, captive_cultivated, lab, preserved_specimen, and literature. See the top of system.file("support", "austraits.build_schema.yml", package = "austraits.build" or database structure vignette for definitions of these accepted basis_of_record values. This field can also be read in from a column or can be specified at the location or trait level, as described below. Entries under metadata$locations or metadata$traits (which apply to only that specific location or trait) override the global value entered under metadata$dataset.

  • -
  • life_stage: Allowable values include: adult, sapling, seedling, juvenile. This field can also be read in from a column or can be specified at the location or trait level, as described below. Entries under metadata$locations or metadata$traits (which apply to only that specific location or trait) override the global value entered under metadata$dataset.

  • -
  • sampling_strategy: Often a quite long description of the sampling strategy, extracted verbatim from a manuscript.

  • -
  • original_file: The name of the file initially submitted to AusTraits and archived in a Google Drive folder and usually in the dataset folder, in a subfolder named raw.

  • -
  • notes: Notes about the study and processing of data, especially if there were complications or if some data is suspected duplicates with another study and were filtered out.

  • -
-

There are also fields that will only be used for a subset of datasets:

-
    -
  • measurement_remarks: Measurement remarks is a field to capture a miscellaneous notes column. This should be information that is not captured by “methods” (which is fixed to a single value for a trait). It can be read in for the whole dataset, or entered under dataset$traits if the remarks only apply to specific traits.

  • -
  • entity_type, value_type, replicates, and basis_of_value are standardly added to each trait, but a fixed value or column could be read in under metadata$dataset

  • -
-
-
-

Add traits -

-

Begin by automatically adding all traits to your skeletal metadata.yml file:

-
-metadata_add_traits(current_study)
-

You will be asked to indicate the columns you wish to keep as distinct traits. Include all columns with trait data.

-

This automatically propagates each trait selected into metadata.yml as follows where var_in is the name of a column in the data.csv file (for wide datasets) or a unique trait name values in the trait_name column (for a long dataset):

-
- var_in: leaf area (mm2)  
-  unit_in: .na  
-  trait_name: .na
-  entity_type: .na
-  value_type: .na 
-  basis_of_value: .na
-  replicates: .na  
-  methods: .na  
-

The trait details then need to be filled in manually.

-
    -
  • units: fill in the units specified by the author - such as mm2. If you’re uncertain about the syntax/format used for some more complex units, look through the traits definition file (config/traits.yml) or the file showing unit conversions (config/unit_conversions.csv). For categorical variables, leave this as .na.

  • -
  • trait_name: This is the appropriate trait name from config/traits.yml. If no appropriate trait exists in AusTraits, a new trait can often be added - just ensure it is a trait where data will be comparable across studies and has been measured for a fair number (~>50) species. For currently unsupported traits, we leave this as .na but then fill in the rest of the data and flag this study as having a potential new trait. Then in the future, when this trait is added to the traits.yml file, the data can be read into AusTraits by simply replacing the .na with a trait name.

  • -
  • entity_type: Entity types indicate the taxonomic/ecological hierarchical level corresponding to the trait value. Entity types can be individual, population, species, genus, family or order. Metapopulation-level measurements are coded as population and infraspecific taxon-level measurements are coded as species. See the top of system.file("support", "austraits.build_schema.yml", package = "austraits.build") for definitions of these accepted entity types. Note: entity_type is about the hierarchical level to which the trait measurement refers; this is separate from the taxonomic resolution of the entity’s name.

  • -
  • value_type: Allowable value types are mean, minimum, maximum, mode, range, raw, and bin. See the top of system.file("support", "austraits.build_schema.yml", package = "austraits.build") for definitions of these accepted value types. All categorical traits are generally scored as being a mode, the most commonly observed value. Note that for values that are bins, the two numbers are separated by a double-hyphen, 1 -- 10.

  • -
  • basis_of_value: Basis of value indicates how a value was determined. Allowable terms are measurement, expert_score, model_derived, and literature. See the top of system.file("support", "austraits.build_schema.yml", package = "austraits.build") for definitions of these accepted value types, but in general most categorical traits are values that have been scored by an expert (expert_score) and more numeric trait values are measurements.

  • -
  • replicates: Fill in with the appropriate value. For categorical variables, leave this as .na. If there is a column that specifies replicate number, you can list the column name in the field.

  • -
  • -

    methods: This information can usually be copied verbatim from a manuscript. In general, methods sections extracted from pdfs include “special characters” (non-UTF-8 characters). Non-English alphabet characters are recognised (e.g. é, ö) and should remain unchanged. Other characters will be re-formatted during the study input process, so double check that degree symbols (º), en-dashes (–), em-dashes (—), and curly quotes (‘,’,“,”) have been maintained or reformatted with a suitable alternative. Greek letters and some other characters are replaced with their Unicode equivalent (e.g. <U+03A8> replaces Psi (Ψ)); for these it is best to replace the symbol with an interpretable English-character equivalent.

    -
      -
    • Note with methods, if the identical methods apply to a string of traits, for the first trait use the following syntax, where the &leaf_length_method notation assigns the remaining text in the field as the leaf_length_method.
    • -
    -
      methods: &leaf_length_method All measurements were from dry herbarium collections, with leaf and bracteole measurements taken from the largest of these structures on each specimen.
    -

    Then for the next trait that uses this method you can just include. At the end of processing you can read/write the yml file and this will fill in the assigned text throughout.

    -
      methods: *leaf_length_method
    -
  • -
-

In addition to the automatically propagated fields, there are a number of optional fields you can add if appropriate.

-
    -
  • life_stage If all measurements in a dataset were made on plants of the same life stage a global value should be entered under metadata$dataset. However if different traits were measured at different life stages or different rows of data represent measurements at different life stages you can specify a unique life stage for each trait or indicate a column where this information is stored.

  • -
  • basis_of_record If all measurements in a dataset represent the same basis_of_record a global value should be entered under metadata$dataset. However if different traits have different basis_of_record values or different rows of data represent different basis_of_record values you can specify a unique basis_of_record value for each trait or indicate a column where this information is stored.

  • -
  • measurement_remarks: Measurement remarks is a field to indicate miscellaneous comments. If these comments only apply to specific trait(s), this field should be specified with those trait’s metadata sections. This meant to be information that is not captured by “methods” (which is fixed to a single value for a trait).

  • -
  • method_context If different columns in a wide data.csv file indicate measurements on the same trait using different methods, this needs to be designated. At the bottom of the trait’s metadata, add a method_context_name field (e.g. method_context words well). Write a word or short phrase that indicates which method context applies to that trait (data column). For instance, one trait might have method_context: fully expanded leaves and a second entry with the same trait name and method might have method_context: leaves still expanding. The method context details must also be added to the contexts section.

  • -
  • temporal_context If different columns in a wide data.csv file indicate measurements on the same trait, on the same individuals at different points in time, this needs to be designated. At the bottom of the trait’s metadata, add a temporal_context_name field (e.g. temporal_context words well). Write a word or short phrase that indicates which temporal context applies to that trait (data column). For instance, one trait might have temporal_context: dry season and a second entry with the same trait name and method might have temporal_context: after rain. The temporal context details must also be added to the contexts section.

  • -
-
-
-

Adding location details -

-

Location data includes location names, latitude/longitude coordinates, verbal location descriptions, and any additional abiotic/biotic location variables provided by the contributor (or in the accompanying manuscript). For studies with more than a few locations, it is most efficient to create a table of this data that is automatically read into the metadata.yml file.

-
    -
  1. Location names must be identical (including syntax, case) to those in data.csv

  2. -
  3. Column headers for latitude and longitude data must read latitude (deg) and longitude (deg)

  4. -
  5. Latitude and longitude must be in decimal degrees (i.e. -46.5832). There are many online converters to convert from degrees,minutes,seconds format or UTM. Or use the following formula: decimel_degrees = degrees + (minutes/60) + (seconds/3600)

  6. -
  7. If there is a column with a general vegetation description (i.e. rainforest, coastal heath it should be titled description)

  8. -
  9. Although location properties are not restricted to a controlled vocabulary, newly added studies should use the same location property syntax as others whenever possible, to allow future discoverability. To generate a list of already used under location_property, use:

  10. -
-
austraits$locations %>% distinct(location_property)
-

A few contributors provide a standalone file of all location data. Otherwise, the following sequence works well:

-
    -
  1. Identify all location names in the data.csv file. The following code extracts a list of location names and any other columns in the data file that include location-specific information:
  2. -
-
-read_csv("data/dataset_id/data.csv") %>%
-  distinct(location, .keep_all = TRUE) %>% # the argument `.keep_all` ensures columns aren't dropped
-  select(location, rainfall, lat, lon) %>% # list of relevant columns to keep
-  rename(`latitude (deg)` = lat, `longitude (deg)` = long)  # rename columns to how you want them to appear in the metadata file. Faster to do it once here than repeatedly in the metadata file
-  write_csv("data/dataset_id/raw/location_data.csv")
-
    -
  1. Open the spreadsheet in Excel (or any editor of your choice) and manually add any additional data from the manuscript. Save as a .csv file.

  2. -
  3. Open in R

  4. -
-
-read_csv("data/dataset_id/raw/location_data.csv") -> location_data
-

As an example of what the location table should look like:

-
    -
  1. This location data can then be read into metadata.yml:
  2. -
-
-metadata_add_locations(current_study, site_data)
-

You are first prompted to identify the column with the location name and then to list all columns that contain location data. This automatically fills in the location component on the metadata file.

-

It is possible that you will want to specify life_stage or basis_of_record at the location_level. You can later manually add these fields to some or all locations.

-

(During processing location_id’s are automatically generated and paired with each location_name.)

-
-
-

Context details -

-

The dictionary definition of a context is the situation within which something exists or happens, and that can help explain it. This is exactly what context_properties are in AusTraits, ancillary information that is important to explaining and understanding a trait value.

-

AusTraits recognises 5 categories of contexts: - treatment contexts are experimental treatments applied to individuals, such as soil nutrient manipulations, growing temperatures, or CO2 enchancement. - plot contexts are either blocks/plots within an experimental design or a variable that has been measured within a location and measurements have been stratified across this variable. Topographic position within a location is an example of this. - temporal contexts relate to repeat measurements on the same entity (individual, population, or species) across time. They may simply be number observations or might be explicitly linked to growing season or time of day. - method contexts indicate that the same trait has been measured on the same entity (individual, population or species) using multiple methods. These might be samples from different canopy light environments, different leaf ages, or sapwood samples from different branch diameters. - entity_contexts capture ancillary information about the entity (individual, population or species) that helps explain the measured trait values. This might be the entity’s sex, caste (for social insects), or host plant (for insects).

-

Context properties are not restricted to a controlled vocabulary. However, newly added studies should use the same context property syntax as others whenever possible, to allow future discoverability. To generate a list of terms already used under context_property, use:

-
austraits$contexts %>% distinct(context_property)
-

The AusTraits workflow can handle as many context properties as is required. These are most easily read with the dedicated function

-
metadata_add_contexts(dataset_id)
-

The function first displays a list of all data columns (from the data.csv file) and prompts you to select those that are context properties. For each column you are asked to indicate its category (those described above). You are shown a list of unique values present in the data column and asked if these require any substitutions. This function adds the following information to the section metadata$contexts (example from Crous_2013)

-
- context_property: unknown
-  category: temporal_context
-  var_in: month
-  values:
-  - find: AUG
-    value: unknown
-    description: unknown
-  - find: DEC
-    value: unknown
-    description: unknown
-  - find: FEB
-    value: unknown
-    description: unknown
-- context_property: unknown
-  category: treatment_context
-  var_in: Temp-trt
-  values:
-  - value: ambient
-    description: unknown
-  - value: elevated
-    description: unknown
-- context_property: unknown
-  category: treatment_context
-  var_in: CO2_Treat
-  values:
-  - find: ambient CO2
-    value: unknown
-    description: unknown
-  - find: added CO2
-    value: unknown
-    description: unknown
-

You must then manually fill in the fields designated as unknown. You are permitted to omit the description field if the context_property value itself provides sufficient description.

-

If there are additional context properties that were designated in the traits section, these will have to be added manually, as this information is not captured in a column. A final output might be:

-
- context_property: sampling season
-  category: temporal_context
-  var_in: month
-  values:
-  - find: AUG
-    value: August
-    description: August (late winter)
-  - find: DEC
-    value: December
-    description: December (early summer)
-  - find: FEB
-    value: February
-    description: February (late summer)
-- context_property: temperature treatment
-  category: treatment_context
-  var_in: Temp-trt
-  values:
-  - value: ambient
-    description: Plants grown at ambient temperatures; Jan average max = 29.4 dec
-      C / July average min = 3.2 dec C.
-  - value: elevated
-    description: Plants grown 3 deg C above ambient temperatures.
-- context_property: CO2 treatment
-  category: treatment_context
-  var_in: CO2_Treat
-  values:
-  - find: ambient CO2
-    value: 400 ppm
-    description: Plants grown at ambient CO2 (400 ppm).
-  - find: added CO2
-    value: 640 ppm
-    description: Plants grown at elevated CO2 (640 ppm); 240 ppm above ambient.
-- context_property: measurement temperature
-  category: method
-  var_in: method_context          #this field would be included in the relevant traits
-  values:
-  - value: 20°C                   # this value would be keyed in through the relevant traits
-    description: Measurement made at 20°C
-  - value: 25°C
-    description: Measurement made at 25°C
-
-
-

Using substitutions -

-

It is very unlikely that a contributor will use categorical trait values that are entirely identical to those in the traits.yml file. You need to add substitutions for those that do not exactly align to match the wording and syntax supported by AusTraits. Combinations of multiple trait values are allowed - simply list them, space delimited (e.g. shrub tree for a species whose growth form includes both)

-

Single substitutions can be added by running:

-
-metadata_add_substitution(current_study, "trait_name", "find", "replace")
-

where trait_name is the AusTraits defined trait name, find is the trait value used in the data.csv file and replace is the trait value supported by AusTraits.

-

If you have many substitutions to add, the following may be more efficient:

-
    -
  • Add a single substitution via the function and then copy and paste the lines many times in the metadata.yml file, changing the relevant fields

  • -
  • Create a spreadsheet with a list of all trait_name by trait_value combinations requiring substitutions. The spreadsheet would have four columns with headers dataset_id, trait_name, find and replace. This table can be read directly into the metadata.yml file using the function metadata_add_substitutions_table. This is described below under Adding many substitutions.

  • -
-
-
Excluded data -
-

This section of the metadata.yml file provides the capacity to explicitly exclude specific trait values or taxon names. These are values that are in the data.csv file but should be excluded from AusTraits.

-

It includes three elements:
-- variable: A variable from the traits table, typically taxon_name, location_name or context_name
-- find: Value of variable to remove
-- reason: Records why the data was removed, e.g. exotic

-

Multiple, comma-delimited values can be added under find.

-

For example, in Munroe_2019:

- -
-
-
Questions -
-

The final section of the metadata.yml file is titled questions. This is a location to:

-
    -
  1. Ask the data contributor targeted questions about their study. When you generate a report (described below) these questions will appear at the top of the report. -
      -
    • Preface the first question you have with contributor: (indented once), and additional questions with question2:, etc.
      -
    • -
    • Ask contributors about missing metadata
      -
    • -
    • Point contributors attention to odd data distributions, to make sure they look at those traits extra carefully.
    • -
    • Let contributors know if you’re uncertain about their units or if you transformed the data in a fairly major way.
      -
    • -
    • Ask the contributors if you’re uncertain you aligned their trait names correctly.
    • -
    -
  2. -
  3. This is a place to list any trait data that are not yet traits supported by AusTraits. Use the following syntax, indented once: additional_traits:, followed by a list of traits.
  4. -
-
-
-
Hooray! You now have a fully propagated metadata.yml file! -
-

Next is making sure it has captured all the data exactly as you’ve intended.

-
-
-
-
-
-

Quality checks -

-

Before starting the quality checks, it is helpful to assign a variable, current_study:

-
-current_study <- "Wright_2001"
-

This lets you have a list of tests you run for each study and you just have to reassign a new dataset_id to current_study.

-

It is best to run tests and fix formatting first.

-
-

Clear formatting -

-

The clear formatting code below reads and re-writes the yaml file. This is the same process that is repeated when running functions that automatically add substitutions or check taxonomy. Running it first ensures that any formatting issues introduced (or fixed) during the read/write process are identified and solved first.

-

For instance, the write_metadata function inserts line breaks every 80 characters and reworks other line breaks (except in custom_R_code). It also reformats special characters in the text, substituting in its accepted format for degree symbols, en-dashes, em-dashes and quotes, and substituting in Unicode codes for more obscure symbols.

-
-f <- file.path("data", current_study, "metadata.yml")
-read_metadata(f) %>% write_metadata(f)
-
-
-

Running tests -

-

Begin by running some automated tests to ensure the dataset meets the required set up. The tests run through a collection of pre-specified checks on the files for each study. The output alerts you to possible issues needing to be fixed, by comparing the data in the files with the expected structure and allowed values, as specified in the schema and definitions.

-

Certain special characters may show up as errors and need to be manually adjusted in the metadata.yml file

-

The tests also identify mismatches between the location names in the data.csv file vs. metadata.yml file (same for context), unsupported trait names, etc.

-

To run the tests, the variable dataset_ids must be defined in the global namespace, containing a vector of ids to check. For example:

-
-# load relevant functions
-library(austraits.build)
-
-# Tests run test on one study
-dataset_ids <- "Bragg_2002"
-dataset_test(dataset_ids)
-
-# Tests run test on all studies
-dataset_ids <- dir("data")
-dataset_test(dataset_ids)
-

Fix as many errors as you can and then rerun dataset_test() repeatedly until no errors remain.

-

See below for suggestions on how to implement large numbers of trait value substitutions.

-
-
-

Rebuild AusTraits -

-

Now incorporate the new study into AusTraits:

-
-build_setup_pipeline()
-austraits <- remake::make("austraits")
-
-
-

Check excluded data -

-

AusTraits automatically excludes data for a number of reasons. These are available in the frame excluded_data.

-

When you are finished running quality checks, no data should be excluded due to Missing unit conversion and Unsupported trait.

-

A few values may be legitimately excluded due to other errors, but check each entry.

-

The best way to view excluded data for a study is:

-
-austraits$excluded_data %>%
-  filter(
-    dataset_id == current_study,
-    error != "Observation excluded in metadata"
-  ) %>%
-  View()
-

Missing values (blank cells, cells with NA) are not included in the excluded_data table, because they are assumed to be legitimate blanks. If you want to confirm this, you need to temporarily change the default arguments for the internal function dataset_process where it is called within the remake.yml file. For instance, the default,

-
-      dataset_process("data/Ahrens_2019/data.csv",
-                  Ahrens_2019_config,
-                  schema
-                 )
-

needs to be changed to:

-
-      dataset_process("data/Ahrens_2019/data.csv",
-                  Ahrens_2019_config,
-                  schema,
-                  filter_missing_values = FALSE
-                 )
-
-

Reasons for data to be excluded -

-

Possible reasons for excluding a trait value includes:

-
    -
  • Missing species name: Species name is missing from data.csv file for a given row of data. This usually occurs when there are stray characters in the data.csv file below the data – delete these rows.

  • -
  • Missing unit conversion: Value was present but appropriate unit conversion was missing. This requires that you add a new unit conversion to the file config/unit_conversions.csv. Add additional conversions near similar unit conversions already in the file for easier searching in the future.

  • -
  • Observation excluded in metadata: Specific values, usually certain taxon names can be excluded in the metadata. This is generally used when a study includes a number of non-native and non-naturalised species that need to be excluded. These should be intentional exclusions, as they have been added by you.

  • -
  • Time contains non-number: Indicates a problem with the value entered into the traits flowering_time and fruiting_time. (Note to AusTraits custodians: This error should no longer appear - will retain for now as a placeholder.)

  • -
  • Unsupported trait: trait_name not listed in config/traits.yml, under traits. Double check you have used the correct spelling/exact syntax for the trait_name, adding a new trait to the traits.yml file if appropriate. If there is a trait that is currently unsupported by AusTraits, leave trait_name: .na. Do not fill in an arbitrary name.

  • -
  • Unsupported trait value: This error, referencing categorical traits, means that the value for a trait is not included in the list of supported trait values for that trait in config/traits.yml. See adding many substitutions if there are many trait values requiring substitutions. If appropriate, add another trait value to the traits.yml file, but confer with other curators, as the lists of trait values have been carefully agreed upon through workshop sessions.

  • -
  • Value does not convert to numeric: Is there a strange character in the file preventing easy conversion? This error is rare and generally justified.

  • -
  • Value out of allowable range: This error, referencing numeric traits, means that the trait value, after unit conversions, falls outside of the allowable range specified for that trait in config/traits.yml. Sometimes the AusTraits range is too narrow and other times the author’s value is truly an outlier that should be excluded. Look closely at these and adjust the range in config/traits.yml if justified. Generally, don’t change the range until you’ve create a report for the study and confirmed that the general cloud of data aligns with other studies as excepted. Most frequently the units or unit conversion is what is incorrect.

  • -
-

You can also ask how many of each error type are present for a study:

-
-austraits$excluded_data %>%
-  filter(dataset_id == "Cheal_2017") %>%
-  pull(error) %>%
-  table()
-#> < table of extent 0 >
-

Or produce a table of error type by trait:

-
-austraits$excluded_data %>%
-  filter(
-    dataset_id == "Cheal_2017",
-  ) %>%
-  select(trait_name, error) %>%
-  table()
-#> < table of extent 0 x 0 >
-

Note, most studies have no excluded data. This study is an extreme example!

-
-
-
-

Adding many substitutions -

-

For categorical traits, if you want to create a list of all values that require substitutions:

-
-austraits$excluded_data %>%
-  filter(
-    dataset_id == current_study,
-    error == "Unsupported trait value"
-  ) %>%
-  distinct(dataset_id, trait_name, value) %>%
-  rename(find = value) %>%
-  select(-dataset_id) %>%
-  write_csv("data/dataset_id/raw/substitutions_required.csv")
-

For studies with a small number of substitutions, add them individually using:

-
-metadata_add_substitution(dataset_id, trait_name, find, replace)
-

For studies with large number of substitutions required, you can add an additional column to this table, replace, and fill in all the correct trait values. Then read the list of substitutions directly into the metadata file:

-
-substitutions_to_add <-
-  read_csv("data/dataset_id/raw/substitutions_required_after_editing.csv")
-
-metadata_add_substitutions_list(dataset_id, substitutions_to_add)
-
-
-

Add taxonomic updates -

-

The function add_taxonomic_updates allows you to manually align submitted taxon names (the original_name) with the taxon names in the taxonomic resource.

- -
    -
  • -find is the name in the taxon name column in the dataset
  • -
  • -replace is the equivalent taxon name in the taxonomic resource
  • -
  • -reason provides information about why the taxonomic update is required
  • -
  • -taxonomic_resolution indicates the most specific taxon rank that the name in replace aligns to
  • -
-

As examples:

-

A simple fix correcting a minor typo to align with an accepted taxon name:

- -

An example of a taxon name that can only be aligned to genus. The taxonomic_resolution is therefore specified as genus. The portion of the name that can be aligned to the taxonomic resource must be before the square brackets. Any information within the square brackets is important for uniquely identifying this entry within AusTraits, but does not provide additional taxonomic information.

- -

A taxonomic update that aligns a name to the most similar taxon_name within a taxonomic resource (the APC), but this is a taxonomic synonym and the austraits workflow will update it to its currently accepted name (since this is documented within the taxon_list.csv file):

- -
-
-

Check if AusTraits pivots wider -

-

AusTraits users want to be able to “pivot” between long and wide formats. Each row of data should have a unique combination of the following fields: trait_name, dataset_id, observation_id, source_id, taxon_name, population_id, individual_id, temporal_id, method_id, value_type, and original_name

-

Therefore, the dataset should be able to pivot wider and the following code should have a 1 in every cell.

-
-austraits$traits %>%
-  select(dataset_id, trait_name, value, observation_id, source_id, taxon_name, population_id, individual_id, temporal_id, method_id, value_type, original_name) %>%
-  pivot_wider(names_from = trait_name, values_from = value, values_fn = length) %>% View()
-

If AusTraits fails to pivot_wider, likely problems are: - Not all context information has been captured. For instance, is it possible that you have two columns with data for the same trait, measured using different methods? In this case you need to add a method_context to both the relevant traits and to the contexts section. - There are multiple observations per entity. In a number of large studies which, in theory, include a single observation per species, have a few scattered instances of a second row of trait values with the same taxon name. They might be true duplicates and can be removed or perhaps they are indeed some alternate values. In this case the following custom_R_code works:

-
' data %>%
-    group_by(taxon_name) %>%
-      mutate(observation_number = dplyr::row_number()) %>%
-    ungroup()'
-

Then add observation_number as a context with category: temporal_context

-
-
-

Check for duplicates -

-

AusTraits strives to have no duplicate entries for numeric (continuous) trait measurements. That is, each value in AusTraits should represent a unique measurement, rather than a measurement sourced from another study.

-

When you receive/solicit a dataset, ask the data contributor if all data submitted was collected for the specific study and if they suspect other studies from their lab/colleagues may also have contributed any of this data.

-

In addition, there are tests to check for duplicates within and across dataset_ids.

-

To check for duplicates:

-
-austraits_deduped <- remove_suspected_duplicates(austraits)
-duplicates_for_dataset_id <-
-  austraits_deduped$excluded_data %>%
-  filter(
-    dataset_id == current_study
-  )
-
-

Duplicates within the study -

-
    -
  1. First sort duplicates_for_dataset_id by the column error and scan for duplicates within the study (these will be entries under error that begin with the same dataset_id as the dataset being processed)

  2. -
  3. For legitimately identical measurements, do nothing. For instance, if %N has been measured on 50 replicates of a species and is reported to the nearest 0.01% it is quite likely there will be a few identical values within the study.

  4. -
  5. If a species-level measurement has been entered for all within-location replicates, you need to filter out the duplicates. This is true for both numeric and categorical values. Enter the following code as custom_R_code in the dataset’s metadata file:

  6. -
- -

Note: Using custom R code instead of filtering the values in the data.csv file itself ensures the relevant trait values are still associated with each line of data in the data.csv file, but only read into AusTraits a single time. Note: You would use group_by(Species, Location) if there are unique values at the species x location level.

-
-
-

Duplicates between studies -

-

AusTraits does not attempt to filter out duplicates in categorical traits between studies. The commonly duplicated traits like life_form, plant_growth_form, photosynthetic_pathway, fire_response, etc. are legitimately duplicated and if the occasional study reported a different plant_growth_form or fire_response it would be important to have documented that one trait value was much more common than another. Such categorical trait values may have been sourced from reference material or measured/identified by this research team.

-

Identifying duplicates in numeric traits between studies can be difficult, but it is essential that we attempt to filter out all duplicate occurrences of the same measurement. Some common patterns of duplication include:

-
    -
  1. For a single trait, if there are a large number of values duplicated in a specific other dataset_id (i.e. the error repeatedly starts with the same dataset_id), be suspicious. Before contacting the author, check the metadata for the two datasets, especially authors and study locations, to see if it is likely these are data values that have been jointly collected and shared across studies. Similar location names/locations, identical university affiliations, or similar lists of traits being measured are good clues.

  2. -
  3. plant_height, leaf_length, leaf_width, seed_length, seed_width and seed_mass are the numeric variables that are most frequently sourced from reference material (e.g. floras, herbarium collections, reference books, Kew seed database, etc.)

  4. -
  5. The following datasets are flagged in AusTraits as reference studies and are the source of most duplicates for the variables listed above: Kew_2019_1, Kew_2019_2, Kew_2019_3, Kew_2019_4, Kew_2019_5, Kew_2019_6, ANBG_2019, GrassBase_2014, CPBR_2002, NTH_2014,RBGK_2014, NHNSW_2016, RBGSYD__2014_2, RBGSYD_2014, TMAG_2009, WAH_1998, WAH_2016,Brock_1993, Barlow_1981, Hyland_2003, Cooper_2013

  6. -
-

Data from these studies are assumed to be the source, and the other study with the value is assumed to have sourced it from the above study. We recognise this is not always accurate, especially for compilations within Kew_2019_1, Kew’s seed mass database. Whenever we input a raw dataset that is also part of the Kew compilation, we filter that contributors data from Kew_2019_1.

-
    -
  1. Data for wood_density is also often sourced from other studies, most commonly Ilic_2000 or Zanne_2009.

  2. -
  3. Data from a number of studies from Leishman and Wright have been extensively shared within the trait ecology community, especially through TRY

  4. -
-

If the dataset you are processing has a number of numeric trait duplicates that follow one of the patterns of duplication listed, the duplicates should be filtered out. Any other data explicitly indicated in the manuscript as sourced should also be filtered out. Most difficult are studies that have partially sourced data, often from many small studies, and partially collected new data, but not identified the source of each value.

-

Filtering duplicate data is a three-step process. In brief:

-
    -
  1. Identify traits and studies with duplicates you believe should be removed.
    -
  2. -
  3. Add additional columns to data.csv, identifying certain trait_values as duplicates.
    -
  4. -
  5. Add custom R code that filters out identified duplicates when the study is merged into AusTraits.
  6. -
-
-
Identify traits and studies -
-
    -
  1. Either in R or Excel, manipulate duplicates_for_dataset_id to remove rows that you believe are legitimate duplicates, including duplicates values due to replicate measurements within a single study and stray duplicates across studies that likely true, incidental duplicate values. Carefully consider which datasets and traits to include/exclude from the filter.
  2. -
-

As an example:

-
-# Note, this code will be replaced by a function in the future.
-duplicates_to_filter <-
-  duplicates_for_dataset_id %>%
-  mutate(
-    dataset_with_duplicate =
-      error %>%
-        gsub("Duplicate of ", "", .) %>%
-        gsub("[[:alnum:]]$", "", .) %>%
-        gsub("[[:punct:]]$", "", .)
-  ) %>%
-  filter(dataset_with_duplicate %in% c("Ilic_2000", "Zanne_2009", "Kew_2019_1", "Barlow_1981", "NTH_2014")) %>%
-  filter(trait_name %in% c("wood_density", "seed_mass", "leaf_length", "leaf_width"))
-
    -
  1. Use the following code to add columns to data.csv that identify specific values as duplicates:
  2. -
-
-# Note, this code will be replaced by a function in the future.
-wood_density_duplicates <-
-  duplicates_to_filter %>%
-  filter(trait_name == "wood_density") %>%
-  select(error, original_name) %>%
-  rename(wood_density_duplicate = error)
-
-seed_mass_duplicates <-
-  duplicates_to_filter %>%
-  filter(trait_name == "seed_width") %>%
-  select(error, original_name) %>%
-  rename(seed_mass_duplicate = error)
-
-leaf_width_min_duplicates <-
-  duplicates_to_filter %>%
-  filter(trait_name == "leaf_width", value_type == "expert_min") %>%
-  select(error, original_name) %>%
-  rename(leaf_width_min_duplicate = error)
-
-leaf_width_max_duplicates <-
-  duplicates_to_filter %>%
-  filter(trait_name == "leaf_width", value_type == "expert_max") %>%
-  select(error, original_name) %>%
-  rename(leaf_width_max_duplicate = error)
-
-leaf_length_min_duplicates <-
-  duplicates_to_filter %>%
-  filter(trait_name == "leaf_length", value_type == "expert_min") %>%
-  select(error, original_name) %>%
-  rename(leaf_length_min_duplicate = error)
-
-leaf_length_max_duplicates <-
-  duplicates_to_filter %>%
-  filter(trait_name == "leaf_length", value_type == "expert_max") %>%
-  select(error, original_name) %>%
-  rename(leaf_length_max_duplicate = error)
-
-read_csv("data/dataset_id/data.csv") %>%
-  left_join(wood_density_duplicates, by = c("column_with_taxon_name" = "original_name")) %>%
-  left_join(seed_mass_duplicates, by = c("column_with_taxon_name" = "original_name")) %>%
-  left_join(leaf_width_min_duplicates, by = c("column_with_taxon_name" = "original_name")) %>%
-  left_join(leaf_width_max_duplicates, by = c("column_with_taxon_name" = "original_name")) %>%
-  left_join(leaf_length_min_duplicates, by = c("column_with_taxon_name" = "original_name")) %>%
-  left_join(leaf_length_max_duplicates, by = c("column_with_taxon_name" = "original_name")) %>%
-  write_csv("data/dataset_id/data.csv")
-
    -
  1. For the above example, then add the following code to custom R code, removing the duplicate values from the data columns (by setting them as NA) as the dataset is read into AusTraits.
  2. -
-
-data %>%
-  mutate(
-    `wood density` = ifelse(is.na(wood_density_duplicate), `wood density`, NA),
-    `seed mass (mg)` = ifelse(is.na(seed_mass_duplicate), `seed mass (mg)`, NA),
-    `leaf width minimum (mm)` = ifelse(is.na(leaf_width_min_duplicate), `leaf width minimum (mm)`, NA),
-    `leaf width maximum (mm)` = ifelse(is.na(leaf_width_max_duplicate), `leaf width maximum (mm)`, NA),
-    `leaf length minimum (mm)` = ifelse(is.na(leaf_length_min_duplicate), `leaf length minimum (mm)`, NA),
-    `leaf length maximum (mm)` = ifelse(is.na(leaf_length_max_duplicate), `leaf length maximum (mm)`, NA)
-  )
-

Difficulties:

-
    -
  • This method only identifies values as duplicates if they have the same number of significant figures.
  • -
  • More complex matching may reveal further duplicates. For seed mass in particular, some studies likely source values from the Kew database and then round these values. They may similarly source several values from Kew and then include the mean in their dataset. If their methods or correspondence with the contributor suggests the values were sourced from Kew (or another lab, papers, etc.) it is best to filter out all values, EXCEPT species that are not yet represented in AusTraits for the trait in question.
  • -
-
-
-
-
-

Build study report -

-

The report is located in the export folder.

-

Check the study report to ensure:

-
    -
  • All possible metadata fields were filled in
    -
  • -
  • The locations plot sensibly on the map of Australia
    -
  • -
  • For numeric traits, the trait values plot sensibly relative to other studies
    -
  • -
  • The list of unknown/unmatched species doesn’t include names you think should be recognised/aligned
  • -
-

If necessary, cycle back through earlier steps to fix any errors, rebuilding the study report as necessary

-

At the very end, re-clear formatting, re-run tests, rebuild AusTraits, rebuild report.

-

If you’re uncertain, also recheck excluded data and duplicates before these final steps.

-
-f <- file.path("data", current_study, "metadata.yml")
-read_metadata(f) %>% write_metadata(f)
-
-dataset_ids <- current_study
-austraits_run_tests()
-
-austraits <- remake::make("austraits")
-dataset_report(current_study, overwrite = TRUE)
-

To generate a report for a collection of studies:

-
-dataset_reports(c("Falster_2005_1", "Wright_2002"), overwrite = TRUE)
-

Or for all studies:

-
-dataset_reports(overwrite = TRUE)
-

Add the argument overwrite=TRUE if you already have a copy of a specific report stored in your computer and want to replace it with a newer version.

-

(Reports are written in Rmarkdown and generated via the knitr package. The template is stored in scripts/report_study.html).

-
-
-
-

Working with our GitHub repository -

-

By far our preferred way of contributing is for you to contribute files directly into the repository and then send a pull request with your input. You can do this by

-
    -
  • (for approved maintainers of austraits.build) Creating a branch, or
  • -
  • (for others) forking the database in github
  • -
-

In short,

-
    -
  1. Create a Git branch for your new work, either within the AusTraits repo (if you are an approved contributor) or as a fork of the repo.
  2. -
  3. Make commits and push these up onto the branch.
  4. -
  5. Make sure everything runs fine before you send a pull request.
  6. -
  7. When you’re ready to merge in the new features,
  8. -
-

Before you make a substantial pull request, you should always file an issue and make sure someone from the team agrees that it’s worth pursuing the problem. If you’ve found a bug, create an associated issue and illustrate the bug with a minimal reprex illustrating the issue.

-

If this is not possible, you could email the relevant files (see above) to the AusTraits email: austraits.database@gmail.com

-
-

Merging a pull request -

-

There are multiple ways to merge a pull request, including using GitHub’s built-in options for merging and squashing. When merging a PR, we ideally want

-
    -
  • a single commit
  • -
  • to attribute the work to the original author
  • -
  • to run various checks along the way
  • -
-

There are two ways to do this. For both, you need to be an approved maintainer.

-
-

Merging in your own PR -

-

You can merge in your own PR after you’ve had someone else review it.

-
    -
  1. Send the PR
  2. -
  3. Tag someone to review
  4. -
  5. Once ready, merge into main choosing “Squash & Merge”, using an informative commit message.
  6. -
-
-
-

Merging someone else’s PR -

-

When merging in someone else’s PR, the built-in options aren’t ideal, as they either take all of the commits on a branch (ugh, messy), OR make the commit under the name of the person merging the request.

-

The workflow below describes how to merge a pull request from the command line, with a single commit & attributing the work to the original author. Lets assume a branch of name Smith_1995.

-

First, from the master branch in the repo, run the following:

-
git merge --squash origin/Smith_1995
-

Then in R

-

Now back in the terminal

-
git add .
-git commit
-

Add a commit message, referencing relevant pull requests and issues, e.g.

-
Smith_1995: Import new data
-
-For #224, closes #286
-

And finally, amend the commit author, to reference the person who did all the work!

-
git commit --amend --author "XXX <XXX@gmail.com>"
-
-
-
-

Commit messages -

-

Informative commit messages are ideal. Where possible, these should reference the issue being addressed. They should clearly describe the work done and value added to AusTraits in a few, clear, bulleted points.

-
-
-

Version updating & Making a new release -

-

Releases of the dataset are snapshots that are archived and available for use.

-

We use semantic versioning to label our versions. As discussed in Falster et al 2019, semantic versioning can apply to datasets as well as code.

-

The version number will have 3 components for actual releases, and 4 for development versions. The structure is major.minor.patch.dev, where dev is at least 9000. The dev component provides a visual signal that this is a development version. So, if the current version is 0.9.1.9000, the release be 0.9.2, 0.10.0 or 1.0.0.

-

Our approach to incrementing version numbers is

-
    -
  • -major: increment when you make changes to the structure that are likely incompatible with any code written to work with previous versions.
  • -
  • -minor: increment to communicate any changes to the structure that are likely to be compatible with any code written to work with the previous versions (i.e., allows code to run without error). Such changes might involve adding new data within the existing structure, so that the previous dataset version exists as a subset of the new version. For tabular data, this includes adding columns or rows. On the other hand, removing data should constitute a major version because records previously relied on may no longer exist.
  • -
  • -patch: Increment to communicate correction of errors in the actual data, without any changes to the structure. Such changes are unlikely to break or change analyses written with the previous version in a substantial way.
  • -
-

-

Figure: Semantic versioning communicates to users the types of changes that have occurred between successive versions of an evolving dataset, using a tri-digit label where increments in a number indicate major, minor, and patch-level changes, respectively. From Falster et al 2019, (CC-BY).

-

The process of making a release is as follows. Note that corresponding releases and versions are needed in both austraits and austraits.build:

-
    -
  1. Update the version number in the DESCRIPTION file, using `

  2. -
  3. Compile austraits.build.

  4. -
  5. Update the documentation.

  6. -
  7. Commit and push to github.

  8. -
  9. Make a release on github, adding version number

  10. -
  11. Prepare for the next version by updating version numbers.

  12. -
-
-
-
-

Other -

-
-

File types -

-
-

CSV -

-

A comma-separated values (CSV) file is a delimited text file that uses a comma to separate values. Each line of the file is a data record. Each record consists of one or more fields, separated by commas. This is a comma format for storing tables of data in a simple text file. You can edit it an Excel or in a text editor. For more, see here.

-
-
-

YAML files -

-

The yml file extension (pronounced “YAML”) is a type structured data file, that is both human and machine readable. You can edit it in any text editor, or in Rstudio. Generally, yml is used in situations where a table does not suit because of variable lengths and/or nested structures. It has the advantage over a spreadsheet in that the nested “headers” can have variable numbers of categories. The data under each of the hierarchical headings are easily extracted by R.

-
-
-
-

Extracting data from PDF tables -

-

If you encounter a PDF table of data and need to extract values, this can be achieved with the tabula-java tool. There’s actually an R wrapper (called tabulizer), but we haven’t succeeded in getting this running. However, it’s easy enough to run the java tool at the command line on OSX.

-
    -
  1. Download latest release of tabula-java and save the file in your path

  2. -
  3. Run
  4. -
-
java -jar tabula-1.0.3-jar-with-dependencies.jar my_table.pdf -o my_data.csv
-

This should output the data from the table in my_table.pdf into the csv my_data.csv

-
    -
  1. Clean up in Excel. check especially that the locations of white spaces are correct.
  2. -
-
-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/austraits.build.html b/docs/articles/austraits.build.html deleted file mode 100644 index 58a095db9..000000000 --- a/docs/articles/austraits.build.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - -Getting started with austraits.build • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - -

-
-

What type of repository is this and who is it for? -

-

The main purpose of this repo is to build AusTraits, a curated database of traits for Australian flora. It contains code and data to build the harmonised AusTraits database outputs. The intended audiences are those who are interested in building AusTraits from scratch, or contributing data to AusTraits.

-

Those interested in simply using data from AusTraits should visit and download the compiled resource from the versioned releases archived on Zenodo at doi: 10.5281/zenodo.3568417.

-

The repo is partway between a compendium and an R package. It is structured like an R package, and contains code that can be installed as a package. This allows us to use some of R’s package management tools:

-
    -
  • use a DESCRIPTION file to document our dependencies
  • -
  • create our documentation using the package pkgdown
  • -
  • run tests on our datasets (using testthat)
  • -
  • manage and build vignettes
  • -
  • use the devtools function to load functions.
  • -
-

It also contains data for rebuilding AusTraits. A key goal for us was to make the process of harmonising different datasets as transparent as possible. Our workflow is, therefore, fully-reproducible and open, meaning it exposes the decisions made in the processing of data into a harmonised and curated dataset (Figure 1); and can also be rerun by others.

-

-
-
-

Ways to contribute -

-

We envision AusTraits as an ongoing collaborative community resource that:

-
    -
  1. Increases our collective understanding of the Australian flora
  2. -
  3. Facilitates the accumulation and sharing of trait data
  4. -
  5. Builds a sense of community among contributors and users
  6. -
  7. Aspires to be fully transparent and reproducible research of the highest standard.
  8. -
-

Below are some of the ways you can contribute.

-

*Please note that the AusTraits project is released with a Contributor Code of Conduct. By contributing to this project you agree to abide by its terms.

-
-

Contributing new data -

-

We gladly accept new data contributions to AusTraits. If you would like to contribute data, the requirements are:

-
    -
  • Data was collected for Australian plant species growing in Australia
  • -
  • You collected data on one of the traits listed in the trait definitions table -
  • -
  • You are willing to release the data under an open license for reuse by the scientific community
  • -
  • You make it is as easy as possible for us to incorporate your data by following the instructions.
  • -
-

If you want to contribute data, please review the instructions here on how to contribute data.

-
-
-

Reporting errors and improving documentation -

-

Data contributors and data users who are less familiar with the AusTraits format and code than the custodians may determine that important descriptions or steps are omitted from this documentation file. We welcome additions and edits that make using the existing data or adding new data easier for the community.

-

If you notice a possible error in AusTraits, please post an issue on GitHub. If you can, please provide code illustrating the problem.

-

If you would like to value-add to AusTraits in some other way, please get in contact with an idea or offer of time.

-
-
-

Improving data quality -

-

A core initiative of AusTraits from 2021-2023 is to refine and better document the trait names, definitions, and values that are the direct link from each contributor’s dataset to the harmonised database. This effort is funded by an Australian Research Data Commons (ARDC) grant through their Australian Data Partnerships program. It includes both a review of definitions by the core AusTraits team and a series of workshops to discuss clusters of related trait definitions.

-

The goal is to link as many trait names as possible to established, published definitions (e.g. in the traits handbook, a review paper on a method or manuscripts regularly cited as the standard for a specific trait). In addition, the list of allowable values for each categorical trait will be reviewed and revised.

-

If you are interested in contributing expertise to the revision of a given trait (or cluster of related traits), please contact us.

-
-
-
-

Compiling AusTraits -

-

In this section, we describe how to build the harmonised dataset. By “compiling” we mean transforming data from all the different studies into a harmonised common format. As described above, and depicted in Figure 1, AusTraits is built so that the database can be rebuilt from its parts at any time. This means that decisions made along the way (in how data is transformed or encoded) can be inspected and modified, and new data can be easily incorporated.

-

The first step to compile AusTraits is to download a copy of the austraits.build repository from Github. Then open the Rstudio project, or open R into the right repo directory.

-
-

Dependencies -

-

To check you have the right packages installed, you can use the devtools package to run:

-
-#install.packages("devtools")  # install devtools if needed
-devtools::install(quick=TRUE)
-
-
-

Source functions -

-

To successfully compile AusTraits you need to load the package

- -

and source some custom functions written explicitly for this database:

-
-source("scripts/custom.R")        # functions used in custom_R_code
-
-
-

Compile via remake -

-

One of the packages that will be installed with the above is remake. This package manages the compiling, and also helps streamline the amount of recompiling needed when new sources are added.

-

Running the following command will rebuild AusTraits and save the assembled database into an RDS file located in export/data/curr/austraits.rds.

-
-remake::make()
-

Remake can also load the compiled dataset directly into R by calling:

-
-austraits <- remake::make("austraits")
-
-
-

Developing AusTraits -

-

For those working with AusTraits code base or data, you may want to read about

- -
-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/austraits_database_structure.html b/docs/articles/austraits_database_structure.html deleted file mode 100644 index 8d4644b9c..000000000 --- a/docs/articles/austraits_database_structure.html +++ /dev/null @@ -1,1500 +0,0 @@ - - - - - - - -Structure of AusTraits data compilation • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - -

This document describes the structure of the AusTraits compilation, corresponding to Version 3.0.2 of the dataset.

-

Note that the information provided below is based on the information provided within the file austraits.build_schema.yml, which can be accessed by running get_schema or system.file("support", "austraits.build_schema.yml", package = "austraits.build").

-

AusTraits is essentially a series of linked components, which cross link against each other::

-
austraits
-├── traits
-├── locations
-├── contexts
-├── methods
-├── excluded_data
-├── taxonomic_updates
-├── taxa
-├── contributors
-├── sources
-├── definitions
-├── schema
-├── metadata
-└── build_info
-

These include all the data and contextual information submitted with each contributed dataset.

-
-

Components -

-

The core components are defined as follows.

-
-

traits -

-

Description: A table containing measurements of traits.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-taxon_name - -Scientific name of the taxon on which traits were sampled, without authorship. When possible, this is the currently accepted (botanical) or valid (zoological) scientific name, but might also be a higher taxonomic level. -
-observation_id - -A unique integral identifier for the observation, where an observation is all measurements made on an individual at a single point in time. It is important for joining traits coming from the same observation_id. Within each dataset, observation_id’s are unique combinations of taxon_name, population_id, individual_id, and temporal_id. -
-trait_name - -Name of the trait sampled. Allowable values specified in the table definitions. -
-value - -The measured value of a trait, location property or context property. -
-unit - -Units of the sampled trait value after aligning with AusTraits standards. -
-entity_type - -A categorical variable specifying the entity corresponding to the trait values recorded. -
-value_type - -A categorical variable describing the statistical nature of the trait value recorded. -
-basis_of_value - -A categorical variable describing how the trait value was obtained. -
-replicates - -Number of replicate measurements that comprise a recorded trait measurement. A numeric value (or range) is ideal and appropriate if the value type is a mean, median, min or max. For these value types, if replication is unknown the entry should be unknown. If the value type is raw_value the replicate value should be 1. If the trait is categorical or the value indicates a measurement for an entire species (or other taxon) replicate value should be .na. -
-basis_of_record - -A categorical variable specifying from which kind of specimen traits were recorded. -
-life_stage - -A field to indicate the life stage or age class of the entity measured. Standard values are adult, sapling, seedling and juvenile. -
-population_id - -A unique integer identifier for a population, where a population is defined as individuals growing in the same location (location_id /location_name) and plot (plot_id, a context category) and being subjected to the same treatment (treatment_id, a context category). -
-individual_id - -A unique integer identifier for an individual, with individuals numbered sequentially within each dataset by taxon by population grouping. Most often each row of data represents an individual, but in some datasets trait data collected on a single individual is presented across multiple rows of data, such as if the same trait is measured using different methods or the same individual is measured repeatedly across time. -
-temporal_id - -A unique integer identifier assigned where repeat observations are made on the same individual (or population, or taxon) across time. The identifier links to specific information in the context table. -
-source_id - -For datasets that are compilations, an identifier for the original data source. -
-location_id - -A unique integer identifier for a location, with locations numbered sequentially within a dataset. The identifier links to specific information in the location table. -
-entity_context_id - -A unique integer identifier indicating specific contextual properties of an individual, possibly including the individual’s sex or caste (for social insects). -
-plot_id - -A unique integer identifier for a plot, where a plot is a distinct collection of organisms within a single geographic location, such as plants growing on different aspects or blocks in an experiment. The identifier links to specific information in the context table. -
-treatment_id - -A unique integer identifier for a treatment, where a treatment is any experimental manipulation to an organism’s growing/living conditions. The identifier links to specific information in the context table. -
-collection_date - -Date sample was taken, in the format yyyy-mm-dd, yyyy-mm or yyyy, depending on the resoluton specified. Alternatively an overall range for the study can be indicating, with the starting and ending sample date sepatated by a /, as in 2010-10/2011-03 -
-measurement_remarks - -Brief comments or notes accompanying the trait measurement. -
-method_id - -A unique integer identifier indicating a trait is measured multiple times on the same entity, with different methods used for each entry. This field is only used if a single trait is measured using multiple methods within the same dataset. The identifier links to specific information in the context table. -
-original_name - -Name given to taxon in the original data supplied by the authors. -
-

Details:

-
-
Entity type -
-

An entity is the feature of interest, indicating what a trait value applies to. While an entity can be just a component of an organism, within the scope of AusTraits, an individual is the finest scale entity that can be documented. The same study might measure some traits at a population-level (entity = population) and others at an individual-level (entity = individual).

-

In detail:

-
    -
  • -entity_type is a categorical variable specifying the entity corresponding to the trait values recorded. Possible values are:
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-individual - -Value comes from a single individual. -
-population - -Value represents a summary statistic from multiple individuals at a single location. -
-metapopulation - -Value represents a summary statistic from individuals of the taxon across multiple locations. -
-species - -Value represents a summary statistic for a species or infraspecific taxon across its range or as estimated by an expert based on their knowledge of the taxon. Data fitting this category include estimates from reference books that represent a taxon’s entire range and values for categorical variables obtained from a reference book or identified by an expert. -
-genus - -Value represents a summary statistic or expert score for an entire genus. -
-family - -Value represents a summary statistic or expert score for an entire family. -
-order - -Value represents a summary statistic or expert score for an entire order. -
-
-
-
Identifiers -
-

The traits table includes 12 identifiers, dataset_id, observation_id, taxon_name, population_id, individual_id, temporal_id, source_id, location_id, entity_context_id, plot_id, treatment_id, and method_id.

-

dataset_id, source_id and taxon_name have easy-to-interpret values. The others are simply integral identifiers that link groups of measurements and are automatically generated through the AusTraits workflow (individual_id can be assigned in the metadata file or automatically generated.)

-

To expand on the definitions provided above,

-
    -
  • observation_id links measurements made on the same entity (individual, population, or species) at a single point in time.

  • -
  • population_id indicates entites that share a common location_id, plot_id, and treatment_id. It is used to align measurements and observation_id’s for individuals versus populations (i.e. distinct entity_types) that share a common population_id. It is numbered sequentially within a dataset.

  • -
  • individual_id indicates a unique organisms. It is numbered sequentially within a dataset by population. Multiple observations on the same organism across time (with distinct observation_id values), share a common individual_id.

  • -
  • temporal_id indicates a distinct point in time and is used only if there are repeat measurements on a population or individual across time. The identifier links to context properties (& their associated information) in the contexts table for context properties of type temporal.

  • -
  • source_id is applied if not all data within a single dataset (dataset_id) is from the same source, such as when a dataset represents a compilation for a meta-analysis.

  • -
  • location_id links to a distinct location_name and associated location_properties in the location table.

  • -
  • entity_context_id links to information in the contexts table for context properties (& associated values/descriptions) with category entity_context. Entity_contexts include organism sex, organism caste and any other features of an entity that needs to be documented.

  • -
  • plot_id links to information in the contexts table for context properties (& associated values/descriptions) with category plot. Plot contexts include both blocks/plots within an experimental design as well as any stratified variation within a location that needs to be documented (e.g. slope position).

  • -
  • treatment_idlinks to information in the contexts table for context properties (& associated values/descriptions) with category treatment. Treatment contexts are experimental manipulations applied to groups of individuals.

  • -
  • method_idlinks to information in the contexts table for context properties (& associated values/descriptions) with category method. A method context indicates that the same trait was measured on or across individuals using different methods.

  • -
-

As well, measurement_remarks is used to document brief comments or notes accompanying the trait measurement.

-
-
-
Life stage, basis of record -
-
    -
  • life_stage is a field to indicate the life stage or age class of the entity measured. standard values are adult, sapling, seedling and juvenile..

  • -
  • basis_of_record is a categorical variable specifying from which kind of specimen traits were recorded. Possible values are:

  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-field - -Traits were recorded on entities living naturally in the field. -
-field_experiment - -Traits were recorded on entities living under experimentally manipulated conditions in the field. -
-captive_cultivated - -Traits were recorded on entities living in a common garden, arboretum, or botanical or zoological garden. -
-lab - -Traits were recorded on entities growing in a lab, glasshouse or growth chamber. -
-preserved_specimen - -Traits were recorded from specimens preserved in a collection, eg. herbarium or museum -
-literature - -Traits were sourced from values reported in the literature, and where the basis of record is not otherwise known. -
-
-
-
Values, Value types, basis of value -
-

Each record in the table of trait data has an associated value, value_type, and basis_of_value.

-

Value type: A trait’s value_type is either numeric or categorical. - For traits with numerical values, the recorded value has been converted into standardised units and the AusTraits workflow has confirmed the value can be converted into a number and lies within the allowable range. - For categorical variables, records have been aligned through substitutions to values listed as allowable values (terms) in a trait’s definition. * we use _ for multi-word terms, e.g. semi_deciduous
-* we use a space for situations where two values co-occur for the same entity. For instance, a flora might indicate that a plant species can be either annual or biennial, in which case the trait is scored as annual biennial.

-

Each trait measurement has an associated value_type, which is a categorical variable describing the statistical nature of the trait value recorded. Possible values are:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-raw - -Value recorded for an entity. -
-minimum - -Value is the minimum of values recorded for an entity. -
-mean - -Value is the median of values recorded for an entity. -
-median - -Value is the median of values recorded for an entity. -
-maximum - -Value is the maximum of values recorded for an entity. -
-mode - -Value is the mode of values recorded for an entity. This is the appropriate value type for a categorical trait value. -
-range - -Value is a range of values recorded for an entity. -
-bin - -Value for an entity falls within specified limits. -
-unknown - -Not currently known. -
-

Each trait measurement also has an associated basis_of_value, which is a categorical variable describing how the trait value was obtained. Possible values are:

- - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-measurement - -Value is the result of a measurement(s) made on a specimen(s). -
-expert_score - -Value has been estimated by an expert based on their knowledge of the entity. -
-model_derived - -Value is derived from a statistical model, for example via gap-filling. -
-unknown - -Not currently known. -
-

AusTraits does not include intra-individual observations made at a single point in time. When multiple measurements per individual are submitted to AusTraits, we take the mean of the values and record the value_type as mean and indicate under replicates the number of measurements made.

-
-
-
-

locations -

-

Description: A table containing observations of location/site characteristics associated with information in traits. Cross referencing between the two dataframes is possible using combinations of the variables dataset_id, location_name.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-location_id - -A unique integer identifier for a location, with locations numbered sequentially within a dataset. The identifier links to specific information in the location table. -
-location_name - -location name -
-location_property - -The location characteristic being recorded. The name should include units of measurement, e.g. MAT (C). Ideally we have at least the following variables for each location, longitude (deg), latitude (deg), description. -
-value - -The measured value of a location property. -
-
-
-

contexts -

-

Description: A table containing observations of contextual characteristics associated with information in traits. Cross referencing between the two dataframes is possible using combinations of the variables dataset_id, link_id, and link_vals.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-context_property - -The contextual characteristic being recorded. If applicable, name should include units of measurement, e.g. CO2 concentration (ppm). -
-category - -The category of context property, with options being plot, treatment, individual_context, temporal and method. -
-value - -The measured value of a context property. -
-description - -Description of a specific context property value. -
-link_id - -Variable indicating which identifier column in the traits table contains the specified link_vals. -
-link_vals - -Unique integer identifiers that link between identifier columns in the traits table and the contextual properties/values in the contexts table. -
-
-
-

methods -

-

Description: A table containing details on methods with which data were collected, including time frame and source. Cross referencing with the traits table is possible using combinations of the variables dataset_id, trait_name.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-trait_name - -Name of the trait sampled. Allowable values specified in the table definitions. -
-methods - -A textual description of the methods used to collect the trait data. Whenever available, methods are taken near-verbatim from the referenced source. Methods can include descriptions such as ‘measured on botanical collections’, ‘data from the literature’, or a detailed description of the field or lab methods used to collect the data. -
-description - -A 1-2 sentence description of the purpose of the study. -
-sampling_strategy - -A written description of how study locations were selected and how study individuals were selected. When available, this information is lifted verbatim from a published manuscript. For preserved specimens, this field ideally indicates which records were ‘sampled’ to measure a specific trait. -
-source_primary_key - -Citation key for the primary source in sources. The key is typically formatted as Surname_year. -
-source_primary_citation - -Citation for the primary source. This detail is generated from the primary source in the metadata. -
-source_secondary_key - -Citation key for the secondary source in sources. The key is typically formatted as Surname_year. -
-source_secondary_citation - -Citations for the secondary source. This detail is generated from the secondary source in the metadata. -
-source_original_dataset_key - -Citation key for the original dataset_id in sources; for compilations. The key is typically formatted as Surname_year. -
-source_original_dataset_citation - -Citations for the original dataset_id in sources; for compilationse. This detail is generated from the original source in the metadata. -
-data_collectors - -The person (people) leading data collection for this study. -
-assistants - -Names of additional people who played a more minor role in data collection for the study. -
-austraits_curators - -Names of AusTraits team member(s) who contacted the data collectors and added the study to the AusTraits repository. -
-
-
-

exluded_data -

-

Description: A table of data that did not pass quality tests and so were excluded from the master dataset. The structure is identical to that presented in the traits table, only with an extra column called error indicating why the record was excluded. Common reasons are missing_unit_conversions, missing_value, and unsupported_trait_value.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-error - -Indicating why the record was excluded. Common reasons are missing_unit_conversions, missing_value, and unsupported_trait_value. -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-taxon_name - -Scientific name of the taxon on which traits were sampled, without authorship. When possible, this is the currently accepted (botanical) or valid (zoological) scientific name, but might also be a higher taxonomic level. -
-observation_id - -A unique integral identifier for the observation, where an observation is all measurements made on an individual at a single point in time. It is important for joining traits coming from the same observation_id. Within each dataset, observation_id’s are unique combinations of taxon_name, population_id, individual_id, and temporal_id. -
-trait_name - -Name of the trait sampled. Allowable values specified in the table definitions. -
-value - -The measured value of a trait. -
-unit - -Units of the sampled trait value after aligning with AusTraits standards. -
-entity_type - -A categorical variable specifying the entity corresponding to the trait values recorded. -
-value_type - -A categorical variable describing the statistical nature of the trait value recorded. -
-basis_of_value - -A categorical variable describing how the trait value was obtained. -
-replicates - -Number of replicate measurements that comprise a recorded trait measurement. A numeric value (or range) is ideal and appropriate if the value type is a mean, median, min or max. For these value types, if replication is unknown the entry should be unknown. If the value type is raw_value the replicate value should be 1. If the trait is categorical or the value indicates a measurement for an entire species (or other taxon) replicate value should be .na. -
-basis_of_record - -A categorical variable specifying from which kind of specimen traits were recorded. -
-life_stage - -A field to indicate the life stage or age class of the entity measured. Standard values are adult, sapling, seedling and juvenile. -
-population_id - -A unique integer identifier for a population, where a population is defined as individuals growing in the same location (location_id /location_name) and plot (plot_id, a context category) and being subjected to the same treatment (treatment_id, a context category). -
-individual_id - -A unique integer identifier for an individual, with individuals numbered sequentially within each dataset by taxon by population grouping. Most often each row of data represents an individual, but in some datasets trait data collected on a single individual is presented across multiple rows of data, such as if the same trait is measured using different methods or the same individual is measured repeatedly across time. -
-temporal_id - -A unique integer identifier assigned where repeat observations are made on the same individual (or population, or taxon) across time. The identifier links to specific information in the context table. -
-source_id - -For datasets that are compilations, an identifier for the original data source. -
-location_id - -A unique integer identifier for a location, with locations numbered sequentially within a dataset. The identifier links to specific information in the location table. -
-entity_context_id - -A unique integer identifier indicating specific contextual properties of an individual, possibly including the individual’s sex or caste (for social insects). -
-plot_id - -A unique integer identifier for a plot, where a plot is a distinct collection of organisms within a single geographic location, such as plants growing on different aspects or blocks in an experiment. The identifier links to specific information in the context table. -
-treatment_id - -A unique integer identifier for a treatment, where a treatment is any experimental manipulation to an organism’s growing/living conditions. The identifier links to specific information in the context table. -
-collection_date - -Date sample was taken, in the format yyyy-mm-dd, yyyy-mm or yyyy, depending on the resoluton specified. Alternatively an overall range for the study can be indicating, with the starting and ending sample date sepatated by a /, as in 2010-10/2011-03 -
-measurement_remarks - -Brief comments or notes accompanying the trait measurement. -
-method_id - -A unique integer identifier indicating a trait is measured multiple times on the same entity, with different methods used for each entry. This field is only used if a single trait is measured using multiple methods within the same dataset. The identifier links to specific information in the context table. -
-original_name - -Name given to taxon in the original data supplied by the authors. -
-
-
-

taxa -

-

Description: A table containing details on taxa that are included in the table traits. We have attempted to align species names with known taxonomic units in the Australian Plant Census (APC) and/or the Australian Plant Names Index (APNI); the sourced information is released under a CC-BY3 license.

-

Version 0.9.0 of AusTraits contains records for 1255 different taxa.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-taxon_name - -Scientific name of the taxon on which traits were sampled, without authorship. When possible, this is the currently accepted (botanical) or valid (zoological) scientific name, but might also be a higher taxonomic level. -
-taxonomic_reference - -Name of the taxonomy (tree) that contains this concept. ie. APC, AusMoss etc. -
-taxon_rank - -The taxonomic rank of the most specific name in the scientific name. -
-trinomial - -The infraspecific taxon name match for an original name. This column is assigned na for taxon name that are at a broader taxonomic_resolution. -
-binomial - -The species-level taxon name match for an original name. This column is assigned na for taxon name that are at a broader taxonomic_resolution. -
-genus - -Genus of the taxon without authorship. -
-family - -Family of the taxon. -
-taxon_distribution - -Known distribution of the taxon, by Australian state. -
-establishment_means - -Statement about whether an organism or organisms have been introduced to a given place and time through the direct or indirect activity of modern humans. -
-taxonomic_status - -The status of the use of the scientificName as a label for the taxon in regard to the ‘accepted (or valid) taxonomy’. The assigned taxonomic status must be linked to a specific taxonomic reference that defines the concept. -
-scientific_name - -The full scientific name, with authorship and date information if known. -
-scientific_name_authorship - -The authorship information for the scientific name formatted according to the conventions of the applicable. -
-taxon_id - -An identifier for the set of taxon information (data associated with the taxon class). May be a global unique identifier or an identifier specific to the data set. Must be resolvable within this dataset. -
-scientific_name_id - -An identifier for the set of taxon information (data associated with the taxon class). May be a global unique identifier or an identifier specific to the data set. Must be resolvable within this dataset. -
-
-
-

taxonomic_updates -

-

Description: A table of all taxonomic changes implemented in the construction of AusTraits. Changes are determined by comparing the originally submitted taxon name against the taxonomic names listed in the taxonomic reference files, best placed in a subfolder in the config folder . Cross referencing with the traits table is possible using combinations of the variables dataset_id and taxon_name.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-original_name - -Name given to taxon in the original data supplied by the authors. -
-cleaned_name - -The taxon name without authorship after implementing automated syntax standardisation and spelling changes as well as manually encoded syntax alignments for this taxon in the metadata file for the corresponding dataset_id. This name has not yet been matched to the currently accepted (botanical) or valid (zoological) taxon name in cases where there are taxonomic synonyms, isonyms, orthographic variants, etc. -
-taxonomic_resolution - -The rank of the most specific taxon name (or scientific name) to which a submitted orignal name resolves. -
-cleaned_scientific_name_id - -An identifier for the cleaned name before it is updated to the currently accepted name usage. This may be a global unique identifier or an identifier specific to the data set. Must be resolvable within this dataset. -
-cleaned_name_taxonomic_status - -The status of the use of the cleaned_name as a label for a taxon. Requires taxonomic opinion to define the scope of a taxon. Rules of priority then are used to define the taxonomic status of the nomenclature contained in that scope, combined with the experts opinion. It must be linked to a specific taxonomic reference that defines the concept. -
-cleaned_name_alternative_taxonomic_status - -The taxonomic status of alternative taxonomic records with cleaned_name as the accepted (botanical) or valid (zoological) taxon name. -
-taxon_id - -An identifier for the set of taxon information (data associated with the taxon class). May be a global unique identifier or an identifier specific to the data set. Must be resolvable within this dataset. -
-taxon_name - -Scientific name of the taxon on which traits were sampled, without authorship. When possible, this is the currently accepted (botanical) or valid (zoological) scientific name, but might also be a higher taxonomic level. -
-

Both the original and the updated taxon names are included in the traits table.

-
-
-

definitions -

-

Description: A copy of the definitions for all tables and terms. Information included here was used to process data and generate any documentation for the study.

-

Details on trait definitions: The allowable trait names and trait values are defined in the definitions file. Each trait is labelled as either numeric or categorical. An example of each type is as follows. For the full list, see the Trait definitions vignette.

-

leaf_mass_per_area

-
    -
  • number of records: 0
  • -
  • number of studies: 0
  • -
-

woodiness

-
    -
  • number of records: 0
  • -
  • number of studies: 0
  • -
-
-
-

contributors -

-

Description: A table of people contributing to each study.

-

Content:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-dataset_id - -Primary identifier for each study contributed to AusTraits; most often these are scientific papers, books, or online resources. By default this should be the name of the first author and year of publication, e.g. Falster_2005. -
-last_name - -Last name of the data collector. -
-given_name - -Given names of the data collector. -
-ORCID - -ORCID of the data collector. -
-affiliation - -Last known institution or affiliation. -
-additional_role - -Additional roles of data collector, mostly contact person. -
-
-
-

sources -

-

For each dataset in the compilation there is the option to list primary and secondary citations. The primary citation is defined as, The secondary citation is defined as,

-

The element sources includes bibtex versions of all sources which can be imported into your reference library:

-
RefManageR::WriteBib(austraits$sources, "refs.bib") # write all sources to file
-RefManageR::WriteBib(austraits$sources["Falster_2005_1"], "refs.bib") # write a single reference to a file
-

Or individually viewed:

-
austraits$sources["Falster_2005_1"]
-

A formatted version of the sources also exists within the table methods.

-
-
-

metadata -

-

Description: Metadata associated with the dataset, including title, creators, license, subject, funding sources.

-
-
-

build_info -

-

Description: A description of the computing environment used to create this version of the dataset, including version number, git commit and R session_info.

-
-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/austraits_file_structure.html b/docs/articles/austraits_file_structure.html deleted file mode 100644 index fcd78b469..000000000 --- a/docs/articles/austraits_file_structure.html +++ /dev/null @@ -1,1095 +0,0 @@ - - - - - - - -AusTraits repo file structure • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
-
- - - - -
-

File structure -

-

The main directory for the austraits.build repository contains the following files and folders, with purpose as indicated.

-
-
R project file -
-
├── austraits.build.Rproj     # Rstudio project
-
-
-
Files for maintaining a repo on github -
-
├── README.md         # landing page
-├── .github           # folder containing github actions, issue templates, code of conduct
-├── LICENCE
-├── NEWS.md
-├── _pkgdown.yml      # used to create packagedown website
-├── docs              # contains website
-├── Dockerfile        # creates an image of R environment used in build
-
-
-
Files used for creation of R package austraits.build -
-
├── NAMESPACE             # functions being exported
-├── DESCRIPTION           # R package description
-├── inst/support          # defines the overall austraits schema
-├── man                   # autogenerated help files for R package
-├── R                     # folder with functions and scripts to build AusTraits
-├── tests                 # defines tests applied to datasets
-├── vignettes             # documentation of repo file structure, AusTraits database structure, definitions, data input processes
-
-
-
Files used for data compilation -
-
├── remake.yml            # instructions for build
-├── config                # configuration and definition files
-├── data                  # raw data files
-├── export                # folder for output
-└── scripts               # scripts for processing files before/after building austraits, including compiling reports
-
-
-
-

Details on files used for data compilation: -

-
-
-

Configuration -

-

The folder config contains three files which govern the building of the dataset.

-
config
-├── traits.yml
-├── taxon_list.csv
-└── unit_conversions.csv
-

The file traits.yml provides the trait definitions used to compile AusTraits, including allowable trait values. The trait definitions are fully described in an additional vignette. A .yml file is a structured data file where information is presented in a hierarchical format (see appendix for details).

-

The file taxon_list.csv is our master list of known taxa. Each species is listed once, with links to species’ identifiers provided by the Australian Plant Name Index (APNI). The file taxon_list.csv is added to if a study includes taxa not previously represented in AusTraits. These can be names included in either the APC/APNI, compilations of taxonomic concepts (APC) or names (APNI) for plants that are either native to or naturalised in Australia, or taxa without recognised names.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-taxon_name - -family - -scientific_name_authorship - -taxonomic_reference - -cleaned_name_taxonomic_status - -cleaned_scientific_name_id -
-Abelia x grandiflora - -Caprifoliaceae - -(Rovelli ex André) Rehder - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/190758 -
-Abelmoschus ficulneus - -Malvaceae - -(L.) Wight - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/55929 -
-Abelmoschus manihot - -Malvaceae - -(L.) Medik. - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/55937 -
-Abelmoschus manihot subsp. manihot - -Malvaceae - -NA - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/116920 -
-Abelmoschus manihot subsp. tetraphyllus - -Malvaceae - -(Roxb. ex Hornem.) Borss.Waalk. - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/55945 -
-Abelmoschus moschatus - -Malvaceae - -Medik. - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/55953 -
-Abelmoschus moschatus subsp. biakensis - -Malvaceae - -(Hochr.) Borss.Waalk. - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/116595 -
-Abelmoschus moschatus subsp. moschatus - -Malvaceae - -NA - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/243806 -
-Abelmoschus moschatus subsp. tuberosus - -Malvaceae - -(Span.) Borss.Waalk. - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/55961 -
-Abildgaardia ovata - -Cyperaceae - -(Burm.f.) Kral - -APC - -accepted - -https://id.biodiversity.org.au/name/apni/150737 -
-

The file unit_conversions.csv defines the unit conversions that are used when converting contributed trait data to common units, e.g.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-unit_from - -unit_to - -function -
-% - -mg/g - -x*10 -
-% - -g/g - -x*0.01 -
-% - -mg/mg - -x*0.01 -
-% - -mg/kg - -x*10000 -
-% - -{dimensionless} - -x*.01 -
-% - -{count}/{count} - -x*.01 -
-{dimensionless} - -{count}/{count} - -x*1 -
-a - -mo - -x*12 -
-{count}/m2 - -{count}/mm2 - -x*1/1000000 -
-cm - -m - -x*0.01 -
-
-
-

Data -

-

The folder data contains the raw data from individual studies included in AusTraits.

-

Records within the data folder are organised as coming from a particular study, defined by the dataset_id. Data from each study are organised into a separate folder, with two files:

-
    -
  • -data.csv: a table containing the actual trait data.
  • -
  • -metadata.yml: a file that contains study metadata (source, methods, locations, and context), maps trait names and units onto standard types, and lists any substitutions applied to the data in processing.
  • -
-

The folder data thus contains a long list of folders, one for each study and each containing two files:

-
data
-├── Angevin_2010
-│   ├── data.csv
-│   └── metadata.yml
-├── Barlow_1981
-│   ├── data.csv
-│   └── metadata.yml
-├── Bean_1997
-│   ├── data.csv
-│   └── metadata.yml
-├── ....
-
-

where Angevin_2010, Barlow_1981, & Bean_1997 are each a unique dataset_id in the final dataset.

-
-

Data.csv -

-

The file data.csv contains raw measurements and can be in either long or wide format.

-

Required columns include the taxon name, the trait name (column in long format, header in wide format), units (column in long format, part of header in wide format), location (if applicable), context (if applicable), date (if available), and trait values.

-

It is important that all trait measurements made on the same individual or that are the mean of a species’ measurements from the same location are kept linked.

-
    -
  • If the data is in wide format, each row should include measurements made on a single individual at a single point in time or a single species-by-location mean, with different trait values as consecutive columns.

  • -
  • If the data is in long format, an additional column, individual_id, is required to ensure multiple trait measurements made on the same individual, or the mean of a species’ measurements from the same location, are linked. If the data is in wide format and there are multiple rows of data for the same individual, an individual_id column should be included. These individual_id columns ensure that related data values remain linked.

  • -
-

We aim to keep the data file in the rawest form possible (i.e. with as few changes as possible) but it must be a single csv file. Additional custom R code may be required to make the file exactly compatible with the AusTraits format, but these changes should be executed as AusTraits is compiled and should be in the metadata.yml file under dataset/custom_R_code (see below). Any files used to create the submitted data.csv file (e.g. Excel …) should be archived in a sub-folder within the study folder named raw.

-
-
-

Metadata.yml -

-

The metadata is compiled in a .yml file, a structured data file where information is presented in a hierarchical format (see Appendix for details). There are 10 values at the top hierarchical level: source, contributors, dataset, locations, contexts, traits, substitutions, taxonomic_updates, exclude_observations, questions. These are each described below.

-

As a start, you may want to check out some examples from existing studies in Austraits, e.g. Angevin_2010 or Wright_2009.

-
-
Source -
-

This section provides citation details for the original source(s) for the data, whether it is a published journal article, book, website, or thesis. In general we aim to reference the primary source. References are written in structured yml format, under the category source and then under sub-groupings primary, secondary, and original. A reference is designated as secondary if it is a second publication by the data collector that analyses the data. When the primary reference is a compilation of multiple sources for a meta-analysis, the original references are designated as original.

-

General guidelines for describing a source include:

-
    -
  • A maximum of one primary source allowed.
  • -
  • Elements are names as in bibtex format.
  • -
  • Keys should be named in the format Surname_year and the primary source is almost always identical to the name given to the dataset folder. A second instance of the identical Surname_year should have the key Surname_year_2.
  • -
  • One or more secondary source may be included if traits from a single dataset were presented in two different manuscripts. Multiple sources are also appropriate if an author has compiled data from a number of sources, which are not individually in AusTraits, for a published or unpublished compilation.
  • -
  • If your data is from an unpublished study, only include the elements that are applicable.
  • -
  • If someone has transcribed a published source, the primary source will be the published work and the person who has completed the transcription will be acknowledged as the contributor of the dataset.
  • -
-

An example of a primary source that is a journal article is:

-
source:
-  primary:
-    key: Falster_2005_1
-    bibtype: Article
-    author: Daniel S. Falster, Mark Westoby
-    year: 2005
-    title: Alternative height strategies among 45 dicot rain forest species from tropical Queensland, Australia
-    journal: Journal of Ecology
-    volume: 93
-    pages: 521--535
-    publisher: Wiley-Blackwell
-    doi: 10.1111/j.0022-0477.2005.00992.x
-

If a secondary source is included it may look like:

-
  primary:
-    key: Choat_2006
-    bibtype: Article
-    year: '2006'
-    author: B. Choat and M. C. Ball and J. G. Luly and C. F. Donnelly and J. A. M.
-      Holtum
-    journal: Tree Physiology
-    title: Seasonal patterns of leaf gas exchange and water relations in dry rain
-      forest trees of contrasting leaf phenology
-    volume: '26'
-    number: '5'
-    pages: 657--664
-    doi: 10.1093/treephys/26.5.657
-  secondary:
-    key: Choat_2005
-    bibtype: Article
-    year: '2005'
-    author: Brendan Choat and Marilyn C. Ball and Jon G. Luly and Joseph A. M. Holtum
-    journal: Trees
-    title: Hydraulic architecture of deciduous and evergreen dry rainforest tree species
-      from north-eastern Australia
-    volume: '19'
-    number: '3'
-    pages: 305--311
-    doi: 10.1007/s00468-004-0392-1
-
-
-
Contributors -
-

This section provides a list of contributors to the study, their respective affiliations, roles in the study, and orcids. The following information is recorded for each data contributor:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-key - -value -
-last_name - -Last name of data collector. -
-given_name - -Given name of data collector. -
-affiliation - -Affiliation of data collector. -
-ORCID - -ORCID ID (Open Researcher and Contributor ID) for the data collector, if available. -
-notes - -optional notes for the data collector. -
-additional_role - -Any additional roles the data collector had in the study, a field most frequently used to identify which data contributor is the contact person for the dataset. -
-

An example is as follows:

-
 data_collectors:
-  - last_name: Falster
-    given_name: Daniel
-    ORCID: 0000-0002-9814-092X
-    affiliation: Evolution & Ecology Research Centre, School of Biological, Earth,
-      and Environmental Sciences, UNSW Sydney, Australia
-    additional_role: contact
-  - last_name: Westoby
-    given_name: Mark
-    ORCID: 0000-0001-7690-4530
-    affiliation: Department of Biological Sciences, Macquarie University, Australia
-

Note that only the AusTraits custodians have the contributors’ e-mail addresses on file. This information will not be directly available to AusTraits users or new contributors via Github.

-

Additional fields within contributors are:

-
    -
  • -Assistants, names of additional people who played a more minor role in data collection for the study.
  • -
  • -AusTraits_curators, names of austraits team member(s) who contacted the data collectors and added the study to the austraits repository.
  • -
-
-
-
Dataset -
-

This section includes study details, including format of the data, custom r code applied to data, and various descriptors. the value entered for each element can be either a header for a column within the data.csv file or the actual value to be used.

-

The following elements are included under the element dataset:

-
    -
  • -data_is_long_format: Indicates if the data spreadsheet has a vertical (long) or horizontal (wide) configuration with yes or no terminology.
  • -
  • -custom_R_code: A field where additional R code can be included. This allows for custom manipulation of the data in the submitted spreadsheet into a different format for easy integration with AusTraits. .na indicates no custom R code was used.
  • -
  • -collection_date: Date sample was taken, in the format yyyy-mm-dd, yyyy-mm or yyyy, depending on the resoluton specified. Alternatively an overall range for the study can be indicating, with the starting and ending sample date sepatated by a /, as in 2010-10/2011-03
  • -
  • -taxon_name: Scientific name of the taxon on which traits were sampled, without authorship. When possible, this is the currently accepted (botanical) or valid (zoological) scientific name, but might also be a higher taxonomic level.
  • -
  • -location_name: location name
  • -
  • -source_id: For datasets that are compilations, an identifier for the original data source.
  • -
  • -individual_id: A unique integer identifier for an individual, with individuals numbered sequentially within each dataset by taxon by population grouping. Most often each row of data represents an individual, but in some datasets trait data collected on a single individual is presented across multiple rows of data, such as if the same trait is measured using different methods or the same individual is measured repeatedly across time.
  • -
  • -trait_name: Element required for long datasets to specify the column indicating the trait name associated with each row of data.
  • -
  • -value: The measured value of a trait.
  • -
  • -description: A 1-2 sentence description of the purpose of the study.
  • -
  • -basis_of_record: A categorical variable specifying from which kind of specimen traits were recorded.
  • -
  • -life_stage: A field to indicate the life stage or age class of the entity measured. Standard values are adult, sapling, seedling and juvenile.
  • -
  • -sampling_strategy: A written description of how study locations were selected and how study individuals were selected. When available, this information is lifted verbatim from a published manuscript. For preserved specimens, this field ideally indicates which records were ‘sampled’ to measure a specific trait.
  • -
  • -measurement_remarks: Brief comments or notes accompanying the trait measurement.
  • -
  • -original_file: The name of the file initially submitted to AusTraits.
  • -
  • -notes: Generic notes about the study and processing of data.
  • -
-

Of these, the fields collection_date, life_stage, basis_of_record, and measurement_remarks can all be specified at the dataset level or the traits level (which overrides a dataset-level entry) or location level (which also overrides a dataset-level entry). In each case, they can be a fixed text value or indicate a column within the data.csv file (or generated through custom_R_code) that includes the relevant information.

-
    -
  • life_stage, basis_of_record, and collection_date are usually included under metadata$dataset unless they vary by trait.

  • -
  • entity_type, replicates, basis_of_value, and value_type are usually different across traits and are usually mapped under the metadata$traits section (see below), but are allowed to be specified for the entire dataset in this section.

  • -
  • traits and value are only specified in metadata$dataset for long-format datasets.

  • -
  • measurement_remarks and individual_id are only included if required. They are absent from the majority of datasets.

  • -
-

An example is as follows:

-
  data_is_long_format: no
-  custom_R_code: '
-    data %>% 
-      mutate(
-        location_name = "Howard River catchment",
-        date = date %>% mdy()
-      ) %>% 
-      arrange(date) %>%
-      group_by(Tree) %>%
-        mutate(observation_number = dplyr::row_number()) %>%
-      ungroup() %>% 
-      group_by(species) %>% 
-        mutate(across(c("specific leaf area (m2 kg-1)"), replace_duplicates_with_NA)) %>% 
-      ungroup()
-  '
-  collection_date: date
-  taxon_name: species
-  context_name: context
-  location_name: location_name
-  individual_id: Tree
-  description: Measurements of stem CO2 efflux and leaf gas exchange in a tropical
-    savanna ecosystem in northern Australia, and assessed the impact of fire on these
-    processes.
-  basis_of_record: field
-  life_stage: adult
-  sampling_strategy: The stem CO2 efflux was initially measured at two locations,
-    each of which was nested within a 3 km 2 plot...
-  original_file: leaf_summary.xls, Rbranch summary2.xls, and Rstem summary6.xls submitted
-    by Lucas Cernusak and archived in the raw data folder and GoogleDrive folder.
-  notes: none
-

A common use of the custom_R_code is to automate the conversion of a verbal description of flowering or fruiting periods into the supported trait values. It might also be used if values for a single trait are expressed across multiple columns and need to be merged. See Catford_2014 as an example of this. The adding data vignette provides additional examples of code regularly implemented in custom_R_code, including functions specifically that were developed for AusTraits data manipulations and are in the file scripts\custom.R.

-
-
-
locations -
-

This section provides a list of study locations (sites) and information about each of the study locations where data were collected. Each should include at least three variables - latitude (deg), longitude (deg) and description. Additional variables can be included where available. Set to .na for botanical collections and field studies where data values are a mean across many locations.

-

Although the properties listed under each location are not part of a controlled vocabulary, it is best practice to align with in-use properties whenever possible. These can be identified by running austraits$locations %>% distinct(location_property).

-

An example of how a location and its properties, and the value of each property are listed (modified from Vesk_2019), is:

-
  Round Hill-Nombinnie Nature Reserve:
-    latitude (deg): -32.965
-    longitude (deg): 146.161
-    precipitation, MAP (mm): 370
-    temperature, summer mean (C): 32.5
-    temperature, winter mean (C): 14.2
-    soil type: loamy red sands light red clays and light red browns earths
-    description: predominantly open Callitris glaucophylla - Eucalyptus populnea woodland
-      and Eucalyptus dumosa - E. socialis shrub mallee woodland
-    fire frequency (years): 5-20 years
-
-
-
Contexts -
-

This section provides contextual characteristics associated with information in traits.

-

Within the context section is a list of contextual properties, each encapsulating information read in through a different column or created through custom_R_code or as elements within specific traits (see below).

-
    -
  • -context_property: The context property represented by the data in the column specified by var_in.
  • -
  • -category: The category of contextual data. Options are plot (a distinct collection of organisms within a single geographic location, such as plants growing on different aspects or blocks in an experiment), treatment (an experimental treatment), entity_context (contextual information to record about the entity the isn’t documented elsewhere, including the entity’s sex, caste), temporal (indicating when repeat observations are made on the same individual (or population, or taxon) across time) and method (indicating the same trait was measured on the same individual (or population, or taxon) using multiple methods).
  • -
  • -var_in: Name of column with contextual data in the original data submitted.
  • -
  • -find: The contextual values in the original data submitted (optional)
  • -
  • -value: The standardised contextual values, aligning syntax and wording with other studies.
  • -
  • -description: A description of the contextual values.
  • -
-

If the contextual values read in are appropriate and no substitutions are required, the field find can be omitted, with the values from the data.csv column entered under the field value. The field description can likewise be omitted if it is redundant; for instance, if the values are simply sequential observation numbers, times of day, or taxon names (e.g. insect host plants).

-

As with location, the context properties are not part of a controlled vocabulary, but it is best practice to align syntax with in-use properties whenever possible. These can be identified by running austraits$contexts %>% distinct(context_property).

-

An example of how the contexts for a study are formatted (modified from Crous_2013), is:

-
contexts:
-- context_property: sampling season
-  category: temporal_context
-  var_in: month
-  values:
-  - find: AUG
-    value: August
-    description: August (late winter)
-  - find: DEC
-    value: December
-    description: December (early summer)
-  - find: FEB
-    value: February
-    description: February (late summer)
-- context_property: temperature treatment
-  category: treatment_context
-  var_in: Temp-trt
-  values:
-  - value: ambient
-    description: Plants grown at ambient temperatures; Jan average max = 29.4 dec
-      C / July average min = 3.2 dec C.
-  - value: elevated
-    description: Plants grown 3 deg C above ambient temperatures.
-- context_property: CO2 treatment
-  category: treatment_context
-  var_in: CO2_Treat
-  values:
-  - find: ambient CO2
-    value: 400 ppm
-    description: Plants grown at ambient CO2 (400 ppm).
-  - find: added CO2
-    value: 640 ppm
-    description: Plants grown at elevated CO2 (640 ppm); 240 ppm above ambient.
-- context_property: measurement temperature
-  category: method
-  var_in: method_context
-  values:
-  - find: Measurement made at 20°C
-    value: 20°C
-    description: Measurement made at 20°C
-  - find: Measurement made at 25°C
-    value: 25°C
-    description: Measurement made at 25°C
-
-
-
Traits -
-

This section provides a translation table, mapping traits and units from a contributed study onto corresponding variables in AusTraits. The methods used to collect the data are also specified here.

-

For each trait submitted to AusTraits, there is the following information:

-
    -
  • -var_in: Name of trait in the original data submitted.
  • -
  • -unit_in: Units of trait in the original data submitted.
  • -
  • -trait_name: Name of the trait sampled. Allowable values specified in the table definitions.
  • -
  • -entity_type: A categorical variable specifying the entity corresponding to the trait values recorded.
  • -
  • -value_type: A categorical variable describing the statistical nature of the trait value recorded.
  • -
  • -basis_of_record: A categorical variable specifying from which kind of specimen traits were recorded.
  • -
  • -basis_of_value: A categorical variable describing how the trait value was obtained.
  • -
  • -replicates: Number of replicate measurements that comprise a recorded trait measurement. A numeric value (or range) is ideal and appropriate if the value type is a mean, median, min or max. For these value types, if replication is unknown the entry should be unknown. If the value type is raw_value the replicate value should be 1. If the trait is categorical or the value indicates a measurement for an entire species (or other taxon) replicate value should be .na.
  • -
  • -measurement_remarks: Brief comments or notes accompanying the trait measurement.
  • -
  • -methods: A textual description of the methods used to collect the trait data. Whenever available, methods are taken near-verbatim from the referenced source. Methods can include descriptions such as ‘measured on botanical collections’, ‘data from the literature’, or a detailed description of the field or lab methods used to collect the data.
  • -
  • -life_stage: A field to indicate the life stage or age class of the entity measured. Standard values are adult, sapling, seedling and juvenile.
  • -
-

The elements trait_name, entity_type, value_type, basis_of_record, and basis of value are controlled vocabularies; the values for these elements must be from the list of allowable values. Those for traits are listed in the traits.yml file or vignette. For the other elements, see the database structure vignette.

-

The fields replicates, basis_of_value, value_type, life_stage, basis_of_record, and measurement_remarks can all be specified at the dataset level or the traits level (which overrides a dataset-level entry). In each case, they can be a fixed text value or indicate a column (within the data.csv file or generated through custom_R_code) that includes the relevant information. In addition, fields can be added to specify a specific context (most commonly a method context, but occasionally a temporal context). If such a field is added, the same name must appear in both the contexts section and for some (or all) of the traits.

-

Two examples are as follows:

-
- var_in: LeafP.m
-  unit_in: mg/g
-  trait_name: leaf_P_per_dry_mass
-  entity_type: individual                   # fixed value
-  value_type: value_type_column             # referencing a column
-  basis_of_value: measurement               # fixed value
-  replicates: count                         # referencing a column
-  methods: Oven-dried leaf material was used for determination of total leaf nitrogen
-    and phosphorus. Dried ground leaf material was hot-digested in acid-peroxide before
-    colorimetric analysis using a flow injection system (QuikChem 8500, Lachat Instruments,
-    Loveland, Colorado, USA).
-
-

and

-
- var_in: Jmax25
-  unit_in: umol/m2/s
-  trait_name: Jmax_per_area
-  entity_type: individual                    # fixed value
-  value_type: raw                            # fixed value
-  basis_of_value: measurement                # fixed value
-  replicates: 1                              # fixed value
-  method_context: 25C                        # optional field
-  methods: Controlled photosynthetic CO2 response curve measurements were made using
-    Li-Cor 6400 portable infrared gas analysers (LiCor Inc., Lincoln, NE, USA). CO2
-    response curves of net CO2 assimilation (Anet) were developed at a constant temperature
-    (termed 'Anet-Ci curves') for intact leaves within each tree chamber. These Anet-Ci
-    curve measurements progressed at four to five specified leaf temperatures for
-    the same leaf (i.e. one leaf per chamber) in each of three seasons (early summer,
-    December 2010; late summer, February 2011...
-
-
-
-
Substitutions -
-

This section provides a list of any “find and replace” substitutions needed to get the data into the right format.

-

Substitutions are required whenever the exact word(s) used to describe a categorical trait value in AusTraits is different from the vocabulary used by the author in the data.csv file. It is preferable to align vocabulary using substitutions rather than changing the data.csv file. The trait definitions file provides a list of supported values for each trait.

-

Each substitution is documented using the following elements:

-
    -
  • -trait_name: Trait where substitutions are required.
  • -
  • -find: Contributor’s trait value that needs to be changed.
  • -
  • -replace: AusTraits supported replacement value.
  • -
-

An example is as follows:

-
substitutions:
-- trait_name: life_history
-  find: p
-  replace: perennial
-- trait_name: plant_growth_form
-  find: s
-  replace: shrub
-- ...
-
-
-
Taxonomic updates -
-

This section provides a table of taxonomic name changes needed to align original names in the dataset with taxon names in the chosen taxonomic reference(s).

-

Each substitution is documented using the following elements:

-
    -
  • -find: Name given to taxon in the original data supplied by the authors.
  • -
  • -replace: Scientific name of the taxon on which traits were sampled, without authorship. When possible, this is the currently accepted (botanical) or valid (zoological) scientific name, but might also be a higher taxonomic level.
  • -
  • -reason: Records why the change was implemented, e.g. typos, taxonomic synonyms, and standardising spellings -
  • -
-

Algorithms within AusTraits automatically align outdated taxonomy and taxonomic synonyms to their currently accepted scientific name, so such adjustments are not documented as substitutions.

-

Some examples of taxonomic updates are as follows:

-
taxonomic_updates:
-- find: Drummondita rubroviridis
-  replace: Drummondita rubriviridis
-  reason: match_07_fuzzy. Fuzzy alignment with accepted canonical name in APC (2022-11-21)
-  taxonomic_resolution: Species
-- find: Acacia ancistrophylla/sclerophylla
-  replace: Acacia sp. [Acacia ancistrophylla/sclerophylla; White_2020]
-  reason: match_04. Rewording taxon where `/` indicates uncertain species identification
-    to align with `APC accepted` genus (2022-11-10)
-  taxonomic_resolution: genus
-- find: Polyalthia (Wyvur)
-  replace: Polyalthia sp. (Wyvuri B.P.Hyland RFK2632)
-  reason: match_15_fuzzy. Fuzzy match alignment with species-level canonical name
-    in `APC known` when everything except first 2 words ignored (2022-11-10)
-  taxonomic_resolution: Species
-
-
-
Questions -
-

This section provides a place to record any queries we have about the dataset (recorded as a named array), including notes on any additional traits that may have been collected in the study but have not been incorporated into austraits.

-

An example is as follows:

-
questions:
-  questions for author: Triglochin procera has very different seed masses in the main traits spreadsheet and the field seeds worksheet. Which is correct? There are a number of species with values in the field leaves worksheet that are absent in the main traits worksheet - we have included this data into Austraits; please advise if this was inappropriate.
-  austraits: need to map aquatic_terrestrial onto an actual trait once one is created.
-
-
-
-
-

Appendices -

-
-

File types -

-
-

CSV -

-

A comma-separated values (CSV) file is a delimited text file that uses a comma to separate values. Each line of the file is a data record. Each record consists of one or more fields, separated by commas. This is a comma format for storing tables of data in a simple text file. You can edit it in Excel or in a text editor. For more, see here.

-
-
-

YAML files -

-

The yml file extension (pronounced “YAML”) is a type structured data file, that is both human and machine readable. You can edit it in any text editor, or also in Rstudio. Generally, yml is used in situations where a table is not suitable because of variable lengths and or nested structures. It has the advantage over a spreadsheet in that the nested “headers” can have variable numbers of categories. The data under each of the hierarchical headings are easily extracted by R.

-
-
-
-

Adding custom R code into metadata.yml -

-

Occasionally all the changes we want to make to dataset may not fit into the prescribed workflow used in AusTraits. For example, we assume that each trait has a single unit. But there are a few datasets where data on different rows have different units. So we want to make to make some custom modifications to this particular dataset before the common pipeline of operations gets applied. To make this possible, the workflow allows for some custom R code to be run as a first step in the processing pipeline. That pipeline (in the function read_data_study) looks like:

-
-data <-
-  read_csv(filename_data_raw, col_types = cols()) %>%
-  process_custom_code(metadata[["dataset"]][["custom_R_code"]])() %>%
-  process_parse_data(dataset_id, metadata) %>%
-  ...()
-

Note the second line.

-
-

Example problem -

-

As an example, for Blackman_2010 we want to combine two columns to create an appropriate location variable. Here is the code that was included in data/Blackman_2010/metadata.yml under custom_R_code.

-
-data %>% mutate(
-  location = ifelse(location == "Mt Field" & habitat == "Montane rainforest", "Mt Field_wet", location),
-  location = ifelse(location == "Mt Field" & habitat == "Dry sclerophyll", "Mt Field_dry", location)
-)
-

This is the finished solution, but to get there we did as follows:

-

Generally, this code should

-
    -
  • assume a single object called data, and apply whatever fixes are needed
  • -
  • use dplyr functions like mutate, rename, etc
  • -
  • use pipes to weave together a single statement, if possible. (Otherwise you’ll need a semi colon ; at the end of each statement).
  • -
  • be fully self-contained (we’re not going to use any of the other remake machinery here)
  • -
-

First, load an object called data:

-
-library(readr)
-library(yaml)
-
-data <- read_csv(file.path("data", "Blackman_2010", "data.csv"), col_types = cols(.default = "c"))
-data
-

Second, write your code to manipulate data, like the example above

-

Third, once you have some working code, you then want to add it into your yml file under dataset -> custom_R_code.

-

Finally, check it works. Let’s assume you added it in. The function metadata_check_custom_R_code loads the data and applies the custom R code:

- -
-
-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/austraits_file_structure_files/kePrint-0.0.1/kePrint.js b/docs/articles/austraits_file_structure_files/kePrint-0.0.1/kePrint.js deleted file mode 100644 index e6fbbfc44..000000000 --- a/docs/articles/austraits_file_structure_files/kePrint-0.0.1/kePrint.js +++ /dev/null @@ -1,8 +0,0 @@ -$(document).ready(function(){ - if (typeof $('[data-toggle="tooltip"]').tooltip === 'function') { - $('[data-toggle="tooltip"]').tooltip(); - } - if ($('[data-toggle="popover"]').popover === 'function') { - $('[data-toggle="popover"]').popover(); - } -}); diff --git a/docs/articles/austraits_file_structure_files/lightable-0.0.1/lightable.css b/docs/articles/austraits_file_structure_files/lightable-0.0.1/lightable.css deleted file mode 100644 index 3be3be904..000000000 --- a/docs/articles/austraits_file_structure_files/lightable-0.0.1/lightable.css +++ /dev/null @@ -1,272 +0,0 @@ -/*! - * lightable v0.0.1 - * Copyright 2020 Hao Zhu - * Licensed under MIT (https://github.com/haozhu233/kableExtra/blob/master/LICENSE) - */ - -.lightable-minimal { - border-collapse: separate; - border-spacing: 16px 1px; - width: 100%; - margin-bottom: 10px; -} - -.lightable-minimal td { - margin-left: 5px; - margin-right: 5px; -} - -.lightable-minimal th { - margin-left: 5px; - margin-right: 5px; -} - -.lightable-minimal thead tr:last-child th { - border-bottom: 2px solid #00000050; - empty-cells: hide; - -} - -.lightable-minimal tbody tr:first-child td { - padding-top: 0.5em; -} - -.lightable-minimal.lightable-hover tbody tr:hover { - background-color: #f5f5f5; -} - -.lightable-minimal.lightable-striped tbody tr:nth-child(even) { - background-color: #f5f5f5; -} - -.lightable-classic { - border-top: 0.16em solid #111111; - border-bottom: 0.16em solid #111111; - width: 100%; - margin-bottom: 10px; - margin: 10px 5px; -} - -.lightable-classic tfoot tr td { - border: 0; -} - -.lightable-classic tfoot tr:first-child td { - border-top: 0.14em solid #111111; -} - -.lightable-classic caption { - color: #222222; -} - -.lightable-classic td { - padding-left: 5px; - padding-right: 5px; - color: #222222; -} - -.lightable-classic th { - padding-left: 5px; - padding-right: 5px; - font-weight: normal; - color: #222222; -} - -.lightable-classic thead tr:last-child th { - border-bottom: 0.10em solid #111111; -} - -.lightable-classic.lightable-hover tbody tr:hover { - background-color: #F9EEC1; -} - -.lightable-classic.lightable-striped tbody tr:nth-child(even) { - background-color: #f5f5f5; -} - -.lightable-classic-2 { - border-top: 3px double #111111; - border-bottom: 3px double #111111; - width: 100%; - margin-bottom: 10px; -} - -.lightable-classic-2 tfoot tr td { - border: 0; -} - -.lightable-classic-2 tfoot tr:first-child td { - border-top: 3px double #111111; -} - -.lightable-classic-2 caption { - color: #222222; -} - -.lightable-classic-2 td { - padding-left: 5px; - padding-right: 5px; - color: #222222; -} - -.lightable-classic-2 th { - padding-left: 5px; - padding-right: 5px; - font-weight: normal; - color: #222222; -} - -.lightable-classic-2 tbody tr:last-child td { - border-bottom: 3px double #111111; -} - -.lightable-classic-2 thead tr:last-child th { - border-bottom: 1px solid #111111; -} - -.lightable-classic-2.lightable-hover tbody tr:hover { - background-color: #F9EEC1; -} - -.lightable-classic-2.lightable-striped tbody tr:nth-child(even) { - background-color: #f5f5f5; -} - -.lightable-material { - min-width: 100%; - white-space: nowrap; - table-layout: fixed; - font-family: Roboto, sans-serif; - border: 1px solid #EEE; - border-collapse: collapse; - margin-bottom: 10px; -} - -.lightable-material tfoot tr td { - border: 0; -} - -.lightable-material tfoot tr:first-child td { - border-top: 1px solid #EEE; -} - -.lightable-material th { - height: 56px; - padding-left: 16px; - padding-right: 16px; -} - -.lightable-material td { - height: 52px; - padding-left: 16px; - padding-right: 16px; - border-top: 1px solid #eeeeee; -} - -.lightable-material.lightable-hover tbody tr:hover { - background-color: #f5f5f5; -} - -.lightable-material.lightable-striped tbody tr:nth-child(even) { - background-color: #f5f5f5; -} - -.lightable-material.lightable-striped tbody td { - border: 0; -} - -.lightable-material.lightable-striped thead tr:last-child th { - border-bottom: 1px solid #ddd; -} - -.lightable-material-dark { - min-width: 100%; - white-space: nowrap; - table-layout: fixed; - font-family: Roboto, sans-serif; - border: 1px solid #FFFFFF12; - border-collapse: collapse; - margin-bottom: 10px; - background-color: #363640; -} - -.lightable-material-dark tfoot tr td { - border: 0; -} - -.lightable-material-dark tfoot tr:first-child td { - border-top: 1px solid #FFFFFF12; -} - -.lightable-material-dark th { - height: 56px; - padding-left: 16px; - padding-right: 16px; - color: #FFFFFF60; -} - -.lightable-material-dark td { - height: 52px; - padding-left: 16px; - padding-right: 16px; - color: #FFFFFF; - border-top: 1px solid #FFFFFF12; -} - -.lightable-material-dark.lightable-hover tbody tr:hover { - background-color: #FFFFFF12; -} - -.lightable-material-dark.lightable-striped tbody tr:nth-child(even) { - background-color: #FFFFFF12; -} - -.lightable-material-dark.lightable-striped tbody td { - border: 0; -} - -.lightable-material-dark.lightable-striped thead tr:last-child th { - border-bottom: 1px solid #FFFFFF12; -} - -.lightable-paper { - width: 100%; - margin-bottom: 10px; - color: #444; -} - -.lightable-paper tfoot tr td { - border: 0; -} - -.lightable-paper tfoot tr:first-child td { - border-top: 1px solid #00000020; -} - -.lightable-paper thead tr:last-child th { - color: #666; - vertical-align: bottom; - border-bottom: 1px solid #00000020; - line-height: 1.15em; - padding: 10px 5px; -} - -.lightable-paper td { - vertical-align: middle; - border-bottom: 1px solid #00000010; - line-height: 1.15em; - padding: 7px 5px; -} - -.lightable-paper.lightable-hover tbody tr:hover { - background-color: #F9EEC1; -} - -.lightable-paper.lightable-striped tbody tr:nth-child(even) { - background-color: #00000008; -} - -.lightable-paper.lightable-striped tbody td { - border: 0; -} - diff --git a/docs/articles/austraits_overview.html b/docs/articles/austraits_overview.html deleted file mode 100644 index 4807a28bc..000000000 --- a/docs/articles/austraits_overview.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - -Overview of AusTraits workflow • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - -

AusTraits is an open-source, harmonised database of Australian plant trait data. Traits vary in scope, including morphological attributes (e.g. leaf area, seed mass, plant height), physiological measures of performance (e.g. photosynthetic gas exchange, water-use efficiency), tissue biochemical composition (e.g. leaf nitrogen content, leaf chlorophyll content), and life history traits (e.g. seed bank location, plant growth form, salinity tolerance).

-

This vignette provides an overview of our workflow, to demonstrate our commitment to creating a reliable, reproducible resource for anyone interested in plant traits.

-
-

AusTraits workflow -

-
-

Data sources -

-

The data in AusTraits is derived from nearly 300 distinct sources, each contributed by an individual researcher, government entity (e.g. herbaria), or NGO. Each reflects the research agenda of the individual/organisation who contributed the data - the species selected, traits measured, manipulative treatments performed, and locations sampled encompass the diversity of research interests present in Australia throughout past decades. To attain data, the AusTraits data curators have reached out to as many researchers as time permitted. This was done without explicitly soliciting datasets with specific traits; therefore, the spotty data coverage by trait or location simply represents what has been merged into AusTraits at this time.

-

These datasets use different variable trait names, units and methods and have different data structures.

-
-
-

Standardising and harmonising data -

-

To create a single database for distribution to the research community, we developed a reproducible and transparent workflow in R for merging each dataset into AusTraits. The pipeline ensures the following information is standardised across all datasets in AusTraits. A metadata file for each study documents how the data tables submitted by an individual contributor are translated into the standardised terms used in the AusTraits database.

-
    -
  • -taxonomic nomenclature follows the Australian Plant Census (APC), with a pipeline to update outdated taxonomy, correct minor spelling mistakes, and align with a known genus when a full species names isn’t provided.
    -
  • -
  • -trait names are defined in our traits.yml file and only data for traits included in this file can be merged into AusTraits. The trait names used in the incoming dataset are mapped onto the appropriate AusTraits trait name.
  • -
  • For numeric traits the traits.yml file includes units and the allowable range of values. All incoming data are converted to the appropriate units and data outside the range of allowable values are removed from the main AusTraits data table.
  • -
  • For categorical traits the traits.yml file includes a list of allowable values, allowed terms for the trait. Each categorical trait value is defined in the traits.yml file. Lists of substitutions translate the exact syntax and terms in a submitted dataset into the values allowed by AusTraits. This ensures that for a certain trait the same value has an identical meaning throughout the AusTraits database.
  • -
  • Site locations are recorded in decimal degrees.
  • -
-
-
-

Referencing sources and recording methods -

-

The metadata file also includes all metadata associated with the study:

-
    -
  • The source information for each dataset is recorded. Most frequently, these are the primary publications derived from the dataset.
  • -
  • People associated with the collection of the data are listed, including their role in the project.
  • -
  • Collection methods are included.
  • -
  • Fields capture value type (mean, min, max, mode, range, bin) and associated replicate numbers, basis of value (measurement, expert_score, model_derived), entity type (species, population, individual), life stage (adult, juvenile,sapling, seedling), basis of record (field, field_experiment, preserved_specimen, captive_cultivated, lab, literature), and any additional measurement remarks.
  • -
  • Available data on location properties are recorded.
  • -
  • Available data on plot and treatment contextual properties are recorded.
  • -
  • A context field, temporal_id, indicates if repeat measures were made on the same individual over time.
  • -
  • A context field, method_id, indicates if the same trait was measured using multiple methods.
  • -
  • Collection date is recorded.
  • -
-
-
-

Error checking -

-
    -
  • The AusTraits data curator runs a series of tests on each data set, detailed in the adding data vignette -
  • -
  • These tests identify misaligned units, unrecognised taxon names, and unsupported categorical trait values -
  • -
  • These tests also identify and eliminate most duplicate data - instances where the same numeric trait data is submitted by multiple people
  • -
  • Each dataset is then compiled into a report which summarises metadata and plots/charts trait values in comparison to other measurements of that trait in AusTraits. The report is reviewed by the data contributor to ensure metadata is complete and data values are as expected.
  • -
  • A second member of the AusTraits team double checks each dataset before it is merged into the main repository.
  • -
-
-
-
-

Detailed vignettes -

-

A series of more detailed vignettes delve into specific aspects in greater detail:

- -
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/contributing_data.html b/docs/articles/contributing_data.html deleted file mode 100644 index 49b2dba1b..000000000 --- a/docs/articles/contributing_data.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - -Contributing data to AusTraits • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - -

AusTraits is an open-source harmonised database of Australian plant trait data. It exists because hundreds of researchers across Australia (and beyond) have contributed their datasets to this endeavour. Each dataset we receive incrementally broadens trait coverage for the Australian flora and, in turn, makes the database a little better to address your research questions.

-

As such, we welcome all data contributions to AusTraits, including recently collected trait data, legacy trait data from your file archives, transcribed reference works, and transcribed datasets from the literature.

-

The AusTraits data-entry people then merge each dataset into AusTraits. AusTraits is a harmonised database: for each study we carefully check to ensure units are accurate, continuous trait values map in the expected range, categorical trait values map onto sensible terms, location data are accurate, taxon names are aligned to current standards, and all metadata are recorded.

-

After completing a series of quality checks, we will send you a report to review that summarises the data and metadata. The reports include plots for each continuous trait, comparing values in your submission to those already in AusTraits. It plots your study locations (sites) on a map. It summarises your metadata and indicates the taxonomic alignments made. The report includes both targeted questions (sometimes) and automated questions, acting as prompts to review aspects of the report. Reviewing your report should not take long, and confirms the transparent, thorough process used to build AusTraits.

-

As a first step, all we really require is a Data Spreadsheet and a copy of your Manuscript.

-
-

Data -

-

Your dataset, preferably in a spreadsheet format.

-

Traits: Make sure the trait names used in your dataset are easy to interpret or, alternatively, provide a brief definition

-

Units: Please make sure the units for each trait are provided as part of the trait name or in a separate spreadsheet/worksheet

-

Value type: We prefer to incorporate raw values (or individual means) in AusTraits, but can use population or multi-site means if that is what is available. For mean values, please provide sample size.

-

Location: For field studies, please provide location details (see more below).

-

Context: Optional, but AusTraits can read in one (or more) column(s) with contextual information, such as canopy position, experimental manipulation, dry vs. wet season, etc.

-

Collection date: Optional, but AusTraits can read in a column with sampling date (in any format)

-

Species/taxa: Please provide complete species names or a look-up table to match species codes. Out-dated taxonomy is fine – we have name-matching algorithms.

-
-
-

Metadata -

-

The AusTraits structure has fields to input all metadata associated with your study, including methods, location details, and context. In detail:

-

Methods: For published studies the necessary methods and study information can be extracted from a publication; just attach a copy of the manuscript or the DOI.

-
    -
  • The only commonly missing information is the general sampling period, such as ‘October-December 2020’; this is only required if your data file doesn’t have a date column.

  • -
  • For unpublished studies, provide brief methods for how each trait was measured; you can simply refer to a standard published protocol

  • -
-

Study locations: Whenever possible, AusTraits includes location names, location coordinates (latitude/longitude), and any other location properties you have measured/recorded (vegetation description, soil chemistry, climate data, etc.). This information can be provided as a second spreadsheet or as additional columns in the main data spreadsheet. Just make sure the location name is the same in both spreadsheets.

-

Context: If your study includes contextual variables, make sure the context values are included as columns in the data spreadsheet. Also, please make sure the contextual values are self-explanatory or provide the necessary explanation.

-

Authors: Authorship is extended to anyone who played a key intellectual role in the experimental design and data collection. Most studies have 1-3 authors. For each author, please provide a name, institutional affiliation, email address, and their ORCID (if available). Please nominate a single contributor to be the dataset’s point of contact; this person’s email will not be listed in the metadata file, but is the person future AusTraits users are likely to seek out if they have questions. Additional field assistants can be listed.

-

Source: The published manuscript is generally the source. If different traits or observations from a single dataset were published separately, please provide both references. If the dataset you are submitting is a compilation from many sources, please provide a complete list of sources and indicate which rows of data are attributable to which source.

-
-
-

Most common hang-ups -

-

Categorical trait values: If you have categorical traits, please define any trait values (i.e. entries for that trait) that are not self-explanatory. A copy of our definitions file, including allowable values for each trait is available here. The definitions file is a work-in-progress and additional trait values can be added if needed to capture the exact meaning you intended.

-

Data sourced from others: For numerical traits, AusTraits strives to only include data collected by you for this project, to avoid having multiple entries of the same measurement/observation. If you have certain trait values that were sourced from the literature, an online database, or colleagues, please indicate that clearly. If trait values for some species were collected by you and others were sourced, it is very helpful if you could add a column to your spreadsheet that indicates the source for different rows of data.

-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/docker.html b/docs/articles/docker.html deleted file mode 100644 index 86b44a5bb..000000000 --- a/docs/articles/docker.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - -Docker for reproducible compute environment • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - - -

As the R compute environment and packages change over time, we have created a Docker container to ensure all our builds are reproducible into the future.

-

If you have Docker installed, you can recreate the compute environment as follows. For more instructions on running docker, see the info from the R docker project rocker. Our docker container is build off the rocker/verse container. This includes

-
    -
  • R version
  • -
  • rstudio
  • -
  • tidyverse & devtools
  • -
  • tex & publishing-related packages
  • -
-

On top of that, we install everything needed to build AusTraits and the reports.

-
-

Running via Docker -

-

First fetch the container:

-
docker pull traitecoevo/austraits.build:latest
-

(instead of latest, you can indicate a specific tag, .e.g. 3.6.1, or 4.1.2)

-

Then launch it via:

-
docker run --user root -v $(pwd):/home/rstudio/ -p 8787:8787 -e DISABLE_AUTH=true traitecoevo/austraits.build:latest
-

Adding a -d into the command above will cause the image to run in the background.

-

The code above initialises a docker container, which runs an rstudio session, which is accessed by pointing your browser to localhost:8787.

-

Note, this container does not contain the actual github repo, only the software environment. If you run the above command from within your downloaded repo, it will map the working directory as the current working directory inside the docker container.

-
-
-

Building Docker container -

-

The recipe used to build the docker container is included in the Dockerfile in this repo. Our image builds off rocker/verse container via the following command, in a terminal contained within the downloaded repo:

-
docker build -t traitecoevo/austraits.build:4.1.2 .
-

Images are pushed to dockerhub (here):

-
docker push traitecoevo/austraits.build:4.1.2
-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/articles/figures/giz035fig2.png b/docs/articles/figures/giz035fig2.png deleted file mode 100644 index 33841e9f631ded7681bb218e24de259d8e7980f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56893 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 diff --git a/docs/articles/index.html b/docs/articles/index.html deleted file mode 100644 index af82a40b9..000000000 --- a/docs/articles/index.html +++ /dev/null @@ -1,134 +0,0 @@ - -Articles • austraits.build - - -
-
- - - -
- - -
- -
-

Site built with pkgdown 2.0.7.

-
- -
- - - - - - - - diff --git a/docs/articles/trait_definitions.html b/docs/articles/trait_definitions.html deleted file mode 100644 index bf4526aa7..000000000 --- a/docs/articles/trait_definitions.html +++ /dev/null @@ -1,7099 +0,0 @@ - - - - - - - -Definitions for traits in AusTraits • austraits.build - - - - - - - - - - - - -
-
- - - - -
-
- - - - -

This document provides a full list of trait definitions used in AusTraits version 4.1.0.9000, as defined in the file configuration files config/traits.yml.

-
-

accessory_cost_fraction -

-
    -
  • label: Fraction of total reproductive investment to non-seed tissues
  • -
  • description: Fraction of total reproductive investment required to mature a seed that is invested in non-seed tissues
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.01 - 1 mg/mg
  • -
-
-
-

accessory_cost_mass -

-
    -
  • label: Mass of seed accessory costs
  • -
  • description: Mass of seed accessory costs, the proportion of a fruit that does not develop into a seed
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 0.01 - 10000 mg
  • -
-
-
-

atmospheric_CO2_concentration -

-
    -
  • label: ambient CO2 concentration
  • -
  • description: Ambient CO2 concentration (external CO2 concentration)
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol
  • -
  • allowable range: 50 - 1000 umol{CO2}/mol
  • -
-
-
-

bark_Al_per_dry_mass -

-
    -
  • label: Bark aluminium (Al) content per unit bark dry mass
  • -
  • description: Bark aluminium (Al) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

bark_ash_per_dry_mass -

-
    -
  • label: Bark ash content per dry mass
  • -
  • description: Bark ash content per dry mass, where bark ash is the component of the bark remaining after combustion.
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 100 g/g
  • -
-
-
-

bark_B_per_dry_mass -

-
    -
  • label: Bark boron (B) content per unit bark dry mass
  • -
  • description: Bark boron (B) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 1 mg/g
  • -
-
-
-

bark_C_per_dry_mass -

-
    -
  • label: Bark carbon (C) content per unit bark dry mass
  • -
  • description: Bark carbon (C) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 50 - 750 mg/g
  • -
-
-
-

bark_Ca_per_dry_mass -

-
    -
  • label: Bark calcium (Ca) content per unit bark dry mass
  • -
  • description: Bark calcium (Ca) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

bark_cellulose_per_dry_mass -

-
    -
  • label: Bark cellulose per unit bark dry mass
  • -
  • description: Bark cellulose per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.1 - 1 mg/mg
  • -
-
-
-

bark_Cu_per_dry_mass -

-
    -
  • label: Bark copper (Cu) content per unit bark dry mass
  • -
  • description: Bark copper (Cu) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1e-04 - 1 mg/g
  • -
-
-
-

bark_delta13C -

-
    -
  • label: Bark carbon (C) isotope signature (delta 13C)
  • -
  • description: Bark carbon stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -50 - 0 {delta}[ppth]
  • -
-
-
-

bark_delta15N -

-
    -
  • label: Bark nitrogen (N) isotope signature (delta 15N)
  • -
  • description: Bark nitrogen stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -25 - 75 {delta}[ppth]
  • -
-
-
-

bark_density -

-
    -
  • label: Bark dry mass per unit fresh bark volume
  • -
  • description: Bark dry mass per unit bark fresh volume (bark density)
  • -
  • type: numeric
  • -
  • units: mg/mm3
  • -
  • allowable range: 0.1 - 1.1 mg/mm3
  • -
-
-
-

bark_dry_mass_per_surface_area -

-
    -
  • label: Bark mass per unit surface area of stem
  • -
  • description: Bark mass per unit surface area of stem
  • -
  • type: numeric
  • -
  • units: g/cm2
  • -
  • allowable range: 0.01 - 1 g/cm2
  • -
-
-
-

bark_Fe_per_dry_mass -

-
    -
  • label: Bark iron (Fe) content per unit bark dry mass
  • -
  • description: Bark iron (Fe) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

bark_K_per_dry_mass -

-
    -
  • label: Bark potassium (K) content per unit bark dry mass
  • -
  • description: Bark potassium (K) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 100 mg/g
  • -
-
-
-

bark_lignin_per_dry_mass -

-
    -
  • label: Bark lignin per unit bark dry mass
  • -
  • description: Bark lignin per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.01 - 1 mg/mg
  • -
-
-
-

bark_Mg_per_dry_mass -

-
    -
  • label: Bark magnesium (Mg) content per unit bark dry mass
  • -
  • description: Bark magnesium (Mg) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

bark_Mn_per_dry_mass -

-
    -
  • label: Bark manganese (Mn) content per unit bark dry mass
  • -
  • description: Bark manganese (Mn) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 1 mg/g
  • -
-
-
-

bark_modulus_of_elasticity -

-
    -
  • label: A measure of the force required to bend bark
  • -
  • description: A measure of the force required to bend bark
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 10 - 100000 MPa
  • -
-
-
-

bark_morphology -

-
    -
  • label: Bark morphology
  • -
  • description: Description of bark morphology
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -eucalypt_box: Eucalypts with “Box” type bark (including Corymbia and Angophora)
    • -
    • -eucalypt_gum: Eucalypts with “Gum” type bark (including Corymbia and Angophora)
    • -
    • -eucalypt_stocking: Eucalypts with “Gum” type bark above a rough barked stocking (including Corymbia and Angophora)
    • -
    • -eucalypt_ironbark: Eucalypts with “Ironbark” type bark (including Corymbia and Angophora)
    • -
    • -eucalypt_peppermint: Eucalypts with “Peppermint” type bark (including Corymbia and Angophora)
    • -
    • -eucalypt_stringybark: Eucalypts with “Stringy” type bark (including Corymbia and Angophora)
    • -
    • -eucalypt_ribbonbark: Eucalypts with “Gum” type bark that sheds in ribbons (including Corymbia and Angophora)
    • -
    -
  • -
-
-
-

bark_N_per_dry_mass -

-
    -
  • label: Bark nitrogen (N) content per unit bark dry mass
  • -
  • description: Bark nitrogen (N) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

bark_Na_per_dry_mass -

-
    -
  • label: Bark sodium (Na) content per unit bark dry mass
  • -
  • description: Bark sodium (Na) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 100 mg/g
  • -
-
-
-

bark_P_per_dry_mass -

-
    -
  • label: Bark phosphorus (P) content per unit bark dry mass
  • -
  • description: Bark phosphorus (P) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

bark_photosynthetic_status -

-
    -
  • label: Bark photosynthesis
  • -
  • description: Binary variable indicating whether or not bark is photosynthetic
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -non_photosynthetic_bark: bark is not photosynthetic
    • -
    • -photosynthetic_bark: bark is photosynthetic
    • -
    -
  • -
-
-
-

bark_S_per_dry_mass -

-
    -
  • label: Bark sulphur (S) content per unit bark dry mass
  • -
  • description: Bark sulphur (S) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

bark_tannin_per_dry_mass -

-
    -
  • label: Bark tannins (polyphenols) per unit bark dry mass
  • -
  • description: Bark tannins (polyphenols) per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 1e-05 - 1 mg/mg
  • -
-
-
-

bark_thickness -

-
    -
  • label: Bark thickness
  • -
  • description: Thickness of the bark of the stem
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 50 mm
  • -
-
-
-

bark_thickness_index -

-
    -
  • label: Scaled bark thickness
  • -
  • description: Thickness of the bark (2 times a single thickness measure) of the stem divided by stem diameter, adjust for increasing bark thickness with increasing stem diameter. (based on Lawes)
  • -
  • type: numeric
  • -
  • units: mm/mm
  • -
  • allowable range: 0.001 - 1 mm/mm
  • -
-
-
-

bark_water_content_per_dry_mass -

-
    -
  • label: Bark water content per unit dry mass
  • -
  • description: Ratio of the mass of water in a bark to bark dry mass.
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 1 g/g
  • -
-
-
-

bark_water_content_per_saturated_mass -

-
    -
  • label: Water content per unit mass of saturated bark
  • -
  • description: Ratio of water in a saturated bark (maximal water holding capacity at full turgidity) to bark saturated mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.1 - 10 g/g
  • -
-
-
-

bark_Zn_per_dry_mass -

-
    -
  • label: Bark zinc (Zn) content per unit bark dry mass
  • -
  • description: Bark zinc (Zn) content per unit bark dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

branch_mass_fraction -

-
    -
  • label: Fraction of plant dry mass comprised of branch material
  • -
  • description: Fraction of plant dry mass comprised of branch material
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0 - 1 mg/mg
  • -
-
-
-

branch_terminal_twig_cross_sectional_area -

-
    -
  • label: Terminal twig cross-sectional area
  • -
  • description: Cross-sectional area of the terminal twig
  • -
  • type: numeric
  • -
  • units: mm2
  • -
  • allowable range: 0.05 - 50 mm2
  • -
-
-
-

branch_terminal_twig_length -

-
    -
  • label: Terminal twig length
  • -
  • description: Length of the terminal twig
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 1 - 1000 mm
  • -
-
-
-

bud_bank_location -

-
    -
  • label: Location of resprouting buds following a fire.
  • -
  • description: Location of resprouting buds following a fire. The trait vegetative_regeneration_or_reproduction_strategy captures the explicit tissue types that provides a more detailed list of species’ ability to regenerate vegetatively and their bud locations. See Pausus, Lamont et al. 2018, doi.org/10.1111/nph.14982 for trait values used and detailed desciptions of recolonization ability and level of fire protection provided by each regeneration strategy. See also the trait storage_organ.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -apical_buds: Plant resprouts from above-ground apical meristems. Also termed a caudex. Term refers to palm-like plants with aerial buds that resprout, including grass trees, palms, tree ferns, and pandanus.
    • -
    • -basal_buds: Plant resprouts from its base, with basal stem versus underground buds not distinguished between. Most buds designated as basal_buds likely to be resprouts from a lignotuber, but this trait value is used if the dataset reported basal buds rather than basal stem buds or lignotuber.
    • -
    • -basal_stem_buds: Plants resprout from the base of the stem following a fire. Australian plants with basal stem buds usually have a lignotuber; see the trait storage_organ.
    • -
    • -bud-bearing_root: Root buds produce vertical suckers (from root crown) or adventitious roots following a fire.
    • -
    • -epicormic_buds: Plants resprout from the stem or trunk following a fire.
    • -
    • -rhizome: Plants reprout from a rhizome.
    • -
    • -stem_buds: Plant resprouts from stem buds (separate to epicormic buds)
    • -
    • -stem_tuber: Plant resprouts from buds on a stem tuber
    • -
    • -stolon: Plants resprouts from buds on horizontal branches (stems) growing from the base of the plant.
    • -
    • -underground_buds: Plants that resprout from underground organ, but the type of organ isn’t specified.
    • -
    • -none: Plant lacks regenerative buds.
    • -
    -
  • -
-
-
-

bulk_modulus_of_elasticity -

-
    -
  • label: Bulk modulus of elasticity (e)
  • -
  • description: In leaves, the ratio of the change in cell turgor to the change in cell volume as a plant dries out; calculated from a pressure-volume curve
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 0.1 - 100 MPa
  • -
-
-
-

canopy_seedbank -

-
    -
  • label: Seeds present in canopy seedbank
  • -
  • description: Binary variable indicating if seeds present in canopy seedbank; see also ‘seed_longevity_categorical’, ‘seed_storage_location’, ‘soil_seedbank’, and ‘serotiny’
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -canopy_seedbank_absent: Seeds not present in canopy seedbank
    • -
    • -canopy_seedbank_present: Seeds present in canopy seedbank
    • -
    -
  • -
-
-
-

cell_cross-sectional_area -

-
    -
  • label: Cell cross sectional area
  • -
  • description: Cell cross sectional area
  • -
  • type: numeric
  • -
  • units: um2
  • -
  • allowable range: 100 - 10000 um2
  • -
-
-
-

clonal_spread_mechanism -

-
    -
  • label: Clonal growth mechanisms
  • -
  • description: Mechanisms a plant uses to grow vegetatively, including the production of clones. Overlap with terms under storage_organ and bud_bank_location.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -aboveground_clonal: Vegetative buds or plant fragments that can disperse and produce new plants (including axillary buds, bulbils and turions).
    • -
    • -adventitious_root_buds: Adventitious root buds on main root or lateral roots
    • -
    • -bulb: Below ground storage organ derived from stem (and sometimes leaf) tissue, that divides into new individuals.
    • -
    • -belowground_clonal: Plants use an unspecified underground organ for clonal spread.
    • -
    • -corm: Below ground organ derived from stem tissue that can function either for vegetative spread or to regenerate following a disturbance.
    • -
    • -rhizome: Plant has an underground stem; this stem may be woody or non-woody. Rhizomes are both a mechanism for vegetative spread and a strategy to survive fire.
    • -
    • -root_buds: Lateral root that produces vertical suckers, adventitious roots
    • -
    • -root_tuber: Below ground storage organ derived from root tissue.
    • -
    • -stem_tuber: Below ground storage organ derived from stem tissue.
    • -
    • -stolon: Plants having horizontal branches (stems) from the base of the plant that produce new plants from buds at its tip or nodes
    • -
    • -viviparous: Plant produces clonal offspring that grow while still attached to the parent plant.
    • -
    • -non_clonal: Plant does not display clonal growth
    • -
    -
  • -
-
-
-

competitive_stratum -

-
    -
  • label: Competitive stratum
  • -
  • description: Categorical descriptions of a taxon’s relative stature in its community, used to assess competitive heirarchies within a community (definition based on Keith 2007, Gosper 2012)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -ground: Graminoids, herbs and ferns reaching maximum heights of c. 0.2–1 m
    • -
    • -mid: Shrubs reaching maximum heights of c. 1–2 m
    • -
    • -upper: Tall shrubs reaching maximum heights of c. 3–5 m
    • -
    • -post_fire_ephemeral: Taxa that avoid competition with other strata by rapidly completing their life cycle after fire; a sub-category of ‘ground’
    • -
    -
  • -
-
-
-

cotyledon_function -

-
    -
  • label: Cotyledon function
  • -
  • description: Cotyledon function
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -foliaceous: Cotyledons are photosynthetic and function as leaves.
    • -
    • -reserve: Cotyledons function as energy reserve organs.
    • -
    -
  • -
-
-
-

cotyledon_position -

-
    -
  • label: Cotyledon position at germination
  • -
  • description: Binary variable distinguishing between seedlings where the cotyledon remains within the seed coat versus emerges from the seed coat at germination.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -cryptocotylar: A type of seed germination in which the cotyledons remain within the seed coat at germination.
    • -
    • -phanerocotylar: A type of seed germination in which the cotyledons emerge from the seed coat.
    • -
    -
  • -
-
-
-

cotyledon_type -

-
    -
  • label: Cotyledon type
  • -
  • description: Binary variable distinguishing between glabrous versus hairy cotyledons
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glabrous: Cotyledon lacks hairs
    • -
    • -hairy: Cotyledon has hairs
    • -
    -
  • -
-
-
-

diaspore_dry_mass -

-
    -
  • label: Dry mass of a plant’s dispersal unit
  • -
  • description: Dry mass of a plant’s dispersal unit, including the seed and any dispersal appendages; synonymous with dispersule and often synonymous with the term disseminule. (Notes, Data mapped onto this trait have been very explicitly defined as a ‘diaspore’. There will be additional values mapped as either ‘seed_dry_mass’ or ‘fruit_dry_mass’ that are also diaspores, but have identified only as being a ‘seed’ or ‘fruit’. In addition, it is expected that some observations in AusTraits mapped onto ‘seed_dry_mass’ will actually include both the seed and some dispersal tissue, if the two cannot easily be separated.)
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 1e-05 - 1e+06 mg
  • -
-
-
-

diaspore_fleshiness -

-
    -
  • label: Diaspore fleshiness (fleshy / dry)
  • -
  • description: Binary variable, dividing diaspores into ‘dry’ versus ‘fleshy’ based on whether they have fleshy pericarps, fleshy accessory tissues (such as the receptacle in Podocarpus), or fleshy appendages (e.g. aril, thalamus, receptacle, calyx, rachis or bract or succulent pedicel) when mature. Dispersal units where none of these tissues is fleshy are designated as ‘non-fleshy’.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -dry: Diaspores where the true fruit, accessory tissues and dispersal appendages are all dry when mature.
    • -
    • -fleshy: Diaspores where either the true fruit, accessory tissues or dispersal appendages are fleshy when mature.
    • -
    -
  • -
-
-
-

dispersal_appendage -

-
    -
  • label: Appendage of propagule which facilitates dispersal
  • -
  • description: External appendages of the dispersule presumed to facilitate dispersal away from the parent plant.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -aril: Fleshy outgrowth of a seed, that often attracts animals like birds or ants.
    • -
    • -bristles: Bristle-like projections. Trait value includes awns, which are slender, bristle-like projections in some grasses.
    • -
    • -bracts_and_glumes: When the bracts below the inflorescence are persistent and functional as dispersal appendages. This includes persistent glumes, the modified membranous bracts in the family Poaceae that surround the spikelet of a grass.
    • -
    • -elaiosome: Fleshy (often fatty) appendage on seeds that attracts ants.
    • -
    • -fleshy_reward: Broad term that includes a suite of appendages that provides a fleshy reward to attract dispersers; highest level of resolution available for some studies.
    • -
    • -floating_seed: Seed that is dispersed by floating on water
    • -
    • -flotation_scales: Scales enhancing flotation, thereby assisting with dispersal.
    • -
    • -floral_parts: When some plant floral parts (the petals, sepals, or style) are persistent and aid in seed and fruit dispersal. This is a broad term not explicitly suggesting a dispersal mechanism.
    • -
    • -hairs: Modified hairs that aid in seed dispersal.
    • -
    • -hooks: A rear-facing point, as in a fish hook that aids in seed and fruit dispersal.
    • -
    • -inflated_parts: When some part of the seed, fruit, or associated tissues is inflated, aiding in seed or fruit dispersal.
    • -
    • -none: When a fruit and associated tissues lack any dispersal appendages. Includes exarillate and taxa with explicitly deciduous pappus.
    • -
    • -pappus: The calyx in Asteraceae that has been modified into bristles, hairs, scales or awns that are attached to the apex of the fruit. Taxa assigned this trait value have a persistent pappus that aids in dispersal, often, but not exclusively through wind dispersal. The pappus can also assist with flotation.
    • -
    • -plumose: Fruit, seed, style, or other floral component that is plumose and assists with dispersal.
    • -
    • -receptacle: Fleshy receptacle that aids in dispersal.
    • -
    • -sarcotesta: Fleshy seed coat that aids in dispersal.
    • -
    • -spines: Spines that aid in dispersal.
    • -
    • -tumbleweed: Plant growth form, whereby the aboveground plant component detaches from the roots and is readily rolled by wind across the ground, aiding in dispersal.
    • -
    • -wings: Referring to wing-like seed extensions that aid in wind dispersal.
    • -
    • -wing_or_plume: Broad term that includes a suite of appendages that aid in wind dispsersal; highest level of resolution available for some studies.
    • -
    -
  • -
-
-
-

dispersal_syndrome -

-
    -
  • label: Dispersal syndrome
  • -
  • description: Plant dispersal syndromes are generally assigned to species based on suites of diaspore characteristics associated with specific mechanisms of dispersal. Trait values are mostly given as the formal dispersal syndromes ending in ‘chory’, a suffix meaning ‘a specified method of plant dispersal’
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -anemochory: Diaspore is dispersed by wind. (synonym, wind)
    • -
    • -anthrochory: Diaspore is dispersed by humans, either intentionally or unintentionally.
    • -
    • -atelochory: Diaspore dispersal is prevented. (synonym, antitelochory)
    • -
    • -autochory: Diaspore is dispersed by methods originating from the parent plant or diaspore.
    • -
    • -ballistic: Seeds are launched away from the plant by explosion as soon as the seed capsule opens.
    • -
    • -barochory: Diaspores are dispersed without assistance. (synonym, gravity, mobile, unassisted)
    • -
    • -chamaechory: Diaspore is dispersed by being rolled along ground surface by wind.
    • -
    • -endozoochory: Diaspore is ingested by animals, either intentionally or accidentally, then transported before being deposited. (synonym, ingestion)
    • -
    • -epizoochory: Diaspore is dispersed by accidentally attaching itself to the outside of an animal vector. (synonym, ectozoochory, exozoochory)
    • -
    • -hydrochory: Diaspore is dispersed on the surface of water. (synonym, water)
    • -
    • -myrmecochory: Diaspores have elaiosomes (specialised nutritious appendages) that make them attractive for capture, transport and use by ants or related insects.
    • -
    • -undefined: Dispersal mechanism unknown. (synonym, unknown)
    • -
    • -zoochory: Diaspore is dispersed by animals, by an undescribed mechanism.
    • -
    -
  • -
-
-
-

dispersal_unit -

-
    -
  • label: Dispersal unit
  • -
  • description: Plant dispersal unit, broadly defined by taxonomic group.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -fruit: Dispersal unit is a fruit.
    • -
    • -seed: Dispersal unit is a seed.
    • -
    • -spore: Dispersal unit is a spore.
    • -
    -
  • -
-
-
-

dispersers -

-
    -
  • label: Diaspore dispersal agents
  • -
  • description: Dominant diaspore dispersal agents. Terms include both species and more general dispersal agent groupings, matching the different levels of resolution provided by researchers.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -indigenous_people: Indigenous people disperse the fruit through traditional practises.
    • -
    • -ants: Ants are an important fruit dispersal agent.
    • -
    • -bats: Bats are an important fruit dispersal agent.
    • -
    • -birds: Birds are an important fruit dispersal agent.
    • -
    • -cassowaries: Cassowaries, in contrast to smaller flying birds, are an important fruit dispersal agent.
    • -
    • -floods: Floods are an important fruit dispersal agent.
    • -
    • -flying_vertebrates: Flying birds and bats are important fruit dispersal agents.
    • -
    • -flying_foxes: Flying foxes are an important fruit dispersal agent.
    • -
    • -garden_refuse: Fruit are dispersed through garden refuse.
    • -
    • -insects: Insects are an important fruit dispersal agent.
    • -
    • -invertebrates: Invertebrates are an important fruit dispersal agent.
    • -
    • -mammals: Mammals are an important fruit dispersal agent.
    • -
    • -non-flying_vertebrates: Mammals and non-flying birds (i.e. cassowary, emu) are important fruit dispersal agents.
    • -
    • -passive: There is no special dispersal agent.
    • -
    • -rain: Rain is an important fruit dispersal agent; the diaspore is propelled by action of rain on plant structure or the wetting of the plant structure by rain or dew.
    • -
    • -rodents: Rodents are an important fruit dispersal agent.
    • -
    • -vehicles: Vehicles are an important dispersal agent, such as through mud on tyres.
    • -
    • -vertebrates: Vertebrates are an important fruit dispersal agent.
    • -
    • -wind: Wind is an important fruit dispersal agent.
    • -
    • -water: Water is an important fruit dispersal agent.
    • -
    • -water_currents: Water currents are an important fruit dispersal agent; the diaspore may be either floating or submerged in fresh/saltwater currents.
    • -
    -
  • -
-
-
-

embryo_colour -

-
    -
  • label: Embryo colour
  • -
  • description: Binary variable distinguishing between embryos that are green versus colourless
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -colourless: Colourless embryo
    • -
    • -green: Green embryo
    • -
    -
  • -
-
-
-

establishment_light_environment_index -

-
    -
  • label: Canopy light environment required for seedling establishment
  • -
  • description: The minimum light environment required by seedlings for establishment, scaled from 0 to 8. 0 indicates No direct light, extremely low levels of transmitted/reflected light, such as beneath dense fern or palm fronds close to ground level.; 0.5 indicates No direct light, very low levels of transmitted light; 1 indicates Rare or no exposure to direct light from lateral sources, and low levels of transmitted light.; 2 indicates Low lateral light and low–moderate transmitted light with <10% of inverted cone exposed to lateral sources of direct light, plus low to moderate levels of transmitted light; 3 indicates Low-moderate lateral & moderate transmitted light, wit <5% exposure of the focal crown to vertical direct light, and <15 % of inverted cone exposed to lateral sources of direct light, plus moderate transmitted light.; 4 indicates Moderate lateral light & moderate–high transmitted light, with 5 – 10% exposure of focal crown to direct vertical light, plus 2-20% exposure of inverted cone to lateral sources of direct light, plus moderate to high levels of transmitted light.; 5 indicates Moderate vertical light and moderate–high lateral light, with 5 – 20% exposure of focal crown to direct vertical light, plus one or both of, i. 10-40% exposure of 90-degree inverted cone to lateral sources of direct light, ii. exposure to high levels of transmitted light; 6 indicates Moderate-High vertical and high lateral light, with 10-30% of vertical projection of the crown exposed to vertical light, and lateral light exposure for > 40% of 90-degree inverted cone, 7 indicates High vertical and lateral light, with 30-80% of vertical projection of the crown exposed to vertical light, or exposure to lateral sources of direct light for > 60 % of a 90-degree inverted cone encompassing the focal crown.; 8 indicates Full light exposure of crown, with > 80% of the vertical projection of the crown exposed to vertical light. (reference, Wells 2012).
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 8 {dimensionless}
  • -
-
-
-

fire_and_establishing -

-
    -
  • label: Post-fire establishment
  • -
  • description: Trait capturing post-fire time frame during which species establishes. The selection of trait values does not distinguish between intermediate age and mature vegetation, as this level of detail is rarely provide in datasets.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -establish_anytime: Plants can establish immediately after fire and in later years as vegetation ages, right thru to mature and over-mature vegetation (assuming suitable seasonal conditions).
    • -
    • -establish_just_after_fire_only: Plants establish immediately after a fire (within the first 2 seasons, and usually within the first season), but cannot continue recruitment as the vegetation ages further, unable to establish in mature vegetation.
    • -
    • -establish_intermediate_to_mature_vegetation_only: Plants unable to establish immediately after fire (within the first season or two), but can establish in older vegetation (including mature to over-mature vegetation), requires some environmental charateristics not found in vegetation straight after fires.
    • -
    -
  • -
-
-
-

fire_exposure_level -

-
    -
  • label: Plant’s fire avoidance or exposure strategies
  • -
  • description: A trait to capture different mechanisms plants use to avoid or experience fire.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -fire_not_relevant: Plant never affected by fire (for aquatic taxon).
    • -
    • -fire_avoidance_among_rocks: Plants rarely experience fires because their habitat is restricted to rocky outcrops or rock pavement.
    • -
    -
  • -
-
-
-

fire_flame_duration -

-
    -
  • label: Flame duration for a single leaf.
  • -
  • description: Flame duration for a single leaf. Time from the first visible flame until no more flames could be seen (seconds)
  • -
  • type: numeric
  • -
  • units: s
  • -
  • allowable range: 0.1 - 200 s
  • -
-
-
-

fire_fuel_bed_bulk_density -

-
    -
  • label: Fuel bed bulk density.
  • -
  • description: Fuel bed bulk density. This is the mass of the fuel bed, divided by the fuel bed volumne.
  • -
  • type: numeric
  • -
  • units: g/cm3
  • -
  • allowable range: 0.001 - 1 g/cm3
  • -
-
-
-

fire_fuel_consumption -

-
    -
  • label: Proportion of fuel that was consumed by fire
  • -
  • description: Proportion of fuel that was consumed by fire.
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 1 - 100 g/g
  • -
-
-
-

fire_rate_of_spread -

-
    -
  • label: Rate of spread.
  • -
  • description: Rate of spread. How fast the fire moves across the landscape.
  • -
  • type: numeric
  • -
  • units: cm/s
  • -
  • allowable range: 0.01 - 1 cm/s
  • -
-
-
-

fire_response -

-
    -
  • label: Resprouts or is killed by fire
  • -
  • description: Distinguishes between mature plants that are killed versus resprout. Species where at least 70% of plants resprout following a fire that causes 100% leaf scorch are designated resprouters, while those where fewer than 30% of plants resprout are designated as fire killed. Species with an intermediate response have a mixed fire response, and are coded as fire_killed resprouts. (Gill & Bradstock 1992, Clarke 2015). This trait is narrowly applicable only to taxa that experience fire; see the trait fire_exposure_level for trait values related to species whose fire strategy is to avoid fire.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -fire_killed: Fewer than 30% of plants resprout following a hot fire.
    • -
    • -resprouts: More than 70% of plants resprout following a hot fire.
    • -
    • -partial_resprouting: Between 30-70% of plants resprout following a hot fire.
    • -
    • -no_significant_fire_response: Plants are rarely killed by a moderate-intensity fire, but also do not resprout.
    • -
    • -unknown: Fire status assessed, but unknown.
    • -
    -
  • -
-
-
-

fire_response_detailed -

-
    -
  • label: Resprouts or is killed by fire
  • -
  • description: Detailed information distinguishing between plants that are killed by fire and resprout following fire
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -fire_killed: Plants killed by hot fires
    • -
    • -weak_resprouting: Plant shows weak resprouting following fire; unless an author defines a study-specific cut-off, this term is applied to populations where some individuals, but fewer than 30% of individuals resprout following a fire.
    • -
    • -intermediate_resprouting: Plant shows intermediate resprouting following fire; unless an author defines a study-specific cut-off, this term is applied to populations where between 30-70% of individuals resprout.
    • -
    • -strong_resprouting: Plant shows strong resprouting following fire; unless an author defines a study-specific cut-off, this term is applied to populations where > 70% of individuals resprout.
    • -
    -
  • -
-
-
-

fire_response_juvenile -

-
    -
  • label: Juvenile plants resprout or killed by file
  • -
  • description: Variable summarising how juvenile plants respond to fire
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -juvenile_fire_killed: Few to no juvenile plants resprout following fire
    • -
    • -juvenile_resprout: More than 50% of juvenile plants survive and resprout following fire
    • -
    • -juvenile_moderate_fire_killed: 25-50% of juvenile plants resprout following fire
    • -
    -
  • -
-
-
-

fire_response_numeric -

-
    -
  • label: Proportion of individuals in a population that resprout
  • -
  • description: Proportion of individuals in a population that resprout following a fire.
  • -
  • type: numeric
  • -
  • units: {count}/{count}
  • -
  • allowable range: 0 - 1 {count}/{count}
  • -
-
-
-

fire_response_on_maturity -

-
    -
  • label: Plants’ maturity status after fire
  • -
  • description: Variable summarising how plants’ maturity status changes following fire.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -remain_mature: Mature plants remain mature following fire.
    • -
    • -mature_to_juvenile: Mature plants become juvenile following fire.
    • -
    • -mature_do_not_resprout: Mature plants do not resprout following fire.
    • -
    -
  • -
-
-
-

fire_response_stem_ratio -

-
    -
  • label: Ratio of stem count post-fire to pre-fire
  • -
  • description: Ratio of stem count post-fire to pre-fire at an individual or population level; this trait is appropriate to use for plants that have many stems from the base (shrubs, herbs, graminoids) where the number of stems before and after fire is censused. It is effectively a continuous measure of resprouting strength conditioned on initial size
  • -
  • type: numeric
  • -
  • units: {count}/{count}
  • -
  • allowable range: 0 - 4 {count}/{count}
  • -
-
-
-

fire_smoulder_duration -

-
    -
  • label: Smoulder duration for a single leaf.
  • -
  • description: Smoulder duration for a single leaf. Time from the end of the last visible flame until the glowing phase died out (seconds)
  • -
  • type: numeric
  • -
  • units: s
  • -
  • allowable range: 0.1 - 1000 s
  • -
-
-
-

fire_time_from_fire_to_fruit -

-
    -
  • label: Elapsed time from fire to fruiting
  • -
  • description: Elapsed time from fire to fruiting
  • -
  • type: numeric
  • -
  • units: mo
  • -
  • allowable range: 1 - 500 mo
  • -
-
-
-

fire_time_to_ignition -

-
    -
  • label: Time to ignition
  • -
  • description: Time to ignition for a single leaf. Time from ignition source contacting leaf (or other material) until ignition occurs.
  • -
  • type: numeric
  • -
  • units: s
  • -
  • allowable range: 0.1 - 100 s
  • -
-
-
-

fire_total_burn_duration -

-
    -
  • label: Sum of flame duration and smoulder duration for a single leaf.
  • -
  • description: Sum of flame duration and smoulder duration for a single leaf.
  • -
  • type: numeric
  • -
  • units: s
  • -
  • allowable range: 0.1 - 1500 s
  • -
-
-
-

flower_androecium_structural_merism -

-
    -
  • label: Number of androecium parts in each whorl (Androecium structural merism)
  • -
  • description: The number of stamens or stamen bundles (fascicles) in one whorl, considering both fertile stamens and staminodes. This character is not applicable for spiral or irregular stamen arrangements, nor when there is a single structural stamen (i.e., one stamen, no staminodes; e.g., Chloranthus, Chloranthaceae). (Definition derived from Schoenenberger et al. (2020) for their character ‘332. Androecium structural merism (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 100 {count}
  • -
-
-
-

flower_androecium_structural_phyllotaxis -

-
    -
  • label: Androecium structural phyllotaxis
  • -
  • description: Structural phyllotaxy of the androecium, considering both fertile stamens and staminodes. In cases of stamen fascicles, it is the phyllotaxis of fascicles, not individual stamens that are recorded. This character is not applicable when there is a single structural stamen (i.e., one stamen, no staminodes; e.g., Chloranthus, Chloranthaceae). (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘330. Androecium structural phyllotaxy (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -whorled: Stamens and staminodes arranged in whorls
    • -
    • -spiral: Stamens and staminodes have a spiral arrangement
    • -
    • -irregular: Stamens and staminodes have an irregular arrangement
    • -
    -
  • -
-
-
-

flower_androecium_structural_whorls_count -

-
    -
  • label: Number of androecium structural whorls
  • -
  • description: The number of whorls, considering both fertile stamens and staminodes. In cases of stamen fascicles, the count of whorls of fascicles is recorded. This character is not applicable for spiral or irregular stamen arrangements, or when there is a single structural stamen (i.e., one stamen, no staminodes; e.g., Chloranthus, Chloranthaceae). (Definition derived from Schoenenberger et al. (2020) for their character ‘331. Number of androecium structural whorls (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 100 {count}
  • -
-
-
-

flower_anther_attachment -

-
    -
  • label: Anther attachment
  • -
  • description: Anther attachment refers to the area of insertion of the filament on the anther connective (i.e. the tissue connecting the two thecae of an anther). (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘312. Anther attachment (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -basifixed: Filament attached to the base of the connective. Laminar stamens are classified as basifixed
    • -
    • -dorsifixed: Filament attached to the dorsal side of the anther
    • -
    • -dorsifixed_at_base: Filament attached to the dorsal side of the anther, at the base**
    • -
    • -ventrifixed: Filament attached to the ventral side of the anther
    • -
    -
  • -
-
-
-

flower_anther_connective_extension -

-
    -
  • label: Connective extension (apical)
  • -
  • description: Apical (distal) connective extensions (also called ‘distal connective protrusions’) are sterile anther structures that distally extend beyond the level of the thecae (i.e., the two lateral pairs of pollen sacs of a tetrasporangiate anther). This trait records both absence or presence of anther connective extensions and also the shape of these extensions in terms of length in relation to the length of the thecae. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘314. Connective extension (apical) (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -absent: Apical connective extensions are lacking
    • -
    • -short_extension: Connective extension less than a third of the length of anther
    • -
    • -long_extension: Connective extension more than a third but less than length of anther; e.g. Idiospermum australiense
    • -
    • -very_long_extension: Connective extension more than length of anther; e.g. Galbulimima belgraveana
    • -
    • -present_general: Apical connective extensions are present, but no information on their length relative to the anthers
    • -
    -
  • -
-
-
-

flower_anther_dehiscence -

-
    -
  • label: Anther dehiscence
  • -
  • description: Anther dehiscence refers to the type of opening of the anther when releasing its pollen through the stomia. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘313. Anther dehiscence (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -longitudinal_slit: Anther with longitudinal slits that extend along the entire length of each theca
    • -
    • -poricidal: Anther where dehiscence of longitudinal slits is incomplete, with pollen exiting via a small pore
    • -
    • -h_valvate: Anther with two valves on longitudinal hinges, opening horizontally as sallon doors; when the stomium bifurcates at its distal and/or proximal end and thus a valve is formed
    • -
    • -flap_valvate: Anther with one or more flap-like valves on horizontal hinges, opening vertically
    • -
    • -transverse_slit: Anther with horizontal slit
    • -
    • -short_basal_slits: Anther where dehiscence of longitudinal slits is incomplete and only occurs over a short extent at the base of the theca
    • -
    • -short_central_slits: Anther where dehiscence of longitudinal slits is incomplete and only occurs over a short extent at the center of the theca
    • -
    • -short_apical_slits: Anther where dehiscence of longitudinal slits is incomplete and only occurs over a short extent at the apical end of the theca
    • -
    • -t_valvate: Anther with T-shaped stomium; reduced transverse slit at base
    • -
    • -common_stomium_confluent_thecae: (uncertain)
    • -
    -
  • -
-
-
-

flower_anther_orientation -

-
    -
  • label: Anther orientation
  • -
  • description: Orientation of anther at anthesis. Anthers of angiosperms are rather uniform in their basic structure. They normally have four microsporangia (pollen sacs) that are arranged pair-wise in two thecae. The two microsporangia of a theca usually release their pollen grains through a common opening (stomium). Often, it is difficult to establish anther orientation clearly in a flower as this is a gradual feature with many intermediate stages. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘311. Anther orientation (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -apical: When thecae are positioned in a transverse position at the tip of the connective and thus dehisce upward in the flower (e.g., Sinofranchetia, Endress and Hufford, 1989).
    • -
    • -extrorse: When the stomia of the thecae face the floral periphery
    • -
    • -introrse: When the stomia of the thecae face the floral centre
    • -
    • -latrorse: When pollen is released toward the side (i.e., toward neighbouring anthers)
    • -
    -
  • -
-
-
-

flower_colour -

-
    -
  • label: Flower colour
  • -
  • description: Flower colour, with six possible outcomes
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -blue_purple: blue or purple
    • -
    • -green: green flower
    • -
    • -pink: pink flower
    • -
    • -red_brown: red or brown flower
    • -
    • -white_cream: white or cream flower
    • -
    • -yellow_orange: yellow orange flower
    • -
    -
  • -
-
-
-

flower_count_maximum -

-
    -
  • label: Maximum flower number
  • -
  • description: Maximum flower number produced
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 1000000 {count}
  • -
-
-
-

flower_fertile_stamens_count -

-
    -
  • label: Number of fertile stamens
  • -
  • description: Count of fertile stamens in bisexual or male flowers; does not score female flowers. (Definition derived from Schoenenberger et al. (2020) for their character ‘301. Number of fertile stamens (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 10000 {count}
  • -
-
-
-

flower_filament -

-
    -
  • label: Filament presence and shape
  • -
  • description: Trait that considers the absence or presence of the filament, and in the latter case, the shape of the filament. Shape is considered in terms of length and width and is defined in relation to anther length/width. The width of the filament may thus either be broad as in laminar (e.g., Eupomatiaceae) or bulky stamens (e.g., Chloranthaceae), or narrow (filamentous) as found in many core eudicots groups (e.g., Rosaceae). This trait is considered inapplicable when filaments are entirely fused with each other or to the perianth. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘305. Filament (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -absent: No filaments present
    • -
    • -present_general: Filaments present, with no specific defining characteristics
    • -
    • -long_and_narrow: Long and narrow shape; also called filiform, slender
    • -
    • -short_and_narrow: Short and narrow shape; subsessile anthers
    • -
    • -long_and_wide: Long and wide laminar shape
    • -
    • -short_and_wide: Short and wide laminar shape
    • -
    • -long_and_very_wide: Long and very wide shape; for instance, the petal-like (outer) stamens of Nymphaea
    • -
    • -petaloid: Long and wide and colorful, e.g. Canna
    • -
    • -fused_into_synandrium: Structure formed when stamens fused together
    • -
    • -fused_into_fascicle_stalks: Special case where the stamens are fused into the stalk of a fascicle of flowers
    • -
    • -long_and_narrow_divided_in_two: Long and narrow shape that is divided in two; e.g. Adoxa
    • -
    • -short_general: Filament is short relative to the anther
    • -
    -
  • -
-
-
-

flower_filament_fusion -

-
    -
  • label: Fusion of filaments
  • -
  • description: Fusion of stamen (and staminode) filaments among each other at anthesis (congenitally or postgenitally) is recorded on a continuous scale, from 0 (free filaments) to 1 (filaments fused along their entire length). Partial fusion is recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the length of filaments). (Definition derived from Schoenenberger et al. (2020) for their character ‘306. Fusion of filaments (C1)’)
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 1 {dimensionless}
  • -
-
-
-

flower_filament_fusion_to_inner_perianth -

-
    -
  • label: Fusion of filaments to inner perianth series
  • -
  • description: The fusion of filaments with the innermost perianth organs at anthesis on a continuous scale, from 0 (filaments completely free from perianth) to 1 (filaments fused along their entire length with the perianth; the ‘entire length’ of the filament is defined as the distance between the floral base and the joint between filament and anther). Partial fusion is recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the length of perianth parts). If two (or more) stamen whorls (including staminodial whorls) differ in their extent of filament fusion with the perianth, this trait is recorded as a range of values. For example, if the filaments of an outermost stamen whorl are fused, up to 90% of their length, but an inner whorl only up to 50%, the trait is assigned a range of 0.5 to 0.9. The rationale for this is to provide a general trait that allows comparison of fusion among all angiosperms. (Definition derived from Schoenenberger et al. (2020) for their character ‘308. Fusion of filaments to inner perianth series (C1)’)
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 1 {dimensionless}
  • -
-
-
-

flower_gynoecium_phyllotaxis -

-
    -
  • label: Gynoecium phyllotaxis
  • -
  • description: Structural phyllotaxy of the gynoecium. This trait is not applicable to unicarpellate flowers. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘400. Gynoecium phyllotaxy (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -one_whorl: Flowers with a single whorl of carpels
    • -
    • -two_or_more_whorls: Flowers with two or more whorls of carpels
    • -
    • -spiral: Flowers with carpels in a spiral arrangement
    • -
    -
  • -
-
-
-

flower_gynoecium_placentation -

-
    -
  • label: Placentation
  • -
  • description: The different types of placentation in apocarpous/unicarpellate and in syncarpous gynoecia. In apocarpous and unicarpellate gynoecia, placentation is often described as marginal as the ovules are usually attached along the ventral slit (i.e., the zone where the carpel margins become postgenitally closed during carpel development). In syncarpous gynoecia there are three main types of placentation, 1) axile placentation refers to ovaries where the ovules are placed in the angle between carpel flanks in the center of the ovary; 2) in ovaries with parietal placentation the ovules attach to the ovary wall where two carpels meet; 3) in ovaries with free-central placentation the ovules are attached to a central column that emerges from the base of the ovary and protrudes into the non-septate ovary. It is not unusual that syncarpous gynoecia show a transition from proximally axile to a distally parietal placentation (e.g., Polemoniaceae). Basal and apical placentation may occur both in apocarpous/unicarpellate and in syncarpous gynoecia. Usually there is one longitudinal series of ovules attached to each carpel margin. However, both in apocarpous/unicarpellate and in syncarpous gynoecia there may be more than one series of ovules at the flanks of a carpel. These latter cases are referred to as laminar (or laminar-diffuse) placentation (e.g., in some Nymphaeaceae). A placenta that is protruding from its surroundings and has more than two series of ovules (either axile or parietal) is called protruding-diffuse. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘412. Placentation (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -axile: Ovules are placed in the angle between carpel flanks in the center of the ovary; in syncarpous gynoecia
    • -
    • -apical: Ovules attach at the top of the ovary; pendulous; in syncarpous gynoecia and apocarpous and unicarpellate gynoecia
    • -
    • -basal: Ovules attach at the base of the ovary; in syncarpous gynoecia and apocarpous and unicarpellate gynoecia
    • -
    • -parietal: Ovules attach to the ovary wall where two carpels meet; in syncarpous gynoecia
    • -
    • -marginal: Ovules attach along the ventral slit; in apocarpous and unicarpellate gynoecia
    • -
    • -free_central: Ovules are attached to a central column that emerges from the base of the ovary and protrudes into the non-septate ovary; in syncarpous gynoecia
    • -
    • -laminar: When there is more than one series of ovules at the flanks of a carpel; in syncarpous gynoecia and apocarpous and unicarpellate gynoecia
    • -
    -
  • -
-
-
-

flower_N_per_dry_mass -

-
    -
  • label: Flower nitrogen (N) content per unit flower dry mass
  • -
  • description: Flower nitrogen (N) content per unit flower dry masshermaphrodite
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.5 - 100 mg/g
  • -
-
-
-

flower_ovary_fusion -

-
    -
  • label: Fusion of ovaries
  • -
  • description: Degree of ovary fusion expressed as a fraction of the total length of the ovary (from the floral base to the apex of the ovary). Fusion of styles and stigmas is not taken into account for this trait. Not applicable when there is a single carpel. (Definition derived from Schoenenberger et al. (2020) for their character ‘403. Fusion of ovaries (C1)’)
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 1 {dimensionless}
  • -
-
-
-

flower_ovary_position -

-
    -
  • label: Ovary position
  • -
  • description: The ovary is the part of the gynoecium where the ovules are produced. The ovary may be located on the receptacle and thus be positioned above the insertion level of the remaining floral organs (i.e., the ovary is superior and the flower is hypogynous). Alternatively, the ovary may be embedded in the receptacle and therefore be located below the insertion level of the remaining floral organs (i.e., the ovary is inferior and the flower is epigynous). Flowers with a hypanthium may either have a superior ovary (perigyny; e.g., many Rosaceae) or an inferior ovary (epiperigyny). It is also possible that the ovary is inferior to a certain degree only, such as half-inferior, if the receptacle is surrounding the ovary to its mid-level. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘102. Ovary position (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -inferior: Flower with inferior ovary, where the ovary is embedded in the receptacle and therefore located below the insertion level of the remaining floral organs
    • -
    • -superior: Flower with superior ovary, where the ovary is positioned above the insertion level of the remaining floral organs
    • -
    • -half_inferior: Flower where the receptacle is surrounded by the ovary to its mid-level
    • -
    • -one_quarter_inferior: Flower where the receptacle surrounds up to one quarter of the ovary
    • -
    • -three_quarters_inferior: Flower where the receptacle surrounds more than three quarters of the ovary
    • -
    -
  • -
-
-
-

flower_ovules_per_functional_carpel_count -

-
    -
  • label: Number of ovules per functional carpel
  • -
  • description: Number of ovules per carpel recorded as a continuous character (with integer values of 1 and above). Reduced (sterile) carpels are not taken into account here. (Definition derived from Schoenenberger et al. (2020) for their character ‘411. Number of ovules per functional carpel (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 100000 {count}
  • -
-
-
-

flower_perianth_differentiation -

-
    -
  • label: Perianth differentiation
  • -
  • description: The ways in which perianth organs may look different from each other in a given flower. Typically, outer perianth parts are sepaloid and protect the other floral organs during floral development, while inner organs are often petaloid and play a role in pollinator attraction (Endress, 1994). However, it is also possible that all parts are either sepaloid or petaloid but remain differentiated in shape, size, and/or texture. In case of spiral perianths, differentiation may be continuous (i.e., gradual), whereby two successively initiated organs are very similar or only slightly different, while the outermost and innermost organs at both ends of the spiral are very different from each other (e.g., Chimonanthus). In the special case of perianths consisting of a single whorl, they are scored as undifferentiated. This perianth differentiation trait may be seen as both functional (the parting vs. sharing of functions among perianth parts) and developmental (the expression of a genetic program for different forms of perianth parts vs. a single program for a single type of perianth part morphology). Within-whorl differentiation, whereby organs of the same whorl take different forms, is common in zygomorphic flowers (e.g., Balsaminaceae, Fabaceae, Orchidaceae) but is not taken into account with this trait. This trait is not applicable when the perianth is absent. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘234. Perianth differentiation (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -undifferentiated: All tepals alike; includes a single undifferentiated whorl
    • -
    • -marked_differentiation_outer_sepaloid_inner_petaloid: A typical flower with calyx and corolla
    • -
    • -marked_differentiation_among_petaloid_tepals: All tepals alike; includes a single undifferentiated whorl
    • -
    • -marked_differentiation_among_sepaloid_tepals: A typical flower with calyx and corolla
    • -
    • -marked_differentiation: All tepals alike; includes a single undifferentiated whorl
    • -
    • -continuous_differentiation_outer_sepaloid_inner_petaloid: A typical flower with calyx and corolla
    • -
    • -continuous_differentiation_among_petaloid_tepals: All tepals alike; includes a single undifferentiated whorl
    • -
    • -continuous_differentiation_among_sepaloid_tepals: A typical flower with calyx and corolla
    • -
    • -weak_differentiation: All tepals alike; includes a single undifferentiated whorl
    • -
    • -very_weak_differentiation: A typical flower with calyx and corolla
    • -
    -
  • -
-
-
-

flower_perianth_fusion -

-
    -
  • label: Fusion of perianth
  • -
  • description: Fusion of perianth organs (congenital or postgenital) at anthesis, recorded on a continuous scale, from 0 (free parts) to 1 (parts fused along their entire length). Partial fusion was recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the length of perianth parts). In case of multiple whorls, this trait records within-whorl fusion. For example, if organs within each whorl are fused along their entire length, a trait value of 1 is recorded. In cases where organs of two whorls are fused into a common tubular structure, such as frequently observed in monocots (e.g., Polygonatum), the perianth is considered to be fused. If the two (or more) whorls differed in their extent of fusion, a range of trait values may be recorded. For example, if the calyx is only basally fused, up to 10% of its length, but the corolla is entirely fused, a range of 0.1 to 1 is recorded as the trait value for the species. (Definition derived from Schoenenberger et al. (2020) for their character ‘204. Fusion of perianth (C1)’)
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 1 {dimensionless}
  • -
-
-
-

flower_perianth_merism -

-
    -
  • label: Number of perianth parts in each whorl (Perianth merism)
  • -
  • description: The number of perianth parts in each whorl, recorded as a continuous trait (with integer values of 1 and above). Not applicable when perianth phyllotaxis is spiral or irregular or when the perianth is absent. (Definition derived from Schoenenberger et al. (2020) for their character ‘232. Perianth merism (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 50 {count}
  • -
-
-
-

flower_perianth_parts_count -

-
    -
  • label: Number of perianth parts
  • -
  • description: The total number of perianth parts, including sepals, petals, or any form of tepal. A value of zero was scored when the perianth is absent. In flowers with perianth whorls fused along their complete length (e.g., Convolvulus), perianth parts are counted based on merism (e.g., if a calyx has 5 distinct sepals and the corolla is entirely fused, then the corolla is often interpreted to consist of five fused petals), anatomy (e.g., number of vascular traces), development (e.g., number of primordia), or comparison with closely related taxa. (Definition derived from Schoenenberger et al. (2020) for their character ‘201. Number of perianth parts (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 1000 {count}
  • -
-
-
-

flower_perianth_phyllotaxis -

-
    -
  • label: Perianth phyllotaxis
  • -
  • description: Perianth phyllotaxis at anthesis. Perianth parts may be organised in one or more whorls or along a continuous spiral, usually with wide divergence angles more or less equal to 137.5 degrees. Less frequently, perianth phyllotaxis may be irregular. Perianth phyllotaxis at anthesis may differ from phyllotaxis of perianth part primordia at their inception and it is not uncommon that spirally initiated perianths become whorled later through development. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘230. Perianth phyllotaxy (D1)’, with more information of differentiating between trait values in this manuscript.)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -irregular: Perianth parts lacking any symmetrical organisation.
    • -
    • -spiral: Perianth parts organised along a continuous spiral, usually with wide divergence angles more or less equal to 137.5 degrees, the Fibonacci ‘golden angle’
    • -
    • -whorled: Perianth parts organised in one or more whorls
    • -
    -
  • -
-
-
-

flower_perianth_symmetry -

-
    -
  • label: Symmetry of perianth
  • -
  • description: Trait capturing the symmetry of the perianth. This trait is applied to the perianth as a whole. In case of flowers with two or more perianth whorls, species are considered actinomorphic if all whorls are actinomorphic and as zygomorphic if one or more whorls are zygomorphic. Trait is not applicable when the perianth is missing. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘207. Symmetry of perianth (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -actinomorphic_general: Perianth displaying radial symmetry
    • -
    • -actinomorphic_rotational: Perianth that can be equally divided into three or more identical sections that, when rotated around the center of the flower by some number of degrees, exactly match each other in orientation and shape.
    • -
    • -actinomorphic_strictly_polysymmetric: Polysymmetry, with three or more planes of bilateral symmetry
    • -
    • -actinomorphic_spiral: Perianth lacking a distinct plane of symmetry because their perianth parts are spirally arranged.
    • -
    • -asymmetric: Perianth lacking any planes of symmetry
    • -
    • -disymmetric: Perianth with two orthogonal planes of bilateral symmetry
    • -
    • -zygomorphic: Monosymmetric, with a single plane of bilateral symmetry
    • -
    -
  • -
-
-
-

flower_perianth_whorls_count -

-
    -
  • label: Number of perianth whorls
  • -
  • description: The number of perianth whorls as a continuous trait (with integer values of 1 and above). Not applicable when perianth phyllotaxis is spiral or irregular or when the perianth is absent. (Definition derived from Schoenenberger et al. (2020) for their character ‘231. Number of perianth whorls (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 15 {count}
  • -
-
-
-

flower_pollen_aperture_shape -

-
    -
  • label: Pollen grain aperture shape
  • -
  • description: Pollen grains are often described according to the shape, structure, and position of their apertures. This trait describes the main shape of the many described aperture types. Aperture terminology is partly determined by the position of the aperture on the pollen grain (either at the pole or at the equator) and pollen grain polarity, in turn, is determined by the spatial orientation of the microspore in the meiotic tetrad. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘5002. Aperture shape (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -absent: (uncertain)
    • -
    • -colporus: Pollen aperture shape that combines the groove of colpate and the pore of porate apertures
    • -
    • -colpus: Pollen aperture shape is elongate and grooved and may be positioned globally or equatorially
    • -
    • -pore: Pollen aperture shape is round and pore-like and may be positioned globally or equatorially
    • -
    • -ring_like: (uncertain)
    • -
    • -spiraperturate: Pollen grain with one or more spiral apertures
    • -
    • -sulcus: Pollen aperture shape is elongate and grooved and positioned at the pole
    • -
    • -syncolpus: Pollen grain with two or more simple (or compound) colpi, the ends of which join at the pole
    • -
    • -ulcus: Pollen aperture shape is round and pore-like and positioned at the pole
    • -
    -
  • -
-
-
-

flower_pollen_apertures_count -

-
    -
  • label: Number of pollen grain apertures
  • -
  • description: A pollen aperture is a structurally delimited region of the pollen grain wall through which the pollen tube emerges during pollen germination and which plays a role in harmomegathy. Here we report the number of apertures per pollen grain as a continuous character. A value of zero is scored when pollen is inaperturate (i.e. when there is no distinct aperture). Aperturate pollen is scored with integer values of 1 and above. (Definition derived from Schoenenberger et al. (2020) for their character ‘5000. Number of apertures (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 100 {count}
  • -
-
-
-

flower_structural_carpels_count -

-
    -
  • label: CNumber of structural carpels
  • -
  • description: Number of fertile or sterile carpels in bisexual or female flowers, recorded as a continuous character (with integer values of 1 and above). Includes the number of co-occurring carpellodes (sterile carpels) because this number is often more easily obtained from the literature than the actual number of fertile carpels. However, the number of carpellodes in male flowers is ignored for this character. In multicarpellate, unilocular gynoecia with complete carpel fusion up to the stigma (e.g., Primula), it may be difficult to assess the number of carpels unequivocally. In such cases, the number of carpels is scored only if it is well established based on anatomical or developmental investigations. Similarly, in gynoecia where one or more carpels are reduced (e.g., in the pseudomonomerous gynoecia of some Arecaceae, Stauffer et al., 2002), the total number of structural carpels is only scored when unequivocally determined in the literature. (Definition derived from Schoenenberger et al. (2020) for their character ‘401. Number of structural carpels (C1)’)
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 10000 {count}
  • -
-
-
-

flower_structural_sex_type -

-
    -
  • label: Floral structural sex
  • -
  • description: Structural flower sex type.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -bisexual: Hermaphrodite; flowers with both male and female reproductive organs
    • -
    • -incompletely_unisexual: Male flowers with pistillode and/or female flowers with staminodes
    • -
    • -unisexual: Flowers with either male or female reproductive organs
    • -
    -
  • -
-
-
-

flower_style_differentiation -

-
    -
  • label: Style differentiation
  • -
  • description: Presence or absence of a style, and, when present, the shape of the style in terms of length and width in relation to ovary length and width. This trait does not distinguish between fused or free styles. (Definition and trait values derived from Schoenenberger et al. (2020) for their character ‘404. Style differentiation (D1)’)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -absent: Stigma sessile
    • -
    • -present_length_and_shape_unknown: Style present, but shape unknown
    • -
    • -present_short_and_thick: Style present, and short and thick
    • -
    • -present_short_and_narrow: Style present, and short and narrow, including short filiform styles
    • -
    • -present_long_and_wide: Style present, and long and wide
    • -
    • -present_long_and_narrow: Style present, and long and narrow, including long filiform styles
    • -
    • -present_petaloid: Style present and petaloid
    • -
    • -continuous: When the style is an apical extension of carpel with decurrent stigma
    • -
    -
  • -
-
-
-

flower_style_fusion -

-
    -
  • label: Fusion of styles
  • -
  • description: The degree of fusion of styles at anthesis, recorded on a continuous scale, from 0 (free styles) to 1 (styles fused along their entire length, but excluding the stigmatic region). Partial fusion is recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the total length of the styles). This character is not applicable in unicarpellate flowers. (Definition derived from Schoenenberger et al. (2020) for their character ‘406. Fusion of styles (C1)’)
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 1 {dimensionless}
  • -
-
-
-

flowering_time -

-
    -
  • label: Range of flowering period
  • -
  • description: Months during which taxon has open (anthetic) flowers; keyed as a sequences of 12 Ns (not flowering) and Ys (flowering) starting with January
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • **:
    • -
    -
  • -
-
-
-

fruit_Ca_per_dry_mass -

-
    -
  • label: Fruit calcium (Ca) content per unit fruit dry mass
  • -
  • description: Fruit calcium (Ca) content per unit fruit dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.5 - 100 mg/g
  • -
-
-
-

fruit_colour -

-
    -
  • label: Fruit colour
  • -
  • description: Human visible dominant colour of a fresh fruit’s exocarp (outermost layer) at maturity. If a fruit is multiple colors, they are listed as a space-delimited string.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -pink: pink
    • -
    • -red: red
    • -
    • -orange: orange
    • -
    • -yellow: yellow
    • -
    • -green: green
    • -
    • -blue: blue
    • -
    • -purple: purple
    • -
    • -white: white
    • -
    • -cream: cream
    • -
    • -brown: brown
    • -
    • -black: black
    • -
    • -grey: grey
    • -
    -
  • -
-
-
-

fruit_dehiscence -

-
    -
  • label: Fruit dehiscence (dehiscent /indehiscent)
  • -
  • description: Binary variable, dividing fruits into ‘dehiscent’ versus ‘indehiscent’ based on whether the individual fruit units are dehiscent when mature.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -dehiscent: Fruits are dehiscent when mature.
    • -
    • -indehiscent: Fruits are indehiscent when mature.
    • -
    -
  • -
-
-
-

fruit_dry_mass -

-
    -
  • label: Fruit dry mass
  • -
  • description: Fruit dry mass, including seeds. Fruits will generally be oven-dried.
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 1e-04 - 1e+06 mg
  • -
-
-
-

fruit_fleshiness -

-
    -
  • label: Fruit fleshiness (fleshy / dry)
  • -
  • description: Binary variable, dividing entire, true fruits into ‘dry’ versus ‘fleshy’ based on whether their botanical fruit type is fleshy when mature and fresh. This trait explicitly refers to fruit fleshiness, not diaspore or seed fleshiness; diaspore fleshiness is a separate trait.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -dry: Fruits are dry when mature and fresh.
    • -
    • -fleshy: Fruits are fleshy when mature and fresh.
    • -
    -
  • -
-
-
-

fruit_height -

-
    -
  • label: Fruit height
  • -
  • description: Shorter linear width dimension of a fresh fruit and generally not reported in fruits where the width and height are identical; orthogonal to the length, the base-to-apex dimension.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 2000 mm
  • -
-
-
-

fruit_K_per_dry_mass -

-
    -
  • label: Fruit potassium (K) content per unit fruit dry mass
  • -
  • description: Fruit potassium (K) content per unit fruit dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.5 - 100 mg/g
  • -
-
-
-

fruit_length -

-
    -
  • label: Fruit length
  • -
  • description: Linear dimension from the base to the apex of a fresh fruit, even if this is not the longest dimension.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 2000 mm
  • -
-
-
-

fruit_Mg_per_dry_mass -

-
    -
  • label: Fruit magnesium (Mg) content per unit fruit dry mass
  • -
  • description: Fruit magnesium (Mg) content per unit fruit dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.05 - 10 mg/g
  • -
-
-
-

fruit_N_per_dry_mass -

-
    -
  • label: Fruit nitrogen (N) content per unit fruit dry mass
  • -
  • description: Fruit nitrogen (N) content per unit fruit dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.5 - 100 mg/g
  • -
-
-
-

fruit_P_per_dry_mass -

-
    -
  • label: Fruit phosphorus (P) content per unit fruit dry mass
  • -
  • description: Fruit phosphorus (P) content per unit fruit dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

fruit_S_per_dry_mass -

-
    -
  • label: Fruit sulphur (S) content per unit fruit dry mass
  • -
  • description: Fruit sulphur (S) content per unit fruit dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.05 - 10 mg/g
  • -
-
-
-

fruit_type -

-
    -
  • label: Fruit type
  • -
  • description: Fruit types
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -achene: A simple, dry, indehiscent fruit with a single seed that is attached to the pericarp at one point only. (synonym, cypsela)
    • -
    • -anthocarp: A ripened ovary surrounded by attached accessory floral tissues; the floral tissues may be fleshy or dry. (synonym, accessory_fruit, pseudocarp, diclesium)
    • -
    • -berry: A simple, indehiscent fruit with one to many seeds embedded in a fleshy pericarp.
    • -
    • -capsule: A dry, dehiscent fruit composed of two or more united carpels; different types of capsules distinguished by type of dehiscence (e.g. valves, slits, pores).
    • -
    • -caryopsis: A simple, dry, indehiscent fruit with a single seed which is fused to the pericarp at one point only; the fruit type of all Poaceae (synonym, grain)
    • -
    • -compound_fruit_other: A fruit derived from more than one flower. (synonym, aggregate_fruit)
    • -
    • -drupe: A simple indehiscent fruit with a hard, stony endocarp and a fleshy mesocarp.
    • -
    • -follicle: A dry, dehiscent fruit derived from a single carpel that splits along one suture.
    • -
    • -legume: A dry, dehiscent fruit derived from a single carpel that splits along two sutures; applies to Fabaceae. (synonym, pod)
    • -
    • -legume_indehiscent: A dry, indehiscent fruit derived from a single carpel; applies to Fabaceae.
    • -
    • -mericarp: A fruitlet (seed-containing portion of a fruit) that is a half-carpel; the individual fruitlets separate from one another at maturity; a specific type of schizocarp. (In some datasets, term likely refers to any fruitlet derived from a portion of a schizocarp that separates at maturity, not explicitly just a half-carpel.)
    • -
    • -multiple_fruit: A fruit composed of several fruitlets developing from a single flower (e.g. raspberries, magnolias); fruits developing from more than one flower are included under compound (aggregate) fruits.
    • -
    • -nut: A simple, dry, indehiscent fruit with a single seed and a hard pericarp.
    • -
    • -nutlet: A diminutive of nut, referring to a simple, dry, indehiscent structure with a single seed that might be an entire fruit (nut; monocarp) or a portion of a fruit, such as the individual components derived from an apocarp (fruit with multiple unfused ovaries) or schizocarp (fruit with multiple ovaries that separate at maturity).
    • -
    • -pome: A fleshy fruit with the bulk of the fleshy tissue derived from flora tissue that surrounds the inferior ovary.
    • -
    • -pyrene: A fleshy fruit in which the seed(s) are covered by a hard layer of endocarp.
    • -
    • -samara: A winged, dry fruit.
    • -
    • -schizocarp: Category that includes all fruits derived from a compound pistil that separate into individual carpellary constituents at maturity; broad terms that includes dry and fleshy fruits, some with accessory tissues, others without. The individual seed-containing units that a schizocarp breaks apart into include mericarps, nutlets, and fruitlets.
    • -
    • -silique: A type of capsule (dry, dehiscent fruit) where the fruit is divided into two parts by a thin partition; more than three times as long as wide; applies to Brassicaceae (synonym, silicle, siliqua)
    • -
    • -strobilus: A modified reproductive shoot system found in many nonflowering plants, especially gymnosperms, comprised of overlapping bracts (scales). (synonym, cone)
    • -
    • -syncarp: A compound fruit produced by the adhesion of the fruits from several flowers.
    • -
    • -syconium: A fleshy compound fruit, in which the fruitlets are enclosed in accessory material, such as the hollow-centered fruits of Moraceae. (synonym, synconium, fig)
    • -
    • -utricle: A bladdery or inflated dry fruit with a single seed; essential an achene in which the pericarp is significantly larger than the mature seed.
    • -
    -
  • -
-
-
-

fruit_wall_thickness -

-
    -
  • label: Fruit wall thickness
  • -
  • description: Fruit wall thickness of a mature fresh fruit. This term sometimes applies explicitly to the entire pericarp (exocarp + mesocarp + endocarp), but more frequently will have a functional meaning, referring to the outer fleshy layer which might be just some components of the peripcarp, most frequently the exocarp and mesocarp.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1000 mm
  • -
-
-
-

fruit_width -

-
    -
  • label: Fruit width
  • -
  • description: Greatest linear width dimension of a fresh fruit, sometimes referred to as ‘diameter’ in fruits where the width and height are identical; orthogonal to the length, the base-to-apex dimension.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 2000 mm
  • -
-
-
-

fruiting_time -

-
    -
  • label: Range of fruiting time
  • -
  • description: Months during which taxon produces fruit with mature seeds; keyed as a sequences of 12 Ns (not flowering) and Ys (flowering) starting with January.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • **:
    • -
    -
  • -
-
-
-

genome_size -

-
    -
  • label: Plant genome size
  • -
  • description: Mass of the plant’s genome
  • -
  • type: numeric
  • -
  • units: pg
  • -
  • allowable range: 0.5 - 100 pg
  • -
-
-
-

huber_value -

-
    -
  • label: Huber value
  • -
  • description: Sapwood area to leaf area ratio
  • -
  • type: numeric
  • -
  • units: mm2{sapwood}/mm2{leaf}
  • -
  • allowable range: 1e-06 - 0.2 mm2{sapwood}/mm2{leaf}
  • -
-
-
-

hydraulic_safety_margin_50 -

-
    -
  • label: Hydraulic safety margin (versus 50% loss conductivity)
  • -
  • description: Difference between minimum observed water potential and water potential at which 50% of conductivity is lost.
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -5 - 10 MPa
  • -
-
-
-

leaf_absorption -

-
    -
  • label: Proportion of incoming visible light that is absorbed by the leaf
  • -
  • description: Proportion of incoming visible light (between 400-700 nm) that is absorbed by the leaf
  • -
  • type: numeric
  • -
  • units: umol/umol
  • -
  • allowable range: 0.01 - 1 umol/umol
  • -
-
-
-

leaf_Al_per_dry_mass -

-
    -
  • label: Leaf aluminium (Al) content per unit leaf dry mass
  • -
  • description: Leaf aluminium (Al) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0.01 - 12000 mg/kg
  • -
-
-
-

leaf_area -

-
    -
  • label: Leaf area
  • -
  • description: The 2-dimensional projected (scanned) area of the surface of a leaf or a leaf analogue (leaflet, cladode, phyllode).
  • -
  • type: numeric
  • -
  • units: mm2
  • -
  • allowable range: 0.1 - 1e+07 mm2
  • -
-
-
-

leaf_area_ratio -

-
    -
  • label: Leaf area ratio
  • -
  • description: The total leaf area of a plant divided by the plant’s total dry mass; LAR.
  • -
  • type: numeric
  • -
  • units: mm2/mg
  • -
  • allowable range: 0.05 - 100 mm2/mg
  • -
-
-
-

leaf_arrangement -

-
    -
  • label: Leaf arrangement across stem nodes.
  • -
  • description: Leaf arrangement across stem nodes, indicating the 3-dimensional arrangement of leaves along the length of the stem.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -decussate: When sequential pairs of opposite leaves attach at right angles to the pair above or below.
    • -
    • -distichous: When alternate or opposite leaves are arranged in two opposite rows.
    • -
    • -spiral: When alternate leaves are attached in a progressive spiral pattern along the stem.
    • -
    • -fasciculate: A tight bundle or cluster of leaves attached to the stem in a single location, generally due to the shortening of internodes.
    • -
    • -crowded: When internode length varies considerably along a stem, such that leaves appear crowded or tufted.
    • -
    -
  • -
-
-
-

leaf_ash_per_dry_mass -

-
    -
  • label: Leaf ash content per dry mass
  • -
  • description: Leaf ash content per dry mass, where leaf ash is the component of the leaf remaining after combustion.
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 100 g/g
  • -
-
-
-

leaf_axil_angle -

-
    -
  • label: Angle between a leaf and stem
  • -
  • description: The angle between a shoot and a leaf that branches from the shoot axis.
  • -
  • type: numeric
  • -
  • units: deg
  • -
  • allowable range: 0 - 180 deg
  • -
-
-
-

leaf_B_per_dry_mass -

-
    -
  • label: Leaf boron (B) content per unit leaf dry mass
  • -
  • description: Leaf boron (B) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0.01 - 1000 mg/kg
  • -
-
-
-

leaf_base_shape -

-
    -
  • label: Leaf base shape
  • -
  • description: The shape of the basal margin of a leaf.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -attenuate: Basal leaf margin abruptly incurved (concave), the two sides intersecting at an angle of less than 45°.
    • -
    • -auriculate: Basal leaf margin with two rounded lobes. The leaf margin above the lobes is concave. The petiole attaches in the incised region between the lobes.
    • -
    • -cuneate: Basal leaf margin approximately straight, the two sides intersecting at an angle between 45° to 90°.
    • -
    • -hastate: Basal leaf margin with two lobes oriented outward, such that they are at approximately 90° relative to the central axis and the leaf margin is fairly flat at the base.
    • -
    • -sagittate: Basal leaf margin with two lobes oriented downward, away from apex. The petiole attaches in the concave region between the lobes.
    • -
    -
  • -
-
-
-

leaf_C_per_dry_mass -

-
    -
  • label: Leaf carbon (C) content per unit leaf dry mass
  • -
  • description: Leaf carbon (C) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 50 - 750 mg/g
  • -
-
-
-

leaf_Ca_per_dry_mass -

-
    -
  • label: Leaf calcium (Ca) content per unit leaf dry mass
  • -
  • description: Leaf calcium (Ca) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 1000 mg/g
  • -
-
-
-

leaf_carotenoid_per_area -

-
    -
  • label: Leaf carotenoid content per unit leaf area
  • -
  • description: Leaf carotenoid content per unit leaf area
  • -
  • type: numeric
  • -
  • units: umol/m2
  • -
  • allowable range: 10 - 1000 umol/m2
  • -
-
-
-

leaf_carotenoid_per_dry_mass -

-
    -
  • label: Leaf carotenoid content per unit leaf dry mass
  • -
  • description: Leaf carotenoid content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mmol/kg
  • -
  • allowable range: 0.1 - 10 mmol/kg
  • -
-
-
-

leaf_cell_wall_fraction -

-
    -
  • label: Leaf cell wall fraction (fraction of cell wall material recovered from total leaf biomass)
  • -
  • description: Fraction of total leaf biomass that is cell wall material
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.1 - 1 mg/mg
  • -
-
-
-

leaf_cell_wall_N_per_cell_wall_dry_mass -

-
    -
  • label: Leaf cell wall nitrogen concentration
  • -
  • description: Proportion of leaf cell wall material that is nitrogen
  • -
  • type: numeric
  • -
  • units: mmol{N}/g
  • -
  • allowable range: 0.1 - 10 mmol{N}/g
  • -
-
-
-

leaf_cell_wall_N_per_leaf_N -

-
    -
  • label: Leaf cell wall nitrogen fraction
  • -
  • description: Proportion of all N in leaves that is found in the leaf cell walls
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.01 - 1 mg/mg
  • -
-
-
-

leaf_cellulose_per_dry_mass -

-
    -
  • label: Leaf cellulose per unit leaf dry mass
  • -
  • description: Leaf cellulose per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.01 - 1 mg/mg
  • -
-
-
-

leaf_chlorophyll_A_B_ratio -

-
    -
  • label: Ratio of leaf chlorophyll A to chlorophyll B
  • -
  • description: Ratio of leaf chlorophyll A to chlorophyll B
  • -
  • type: numeric
  • -
  • units: umol/umol
  • -
  • allowable range: 0.1 - 6 umol/umol
  • -
-
-
-

leaf_chlorophyll_A_per_area -

-
    -
  • label: Leaf chlorophyll A content per leaf area
  • -
  • description: Leaf chlorophyll A content per leaf area
  • -
  • type: numeric
  • -
  • units: umol/m2
  • -
  • allowable range: 50 - 2000 umol/m2
  • -
-
-
-

leaf_chlorophyll_A_per_dry_mass -

-
    -
  • label: Leaf chlorophyll A content per unit leaf dry mass
  • -
  • description: Leaf chlorophyll A content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mmol/kg
  • -
  • allowable range: 0.1 - 10 mmol/kg
  • -
-
-
-

leaf_chlorophyll_B_per_area -

-
    -
  • label: Leaf chlorophyll B content per leaf area
  • -
  • description: Leaf chlorophyll B content per leaf area
  • -
  • type: numeric
  • -
  • units: umol/m2
  • -
  • allowable range: 10 - 1000 umol/m2
  • -
-
-
-

leaf_chlorophyll_B_per_dry_mass -

-
    -
  • label: Leaf chlorophyll B content per unit leaf dry mass
  • -
  • description: Leaf chlorophyll B content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mmol/kg
  • -
  • allowable range: 0.01 - 10 mmol/kg
  • -
-
-
-

leaf_chlorophyll_per_area -

-
    -
  • label: Sum of chlorophyll A and B per leaf area
  • -
  • description: Sum of chlorophyll A and B per leaf area
  • -
  • type: numeric
  • -
  • units: umol/m2
  • -
  • allowable range: 10 - 2000 umol/m2
  • -
-
-
-

leaf_chlorophyll_per_dry_mass -

-
    -
  • label: Leaf chlorophyll content per unit leaf dry mass
  • -
  • description: Leaf chlorophyll content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mmol/kg
  • -
  • allowable range: 0.1 - 15 mmol/kg
  • -
-
-
-

leaf_chloroplast_CO2_concentration -

-
    -
  • label: CO2 concentration inside chloroplasts
  • -
  • description: CO2 concentration inside chloroplasts
  • -
  • type: numeric
  • -
  • units: umol{CO2}/umol
  • -
  • allowable range: 50 - 1000 umol{CO2}/umol
  • -
-
-
-

leaf_Cl_per_dry_mass -

-
    -
  • label: Leaf chlorine (Cl) content per unit leaf dry mass
  • -
  • description: Leaf chlorine (Cl) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 10 - 10000 mg/kg
  • -
-
-
-

leaf_CN_ratio -

-
    -
  • label: Leaf carbon/nitrogen (C/N) ratio
  • -
  • description: Leaf carbon/nitrogen (C/N) ratio
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 10 - 1000 g/g
  • -
-
-
-

leaf_Co_per_dry_mass -

-
    -
  • label: Leaf cobalt (Co) content per unit leaf dry mass
  • -
  • description: Leaf cobalt (Co) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: ppm
  • -
  • allowable range: 0.01 - 150 ppm
  • -
-
-
-

leaf_compoundness -

-
    -
  • label: Leaf compoundness
  • -
  • description: A binary trait that indicates whether a leaf lamina is simple or divided into discontinuous leaflets (compound).
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -simple: A leaf with a single undivided blade. [PO:0020042]
    • -
    • -compound: A leaf that is divided into multiple leaflets. [PO:0020043]
    • -
    -
  • -
-
-
-

leaf_Cr_per_dry_mass -

-
    -
  • label: Leaf chromium (Cr) content per unit leaf dry mass
  • -
  • description: Leaf chromium (Cr) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: ppm
  • -
  • allowable range: 0.01 - 150 ppm
  • -
-
-
-

leaf_Cu_per_dry_mass -

-
    -
  • label: Leaf copper (Cu) content per unit leaf dry mass
  • -
  • description: Leaf copper (Cu) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0.01 - 150 mg/kg
  • -
-
-
-

leaf_cuticle_thickness_abaxial -

-
    -
  • label: Lower cuticle thickness
  • -
  • description: Thickness of the lower cuticle
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 0.1 - 100 um
  • -
-
-
-

leaf_cuticle_thickness_adaxial -

-
    -
  • label: Upper cuticle thickness
  • -
  • description: Thickness of the upper cuticle
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 0.1 - 100 um
  • -
-
-
-

leaf_dark_respiration_per_area -

-
    -
  • label: Leaf respiration rate per unit leaf area, in the dark
  • -
  • description: Leaf respiration rate per unit leaf area, in the dark
  • -
  • type: numeric
  • -
  • units: umol{CO2}/m2/s
  • -
  • allowable range: 0.001 - 15 umol{CO2}/m2/s
  • -
-
-
-

leaf_dark_respiration_per_dry_mass -

-
    -
  • label: Leaf respiration rate per unit leaf dry mass, in the dark
  • -
  • description: Leaf respiration rate per unit leaf dry mass, in the dark
  • -
  • type: numeric
  • -
  • units: umol{CO2}/g/s
  • -
  • allowable range: 0.001 - 1 umol{CO2}/g/s
  • -
-
-
-

leaf_dark_transpiration_per_area -

-
    -
  • label: Leaf transpiration rate per unit leaf area, in the dark
  • -
  • description: Leaf transpiration rate per unit leaf area, in the dark
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 1e-04 - 10000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_delta13C -

-
    -
  • label: Leaf carbon (C) isotope signature (delta 13C)
  • -
  • description: Leaf carbon stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -50 - 0 {delta}[ppth]
  • -
-
-
-

leaf_delta15N -

-
    -
  • label: Leaf nitrogen (N) isotope signature (delta 15N)
  • -
  • description: Leaf nitrogen stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -25 - 75 {delta}[ppth]
  • -
-
-
-

leaf_delta18O -

-
    -
  • label: Leaf oxygen (O) isotope signature (delta 18O)
  • -
  • description: Leaf oxygen stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -10 - 50 {delta}[ppth]
  • -
-
-
-

leaf_density -

-
    -
  • label: Leaf tissue density
  • -
  • description: Leaf tissue density
  • -
  • type: numeric
  • -
  • units: mg/mm3
  • -
  • allowable range: 0.05 - 1.1 mg/mm3
  • -
-
-
-

leaf_dry_mass -

-
    -
  • label: Leaf dry mass
  • -
  • description: The oven dry mass of a leaf or leaf analogue (leaflet, cladode, phyllode).
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 0.01 - 15000 mg
  • -
-
-
-

leaf_dry_matter_content -

-
    -
  • label: Leaf dry mass per unit leaf fresh mass (Leaf dry matter content, LDMC)
  • -
  • description: Leaf dry mass per unit leaf fresh mass. (See also leaf_water_content_per_mass, the ratio of water content to leaf dry mass, recorded by some studies.)
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.001 - 2 g/g
  • -
-
-
-

leaf_epidermal_cell_density_abaxial -

-
    -
  • label: Epidermal cell density on the lower leaf surface
  • -
  • description: Epidermal cell density on the lower leaf surface
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 100 - 10000 {count}/mm2
  • -
-
-
-

leaf_epidermal_cell_density_adaxial -

-
    -
  • label: Epidermal cell density on the upper leaf surface
  • -
  • description: Epidermal cell density on the upper leaf surface
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 100 - 10000 {count}/mm2
  • -
-
-
-

leaf_epidermal_cell_density_both_sides -

-
    -
  • label: Epidermal cell density averaged across the upper and lower leaf surfaces
  • -
  • description: Epidermal cell density averaged across the upper and lower leaf surfaces
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 100 - 10000 {count}/mm2
  • -
-
-
-

leaf_epidermis_Ca_per_fresh_mass -

-
    -
  • label: Ca content of epidermal cells
  • -
  • description: Ca content of epidermal cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 1 - 500 umol/g
  • -
-
-
-

leaf_epidermis_P_per_fresh_mass -

-
    -
  • label: P content of epidermal cells
  • -
  • description: P content of epidermal cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 0 - 10 umol/g
  • -
-
-
-

leaf_epidermis_thickness -

-
    -
  • label: Thickness of the epidermis, leaf surface not specified
  • -
  • description: Thickness of the epidermis, leaf surface not specified
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 100 um
  • -
-
-
-

leaf_epidermis_thickness_abaxial -

-
    -
  • label: Thickness of the epidermis on the lower leaf surface
  • -
  • description: Thickness of the epidermis on the lower leaf surface
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 100 um
  • -
-
-
-

leaf_epidermis_thickness_adaxial -

-
    -
  • label: Thickness of the epidermis on the upper leaf surface
  • -
  • description: Thickness of the epidermis on the upper leaf surface
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 100 um
  • -
-
-
-

leaf_Fe_per_dry_mass -

-
    -
  • label: Leaf iron (Fe) content per unit leaf dry mass
  • -
  • description: Leaf iron (Fe) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 1 - 10000 mg/kg
  • -
-
-
-

leaf_fluorescence_fv_over_fm -

-
    -
  • label: Fv/Fm
  • -
  • description: Chlorophyll fluorescence measurement that indicates whether plant stress affects photo-system II in a dark adapted state
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0.2 - 1 {dimensionless}
  • -
-
-
-

leaf_fresh_mass -

-
    -
  • label: Leaf fresh mass
  • -
  • description: The fresh mass of a leaf or leaf analogue (leaflet, cladode, phyllode).
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 0.1 - 30000 mg
  • -
-
-
-

leaf_fresh_mass_per_area -

-
    -
  • label: Leaf fresh mass per leaf area
  • -
  • description: The ratio of leaf fresh mass to leaf area, measured on an entire leaf including the petiole.
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 200 - 2000 g/m2
  • -
-
-
-

leaf_glaucousness -

-
    -
  • label: Whether mature leaves are glaucous
  • -
  • description: Variable describing whether or not mature adult phase leaves have a glaucous appearance, the colour due to being covered with a smooth, usually whitish to bluish epicuticular wax that can easily be rubbed off.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glaucous: Mature (fully expanded) leaves on adult plants have a waxy coating, giving them a glaucous appearance.
    • -
    • -not_glaucous: Mature (fully expanded) leaves on adult plants do not have a glaucous appearance.
    • -
    -
  • -
-
-
-

leaf_guard_cell_length -

-
    -
  • label: Guard cell length
  • -
  • description: Length of guard cells
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 10 - 200 um
  • -
-
-
-

leaf_hairs_adult_leaves -

-
    -
  • label: Presence of hairs on mature (fully expanded) leaves
  • -
  • description: Variable describing whether or not mature (fully expanded) adult phase leaves on adult plants have hairs (trichomes).
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glabrous: Mature (fully expanded) leaves on adult plants do not have hairs (trichomes).
    • -
    • -hairy: Mature (fully expanded) leaves on adult plants have hairs (trichomes).
    • -
    -
  • -
-
-
-

leaf_hairs_immature_leaves -

-
    -
  • label: Presence of hairs on immature (still expanding) leaves
  • -
  • description: Variable describing whether or not immature (still expanding) adult phase leaves on adult plants have hairs (trichomes).
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glabrous: Immature (still expanding) leaves do not have hairs (trichomes).
    • -
    • -hairy: Immature (still expanding) leaves have hairs (trichomes).
    • -
    -
  • -
-
-
-

leaf_hairs_juvenile_leaves -

-
    -
  • label: Presence of hairs on juvenile phase leaves
  • -
  • description: Variable describing whether or not fully expanded juvenile phase leaves (on adult or juvenile plants) have hairs (trichomes).
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glabrous: Juvenile phase leaves do not have hairs (trichomes).
    • -
    • -hairy: Juvenile phase leaves have hairs (trichomes).
    • -
    -
  • -
-
-
-

leaf_hydraulic_vulnerability -

-
    -
  • label: Leaf hydraulic vulnerability
  • -
  • description: Leaf water potential value at which leaf hydraulic conductance has declined by 50% from the mean maximum rate
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 0.001 - 40 MPa
  • -
-
-
-

leaf_hypodermis_Ca_per_fresh_mass -

-
    -
  • label: Ca content of hypodermis cells
  • -
  • description: Ca content of hypodermis cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 1 - 500 umol/g
  • -
-
-
-

leaf_hypodermis_P_per_fresh_mass -

-
    -
  • label: P content of hypodermis cells
  • -
  • description: P content of hypodermis cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 0 - 10 umol/g
  • -
-
-
-

leaf_hypodermis_thickness_abaxial -

-
    -
  • label: Lower hypodermis thickness
  • -
  • description: Thickness of the lower hypodermis
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 100 um
  • -
-
-
-

leaf_hypodermis_thickness_adaxial -

-
    -
  • label: Upper hypodermis thickness
  • -
  • description: Thickness of the upper hypodermis
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 100 um
  • -
-
-
-

leaf_inclination_angle -

-
    -
  • label: Leaf inclination angle, relative to horizontal
  • -
  • description: The inclination angle of the upper (adaxial) leaf lamina surface relative to a horizontal plane, such that a leaf surface facing the solar zenith has an angle of 0.
  • -
  • type: numeric
  • -
  • units: deg
  • -
  • allowable range: -90 - 90 deg
  • -
-
-
-

leaf_insoluble_protein_per_area -

-
    -
  • label: Insoluble protein per leaf area
  • -
  • description: Mass of insoluble protein per leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 20 g/m2
  • -
-
-
-

leaf_intercellular_CO2_concentration_at_Aambient -

-
    -
  • label: internal CO2 concentration under ambient conditions
  • -
  • description: CO2 concentration in interstitial spaces under ambient conditions
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol
  • -
  • allowable range: 50 - 1300 umol{CO2}/mol
  • -
-
-
-

leaf_intercellular_CO2_concentration_at_Amax -

-
    -
  • label: internal CO2 concentration during Amax measurement
  • -
  • description: CO2 concentration in interstitial spaces during Amax measurement
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol
  • -
  • allowable range: 50 - 2100 umol{CO2}/mol
  • -
-
-
-

leaf_intercellular_CO2_concentration_at_Asat -

-
    -
  • label: internal CO2 concentration during Asat measurement
  • -
  • description: CO2 concentration in interstitial spaces during Asat measurement
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol
  • -
  • allowable range: 10 - 1300 umol{CO2}/mol
  • -
-
-
-

leaf_intercellular_CO2_concentration_to_atmospheric_CO2_concentration_ratio -

-
    -
  • label: Ratio of internal to external CO2 concentrations
  • -
  • description: Ratio of internal to external CO2 concentrations
  • -
  • type: numeric
  • -
  • units: umol{CO2_internal}/umol{CO2_ambient}
  • -
  • allowable range: 0 - 1.3 umol{CO2_internal}/umol{CO2_ambient}
  • -
-
-
-

leaf_internal_parenchyma_Ca_per_fresh_mass -

-
    -
  • label: Ca content of internal parenchyma cells
  • -
  • description: Ca content of internal parenchyma cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 1 - 500 umol/g
  • -
-
-
-

leaf_internal_parenchyma_P_per_fresh_mass -

-
    -
  • label: P content of internal parenchyma cells
  • -
  • description: P content of internal parenchyma cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 0 - 10 umol/g
  • -
-
-
-

leaf_K_per_area -

-
    -
  • label: Leaf potassium (K) content per unit leaf area
  • -
  • description: Leaf potassium (K) content per unit leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 10 g/m2
  • -
-
-
-

leaf_K_per_dry_mass -

-
    -
  • label: Leaf potassium (K) content per unit leaf dry mass
  • -
  • description: Leaf potassium (K) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

leaf_lamina_division -

-
    -
  • label: Leaf divisions
  • -
  • description: A trait that captures the types of lobed leaves and compound leaves, including the arrangement of the lobes or leaflets relative to the midrib or other primary veins and the number of orders of axes across which there are incisions or divisions.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -pinnately_lobed: Leaf with divisions that are symmetrical across a central axis, usually the midvein.
    • -
    • -palmately_lobed: Leaf with divisions that radiate from a single point, usually the basal junction of major veins.
    • -
    • -pinnatifid: Leaf with lobes that extend less than half-way to the midrib.
    • -
    • -bipinnatifid: Leaf that is twice pinnatifid, with two series of lobes that extend less than half-way to the midrib.
    • -
    • -pinnatipartite: Leaf with lobes that extend more than half-way to the midrib.
    • -
    • -pinnatisect: Leaf with lobes that extend nearly to the midrib, but the divisions are not separated into distinct leaflets.
    • -
    • -bipinnatipartite: Leaf that is twice pinnatipartite, with two series of lobes that extend more than half-way to the midrib.
    • -
    • -bipinnatisect: Leaf that is twice pinnatisect, with two series of lobes that extend nearly to the midrib, but the divisions are not separated into distinct leaflets.
    • -
    • -trichotomously_divided: Leaf divided repeatedly into three lobes.
    • -
    • -dichotomously_divided: Leaf divided repeatedly into two lobes.
    • -
    • -bipartite: Leaf divided into two lobes.
    • -
    • -tripartite: Leaf divided into three lobes.
    • -
    • -pinnately_divided: Leaf divided into leaflets that attach along a central axis. [PATO_0000410]
    • -
    • -palmately_divided: Leaf divided into leaflets that attach to a central point. (synonym, digitate)
    • -
    • -bipinnate: Leaf that is twice pinnate, having pinnate leaflets that are themselves pinnately divided.
    • -
    • -tripinnate: Leaf that is three times pinnate, with pinnate leaflets that are twice more pinnately divided.
    • -
    • -trifoliate: Leaf divided into three leaflets. (synonym, ternate, trifoliolate)
    • -
    -
  • -
-
-
-

leaf_lamina_mass_per_area -

-
    -
  • label: Leaf lamina mass per area
  • -
  • description: The ratio of leaf dry mass to leaf area, measured on a piece of the leaf lamina that does not include the petiole or major veins.
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 1 - 1000 g/m2
  • -
-
-
-

leaf_length -

-
    -
  • label: Leaf length
  • -
  • description: Length of a leaf (including the petiole) or a leaf analogue, from the leaf apex to the leaf axil (base).
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.1 - 1e+05 mm
  • -
-
-
-

leaf_lifespan -

-
    -
  • label: Leaf lifespan (longevity)
  • -
  • description: Duration of time that an individual leaf is attached to the stem and physiologically functional.
  • -
  • type: numeric
  • -
  • units: mo
  • -
  • allowable range: 1 - 1000 mo
  • -
-
-
-

leaf_light_respiration_per_area -

-
    -
  • label: Leaf respiration rate per unit leaf area, in the light
  • -
  • description: Leaf respiration rate per unit leaf area, in the light
  • -
  • type: numeric
  • -
  • units: umol{CO2}/m2/s
  • -
  • allowable range: 1e-05 - 10000 umol{CO2}/m2/s
  • -
-
-
-

leaf_lignin_per_dry_mass -

-
    -
  • label: Leaf lignin per unit leaf dry mass
  • -
  • description: Leaf lignin per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.01 - 1 mg/mg
  • -
-
-
-

leaf_lobation -

-
    -
  • label: Leaf lobation
  • -
  • description: A trait that indicates whether or not a leaf lamina displays any divisions or dissections on a 2-dimensional plane that extend greater than 1/8 of the distance to the midrib.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -unlobed: Leaf margin lacks projections or indentations that extend more than 1/8 of the distance to the midrib.
    • -
    • -lobed: Leaf margin has incisions, either rounded or sharp-tipped, that extend more than 1/8 of the distance to the midrib.
    • -
    • -lobed_deep: Leaf margin with lobes that extend more than halfway to the midrib. (synonym, parted, divided)
    • -
    • -lobed_shallow: Leaf margin with lobes that extend less than halfway to the midrib. (synonym, cleft)
    • -
    -
  • -
-
-
-

leaf_major_vein_density -

-
    -
  • label: Length of all leaf lamina veins per unit area.
  • -
  • description: The length of major leaf lamina veins per unit leaf area, where primary, secondary and tertiary leaf lamina veins are considered major veins.
  • -
  • type: numeric
  • -
  • units: mm/mm2
  • -
  • allowable range: 0.01 - 20 mm/mm2
  • -
-
-
-

leaf_margin -

-
    -
  • label: Leaf margin
  • -
  • description: Shape of the leaf margin, referencing incisions or projections in the outermost 1/8 of the leaf lamina.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -entire: Leaf margin lacks projections or indentations that extend less than 1/8 of the distance to the midrib.
    • -
    • -toothed: Leaf margin has small projections or lobes along the edge of the leaf lamina. This is a broad term that includes serrate, dentate, and crenulate.
    • -
    • -toothed_serrate: Type of toothed leaf margin with sharp teeth that are angled toward the tip of the leaf. (synonym, saw-toothed)
    • -
    • -toothed_dentate: Type of toothed leaf margin with sharp teeth that point outwards at right angles to the leaf margin.
    • -
    • -toothed_crenate: Type of toothed leaf margin with teeth that are rounded or obtuse, rather than having a sharp apex. [PO:0025519]
    • -
    -
  • -
-
-
-

leaf_margin_posture -

-
    -
  • label: Leaf margin posture
  • -
  • description: The posture (curvature or curling) of the leaf margin.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -revolute: Leaf margins along the side of the leaf are rolled under or downward. [PATO:0001963]
    • -
    • -recurved: Leaf tip is curved outward or downward. [PATO:0002211]
    • -
    • -flat: Leaf lamina, including margins, is a flat plane. [PATO:0000407]
    • -
    -
  • -
-
-
-

leaf_mass_fraction -

-
    -
  • label: Leaf mass fraction
  • -
  • description: Ratio of leaf dry mass to total plant dry mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 1 g/g
  • -
-
-
-

leaf_mass_per_area -

-
    -
  • label: Leaf mass per area
  • -
  • description: The ratio of leaf dry mass to leaf area, measured on an entire leaf including the petiole; LMA. (The inverse of specific leaf area, SLA.)
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 1 - 3000 g/m2
  • -
-
-
-

leaf_mass_to_stem_mass_ratio -

-
    -
  • label: Ratio of leaf dry mass to stem dry mass
  • -
  • description: Ratio of leaf dry mass to stem dry mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 10 g/g
  • -
-
-
-

leaf_mesophyll_conductance_per_area -

-
    -
  • label: Mesophyll conductance per unit leaf area
  • -
  • description: Rate of CO2 movement between chloroplasts and sub-stomatal cavities (intracellular space), per unit leaf area
  • -
  • type: numeric
  • -
  • units: mmol{CO2}/g/s
  • -
  • allowable range: 0.01 - 1 mmol{CO2}/g/s
  • -
-
-
-

leaf_mesophyll_conductance_per_mass -

-
    -
  • label: Mesophyll conductance per unit leaf mass
  • -
  • description: Rate of CO2 movement between chloroplasts and sub-stomatal cavities (intracellular space), per unit leaf mass
  • -
  • type: numeric
  • -
  • units: mol{CO2}/m2/s
  • -
  • allowable range: 0.01 - 10 mol{CO2}/m2/s
  • -
-
-
-

leaf_Mg_per_dry_mass -

-
    -
  • label: Leaf magnesium (Mg) content per unit leaf dry mass
  • -
  • description: Leaf magnesium (Mg) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10000 mg/g
  • -
-
-
-

leaf_Mn_per_dry_mass -

-
    -
  • label: Leaf manganese (Mn) content per unit leaf dry mass
  • -
  • description: Leaf manganese (Mn) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 1 - 20000 mg/kg
  • -
-
-
-

leaf_Mo_per_dry_mass -

-
    -
  • label: Leaf molybdenum (Mo) content per unit leaf dry mass
  • -
  • description: Leaf molybdenum (Mo) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0 - 100 mg/kg
  • -
-
-
-

leaf_N_per_area -

-
    -
  • label: Leaf nitrogen (N) content per unit leaf area
  • -
  • description: Leaf nitrogen (N) content per unit leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.15 - 50 g/m2
  • -
-
-
-

leaf_N_per_dry_mass -

-
    -
  • label: Leaf nitrogen (N) content per unit leaf dry mass
  • -
  • description: Leaf nitrogen (N) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.5 - 100 mg/g
  • -
-
-
-

leaf_N_resorption -

-
    -
  • label: Nitrogen resorption from leaves
  • -
  • description: Nitrogen resorption from leaves
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: -1.1 - 1 mg/mg
  • -
-
-
-

leaf_Na_per_dry_mass -

-
    -
  • label: Leaf sodium (Na) content per unit leaf dry mass
  • -
  • description: Leaf sodium (Na) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 1 - 20000 mg/kg
  • -
-
-
-

leaf_Ni_per_dry_mass -

-
    -
  • label: Leaf nickel (Ni) content per unit leaf dry mass
  • -
  • description: Leaf nickel (Ni) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0.1 - 100 mg/kg
  • -
-
-
-

leaf_NP_ratio -

-
    -
  • label: Ratio of N to P per unit leaf dry mass
  • -
  • description: Ratio of N to P per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 1 - 100 g/g
  • -
-
-
-

leaf_P_per_area -

-
    -
  • label: Leaf phosphorus (P) content per unit leaf area
  • -
  • description: Leaf phosphorus (P) content per unit leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.005 - 1.2 g/m2
  • -
-
-
-

leaf_P_per_dry_mass -

-
    -
  • label: Leaf phosphorus (P) content per unit leaf dry mass
  • -
  • description: Leaf phosphorus (P) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.03 - 12 mg/g
  • -
-
-
-

leaf_P_resorption -

-
    -
  • label: Phosphorus resorption from leaves
  • -
  • description: Phosphorus resorption from leaves
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: -1.1 - 1 mg/mg
  • -
-
-
-

leaf_palisade_cell_length -

-
    -
  • label: Length of individual palisade cells
  • -
  • description: Length of individual palisade cells
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 10 - 1000 um
  • -
-
-
-

leaf_palisade_cell_thickness_abaxial -

-
    -
  • label: Lower palisade cell thickness
  • -
  • description: Thickness (length) of lower palisade cells
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 10 - 1000 um
  • -
-
-
-

leaf_palisade_cell_thickness_adaxial -

-
    -
  • label: Upper palisade cell thickness
  • -
  • description: Thickness (length) of upper palisade cells
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 10 - 1000 um
  • -
-
-
-

leaf_palisade_cell_width -

-
    -
  • label: Width of individual palisade cells
  • -
  • description: Width of individual palisade cells
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 50 um
  • -
-
-
-

leaf_palisade_layer_number -

-
    -
  • label: Number of layers of palisade cells
  • -
  • description: Number of layers of palisade cells
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 1 - 10 {count}
  • -
-
-
-

leaf_palisade_mesophyll_Ca_per_fresh_mass -

-
    -
  • label: Ca content of palisade mesophyll cells
  • -
  • description: Ca content of palisade mesophyll cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 1 - 100 umol/g
  • -
-
-
-

leaf_palisade_mesophyll_P_per_fresh_mass -

-
    -
  • label: P content of palisade mesophyll cells
  • -
  • description: P content of palisade mesophyll cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 0 - 30 umol/g
  • -
-
-
-

leaf_pendulousness -

-
    -
  • label: Pendulous leaves
  • -
  • description: Binary variable describing whether or not leaves are pendulous, hanging loosely downward and possessing the ability to flutter.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -pendulous: Leaves are pendulous.
    • -
    • -not_pendulous: Leaves are not pendulous.
    • -
    -
  • -
-
-
-

leaf_phenol_per_dry_mass -

-
    -
  • label: Leaf phenol content per unit leaf dry mass
  • -
  • description: Leaf phenol content, measured as gallic acid equivalents (GAE), per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 500 mg/g
  • -
-
-
-

leaf_phenology -

-
    -
  • label: Leaf phenology type
  • -
  • description: Trait indicating whether a plant retains a leaf canopy throughout the year and what environmental cues are associated with canopy shedding.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -deciduous: Plant loses its entire leaf canopy for part of the year, in response to either drought or cold.
    • -
    • -evergreen: Plant retains a leaf canopy throughout the year.
    • -
    • -cold_deciduous: Plant loses its entire leaf canopy for part of the year, in response to cold.
    • -
    • -drought_deciduous: Plant loses its entire leaf canopy for part of the year, in response to drought.
    • -
    • -facultative_drought_deciduous: Plant sometimes loses its leaf canopy for part of the year, in response to drought.
    • -
    • -semi_deciduous: Plant thins, but does not entirely lose, its leaf canopy in response to an environmental cue, usually drought.
    • -
    • -brevi_deciduous: Plant briefly loses its entire leaf canopy, but flushes a new leaf canopy almost simultaneously to leaf loss.
    • -
    -
  • -
-
-
-

leaf_photochemical_reflectance_index -

-
    -
  • label: Photochemical Reflectance Index
  • -
  • description: Photochemical reflectance index measures plant responses to stress, by indicating changes in carotenoid pigments in live foliage.
  • -
  • type: numeric
  • -
  • units: umol/umol
  • -
  • allowable range: -1 - 1 umol/umol
  • -
-
-
-

leaf_photosynthesis_Jmax_over_Vcmax -

-
    -
  • label: Ratio of photosynthetic electron transport capacity to maximum Rubisco activity, measured through chlorophyll fluorescence
  • -
  • description: Ratio of photosynthetic electron transport capacity to maximum Rubisco activity, measured through chlorophyll fluorescence; this is the maximum quantum yield of PSII (Maxwell & Johnson 2000, doi.org/10.1093/jexbot/51.345.659)
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 5 {dimensionless}
  • -
-
-
-

leaf_photosynthesis_Jmax_per_area -

-
    -
  • label: Capacity for photosynthetic electron transport, calculated from an A-Ci response curve, on an area basis
  • -
  • description: Capacity for photosynthetic electron transport, calculated from an A-Ci response curve, on an area basis
  • -
  • type: numeric
  • -
  • units: umol/m2/s
  • -
  • allowable range: 1 - 500 umol/m2/s
  • -
-
-
-

leaf_photosynthesis_Jmax_per_mass -

-
    -
  • label: Capacity for photosynthetic electron transport, measured through chlorophyll fluorescence, on a per mass basis
  • -
  • description: Capacity for photosynthetic electron transport, measured through chlorophyll fluorescence, on a per mass basis
  • -
  • type: numeric
  • -
  • units: umol/g/s
  • -
  • allowable range: 0 - 3 umol/g/s
  • -
-
-
-

leaf_photosynthesis_Vcmax_per_area -

-
    -
  • label: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), measured through chlorophyll fluorescence, on a per mass basis
  • -
  • description: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), calculated from an A-Ci response curve, on an area basis
  • -
  • type: numeric
  • -
  • units: umol/m2/s
  • -
  • allowable range: 10 - 500 umol/m2/s
  • -
-
-
-

leaf_photosynthesis_Vcmax_per_mass -

-
    -
  • label: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), measured through chlorophyll fluorescence, on a per mass basis
  • -
  • description: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), measured through chlorophyll fluorescence, on a per mass basis
  • -
  • type: numeric
  • -
  • units: umol/g/s
  • -
  • allowable range: 0 - 1 umol/g/s
  • -
-
-
-

leaf_photosynthetic_nitrogen_use_efficiency_maximum -

-
    -
  • label: Leaf photosynthesis rate per unit leaf nitrogen (N) content (photosynthetic nitrogen use efficiency, PNUE) at saturating light and CO2 conditions
  • -
  • description: Ratio of photosynthesis (CO2 assimilation rate) to leaf nitrogen content at saturating light and CO2 conditions
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol{N}/s
  • -
  • allowable range: 1 - 1000 umol{CO2}/mol{N}/s
  • -
-
-
-

leaf_photosynthetic_nitrogen_use_efficiency_saturated -

-
    -
  • label: Leaf photosynthesis rate per unit leaf nitrogen (N) content (photosynthetic nitrogen use efficiency, PNUE) at saturating light conditions but ambient CO2 conditions
  • -
  • description: Ratio of photosynthesis (CO2 assimilation rate) to leaf nitrogen content at saturating light conditions but ambient CO2 conditions
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol{N}/s
  • -
  • allowable range: 1 - 1000 umol{CO2}/mol{N}/s
  • -
-
-
-

leaf_photosynthetic_phosphorus_use_efficiency_maximum -

-
    -
  • label: Leaf photosynthesis rate per unit leaf phosphorus (P) content (photosynthetic phosphorus use efficiency, PPUE) at saturating light and CO2 conditions
  • -
  • description: Ratio of photosynthesis (CO2 assimilation rate) to leaf phosphorus content at saturating light and CO2 conditions
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol{P}/s
  • -
  • allowable range: 100 - 1e+05 umol{CO2}/mol{P}/s
  • -
-
-
-

leaf_photosynthetic_phosphorus_use_efficiency_saturated -

-
    -
  • label: Leaf photosynthesis rate per unit leaf phosphorus (P) content (photosynthetic phosphorus use efficiency, PPUE) at saturating light conditions but ambient CO2 conditions
  • -
  • description: Ratio of photosynthesis (CO2 assimilation rate) to leaf phosphorus content at saturating light conditions but ambient CO2 conditions
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mol{P}/s
  • -
  • allowable range: 10 - 1e+05 umol{CO2}/mol{P}/s
  • -
-
-
-

leaf_photosynthetic_rate_per_area_ambient -

-
    -
  • label: Leaf photosynthesis rate per unit leaf area
  • -
  • description: Rate at which a plant consumes carbon dioxide through photosynthesis, per unit leaf area
  • -
  • type: numeric
  • -
  • units: umol{CO2}/m2/s
  • -
  • allowable range: 0.25 - 50 umol{CO2}/m2/s
  • -
-
-
-

leaf_photosynthetic_rate_per_area_maximum -

-
    -
  • label: Leaf photosynthesis rate per unit leaf area at saturating light and CO2 conditions
  • -
  • description: Rate at which a plant consumes carbon dioxide through photosynthesis at saturating light and CO2 conditions, per unit leaf area
  • -
  • type: numeric
  • -
  • units: umol{CO2}/m2/s
  • -
  • allowable range: 0.25 - 85 umol{CO2}/m2/s
  • -
-
-
-

leaf_photosynthetic_rate_per_area_saturated -

-
    -
  • label: Leaf photosynthesis rate per unit leaf area at saturating light conditions
  • -
  • description: Rate at which a plant consumes carbon dioxide through photosynthesis at saturating light conditions but ambient CO2 conditions, per unit leaf area
  • -
  • type: numeric
  • -
  • units: umol{CO2}/m2/s
  • -
  • allowable range: 0.01 - 100 umol{CO2}/m2/s
  • -
-
-
-

leaf_photosynthetic_rate_per_dry_mass_ambient -

-
    -
  • label: Leaf photosynthesis rate per unit leaf dry mass
  • -
  • description: Maximum rate at which a plant consumes carbon dioxide through photosynthesis, per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: umol{CO2}/g/s
  • -
  • allowable range: 0.01 - 1 umol{CO2}/g/s
  • -
-
-
-

leaf_photosynthetic_rate_per_dry_mass_maximum -

-
    -
  • label: Leaf photosynthesis rate per unit leaf dry mass at saturating light and CO2 conditions
  • -
  • description: Maximum rate at which a plant consumes carbon dioxide through photosynthesis at saturating light and CO2 conditions, per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: umol{CO2}/g/s
  • -
  • allowable range: 0.01 - 1 umol{CO2}/g/s
  • -
-
-
-

leaf_photosynthetic_rate_per_dry_mass_saturated -

-
    -
  • label: Leaf photosynthesis rate per unit leaf dry mass at saturating light conditions
  • -
  • description: Maximum rate at which a plant consumes carbon dioxide through photosynthesis at saturating light conditions but ambient CO2 conditions, per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: umol{CO2}/g/s
  • -
  • allowable range: 0.001 - 1 umol{CO2}/g/s
  • -
-
-
-

leaf_phyllotaxis -

-
    -
  • label: Leaf phyllotaxis
  • -
  • description: Leaf arrangement at a stem node, indicating the relative number and position of leaves at a single stem note.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -alternate: A single leaf is attached at each stem node.
    • -
    • -opposite: A pair of leaves are attached opposite to one another at each stem node.
    • -
    • -whorled: Three or more leaves are attached at each stem node, arranged in a symmetrical pattern around the stem. (synonym, verticillate)
    • -
    -
  • -
-
-
-

leaf_posture_numeric -

-
    -
  • label: Leaf lamina posture (3-dimensionality)
  • -
  • description: The maximum perpendicular height of a leaf when positioned on a flat surface.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0 - 100 mm
  • -
-
-
-

leaf_reflectance -

-
    -
  • label: Proportion of incoming visible light that is reflected by the leaf
  • -
  • description: Proportion of incoming visible light (between 400-700 nm) that is reflected by the leaf
  • -
  • type: numeric
  • -
  • units: umol/umol
  • -
  • allowable range: 0.01 - 1 umol/umol
  • -
-
-
-

leaf_reflectance_near_infrared -

-
    -
  • label: Proportion of incoming near infra-red light that is reflected by the leaf
  • -
  • description: Proportion of incoming near infra-red light (between 750-10500 nm) that is reflected by the leaf
  • -
  • type: numeric
  • -
  • units: umol/umol
  • -
  • allowable range: 0.1 - 1 umol/umol
  • -
-
-
-

leaf_relative_water_content_at_turgor_loss_point -

-
    -
  • label: Leaf relative water content at turgor loss point
  • -
  • description: Ratio of water in a fresh leaf to water in a leaf at turgor loss; calculated from a pressure-volume curve.
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.1 - 1 g/g
  • -
-
-
-

leaf_relative_water_content_predawn -

-
    -
  • label: Leaf relative water content predawn
  • -
  • description: Ratio of water in a fresh leaf to water in a saturated leaf; measured pre-dawn
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.1 - 1.4 g/g
  • -
-
-
-

leaf_rubisco_N_per_total_leaf_N -

-
    -
  • label: Percentage of N accounted for by Rubisco
  • -
  • description: Percentage of N accounted for by Rubisco
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 5 - 50 g/g
  • -
-
-
-

leaf_rubisco_per_leaf_dry_mass -

-
    -
  • label: N content of Rubisco
  • -
  • description: Concentration of Rubisco
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 5 - 50 mg/g
  • -
-
-
-

leaf_S_per_dry_mass -

-
    -
  • label: Leaf sulphur (S) content per unit leaf dry mass
  • -
  • description: Leaf sulphur (S) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 50 - 50000 mg/kg
  • -
-
-
-

leaf_sclerenchyma_Ca_per_fresh_mass -

-
    -
  • label: Ca content of sclerenchyma cells
  • -
  • description: Ca content of sclerenchyma cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 1 - 100 umol/g
  • -
-
-
-

leaf_sclerenchyma_P_per_fresh_mass -

-
    -
  • label: P content of sclerenchyma cells
  • -
  • description: P content of sclerenchyma cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 0 - 10 umol/g
  • -
-
-
-

leaf_Se_per_dry_mass -

-
    -
  • label: Leaf selenium (Se) content per unit leaf dry mass
  • -
  • description: Leaf selenium (Se) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: ppm
  • -
  • allowable range: 0.01 - 100 ppm
  • -
-
-
-

leaf_secondary_vein_angle -

-
    -
  • label: Angle of secondary veins
  • -
  • description: Angle between a leaf’s secondary vein and its primary vein (midrib).
  • -
  • type: numeric
  • -
  • units: deg
  • -
  • allowable range: 0 - 180 deg
  • -
-
-
-

leaf_senesced_Al_per_dry_mass -

-
    -
  • label: Senesced leaf aluminium (Al) content per unit leaf dry mass
  • -
  • description: Senesced leaf aluminium (Al) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

leaf_senesced_B_per_dry_mass -

-
    -
  • label: Senesced leaf boron (B) content per unit leaf dry mass
  • -
  • description: Senesced leaf boron (B) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

leaf_senesced_C_per_dry_mass -

-
    -
  • label: Senesced leaf carbon (C) content per unit leaf dry mass
  • -
  • description: Senesced leaf carbon (C) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 10 - 100 g/g
  • -
-
-
-

leaf_senesced_Ca_per_dry_mass -

-
    -
  • label: Senesced leaf calcium (Ca) content per unit leaf dry mass
  • -
  • description: Senesced leaf calcium (Ca) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 1000 mg/g
  • -
-
-
-

leaf_senesced_Cu_per_dry_mass -

-
    -
  • label: Senesced leaf copper (Cu) content per unit leaf dry mass
  • -
  • description: Senesced leaf copper (Cu) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0.01 - 100 mg/kg
  • -
-
-
-

leaf_senesced_Fe_per_dry_mass -

-
    -
  • label: Senesced leaf iron (Fe) content per unit leaf dry mass
  • -
  • description: Senesced leaf iron (Fe) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 1 - 10000 mg/kg
  • -
-
-
-

leaf_senesced_K_per_dry_mass -

-
    -
  • label: Senesced leaf potassium (K) content per unit leaf dry mass
  • -
  • description: Senesced leaf potassium (K) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

leaf_senesced_Mg_per_dry_mass -

-
    -
  • label: Senesced leaf magnesium (Mg) content per unit leaf dry mass
  • -
  • description: Senesced leaf magnesium (Mg) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 100 mg/g
  • -
-
-
-

leaf_senesced_Mn_per_dry_mass -

-
    -
  • label: Senesced leaf manganese (Mn) content per unit leaf dry mass
  • -
  • description: Senesced leaf manganese (Mn) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 1 - 10000 mg/kg
  • -
-
-
-

leaf_senesced_Mo_per_dry_mass -

-
    -
  • label: Senesced leaf molybdenum (Mo) content per unit leaf dry mass
  • -
  • description: Senesced leaf molybdenum (Mo) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0 - 30 mg/kg
  • -
-
-
-

leaf_senesced_N_per_dry_mass -

-
    -
  • label: Senesced leaf nitrogen (N) content per unit leaf dry mass
  • -
  • description: Senesced leaf nitrogen (N) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 100 mg/g
  • -
-
-
-

leaf_senesced_Na_per_dry_mass -

-
    -
  • label: Senesced leaf sodium (Na) content per unit leaf dry mass
  • -
  • description: Senesced leaf sodium (Na) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 100 - 20000 mg/kg
  • -
-
-
-

leaf_senesced_Ni_per_dry_mass -

-
    -
  • label: Senesced leaf nickel (Ni) content per unit leaf dry mass
  • -
  • description: Senesced leaf nickel (Ni) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 10 - 1e+05 mg/kg
  • -
-
-
-

leaf_senesced_P_per_dry_mass -

-
    -
  • label: Senesced leaf phosphorus (P) content per unit leaf dry mass
  • -
  • description: Senesced leaf phosphorus (P) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.005 - 15 mg/g
  • -
-
-
-

leaf_senesced_S_per_dry_mass -

-
    -
  • label: Senesced leaf sulphur (S) content per unit leaf dry mass
  • -
  • description: Senesced leaf sulphur (S) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 100 - 50000 mg/kg
  • -
-
-
-

leaf_senesced_Zn_per_dry_mass -

-
    -
  • label: Senesced leaf zinc (Zn) content per unit leaf dry mass
  • -
  • description: Senesced leaf zinc (Zn) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0 - 100 mg/kg
  • -
-
-
-

leaf_shape -

-
    -
  • label: Leaf shape
  • -
  • description: Shapes of a leaf or leaflet.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -linear: A 2-dimensional shape that is very long and narrow, has parallel sides and a length:width ratio between 12:1 and 6:1
    • -
    • -narrowly_oblong: A 2-dimensional shape that is long and narrow, has parallel sides and a length:width ratio between 6:1 and 3:1 (synonym: lorate)
    • -
    • -oblong: A 2-dimensional shape that is somewhat elongated with parallel sides and a length:width ratio between 2:1 and 3:2
    • -
    • -linear_elliptical: A 2-dimensional shape that is a very narrow oval, with curved margins, lacking a distinct point, and a length:width ratio between 12:1 and 6:1
    • -
    • -narrowly_elliptical: A 2-dimensional shape that is a narrow oval, with curved margins, lacking a distinct point, and a length:width ratio between 6:1 and 3:1
    • -
    • -elliptical: A 2-dimensional shape that is an oval, with curved margins, lacking a distinct point, and a length:width ratio between 2:1 and 3:2 (synonyms, oval)
    • -
    • -widely_elliptical: A 2-dimensional shape that is a broad oval, with curved margins, lacking a distinct point, and a length:width ratio of approximately 6:5
    • -
    • -orbicular: A 2-dimensional shape that is approximately circular. (synonym: circular)
    • -
    • -oblate: A 2-dimensional shape that is a broad oval, with curved margins, lacking a distinct point, and a length:width ratio of approximately 5:6, where the petiole attaches along the broader side.
    • -
    • -lanceolate: A 2-dimensional shape that is narrowly egg-shaped or teardrop-shaped, with a length:width ratio between 6:1 and 3:1. The petiole attaches near the wide, curved portion of the leaf lamina.
    • -
    • -narrowly_ovate: A 2-dimensional shape that is narrowly egg-shaped, with a length:width ratio between 3:1 and 2:1. The petiole attaches near the wide, curved portion of the leaf lamina. (synonym, lance_ovate, widely_lanceolate)
    • -
    • -ovate: A 2-dimensional shape that is egg-shaped, with a length:width ratio between 2:1 and 3:2. The petiole attaches near the wide, curved portion of the leaf lamina.
    • -
    • -widely_ovate: A 2-dimensional shape that is broadly egg-shaped with a length:width ratio of approximately 6:5. The petiole attaches near the wide, curved portion of the leaf lamina.
    • -
    • -narrowly_oblanceolate: A 2-dimensional shape that is very narrowly teardrop-shaped, with a length:width ratio between 12:1 and 6:1. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole. (synonym, linear_oblanceolate)
    • -
    • -oblanceolate: A 2-dimensional shape that is narrowly teardrop-shaped, with a length:width ratio between 6:1 and 3:1. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole.
    • -
    • -narrowly_obovate: A 2-dimensional shape that is narrowly egg-shaped or teardrop-shaped with a length:width ratio between 3:1 and 2:1. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole. (synonym, oblance-obovate)
    • -
    • -obovate: A 2-dimensional shape that is egg-shaped with a length:width ratio between 2:1 and 3:2. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole.
    • -
    • -widely_obovate: A 2-dimensional shape that is broadly egg-shaped with a length:width ratio of approximately 6:5. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole.
    • -
    • -narrowly_triangular: A 2-dimensional shape that is narrowly triangular to wedge-shaped, with a length:width ratio 6:1 to 3:1 and the petiole attaching near the widest portion of the leaf (synonym: triangular; wedge-shaped).
    • -
    • -triangular: A 2-dimensional shape that is triangular to wedge-shaped, with a length:width ratio 2:1 to 3:2 and the petiole attaching near the widest portion of the leaf (synonym: wedge-shaped).
    • -
    • -deltate: A 2-dimensional shape that is triangular to wedge-shaped, with a length:width ratio of 1:1 and the petiole attaching along one of the broad sides.
    • -
    • -obtriangular: A 2-dimensional shape that is triangular to fan-shaped or wedge-shaped, with a length:width ratio 2:1 to 3:2 and the petiole attaching near the narrowest portion of the leaf (synonym: flabelliform, fan-shaped, wedge-shaped).
    • -
    • -narrowly_rhomboidal: A 2-dimensional shape that is like a narrow diamond, with approximately straight edges, widest near the middle, and a length:width ratio 6:1 to 3:1. The petiole attaches near one of the points.
    • -
    • -rhomboidal: A 2-dimensional shape that is approximately diamond or parallelogram-shaped, with approximately straight edges, widest near the middle, and a length:width ratio 2:1 to 3:2. The petiole attaches near one of the points. (synonym: rhombic, diamond)
    • -
    • -trullate: A 2-dimensional shape that is approximately parallelogram-shaped, widest near where the petiole attaches (base), and with a length:width ratio 2:1 to 3:2.
    • -
    • -narrowly_obtrullate: A 2-dimensional shape that is narrowly parallelogram-shaped, widest near the tip, and with a length:width ratio 3:1 to 6:1.
    • -
    • -obtrullate: A 2-dimensional shape that is approximately parallelogram-shaped, widest near the tip, and with a length:width ratio 2:1 to 3:2.
    • -
    • -widely_obtrullate: A 2-dimensional shape that is broadly parallelogram-shaped, widest near the tip, and with a length:width ratio of approximately 6:5.
    • -
    • -acicular: A 2-dimensional or 3-dimensional shape with a needlelike tip, often round in cross-section, with margins straight and parallel, and a length:width ratio greater than 12:1. (synonym, needle-shaped)
    • -
    • -terete: A 3-dimensional shape that is a long, narrow cylinder approximately circular in cross-section. Terete leaves often taper toward the tip.
    • -
    • -cordate: A 2-dimensional heart shape, approximately ovate with a cordate base, with the petiole attaching at the notch between the lobes. (synonym, cordiform)
    • -
    • -obcordate: A 2-dimensional heart shape, approximately ovate with a cordate apex, and the petiole attaching along the broad, curve side.
    • -
    • -falcate: A 2-dimensional sickle-shape, approximately lanceolate to linear and curved on one side. (synonym: scimitar-shaped, sickle-shaped, falciform)
    • -
    • -reniform: A 2-dimensional shape that is roughly kidney-shaped, wider than long with a rounded apex and two rounded, basal lobes that are smoothly concave at their intersection.(synonym, kidney-shaped)
    • -
    • -spathulate: A 2-dimensional shape that can be approximately oblong, obovate, or oblanceolate in outline with a long attenuate base, like a spoon. (synonym, spoon-shaped)
    • -
    • -subulate: A 2-dimensional shape that is awl-shaped, approximately narrowly oblong to narrowly triangular with a broad base. (synonym, awl-shaped).
    • -
    • -peltate: A 2-dimensional orbicular shape, distinguished by the petiole attaching near the center of the leaf lamina.
    • -
    • -filiform: A 2-dimensional shape that is long, thin, and typically flexuous, threadlike, filamentous
    • -
    -
  • -
-
-
-

leaf_Si_per_dry_mass -

-
    -
  • label: Leaf silicon (Si) content per unit leaf dry mass
  • -
  • description: Leaf silicon (Si) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: g/kg
  • -
  • allowable range: 0.01 - 100 g/kg
  • -
-
-
-

leaf_soluble_protein_per_area -

-
    -
  • label: Soluble protein per leaf area
  • -
  • description: Mass of soluble protein per leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 20 g/m2
  • -
-
-
-

leaf_soluble_starch_per_area -

-
    -
  • label: Soluble starch per leaf area
  • -
  • description: Mass of soluble starch per leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 100 g/m2
  • -
-
-
-

leaf_soluble_starch_per_mass -

-
    -
  • label: Soluble starch per leaf mass
  • -
  • description: Mass of soluble starch per leaf mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 200 mg/g
  • -
-
-
-

leaf_soluble_sugars_per_area -

-
    -
  • label: Soluble sugars per leaf area
  • -
  • description: Mass of soluble sugars per leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 100 g/m2
  • -
-
-
-

leaf_soluble_sugars_per_mass -

-
    -
  • label: Soluble sugars per leaf mass
  • -
  • description: Mass of soluble sugars per leaf mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 200 mg/g
  • -
-
-
-

leaf_specific_conductance -

-
    -
  • label: Leaf hydraulic conductivity
  • -
  • description: Measure of how efficiently water is transported through the leaf, determined as the ratio of water flow rate through the leaf to the difference in water potential across the leaf, standardised to leaf area.
  • -
  • type: numeric
  • -
  • units: mmol/m2/MPa/s
  • -
  • allowable range: 0.1 - 100 mmol/m2/MPa/s
  • -
-
-
-

leaf_specific_conductivity -

-
    -
  • label: Leaf specific hydraulic conductivity (Kl)
  • -
  • description: Kl; the ratio of leaf hydraulic conductivity to the leaf area distil to the segment
  • -
  • type: numeric
  • -
  • units: 10^4.kg/m/MPa/s
  • -
  • allowable range: 0.1 - 500 10^4.kg/m/MPa/s
  • -
-
-
-

leaf_spongy_mesophyll_Ca_per_fresh_mass -

-
    -
  • label: Ca content of spongy mesophyll cells
  • -
  • description: Ca content of spongy mesophyll cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 1 - 1000 umol/g
  • -
-
-
-

leaf_spongy_mesophyll_P_per_fresh_mass -

-
    -
  • label: P content of spongy mesophyll cells
  • -
  • description: P content of spongy mesophyll cells
  • -
  • type: numeric
  • -
  • units: umol/g
  • -
  • allowable range: 0 - 30 umol/g
  • -
-
-
-

leaf_spongy_mesophyll_thickness -

-
    -
  • label: Spongy mesophyll cell thickness
  • -
  • description: Thickness of the spongy mesophyll cells
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 10 - 1000 um
  • -
-
-
-

leaf_starch_per_area -

-
    -
  • label: Starch per leaf area
  • -
  • description: Mass of starch per leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 50 g/m2
  • -
-
-
-

leaf_stomatal_conductance_per_area_ambient -

-
    -
  • label: Stomatal conductance per unit leaf area under ambient conditions
  • -
  • description: Rate of water loss through stomata under ambient conditions, per unit leaf area
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 0.1 - 2000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_stomatal_conductance_per_area_at_Amax -

-
    -
  • label: Stomatal conductance per unit leaf area under saturated light and CO2 conditions
  • -
  • description: Rate of water loss through stomata, per unit leaf area under saturated light and CO2 conditions
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 0.1 - 2000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_stomatal_conductance_per_area_at_Asat -

-
    -
  • label: Stomatal conductance per unit leaf area under saturated light conditions
  • -
  • description: Rate of water loss through stomata, per unit leaf area under saturated light conditions
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 0.1 - 2000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_stomatal_density_abaxial -

-
    -
  • label: Stomatal density on the lower leaf surface
  • -
  • description: Stomatal density on the lower leaf surface
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 1 - 1000 {count}/mm2
  • -
-
-
-

leaf_stomatal_density_adaxial -

-
    -
  • label: Stomatal density on the upper leaf surface
  • -
  • description: Stomatal density on the upper leaf surface
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 0 - 1000 {count}/mm2
  • -
-
-
-

leaf_stomatal_density_average -

-
    -
  • label: Stomatal density averaged across both leaf surfaces
  • -
  • description: Stomatal density averaged across both leaf surfaces
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 0 - 1000 {count}/mm2
  • -
-
-
-

leaf_stomatal_distribution -

-
    -
  • label: Stomatal distribution
  • -
  • description: Distribution of stomatal across the two leaf surfaces
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -amphistomatic: Leaves with stomata on both leaf surfaces
    • -
    • -amphistomatic_uneven: Leaves with stomata on both leaf surfaces, but more stomata on the lower leaf surface
    • -
    • -epistomatic: Leaves that only have stomata on the upper (adaxial) leaf surface
    • -
    • -hypostomatic: Leaves that only have stomata on the lower (abaxial) leaf surface
    • -
    -
  • -
-
-
-

leaf_stomatal_hairs -

-
    -
  • label: Whether or not stomata are covered by hairs
  • -
  • description: Binary variable describing whether or not stomata are covered by dense hairs
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -stomata_covered_with_dense_hairs: Stomata densely covered by dense hairs
    • -
    • -stomata_not_covered_by_hairs: Stomata not hair-covered
    • -
    -
  • -
-
-
-

leaf_stomatal_resistance_conductance_ambient -

-
    -
  • label: Leaf resistance conductance under ambient conditions
  • -
  • description: Leaf stomatal resistance under ambient conditions. This is the original way leaf stomatal conductance was measured and reported and is still regularly used in environmental models and meteorology. An equation converts between resistance conductance and the molar values obtained through gas exchange readings (“Plants and Microclimate” by H.G. Jones (1992), page 55 and Appendix 3; “Elevated Carbon Dioxide Impacts on Soil and Plant Water Relations” by M.B. Kirkham (2011), page 149).
  • -
  • type: numeric
  • -
  • units: cm/s
  • -
  • allowable range: 1e-04 - 10 cm/s
  • -
-
-
-

leaf_tannin_per_dry_mass -

-
    -
  • label: Leaf tannins (polyphenols) per unit leaf dry mass
  • -
  • description: Leaf tannins (polyphenols) per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.001 - 1 mg/mg
  • -
-
-
-

leaf_thickness -

-
    -
  • label: Leaf thickness
  • -
  • description: The thickness of the leaf lamina, generally measured away from the midrib.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 51 mm
  • -
-
-
-

leaf_thylakoid_N_per_total_leaf_N -

-
    -
  • label: Percentage of N accounted for by thylakoid proteins
  • -
  • description: Percentage of N accounted for by thylakoid proteins
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 5 - 30 g/g
  • -
-
-
-

leaf_total_non-structural_carbohydrates_per_area -

-
    -
  • label: Total non-structural carbohydrates per leaf area
  • -
  • description: Total non-structural carbohydrates per leaf area
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 0.1 - 50 g/m2
  • -
-
-
-

leaf_total_non-structural_carbohydrates_per_mass -

-
    -
  • label: Total non-structural carbohydrates per leaf mass
  • -
  • description: Total non-structural carbohydrates per leaf mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 10 - 200 mg/g
  • -
-
-
-

leaf_total_vein_density -

-
    -
  • label: Length of all minor and major leaf lamina veins per unit area.
  • -
  • description: The length of all minor and major leaf lamina veins per unit leaf area.
  • -
  • type: numeric
  • -
  • units: mm/mm2
  • -
  • allowable range: 0.01 - 20 mm/mm2
  • -
-
-
-

leaf_transmission -

-
    -
  • label: Proportion of incoming visible light that is transmitted through the leaf
  • -
  • description: Proportion of incoming visible light (between 400-700 nm) that is transmitted through the leaf
  • -
  • type: numeric
  • -
  • units: umol/umol
  • -
  • allowable range: 0.001 - 1 umol/umol
  • -
-
-
-

leaf_transpiration -

-
    -
  • label: Leaf transpiration under ambient conditions
  • -
  • description: Rate of water loss from leaf under ambient conditions
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 1e-04 - 10000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_transpiration_at_Amax -

-
    -
  • label: Leaf transpiration during Amax measurement
  • -
  • description: Rate of water loss from leaf during Amax measurement
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 1e-04 - 10000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_transpiration_at_Asat -

-
    -
  • label: Leaf transpiration during Asat measurement
  • -
  • description: Rate of water loss from leaf during Asat measurement
  • -
  • type: numeric
  • -
  • units: mmol{H2O}/m2/s
  • -
  • allowable range: 1e-04 - 10000 mmol{H2O}/m2/s
  • -
-
-
-

leaf_turgor_loss_point -

-
    -
  • label: Leaf turgor loss point
  • -
  • description: Water potential at which a leaf loses turgor
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 0.01 - 100 MPa
  • -
-
-
-

leaf_type -

-
    -
  • label: Leaf form
  • -
  • description: Variable distinguishing between general leaf form (shape) categories.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -broadleaf: Flat leaf lamina, including leaves that both are and are not,toothed, lobed, or compound.
    • -
    • -needle: Needle or awl-shaped leaf that is generally 3-dimensional.
    • -
    • -scale: Leaf reduced to a small scale.
    • -
    • -leafless: An adult stage plant that lacks leaves throughout the year.
    • -
    -
  • -
-
-
-

leaf_vein_frequency -

-
    -
  • label: Leaf vein frequency
  • -
  • description: A measure of vein density, which is the number of veins intersecting the perimeter of a square divided by the perimeter of the square.
  • -
  • type: numeric
  • -
  • units: {count}/mm
  • -
  • allowable range: 0.01 - 20 {count}/mm
  • -
-
-
-

leaf_vessel_density -

-
    -
  • label: Count of vessels per area in leaves
  • -
  • description: Count of vessels per area in leaves
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 1 - 50000 {count}/mm2
  • -
-
-
-

leaf_vessel_diameter -

-
    -
  • label: Diameter of xylem vessels in leaves
  • -
  • description: Diameter of xylem vessels in leaves
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 250 um
  • -
-
-
-

leaf_water_band_index -

-
    -
  • label: Water band index
  • -
  • description: Water band index, the ratio of the reflectance at 970 nm / 900 nm, recorded from the spectro-radiometer.
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 1 - 1.1 {dimensionless}
  • -
-
-
-

leaf_water_content_per_area -

-
    -
  • label: Leaf water content per unit area
  • -
  • description: Ratio of the mass of water in a leaf to leaf surface area; leaf succulence
  • -
  • type: numeric
  • -
  • units: g/m2
  • -
  • allowable range: 10 - 5000 g/m2
  • -
-
-
-

leaf_water_content_per_dry_mass -

-
    -
  • label: Leaf water content per unit dry mass
  • -
  • description: Ratio of the mass of water in a leaf to leaf dry mass. (See also leaf_dry_matter_content, the ratio of a leaf’s dry mass to fresh mass, that is recorded by a greater number of studies.)
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 20 g/g
  • -
-
-
-

leaf_water_content_per_fresh_mass -

-
    -
  • label: Leaf water content per unit fresh mass
  • -
  • description: Ratio of the mass of water in a leaf to leaf fresh mass. (See also leaf_dry_matter_content, the ratio of a leaf’s dry mass to fresh mass, that is recorded by a greater number of studies.)
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 10 g/g
  • -
-
-
-

leaf_water_content_per_saturated_mass -

-
    -
  • label: Leaf water content per unit mass of saturated leaf
  • -
  • description: Ratio of water in a saturated leaf (maximal water holding capacity at full turgidity) to leaf saturated mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.1 - 10 g/g
  • -
-
-
-

leaf_water_use_efficiency_integrated -

-
    -
  • label: Integrated water use efficiency
  • -
  • description: WUE; Rate of carbon dioxide uptake relative to water loss, per unit leaf area. This measures how much biomass is produced relative to transpiration, and is therefore an integrated measure of water use efficiency. (Calculated as biomass production / transpiration)
  • -
  • type: numeric
  • -
  • units: g{H2O}/g{biomass}
  • -
  • allowable range: 0.1 - 200 g{H2O}/g{biomass}
  • -
-
-
-

leaf_water_use_efficiency_intrinsic -

-
    -
  • label: Leaf photosynthesis rate per unit stomatal conductance (photosynthetic water use efficiency, PWUE, or intrinsic WUE)
  • -
  • description: PWUE calculated as Aarea/gs; Ratio of photosynthesis (CO2 assimilation rate) to stomatal conductance (gs). This is intrinsic water use efficiency.
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mmol{H2O}
  • -
  • allowable range: 0.001 - 2 umol{CO2}/mmol{H2O}
  • -
-
-
-

leaf_water_use_efficiency_photosynthetic -

-
    -
  • label: Leaf photosynthesis rate per unit leaf transpiration (photosynthetic water use efficiency, PWUE, or instantaneous WUE)
  • -
  • description: PWUE calculated as Aarea/E; Ratio of photosynthesis (CO2 assimilation rate) to leaf transpiration (E; water loss). This is also termed instantaneous water use efficiency.
  • -
  • type: numeric
  • -
  • units: umol{CO2}/mmol{H2O}
  • -
  • allowable range: 0.1 - 200 umol{CO2}/mmol{H2O}
  • -
-
-
-

leaf_width -

-
    -
  • label: Leaf width
  • -
  • description: The maximum width axis of a leaf or a leaf analogue (a leaflet, cladode, or phyllode), measured perpendicular to the leaf length.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1e+05 mm
  • -
-
-
-

leaf_work_to_punch -

-
    -
  • label: Work to punch through a leaf
  • -
  • description: Measure of how much force (work) is required to punch through a leaf; units same as J/m2; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies
  • -
  • type: numeric
  • -
  • units: N/m
  • -
  • allowable range: 0.5 - 10000 N/m
  • -
-
-
-

leaf_work_to_punch_adjusted -

-
    -
  • label: Work to punch through a leaf, adjusted for leaf thickness
  • -
  • description: Measure of how much force (work) is required to punch through a leaf, adjusted for leaf thickness; units same as J/m2; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies
  • -
  • type: numeric
  • -
  • units: N/m2
  • -
  • allowable range: 1000 - 3e+07 N/m2
  • -
-
-
-

leaf_work_to_shear -

-
    -
  • label: Work to shear a leaf
  • -
  • description: Measures of how much force (work) is required to shear a leaf; equivalent to cutting a leaf with scissors; units same as J/m; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies
  • -
  • type: numeric
  • -
  • units: N
  • -
  • allowable range: 0.01 - 10 N
  • -
-
-
-

leaf_work_to_shear_adjusted -

-
    -
  • label: Work to shear a leaf, adjusted for leaf thickness
  • -
  • description: Measures of how much force (work) is required to shear a leaf, adjusted to leaf thickness; same units as J/m2; also referred to as ‘fracture toughness’; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies
  • -
  • type: numeric
  • -
  • units: N/m
  • -
  • allowable range: 100 - 10000 N/m
  • -
-
-
-

leaf_work_to_tear -

-
    -
  • label: Work to tear a leaf
  • -
  • description: Measures of how much force (work) is required to tear/rip a leaf; units same as J/m; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies
  • -
  • type: numeric
  • -
  • units: N
  • -
  • allowable range: 0.01 - 50 N
  • -
-
-
-

leaf_work_to_tear_adjusted -

-
    -
  • label: Work to tear a leaf, adjusted for leaf thickness
  • -
  • description: Measures of how much force (work) is required to tear/rip a leaf, adjusted to leaf thickness; units same as J/m2; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies
  • -
  • type: numeric
  • -
  • units: N/m
  • -
  • allowable range: 10 - 15000 N/m
  • -
-
-
-

leaf_xylem_delta15N -

-
    -
  • label: Xylem nitrogen (N) isotope signature (delta 15N) from leaves
  • -
  • description: Xylem nitrogen stable isotope signature from leaves
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -25 - 75 {delta}[ppth]
  • -
-
-
-

leaf_Zn_per_dry_mass -

-
    -
  • label: Leaf zinc (Zn) content per unit leaf dry mass
  • -
  • description: Leaf zinc (Zn) content per unit leaf dry mass
  • -
  • type: numeric
  • -
  • units: mg/kg
  • -
  • allowable range: 0.1 - 1000 mg/kg
  • -
-
-
-

leaflet_area -

-
    -
  • label: Leaf area
  • -
  • description: Area of the surface of a single leaflet
  • -
  • type: numeric
  • -
  • units: mm2
  • -
  • allowable range: 0.1 - 1e+06 mm2
  • -
-
-
-

leaflet_dry_mass -

-
    -
  • label: Dry mass of a single leaflet
  • -
  • description: Dry mass of a single leaflet
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 0.005 - 15000 mg
  • -
-
-
-

life_form -

-
    -
  • label: Life form
  • -
  • description: Raunkiaer classification of life form, indicating the location of and protection provided to surviving meristematic tissue (buds) during the unfavourable (cold or dry) season.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -phanerophyte: Plant whose perennating buds are on persistent shoots which rise at least 50 cm above the soil surface. These are normally woody perennials.
    • -
    • -chamaephyte: Plant whose perennating buds are on persistent shoots that do not extend more than 50 cm above the soil surface. These are normally woody perennials.
    • -
    • -hemicryptophyte: Plant whose perennating buds are at or near the soil surface.
    • -
    • -cryptophyte: Plant whose perennating buds are subterranean or under water. This grouping can be further divided into geophyte, helophyte, and hydrophyte.
    • -
    • -geophyte: Plant that perennates as an organ (rhizome, bulb, corm, or tuber) buried in dry soil, with all leaves dying back each year; a subcategory of cryptophyte.
    • -
    • -helophyte: Plant that perennates as an organ (rhizome, bulb, corm, or tuber) buried in marshy or wet soil or lying under water, with buds emerging during the growing season and shoots and leaves rising about the water surface; a subcategory of cryptophyte. (synonym, emergent_hydrophyte)
    • -
    • -hydrophyte: Plant that perennates as buds or as an organ (rhizome, bulb, corm, or tuber) buried in marshy or wet soil or lying under water, with shoots emerging during the growing season that remain below or at the water surface; a subcategory of cryptophyte.
    • -
    • -therophyte: Annual plants whose shoot and root systems die completely at the end of flowering and seed production, such that they survive the unfavourable cold or dry season in the form of seeds.
    • -
    • -epiphyte: Plant that grows on the surface of another plant.
    • -
    • -aerophyte: Plant that obtains moisture and nutrients from the air and rain, resting on other plants or the ground surface.
    • -
    -
  • -
-
-
-

life_history -

-
    -
  • label: Life history
  • -
  • description: Categorical description of the duration of a plant’s lifespan, from germination to death.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -ephemeral: A very short-lived plant, generally with a lifespan of only a few months and the exact length of lifespan quite variable and determined by environmental conditions.
    • -
    • -annual: A plant that lives for up to one year after germinating, completing its life cycle in a single growing season.
    • -
    • -biennial: A plant that lives for up to two years after germinating, requiring two growing seasons to complete its life cycle and dying following the second growing season.
    • -
    • -perennial: A plant that lives for three or more growing seasons, with an exact lifespan that is indeterminate.
    • -
    • -short_lived_perennial: A perennial whose lifespan is less than approximately five years, with the exact lifespan generally dependent on environmental conditions.
    • -
    -
  • -
-
-
-

lifespan -

-
    -
  • label: Life span (years)
  • -
  • description: Broad categories of plant life span, in years
  • -
  • type: numeric
  • -
  • units: a
  • -
  • allowable range: 0.1 - 10000 a
  • -
-
-
-

modified_NDVI -

-
    -
  • label: modified normalized difference vegetation index (modified NDVI)
  • -
  • description: Modified normalized difference vegetation index (modified NDVI), based on Landsat data
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0.1 - 1 {dimensionless}
  • -
-
-
-

modulus_of_rupture -

-
    -
  • label: Bulk modulus of rupture
  • -
  • description: A measure of the force required to rupture xylem vessels
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 1 - 10000 MPa
  • -
-
-
-

nitrogen_fixing -

-
    -
  • label: Plant nitrogen fixation capacity
  • -
  • description: Binary variable describing whether or not a plant hosts a nitrogen-fixing bacteria
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -non_nitrogen_fixer: plant does not exhibit nitrogen-fixation
    • -
    • -nitrogen_fixer: plant does exhibit nitrogen-fixation
    • -
    -
  • -
-
-
-

osmotic_potential -

-
    -
  • label: Osmotic potential
  • -
  • description: Potential for water to move across a semi-permeable membrane based on solute concentration
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -10 - 0 MPa
  • -
-
-
-

osmotic_potential_at_full_turgor -

-
    -
  • label: Osmotic potential at full tugor
  • -
  • description: Osmotic potential at full tugor; calculated from a pressure-volume curve
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -10 - -0.1 MPa
  • -
-
-
-

parasitic -

-
    -
  • label: Plant’s parasitic status
  • -
  • description: Trait indicating whether a plant forms haustoria and obtains part or all of its energy-rich carbon compounds (photosynthetic sugars), mineral nutrition and/or water directly from another plant (its host) in an interaction that does not benefit the host plant.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -hemiparasitic: Plant that is photosynthetic, but augments its energy, mineral nutrition, and /or water supply through parasitism. This trait value does not distinguish between obligate hemiparasites, plants which require a host for at least part of their life cycle, and facultative hemiparasites, plants which can grow and reproduce without a host.
    • -
    • -hemiparasitic_obligate: Plant that is photosynthetic, but requires a host for at least part of its life cycle.
    • -
    • -hemiparasitic_facultative: Plant that is photosynthetic and can grow and reproduce without a host, but augments its energy, mineral nutrition, and /or water supply through parasitism.
    • -
    • -holoparasitic: Plant that obtains all (or nearly all) of its energy through parasitism.
    • -
    • -parasitic: Plant that obtains some energy, mineral nutrition and/or water through parasitism. This term is used if a dataset does not specify if a plant is a hemiparasite or a holoparasite.
    • -
    • -not_parasitic: In the context of this trait, a plant that does not acquire energy, mineral nutrition, and/or water via haustoria connected to another plant. It can include species that form a symbiosis, including a parasitic interaction, with a fungal partner.
    • -
    • -root_parasitic: Parasitic plant whose haustoria penetrate the root of a host plant.
    • -
    • -stem_parasitic: Parasitic plant whose haustoria penetrate the stem of a host plant.
    • -
    -
  • -
-
-
-

photosynthetic_pathway -

-
    -
  • label: Photosynthetic pathway
  • -
  • description: Type of photosynthetic pathway displayed by plants
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -c3: Plant using the ‘standard’ photosynthetic pathway, where a 3-carbon compound is produced after the first stage in the photosynthetic pathway
    • -
    • -c4: Plants in which the photosynthetic light-dependent reactions and the Calvin cycle are physically separated to reduce photo respiration
    • -
    • -c3-c4: Taxa that shift between c3 and c4 photosynthesis
    • -
    • -cam: Plants which display crassulacean acid metabolism
    • -
    • -c3-cam: Taxa that shift between c3 and cam photosynthesis
    • -
    • -c4-cam: Taxa that shift between c4 and cam photosynthesis
    • -
    • -facultative_cam: Species that shifts between C3 and CAM photosynesis depending on water availablility.
    • -
    • -unknown: Photosynthetic pathway unknown
    • -
    -
  • -
-
-
-

plant_breadth -

-
    -
  • label: Plant breadth
  • -
  • description: Breadth of the plant canopy (smaller of two dimensions)
  • -
  • type: numeric
  • -
  • units: m
  • -
  • allowable range: 0.001 - 20 m
  • -
-
-
-

plant_climbing_mechanism -

-
    -
  • label: Mechanism vines use to climb
  • -
  • description: Mechanisms plants use to climb, including both specialised leaf and stem adaptations and stem growth habits.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -adventitious_roots: Roots arising from stem nodes which cling to a host plant.
    • -
    • -hooks: Curved stem outgrowths which allow climbers to cling to a host plant.
    • -
    • -spines: Straight stem outgrowths (including true spines as well as thorns and prickles) which allow climbers to cling to a host plant.
    • -
    • -tendrils: Modified leaves, petioles, or specialised axillary shoots that coil tightly, forming a specialised structure for climbing.
    • -
    • -scrambling: Stem growth habit, where the plant stems are too weak to support themselves, and instead lean on and are supported by host vegetation. There are no specialised structures employed.
    • -
    • -twining: Stem growth habit, where the plant stems twist or coil around a host plant to provide support.
    • -
    -
  • -
-
-
-

plant_diameter_breast_height -

-
    -
  • label: Stem diameter
  • -
  • description: Diameter at the base of the plant, usually “DBH” except in short plants; only “maximum” values are included
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 5000 mm
  • -
-
-
-

plant_energy_aquisition_strategy -

-
    -
  • label: Plant energy aquisition strategy
  • -
  • description: Trait indicating non-photosynthetic strategies plants use to acquire energy.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -saprophyte: Plant that acquires nutrients from decaying matter.
    • -
    -
  • -
-
-
-

plant_flood_regime_classification -

-
    -
  • label: Growth and germination response to flood regime
  • -
  • description: Functional group classification scheme used to categorise taxa into seven groups based on their growth and germination responses to flood regime. Based on Brock and Casanova (1997) and Casanova (2011).
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -terrestrial_dry: Species which germinate, grow and reproduce where there is no surface water and the water table is below the soil surface. (Dry species; Tdr)
    • -
    • -terrestrial_damp: Species which germinate, grow and reproduce on saturated soil. (Damp species; Tda)
    • -
    • -amphibious_fluctuation_tolerators_emergent: Species which germinate in damp or flooded conditions, which tolerate variation in water level, and which grow with their basal portions under water and reproduce out of water. (Emergent species; ATe)
    • -
    • -amphibious_fluctuation_tolerators_low: Species which germinate in damp or flooded conditions, which tolerate variation in water level, which are low-growing and tolerate complete submersion when water-levels rise. (Low-growing species; ATl)
    • -
    • -amphibious_fluctuation_responders_plastic: Species which germinate in flooded conditions, grow in both flooded and damp conditions, reproduce above the surface of the water, and which have morphological plasticity (e.g. heterophylly) in response to water-level variation. (Morphologically plastic species; ARp)
    • -
    • -amphibious_fluctuation_responders_floating: Species which germinate in flooded conditions, grow in both flooded and damp conditions, reproduce above the surface of the water, and which have floating leaves when inundated. (Species with floating leaves; ARf)
    • -
    • -amphibious: Species which germinate in damp or flooded conditions and can grow in or our of water.
    • -
    • -submerged: Species which germinate, grow and reproduce underwater. (S
    • -
    -
  • -
-
-
-

plant_growth_form -

-
    -
  • label: Plant growth form
  • -
  • description: The form of a plant, capturing a general sense of plant height and shape, which parts of a plant are woody versus herbaceous, the number of stems arising at ground level, and the distribution of leaves relative to the main stem.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -herb: A seed-bearing plant which does not have a woody above-ground stem; when available this term has been divided into more detailed terms. (synonym, forb)
    • -
    • -subshrub: A plant that is only woody at the base, with the remainder of the stems regenerating yearly. This term is not meant to encompass short-lived plants that are only borderline woody. (synonym, suffrutescent)
    • -
    • -shrub: A woody plant that is distinguished by NOT being a tree, due to one of more of the following characteristics, 1) they are less than 8 metres in height; 2) if a plant community includes trees, the shrubs are shorter than the surrounding trees and not part of the canopy; 3) in comparison to trees, the leaves are more distributed along the entire trunk; 4) the plant has multiple relatively narrow stems arising at or near ground level. The definition of shrub is complex, as there are many single-stemmed shrubs within Australia and many taxa that are described in the taxonomic literature as a shrub or small tree.
    • -
    • -mallee: Refers to Eucalyptus species which are small trees that form a large lignotuber. They have multiple stems arising at or near ground level and regenerate from the lignotuber following fire.
    • -
    • -tree: A tall, woody, perennial plant, usually with a single main trunk, and its leaves predominately elevated above the ground surface.
    • -
    • -graminoid: Herbaceous plant with a grass-like morphology that is within the order Poales. Taxa both with and without a tussock form are mapped to this term. This term is most frequently applied to three large monocot families, Poaceae, Cyperaceae, and Juncaceae, but the term could apply to other taxa within Poales with a grass-like morphology, including narrow, linear leaves and non-showy flowers, including Restionaceae, Centrolepidaceae, Anarthriaceae, and Ecdeiocoleaceae. Taxa outside Poales with a grass-like morphology should be designated as herbs and also have the term tufted mapped to the trait stem_growth_habit.
    • -
    • -tussock: A subcategory of graminoid, which is a plant where many shoots from the basal meristem form prominent tufts.
    • -
    • -graminoid_not_tussock: A subcategory of graminoid, indicating a plant which explicitly lacks a tussock morphology, with the leaves not growing in tufts.
    • -
    • -hummock: Plant that grows as a dense mound up to 1 metre in height. The term generally applies only to species within the genera Triodia that form such mounds and these are considered a distinctive and uniquely Australian growth form.
    • -
    • -basal_large: A plant whose leaves form a distinctly large basal tuft or rosette, including large acaulescent monocots and cycads.
    • -
    • -geophyte: Subcategory of herb, specifically referring to plants that survive the winter/dry season as an organ (rhizome, bulb, corm, or tuber) buried in dry soil, with all leaves dying back each year.
    • -
    • -palmoid: Plant that bears a rosette-like canopy of typically large, often compound leaves atop a usually thick (pachycaulous), columnar, unbranched or little-branched stem. Palms, tree ferns, trunked cycads, trunked grass-trees, and Pandanus are mapped to this term. (synonym, rosette-tree, palm, grass-tree)
    • -
    • -climber: Plant that climbs up another plant’s stem or branches, rather than being able to support itself. Term used only if datasets do not specify if a climbing plant is herbaceous (a vine) or woody (a liana).
    • -
    • -climber_herbaceous: Herbaceous plant that climbs up another plant’s stem or branches, rather than being able to support itself. This is usually synonymous with vine. Types of climbers (scrambling, twining) are captured under the trait plant_climbing_mechanism. (synonym, vine)
    • -
    • -climber_woody: Woody or thick-stemmed (>2 cm) plant that climbs up another plant’s stem or branches, rather than being able to support itself. This is usually synonymous with liana. Woody climbers generally use hooks, tendrils, and/or adventitious roots to climb; the climbing mechanisms used by a taxon are captured under the trait plant_climbing_mechanism. (synonym, liana)
    • -
    • -fern: A taxonomic grouping; ferns are vascular plants that reproduce via spores.
    • -
    • -lycophyte: A taxonomic grouping that includes quillworts, clubmosses, and selaginella.
    • -
    -
  • -
-
-
-

plant_growth_substrate -

-
    -
  • label: plant growth habitat
  • -
  • description: Trait broadly indicating the habitat in which a plant grows, the substrate on which a plant grows, or its growth medium.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -epiphyte: A plant that grows upon another plant.
    • -
    • -lithophyte: A plant that grows upon a rock.
    • -
    • -terrestrial: A plant that grows on land, and generally referencing a plant that grows in soil.
    • -
    • -semiaquatic: A plant that grows partially submerged in water or spends part of its life growing in water.
    • -
    • -aquatic: A plant that grows in water.
    • -
    • -marine: A plant that grows in the sea.
    • -
    • -hemiepiphyte: A plant that spends part of its life cycle as an epiphyte, growing upon another plant.
    • -
    -
  • -
-
-
-

plant_height -

-
    -
  • label: Plant height
  • -
  • description: The maximum vertical height of the vegetative shoot system for a taxon in a given location.
  • -
  • type: numeric
  • -
  • units: m
  • -
  • allowable range: 0.001 - 130 m
  • -
-
-
-

plant_photosynthetic_organ -

-
    -
  • label: Plant photosynthetic organ
  • -
  • description: Trait indicating a plant’s primary photosynthetic organ or tissue.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -leaf: A true leaf, including both laminar and needle-shaped leaves.
    • -
    • -cladode: A photosynthetic shoot, regardless of form, that functions as a leaf. For example, cacti pads and Casuarina articles. (synonyms, article, phylloclade, cladophyll)
    • -
    • -phyllode: A flattened bladelike petiole.
    • -
    • -non-photosynthetic_plant: A plant that lacks any photosynthetic organs.
    • -
    -
  • -
-
-
-

plant_physical_defence_structures -

-
    -
  • label: Physical defence structures
  • -
  • description: The presence (or explicit absence) of specific physical defence structures on a plant, including spines, thorns, prickles, and sharp-tipped leaves.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -absent: Plant that lacks a physical defence structure.
    • -
    • -sharp_pointed_defence: Plant that has either spines, thorns, or prickles, but the type of physical defence structure is not specified.
    • -
    • -prickle: A sharp-tipped outgrowth from the epidermis, bark or other plant organ that is explicitly not a spine (modified leaf) or thorn (modified stem).
    • -
    • -pungent_leaf_apex: A sharp-tipped leaf.
    • -
    • -spine: A sharp-pointed structure, which is a modified leaf or leaf part, including petioles, midribs, secondary veins, leaflets, or stipules.
    • -
    • -stinging_or_irritant_hairs: Trichomes that sting or irritate, by injecting a toxin.
    • -
    • -thorn: A sharp-pointed, stiff, woody modified stem.
    • -
    -
  • -
-
-
-

plant_spinescence -

-
    -
  • label: Spinescence
  • -
  • description: Degree to which a plant is defended by spines, thorns and/or prickles, as defined by Pérez-Harguindeguy et al. 2013.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -no_spines: No spines. (level 0)
    • -
    • -low_density_soft_spines: Low or very local density of soft spines <5mm long; plant may sting or prickle when hit carelessly, but not impart strong pain. (level 1)
    • -
    • -high_density_soft_spines: High density of soft spines, intermediate density of spines of intermediate hardness, or low density of hard, sharp spines >5mm long; plant causes actual pain when hit carelessly. (level 2)
    • -
    • -high_density_hard_spines_to_5mm: Intermediate or high density of hard, sharp spines >5mm long; plant causes strong pain when hit carelessly. (level 3)
    • -
    • -high_density_hard_spines_to_20mm: Intermediate or high density of hard, sharp spines >20mm long; plant may cause significant wounds when hit carelessly. (level 4)
    • -
    • -high_density_hard_spines_to_100mm: Intermediate or high density of hard, sharp spines >100mm long; plant is dangerous to careless large mammals, including humans. (level 5)
    • -
    -
  • -
-
-
-

plant_succulence -

-
    -
  • label: Plant succulence
  • -
  • description: Trait characterising whether the leaves or stems of a plant are thick and fleshy because they store water, generally an adaptation to arid or salty environments.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -succulent_stems: Stems are thick and fleshy.
    • -
    • -succulent_leaves: Leaves are thick and fleshy.
    • -
    • -succulent: A plant is designated as succulent, but it is not specified which tissues are thick and fleshy.
    • -
    • -semi-succulent: A plant has tissues that are somewhat thick and fleshy, including many chenopods.
    • -
    • -not_succulent: Neither stems nor leaves are thick and fleshy.
    • -
    -
  • -
-
-
-

plant_tolerance_calcicole -

-
    -
  • label: Calcicole versus calcifuge status
  • -
  • description: Dichotonmous variable, defining plants as calcifuge (intolerant of basic soils) versus calcicole (tolerant of basic soils, such as calcareous sands and limestone derived soils)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -calcicole: tolerant of basic soils, such as calcareous sands and limestone derived soils
    • -
    • -calcifuge: intolerant of basic soils
    • -
    -
  • -
-
-
-

plant_tolerance_inundation -

-
    -
  • label: Inundation tolerance
  • -
  • description: Ability of taxon to tolerate being under water
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -not_applicable: Taxa is not typically confronted with beng inundated and its response is unknown.
    • -
    • -less_than_1_month: Taxa able to tolerate being inundated for less than 1 month.
    • -
    • -1-6_months: Taxa able to tolerate being inundated for 1-6 months.
    • -
    • -greater_than_6_months: Taxa able to tolerate being inundated for more than 6 months.
    • -
    • -aquatic: Taxa truly aquatic and able to be permanantly inundated.
    • -
    -
  • -
-
-
-

plant_tolerance_salt -

-
    -
  • label: Salt tolerance strategies
  • -
  • description: Salt-tolerance categories; Also see ‘plant_tolerance_soil_salinity’ for studies reporting actual soil salinity levels taxa can tolerate. Kew data on salt tolerance included in ‘water_tolerance’ trait
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glycophyte: Plants that cannot survive even one tenth the salt concentration found in seawater
    • -
    • -halophyte: Plants that complete their life cycle in a salty environment; many survive in seawater or even higher concentrations of salt
    • -
    • -halophyte_moderate: Plant that is moderately tolerant of soil salinity/sodicity
    • -
    • -hydrohalophyte: Tidal swamp or ‘mangrove’ and coastal lagoon elements and temperate-zone salt-marsh taxa are classed together.
    • -
    • -salt_spray_tolerant: Plant that is tolerant of salt spray (typically inhabiting near-coastal environments)
    • -
    • -salinity_tolerance_undefined: Plant’s ability to tolerate salt is unknown
    • -
    • -xerohalophyte: Plants adapted to inland salt desert and saline habitats
    • -
    -
  • -
-
-
-

plant_tolerance_snow -

-
    -
  • label: Snow tolerance
  • -
  • description: Description of a taxon’s tolerance to snow cover
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -not_applicable: Taxa is virtually never confronted with snow in nature and the response is unknown.
    • -
    • -intolerant: Taxa is frost tender and known to be killed by any snow.
    • -
    • -days: Taxa can tolerate being covered by snow for days (typically less than 1 week).
    • -
    • -weeks: Taxa can tolerate being covered by snow for weeks (typically less than 1 month).
    • -
    • -months: Taxa can tolerate being covered by snow for months.
    • -
    -
  • -
-
-
-

plant_tolerance_soil_salinity -

-
    -
  • label: Salt tolerance
  • -
  • description: Maximum salinity tolerated by a taxon, reported as the conductivity of the soil
  • -
  • type: numeric
  • -
  • units: dS/m
  • -
  • allowable range: 0.1 - 100 dS/m
  • -
-
-
-

plant_tolerance_water_logged_soils -

-
    -
  • label: Water-logging tolerance
  • -
  • description: Ability of taxon to tolerate water-logged soils
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -not_applicable: Taxa is not typically confronted with waterlogging and its response is unknown
    • -
    • -less_than_1_month: Taxa able to tolerate less than 1 month of waterlogging
    • -
    • -1-6_months: Taxa able to tolerate 1-6 months of waterlogging
    • -
    • -greater_than_6_months: Taxa able to tolerate more than 6 months of waterlogging
    • -
    • -aquatic: Taxa truly aquatic and able to be permanantly inundated
    • -
    -
  • -
-
-
-

plant_type_by_resource_use -

-
    -
  • label: Water and salt tolerance and use strategies
  • -
  • description: Plants categories referencing their ability to tolerate/obtain water and/or salt in their environment
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -hydrohalophyte: Tidal swamp or ‘mangrove’ and coastal lagoon elements and temperate-zone salt-marsh taxa are classed together.
    • -
    • -phreatophyte: Deep-rooted plants—usually trees—obtaining water from a deep underground source that may or may not be saline.
    • -
    • -psammophile: Sand-loving plants commonly found in littoral strand or inland sandfields
    • -
    • -weedy: This inexact term is meant to indicate a high degree of adaptability to sites, and proven tendency toward aggressive colonization of either dry or wet sites, or rarely, both. In general, weeds invade and colonize highly disturbed sites or areas.
    • -
    • -xerohalophyte: Plants adapted to inland salt desert and saline habitats
    • -
    • -xerophyte: Drought-tolerant and drought-adapted plants
    • -
    -
  • -
-
-
-

plant_width -

-
    -
  • label: Plant width
  • -
  • description: Width of the plant canopy
  • -
  • type: numeric
  • -
  • units: m
  • -
  • allowable range: 0.001 - 20 m
  • -
-
-
-

ploidy -

-
    -
  • label: Chromosome ploidy
  • -
  • description: Chromosome ploidy
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 1 - 4 {count}
  • -
-
-
-

pollination_syndrome -

-
    -
  • label: Pollination syndrome
  • -
  • description: Pollination syndrome
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -abiotic: Pollination occurs through wind, water, or collision of free-floating particles
    • -
    • -animal: Generic catch-all for any form of animal pollination; change to biotic
    • -
    • -bat: Bat-pollinated
    • -
    • -bee: Bee-pollinated
    • -
    • -beetle: Beetle-pollinated
    • -
    • -bird: Bird-pollinated
    • -
    • -butterfly: Butterfly-pollinated
    • -
    • -fly: Fly-pollinated
    • -
    • -insect: Insect-pollinated, type of insect not specified
    • -
    • -moth: Moth-pollinated
    • -
    • -none: Spore-producing plants
    • -
    • -vertebrate: Vertebrate-pollinated, broadly defined
    • -
    • -wind: wind-pollinated
    • -
    • -pollination_rare: plants mostly reproduce through vegetative spread and flowering is rare
    • -
    -
  • -
-
-
-

pollination_system -

-
    -
  • label: Pollination system
  • -
  • description: Pollination system
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -abiotic: Taxa use nonliving methods such as wind and water for pollen transfer
    • -
    • -biotic_unspecialised: Taxa use living methods for pollen transfer, but do not have a specialist pollinator
    • -
    • -biotic_specialised: Taxa depend upon a specialist pollinator for pollen transfer
    • -
    • -self_pollination: Flowers are self-pollinated or pollinated by another flower on the same plant
    • -
    -
  • -
-
-
-

post_fire_recruitment -

-
    -
  • label: Fire-cued seeding
  • -
  • description: Distinguishes between plants that do and do not have fire-cued seeding.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -post_fire_recruitment: Plants that germinate robustly following fire.
    • -
    • -post_fire_recruitment_moderate: Plants with a moderate number of seedlings present post-fire.
    • -
    • -no_post_fire_recruitment: Plants that do not show increased seeding following fire.
    • -
    -
  • -
-
-
-

regeneration_non_fire_disturbance -

-
    -
  • label: A plant’s ability to regenerate following a non-fire disturbance.
  • -
  • description: An indication of whether a plant is able to regenerate from a disturbance other than fire.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -resprouts_non_fire_disturbance: Fire-killed plants that have the ability to resprout following a disturbance other than fire.
    • -
    -
  • -
-
-
-

reproductive_light_environment_index -

-
    -
  • label: Canopy light environment required for reproduction
  • -
  • description: The minimum light environment required by seedlings for reproduction, scaled from 0 to 8. 0 indicates No direct light, extremely low levels of transmitted/reflected light, such as beneath dense fern or palm fronds close to ground level.; 0.5 indicates No direct light, very low levels of transmitted light; 1 indicates Rare or no exposure to direct light from lateral sources, and low levels of transmitted light.; 2 indicates Low lateral light and low–moderate transmitted light with <10% of inverted cone exposed to lateral sources of direct light, plus low to moderate levels of transmitted light; 3 indicates Low–moderate lateral & moderate transmitted light, wit <5% exposure of the focal crown to vertical direct light, and <15 % of inverted cone exposed to lateral sources of direct light, plus moderate transmitted light.; 4 indicates Moderate lateral light & moderate–high transmitted light, with 5 – 10% exposure of focal crown to direct vertical light, plus 2-20% exposure of inverted cone to lateral sources of direct light, plus moderate to high levels of transmitted light.; 5 indicates Moderate vertical light and moderate–high lateral light, with 5 – 20% exposure of focal crown to direct vertical light, plus one or both of, i. 10-40% exposure of 90-degree inverted cone to lateral sources of direct light, ii. exposure to high levels of transmitted light; 6 indicates Moderate-High vertical and high lateral light, with 10-30% of vertical projection of the crown exposed to vertical light, and lateral light exposure for > 40% of 90-degree inverted cone, 7 indicates High vertical and lateral light, with 30-80% of vertical projection of the crown exposed to vertical light, or exposure to lateral sources of direct light for > 60 % of a 90-degree inverted cone encompassing the focal crown.; 8 indicates Full light exposure of crown, with > 80% of the vertical projection of the crown exposed to vertical light. (reference, Wells 2012).
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0 - 8 {dimensionless}
  • -
-
-
-

reproductive_maturity -

-
    -
  • label: Age of plants at reproductive maturity
  • -
  • description: Age of plants at reproductive maturity.
  • -
  • type: numeric
  • -
  • units: a
  • -
  • allowable range: 0 - 1000 a
  • -
-
-
-

reproductive_maturity_secondary_after_fire -

-
    -
  • label: Years required to reach secondary reproductive maturity following disturbance (fire)
  • -
  • description: For species that survive a fire, the number of years post-disturbance required to resprout and re-reach reproductive maturity.
  • -
  • type: numeric
  • -
  • units: a
  • -
  • allowable range: 0.1 - 100 a
  • -
-
-
-

root_C_per_dry_mass -

-
    -
  • label: Root carbon (C) content per unit root dry mass
  • -
  • description: Root carbon (C) content per unit root dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 50 - 750 mg/g
  • -
-
-
-

root_delta13C -

-
    -
  • label: Root carbon (C) isotope signature (delta 13C)
  • -
  • description: Root carbon stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -50 - 0 {delta}[ppth]
  • -
-
-
-

root_delta15N -

-
    -
  • label: Root nitrogen (N) isotope signature (delta 15N)
  • -
  • description: Root nitrogen stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -25 - 75 {delta}[ppth]
  • -
-
-
-

root_diameter -

-
    -
  • label: Root diameter
  • -
  • description: Root diameter; should only be used to record the maximum root diameter
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1000 mm
  • -
-
-
-

root_distribution_coefficient -

-
    -
  • label: Root biomass depth distribution coefficient
  • -
  • description: Root biomass depth distribution coefficient (‘B’ from Gale & Grigal (1987), where high values indicate root biomass allocated deeper in the soil).
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0.5 - 1 {dimensionless}
  • -
-
-
-

root_dry_matter_content -

-
    -
  • label: Root dry mass per unit root fresh mass (Root dry matter content)
  • -
  • description: Root dry mass per unit root fresh mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 10 - 1000 mg/g
  • -
-
-
-

root_fine_root_coarse_root_ratio -

-
    -
  • label: Volume of fine root / Volume of coarse root
  • -
  • description: Volume of fine root (<0.5mm diametre) / Volume of coarse root (>0.5mm diametre)
  • -
  • type: numeric
  • -
  • units: mm3/mm3
  • -
  • allowable range: 0.05 - 50 mm3/mm3
  • -
-
-
-

root_mass_fraction -

-
    -
  • label: Fraction of plant dry mass comprised of root material
  • -
  • description: Fraction of plant dry mass comprised of root material
  • -
  • type: numeric
  • -
  • units: mg/mg
  • -
  • allowable range: 0.01 - 1 mg/mg
  • -
-
-
-

root_morphology -

-
    -
  • label: Categorical root descriptions, sense Cannon 1949
  • -
  • description: Categorical root descriptions sensu Cannon 1949, A Tentative Classification of Root Systems, Ecology, doi.org/10.2307/1932458
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -type_i: The primary root is fibrous or fleshy and is relatively long; mesophytic
    • -
    • -type_ii: The primary root is relatively short and is fibrous. Roots are well branched in a dry habitat but branch little in one that is wet.
    • -
    • -type_iii: The primary root is usually long and fibrous. The first order lateral roots are well branched and are usually short; they are rather evenly distributed along the primary root; xerophytic
    • -
    • -type_iv: The primary root is usually long and slender like that of Type II. The first order lateral roots are well branched. Those closest to the surface of the ground, or not far below, are relatively long; xerophytic and mesophytic
    • -
    • -type_v: The primary root is divided-forked or branched-and fibrous, and with few first order lateral roots, or, in age, apparently with none; xerophytic
    • -
    • -type_vi: The primary root is usually as in Type V. The first order lateral roots are mostly on the upper portion of the primary root and are thus relatively superficial; xerophytic or in well aerated sandy soil where the rainfall is not light.
    • -
    • -type_vii: Adventitious roots that are in one group and arise on a short horizontal, or vertical, axis of the shoot. They are fibrous or fleshly; mesophytic and hydrophytic
    • -
    • -type_viii: Adventitious roots that are in one group and are fibrous and fleshy, or fibrous and thick. The fibrous adventitious roots are absorbing-anchoring roots and are usually with laterals to the second order; meophytic
    • -
    • -type_ix: Adventitious roots that arise on the aerial stem and branches of some herbaceous taxa, shrubs, and trees; on creepers, vines, and runners; and on subterranean rhizomes and stolons
    • -
    -
  • -
-
-
-

root_N_per_dry_mass -

-
    -
  • label: Root nitrogen (N) content per unit root dry mass
  • -
  • description: Root nitrogen (N) content per unit root dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

root_P_per_dry_mass -

-
    -
  • label: Root phosphorus (P) content per unit root dry mass
  • -
  • description: Root phosphorus (P) content per unit root dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 100 mg/g
  • -
-
-
-

root_shoot_ratio -

-
    -
  • label: Root to shoot ratio (dry mass)
  • -
  • description: Ratio of root dry mass to shoot dry mass
  • -
  • type: numeric
  • -
  • units: mg{root}/mg{shoot}
  • -
  • allowable range: 0.01 - 15 mg{root}/mg{shoot}
  • -
-
-
-

root_soluble_starch_per_mass -

-
    -
  • label: Soluble starch per root mass
  • -
  • description: Mass of soluble starch per root mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

root_soluble_sugars_per_mass -

-
    -
  • label: Soluble sugars per root mass
  • -
  • description: Mass of soluble sugars per root mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 200 mg/g
  • -
-
-
-

root_specific_root_area -

-
    -
  • label: Root area per unit root dry mass (specific root area)
  • -
  • description: Root area per unit root dry mass
  • -
  • type: numeric
  • -
  • units: mm2/mg
  • -
  • allowable range: 0.001 - 1 mm2/mg
  • -
-
-
-

root_specific_root_length -

-
    -
  • label: Root length per unit root dry mass (specific root length, SRL)
  • -
  • description: Root length per unit root dry mass; SRL
  • -
  • type: numeric
  • -
  • units: m/g
  • -
  • allowable range: 0.5 - 5000 m/g
  • -
-
-
-

root_specific_taproot_length -

-
    -
  • label: Taproot length per unit root dry mass (specific tap root length, STRL)
  • -
  • description: Taproot length per unit root dry mass. This trait measures the efficiency of taproot length per unit mass during the very early stage of growth when seedlings need to reach reliable water.
  • -
  • type: numeric
  • -
  • units: m/g
  • -
  • allowable range: 0.5 - 5000 m/g
  • -
-
-
-

root_structure -

-
    -
  • label: Root structure
  • -
  • description: Specific specialized types of root structures and root symbioses. https://www.mycorrhizas.info/ provides detailed information for types of mycorrhizal associations.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -arbuscular_mycorrhizal: Symbiosis in which the mycorrhizal fungi does penetrate the cortex cells of the plant roots and its hyphae form arbuscules and vesicles inside the plant root; endomycorrhizal, AM, VAM
    • -
    • -carnivorous: non-mycorrhizal carnivorous root
    • -
    • -cluster_roots: cluster roots in non-proteoid taxa
    • -
    • -coiling_vam: Associations that spread predominantly by intracellular hyphal coils within roots
    • -
    • -dauciform_root: A type of cluster root found in the family Cyperaceae
    • -
    • -ectomycorrhizal: Symbiosis in which the mycorrhizal fungi does not penetrate the cortex cells of the plant roots
    • -
    • -ericoid_mycorrhizal: A form of arbuscular mycorrhizal relationship only found on plants in the order Ericales. The fungi’s hyphae penetrate the plant root but do not form arbuscules
    • -
    • -fine_roots: Particularly fine roots for nutrient uptake
    • -
    • -haustorium: highly modified stem or root of a parasitic plant, such as mistletoe , or a specialized branch or tube originating from a hairlike filament (hypha) of a fungus. The haustorium penetrates the tissues of a host and absorbs nutrients and water.
    • -
    • -hemiparasitic_root: Partially parasitic root
    • -
    • -long_root_hairs: Specialised long root hairs
    • -
    • -mycorrhizal: Mycorrhizal, type not specified
    • -
    • -non_mycorrhizal: Plants lacking a mycorrhizal symbiont
    • -
    • -orchid_mycorrhizal: A mycorrhizal relationship specific to orchid taxa, and for most orchids, essential for seedlings to establish
    • -
    • -parasitic_root: Parasitic root
    • -
    • -proteoid_root: Also known as cluster roots, are plant roots that form clusters of closely spaced short lateral rootlets and aid in nutrient upake in nutrient-poor soils; common in members of the family Proteaceae, but present in other families as well
    • -
    • -root_hairs: Specialised root hairs
    • -
    • -sand-binding: Persistent sheaths of sand that form around the roots of taxa in the families Restionaceae, Cyperaceae, Haemodoraceae, and Lomandraceae in western Australia. Assumed to function in nutrient uptake.
    • -
    • -saprophyte: Plant that acquires nutrients from decaying matter
    • -
    • -subepidermal_mycorrhizal: Mycorrhizae where hyphae grow in a cavity under epidermal cells. Only in the genus Thysanotus (family Laxmaniaceae).
    • -
    • -unknown: root structures unknown
    • -
    -
  • -
-
-
-

root_system_type -

-
    -
  • label: Tap root
  • -
  • description: Binary variable describing whether or not a plant has a tap root
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -tap_root_absent: tap root not present
    • -
    • -tap_root_present: tap root present
    • -
    • -tap_root_sometimes_present: tap root sometimes present
    • -
    -
  • -
-
-
-

root_thickest_diameter -

-
    -
  • label: Thickest root diameter
  • -
  • description: Diameter of the thickest root
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1000 mm
  • -
-
-
-

root_wood_density -

-
    -
  • label: Root wood density
  • -
  • description: Root wood dry mass per unit root wood fresh volume
  • -
  • type: numeric
  • -
  • units: mg/mm3
  • -
  • allowable range: 0.05 - 10 mg/mm3
  • -
-
-
-

root_xylem_delta15N -

-
    -
  • label: Xylem nitrogen (N) isotope signature (delta 15N) from roots
  • -
  • description: Xylem nitrogen stable isotope signature from roots
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -25 - 75 {delta}[ppth]
  • -
-
-
-

sapwood_cross_sectional_area -

-
    -
  • label: Stem cross-sectional area without bark
  • -
  • description: Cross-sectional area of the stem once bark is removed
  • -
  • type: numeric
  • -
  • units: mm2
  • -
  • allowable range: 1 - 1000 mm2
  • -
-
-
-

sapwood_specific_conductivity -

-
    -
  • label: Sapwood specific conductivity (Ks)
  • -
  • description: Ks; Describes the flow rate of water (kg/s) along a stem for a given drop in pressure (1/MPa), normalised to the length of the segment (1/m). Calculated as hydraulic conductivity divided by the sapwood cross-sectional area where the measurement is taken.
  • -
  • type: numeric
  • -
  • units: kg/m/MPa/s
  • -
  • allowable range: 0.01 - 500 kg/m/MPa/s
  • -
-
-
-

sapwood_specific_conductivity_theoretical -

-
    -
  • label: Theoretical sapwood specific conductivity (Ks)
  • -
  • description: Theoretical Ks or Kp; Describes the theoretical flow rate of water (kg/s) along a stem for a given drop in pressure (1/MPa). Calculated as theoretical Kh, calculated based on Hagen-Poiseuille’s law, divided by the microscopically determined cross-sectional area without bark and pit.
  • -
  • type: numeric
  • -
  • units: kg/m/MPa/s
  • -
  • allowable range: 0.05 - 5000 kg/m/MPa/s
  • -
-
-
-

seed_Ca_per_seed_dry_mass -

-
    -
  • label: Seed calcium concentration
  • -
  • description: Seed calcium (Ca) content per unit seed mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 100 mg/g
  • -
-
-
-

seed_count -

-
    -
  • label: Seed count
  • -
  • description: Number of seeds produced by a plant
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 1e+05 {count}
  • -
-
-
-

seed_dormancy_class -

-
    -
  • label: Dormancy type
  • -
  • description: Classification for seed dormancy
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -morphophysiological_dormancy: Seeds exhibit morphophysiological dormancy
    • -
    • -non_dormant: Seeds are non-dormant
    • -
    • -physical_dormancy: Seeds exhibit physical dormancy
    • -
    • -physiological_dormancy: Seeds exhibit physiological dormancy
    • -
    -
  • -
-
-
-

seed_dry_mass -

-
    -
  • label: Seed dry mass
  • -
  • description: Dry mass of a mature seed, including both oven dried and air-dried samples. (Notes, Standard methods people will have used for dried seeds include, ‘fresh’ (at dispersal, mature); ‘air dried’ (at local ambient conditions); ‘seed bank air dried’ (to 15% relative humidity); ‘oven dried’ (>100 deg C for a set number of hours; e.g. seed bank standard is 103 deg C for 17 hours)
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 1e-05 - 1e+06 mg
  • -
-
-
-

seed_dry_mass_reserve -

-
    -
  • label: Seed dry embryo and endosperm mass
  • -
  • description: Dry mass of a seed’s embryo and endosperm (if present), the component of a seed that provides energy to a seedling. Distinct from a seed’s dispersal structures or protective tissues.
  • -
  • type: numeric
  • -
  • units: mg
  • -
  • allowable range: 1e-05 - 1e+05 mg
  • -
-
-
-

seed_germination -

-
    -
  • label: Germination (proportion)
  • -
  • description: Proportion of seeds in a sample that germinated under conditions specified under methods or contextual conditions.
  • -
  • type: numeric
  • -
  • units: {count}/{count}
  • -
  • allowable range: 0 - 1 {count}/{count}
  • -
-
-
-

seed_germination_treatment -

-
    -
  • label: Germination treatment
  • -
  • description: Treatment required for seed to display high germination rates. The data included in AusTraits are mostly from seed banks that have recorded the protocols they use to encourage seeds to germinate. The treatments may therefore be only loosely connected to the cues required for a species’ to break dormancy.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -after_ripening: Seed germinates more readily after a period of warm, dry storage.
    • -
    • -chemical_treatment: Seed germinates more readily after a chemical treatment.
    • -
    • -cold: Seed germinates more readily after cold treatment.
    • -
    • -dark: Seed germinates more readily after being stored in the dark.
    • -
    • -heat: Seed germinates more readily after being heated.
    • -
    • -heat_lethal: Seed is heat sensitive. (A fire response, more than a treatment to break dormancy.)
    • -
    • -heat+smoke: Seed germinates more readily after a treatment that merges heat and smoke.
    • -
    • -imbibe_hot: Seed germinates more readily after being soaked in hot water; water temperature usually between 70 deg C to just below boiling.
    • -
    • -leaching: Seed germinates more readily after leaching out certain chemicals.
    • -
    • -light: Seed germinates more readily after light exposure.
    • -
    • -mycorrhizae: Seed germinates more readily if infected by a mycorrhizal symbiont.
    • -
    • -none: No treatment required for seed to display high germination rates.
    • -
    • -rain: Seed germinates more readily after rain.
    • -
    • -scarify: Seed coat is removed, nicked, or otherwise punctured to increase germination.
    • -
    • -smoke: Seed germinates more readily after being subjected to a smoke treatment; includes smoked water.
    • -
    • -stratification: Seed germinates more readily after being stored in moist conditions; not specified if the treatment was cold stratification or warm stratification -
    • -
    • -stratification_cold: Seed germinates more readily after a period of cold, wet storage.
    • -
    • -stratification_warm: Seed germinates more readily after a period of warm, wet storage.
    • -
    -
  • -
-
-
-

seed_height -

-
    -
  • label: Seed height
  • -
  • description: Shortest axis of a seed; orthogonal to its length and width. (Notes, Observations of this trait in AusTraits are almost certainly an undocumented mix of dimensions of true seeds and diaspores. When all or part of the fruit is not easily separated from the true seed, many researchers will have recorded and submitted a diaspore height, but labeled the data ’seed height. The intent of this measurement is that it excludes appendages, although it is likely some submitted measurements include small appendages that are not easily separated from the seed.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1000 mm
  • -
-
-
-

seed_K_per_seed_dry_mass -

-
    -
  • label: Seed potassium concentration
  • -
  • description: Seed potassium (K) content per unit seed mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 100 mg/g
  • -
-
-
-

seed_length -

-
    -
  • label: Seed length
  • -
  • description: Longest linear seed dimension. (Notes, Observations of this trait in AusTraits are almost certainly an undocumented mix of dimensions of true seeds and diaspores. When all or part of the fruit is not easily separated from the true seed, many researchers will have recorded and submitted a diaspore length, but labeled the data ‘seed length’. The intent of this measurement is that it excludes appendages, although it is likely some submitted measurements include small appendages that are not easily separated from the seed.)
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1000 mm
  • -
-
-
-

seed_longevity_categorical -

-
    -
  • label: Seed longevity
  • -
  • description: Seed or propagule longevity
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -transient: Propagule transient, lasting in the seedbank for only weeks to months.
    • -
    • -intermediate_longevity: Propagule survives for approximately months to less than a year, although cutoff varies by study.
    • -
    • -persistent: Propagule persistent, time not specified.
    • -
    • -short_persistent: Propagule is persistent for approximately 1 to 5 years, although cutoff varies by study.
    • -
    • -long_persistent: Propagule is persistent for more than 5 years, although cutoff varies by study.
    • -
    • -widely_dispersed: Seed longevity not important, as seeds are widely dispersed and always available for germination.
    • -
    -
  • -
-
-
-

seed_longevity_numeric -

-
    -
  • label: Seed longevity
  • -
  • description: Seed longevity
  • -
  • type: numeric
  • -
  • units: a
  • -
  • allowable range: 0.01 - 1000 a
  • -
-
-
-

seed_Mg_per_seed_dry_mass -

-
    -
  • label: Seed magnesium concentration
  • -
  • description: Seed magnesium (Mg) content per unit seed mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

seed_N_per_seed_dry_mass -

-
    -
  • label: Seed nitrgeon concentration
  • -
  • description: Seed nitrogen (N) content per unit seed mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 10 - 1000 mg/g
  • -
-
-
-

seed_oil_per_seed_dry_mass -

-
    -
  • label: Seed oil content
  • -
  • description: Seed oil content as a fraction of total seed weight, usually on a dry weight basis
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 1e-04 - 1 g/g
  • -
-
-
-

seed_P_per_seed_dry_mass -

-
    -
  • label: Seed phosphorus concentration
  • -
  • description: Seed phosphorus (P) content per unit seed mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 100 mg/g
  • -
-
-
-

seed_protein_per_seed_dry_mass -

-
    -
  • label: Seed protein content
  • -
  • description: Seed protein content as a fraction of total seed weight
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 1e-05 - 1 g/g
  • -
-
-
-

seed_release -

-
    -
  • label: Serotiny
  • -
  • description: When a fruit or cone only releases its seeds following an environmental trigger, often fire; ; see also ‘seed_longevity_categorical’, ‘seed_storage_location’, ‘soil_seedbank’, ‘canopy_seedbank’, and ‘serotiny’
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -serotinous: Plant releases its seeds following an environmental trigger (usually fire)
    • -
    • -mature_en_mass: Seeds released en masse when mature (eg annually)
    • -
    • -gradual_release: Seeds maturing and released gradually from parent
    • -
    -
  • -
-
-
-

seed_S_per_seed_dry_mass -

-
    -
  • label: Seed sulphur concentration
  • -
  • description: Seed sulphur (S) content per unit seed mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

seed_shape -

-
    -
  • label: Three-dimensional shape of the seed
  • -
  • description: Three-dimensional shape of the seed. (Notes, The trait values indicate the approximate shape of the seed, acknowledging few seeds are exactly ellipsoid, globoid, etc. The list of terms has been chosen to represent different length:width:height ratios and different levels of symmetry. Terms that suggest very specific shapes have generally been grouped into a broader category for increased interoperability across datasets.)
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -comma-shaped: A seed displaying a single arc of curvature, such that it bilaterally symmetrical. (synonyms, comma-shaped, falcate, sickle-shaped scimitar-shaped)
    • -
    • -conical: Cone-shaped, with a broad flat base and narrow apex; turbinate refers to the inverse shape. (synonyms, obconical, cone-shaped, turbinate, top-shaped)
    • -
    • -cylindrical: A cylinder, a shape with a flat top and bottom that are circular or elliptical in outline and are linked by a curved surface. (synonyms, terete)
    • -
    • -discoid: A subset of cylinder, a shape with a flat, circular or elliptical top and bottom, linked by a curved surface, where the length of the curved surface is much shorter than the cross-section of the flat surfaces. (synonyms, flat)
    • -
    • -ellipsoid: A 3-dimensional shape that is elliptic in long section and circular in cross section; length:width ratio between 2:1 and 3:2. (synonyms, obloid, oblong)
    • -
    • -ellipsoid_flattened: A 3-dimensional shape that is elliptic in long section and and laterally compressed/flattened such that it is non-circular in cross section; length:width ratio between 2:1 and 3:2.
    • -
    • -fusiform: Spindle-shaped; A 3-dimension shape that is narrowly ellipsoid, circular in cross-section and tapering sharply toward both ends. (synonyms, spindle-shaped)
    • -
    • -globoid: A 3-dimensional shape that is circular in both long section and cross section. (synonyms, globose, globular, spherical)
    • -
    • -globoid_flattened: A 3-dimensional shape that is circular in both long section and somewhat flattened such that it is non-circular in cross section.
    • -
    • -hemispheric: Half a sphere or globe, with a flat base, domed top, and circular in cross-section.
    • -
    • -hemispheric_flattened: A 3-dimensional shape that is a laterally compressed/flattened half-sphere or globe; shape has a flat base, a domed top, and is elliptical in cross-section.
    • -
    • -lenticular: Shaped like a biconvex lens and circular in cross section; shaped like a lentil.
    • -
    • -orbicular: A poorly defined term that remains in AusTraits only as a placeholder; it appears to be used as both globoid (spherical) and lenticular by different authors.
    • -
    • -ovoid: A 3-dimensional shape that is egg-shaped in long section and circular in cross section. Term as used in AusTraits includes variants on egg-shaped including pyriform (pear-shaped) and obovoid (inversely egg-shaped) (synonyms, pyriform, obovoid)
    • -
    • -ovoid_elongated: A 3-dimensional shape that is egg-shaped in long section and circular in cross section, where the length dimension is much longer than the width/height dimensions. Term as used in AusTraits includes specific shapes club-shaped (clavate/obclavate) and tear-shaped (lachrimiform). (synonyms, lachrimiform; tear-shaped; lachrymiform; clavate; obclavate; club-shaped)
    • -
    • -ovoid_flattened: A 3-dimensional shape that is egg-shaped in long section and laterally compressed/flattened such that is non-circular in cross section.
    • -
    • -polyhedral: A 3-dimensional shape with distinct, fairly flat faces and edges; includes prisms and tetrahedral shaped seeds. (synonyms, rhomboid, prismatic, pyramidal, rectangular, square)
    • -
    • -polyhedral_elongated: A 3-dimensional shape with distinct, fairly flat faces and edges, where the length dimension is much longer than the width/height dimensions; includes elongate prisms and elongate tetrahedral shaped seeds.
    • -
    • -polyhedral_inflated: A 3-dimensional shape with distinct faces and edges, but the faces tend to bulge outwards.
    • -
    • -reniform: Having a cross-section that is roughly circular with a notch; strictly a kidney-shape, but the definition applied here includes heart-shaped seeds and other seeds with a distinct notch. (synonyms, cordiform, kidney-shaped, heart-shaped)
    • -
    • -samara: A seed with wings.
    • -
    • -sectoroid: Shaped like an orange segment or wedge of a sphere. (synonyms, wedge-shaped)
    • -
    • -sinusoidal: A seed with two arcs of curvature or a single arc, such that it lacks an axis of symmetry. (synonym, sigmoidal)
    • -
    -
  • -
-
-
-

seed_storage_location -

-
    -
  • label: Location where seeds are stored at maturity
  • -
  • description: Location where seeds are stored at maturity; see also ‘seed_longevity_categorical’, ‘soil_seedbank’, ‘canopy_seedbank’, and ‘serotiny’
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -canopy: Seeds stored in the canopy, usually still within a woody cone
    • -
    • -soil: Seeds stored in the soil
    • -
    • -none: Seeds are not stored
    • -
    • -not_canopy: Seed explicitly not stored in the canopy; other storage locations unknown
    • -
    -
  • -
-
-
-

seed_surface_hairs -

-
    -
  • label: Seed surface hairs
  • -
  • description: Surface hairiness of a seed, including vestiture (trichome cover) and bristles.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -hairs: Seed surface with trichomes or bristles.
    • -
    • -hairs_branched: Seed surface with branched trichomes or bristles.(synonyms, stellate, plumose)
    • -
    • -hairs_simple: Seed surface with simple trichomes or bristles. (tomentose, velutinous, velvety, sericeous)
    • -
    -
  • -
-
-
-

seed_surface_texture -

-
    -
  • label: Seed surface texture
  • -
  • description: Surface texture of a seed, including descriptions of configuration (overall surface patterns of the epidermal cells) and epidermal excrescence (surface patterns caused by structural outgrowths of the epidermis). This trait does not include appendages; see dispersal_appendages for descriptions of seed appendages.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -bumpy: Seed surface covered with minute, rounded protuberances. (synonyms, verrucate, papillate, tuberculate, undulate)
    • -
    • -netted: Seed surface covered with raised, reticulate, interconnected ridges. (synonyms, reticulate)
    • -
    • -papery: Seed surface with a thin and papery texture. (synonyms, chartaceous)
    • -
    • -pitted: Seed surface pitted. (synonyms, foveolate, foveate, dimpled, punctate)
    • -
    • -ribbed: Seed surface with longitudinal raised ribs or ridges. (synonyms, costate, carinate, lineate, fluted, striate, strigate, lineolate, scalariform)
    • -
    • -rough: Seed surface rough with no organization of markings, resembling sandpaper. (synonyms, scabrous)
    • -
    • -scaly: Seed surface rough with loose scales differing in direction or not parallel in direction. (synonyms, scurfy, squarrose)
    • -
    • -smooth: Seed surface smooth, lacking texture. (synonyms, glabrous)
    • -
    • -wrinkled: Seed surface with a wrinkled, rugose texture. (synonyms, rugose, rugulose, bullate)
    • -
    -
  • -
-
-
-

seed_viability -

-
    -
  • label: Seed viability
  • -
  • description: Proportion of mature seeds in a sample that are capable of germinating under suitable conditions.
  • -
  • type: numeric
  • -
  • units: {count}/{count}
  • -
  • allowable range: 0 - 1 {count}/{count}
  • -
-
-
-

seed_volume -

-
    -
  • label: Seed volume
  • -
  • description: Volume of a seed
  • -
  • type: numeric
  • -
  • units: mm3
  • -
  • allowable range: 0.001 - 1e+05 mm3
  • -
-
-
-

seed_width -

-
    -
  • label: Seed width
  • -
  • description: Longest width dimension of a seed; orthogonal to the length. (Notes, Observations of this trait in AusTraits are almost certainly an undocumented mix of dimensions of true seeds and diaspores. When all or part of the fruit is not easily separated from the true seed, many researchers will have recorded and submitted a diaspore width, but labeled the data ‘seed width’. The intent of this measurement is that it excludes appendages, although it is likely some submitted measurements include small appendages that are not easily separated from the seed.
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: 0.01 - 1000 mm
  • -
-
-
-

seedling_first_node_leaf_count -

-
    -
  • label: Leaf count at first node
  • -
  • description: Binary variable distinguishing between seedlings where the leaves at the first node are single versus paired.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -single: When there is a single leaf at the first node
    • -
    • -paired: When there is a pair of leaves at the first node
    • -
    -
  • -
-
-
-

seedling_first_node_leaf_type -

-
    -
  • label: First leaf style
  • -
  • description: Binary variable distinguishing between seedlings where the first leaf is scale-like (cataphyll) versus leaf-like.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -scale-like: When the first leaf at germination is scale-like, also referred to as a cataphyll
    • -
    • -leaf-like: When the first leaf at germination is leaf-like
    • -
    -
  • -
-
-
-

seedling_germination_location -

-
    -
  • label: Seedling germination location
  • -
  • description: Binary variable distinguishing between seedlings that germinate above versus below ground.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -epigeal: Germinant with one or more cotyledons emerging aboveground.
    • -
    • -hypogeal: Germinant with all cotyledons remaining belowground.
    • -
    -
  • -
-
-
-

seedling_hypocotyl_hairs -

-
    -
  • label: Hypocotyl type
  • -
  • description: Binary variable distinguishing between glabrous versus hairy hypocotyls (the embryonic axis to which the cotyeledons are attached).
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -glabrous: Hypocotyl lacks hairs
    • -
    • -hairy: Hypocotyl has hairs
    • -
    -
  • -
-
-
-

serotiny -

-
    -
  • label: Serotiny
  • -
  • description: Categorical variable describing whether a fruit or cone only releases its seeds following an environmental trigger, often fire
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -not_serotinous: Plant does not display serotiny
    • -
    • -serotinous: Plant serotinous, level not specified
    • -
    • -serotiny_low: Plant displays a low level of serotiny
    • -
    • -serotiny_moderate: Plant displays a moderate level of serotiny
    • -
    • -serotiny_high: Plant displays a high level of serotiny
    • -
    -
  • -
-
-
-

sex_type -

-
    -
  • label: Plant sex type
  • -
  • description: Plant sex type
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -androdioecious: Taxa in which hermaphroditic and staminate (male) plants coexist within a population
    • -
    • -andromonoecious: Taxa with hermaphrodite flowers and staminate flowers (producing just male gametes) on the same plant but no pistillate (female) flowers.
    • -
    • -dioecious: Taxa that produce male and female flowers on separate plants
    • -
    • -gynodioecious: Taxa in which hermaphroditic and pistillate (female) plants coexist within a population
    • -
    • -gynomonoecious: Taxa with hermaphrodite flowers and pistillate flowers (producing just female gametes) on the same plant but no staminate (male) flowers.
    • -
    • -hermaphrodite: Taxa with flowers that produce both male and female gametes; bisexual
    • -
    • -monoecious: Taxa that have both male and female flowers on the same plant, but an individual flower produces only male or female gametes.
    • -
    • -polygamous: Taxa with both unisexual and bisexual flowers on the same plant
    • -
    • -polygamodioecious: Taxa where some flowers on a plant are hermaphrodite and other are pistillate (female) or staminate (male)
    • -
    • -polygamonoecious: Taxa where some plants in a population have hermaphrodite and pistillate (female) flowers and others have hermaphrodite and staminate (male) flowers
    • -
    • -trioecious: Taxa where plants in a population have either hermaphroditic (bisexual) flowers, pistillate (female) flowers, or staminate (male) flowers
    • -
    • -unknown: inadequate information to assign a sex type
    • -
    -
  • -
-
-
-

soil_seedbank -

-
    -
  • label: Seeds present in soil seedbank
  • -
  • description: Binary variable indicating if seeds present in soil seedbank; see also ‘seed_longevity_categorical’, ‘seed_storage_location’, ‘canopy_seedbank’, and ‘serotiny’
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -soil_seedbank_absent: Seeds not present in soil seedbank
    • -
    • -soil_seedbank_present: Seeds present in soil seedbank
    • -
    -
  • -
-
-
-

sprout_depth -

-
    -
  • label: Depth below ground (negative number) or height above ground (positive number) from which buds emerge following a disturbance (i.e. fire)
  • -
  • description: Depth of resprouting shoots
  • -
  • type: numeric
  • -
  • units: mm
  • -
  • allowable range: -100 - 100 mm
  • -
-
-
-

stem_C_per_dry_mass -

-
    -
  • label: Stem carbon (C) content per unit stem dry mass
  • -
  • description: Stem carbon (C) content per unit stem dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 100 - 1000 mg/g
  • -
-
-
-

stem_count_categorical -

-
    -
  • label: Stem Count, categorical
  • -
  • description: Number of stems present, expressed in groups, where categories were 1=1; 2-3=2; 4-10=3; 11-30=4; and >30=5. Used by Peter Vesk.
  • -
  • type: numeric
  • -
  • units: {count}
  • -
  • allowable range: 0 - 5 {count}
  • -
-
-
-

stem_cross_sectional_area -

-
    -
  • label: Stem cross-sectional area
  • -
  • description: Cross-sectional area of the stem
  • -
  • type: numeric
  • -
  • units: mm2
  • -
  • allowable range: 1 - 1000 mm2
  • -
-
-
-

stem_density -

-
    -
  • label: Stem dry mass per unit fresh stem volume
  • -
  • description: Stem dry mass per unit stem fresh volume, specifically for non-woody or partially woody stems that otherwise are outliers for wood density
  • -
  • type: numeric
  • -
  • units: mg/mm3
  • -
  • allowable range: 0.1 - 1.4 mg/mm3
  • -
-
-
-

stem_dry_matter_content -

-
    -
  • label: Stem dry mass per unit stem fresh mass (Stem dry matter content)
  • -
  • description: Stem dry mass per unit stem fresh mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 100 - 1000 mg/g
  • -
-
-
-

stem_growth_habit -

-
    -
  • label: Stem growth habit
  • -
  • description: Trait characterising a stem’s structure and 3-dimensional extent, including the position of stems, degree of branchiness, density of branches, and branch angles relative to other branches and the ground surface.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -arborescent: Tree-like growth habit.
    • -
    • -erect: Stems that grow upright.
    • -
    • -caespitose: Multiple short-shoots arise from the base of the plant forming a dense tuft, as in a bunch-grass (synonym, cespitose, bunch-grass, tussock)
    • -
    • -cushion-forming: Multiple erect, short stems arise from the soil and are so tightly packed that they form dense, even, rounded canopy with no gaps. (synonym, cushion)
    • -
    • -mat-forming: Multiple stems that are mostly horizontal and are densely packed, but open enough that there are still a few gaps between them.
    • -
    • -tufted: Plant has a dense clump of leaves, either at the base of the plant or clusters of leaves growing close together higher on the plant. This term can refer to grasses, shrubs, or trees.
    • -
    • -creeping: Stem that creeps along the ground, rooting at nodes. (synonym, repent)
    • -
    • -decumbent: Stems whose bases lie flat on the ground, but whose tips grow upward. (synonym, ascending)
    • -
    • -prostrate: Stems lie flat on the ground but do not root at nodes (synonym, procumbent, reclining, trailing)
    • -
    • -rosette: Plants whose leaves radiate from a central point at or near ground level. (synonym, acaulescent, rosulate)
    • -
    • -climbing: Stem that does not have a self-supporting structure and ascends by leaning on or attaching itself to surrounding vegetation or another substrate. Climbing mechanisms include tendrils, petioles, adventitious roots, scrambling, and twining and are distinguished between in the trait plant_climbing_mechanism.
    • -
    • -sprawling: Stem that sprawls across other plants or objects, but lacks specialised climbing structures or mechanisms.(synonym, clambering, scandent)
    • -
    • -rhizomatous: Plants with short horizontal underground stems from which shoots emerge.
    • -
    • -stoloniferous: Plants with long horizontal branches either slightly belowground or aboveground, that root at their nodes or tips, producing new plants. (synonym, sarmentose)
    • -
    • -spreading: Plants with a notable horizontal extent, referring either to a broad tree canopy or a shrub or herb that spreads across the ground.
    • -
    • -floating: Plant where most of the leaves are floating on water.
    • -
    • -submerged: Plant where most of the leaves are submerged beneath the surface of a waterbody.
    • -
    • -dense: Plant with a high density of branches.
    • -
    • -compact: Plant with closely packed branches.
    • -
    • -bushy: Plant with much-branched branches. (synonym, shrubby)
    • -
    • -open: Plant with an open architecture of branches.
    • -
    • -spindly: Plants with weak, skinny branches.
    • -
    -
  • -
-
-
-

stem_hydraulic_conductivity -

-
    -
  • label: Hydraulic conductivity (Kh)
  • -
  • description: Kh; Measure of how efficiently water is transported through the leaf, determined as the ratio of water flow rate through the leaf to the difference in water potential across the leaf, standardised to leaf area; units same as mg*m/s/MPa
  • -
  • type: numeric
  • -
  • units: 10^6.kg.m/MPa/s
  • -
  • allowable range: 0.01 - 2000 10^6.kg.m/MPa/s
  • -
-
-
-

stem_mass_fraction -

-
    -
  • label: Stem mass fraction
  • -
  • description: Ratio of stem dry mass to total plant dry mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.01 - 1 g/g
  • -
-
-
-

stem_mass_to_shoot_mass_ratio -

-
    -
  • label: Fraction of shoot dry mass that is stems (versus leaves)
  • -
  • description: Fraction of shoot dry mass that is stems (versus leaves)
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0 - 1 g/g
  • -
-
-
-

stem_modulus_of_elasticity -

-
    -
  • label: A measure of the force required to bend a stem
  • -
  • description: A measure of the force required to bend a stem; This is the modulus of a compound tissue made up of bark and wood (or xylem) and potentially pith; could also be called structural modulus of elasticity
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 10 - 100000 MPa
  • -
-
-
-

stem_N_per_dry_mass -

-
    -
  • label: Stem nitrogen (N) content per unit stem dry mass
  • -
  • description: Stem nitrogen (N) content per unit stem dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 1000 mg/g
  • -
-
-
-

stem_respiration_per_dry_mass -

-
    -
  • label: Stem respiration rate per unit dry mass
  • -
  • description: Stem respiration rate per unit dry mass
  • -
  • type: numeric
  • -
  • units: umol{CO2}/g/s
  • -
  • allowable range: 0.01 - 10 umol{CO2}/g/s
  • -
-
-
-

stem_soluble_starch_per_mass -

-
    -
  • label: Soluble starch per stem mass
  • -
  • description: Mass of soluble starch per stem mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

stem_soluble_sugars_per_mass -

-
    -
  • label: Soluble sugars per stem mass
  • -
  • description: Mass of soluble sugars per stem mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 1 - 200 mg/g
  • -
-
-
-

stem_specific_conductivity -

-
    -
  • label: Sapwood specific conductivity (Ks)
  • -
  • description: Describes the flow rate of water (kg/s) along a stem for a given drop in pressure (1/MPa), normalised to the length of the segment (1/m). Calculated as hydraulic conductivity divided by the transverse branch area where the measurement is taken.
  • -
  • type: numeric
  • -
  • units: kg/m/MPa/s
  • -
  • allowable range: 0.01 - 500 kg/m/MPa/s
  • -
-
-
-

stem_vessel_density -

-
    -
  • label: Count of vessels per area in stems
  • -
  • description: Count of vessels per area in stems
  • -
  • type: numeric
  • -
  • units: {count}/mm2
  • -
  • allowable range: 0.4 - 2000 {count}/mm2
  • -
-
-
-

stem_vessel_diameter -

-
    -
  • label: Diameter of xylem vessels in stems
  • -
  • description: Diameter of xylem vessels in stems
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 1000 um
  • -
-
-
-

stem_vessel_diameter_hydraulic -

-
    -
  • label: Hydraulic mean diameter of xylem vessels
  • -
  • description: Hydraulic diameter (hydraulically weighted diameter) is based on the equivalent circle diameter D and has been introduced to reflect the actual conductance of conduits. Based on the Hagen–Poiseuille law, a few large conduits may transport an equal amount of water as many small ones.
  • -
  • type: numeric
  • -
  • units: um
  • -
  • allowable range: 1 - 500 um
  • -
-
-
-

stem_vessel_lumen_fraction -

-
    -
  • label: Fraction of xylem vessels comprised of lumen
  • -
  • description: Fraction of xylem vessels comprised of lumen
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.001 - 1 um2/um2
  • -
-
-
-

stem_vessel_multiple_fraction -

-
    -
  • label: Index for the tendency of vessels to occur in clusters (smaller value) versus occur as solitary vessels (1)
  • -
  • description: Vmf; A vessel grouping index, the number of groups of vessels (vessels in direct contact with one another) divided by the total number of vessels (Scholz et al. 2013). A Vmf value approximating 1 denotes a tendency towards solitary vessels.
  • -
  • type: numeric
  • -
  • units: {count}/{count}
  • -
  • allowable range: 0.001 - 1 {count}/{count}
  • -
-
-
-

stem_vessel_non_lumen_fraction -

-
    -
  • label: Fraction of xylem vessels comprised of non-lumen
  • -
  • description: Fraction of xylem vessels comprised of non-lumen
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.001 - 1 um2/um2
  • -
-
-
-

stem_vessel_wall_fraction -

-
    -
  • label: Fraction of xylem vessels comprised of cell wall
  • -
  • description: Fraction of xylem vessels comprised of cell wall
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.001 - 1 um2/um2
  • -
-
-
-

stem_water_content_per_saturated_mass -

-
    -
  • label: Water content per unit mass of saturated stem
  • -
  • description: Ratio of water in a saturated stem (maximal water holding capacity at full turgidity) to stem saturated mass
  • -
  • type: numeric
  • -
  • units: g/g
  • -
  • allowable range: 0.1 - 10 g/g
  • -
-
-
-

stem_water_delta18O -

-
    -
  • label: Oxygen stable isotope signature (d18O) of stem water
  • -
  • description: Oxygen stable isotope signature of stem water
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -10 - 50 {delta}[ppth]
  • -
-
-
-

stem_xylem_vulnerability_index -

-
    -
  • label: Ratio of vessel diameter to vessel density
  • -
  • description: The ratio of vessel diameter to vessel density, as an index of sap conductance and susceptibility to vessel cavitation
  • -
  • type: numeric
  • -
  • units: {dimensionless}
  • -
  • allowable range: 0.05 - 1000 {dimensionless}
  • -
-
-
-

storage_organ -

-
    -
  • label: Storage organ, either for post-fire regeneration or general energy storage. Trait values include both generic terms and quite specific ones. See Pausus, Lamont et al. 2018, doi.org/10.1111/nph.14982 for trait values used and detailed desciptions of recolonization ability and level of fire protection provided by each regeneration strategy. See also the trait bud_bank_location.
  • -
  • description: Storage organ
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -bulb: Below ground storage organ derived from stem (and sometimes leaf) tissue.
    • -
    • -fleshy_underground_organ: Plants that use fleshy, generally underground organs (swellings) to regenerate; examples include corms, tubers, bulbs, and caudex
    • -
    • -lignotuber: Swollen woody structures are located at the transition between the stem base and root crown of woody shrubs, mallees and small trees, and are formed from stem tissues. Buds are located over the entire structure. No colonisation ability.
    • -
    • -rhizome: Plant has an underground stem; this stem may be woody or non-woody. Rhizomes are both a mechanism for vegetative spread and a strategy to survive fire.
    • -
    • -storage_organ: Storage organ present, but the type is unknown
    • -
    • -woody_rootstock_or_lignotuber: Plant that regenerates by resprouting from either a woody rootstock or lignotuber.
    • -
    • -no_storage_organ: No storage organ present
    • -
    -
  • -
-
-
-

vapor_pressure_deficit -

-
    -
  • label: Vapor pressure deficit
  • -
  • description: Vapor pressure deficit across the leaf surface
  • -
  • type: numeric
  • -
  • units: kPa
  • -
  • allowable range: 0 - 5 kPa
  • -
-
-
-

vegetative_reproduction_ability -

-
    -
  • label: Ability to regenerate and spread through the growth and division of vegetative material.
  • -
  • description: A binary trait, indicating whether a plant taxon is able to reproduce and spread through the growth and division of vegetative material. For plants able to reproduce vegetatively, more detailed information is provided in the trait clonal_spread_mechanism.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -not_vegetative: Plant taxa that regenerate and spread only by seed.
    • -
    • -vegetative: Plant taxa that can regenerate and spread through the growth and division of vegetative material, not just from seed; examples include runners, rhizomes, and bulbs.
    • -
    -
  • -
-
-
-

water_potential_50percent_lost_conductivity -

-
    -
  • label: Xylem pressure at which 50% of conductivity is lost
  • -
  • description: Xylem pressure at which 50% of conductivity is lost
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -15 - 0 MPa
  • -
-
-
-

water_potential_88percent_lost_conductivity -

-
    -
  • label: Xylem pressure at which 88% of conductivity is lost
  • -
  • description: Xylem pressure at which 88% of conductivity is lost
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -15 - 0 MPa
  • -
-
-
-

water_potential_midday -

-
    -
  • label: Midday water potential
  • -
  • description: A plant’s water potential during the heat of the day
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -10 - 0 MPa
  • -
-
-
-

water_potential_predawn -

-
    -
  • label: Pre-dawn water potential
  • -
  • description: A plant’s water potential just before sunrise
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: -8 - 0 MPa
  • -
-
-
-

whole_plant_transpiration -

-
    -
  • label: Whole plant transpiration
  • -
  • description: Rate of water loss per plant, as calculated across longer periods of time under experimental conditions.
  • -
  • type: numeric
  • -
  • units: g/cm2/d
  • -
  • allowable range: 0.01 - 1000 g/cm2/d
  • -
-
-
-

wood_axial_parenchyma_fraction -

-
    -
  • label: Fraction of wood comprised of axial parenchyma
  • -
  • description: Fraction of wood comprised of axial parenchyma
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.001 - 1 um2/um2
  • -
-
-
-

wood_C_per_dry_mass -

-
    -
  • label: Wood carbon (C) content per unit wood dry mass
  • -
  • description: Wood carbon (C) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 50 - 750 mg/g
  • -
-
-
-

wood_Ca_per_dry_mass -

-
    -
  • label: Wood calcium (Ca) content per unit wood dry mass
  • -
  • description: Wood calcium (Ca) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

wood_conduit_fraction -

-
    -
  • label: Fraction of wood comprised of all conduits
  • -
  • description: Fraction of wood comprised of all conduits
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.01 - 1 um2/um2
  • -
-
-
-

wood_dead_Ca_per_dry_mass -

-
    -
  • label: Dead wood calcium (Ca) content per unit dead wood dry mass
  • -
  • description: Dead wood calcium (Ca) content per unit dead wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

wood_dead_K_per_dry_mass -

-
    -
  • label: Dead wood potassium (K) content per unit dead wood dry mass
  • -
  • description: Dead wood potassium (K) content per unit dead wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

wood_dead_Mg_per_dry_mass -

-
    -
  • label: Dead wood magnesium (Mg) content per unit dead wood dry mass
  • -
  • description: Dead wood magnesium (Mg) content per unit dead wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

wood_dead_N_per_dry_mass -

-
    -
  • label: Dead wood nitrogen (N) content per unit dead wood dry mass
  • -
  • description: Dead wood nitrogen (N) content per unit dead wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

wood_dead_Na_per_dry_mass -

-
    -
  • label: Dead wood sodium (Na) content per unit dead wood dry mass
  • -
  • description: Dead wood sodium (Na) content per unit dead wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 1 mg/g
  • -
-
-
-

wood_dead_P_per_dry_mass -

-
    -
  • label: Dead wood phosphorus (P) content per unit dead wood dry mass
  • -
  • description: Dead wood phosphorus (P) content per unit dead wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

wood_delta13C -

-
    -
  • label: Wood carbon (C) isotope signature (delta 13C)
  • -
  • description: Wood carbon stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -50 - 0 {delta}[ppth]
  • -
-
-
-

wood_delta15N -

-
    -
  • label: Wood nitrogen (N) isotope signature (delta 15N)
  • -
  • description: Wood nitrogen stable isotope signature
  • -
  • type: numeric
  • -
  • units: {delta}[ppth]
  • -
  • allowable range: -25 - 75 {delta}[ppth]
  • -
-
-
-

wood_density -

-
    -
  • label: Stem dry mass per unit fresh stem volume
  • -
  • description: Stem dry mass per unit stem fresh volume (stem specific density or SSD or wood density)
  • -
  • type: numeric
  • -
  • units: mg/mm3
  • -
  • allowable range: 0.05 - 1.4 mg/mm3
  • -
-
-
-

wood_fibre_fraction -

-
    -
  • label: Fraction of wood comprised of fibres
  • -
  • description: Fraction of wood comprised of fibres
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.01 - 1 um2/um2
  • -
-
-
-

wood_K_per_dry_mass -

-
    -
  • label: Wood potassium (K) content per unit wood dry mass
  • -
  • description: Wood potassium (K) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 100 mg/g
  • -
-
-
-

wood_Mg_per_dry_mass -

-
    -
  • label: Wood magnesium (Mg) content per unit wood dry mass
  • -
  • description: Wood magnesium (Mg) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.01 - 10 mg/g
  • -
-
-
-

wood_N_per_dry_mass -

-
    -
  • label: Wood nitrogen (N) content per unit wood dry mass
  • -
  • description: Wood nitrogen (N) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

wood_Na_per_dry_mass -

-
    -
  • label: Wood sodium (Na) content per unit wood dry mass
  • -
  • description: Wood sodium (Na) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.1 - 100 mg/g
  • -
-
-
-

wood_P_per_dry_mass -

-
    -
  • label: Wood phosphorus (P) content per unit wood dry mass
  • -
  • description: Wood phosphorus (P) content per unit wood dry mass
  • -
  • type: numeric
  • -
  • units: mg/g
  • -
  • allowable range: 0.001 - 10 mg/g
  • -
-
-
-

wood_ray_parenchyma_fraction -

-
    -
  • label: Fraction of wood comprised of rays
  • -
  • description: Fraction of wood comprised of rays
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0.01 - 1 um2/um2
  • -
-
-
-

wood_tracheid_fraction -

-
    -
  • label: Fraction of wood comprised of tracheids
  • -
  • description: Fraction of wood comprised of tracheids
  • -
  • type: numeric
  • -
  • units: um2/um2
  • -
  • allowable range: 0 - 1 um2/um2
  • -
-
-
-

woodiness -

-
    -
  • label: Woodiness
  • -
  • description: A binary trait, indicating whether or not a plant’s stems are woody, with woody broadly defined to include both true wood (secondary xylem) and taxa that do not produce secondary xylem (i.e. monocots and ferns) but have thick, stiff, robust lignified stems.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -herbaceous: Plant with non-lignified stems.
    • -
    • -woody: Plant whose stems are stiff and lignified, including both stems that produce secondary xylem and those that produce only lignified primary tissues but are notably stiff and robust.
    • -
    -
  • -
-
-
-

woodiness_detailed -

-
    -
  • label: Detailed woodiness categories
  • -
  • description: A variable to indicate the extent, distribution, and type of secondary xylem (true wood) and wood-like lignification (woodiness in monocots and ferns) in stems, roots, and reproductive shoots.
  • -
  • type: categorical
  • -
  • allowable values: -
      -
    • -herbaceous: Plant with non-lignified stems.
    • -
    • -woody: Plant whose stems produce secondary xylem (true wood).
    • -
    • -woody_base: Plant where secondary xylem (true wood) is present only at the base of stems. (synonym, suffrutescent)
    • -
    • -woody_root: Plant that has a woody rootstock, but non-woody above-ground stems.
    • -
    • -semi_woody: Plant that forms stems considered only “partially woody”, generally having lower lignin and cellulose contents and possibly not forming secondary xylem. These are generally short-lived, fast-growing stems. (synonym, green-stem shrub, soft shrub, soft wood)
    • -
    • -woody_like_stem: Taxa, including monocots and ferns, that produce thick, stiff, robust lignified stems, but do not produce secondary xylem.
    • -
    • -woody_like_inflorescence: Taxa, including monocots and ferns, that produce thick, stiff, robust lignified inflorescence shoots, but are otherwise non-woody.
    • -
    -
  • -
-
-
-

xylem_modulus_of_elasticity -

-
    -
  • label: Modulus of elasticity (Young’s modulus)
  • -
  • description: A measure of xylem’s resistance to being deformed elastically (i.e., non-permanently) when a stress is applied to it; definition for measurements on wood (secondary xylem)
  • -
  • type: numeric
  • -
  • units: MPa
  • -
  • allowable range: 10 - 100000 MPa
  • -
-
-
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.0.7.

-
- -
-
- - - - - - - - diff --git a/docs/authors.html b/docs/authors.html deleted file mode 100644 index 14dee773a..000000000 --- a/docs/authors.html +++ /dev/null @@ -1,166 +0,0 @@ - -Authors and Citation • austraits.build - - -
-
- - - -
-
-
- - - -
  • -

    Daniel Falster. Maintainer, author. -

    -
  • -
  • -

    Elizabeth Wenk. Curator, author. -

    -
  • -
  • -

    Rachael Gallagher. Author, curator. -

    -
  • -
  • -

    Gary Truong. Contributor. -

    -
  • -
  • -

    Stuart Allen. Contributor. -

    -
  • -
  • -

    ARDC. Funder. -

    -
  • -
  • -

    ARC. Funder. -

    -
  • -
-
-
-

Citation

- Source: DESCRIPTION -
-
- - -

Falster D, Wenk E, Gallagher R (2023). -austraits.build: Package used to build an AusTraits data resource. -R package version 0.9.0, http://traitecoevo.github.io/austraits.build/. -

-
@Manual{,
-  title = {austraits.build: Package used to build an AusTraits data resource},
-  author = {Daniel Falster and Elizabeth Wenk and Rachael Gallagher},
-  year = {2023},
-  note = {R package version 0.9.0},
-  url = {http://traitecoevo.github.io/austraits.build/},
-}
- -
- -
- - - -
- -
-

Site built with pkgdown 2.0.7.

-
- -
- - - - - - - - diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css deleted file mode 100644 index 5a859415c..000000000 --- a/docs/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js deleted file mode 100644 index 1cdd573b2..000000000 --- a/docs/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/docs/docs/figures/Workflow.png b/docs/docs/figures/Workflow.png deleted file mode 100644 index 91221e91aa501c48b70b3cd1f63476299482c79e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78508 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

    A|NU#4H82MD4`%Z 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 diff --git a/docs/docs/figures/logo.png b/docs/docs/figures/logo.png deleted file mode 100644 index d17cf78d54e0c93fcc4178ba16ca1891bef97673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33406 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 diff --git a/docs/docsearch.css b/docs/docsearch.css deleted file mode 100644 index e5f1fe1df..000000000 --- a/docs/docsearch.css +++ /dev/null @@ -1,148 +0,0 @@ -/* Docsearch -------------------------------------------------------------- */ -/* - Source: https://github.com/algolia/docsearch/ - License: MIT -*/ - -.algolia-autocomplete { - display: block; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1 -} - -.algolia-autocomplete .ds-dropdown-menu { - width: 100%; - min-width: none; - max-width: none; - padding: .75rem 0; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); -} - -@media (min-width:768px) { - .algolia-autocomplete .ds-dropdown-menu { - width: 175% - } -} - -.algolia-autocomplete .ds-dropdown-menu::before { - display: none -} - -.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { - padding: 0; - background-color: rgb(255,255,255); - border: 0; - max-height: 80vh; -} - -.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { - margin-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion { - padding: 0; - overflow: visible -} - -.algolia-autocomplete .algolia-docsearch-suggestion--category-header { - padding: .125rem 1rem; - margin-top: 0; - font-size: 1.3em; - font-weight: 500; - color: #00008B; - border-bottom: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { - float: none; - padding-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { - float: none; - width: auto; - padding: 0; - text-align: left -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content { - float: none; - width: auto; - padding: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content::before { - display: none -} - -.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { - padding-top: .75rem; - margin-top: .75rem; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { - display: block; - padding: .1rem 1rem; - margin-bottom: 0.1; - font-size: 1.0em; - font-weight: 400 - /* display: none */ -} - -.algolia-autocomplete .algolia-docsearch-suggestion--title { - display: block; - padding: .25rem 1rem; - margin-bottom: 0; - font-size: 0.9em; - font-weight: 400 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--text { - padding: 0 1rem .5rem; - margin-top: -.25rem; - font-size: 0.8em; - font-weight: 400; - line-height: 1.25 -} - -.algolia-autocomplete .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 3; - margin-top: 10.66667px; - float: right; - font-size: 0; - line-height: 0; -} - -.algolia-autocomplete .algolia-docsearch-footer--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - width: 100%; - height: 100%; - display: block; - transform: translate(-8px); -} - -.algolia-autocomplete .algolia-docsearch-suggestion--highlight { - color: #FF8C00; - background: rgba(232, 189, 54, 0.1) -} - - -.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { - box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) -} - -.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { - background-color: rgba(192, 192, 192, .15) -} diff --git a/docs/docsearch.js b/docs/docsearch.js deleted file mode 100644 index b35504cd3..000000000 --- a/docs/docsearch.js +++ /dev/null @@ -1,85 +0,0 @@ -$(function() { - - // register a handler to move the focus to the search bar - // upon pressing shift + "/" (i.e. "?") - $(document).on('keydown', function(e) { - if (e.shiftKey && e.keyCode == 191) { - e.preventDefault(); - $("#search-input").focus(); - } - }); - - $(document).ready(function() { - // do keyword highlighting - /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ - var mark = function() { - - var referrer = document.URL ; - var paramKey = "q" ; - - if (referrer.indexOf("?") !== -1) { - var qs = referrer.substr(referrer.indexOf('?') + 1); - var qs_noanchor = qs.split('#')[0]; - var qsa = qs_noanchor.split('&'); - var keyword = ""; - - for (var i = 0; i < qsa.length; i++) { - var currentParam = qsa[i].split('='); - - if (currentParam.length !== 2) { - continue; - } - - if (currentParam[0] == paramKey) { - keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); - } - } - - if (keyword !== "") { - $(".contents").unmark({ - done: function() { - $(".contents").mark(keyword); - } - }); - } - } - }; - - mark(); - }); -}); - -/* Search term highlighting ------------------------------*/ - -function matchedWords(hit) { - var words = []; - - var hierarchy = hit._highlightResult.hierarchy; - // loop to fetch from lvl0, lvl1, etc. - for (var idx in hierarchy) { - words = words.concat(hierarchy[idx].matchedWords); - } - - var content = hit._highlightResult.content; - if (content) { - words = words.concat(content.matchedWords); - } - - // return unique words - var words_uniq = [...new Set(words)]; - return words_uniq; -} - -function updateHitURL(hit) { - - var words = matchedWords(hit); - var url = ""; - - if (hit.anchor) { - url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; - } else { - url = hit.url + '?q=' + escape(words.join(" ")); - } - - return url; -} diff --git a/docs/figures/Workflow.png b/docs/figures/Workflow.png deleted file mode 100644 index 91221e91aa501c48b70b3cd1f63476299482c79e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78508 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

    A|NU#4H82MD4`%Z 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 diff --git a/docs/figures/logo.png b/docs/figures/logo.png deleted file mode 100644 index d17cf78d54e0c93fcc4178ba16ca1891bef97673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33406 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 diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 5880de923..000000000 --- a/docs/index.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - -Package used to build an AusTraits data resource • austraits.build - - - - - - - - - - - - -

    -
    - - - - -
    -
    -
    - - -

    -

    AusTraits is a transformative database, containing measurements on the traits of Australia’s plant species, standardised from hundreds of disconnected primary sources. So far, data have been assembled > 250 distinct sources, describing more than 400 plant traits and over 25k taxa. The dataset and approach is documented in detail in the following publication

    -

    Falster D, Gallagher R, Wenk, E et al. (2021) AusTraits, a curated plant trait database for the Australian flora. Scientific Data 8: 254. DOI: 10.1038/s41597-021-01006-6

    -

    Those interested in simply using data from AusTraits, should visit download the compiled resource from the versioned releases archived on Zenodo at doi: 10.5281/zenodo.3568417.

    -

    There you will also find detailed information regarding appropriate use of AusTraits. Further information about the AusTraits project is available at the project website austraits.org.

    -
    -

    Rebuilding AusTraits from source -

    -

    This repository (austraits.build) contains the raw data and code used to compile AusTraits from diverse, original sources.

    -

    To handle the harmonising of diverse data sources, we use a reproducible workflow to implement the various changes required for each source to reformat it suitable for incorporation in AusTraits. Such changes include restructuring datasets, renaming variables, changing variable units, changing taxon names. For the sake of transparency and continuing development, the entire workflow is made available here.

    -

    AusTraits is continually evolving, as new datasets are contributed. As such, there is no single canonical version. We are continually making new versions available. Overtime, we expect that different versions will be released and used in different analyses.

    -

    Those interested in building AusTraits from source or contributing to AusTraits should see further information at this http://traitecoevo.github.io/austraits.build/articles/austraits.build.html

    -
    -
    -

    Acknowledgements -

    -

    Funding: This work was supported via the following funding sources: fellowship grants from Australian Research Council to Falster (FT160100113), Gallagher (DE170100208) and Wright (FT100100910), a grant from Macquarie University to Gallagher, and grants from theAustralian Research Data Commons (ARDC), via their “Transformation data collections” doi: 10.47486/TD044 and “Data Partnerships” doi: 10.47486/DP720 programs. The ARDC is enabled by NCRIS.

    -

    Recognition: Many people have contributed to AusTraits. A list of contributors is provdied on the on Zenodo at doi: 10.5281/zenodo.3568417.

    -

    Resuse: At this stage, only the compiled xAusTraits dataset is available for reuse, via Zenodo. The raw data sources provided in this repository are not available for reuse in their current form, without further discussion from data contributors.

    -
    -
    -
    - - -
    - - -
    - -
    -

    -

    Site built with pkgdown 2.0.7.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/link.svg b/docs/link.svg deleted file mode 100644 index 88ad82769..000000000 --- a/docs/link.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/docs/news/index.html b/docs/news/index.html deleted file mode 100644 index 4f171d3c1..000000000 --- a/docs/news/index.html +++ /dev/null @@ -1,119 +0,0 @@ - -Changelog • austraits.build - - -
    -
    - - - -
    -
    - - -
    - - - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index 80ea5b838..000000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,384 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -/* Ensure in-page images don't run outside their container */ -.contents img { - max-width: 100%; - height: auto; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - display: none; - margin-left: 5px; - width: 20px; - height: 20px; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-block; -} - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top; min-width: 100px} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre, code, pre code { - background-color: #f8f8f8; - color: #333; -} -pre, pre code { - white-space: pre-wrap; - word-break: break-all; - overflow-wrap: break-word; -} - -pre { - border: 1px solid #eee; -} - -pre .img, pre .r-plt { - margin: 5px 0; -} - -pre .img img, pre .r-plt img { - background-color: #fff; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.error {font-weight: bolder;} -.warning {font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} - -/* Section anchors --------------------------------- - Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 -*/ - -div.csl-bib-body { } -div.csl-entry { - clear: both; -} -.hanging-indent div.csl-entry { - margin-left:2em; - text-indent:-2em; -} -div.csl-left-margin { - min-width:2em; - float:left; -} -div.csl-right-inline { - margin-left:2em; - padding-left:1em; -} -div.csl-indent { - margin-left: 2em; -} diff --git a/docs/pkgdown.js b/docs/pkgdown.js deleted file mode 100644 index 6f0eee40b..000000000 --- a/docs/pkgdown.js +++ /dev/null @@ -1,108 +0,0 @@ -/* http://gregfranko.com/blog/jquery-best-practices/ */ -(function($) { - $(function() { - - $('.navbar-fixed-top').headroom(); - - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); - }); - - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); - } - - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } - - return(haystack.length); - } - - /* Clipboard --------------------------*/ - - function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); - $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); - } - - if(ClipboardJS.isSupported()) { - $(document).ready(function() { - var copyButton = ""; - - $("div.sourceCode").addClass("hasCopyButton"); - - // Insert copy buttons: - $(copyButton).prependTo(".hasCopyButton"); - - // Initialize tooltips: - $('.btn-copy-ex').tooltip({container: 'body'}); - - // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { - text: function(trigger) { - return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); - } - }); - - clipboardBtnCopies.on('success', function(e) { - changeTooltipMessage(e.trigger, 'Copied!'); - e.clearSelection(); - }); - - clipboardBtnCopies.on('error', function() { - changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); - }); - }); - } -})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml deleted file mode 100644 index c60a11e62..000000000 --- a/docs/pkgdown.yml +++ /dev/null @@ -1,17 +0,0 @@ -pandoc: 2.2.3.2 -pkgdown: 2.0.7 -pkgdown_sha: ~ -articles: - adding_data: adding_data.html - austraits.build: austraits.build.html - austraits_database_structure: austraits_database_structure.html - austraits_file_structure: austraits_file_structure.html - austraits_overview: austraits_overview.html - contributing_data: contributing_data.html - docker: docker.html - trait_definitions: trait_definitions.html -last_built: 2023-02-09T05:24Z -urls: - reference: http://traitecoevo.github.io/austraits.build/reference - article: http://traitecoevo.github.io/austraits.build/articles - diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png deleted file mode 100644 index 17a358060aed2a86950757bbd25c6f92c08c458f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|=9Be?5+AI5}0x7m6Z+90U4Fo@(ch>_c&H|6f zVg?3oArNM~bhqvg0|WD9PZ!6KiaBo&GBN^{G%5UFpXcEKVvd5*5Eu=C0SJK)8A6*F U7`aXvEC5;V>FVdQ&MBb@00SN#Z2$lO diff --git a/docs/reference/bib_print.html b/docs/reference/bib_print.html deleted file mode 100644 index 1a8b192c9..000000000 --- a/docs/reference/bib_print.html +++ /dev/null @@ -1,146 +0,0 @@ - -Format BibEntry using RefManageR — bib_print • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Format BibEntry object according to desired style using RefManageR

    -
    - -
    -
    bib_print(
    -  bib,
    -  .opts = list(first.inits = TRUE, max.names = 1000, style = "markdown")
    -)
    -
    - -
    -

    Arguments

    -
    bib
    -

    BibEntry object

    - - -
    .opts
    -

    list of parameters for formatting style

    - -
    -
    -

    Value

    - - -

    character string of formatted reference

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/build_add_version.html b/docs/reference/build_add_version.html deleted file mode 100644 index f7faebcbd..000000000 --- a/docs/reference/build_add_version.html +++ /dev/null @@ -1,147 +0,0 @@ - -Add version information to AusTraits — build_add_version • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add version information to AusTraits

    -
    - -
    -
    build_add_version(austraits, version, git_sha)
    -
    - -
    -

    Arguments

    -
    austraits
    -

    AusTraits database object

    - - -
    version
    -

    version number

    - - -
    git_sha
    -

    Git SHA

    - -
    -
    -

    Value

    - - -

    AusTraits database object with version information added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/build_combine.html b/docs/reference/build_combine.html deleted file mode 100644 index 3b25568b8..000000000 --- a/docs/reference/build_combine.html +++ /dev/null @@ -1,145 +0,0 @@ - -Combine all the AusTraits studies into the compiled AusTraits database — build_combine • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `build_combine` compiles all the loaded studies into a single AusTraits -database object as a large list

    -
    - -
    -
    build_combine(..., d = list(...))
    -
    - -
    -

    Arguments

    -
    ...
    -

    arguments passed to other functions

    - - -
    d
    -

    list of all the AusTraits studies

    - -
    -
    -

    Value

    - - -

    AusTraits compilation database as a large list

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/build_find_taxon.html b/docs/reference/build_find_taxon.html deleted file mode 100644 index 8be30dc65..000000000 --- a/docs/reference/build_find_taxon.html +++ /dev/null @@ -1,147 +0,0 @@ - -Find list of all unique taxa within compilation — build_find_taxon • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Find list of all unique taxa within compilation

    -
    - -
    -
    build_find_taxon(taxon_name, austraits, original_name = FALSE)
    -
    - -
    -

    Arguments

    -
    taxon_name
    -

    name of column which contains the cleaned species names

    - - -
    austraits
    -

    austraits compilation

    - - -
    original_name
    -

    name of column which contains original species names, default = FALSE

    - -
    -
    -

    Value

    - - -

    list of all unique and distinct species names

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/build_setup_pipeline.html b/docs/reference/build_setup_pipeline.html deleted file mode 100644 index d32411731..000000000 --- a/docs/reference/build_setup_pipeline.html +++ /dev/null @@ -1,154 +0,0 @@ - -Update the remake.yml file with new studies — build_setup_pipeline • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `build_setup_pipeline` rewrites the remake.yml file to include new -studies

    -
    - -
    -
    build_setup_pipeline(
    -  template = readLines(system.file("support", "remake.yml.whisker", package =
    -    "austraits.build")),
    -  path = "data",
    -  dataset_ids = dir(path)
    -)
    -
    - -
    -

    Arguments

    -
    template
    -

    template used to build

    - - -
    path
    -

    path to folder with data

    - - -
    dataset_ids
    -

    dataset_ids to icnlude. By default includes all.

    - -
    -
    -

    Value

    - - -

    Updated remake.yml file

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/build_update_taxonomy.html b/docs/reference/build_update_taxonomy.html deleted file mode 100644 index ec825e6f9..000000000 --- a/docs/reference/build_update_taxonomy.html +++ /dev/null @@ -1,143 +0,0 @@ - -Apply taxonomic updates to austraits_raw — build_update_taxonomy • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Applies taxonomic updates to austraits_raw

    -
    - -
    -
    build_update_taxonomy(austraits_raw, taxa)
    -
    - -
    -

    Arguments

    -
    austraits_raw
    -

    AusTraits compiled data as a large list without taxonomic updates applied

    - - -
    taxa
    -

    taxon list

    - -
    -
    -

    Value

    - - -

    list AusTraits compiled data with taxonomic updates applied

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/create_tree_branch.html b/docs/reference/create_tree_branch.html deleted file mode 100644 index 2f7eca06d..000000000 --- a/docs/reference/create_tree_branch.html +++ /dev/null @@ -1,153 +0,0 @@ - -Format a tree structure from a vector — create_tree_branch • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `create_tree_branch()` is used to create a tree structure to show how things -are related. In AusTraits, this is used in the vignettes to show the file -structure of the repository and also to show the different components of the -AusTraits database

    -
    - -
    -
    create_tree_branch(x, title, prefix = "")
    -
    - -
    -

    Arguments

    -
    x
    -

    vector of terms

    - - -
    title
    -

    name of branch

    - - -
    prefix
    -

    specifies the amount of indentation

    - -
    -
    -

    Value

    - - -

    vector of character strings for the tree structure

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/dataset_configure.html b/docs/reference/dataset_configure.html deleted file mode 100644 index 52bf2872f..000000000 --- a/docs/reference/dataset_configure.html +++ /dev/null @@ -1,165 +0,0 @@ - -Configure AusTraits database object — dataset_configure • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Creates the config object which gets passed onto `dataset_process`. The config list contains -the subset of definitions and unit conversions for those traits for a each study. -`dataset_configure` is used in the remake::make process to configure individual studies mapping the -individual traits found in that study along with any relevant unit conversions -and definitions. `dataset_configure` and `dataset_process` are applied to every study -in the remake.yml file

    -
    - -
    -
    dataset_configure(filename_metadata, definitions, unit_conversion_functions)
    -
    - -
    -

    Arguments

    -
    filename_metadata
    -

    metadata yaml file for a given study

    - - -
    definitions
    -

    definitions read in from the traits.yml

    - - -
    unit_conversion_functions
    -

    unit_conversion.csv file read in from the config folder

    - -
    -
    -

    Value

    - - -

    list with dataset_id, metadata, definitions and unit_conversion_functions

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -dataset_configure("data/Falster_2003/metadata.yml", read_yaml("config/traits.yml"),
    -get_unit_conversions("config/unit_conversions.csv"))
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/dataset_process.html b/docs/reference/dataset_process.html deleted file mode 100644 index 3b8446c16..000000000 --- a/docs/reference/dataset_process.html +++ /dev/null @@ -1,171 +0,0 @@ - -Load Dataset — dataset_process • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    dataset_process is used to load individual studies using the config file generated -from `dataset_configure()`. `dataset_configure` and `dataset_process` are applied to every -study in the remake.yml file

    -
    - -
    -
    dataset_process(
    -  filename_data_raw,
    -  config_for_dataset,
    -  schema,
    -  resource_metadata,
    -  filter_missing_values = TRUE
    -)
    -
    - -
    -

    Arguments

    -
    filename_data_raw
    -

    raw data.csv file for any given study

    - - -
    config_for_dataset
    -

    config settings generated from `dataset_configure()`

    - - -
    schema
    -

    schema for austraits.build

    - - -
    filter_missing_values
    -

    default filters missing values from the excluded data table. -Change to false to see the rows with missing values.

    - -
    -
    -

    Value

    - - -

    list, AusTraits database object

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -dataset_process("data/Falster_2003/data.csv", dataset_configure("data/Falster_2003/metadata.yml",
    -read_yaml("config/traits.yml"), get_unit_conversions("config/unit_conversions.csv")),
    -get_schema())
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/dataset_report.html b/docs/reference/dataset_report.html deleted file mode 100644 index 3bb4dc041..000000000 --- a/docs/reference/dataset_report.html +++ /dev/null @@ -1,173 +0,0 @@ - -Build reports for listed datasets — dataset_report • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Builds a detailed report for every dataset with a unique `dataset_id`, based on the template Rmd file provided. The reports are -rendered as html files and saved in the specified output folder.

    -
    - -
    -
    dataset_report(
    -  dataset_id,
    -  austraits,
    -  overwrite = FALSE,
    -  output_path = "export/reports",
    -  input_file = system.file("support", "report_dataset.Rmd", package = "austraits.build"),
    -  quiet = TRUE,
    -  keep = FALSE
    -)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    name of specific study/dataset

    - - -
    austraits
    -

    compiled austraits database

    - - -
    overwrite
    -

    logical value to determine whether to overwrite existing report,

    - - -
    output_path
    -

    location where rendered report will be saved

    - - -
    input_file
    -

    report script (.Rmd) file to build study report

    - - -
    quiet
    -

    An option to suppress printing during rendering from knitr, pandoc command line and others.

    - - -
    keep
    -

    keep intermediate Rmd file used?

    - -
    -
    -

    Value

    - - -

    html file of the rendered report located in the specified output folder.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/dataset_test.html b/docs/reference/dataset_test.html deleted file mode 100644 index 7bb5f22ef..000000000 --- a/docs/reference/dataset_test.html +++ /dev/null @@ -1,150 +0,0 @@ - -Test whether specified dataset_id has the correct setup — dataset_test • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Run tests to ensure that specified dataset_id has the correct setup

    -
    - -
    -
    dataset_test(
    -  dataset_ids,
    -  path_config = "config",
    -  path_data = "data",
    -  reporter = testthat::default_reporter()
    -)
    -
    - -
    -

    Arguments

    -
    dataset_ids
    -

    vector of dataset_id for sources to be tested

    - - -
    path_config
    -

    path to folder containing configuration files

    - - -
    path_data
    -

    path to folder containing data files

    - - -
    reporter
    -

    testthat reporter to use to summarise output

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/dataset_test_worker.html b/docs/reference/dataset_test_worker.html deleted file mode 100644 index d520bd14f..000000000 --- a/docs/reference/dataset_test_worker.html +++ /dev/null @@ -1,155 +0,0 @@ - -Test whether specified dataset_id has the correct setup — dataset_test_worker • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Run tests to ensure that specified dataset_id has the correct setup

    -
    - -
    -
    dataset_test_worker(
    -  test_dataset_ids,
    -  path_config = "config",
    -  path_data = "data",
    -  schema = get_schema(),
    -  definitions = get_schema(file.path(path_config, "traits.yml"), I("traits"))
    -)
    -
    - -
    -

    Arguments

    -
    test_dataset_ids
    -

    vector of dataset_id for sources to be tested

    - - -
    path_config
    -

    path to folder containing configuration files

    - - -
    path_data
    -

    path to folder containing data files

    - - -
    schema
    -

    data schema

    - - -
    definitions
    -

    trait defininitons

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/get_schema.html b/docs/reference/get_schema.html deleted file mode 100644 index 9efc0a3ba..000000000 --- a/docs/reference/get_schema.html +++ /dev/null @@ -1,155 +0,0 @@ - -Load schema for an austraits.build data compilation (excluding traits) — get_schema • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Load schema for an austraits.build data compilation (excluding traits)

    -
    - -
    -
    get_schema(
    -  path = system.file("support", "austraits.build_schema.yml", package =
    -    "austraits.build"),
    -  subsection = NULL
    -)
    -
    - -
    -

    Arguments

    -
    path
    -

    path to schema file. By default loads version included with the package

    - - -
    subsection
    -

    section to load

    - -
    -
    -

    Value

    - - -

    a list

    -
    - -
    -

    Examples

    -
    {
    -
    -schema <- get_schema()
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/get_unit_conversions.html b/docs/reference/get_unit_conversions.html deleted file mode 100644 index ae5ab5ea5..000000000 --- a/docs/reference/get_unit_conversions.html +++ /dev/null @@ -1,146 +0,0 @@ - -Make unit conversion functions — get_unit_conversions • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Make unit conversion functions

    -
    - -
    -
    get_unit_conversions(filename)
    -
    - -
    -

    Arguments

    -
    filename
    -

    name of file containing unit conversions

    - -
    -
    -

    Value

    - - -

    list of conversion functions

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -get_unit_conversions("config/unit_conversions.csv")
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index 37a5c6604..000000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,460 +0,0 @@ - -Function reference • austraits.build - - -
    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    Building austraits compilation

    -

    Functions that can be used when building individual datasets and entire compilation

    -
    -

    build_setup_pipeline()

    -

    Update the remake.yml file with new studies

    -

    get_schema()

    -

    Load schema for an austraits.build data compilation (excluding traits)

    -

    dataset_configure()

    -

    Configure AusTraits database object

    -

    dataset_process()

    -

    Load Dataset

    -

    build_combine()

    -

    Combine all the AusTraits studies into the compiled AusTraits database

    -

    build_add_version()

    -

    Add version information to AusTraits

    -

    build_update_taxonomy()

    -

    Apply taxonomic updates to austraits_raw

    -

    process_add_all_columns()

    -

    Add or remove columns of data

    -

    process_taxonomic_updates()

    -

    Apply taxonomic updates

    -

    process_convert_units()

    -

    Convert units to desired type

    -

    process_parse_data()

    -

    Process a single dataset

    -

    process_custom_code()

    -

    Apply custom data manipulations

    -

    process_format_locations()

    -

    Format location data from list to tibble

    -

    process_flag_excluded_observations()

    -

    Flag any excluded observations

    -

    process_flag_unsupported_traits()

    -

    Flag any unrecognised traits

    -

    process_flag_unsupported_values()

    -

    Flag values outside of allowable range

    -

    process_standardise_names()

    -

    Standardise species names

    -

    process_unit_conversion_name()

    -

    Generate unit conversion name

    -

    process_create_observation_id()

    -

    Create entity id

    -

    process_format_contexts()

    -

    Format context data from list to tibble

    -

    process_format_contributors()

    -

    Format contributors from list into tibble

    -

    process_generate_id()

    -

    Function to generate seuqnece of integer ids from vector of names -Determines number of 00s needed based on number of records

    -

    dataset_report()

    -

    Build reports for listed datasets

    -

    Creating metadata files

    -

    -
    -

    dataset_test()

    -

    Test whether specified dataset_id has the correct setup

    -

    dataset_test_worker()

    -

    Test whether specified dataset_id has the correct setup

    -

    metadata_create_template()

    -

    Create a template of file `metadata.yml` for specified `dataset_id`

    -

    metadata_add_traits()

    -

    For specified `dataset_id`, populate columns for traits into metadata

    -

    metadata_add_source_bibtex()

    -

    Adds citation details to a metadata file for given study

    -

    metadata_add_source_doi()

    -

    Adds citation details from a doi to a metadata file for a dataset_id.

    -

    metadata_add_locations()

    -

    For specified `dataset_id` import location data from a dataframe

    -

    metadata_add_contexts()

    -

    For specified `dataset_id` import context data from a dataframe

    -

    metadata_add_substitution()

    -

    Add a categorical trait value substitution into a metadata file for a dataset_id

    -

    metadata_add_substitutions_list()

    -

    Add a dataframe of trait value substitutions into a metadata file for a dataset_id

    -

    metadata_add_taxonomic_change()

    -

    Add a taxonomic change into the metadata yaml file for a dataset_id

    -

    metadata_add_taxonomic_changes_list()

    -

    Add a list of taxonomic updates into a metadata file for a dataset_id

    -

    metadata_check_custom_R_code()

    -

    Check the output of running `custom_R_code` specified in -the metadata for specified `dataset_id`

    -

    metadata_exclude_observations()

    -

    Exclude observations in a yaml file for a dataset_id

    -

    metadata_find_taxonomic_change()

    -

    Find taxonomic changes within the metadata yml files

    -

    metadata_path_dataset_id()

    -

    Path to the `metadata.yml` file for specified `dataset_id`

    -

    metadata_remove_taxonomic_change()

    -

    Remove a taxonomic change from a yaml file for a dataset_id

    -

    metadata_update_taxonomic_change()

    -

    Update a taxonomic change into a yaml file for a dataset_id

    -

    metadata_add_substitutions_table()

    -

    Substitutions from csv

    -

    metadata_user_select_column()

    -

    Select column by user

    -

    metadata_user_select_names()

    -

    Select variable names by user

    -

    Reading & writing files

    -

    -
    -

    read_csv_char()

    -

    Read in a csv as a tibble with column types as characters

    -

    read_metadata()

    -

    Read in a metadata.yml file for a study

    -

    read_metadata_dataset()

    -

    Read the `metadata.yml` file for specified `dataset_id`

    -

    read_yaml

    -

    Read yaml (from package yaml)

    -

    write_metadata()

    -

    Write metadata.yml for a study

    -

    write_metadata_dataset()

    -

    Write the YAML representation of metadata.yml for specified `dataset_id` to -file data/dataset_id/metadata.yml

    -

    write_yaml

    -

    write yaml (from package yaml)

    -

    write_plaintext()

    -

    Export AusTraits version as plain text

    -

    Diverse utility functions for converting and working with various data types

    -

    -
    -

    util_get_SHA()

    -

    Get SHA string from Github repository for latest commit

    -

    util_append_to_list()

    -

    Add an item to the end of a list

    -

    bib_print()

    -

    Format BibEntry using RefManageR

    -

    util_replace_null()

    -

    Convert NULL values to a different value

    -

    util_bib_to_list()

    -

    Convert BibEntry object to a list

    -

    util_list_to_bib()

    -

    Convert a list of elements into a BibEntry object

    -

    util_df_to_list()

    -

    Convert dataframe to list

    -

    util_extract_list_element()

    -

    Extract a trait element from the definitions$traits$elements

    -

    util_list_to_df2()

    -

    Convert a list of lists to dataframe

    -

    util_list_to_df1()

    -

    Convert a list with single entries to dataframe

    -

    util_separate_and_sort()

    -

    Split and sort cells with multiple values

    -

    util_check_all_values_in()

    -

    Check values in one vector against values in another vector

    -

    util_df_convert_character()

    -

    Convert all columns in data frame to character

    -

    util_get_version()

    -

    Retrieve version for compilation from definitions

    -

    util_kable_styling_html()

    -

    Format table with kable and default styling for html

    -

    util_standardise_doi()

    -

    Standarise doi into form https://doi.org/XXX

    -

    util_strip_taxon_names()

    -

    Strip scientific names of formatting and abbreviations

    -

    build_find_taxon()

    -

    Find list of all unique taxa within compilation

    -

    create_tree_branch()

    -

    Format a tree structure from a vector

    -

    get_unit_conversions()

    -

    Make unit conversion functions

    -

    Functions used when writing reports

    -

    -
    -

    notes_random_string()

    -

    Create a string of random letters

    -

    notetaker_add_note()

    -

    Add a note to the note recorder as a new row

    -

    notetaker_as_note()

    -

    Create a tibble with two columns with note and link

    -

    notetaker_get_note()

    -

    Return a specific row from notes

    -

    notetaker_print_all()

    -

    Print all notes

    -

    notetaker_print_note()

    -

    Print note (needs review?)

    -

    notetaker_print_notes()

    -

    Print a specific row from notes

    -

    notetaker_start()

    -

    Start note recorder (needs review?)

    - - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_contexts.html b/docs/reference/metadata_add_contexts.html deleted file mode 100644 index 2d78014e1..000000000 --- a/docs/reference/metadata_add_contexts.html +++ /dev/null @@ -1,143 +0,0 @@ - -For specified `dataset_id` import context data from a dataframe — metadata_add_contexts • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    This functions asks users which columns in the dataframe they would like to keep -and records this appropriately in the metadata. The input data is assumed to be -in wide format. -The output may require additional manual editing.

    -
    - -
    -
    metadata_add_contexts(dataset_id, overwrite = FALSE)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    overwrite
    -

    Overwrite existing information

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_locations.html b/docs/reference/metadata_add_locations.html deleted file mode 100644 index e8ebb7f88..000000000 --- a/docs/reference/metadata_add_locations.html +++ /dev/null @@ -1,152 +0,0 @@ - -For specified `dataset_id` import location data from a dataframe — metadata_add_locations • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    This functions asks users which columns in the dataframe they would like to keep -and records this appropriately in the metadata. The input data is assumed to be -in wide format. -The output may require additional manual editing.

    -
    - -
    -
    metadata_add_locations(dataset_id, location_data)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    location_data
    -

    A dataframe of site variables

    - -
    - -
    -

    Examples

    -
    if (FALSE) {
    -austraits$locations %>% dplyr::filter(dataset_id == "Falster_2005_1") %>% 
    -select(-dataset_id) %>% spread(location_property, value) %>% type_convert()-> location_data
    -metadata_add_locations("Falster_2005_1", location_data)
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_source_bibtex.html b/docs/reference/metadata_add_source_bibtex.html deleted file mode 100644 index de6737b8f..000000000 --- a/docs/reference/metadata_add_source_bibtex.html +++ /dev/null @@ -1,161 +0,0 @@ - -Adds citation details to a metadata file for given study — metadata_add_source_bibtex • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Adds citation details to a metadata file for given study

    -
    - -
    -
    metadata_add_source_bibtex(
    -  dataset_id,
    -  file,
    -  type = "primary",
    -  key = dataset_id,
    -  drop = c("dateobj", "month")
    -)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    file
    -

    Name of file where reference is saved

    - - -
    type
    -

    Type of references: `primary` or `secondary`

    - - -
    key
    -

    The bibtex key to be used. By default set to `dataset_id`

    - - -
    drop
    -

    Variables to ignore

    - -
    -
    -

    Value

    - - -

    yml file with citation details added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_source_doi.html b/docs/reference/metadata_add_source_doi.html deleted file mode 100644 index 3b7f72d9f..000000000 --- a/docs/reference/metadata_add_source_doi.html +++ /dev/null @@ -1,149 +0,0 @@ - -Adds citation details from a doi to a metadata file for a dataset_id. — metadata_add_source_doi • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Uses rcrossref package to access publication details from the crossref -database

    -
    - -
    -
    metadata_add_source_doi(..., doi, bib = NULL)
    -
    - -
    -

    Arguments

    -
    ...
    -

    arguments passed from metadata_add_source_bibtex()

    - - -
    doi
    -

    doi of reference to add

    - - -
    bib
    -

    (Only use for testing purposes). Result of calling `bib rcrossref::cr_cn(doi)`

    - -
    -
    -

    Value

    - - -

    metadata.yml file has citation details added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_substitution.html b/docs/reference/metadata_add_substitution.html deleted file mode 100644 index 33da1da34..000000000 --- a/docs/reference/metadata_add_substitution.html +++ /dev/null @@ -1,155 +0,0 @@ - -Add a categorical trait value substitution into a metadata file for a dataset_id — metadata_add_substitution • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `metadata_add_substitution` is used to align the categorical trait values used -by a contributor to the categorical values supported by AusTraits. These values -are defined in the `traits.yml` file

    -
    - -
    -
    metadata_add_substitution(dataset_id, trait_name, find, replace)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    trait_name
    -

    the AusTraits defined name for a particular trait

    - - -
    find
    -

    trait value in the original data.csv file

    - - -
    replace
    -

    trait value supported by AusTraits

    - -
    -
    -

    Value

    - - -

    yaml file with a substitution added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_substitutions_list.html b/docs/reference/metadata_add_substitutions_list.html deleted file mode 100644 index c72567217..000000000 --- a/docs/reference/metadata_add_substitutions_list.html +++ /dev/null @@ -1,143 +0,0 @@ - -Add a dataframe of trait value substitutions into a metadata file for a dataset_id — metadata_add_substitutions_list • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add a dataframe of trait value substitutions into a metadata file for a dataset_id

    -
    - -
    -
    metadata_add_substitutions_list(dataset_id, substitutions)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    substitutions
    -

    dataframe of trait value substitutions

    - -
    -
    -

    Value

    - - -

    yml file with multiple trait value substitutions added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_substitutions_table.html b/docs/reference/metadata_add_substitutions_table.html deleted file mode 100644 index caf1c28b5..000000000 --- a/docs/reference/metadata_add_substitutions_table.html +++ /dev/null @@ -1,173 +0,0 @@ - -Substitutions from csv — metadata_add_substitutions_table • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Function that simultaneously adds many trait value replacements, potentially across many trait_names and dataset_ids, to the respective metadata.yml files. -This function will be used to quickly re-align/re-assign trait values across all AusTraits studies.

    -
    - -
    -
    metadata_add_substitutions_table(
    -  dataframe_of_substitutions,
    -  dataset_id,
    -  trait_name,
    -  find,
    -  replace
    -)
    -
    - -
    -

    Arguments

    -
    dataframe_of_substitutions
    -

    dataframe with columns indicating dataset_id, trait_name, original trait values (find), and AusTraits aligned trait value (replace)

    - - -
    dataset_id
    -

    study's dataset_id in AusTraits

    - - -
    trait_name
    -

    trait name for which a trait value replacement needs to be made

    - - -
    find
    -

    trait value submitted by the contributor for a data observation

    - - -
    replace
    -

    AusTraits aligned trait value

    - -
    -
    -

    Value

    - - -

    modified metadata files with trait value replacements

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -read_csv("export/dispersal_syndrome_substitutions.csv") %>%
    -  select(-extra) %>%
    -  filter(dataset_id == "Angevin_2011") -> dataframe_of_substitutions
    -metadata_add_substitutions_table(dataframe_of_substitutions, dataset_id, trait_name, find, replace)
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_taxonomic_change.html b/docs/reference/metadata_add_taxonomic_change.html deleted file mode 100644 index 71e359e4a..000000000 --- a/docs/reference/metadata_add_taxonomic_change.html +++ /dev/null @@ -1,157 +0,0 @@ - -Add a taxonomic change into the metadata yaml file for a dataset_id — metadata_add_taxonomic_change • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add a single taxonomic change into the metadata yaml file for a specific study

    -
    - -
    -
    metadata_add_taxonomic_change(
    -  dataset_id,
    -  find,
    -  replace,
    -  reason,
    -  taxonomic_resolution
    -)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    find
    -

    original name used by the contributor

    - - -
    replace
    -

    taxonomic name accepted by APC or APNI

    - - -
    reason
    -

    reason for taxonomic change

    - -
    -
    -

    Value

    - - -

    yml file with taxonomic change added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_taxonomic_changes_list.html b/docs/reference/metadata_add_taxonomic_changes_list.html deleted file mode 100644 index 5fee6b11e..000000000 --- a/docs/reference/metadata_add_taxonomic_changes_list.html +++ /dev/null @@ -1,145 +0,0 @@ - -Add a list of taxonomic updates into a metadata file for a dataset_id — metadata_add_taxonomic_changes_list • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add multiple taxonomic changes to the metadata yaml file using a dataframe -containing the taxonomic changes to be made.

    -
    - -
    -
    metadata_add_taxonomic_changes_list(dataset_id, taxonomic_updates)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    taxonomic_updates
    -

    dataframe of taxonomic updates

    - -
    -
    -

    Value

    - - -

    yml file with multiple taxonmic updates added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_add_traits.html b/docs/reference/metadata_add_traits.html deleted file mode 100644 index f5d1cccd3..000000000 --- a/docs/reference/metadata_add_traits.html +++ /dev/null @@ -1,139 +0,0 @@ - -For specified `dataset_id`, populate columns for traits into metadata — metadata_add_traits • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    This functions asks users which traits they would like to keep, and adds a template -for those traits in the metadata. This template must then be finished manually.

    -
    - -
    -
    metadata_add_traits(dataset_id)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - -
    -
    -

    Details

    -

    Can also be used to add a trait to an existing metadata file

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_check_custom_R_code.html b/docs/reference/metadata_check_custom_R_code.html deleted file mode 100644 index b8f6bfcba..000000000 --- a/docs/reference/metadata_check_custom_R_code.html +++ /dev/null @@ -1,142 +0,0 @@ - -Check the output of running `custom_R_code` specified in -the metadata for specified `dataset_id` — metadata_check_custom_R_code • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Function to check the output of running `custom_R_code` specified in -the `metadata.yml` file for specified `dataset_id`. -For the specified `dataset_id`, reads in the file `data.csv` and -applies manipulations as described in the file `metadata.yml`

    -
    - -
    -
    metadata_check_custom_R_code(dataset_id)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_create_template.html b/docs/reference/metadata_create_template.html deleted file mode 100644 index 1febd917b..000000000 --- a/docs/reference/metadata_create_template.html +++ /dev/null @@ -1,151 +0,0 @@ - -Create a template of file `metadata.yml` for specified `dataset_id` — metadata_create_template • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Includes place-holders for major sections of the metadata

    -
    - -
    -
    metadata_create_template(
    -  dataset_id,
    -  path = file.path("data", dataset_id),
    -  skip_manual = FALSE
    -)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    path
    -

    location of file where output is saved

    - - -
    skip_manual
    -

    allows skipping of manual selection of variables, default = FALSE

    - -
    -
    -

    Value

    - - -

    a yml file template for metadata

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_exclude_observations.html b/docs/reference/metadata_exclude_observations.html deleted file mode 100644 index 724186976..000000000 --- a/docs/reference/metadata_exclude_observations.html +++ /dev/null @@ -1,151 +0,0 @@ - -Exclude observations in a yaml file for a dataset_id — metadata_exclude_observations • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Exclude observations in a yaml file for a dataset_id

    -
    - -
    -
    metadata_exclude_observations(dataset_id, variable, find, reason)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    variable
    -

    variable name

    - - -
    find
    -

    term to find by

    - - -
    reason
    -

    reason for exclusion

    - -
    -
    -

    Value

    - - -

    yml file with excluded observations

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_find_taxonomic_change.html b/docs/reference/metadata_find_taxonomic_change.html deleted file mode 100644 index dd00d255d..000000000 --- a/docs/reference/metadata_find_taxonomic_change.html +++ /dev/null @@ -1,141 +0,0 @@ - -Find taxonomic changes within the metadata yml files — metadata_find_taxonomic_change • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Find taxonomic changes within the metadata yml files

    -
    - -
    -
    metadata_find_taxonomic_change(find, replace = NULL, studies = NULL)
    -
    - -
    -

    Arguments

    -
    find
    -

    name of original species

    - - -
    replace
    -

    name of replacement species, default = NULL

    - - -
    studies
    -

    name of studies, default = NULL

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_path_dataset_id.html b/docs/reference/metadata_path_dataset_id.html deleted file mode 100644 index 45b6e2042..000000000 --- a/docs/reference/metadata_path_dataset_id.html +++ /dev/null @@ -1,139 +0,0 @@ - -Path to the `metadata.yml` file for specified `dataset_id` — metadata_path_dataset_id • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Path to the `metadata.yml` file for specified `dataset_id`

    -
    - -
    -
    metadata_path_dataset_id(dataset_id)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - -
    -
    -

    Value

    - - -

    A string

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_remove_taxonomic_change.html b/docs/reference/metadata_remove_taxonomic_change.html deleted file mode 100644 index 3c5b1378a..000000000 --- a/docs/reference/metadata_remove_taxonomic_change.html +++ /dev/null @@ -1,147 +0,0 @@ - -Remove a taxonomic change from a yaml file for a dataset_id — metadata_remove_taxonomic_change • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Remove a taxonomic change from a yaml file for a dataset_id

    -
    - -
    -
    metadata_remove_taxonomic_change(dataset_id, find, replace = NULL)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    find
    -

    taxonomic name to find

    - - -
    replace
    -

    taxonomic name to replace with

    - -
    -
    -

    Value

    - - -

    yml file with a taxonomic change removed

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_update_taxonomic_change.html b/docs/reference/metadata_update_taxonomic_change.html deleted file mode 100644 index 9e61d8552..000000000 --- a/docs/reference/metadata_update_taxonomic_change.html +++ /dev/null @@ -1,157 +0,0 @@ - -Update a taxonomic change into a yaml file for a dataset_id — metadata_update_taxonomic_change • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Update a taxonomic change into a yaml file for a dataset_id

    -
    - -
    -
    metadata_update_taxonomic_change(
    -  dataset_id,
    -  find,
    -  replace,
    -  reason,
    -  taxonomic_resolution
    -)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    find
    -

    original taxonomic name

    - - -
    replace
    -

    updated taxonomic name to replace original taxonomic name

    - - -
    reason
    -

    reason for change

    - -
    -
    -

    Value

    - - -

    yml file with added substitution

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_user_select_column.html b/docs/reference/metadata_user_select_column.html deleted file mode 100644 index f2dce611a..000000000 --- a/docs/reference/metadata_user_select_column.html +++ /dev/null @@ -1,143 +0,0 @@ - -Select column by user — metadata_user_select_column • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `metadata_user_select_column` is used to select which columns in a dataframe/ tibble -corresponds to the variable of interest. It is used compile the metadata yaml -file by prompting the user to choose the relevant columns. It is used in -`metadata_add_locations` and `metadata_add_contexts` and `metadata_create_template`

    -
    - -
    -
    metadata_user_select_column(column, choices)
    -
    - -
    -

    Arguments

    -
    column
    -

    name of the variable of interest

    - - -
    choices
    -

    the options that can be selected from

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/metadata_user_select_names.html b/docs/reference/metadata_user_select_names.html deleted file mode 100644 index b627e5184..000000000 --- a/docs/reference/metadata_user_select_names.html +++ /dev/null @@ -1,141 +0,0 @@ - -Select variable names by user — metadata_user_select_names • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `user_select names` is used to prompt the user to select the variables that -are relevant for compiling the metadata yaml file. It is currently used for -`metadata_add_traits`, `metadata_add_locations` and `metadata_add_contexts`

    -
    - -
    -
    metadata_user_select_names(title, vars)
    -
    - -
    -

    Arguments

    -
    title
    -

    character string providing the instruction for the user

    - - -
    vars
    -

    variable names

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notes_random_string.html b/docs/reference/notes_random_string.html deleted file mode 100644 index bc7116934..000000000 --- a/docs/reference/notes_random_string.html +++ /dev/null @@ -1,141 +0,0 @@ - -Create a string of random letters — notes_random_string • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Creates a string of random letters with 8 characters as the default, -useful for defining unique hyperlinks

    -
    - -
    -
    notes_random_string(n = 8)
    -
    - -
    -

    Arguments

    -
    n
    -

    numerical integer, default is 8

    - -
    -
    -

    Value

    - - -

    character string with 8 letters

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_add_note.html b/docs/reference/notetaker_add_note.html deleted file mode 100644 index 79d3c0061..000000000 --- a/docs/reference/notetaker_add_note.html +++ /dev/null @@ -1,143 +0,0 @@ - -Add a note to the note recorder as a new row — notetaker_add_note • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add a note to the note recorder as a new row

    -
    - -
    -
    notetaker_add_note(notes, new_note)
    -
    - -
    -

    Arguments

    -
    notes
    -

    object containing the report notes

    - - -
    new_note
    -

    vector of character notes to be added to existing notes

    - -
    -
    -

    Value

    - - -

    A tibble with additional notes added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_as_note.html b/docs/reference/notetaker_as_note.html deleted file mode 100644 index 45ba06232..000000000 --- a/docs/reference/notetaker_as_note.html +++ /dev/null @@ -1,145 +0,0 @@ - -Create a tibble with two columns with note and link — notetaker_as_note • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Creates a tibble with two columns with one column consisting -of a randomly generated string of letters

    -
    - -
    -
    notetaker_as_note(note, link = NA_character_)
    -
    - -
    -

    Arguments

    -
    note
    -

    character string

    - - -
    link
    -

    character string, default is NA_character_ which generates a random string

    - -
    -
    -

    Value

    - - -

    a tibble with two columns named note and link

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_get_note.html b/docs/reference/notetaker_get_note.html deleted file mode 100644 index 1158eec24..000000000 --- a/docs/reference/notetaker_get_note.html +++ /dev/null @@ -1,145 +0,0 @@ - -Return a specific row from notes — notetaker_get_note • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Returns a specific row from notes specified by i. Default is nrow(notes) which -returns the last note

    -
    - -
    -
    notetaker_get_note(notes, i = nrow(notes))
    -
    - -
    -

    Arguments

    -
    notes
    -

    object containing the report notes

    - - -
    i
    -

    numerical; row number for corresponding note, default is nrow(notes)

    - -
    -
    -

    Value

    - - -

    a single row from a tibble

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_print_all.html b/docs/reference/notetaker_print_all.html deleted file mode 100644 index ebc67abe6..000000000 --- a/docs/reference/notetaker_print_all.html +++ /dev/null @@ -1,147 +0,0 @@ - -Print all notes — notetaker_print_all • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Print all notes

    -
    - -
    -
    notetaker_print_all(notes, ..., numbered = TRUE)
    -
    - -
    -

    Arguments

    -
    notes
    -

    object containing the report notes

    - - -
    ...
    -

    arguments passed to other functions

    - - -
    numbered
    -

    logical default is TRUE

    - -
    -
    -

    Value

    - - -

    character string containing the notes

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_print_note.html b/docs/reference/notetaker_print_note.html deleted file mode 100644 index 054ce9666..000000000 --- a/docs/reference/notetaker_print_note.html +++ /dev/null @@ -1,156 +0,0 @@ - -Print note (needs review?) — notetaker_print_note • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Print note (needs review?)

    -
    - -
    -
    notetaker_print_note(
    -  note,
    -  as_anchor = FALSE,
    -  anchor_text = "",
    -  link_text = "link"
    -)
    -
    - -
    -

    Arguments

    -
    note
    -

    object containing the report notes

    - - -
    as_anchor
    -

    logical default is FALSE

    - - -
    anchor_text
    -

    character string, default is ""

    - - -
    link_text
    -

    character string, default is "link"

    - -
    -
    -

    Value

    - - -

    character string containing the notes

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_print_notes.html b/docs/reference/notetaker_print_notes.html deleted file mode 100644 index fed736286..000000000 --- a/docs/reference/notetaker_print_notes.html +++ /dev/null @@ -1,147 +0,0 @@ - -Print a specific row from notes — notetaker_print_notes • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Prints a specific row from notes specified by i

    -
    - -
    -
    notetaker_print_notes(notes, i = nrow(notes), ...)
    -
    - -
    -

    Arguments

    -
    notes
    -

    object containing the report notes

    - - -
    i
    -

    specify the row which contains the note to be returned

    - - -
    ...
    -

    arguments passed to notetaker_print_note()

    - -
    -
    -

    Value

    - - -

    character string containing the notes

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/notetaker_start.html b/docs/reference/notetaker_start.html deleted file mode 100644 index 35ca52b4a..000000000 --- a/docs/reference/notetaker_start.html +++ /dev/null @@ -1,133 +0,0 @@ - -Start note recorder (needs review?) — notetaker_start • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Note recorder used in report_study.Rmd file to initiate note recorder

    -
    - -
    -
    notetaker_start()
    -
    - -
    -

    Value

    - - -

    A tibble where notes are recorded

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html deleted file mode 100644 index ed4768d07..000000000 --- a/docs/reference/pipe.html +++ /dev/null @@ -1,127 +0,0 @@ - -Pipe operator — %>% • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    See magrittr::%>% for details.

    -
    - -
    -
    lhs %>% rhs
    -
    - - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_add_all_columns.html b/docs/reference/process_add_all_columns.html deleted file mode 100644 index 6846cf67b..000000000 --- a/docs/reference/process_add_all_columns.html +++ /dev/null @@ -1,149 +0,0 @@ - -Add or remove columns of data — process_add_all_columns • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add or remove columns of data as needed so that all datasets -have the same columns. Also adds in an error column.

    -
    - -
    -
    process_add_all_columns(data, vars, add_error_column = TRUE)
    -
    - -
    -

    Arguments

    -
    data
    -

    dataframe containing study data read in as a csv file

    - - -
    vars
    -

    vector of variable columns names to be included in the final formatted tibble

    - - -
    add_error_column
    -

    adds an extra column called error if TRUE

    - -
    -
    -

    Value

    - - -

    tibble with the correct selection of columns including an error column

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_convert_units.html b/docs/reference/process_convert_units.html deleted file mode 100644 index f0ea65337..000000000 --- a/docs/reference/process_convert_units.html +++ /dev/null @@ -1,147 +0,0 @@ - -Convert units to desired type — process_convert_units • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert units to desired type

    -
    - -
    -
    process_convert_units(data, definitions, unit_conversion_functions)
    -
    - -
    -

    Arguments

    -
    data
    -

    tibble or dataframe containing the study data

    - - -
    definitions
    -

    definitions read in from the traits.yml file in the config folder

    - - -
    unit_conversion_functions
    -

    unit_conversions.csv file stored in the config folder

    - -
    -
    -

    Value

    - - -

    tibble with converted units

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_create_observation_id.html b/docs/reference/process_create_observation_id.html deleted file mode 100644 index b8f1c256c..000000000 --- a/docs/reference/process_create_observation_id.html +++ /dev/null @@ -1,143 +0,0 @@ - -Create entity id — process_create_observation_id • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Creates 3-part entity id codes that combine a segment for species, population, -and, when applicable, individual -This depends upon a parsing_id being established when the data.csv file is first read in

    -
    - -
    -
    process_create_observation_id(data)
    -
    - -
    -

    Arguments

    -
    data
    -

    the traits table at the point where this function is called

    - -
    -
    -

    Value

    - - -

    character string

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_custom_code.html b/docs/reference/process_custom_code.html deleted file mode 100644 index 8e668dea5..000000000 --- a/docs/reference/process_custom_code.html +++ /dev/null @@ -1,144 +0,0 @@ - -Apply custom data manipulations — process_custom_code • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Applies custom data manipulations if the metadata field custom_R_code is not empty -Otherwise no manipulations will be done by applying the `identity` function. -The code custom_R_code assumes a single input.

    -
    - -
    -
    process_custom_code(txt)
    -
    - -
    -

    Arguments

    -
    txt
    -

    character text within custom_R_code of a metadata.yml file

    - -
    -
    -

    Value

    - - -

    character text containing custom_R_code if custom_R_code is not empty, -otherwise no changes are made

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_flag_excluded_observations.html b/docs/reference/process_flag_excluded_observations.html deleted file mode 100644 index fe7232cd0..000000000 --- a/docs/reference/process_flag_excluded_observations.html +++ /dev/null @@ -1,147 +0,0 @@ - -Flag any excluded observations — process_flag_excluded_observations • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Checks the metadata yaml file for any excluded observations. If there are none, -returns the original data. If there are excluded observations returns the mutated data -with excluded observations flagged in a new column

    -
    - -
    -
    process_flag_excluded_observations(data, metadata)
    -
    - -
    -

    Arguments

    -
    data
    -

    tibble or dataframe containing the study data

    - - -
    metadata
    -

    metadata yaml file for any given study

    - -
    -
    -

    Value

    - - -

    dataframe with flagged excluded observations if there are any

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_flag_unsupported_traits.html b/docs/reference/process_flag_unsupported_traits.html deleted file mode 100644 index cb05de20f..000000000 --- a/docs/reference/process_flag_unsupported_traits.html +++ /dev/null @@ -1,143 +0,0 @@ - -Flag any unrecognised traits — process_flag_unsupported_traits • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Flag any unrecognised traits, as defined in the traits.yml file

    -
    - -
    -
    process_flag_unsupported_traits(data, definitions)
    -
    - -
    -

    Arguments

    -
    data
    -

    tibble or dataframe containing the study data

    - - -
    definitions
    -

    definitions read in from the traits.yml file in the config folder

    - -
    -
    -

    Value

    - - -

    tibble with unrecognised traits flagged as "Unsupported trait" in the "error" column

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_flag_unsupported_values.html b/docs/reference/process_flag_unsupported_values.html deleted file mode 100644 index 5fa2d79d4..000000000 --- a/docs/reference/process_flag_unsupported_values.html +++ /dev/null @@ -1,146 +0,0 @@ - -Flag values outside of allowable range — process_flag_unsupported_values • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Flags any values that are outside the allowable range defined in the -traits.yml file. NA values are flagged as errors.

    -
    - -
    -
    process_flag_unsupported_values(data, definitions)
    -
    - -
    -

    Arguments

    -
    data
    -

    tibble or dataframe containing the study data

    - - -
    definitions
    -

    definitions read in from the traits.yml file in the config folder

    - -
    -
    -

    Value

    - - -

    tibble with flagged values outside of allowable range, unsupported categorical -trait values or missing values

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_format_contexts.html b/docs/reference/process_format_contexts.html deleted file mode 100644 index f5f23c37a..000000000 --- a/docs/reference/process_format_contexts.html +++ /dev/null @@ -1,150 +0,0 @@ - -Format context data from list to tibble — process_format_contexts • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Format context data read in from the metadata.yml file. Converts from list to tibble.

    -
    - -
    -
    process_format_contexts(my_list, dataset_id)
    -
    - -
    -

    Arguments

    -
    my_list
    -

    list of input information

    - - -
    dataset_id
    -

    XXX

    - -
    -
    -

    Value

    - - -

    tibble with context details if available

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -process_format_contexts(read_metadata("data/Apgaua_2017/metadata.yml")$context)
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_format_contributors.html b/docs/reference/process_format_contributors.html deleted file mode 100644 index fbe507bdd..000000000 --- a/docs/reference/process_format_contributors.html +++ /dev/null @@ -1,154 +0,0 @@ - -Format contributors from list into tibble — process_format_contributors • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Format contributors, read in from the metadata.yml file. Converts from list to tibble.

    -
    - -
    -
    process_format_contributors(my_list, dataset_id, schema)
    -
    - -
    -

    Arguments

    -
    my_list
    -

    list of input information

    - - -
    dataset_id
    -

    XXX

    - - -
    schema
    -

    XXX

    - -
    -
    -

    Value

    - - -

    tibble with details of contributors

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -process_format_contributors(read_metadata("data/Falster_2003/metadata.yml")$contributors)
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_format_locations.html b/docs/reference/process_format_locations.html deleted file mode 100644 index d8a07acd9..000000000 --- a/docs/reference/process_format_locations.html +++ /dev/null @@ -1,154 +0,0 @@ - -Format location data from list to tibble — process_format_locations • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Format location data read in from the metadata.yml file. Converts from list to tibble.

    -
    - -
    -
    process_format_locations(my_list, dataset_id, schema)
    -
    - -
    -

    Arguments

    -
    my_list
    -

    list of input information

    - - -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    schema
    -

    XXX

    - -
    -
    -

    Value

    - - -

    tibble with location details if available

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -process_format_locations(read_metadata("data/Falster_2003/metadata.yml")$locations, "Falster_2003")
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_generate_id.html b/docs/reference/process_generate_id.html deleted file mode 100644 index eb335a396..000000000 --- a/docs/reference/process_generate_id.html +++ /dev/null @@ -1,152 +0,0 @@ - -Function to generate seuqnece of integer ids from vector of names -Determines number of 00s needed based on number of records — process_generate_id • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Function to generate seuqnece of integer ids from vector of names -Determines number of 00s needed based on number of records

    -
    - -
    -
    process_generate_id(x, prefix, sort = FALSE)
    -
    - -
    -

    Arguments

    -
    x
    -

    vector of text to convert

    - - -
    prefix
    -

    text to put before id integer

    - - -
    sort
    -

    logical to indicate whether x should be sorted before ids are generated

    - -
    -
    -

    Value

    - - -

    vector of ids

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_parse_data.html b/docs/reference/process_parse_data.html deleted file mode 100644 index 82c7f73d1..000000000 --- a/docs/reference/process_parse_data.html +++ /dev/null @@ -1,158 +0,0 @@ - -Process a single dataset — process_parse_data • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Process a single dataset with `dataset_id` using the associated `data.csv` and -`metadata.yml` files. Adds a unique observation id for each row of observation, -trait names are formatted using AusTraits accepted names and trait substitutions -are added. `parse data` is used in the core workflow pipeline (i.e. in `load study`).

    -
    - -
    -
    process_parse_data(data, dataset_id, metadata, contexts)
    -
    - -
    -

    Arguments

    -
    data
    -

    tibble or dataframe containing the study data

    - - -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - - -
    metadata
    -

    yaml file with metadata

    - - -
    contexts
    -

    dataframe of contexts for this study

    - -
    -
    -

    Value

    - - -

    tibble in long format with AusTraits formatted trait names, trait -substitutions and unique observation id added

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_standardise_names.html b/docs/reference/process_standardise_names.html deleted file mode 100644 index c04b4b0b8..000000000 --- a/docs/reference/process_standardise_names.html +++ /dev/null @@ -1,139 +0,0 @@ - -Standardise species names — process_standardise_names • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Enforces some standards on species names

    -
    - -
    -
    process_standardise_names(x)
    -
    - -
    -

    Arguments

    -
    x
    -

    vector, dataframe or list containing original species names

    - -
    -
    -

    Value

    - - -

    vector with standardised species names

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_taxonomic_updates.html b/docs/reference/process_taxonomic_updates.html deleted file mode 100644 index e99f775e9..000000000 --- a/docs/reference/process_taxonomic_updates.html +++ /dev/null @@ -1,143 +0,0 @@ - -Apply taxonomic updates — process_taxonomic_updates • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Applies taxonomic updates to the study data from the metadata.yml file

    -
    - -
    -
    process_taxonomic_updates(data, metadata)
    -
    - -
    -

    Arguments

    -
    data
    -

    tibble or dataframe containing the study data

    - - -
    metadata
    -

    yaml file containing the metadata

    - -
    -
    -

    Value

    - - -

    tibble with the taxonomic updates applied

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/process_unit_conversion_name.html b/docs/reference/process_unit_conversion_name.html deleted file mode 100644 index efc4713d3..000000000 --- a/docs/reference/process_unit_conversion_name.html +++ /dev/null @@ -1,145 +0,0 @@ - -Generate unit conversion name — process_unit_conversion_name • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    creates the unit conversion name based on the original units and the units to -converted to

    -
    - -
    -
    process_unit_conversion_name(from, to)
    -
    - -
    -

    Arguments

    -
    from
    -

    character of original units

    - - -
    to
    -

    character of units to be converted to

    - -
    -
    -

    Value

    - - -

    character string containing the name what units are being converted to

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/read_csv_char.html b/docs/reference/read_csv_char.html deleted file mode 100644 index f81de1d23..000000000 --- a/docs/reference/read_csv_char.html +++ /dev/null @@ -1,141 +0,0 @@ - -Read in a csv as a tibble with column types as characters — read_csv_char • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Reads in a csv file using the read_csv function from readr -with columns as characters

    -
    - -
    -
    read_csv_char(...)
    -
    - -
    -

    Arguments

    -
    ...
    -

    arguments passed to the read_csv()

    - -
    -
    -

    Value

    - - -

    tibble

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/read_metadata.html b/docs/reference/read_metadata.html deleted file mode 100644 index 96b3d4a41..000000000 --- a/docs/reference/read_metadata.html +++ /dev/null @@ -1,133 +0,0 @@ - -Read in a metadata.yml file for a study — read_metadata • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Read in a metadata.yml file for a study

    -
    - -
    -
    read_metadata(path)
    -
    - -
    -

    Arguments

    -
    path
    -

    location of the metadata file

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/read_metadata_dataset.html b/docs/reference/read_metadata_dataset.html deleted file mode 100644 index 2fe7be89a..000000000 --- a/docs/reference/read_metadata_dataset.html +++ /dev/null @@ -1,139 +0,0 @@ - -Read the `metadata.yml` file for specified `dataset_id` — read_metadata_dataset • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Read the `metadata.yml` file for specified `dataset_id`

    -
    - -
    -
    read_metadata_dataset(dataset_id)
    -
    - -
    -

    Arguments

    -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - -
    -
    -

    Value

    - - -

    A list with contents of metadata for specified `dataset_id`

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/read_yaml.html b/docs/reference/read_yaml.html deleted file mode 100644 index d9de5e3fc..000000000 --- a/docs/reference/read_yaml.html +++ /dev/null @@ -1,124 +0,0 @@ - -Read yaml (from package yaml) — read_yaml • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Read yaml (from package yaml)

    -
    - - - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_append_to_list.html b/docs/reference/util_append_to_list.html deleted file mode 100644 index e37674343..000000000 --- a/docs/reference/util_append_to_list.html +++ /dev/null @@ -1,150 +0,0 @@ - -Add an item to the end of a list — util_append_to_list • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Add an item to the end of a list

    -
    - -
    -
    util_append_to_list(my_list, to_append)
    -
    - -
    -

    Arguments

    -
    my_list
    -

    a list

    - - -
    to_append
    -

    a list

    - -
    -
    -

    Value

    - - -

    a list merged with an added item at the end

    -
    - -
    -

    Examples

    -
     if (FALSE) {
    -util_append_to_list(as.list(iris)[c(1,2)], as.list(iris)[c(3,4)])
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_bib_to_list.html b/docs/reference/util_bib_to_list.html deleted file mode 100644 index 420d66d55..000000000 --- a/docs/reference/util_bib_to_list.html +++ /dev/null @@ -1,139 +0,0 @@ - -Convert BibEntry object to a list — util_bib_to_list • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert BibEntry object to a list

    -
    - -
    -
    util_bib_to_list(bib)
    -
    - -
    -

    Arguments

    -
    bib
    -

    BibEntry object

    - -
    -
    -

    Value

    - - -

    list

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_check_all_values_in.html b/docs/reference/util_check_all_values_in.html deleted file mode 100644 index 3a2f7e41e..000000000 --- a/docs/reference/util_check_all_values_in.html +++ /dev/null @@ -1,149 +0,0 @@ - -Check values in one vector against values in another vector — util_check_all_values_in • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    `util_check_all_values_in` checks if values in vector x are in y. Values in x may -contain multiple values separated by `sep` so these are split first using `str_split`.

    -
    - -
    -
    util_check_all_values_in(x, y, sep = " ")
    -
    - -
    -

    Arguments

    -
    x
    -

    vector

    - - -
    y
    -

    vector

    - - -
    sep
    -

    amount of space separating values to be split, default = " " (a single space)

    - -
    -
    -

    Value

    - - -

    vector of logical values

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_df_convert_character.html b/docs/reference/util_df_convert_character.html deleted file mode 100644 index 97f001d03..000000000 --- a/docs/reference/util_df_convert_character.html +++ /dev/null @@ -1,159 +0,0 @@ - -Convert all columns in data frame to character — util_df_convert_character • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert all columns in data frame to character

    -
    - -
    -
    util_df_convert_character(df)
    -
    - -
    -

    Arguments

    -
    df
    -

    a dataframe

    - -
    -
    -

    Value

    - - -

    a dataframe

    -
    - -
    -

    Examples

    -
    lapply(austraits.build:::util_df_convert_character(iris), class) 
    -#> $Sepal.Length
    -#> [1] "character"
    -#> 
    -#> $Sepal.Width
    -#> [1] "character"
    -#> 
    -#> $Petal.Length
    -#> [1] "character"
    -#> 
    -#> $Petal.Width
    -#> [1] "character"
    -#> 
    -#> $Species
    -#> [1] "character"
    -#> 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_df_to_list.html b/docs/reference/util_df_to_list.html deleted file mode 100644 index db09ee9ec..000000000 --- a/docs/reference/util_df_to_list.html +++ /dev/null @@ -1,2844 +0,0 @@ - -Convert dataframe to list — util_df_to_list • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert a dataframe to a named list, useful when converting to yaml

    -
    - -
    -
    util_df_to_list(df)
    -
    - -
    -

    Arguments

    -
    df
    -

    a dataframe

    - -
    -
    -

    Value

    - - -

    a (yaml) list

    -
    - -
    -

    Examples

    -
    util_df_to_list(iris)
    -#> [[1]]
    -#> [[1]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[1]]$Sepal.Width
    -#> [1] 3.5
    -#> 
    -#> [[1]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[1]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[1]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[2]]
    -#> [[2]]$Sepal.Length
    -#> [1] 4.9
    -#> 
    -#> [[2]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[2]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[2]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[2]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[3]]
    -#> [[3]]$Sepal.Length
    -#> [1] 4.7
    -#> 
    -#> [[3]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[3]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[3]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[3]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[4]]
    -#> [[4]]$Sepal.Length
    -#> [1] 4.6
    -#> 
    -#> [[4]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[4]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[4]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[4]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[5]]
    -#> [[5]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[5]]$Sepal.Width
    -#> [1] 3.6
    -#> 
    -#> [[5]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[5]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[5]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[6]]
    -#> [[6]]$Sepal.Length
    -#> [1] 5.4
    -#> 
    -#> [[6]]$Sepal.Width
    -#> [1] 3.9
    -#> 
    -#> [[6]]$Petal.Length
    -#> [1] 1.7
    -#> 
    -#> [[6]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[6]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[7]]
    -#> [[7]]$Sepal.Length
    -#> [1] 4.6
    -#> 
    -#> [[7]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[7]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[7]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[7]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[8]]
    -#> [[8]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[8]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[8]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[8]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[8]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[9]]
    -#> [[9]]$Sepal.Length
    -#> [1] 4.4
    -#> 
    -#> [[9]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[9]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[9]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[9]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[10]]
    -#> [[10]]$Sepal.Length
    -#> [1] 4.9
    -#> 
    -#> [[10]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[10]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[10]]$Petal.Width
    -#> [1] 0.1
    -#> 
    -#> [[10]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[11]]
    -#> [[11]]$Sepal.Length
    -#> [1] 5.4
    -#> 
    -#> [[11]]$Sepal.Width
    -#> [1] 3.7
    -#> 
    -#> [[11]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[11]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[11]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[12]]
    -#> [[12]]$Sepal.Length
    -#> [1] 4.8
    -#> 
    -#> [[12]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[12]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[12]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[12]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[13]]
    -#> [[13]]$Sepal.Length
    -#> [1] 4.8
    -#> 
    -#> [[13]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[13]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[13]]$Petal.Width
    -#> [1] 0.1
    -#> 
    -#> [[13]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[14]]
    -#> [[14]]$Sepal.Length
    -#> [1] 4.3
    -#> 
    -#> [[14]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[14]]$Petal.Length
    -#> [1] 1.1
    -#> 
    -#> [[14]]$Petal.Width
    -#> [1] 0.1
    -#> 
    -#> [[14]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[15]]
    -#> [[15]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[15]]$Sepal.Width
    -#> [1] 4
    -#> 
    -#> [[15]]$Petal.Length
    -#> [1] 1.2
    -#> 
    -#> [[15]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[15]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[16]]
    -#> [[16]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[16]]$Sepal.Width
    -#> [1] 4.4
    -#> 
    -#> [[16]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[16]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[16]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[17]]
    -#> [[17]]$Sepal.Length
    -#> [1] 5.4
    -#> 
    -#> [[17]]$Sepal.Width
    -#> [1] 3.9
    -#> 
    -#> [[17]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[17]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[17]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[18]]
    -#> [[18]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[18]]$Sepal.Width
    -#> [1] 3.5
    -#> 
    -#> [[18]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[18]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[18]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[19]]
    -#> [[19]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[19]]$Sepal.Width
    -#> [1] 3.8
    -#> 
    -#> [[19]]$Petal.Length
    -#> [1] 1.7
    -#> 
    -#> [[19]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[19]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[20]]
    -#> [[20]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[20]]$Sepal.Width
    -#> [1] 3.8
    -#> 
    -#> [[20]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[20]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[20]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[21]]
    -#> [[21]]$Sepal.Length
    -#> [1] 5.4
    -#> 
    -#> [[21]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[21]]$Petal.Length
    -#> [1] 1.7
    -#> 
    -#> [[21]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[21]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[22]]
    -#> [[22]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[22]]$Sepal.Width
    -#> [1] 3.7
    -#> 
    -#> [[22]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[22]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[22]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[23]]
    -#> [[23]]$Sepal.Length
    -#> [1] 4.6
    -#> 
    -#> [[23]]$Sepal.Width
    -#> [1] 3.6
    -#> 
    -#> [[23]]$Petal.Length
    -#> [1] 1
    -#> 
    -#> [[23]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[23]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[24]]
    -#> [[24]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[24]]$Sepal.Width
    -#> [1] 3.3
    -#> 
    -#> [[24]]$Petal.Length
    -#> [1] 1.7
    -#> 
    -#> [[24]]$Petal.Width
    -#> [1] 0.5
    -#> 
    -#> [[24]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[25]]
    -#> [[25]]$Sepal.Length
    -#> [1] 4.8
    -#> 
    -#> [[25]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[25]]$Petal.Length
    -#> [1] 1.9
    -#> 
    -#> [[25]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[25]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[26]]
    -#> [[26]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[26]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[26]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[26]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[26]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[27]]
    -#> [[27]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[27]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[27]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[27]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[27]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[28]]
    -#> [[28]]$Sepal.Length
    -#> [1] 5.2
    -#> 
    -#> [[28]]$Sepal.Width
    -#> [1] 3.5
    -#> 
    -#> [[28]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[28]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[28]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[29]]
    -#> [[29]]$Sepal.Length
    -#> [1] 5.2
    -#> 
    -#> [[29]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[29]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[29]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[29]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[30]]
    -#> [[30]]$Sepal.Length
    -#> [1] 4.7
    -#> 
    -#> [[30]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[30]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[30]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[30]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[31]]
    -#> [[31]]$Sepal.Length
    -#> [1] 4.8
    -#> 
    -#> [[31]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[31]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[31]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[31]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[32]]
    -#> [[32]]$Sepal.Length
    -#> [1] 5.4
    -#> 
    -#> [[32]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[32]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[32]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[32]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[33]]
    -#> [[33]]$Sepal.Length
    -#> [1] 5.2
    -#> 
    -#> [[33]]$Sepal.Width
    -#> [1] 4.1
    -#> 
    -#> [[33]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[33]]$Petal.Width
    -#> [1] 0.1
    -#> 
    -#> [[33]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[34]]
    -#> [[34]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[34]]$Sepal.Width
    -#> [1] 4.2
    -#> 
    -#> [[34]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[34]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[34]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[35]]
    -#> [[35]]$Sepal.Length
    -#> [1] 4.9
    -#> 
    -#> [[35]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[35]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[35]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[35]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[36]]
    -#> [[36]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[36]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[36]]$Petal.Length
    -#> [1] 1.2
    -#> 
    -#> [[36]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[36]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[37]]
    -#> [[37]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[37]]$Sepal.Width
    -#> [1] 3.5
    -#> 
    -#> [[37]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[37]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[37]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[38]]
    -#> [[38]]$Sepal.Length
    -#> [1] 4.9
    -#> 
    -#> [[38]]$Sepal.Width
    -#> [1] 3.6
    -#> 
    -#> [[38]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[38]]$Petal.Width
    -#> [1] 0.1
    -#> 
    -#> [[38]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[39]]
    -#> [[39]]$Sepal.Length
    -#> [1] 4.4
    -#> 
    -#> [[39]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[39]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[39]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[39]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[40]]
    -#> [[40]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[40]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[40]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[40]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[40]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[41]]
    -#> [[41]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[41]]$Sepal.Width
    -#> [1] 3.5
    -#> 
    -#> [[41]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[41]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[41]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[42]]
    -#> [[42]]$Sepal.Length
    -#> [1] 4.5
    -#> 
    -#> [[42]]$Sepal.Width
    -#> [1] 2.3
    -#> 
    -#> [[42]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[42]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[42]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[43]]
    -#> [[43]]$Sepal.Length
    -#> [1] 4.4
    -#> 
    -#> [[43]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[43]]$Petal.Length
    -#> [1] 1.3
    -#> 
    -#> [[43]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[43]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[44]]
    -#> [[44]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[44]]$Sepal.Width
    -#> [1] 3.5
    -#> 
    -#> [[44]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[44]]$Petal.Width
    -#> [1] 0.6
    -#> 
    -#> [[44]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[45]]
    -#> [[45]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[45]]$Sepal.Width
    -#> [1] 3.8
    -#> 
    -#> [[45]]$Petal.Length
    -#> [1] 1.9
    -#> 
    -#> [[45]]$Petal.Width
    -#> [1] 0.4
    -#> 
    -#> [[45]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[46]]
    -#> [[46]]$Sepal.Length
    -#> [1] 4.8
    -#> 
    -#> [[46]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[46]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[46]]$Petal.Width
    -#> [1] 0.3
    -#> 
    -#> [[46]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[47]]
    -#> [[47]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[47]]$Sepal.Width
    -#> [1] 3.8
    -#> 
    -#> [[47]]$Petal.Length
    -#> [1] 1.6
    -#> 
    -#> [[47]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[47]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[48]]
    -#> [[48]]$Sepal.Length
    -#> [1] 4.6
    -#> 
    -#> [[48]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[48]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[48]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[48]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[49]]
    -#> [[49]]$Sepal.Length
    -#> [1] 5.3
    -#> 
    -#> [[49]]$Sepal.Width
    -#> [1] 3.7
    -#> 
    -#> [[49]]$Petal.Length
    -#> [1] 1.5
    -#> 
    -#> [[49]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[49]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[50]]
    -#> [[50]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[50]]$Sepal.Width
    -#> [1] 3.3
    -#> 
    -#> [[50]]$Petal.Length
    -#> [1] 1.4
    -#> 
    -#> [[50]]$Petal.Width
    -#> [1] 0.2
    -#> 
    -#> [[50]]$Species
    -#> [1] setosa
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[51]]
    -#> [[51]]$Sepal.Length
    -#> [1] 7
    -#> 
    -#> [[51]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[51]]$Petal.Length
    -#> [1] 4.7
    -#> 
    -#> [[51]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[51]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[52]]
    -#> [[52]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[52]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[52]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[52]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[52]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[53]]
    -#> [[53]]$Sepal.Length
    -#> [1] 6.9
    -#> 
    -#> [[53]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[53]]$Petal.Length
    -#> [1] 4.9
    -#> 
    -#> [[53]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[53]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[54]]
    -#> [[54]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[54]]$Sepal.Width
    -#> [1] 2.3
    -#> 
    -#> [[54]]$Petal.Length
    -#> [1] 4
    -#> 
    -#> [[54]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[54]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[55]]
    -#> [[55]]$Sepal.Length
    -#> [1] 6.5
    -#> 
    -#> [[55]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[55]]$Petal.Length
    -#> [1] 4.6
    -#> 
    -#> [[55]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[55]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[56]]
    -#> [[56]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[56]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[56]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[56]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[56]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[57]]
    -#> [[57]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[57]]$Sepal.Width
    -#> [1] 3.3
    -#> 
    -#> [[57]]$Petal.Length
    -#> [1] 4.7
    -#> 
    -#> [[57]]$Petal.Width
    -#> [1] 1.6
    -#> 
    -#> [[57]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[58]]
    -#> [[58]]$Sepal.Length
    -#> [1] 4.9
    -#> 
    -#> [[58]]$Sepal.Width
    -#> [1] 2.4
    -#> 
    -#> [[58]]$Petal.Length
    -#> [1] 3.3
    -#> 
    -#> [[58]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[58]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[59]]
    -#> [[59]]$Sepal.Length
    -#> [1] 6.6
    -#> 
    -#> [[59]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[59]]$Petal.Length
    -#> [1] 4.6
    -#> 
    -#> [[59]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[59]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[60]]
    -#> [[60]]$Sepal.Length
    -#> [1] 5.2
    -#> 
    -#> [[60]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[60]]$Petal.Length
    -#> [1] 3.9
    -#> 
    -#> [[60]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[60]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[61]]
    -#> [[61]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[61]]$Sepal.Width
    -#> [1] 2
    -#> 
    -#> [[61]]$Petal.Length
    -#> [1] 3.5
    -#> 
    -#> [[61]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[61]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[62]]
    -#> [[62]]$Sepal.Length
    -#> [1] 5.9
    -#> 
    -#> [[62]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[62]]$Petal.Length
    -#> [1] 4.2
    -#> 
    -#> [[62]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[62]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[63]]
    -#> [[63]]$Sepal.Length
    -#> [1] 6
    -#> 
    -#> [[63]]$Sepal.Width
    -#> [1] 2.2
    -#> 
    -#> [[63]]$Petal.Length
    -#> [1] 4
    -#> 
    -#> [[63]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[63]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[64]]
    -#> [[64]]$Sepal.Length
    -#> [1] 6.1
    -#> 
    -#> [[64]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[64]]$Petal.Length
    -#> [1] 4.7
    -#> 
    -#> [[64]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[64]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[65]]
    -#> [[65]]$Sepal.Length
    -#> [1] 5.6
    -#> 
    -#> [[65]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[65]]$Petal.Length
    -#> [1] 3.6
    -#> 
    -#> [[65]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[65]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[66]]
    -#> [[66]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[66]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[66]]$Petal.Length
    -#> [1] 4.4
    -#> 
    -#> [[66]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[66]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[67]]
    -#> [[67]]$Sepal.Length
    -#> [1] 5.6
    -#> 
    -#> [[67]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[67]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[67]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[67]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[68]]
    -#> [[68]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[68]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[68]]$Petal.Length
    -#> [1] 4.1
    -#> 
    -#> [[68]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[68]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[69]]
    -#> [[69]]$Sepal.Length
    -#> [1] 6.2
    -#> 
    -#> [[69]]$Sepal.Width
    -#> [1] 2.2
    -#> 
    -#> [[69]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[69]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[69]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[70]]
    -#> [[70]]$Sepal.Length
    -#> [1] 5.6
    -#> 
    -#> [[70]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[70]]$Petal.Length
    -#> [1] 3.9
    -#> 
    -#> [[70]]$Petal.Width
    -#> [1] 1.1
    -#> 
    -#> [[70]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[71]]
    -#> [[71]]$Sepal.Length
    -#> [1] 5.9
    -#> 
    -#> [[71]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[71]]$Petal.Length
    -#> [1] 4.8
    -#> 
    -#> [[71]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[71]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[72]]
    -#> [[72]]$Sepal.Length
    -#> [1] 6.1
    -#> 
    -#> [[72]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[72]]$Petal.Length
    -#> [1] 4
    -#> 
    -#> [[72]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[72]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[73]]
    -#> [[73]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[73]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[73]]$Petal.Length
    -#> [1] 4.9
    -#> 
    -#> [[73]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[73]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[74]]
    -#> [[74]]$Sepal.Length
    -#> [1] 6.1
    -#> 
    -#> [[74]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[74]]$Petal.Length
    -#> [1] 4.7
    -#> 
    -#> [[74]]$Petal.Width
    -#> [1] 1.2
    -#> 
    -#> [[74]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[75]]
    -#> [[75]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[75]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[75]]$Petal.Length
    -#> [1] 4.3
    -#> 
    -#> [[75]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[75]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[76]]
    -#> [[76]]$Sepal.Length
    -#> [1] 6.6
    -#> 
    -#> [[76]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[76]]$Petal.Length
    -#> [1] 4.4
    -#> 
    -#> [[76]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[76]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[77]]
    -#> [[77]]$Sepal.Length
    -#> [1] 6.8
    -#> 
    -#> [[77]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[77]]$Petal.Length
    -#> [1] 4.8
    -#> 
    -#> [[77]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[77]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[78]]
    -#> [[78]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[78]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[78]]$Petal.Length
    -#> [1] 5
    -#> 
    -#> [[78]]$Petal.Width
    -#> [1] 1.7
    -#> 
    -#> [[78]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[79]]
    -#> [[79]]$Sepal.Length
    -#> [1] 6
    -#> 
    -#> [[79]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[79]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[79]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[79]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[80]]
    -#> [[80]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[80]]$Sepal.Width
    -#> [1] 2.6
    -#> 
    -#> [[80]]$Petal.Length
    -#> [1] 3.5
    -#> 
    -#> [[80]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[80]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[81]]
    -#> [[81]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[81]]$Sepal.Width
    -#> [1] 2.4
    -#> 
    -#> [[81]]$Petal.Length
    -#> [1] 3.8
    -#> 
    -#> [[81]]$Petal.Width
    -#> [1] 1.1
    -#> 
    -#> [[81]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[82]]
    -#> [[82]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[82]]$Sepal.Width
    -#> [1] 2.4
    -#> 
    -#> [[82]]$Petal.Length
    -#> [1] 3.7
    -#> 
    -#> [[82]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[82]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[83]]
    -#> [[83]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[83]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[83]]$Petal.Length
    -#> [1] 3.9
    -#> 
    -#> [[83]]$Petal.Width
    -#> [1] 1.2
    -#> 
    -#> [[83]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[84]]
    -#> [[84]]$Sepal.Length
    -#> [1] 6
    -#> 
    -#> [[84]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[84]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[84]]$Petal.Width
    -#> [1] 1.6
    -#> 
    -#> [[84]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[85]]
    -#> [[85]]$Sepal.Length
    -#> [1] 5.4
    -#> 
    -#> [[85]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[85]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[85]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[85]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[86]]
    -#> [[86]]$Sepal.Length
    -#> [1] 6
    -#> 
    -#> [[86]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[86]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[86]]$Petal.Width
    -#> [1] 1.6
    -#> 
    -#> [[86]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[87]]
    -#> [[87]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[87]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[87]]$Petal.Length
    -#> [1] 4.7
    -#> 
    -#> [[87]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[87]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[88]]
    -#> [[88]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[88]]$Sepal.Width
    -#> [1] 2.3
    -#> 
    -#> [[88]]$Petal.Length
    -#> [1] 4.4
    -#> 
    -#> [[88]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[88]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[89]]
    -#> [[89]]$Sepal.Length
    -#> [1] 5.6
    -#> 
    -#> [[89]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[89]]$Petal.Length
    -#> [1] 4.1
    -#> 
    -#> [[89]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[89]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[90]]
    -#> [[90]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[90]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[90]]$Petal.Length
    -#> [1] 4
    -#> 
    -#> [[90]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[90]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[91]]
    -#> [[91]]$Sepal.Length
    -#> [1] 5.5
    -#> 
    -#> [[91]]$Sepal.Width
    -#> [1] 2.6
    -#> 
    -#> [[91]]$Petal.Length
    -#> [1] 4.4
    -#> 
    -#> [[91]]$Petal.Width
    -#> [1] 1.2
    -#> 
    -#> [[91]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[92]]
    -#> [[92]]$Sepal.Length
    -#> [1] 6.1
    -#> 
    -#> [[92]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[92]]$Petal.Length
    -#> [1] 4.6
    -#> 
    -#> [[92]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[92]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[93]]
    -#> [[93]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[93]]$Sepal.Width
    -#> [1] 2.6
    -#> 
    -#> [[93]]$Petal.Length
    -#> [1] 4
    -#> 
    -#> [[93]]$Petal.Width
    -#> [1] 1.2
    -#> 
    -#> [[93]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[94]]
    -#> [[94]]$Sepal.Length
    -#> [1] 5
    -#> 
    -#> [[94]]$Sepal.Width
    -#> [1] 2.3
    -#> 
    -#> [[94]]$Petal.Length
    -#> [1] 3.3
    -#> 
    -#> [[94]]$Petal.Width
    -#> [1] 1
    -#> 
    -#> [[94]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[95]]
    -#> [[95]]$Sepal.Length
    -#> [1] 5.6
    -#> 
    -#> [[95]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[95]]$Petal.Length
    -#> [1] 4.2
    -#> 
    -#> [[95]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[95]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[96]]
    -#> [[96]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[96]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[96]]$Petal.Length
    -#> [1] 4.2
    -#> 
    -#> [[96]]$Petal.Width
    -#> [1] 1.2
    -#> 
    -#> [[96]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[97]]
    -#> [[97]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[97]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[97]]$Petal.Length
    -#> [1] 4.2
    -#> 
    -#> [[97]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[97]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[98]]
    -#> [[98]]$Sepal.Length
    -#> [1] 6.2
    -#> 
    -#> [[98]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[98]]$Petal.Length
    -#> [1] 4.3
    -#> 
    -#> [[98]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[98]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[99]]
    -#> [[99]]$Sepal.Length
    -#> [1] 5.1
    -#> 
    -#> [[99]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[99]]$Petal.Length
    -#> [1] 3
    -#> 
    -#> [[99]]$Petal.Width
    -#> [1] 1.1
    -#> 
    -#> [[99]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[100]]
    -#> [[100]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[100]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[100]]$Petal.Length
    -#> [1] 4.1
    -#> 
    -#> [[100]]$Petal.Width
    -#> [1] 1.3
    -#> 
    -#> [[100]]$Species
    -#> [1] versicolor
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[101]]
    -#> [[101]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[101]]$Sepal.Width
    -#> [1] 3.3
    -#> 
    -#> [[101]]$Petal.Length
    -#> [1] 6
    -#> 
    -#> [[101]]$Petal.Width
    -#> [1] 2.5
    -#> 
    -#> [[101]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[102]]
    -#> [[102]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[102]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[102]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[102]]$Petal.Width
    -#> [1] 1.9
    -#> 
    -#> [[102]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[103]]
    -#> [[103]]$Sepal.Length
    -#> [1] 7.1
    -#> 
    -#> [[103]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[103]]$Petal.Length
    -#> [1] 5.9
    -#> 
    -#> [[103]]$Petal.Width
    -#> [1] 2.1
    -#> 
    -#> [[103]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[104]]
    -#> [[104]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[104]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[104]]$Petal.Length
    -#> [1] 5.6
    -#> 
    -#> [[104]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[104]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[105]]
    -#> [[105]]$Sepal.Length
    -#> [1] 6.5
    -#> 
    -#> [[105]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[105]]$Petal.Length
    -#> [1] 5.8
    -#> 
    -#> [[105]]$Petal.Width
    -#> [1] 2.2
    -#> 
    -#> [[105]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[106]]
    -#> [[106]]$Sepal.Length
    -#> [1] 7.6
    -#> 
    -#> [[106]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[106]]$Petal.Length
    -#> [1] 6.6
    -#> 
    -#> [[106]]$Petal.Width
    -#> [1] 2.1
    -#> 
    -#> [[106]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[107]]
    -#> [[107]]$Sepal.Length
    -#> [1] 4.9
    -#> 
    -#> [[107]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[107]]$Petal.Length
    -#> [1] 4.5
    -#> 
    -#> [[107]]$Petal.Width
    -#> [1] 1.7
    -#> 
    -#> [[107]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[108]]
    -#> [[108]]$Sepal.Length
    -#> [1] 7.3
    -#> 
    -#> [[108]]$Sepal.Width
    -#> [1] 2.9
    -#> 
    -#> [[108]]$Petal.Length
    -#> [1] 6.3
    -#> 
    -#> [[108]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[108]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[109]]
    -#> [[109]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[109]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[109]]$Petal.Length
    -#> [1] 5.8
    -#> 
    -#> [[109]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[109]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[110]]
    -#> [[110]]$Sepal.Length
    -#> [1] 7.2
    -#> 
    -#> [[110]]$Sepal.Width
    -#> [1] 3.6
    -#> 
    -#> [[110]]$Petal.Length
    -#> [1] 6.1
    -#> 
    -#> [[110]]$Petal.Width
    -#> [1] 2.5
    -#> 
    -#> [[110]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[111]]
    -#> [[111]]$Sepal.Length
    -#> [1] 6.5
    -#> 
    -#> [[111]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[111]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[111]]$Petal.Width
    -#> [1] 2
    -#> 
    -#> [[111]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[112]]
    -#> [[112]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[112]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[112]]$Petal.Length
    -#> [1] 5.3
    -#> 
    -#> [[112]]$Petal.Width
    -#> [1] 1.9
    -#> 
    -#> [[112]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[113]]
    -#> [[113]]$Sepal.Length
    -#> [1] 6.8
    -#> 
    -#> [[113]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[113]]$Petal.Length
    -#> [1] 5.5
    -#> 
    -#> [[113]]$Petal.Width
    -#> [1] 2.1
    -#> 
    -#> [[113]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[114]]
    -#> [[114]]$Sepal.Length
    -#> [1] 5.7
    -#> 
    -#> [[114]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[114]]$Petal.Length
    -#> [1] 5
    -#> 
    -#> [[114]]$Petal.Width
    -#> [1] 2
    -#> 
    -#> [[114]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[115]]
    -#> [[115]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[115]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[115]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[115]]$Petal.Width
    -#> [1] 2.4
    -#> 
    -#> [[115]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[116]]
    -#> [[116]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[116]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[116]]$Petal.Length
    -#> [1] 5.3
    -#> 
    -#> [[116]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[116]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[117]]
    -#> [[117]]$Sepal.Length
    -#> [1] 6.5
    -#> 
    -#> [[117]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[117]]$Petal.Length
    -#> [1] 5.5
    -#> 
    -#> [[117]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[117]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[118]]
    -#> [[118]]$Sepal.Length
    -#> [1] 7.7
    -#> 
    -#> [[118]]$Sepal.Width
    -#> [1] 3.8
    -#> 
    -#> [[118]]$Petal.Length
    -#> [1] 6.7
    -#> 
    -#> [[118]]$Petal.Width
    -#> [1] 2.2
    -#> 
    -#> [[118]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[119]]
    -#> [[119]]$Sepal.Length
    -#> [1] 7.7
    -#> 
    -#> [[119]]$Sepal.Width
    -#> [1] 2.6
    -#> 
    -#> [[119]]$Petal.Length
    -#> [1] 6.9
    -#> 
    -#> [[119]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[119]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[120]]
    -#> [[120]]$Sepal.Length
    -#> [1] 6
    -#> 
    -#> [[120]]$Sepal.Width
    -#> [1] 2.2
    -#> 
    -#> [[120]]$Petal.Length
    -#> [1] 5
    -#> 
    -#> [[120]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[120]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[121]]
    -#> [[121]]$Sepal.Length
    -#> [1] 6.9
    -#> 
    -#> [[121]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[121]]$Petal.Length
    -#> [1] 5.7
    -#> 
    -#> [[121]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[121]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[122]]
    -#> [[122]]$Sepal.Length
    -#> [1] 5.6
    -#> 
    -#> [[122]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[122]]$Petal.Length
    -#> [1] 4.9
    -#> 
    -#> [[122]]$Petal.Width
    -#> [1] 2
    -#> 
    -#> [[122]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[123]]
    -#> [[123]]$Sepal.Length
    -#> [1] 7.7
    -#> 
    -#> [[123]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[123]]$Petal.Length
    -#> [1] 6.7
    -#> 
    -#> [[123]]$Petal.Width
    -#> [1] 2
    -#> 
    -#> [[123]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[124]]
    -#> [[124]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[124]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[124]]$Petal.Length
    -#> [1] 4.9
    -#> 
    -#> [[124]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[124]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[125]]
    -#> [[125]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[125]]$Sepal.Width
    -#> [1] 3.3
    -#> 
    -#> [[125]]$Petal.Length
    -#> [1] 5.7
    -#> 
    -#> [[125]]$Petal.Width
    -#> [1] 2.1
    -#> 
    -#> [[125]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[126]]
    -#> [[126]]$Sepal.Length
    -#> [1] 7.2
    -#> 
    -#> [[126]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[126]]$Petal.Length
    -#> [1] 6
    -#> 
    -#> [[126]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[126]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[127]]
    -#> [[127]]$Sepal.Length
    -#> [1] 6.2
    -#> 
    -#> [[127]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[127]]$Petal.Length
    -#> [1] 4.8
    -#> 
    -#> [[127]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[127]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[128]]
    -#> [[128]]$Sepal.Length
    -#> [1] 6.1
    -#> 
    -#> [[128]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[128]]$Petal.Length
    -#> [1] 4.9
    -#> 
    -#> [[128]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[128]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[129]]
    -#> [[129]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[129]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[129]]$Petal.Length
    -#> [1] 5.6
    -#> 
    -#> [[129]]$Petal.Width
    -#> [1] 2.1
    -#> 
    -#> [[129]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[130]]
    -#> [[130]]$Sepal.Length
    -#> [1] 7.2
    -#> 
    -#> [[130]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[130]]$Petal.Length
    -#> [1] 5.8
    -#> 
    -#> [[130]]$Petal.Width
    -#> [1] 1.6
    -#> 
    -#> [[130]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[131]]
    -#> [[131]]$Sepal.Length
    -#> [1] 7.4
    -#> 
    -#> [[131]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[131]]$Petal.Length
    -#> [1] 6.1
    -#> 
    -#> [[131]]$Petal.Width
    -#> [1] 1.9
    -#> 
    -#> [[131]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[132]]
    -#> [[132]]$Sepal.Length
    -#> [1] 7.9
    -#> 
    -#> [[132]]$Sepal.Width
    -#> [1] 3.8
    -#> 
    -#> [[132]]$Petal.Length
    -#> [1] 6.4
    -#> 
    -#> [[132]]$Petal.Width
    -#> [1] 2
    -#> 
    -#> [[132]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[133]]
    -#> [[133]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[133]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[133]]$Petal.Length
    -#> [1] 5.6
    -#> 
    -#> [[133]]$Petal.Width
    -#> [1] 2.2
    -#> 
    -#> [[133]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[134]]
    -#> [[134]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[134]]$Sepal.Width
    -#> [1] 2.8
    -#> 
    -#> [[134]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[134]]$Petal.Width
    -#> [1] 1.5
    -#> 
    -#> [[134]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[135]]
    -#> [[135]]$Sepal.Length
    -#> [1] 6.1
    -#> 
    -#> [[135]]$Sepal.Width
    -#> [1] 2.6
    -#> 
    -#> [[135]]$Petal.Length
    -#> [1] 5.6
    -#> 
    -#> [[135]]$Petal.Width
    -#> [1] 1.4
    -#> 
    -#> [[135]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[136]]
    -#> [[136]]$Sepal.Length
    -#> [1] 7.7
    -#> 
    -#> [[136]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[136]]$Petal.Length
    -#> [1] 6.1
    -#> 
    -#> [[136]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[136]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[137]]
    -#> [[137]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[137]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[137]]$Petal.Length
    -#> [1] 5.6
    -#> 
    -#> [[137]]$Petal.Width
    -#> [1] 2.4
    -#> 
    -#> [[137]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[138]]
    -#> [[138]]$Sepal.Length
    -#> [1] 6.4
    -#> 
    -#> [[138]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[138]]$Petal.Length
    -#> [1] 5.5
    -#> 
    -#> [[138]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[138]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[139]]
    -#> [[139]]$Sepal.Length
    -#> [1] 6
    -#> 
    -#> [[139]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[139]]$Petal.Length
    -#> [1] 4.8
    -#> 
    -#> [[139]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[139]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[140]]
    -#> [[140]]$Sepal.Length
    -#> [1] 6.9
    -#> 
    -#> [[140]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[140]]$Petal.Length
    -#> [1] 5.4
    -#> 
    -#> [[140]]$Petal.Width
    -#> [1] 2.1
    -#> 
    -#> [[140]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[141]]
    -#> [[141]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[141]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[141]]$Petal.Length
    -#> [1] 5.6
    -#> 
    -#> [[141]]$Petal.Width
    -#> [1] 2.4
    -#> 
    -#> [[141]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[142]]
    -#> [[142]]$Sepal.Length
    -#> [1] 6.9
    -#> 
    -#> [[142]]$Sepal.Width
    -#> [1] 3.1
    -#> 
    -#> [[142]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[142]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[142]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[143]]
    -#> [[143]]$Sepal.Length
    -#> [1] 5.8
    -#> 
    -#> [[143]]$Sepal.Width
    -#> [1] 2.7
    -#> 
    -#> [[143]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[143]]$Petal.Width
    -#> [1] 1.9
    -#> 
    -#> [[143]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[144]]
    -#> [[144]]$Sepal.Length
    -#> [1] 6.8
    -#> 
    -#> [[144]]$Sepal.Width
    -#> [1] 3.2
    -#> 
    -#> [[144]]$Petal.Length
    -#> [1] 5.9
    -#> 
    -#> [[144]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[144]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[145]]
    -#> [[145]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[145]]$Sepal.Width
    -#> [1] 3.3
    -#> 
    -#> [[145]]$Petal.Length
    -#> [1] 5.7
    -#> 
    -#> [[145]]$Petal.Width
    -#> [1] 2.5
    -#> 
    -#> [[145]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[146]]
    -#> [[146]]$Sepal.Length
    -#> [1] 6.7
    -#> 
    -#> [[146]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[146]]$Petal.Length
    -#> [1] 5.2
    -#> 
    -#> [[146]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[146]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[147]]
    -#> [[147]]$Sepal.Length
    -#> [1] 6.3
    -#> 
    -#> [[147]]$Sepal.Width
    -#> [1] 2.5
    -#> 
    -#> [[147]]$Petal.Length
    -#> [1] 5
    -#> 
    -#> [[147]]$Petal.Width
    -#> [1] 1.9
    -#> 
    -#> [[147]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[148]]
    -#> [[148]]$Sepal.Length
    -#> [1] 6.5
    -#> 
    -#> [[148]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[148]]$Petal.Length
    -#> [1] 5.2
    -#> 
    -#> [[148]]$Petal.Width
    -#> [1] 2
    -#> 
    -#> [[148]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[149]]
    -#> [[149]]$Sepal.Length
    -#> [1] 6.2
    -#> 
    -#> [[149]]$Sepal.Width
    -#> [1] 3.4
    -#> 
    -#> [[149]]$Petal.Length
    -#> [1] 5.4
    -#> 
    -#> [[149]]$Petal.Width
    -#> [1] 2.3
    -#> 
    -#> [[149]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -#> [[150]]
    -#> [[150]]$Sepal.Length
    -#> [1] 5.9
    -#> 
    -#> [[150]]$Sepal.Width
    -#> [1] 3
    -#> 
    -#> [[150]]$Petal.Length
    -#> [1] 5.1
    -#> 
    -#> [[150]]$Petal.Width
    -#> [1] 1.8
    -#> 
    -#> [[150]]$Species
    -#> [1] virginica
    -#> Levels: setosa versicolor virginica
    -#> 
    -#> 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_extract_list_element.html b/docs/reference/util_extract_list_element.html deleted file mode 100644 index e0bceb208..000000000 --- a/docs/reference/util_extract_list_element.html +++ /dev/null @@ -1,154 +0,0 @@ - -Extract a trait element from the definitions$traits$elements — util_extract_list_element • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Extract a trait element from the definitions$traits$elements

    -
    - -
    -
    util_extract_list_element(i, my_list, var)
    -
    - -
    -

    Arguments

    -
    i
    -

    a value within the definitions$traits$elements list which refers to types of traits

    - - -
    my_list
    -

    the list that contains the element we're interested in (i.e. definitions$traits$elements)

    - - -
    var
    -

    the type of variable of a trait

    - -
    -
    -

    Value

    - - -

    the element/properties of a trait

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -util_extract_list_element(1, definitions$traits$elements, "units")
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_get_SHA.html b/docs/reference/util_get_SHA.html deleted file mode 100644 index d88be3678..000000000 --- a/docs/reference/util_get_SHA.html +++ /dev/null @@ -1,144 +0,0 @@ - -Get SHA string from Github repository for latest commit — util_get_SHA • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Get SHA string for the latest commit on Github for the repository. SHA is the -abbreviated SHA-1 40 digit hexadecimal number which Github uses as the -Commit ID to track changes made to a repo

    -
    - -
    -
    util_get_SHA(path = ".")
    -
    - -
    -

    Arguments

    -
    path
    -

    root directory where a specified file is located, default file name -is the remake.yml file

    - -
    -
    -

    Value

    - - -

    40-digit SHA character string for the latest commit to the repository

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_get_version.html b/docs/reference/util_get_version.html deleted file mode 100644 index f6ab9fdfa..000000000 --- a/docs/reference/util_get_version.html +++ /dev/null @@ -1,139 +0,0 @@ - -Retrieve version for compilation from definitions — util_get_version • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Retrieve version for compilation from definitions

    -
    - -
    -
    util_get_version(path = "config/metadata.yml")
    -
    - -
    -

    Arguments

    -
    path
    -

    path to traits definitions

    - -
    -
    -

    Value

    - - -

    a string

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_kable_styling_html.html b/docs/reference/util_kable_styling_html.html deleted file mode 100644 index 161df71e0..000000000 --- a/docs/reference/util_kable_styling_html.html +++ /dev/null @@ -1,133 +0,0 @@ - -Format table with kable and default styling for html — util_kable_styling_html • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Format table with kable and default styling for html

    -
    - -
    -
    util_kable_styling_html(...)
    -
    - -
    -

    Arguments

    -
    ...
    -

    arguments passed to `kableExtra::kable()`

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_list_to_bib.html b/docs/reference/util_list_to_bib.html deleted file mode 100644 index c722674ef..000000000 --- a/docs/reference/util_list_to_bib.html +++ /dev/null @@ -1,139 +0,0 @@ - -Convert a list of elements into a BibEntry object — util_list_to_bib • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert a list of elements into a BibEntry object

    -
    - -
    -
    util_list_to_bib(ref)
    -
    - -
    -

    Arguments

    -
    ref
    -

    list of elements for a reference

    - -
    -
    -

    Value

    - - -

    BibEntry object

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_list_to_df1.html b/docs/reference/util_list_to_df1.html deleted file mode 100644 index 307122dfa..000000000 --- a/docs/reference/util_list_to_df1.html +++ /dev/null @@ -1,146 +0,0 @@ - -Convert a list with single entries to dataframe — util_list_to_df1 • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert a list with single entries to dataframe

    -
    - -
    -
    util_list_to_df1(my_list)
    -
    - -
    -

    Arguments

    -
    my_list
    -

    a list with single entries

    - -
    -
    -

    Value

    - - -

    a tibble with two columns

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -util_list_to_df1(as.list(iris)[2])
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_list_to_df2.html b/docs/reference/util_list_to_df2.html deleted file mode 100644 index 082f0901c..000000000 --- a/docs/reference/util_list_to_df2.html +++ /dev/null @@ -1,160 +0,0 @@ - -Convert a list of lists to dataframe — util_list_to_df2 • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Convert a list of lists to dataframe requires that every list have same named elements

    -
    - -
    -
    util_list_to_df2(my_list, as_character = TRUE, on_empty = NA)
    -
    - -
    -

    Arguments

    -
    my_list
    -

    a list of lists to dataframe

    - - -
    as_character
    -

    logical: indicating whether the values are read as character

    - - -
    on_empty
    -

    value to return if my_list is NULL, NA or is length == 0, default = NA

    - -
    - -
    -

    Examples

    -
    util_list_to_df2(util_df_to_list(iris))
    -#> # A tibble: 150 × 5
    -#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    -#>    <chr>        <chr>       <chr>        <chr>       <chr>  
    -#>  1 5.1          3.5         1.4          0.2         setosa 
    -#>  2 4.9          3           1.4          0.2         setosa 
    -#>  3 4.7          3.2         1.3          0.2         setosa 
    -#>  4 4.6          3.1         1.5          0.2         setosa 
    -#>  5 5            3.6         1.4          0.2         setosa 
    -#>  6 5.4          3.9         1.7          0.4         setosa 
    -#>  7 4.6          3.4         1.4          0.3         setosa 
    -#>  8 5            3.4         1.5          0.2         setosa 
    -#>  9 4.4          2.9         1.4          0.2         setosa 
    -#> 10 4.9          3.1         1.5          0.1         setosa 
    -#> # … with 140 more rows
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_replace_null.html b/docs/reference/util_replace_null.html deleted file mode 100644 index cf6de53f0..000000000 --- a/docs/reference/util_replace_null.html +++ /dev/null @@ -1,152 +0,0 @@ - -Convert NULL values to a different value — util_replace_null • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    util_replace_null converts NULL values in a vector to a different value. Default is -converting NuLL to NA

    -
    - -
    -
    util_replace_null(x, val = NA)
    -
    - -
    -

    Arguments

    -
    x
    -

    a vector containing null values

    - - -
    val
    -

    specify what the null value should be returned as, default is NA

    - -
    -
    -

    Value

    - - -

    a vector with null values replaced

    -
    - -
    -

    Examples

    -
    if (FALSE) {
    -util_replace_null(NULL)
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_separate_and_sort.html b/docs/reference/util_separate_and_sort.html deleted file mode 100644 index 60ffc644f..000000000 --- a/docs/reference/util_separate_and_sort.html +++ /dev/null @@ -1,150 +0,0 @@ - -Split and sort cells with multiple values — util_separate_and_sort • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    util_separate_and_sort: For a vector x in which individual cell may have - multiple values (separated by 'sep'), sort records within each cell alphabetically

    -
    - -
    -
    util_separate_and_sort(x, sep = " ")
    -
    - -
    -

    Arguments

    -
    x
    -

    an individual cell with multiple values

    - - -
    sep
    -

    a separator, a whitespace is the default

    - -
    -
    -

    Value

    - - -

    a vector of alphabetically sorted records

    -
    - -
    -

    Examples

    -
    if (FALSE) util_separate_and_sort("z y x")
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_standardise_doi.html b/docs/reference/util_standardise_doi.html deleted file mode 100644 index 8a2fceb64..000000000 --- a/docs/reference/util_standardise_doi.html +++ /dev/null @@ -1,133 +0,0 @@ - -Standarise doi into form https://doi.org/XXX — util_standardise_doi • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Standarise doi into form https://doi.org/XXX

    -
    - -
    -
    util_standardise_doi(doi)
    -
    - -
    -

    Arguments

    -
    doi
    -

    doi of reference to add

    - -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/util_strip_taxon_names.html b/docs/reference/util_strip_taxon_names.html deleted file mode 100644 index 1281f8a0b..000000000 --- a/docs/reference/util_strip_taxon_names.html +++ /dev/null @@ -1,147 +0,0 @@ - -Strip scientific names of formatting and abbreviations — util_strip_taxon_names • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Enables better fuzzy matching of scientific names by -reducing the number of characters that could differ

    -
    - -
    -
    util_strip_taxon_names(x)
    -
    - -
    -

    Arguments

    -
    x
    -

    vector of names to clean

    - -
    -
    -

    Value

    - - -

    vector of cleaned names

    -
    - -
    -

    Examples

    -
    c("Bankisa_serrata", "bankisa  serrata", "Banksia Seratta") %>% util_strip_taxon_names()
    -#> [1] "bankisa serrata" "bankisa serrata" "banksia seratta"
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/write_metadata.html b/docs/reference/write_metadata.html deleted file mode 100644 index f337043e3..000000000 --- a/docs/reference/write_metadata.html +++ /dev/null @@ -1,150 +0,0 @@ - -Write metadata.yml for a study — write_metadata • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    write metadata.yml file with custom R code formatted to allow line breaks

    -
    - -
    -
    write_metadata(data, path, style_code = FALSE)
    -
    - -
    -

    Arguments

    -
    data
    -

    austraits metadata object (a list)

    - - -
    path
    -

    location where the metadata file is to be written to

    - - -
    style_code
    -

    should the R code be styled?

    - -
    - -
    -

    Examples

    -
    if (FALSE) {
    -f <- "data/Falster_2003/metadata.yml"
    -data <- read_metadata(f)
    -write_metadata(data, f)
    -}
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/write_metadata_dataset.html b/docs/reference/write_metadata_dataset.html deleted file mode 100644 index d5f043ad9..000000000 --- a/docs/reference/write_metadata_dataset.html +++ /dev/null @@ -1,148 +0,0 @@ - -Write the YAML representation of metadata.yml for specified `dataset_id` to -file data/dataset_id/metadata.yml — write_metadata_dataset • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Write the YAML representation of metadata.yml for specified `dataset_id` to -file data/dataset_id/metadata.yml

    -
    - -
    -
    write_metadata_dataset(metadata, dataset_id)
    -
    - -
    -

    Arguments

    -
    metadata
    -

    metadata file

    - - -
    dataset_id
    -

    identifier for a particular study in the AusTraits database

    - -
    -
    -

    Value

    - - -

    a yml file

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/write_plaintext.html b/docs/reference/write_plaintext.html deleted file mode 100644 index 93b4b9bd8..000000000 --- a/docs/reference/write_plaintext.html +++ /dev/null @@ -1,144 +0,0 @@ - -Export AusTraits version as plain text — write_plaintext • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    Export AusTraits version as plain text

    -
    - -
    -
    write_plaintext(austraits, path)
    -
    - -
    -

    Arguments

    -
    austraits
    -

    AusTraits database object

    - - -
    path
    -

    pathway to save file

    - -
    -
    -

    Value

    - - -

    csv files of tibbles containing traits, locations, contexts, methods, excluded_data, -taxonomic updates, taxa, contributors

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/write_yaml.html b/docs/reference/write_yaml.html deleted file mode 100644 index aec5819fb..000000000 --- a/docs/reference/write_yaml.html +++ /dev/null @@ -1,124 +0,0 @@ - -write yaml (from package yaml) — write_yaml • austraits.build - - -
    -
    - - - -
    -
    - - -
    -

    write yaml (from package yaml)

    -
    - - - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/sitemap.xml b/docs/sitemap.xml deleted file mode 100644 index 820c2b8f4..000000000 --- a/docs/sitemap.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - http://traitecoevo.github.io/austraits.build/404.html - - - http://traitecoevo.github.io/austraits.build/CODE_OF_CONDUCT.html - - - http://traitecoevo.github.io/austraits.build/CONTRIBUTING.html - - - http://traitecoevo.github.io/austraits.build/ISSUE_TEMPLATE.html - - - http://traitecoevo.github.io/austraits.build/LICENSE-text.html - - - http://traitecoevo.github.io/austraits.build/articles/adding_data.html - - - http://traitecoevo.github.io/austraits.build/articles/austraits.build.html - - - http://traitecoevo.github.io/austraits.build/articles/austraits_database_structure.html - - - http://traitecoevo.github.io/austraits.build/articles/austraits_file_structure.html - - - http://traitecoevo.github.io/austraits.build/articles/austraits_overview.html - - - http://traitecoevo.github.io/austraits.build/articles/contributing_data.html - - - http://traitecoevo.github.io/austraits.build/articles/docker.html - - - http://traitecoevo.github.io/austraits.build/articles/index.html - - - http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html - - - http://traitecoevo.github.io/austraits.build/authors.html - - - http://traitecoevo.github.io/austraits.build/index.html - - - http://traitecoevo.github.io/austraits.build/news/index.html - - - http://traitecoevo.github.io/austraits.build/reference/bib_print.html - - - http://traitecoevo.github.io/austraits.build/reference/build_add_version.html - - - http://traitecoevo.github.io/austraits.build/reference/build_combine.html - - - http://traitecoevo.github.io/austraits.build/reference/build_find_taxon.html - - - http://traitecoevo.github.io/austraits.build/reference/build_setup_pipeline.html - - - http://traitecoevo.github.io/austraits.build/reference/build_update_taxonomy.html - - - http://traitecoevo.github.io/austraits.build/reference/create_tree_branch.html - - - http://traitecoevo.github.io/austraits.build/reference/dataset_configure.html - - - http://traitecoevo.github.io/austraits.build/reference/dataset_process.html - - - http://traitecoevo.github.io/austraits.build/reference/dataset_report.html - - - http://traitecoevo.github.io/austraits.build/reference/dataset_test.html - - - http://traitecoevo.github.io/austraits.build/reference/dataset_test_worker.html - - - http://traitecoevo.github.io/austraits.build/reference/get_schema.html - - - http://traitecoevo.github.io/austraits.build/reference/get_unit_conversions.html - - - http://traitecoevo.github.io/austraits.build/reference/index.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_contexts.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_locations.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_source_bibtex.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_source_doi.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_substitution.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_substitutions_list.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_substitutions_table.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_taxonomic_change.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_taxonomic_changes_list.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_add_traits.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_check_custom_R_code.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_create_template.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_exclude_observations.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_find_taxonomic_change.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_path_dataset_id.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_remove_taxonomic_change.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_update_taxonomic_change.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_user_select_column.html - - - http://traitecoevo.github.io/austraits.build/reference/metadata_user_select_names.html - - - http://traitecoevo.github.io/austraits.build/reference/notes_random_string.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_add_note.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_as_note.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_get_note.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_print_all.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_print_note.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_print_notes.html - - - http://traitecoevo.github.io/austraits.build/reference/notetaker_start.html - - - http://traitecoevo.github.io/austraits.build/reference/pipe.html - - - http://traitecoevo.github.io/austraits.build/reference/process_add_all_columns.html - - - http://traitecoevo.github.io/austraits.build/reference/process_convert_units.html - - - http://traitecoevo.github.io/austraits.build/reference/process_create_observation_id.html - - - http://traitecoevo.github.io/austraits.build/reference/process_custom_code.html - - - http://traitecoevo.github.io/austraits.build/reference/process_flag_excluded_observations.html - - - http://traitecoevo.github.io/austraits.build/reference/process_flag_unsupported_traits.html - - - http://traitecoevo.github.io/austraits.build/reference/process_flag_unsupported_values.html - - - http://traitecoevo.github.io/austraits.build/reference/process_format_contexts.html - - - http://traitecoevo.github.io/austraits.build/reference/process_format_contributors.html - - - http://traitecoevo.github.io/austraits.build/reference/process_format_locations.html - - - http://traitecoevo.github.io/austraits.build/reference/process_generate_id.html - - - http://traitecoevo.github.io/austraits.build/reference/process_parse_data.html - - - http://traitecoevo.github.io/austraits.build/reference/process_standardise_names.html - - - http://traitecoevo.github.io/austraits.build/reference/process_taxonomic_updates.html - - - http://traitecoevo.github.io/austraits.build/reference/process_unit_conversion_name.html - - - http://traitecoevo.github.io/austraits.build/reference/read_csv_char.html - - - http://traitecoevo.github.io/austraits.build/reference/read_metadata.html - - - http://traitecoevo.github.io/austraits.build/reference/read_metadata_dataset.html - - - http://traitecoevo.github.io/austraits.build/reference/read_yaml.html - - - http://traitecoevo.github.io/austraits.build/reference/util_append_to_list.html - - - http://traitecoevo.github.io/austraits.build/reference/util_bib_to_list.html - - - http://traitecoevo.github.io/austraits.build/reference/util_check_all_values_in.html - - - http://traitecoevo.github.io/austraits.build/reference/util_df_convert_character.html - - - http://traitecoevo.github.io/austraits.build/reference/util_df_to_list.html - - - http://traitecoevo.github.io/austraits.build/reference/util_extract_list_element.html - - - http://traitecoevo.github.io/austraits.build/reference/util_get_SHA.html - - - http://traitecoevo.github.io/austraits.build/reference/util_get_version.html - - - http://traitecoevo.github.io/austraits.build/reference/util_kable_styling_html.html - - - http://traitecoevo.github.io/austraits.build/reference/util_list_to_bib.html - - - http://traitecoevo.github.io/austraits.build/reference/util_list_to_df1.html - - - http://traitecoevo.github.io/austraits.build/reference/util_list_to_df2.html - - - http://traitecoevo.github.io/austraits.build/reference/util_replace_null.html - - - http://traitecoevo.github.io/austraits.build/reference/util_separate_and_sort.html - - - http://traitecoevo.github.io/austraits.build/reference/util_standardise_doi.html - - - http://traitecoevo.github.io/austraits.build/reference/util_strip_taxon_names.html - - - http://traitecoevo.github.io/austraits.build/reference/write_metadata.html - - - http://traitecoevo.github.io/austraits.build/reference/write_metadata_dataset.html - - - http://traitecoevo.github.io/austraits.build/reference/write_plaintext.html - - - http://traitecoevo.github.io/austraits.build/reference/write_yaml.html - - diff --git a/docs/articles/figures/Workflow.png b/inst/figures/Workflow.png similarity index 100% rename from docs/articles/figures/Workflow.png rename to inst/figures/Workflow.png diff --git a/docs/articles/figures/logo.png b/inst/figures/logo.png similarity index 100% rename from docs/articles/figures/logo.png rename to inst/figures/logo.png diff --git a/vignettes/.gitignore b/vignettes/.gitignore deleted file mode 100644 index 097b24163..000000000 --- a/vignettes/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.html -*.R diff --git a/vignettes/adding_data.Rmd b/vignettes/adding_data.Rmd deleted file mode 100644 index cae424d52..000000000 --- a/vignettes/adding_data.Rmd +++ /dev/null @@ -1,1395 +0,0 @@ ---- -title: Adding new datasets into AusTraits -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Adding new datasets into AusTraits} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - results = "asis", - echo = FALSE, - message = FALSE, - warning = FALSE -) - -library(traits.build) - -my_kable_styling <- util_kable_styling_html -``` - -```{r, echo=FALSE, results='hide', message=FALSE} -## Loads austraits into global name space -austraits <- austraits:::austraits_lite - -schema <- get_schema() -definitions <- austraits$definitions -``` - -This vignette explains the protocol for adding a new study to AusTraits. Before starting this, you should read more about - -- an [overview of AusTraits](http://traitecoevo.github.io/austraits.build/articles/austraits_overview.html), -- the instructions provided to [data contributors](http://traitecoevo.github.io/austraits.build/articles/contributing_data.html), -- the [structure of the compiled AusTraits database](http://traitecoevo.github.io/austraits.build/articles/austraits_database_structure.html), -- the [structure of the raw data files](http://traitecoevo.github.io/austraits.build/articles/austraits_file_structure.html), and -- [how to build AusTraits](http://traitecoevo.github.io/austraits.build/articles/austraits.build.html). - - -It is important that all steps are followed so that our automated workflow proceeds without problems. - -## An overview of the main steps - -1. Clone the `austraits.build` repository from github -2. Create a new branch in the repo, named for the new `dataset_id` in `author_year` format, e.g. `Gallagher_2014`. -3. Create a new folder within the folder `data` with the name `dataset_id`, e.g. `Gallagher_2014`. -4. Prepare the file `data.csv` and place it within the new folder ([details](#csv_file) here). -5. Prepare the file `metadata.yml` and place it within the new folder ([details](#metadata_file) here). -6. Add the new study into the build framework and rebuild AusTraits, by running `build_setup_pipeline()`. - -This step updates the file `remake.yml` with appropriate rules for the new dataset; similarly if you remove datasets, do the same. (At this stage, [remake](https://github.com/richfitz/remake) offers no looping constructs, so for now we generate the remake file using: [whisker](https://github.com/edwindj/whisker).) - -You can then rebuild AusTraits, including your dataset. - -7. Run tests and quality checks on the newly added dataset and correct the `data.csv` and `metadata.yml` files as necessary ([details](#quality_checks) here). -8. Generate and proofread a report on the data. In particular, check that numeric trait values fall within a logical range relative to other studies, and that individual trait observations are not unnecessarily excluded because their trait values are unsupported. -9. Return to step 6 if changes are made to the `data.csv` or `metadata.yml` files. -10. Push the GitHub branch. - -It may help to download one of the [existing datasets](https://github.com/traitecoevo/austraits.build/tree/master/data) to use as a template for your own files and a guide on required content. You should look at the files in the [config folder](https://github.com/traitecoevo/austraits.build/tree/master/config), particularly the `definitions` file for the list of traits we cover and the supported trait values for each trait. The GitHub repository also hosts a compiled [trait definitions table](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html). - - -The remainder of this vignette provides incredibly detailed instructions for steps 4-8 above. It is intended for anyone wishing to add datasets to either AusTraits itself or to use the austraits.build workflow to create a separate database. - -# Getting started - -The `traits.build` R package includes a selection of functions that help build the repository. To use these, you'll need to make them available. - -The easiest way to load the functions into your workspace is to run the following (from within the repository) - -```{r, echo=TRUE, eval=FALSE} -source("R/custom_R_code.R") # source functions written for use within custom_R_code -library(traits.build) # open the traits.build package that provides the pipeline to build AusTraits -``` - -# Inputting data - -## Add a new folder - -Add a new folder within the `data` folder. Its name should be the study's `dataset_id`, the core organising unit behind AusTraits. - -The preferred format for `dataset_id` is the surname of the first author of any corresponding publication, followed by the year, as `surname_year`. E.g. `Falster_2005`. Wherever there are multiple studies with the same id, we add a suffix `_2`, `_3` etc. E.g.`Falster_2005`, `Falster_2005_2`. - -## Constructing the `data.csv` file {#csv_file} - -All data for a study (`dataset_id`) must be merged into a single spreadsheet: `data.csv`. All accompanying metadata is read in through the `metadata.yml` file. Some information must be input explicitly through the `data.csv` or `metdata.yml` file, while other information can be entered via either file; this is explicitly indicated for each element. - -1. **Required columns:** Columns within the `data.csv` file must include `taxon name`, `location_name` (if there are multiple locations), `contexts` (if appropriate), and `collection_date` (if appropriate). The `data.csv` file can either be in a wide format (1 column for each trait, with `trait name` as the column header) or long format (a single column for all `trait values` and additional columns for `trait name` and `units`) - - a. For all field studies, ensure there is a column for `location_name`. If all measurements were made at a single location, a `location_name` column can easily be mutated using [custom_R_code](#custom_R) within the metadata.yml file. See sections [adding locations](#adding_locations) and [adding contexts](#adding_contexts) below for more information on compiling location and context data. - - b. If available, be sure to include a column with `collection date`. If possible, provide \dates in `yyyy-mm-dd` (e.g. 2020-03-05) format or, if the day of the month isn't known, as `yyyy-mm` (e.g. 2020-03). However, any format is allowed and the column can be parsed to the proper yyyy-mm-dd format using custom_R_code. If the same `collection date` applies to the entire study it can be added directly into the metadata.yml file. - - c. If applicable, ensure there are columns for an context properties, including experimental treatments, specific differences in method, a stratified sampling scheme within a plot, or sampling season. Additional context columns could be added through `custom_R_code` or keyed in where traits are added, but it is best to include a column in the data.csv file whenever possible. The protocol for adding context properties to the metadata file is under [adding contexts](#adding_contexts) - - -2. **Summarising data:** Data submitted by a contributor should be in the rawest form possible; always request data with individual measurements over location/species means. Some studies make replicate measurements on an individual at a single point in time. For these studies, individual means need to be calculated, as AusTraits does not include multiple measurements per individual. The raw values are preserved in the contributor's raw data files. Be sure to calculate the number of replicates that contributed to each mean value. - -When there is just a single row of values to summarise, use: - -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/raw_data.csv") %>% - mutate(leaf_area_replicates = 1) %>% - group_by(individual, `species name`, location, context, etc) %>% - summarise( - leaf_area_mean = mean(leaf_area), - leaf_area_replicates = sum(leaf_area_replicates) - ) %>% - ungroup() -``` -(Make sure you `group_by` all categorical variables you want to retain, for only columns that are grouping variables will be kept) - -When you want to take the mean of a series of continuous variables, use: - -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/raw_data.csv") %>% - mutate(replicates = 1) %>% - group_by(individual, `species name`, location, context, etc) %>% - summarise( - across( - c(leaf_area, `leaf N`), .fns = mean, - c(replicates), .fns = sum, - c(growth_form, `photosynthetic pathway`), .fns = first - ) - ) %>% - ungroup() -``` -- Categorical variables not included as grouping variables will return `NA` - -- This allows you to retain character variables, but can be tedious with many columns. Generally use the function `first` for categorical variables - it simply retains the trait value in the first column. In the rare case when rows in a particular grouping have different categorical values, more complex manipulations are required. - -- You can identify runs of columns by column number/position. For instance `c(5:25), .fns = mean` or `c(leaf_area:leaf_N), .fns = mean` - -3. **Merging multiple spreadsheets:** If multiple spreadsheets of data are submitted these must be merged together. - - a. If the spreadsheets include different trait measurements made on the same individual (or location means for the same species), they are best merged using `full_join`, specifying all conditions that need to be matched across spreadsheets (e.g. individual, species, location, context). Ensure the column names are identical between spreadsheets or specify columns that need to be matched. - -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/data_file_1.csv") -> data_1 -read_csv("data/dataset_id/raw/data_file_2.csv") -> data_2 -data_1 %>% full_join(data_2, by = c("Individual", "Taxon", "Location", "Context")) -``` - - b. If the spreadsheets include trait measurements for different individuals (or possibly data at different scales - such as individual level data for some traits and species means for other traits), they are best merged using `bind_rows`. Ensure the column names for taxon name, location name, context, individual, and collection date are identical between spreadsheets. If there are data for the same traits in both spreadsheets, make sure those column headers are identical as well. - -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/data_file_1.csv") -> data_1 -read_csv("data/dataset_id/raw/data_file_2.csv") -> data_2 -data_1 %>% bind_rows(data_2) -``` - -4. **Taxon names:** Taxon names need to be complete names. If the main data file includes code names, with a key as a separate file, they need to be merged: - -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/species_key.csv") -> species_key -read_csv("data/dataset_id/raw/data_file.csv") %>% - left_join(species_key, by = "code") -``` - -### Unexpected hangups -* When Excel saves an `.xls` file as a `.csv` file it only preserves the number of significant figures that are displayed on the screen. This means that if, for some reason, a column has been set to display a very low number of significant figures or a column is very narrow, data quality is lost. -* If you're reading a file into R where there are lots of blanks at the beginning of a column of numeric data, the defaults for `read_csv` fail to register the column as numeric. It is fixed by adding the argument `guess_max`: - -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/raw_data.csv", guess_max = 10000) -``` -This checks 10,000 rows of data before declaring the column is non-numeric. The value can be set even higher... - - -## Constructing the `metadata.yml` file {#metadata_file} - -One way to construct the `metadata.yml` file is to use one of the existing files and modify yours to follow the same format. As a start, check out some examples from [existing studies in AusTraits](https://github.com/traitecoevo/austraits.build/tree/master/data), e.g. [Angevin_2011](https://github.com/traitecoevo/austraits.build/tree/master/data/Angevin_2011/metadata.yml) or [Wright_2009](https://github.com/traitecoevo/austraits.build/tree/master/data/Wright_2009/metadata.yml). - -Note, when editing the `metadata.yml`, edits should be made in a proper text editor (Microsoft word tends to mess up the formatting). For example, Rstudio, textmate, sublime text, and Visual Studio Code are all good editors. - -To assist you in constructing the `metadata.yml` file, we have developed functions to help fill in the different sections of the file. You can then manually edit the file further to fill in missing details. - -First run the following to make the functions available - -```{r, eval=FALSE, echo=TRUE} -library(traits.build) -``` - -The functions for populating the metadata file all begin with `metadata_`. A list of the available functions is automatically generated within the `man/` folder within the `austraits.build` directory. - -### Creating a template - -Create a basic template for the `metadata.yml` file for your study. Note, it requires you to have already created a file `data.csv` in the folder `data/your_dataset_id`. - -Let's imagine you're entering a study called `Yang_2028` - -```{r, eval=FALSE, echo=TRUE} -current_study <- "Yang_2028" - -metadata_create_template(current_study) - -# or simply - -metadata_create_template("Yang_2028") -``` - -The function will ask a series of questions and then create a relatively empty file `data/your_dataset_id/metadata.yml`. The key questions are: - -* Is the data long vs wide? A wide dataset has each variable (i.e. trait ) as a column. A long dataset has a single row containing all trait values and additional columns specifying `units` and `trait_name`. - -* Select column for `taxon_name` -* Select column for `trait_name` (long datasets only) -* Select column for `trait values` (long datasets only) -* Select column for `location_name` -* Select column for `individual_id` (a column that links measurements on the same individual) -* Select column for `collection_date` - -If your `data.csv` file does not yet have a `location_name` column, this information can later be added manually. - -### Adding a source - -Three functions are available to help with entering citation details for the source data. - -The function `metadata_create_template` creates a template for the primary source with default fields for a journal article, which you can then edit manually. - -If you have a `doi` for your study, use the function: - -```{r, eval=FALSE, echo=TRUE} -metadata_add_source_doi(dataset_id = current_study, doi = "doi") -``` -and the different elements within the source will automatically be generated. Double check the information added to ensure: -1. The title is in `sentence case` -2. Overall, the information isn't in `all caps` (information from a few journals is read in like this) -3. Pages numbers are present and added as, for example, `123 -- 134` ; note the `--` between page numbers - -By default, details are added as the primary source. If multiple sources are linked to a single `dataset_id`, you can specify a source as `secondary`. Attempting to add a second primary source will overwrite the information already input. - -```{r, eval=FALSE, echo=TRUE} -metadata_add_source_doi(dataset_id, doi, type = "secondary") -``` - - * Secondary sources will be assigned the same dataset_id as the primary source. Manually edit the `key` in the metadata.yml file to be the appropriate `author_yyyy` code for the secondary reference. Sequential qualifiers can be used if necessary (e.g. `author_yyyy_2`) - * A "secondary" source might be either a second research output from the main dataset (truly a `secondary` source) or the original source of some data compiled for a metaanalysis (an `original` source). After adding a second source, you must manually change the source's header to beginning with either `secondary` or `original`, as is appropriate. - * If there are many sources to add (i.e. for datasets compiled for metaanalyses), after you add each reference, go to the `metadata.yml` file and manually change the source's header from `original` to `original_01` (and then `original_02`, etc.; or `secondary_01` ; `secondary_02`). See [Richards_2008](https://github.com/traitecoevo/austraits.build/blob/master/data/Richards_2008/metadata.yml) for an example of a complex source list. - -Alternatively, if you have reference details saved in a bibtex file called `myref.bib` you can use the function - -```{r, eval=FALSE, echo=TRUE} -metadata_add_source_doi(dataset_id, file = "myref.bib") -``` - -(These options require the packages [rcrossref](https://github.com/ropensci/rcrossref) and [RefManageR](https://github.com/ropensci/RefManageR/) to be installed.) - -For a book, the proper format is: -``` -source: - primary: - key: Cooper_2013 - bibtype: Book - year: 2013 - author: Wendy Cooper and William T. Cooper - title: Australian rainforest fruits - publisher: CSIRO Publishing - pages: 272 -``` - -For an online resource, the proper format is: - -``` -source: - primary: - key: TMAG_2009 - bibtype: Online - author: '{Tasmanian Herbarium}' - year: 2009 - title: Flora of Tasmania Online - publisher: Tasmanian Museum & Art Gallery (Hobart) - url: http://www.tmag.tas.gov.au/floratasmania -``` - -For a thesis, the proper format is: - -``` -source: - primary: - key: Kanowski_2000 - bibtype: Thesis - year: 1999 - author: John Kanowski - title: Ecological determinants of the distribution and abundance of the folivorous - marsupials endemic to the rainforests of the Atherton uplands, north Queensland. - type: PhD - institution: James Cook University, Townsville -``` - -For an unpublished dataset, the proper format is: -``` -source: - primary: - key: Ooi_2018 - bibtype: Unpublished - year: 2018 - author: Mark K. J. Ooi - title: "Unpublished data: Herbivory survey within Royal National Park, University - of New South Wales" -``` - -If you manually add information, note that if there is a colon (:) or apostrophe (') in a reference, the text for that line must be in quotes ("). - -### Adding contributors - -The skeletal `metadata.yml` file created by the function `metadata_create_template` includes a template for entering details about data contributors. Edit this manually, duplicating if details for multiple people are required. - -- Authorship is extended to anyone who played a key intellectual role in the experimental design and data collection. Most studies have 1-3 authors. For each author, please provide a **last_name**, **given_name**, **institutional affiliation**, **email address**, and their **ORCID** (if available). Nominate a single contributor to be the dataset's point of contact; this person's email will not be listed in the metadata file, but is the person future AusTraits users are likely to seek out if they have questions. -- Additional field assistants can be listed under `assistants:` -- The AusTraits data entry person is listed under `dataset_curators:` - -For example, in Roderick_2002 -``` -contributors: - data_collectors: - - last_name: Roderick - given_name: Michael - ORCID: 0000-0002-3630-7739 - affiliation: The Australian National University, Australia - additional_role: contact - assistants: Michelle Cochrane - dataset_curators: Elizabeth Wenk -``` - -### Custom R code {#custom_R} - -For many studies there are changes we want to make to a dataset before the data.csv file is read into AusTraits. These most often include applying a function to transform data, a function to filter data, or a function to replace a contributor's "measurement missing" placeholder symbol with `NA`. In each case it is appropriate to leave the rawer data in `data.csv`. - -#### Background - -In each case we want to make some custom modifications to a particular dataset before the common pipeline of operations gets applied. To make this possible, the workflow allows for some custom R code to be run as a first step in the processing pipeline. That pipeline (the function `process_custom_code` called within [`dataset_process`](https://github.com/traitecoevo/austraits.build/blob/master/R/process.R)) looks like this: - -```{r, eval=FALSE, echo=TRUE} -data <- - read_csv(filename_data_raw, col_types = cols(), guess_max = 1e5) %>% - process_custom_code(metadata[["dataset"]][["custom_R_code"]])() %>% - process_parse_data(dataset_id, metadata) -``` - -Note the second line. This is where the custom code gets applied, right after the file is loaded. - -#### Summary - -- source the file containing functions the AusTraits team have explicitly developed to use within the custom_R_code field: `source("R/custom_R_code.R")` -- assume a single object called `data`, and apply whatever fixes are needed -- use functions from the packages [dplyr](https://dplyr.tidyverse.org) or [tiydr](https://tidyr.tidyverse.org), like `mutate`, `rename`, etc, and otherwise avoid external packages -- alternatively, use the functions we've created explicitly for pre-processing data that were sourced through the file `custom.R`. In consultation with AusTraits team leaders you can add functions to this file. -- be fully self-contained (we're not going to use any of the other remake machinery here) -- use pipes to weave together a single statement, where possible. (Otherwise you'll need a semi colons `;` at the end of each statement). -- place a single apostrophe (') at the start and end of your custom R code; this allows you to add line breaks between pipes. - -#### Examples of appropriate use of custom R code - -1. Most sources from herbaria record `flowering_time` and `fruiting_time` as a span of months, while AusTraits codes these variables as a sequence of 12 N's and Y's for the 12 months. A series of functions make this conversion in custom_R_code. These include: - - - '`format_flowering_months`' (Create flowering times from start to end pair) - - '`convert_month_range_string_to_binary`' (Converts flowering and fruiting month ranges to 12 element character strings of binary data) - - '`convert_month_range_vec_to_binary`' (Convert vectors of month range to 12 element character strings of binary data) - - '`collapse_multirow_phenology_data_to_binary_vec`' (Converts multirow phenology data to a 12 digit binary string) - -2. Many datasets from herbaria record traits like `leaf_length`, `leaf_width`, `seed_length`, etc. as a range (e.g. `2-8`). The function `separate_range` separates this data into a pair of columns with `minimum` and `maximum` values, required to properly align units - -3. Duplicate values within a study need to be filtered out. - -If a species-level measurement has been entered for all within-location replicates, you need to filter out the duplicates. This is true for both numeric and categorical values. - -```{r, eval=FALSE, echo=TRUE} -data %>% - group_by(Species) %>% - mutate( - across(c(`leaf_percentN`, `plant growth form`), replace_duplicates_with_NA) - ) %>% - ungroup() -``` -Note: You would use `group_by(Species, Location)` if there are unique values at the species x location level. - -4. Values that were sourced from a different study need to be filtered out. See [Duplicates between studies](#duplicates_between_studies) below - functions to automate this process are in progress. - -5. Author has represented missing data values with a symbol, such as `0` : - -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(across(c(`height (cm)`, `leaf area (mm2)`), ~ na_if(., 0))) -``` - -6. If a subset of data in a column are also `values` for a second trait in AusTraits, some data values can be duplicated in a second temporary column. In the example below, some data in the contributor's `fruit_type` column **also** apply to the trait `fruit_fleshiness` in AusTraits: - -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(fruit_fleshiness = ifelse(`fruit type` == "pome", "fleshy", NA)) -``` - -7. If a subset of data in a column are *instead* `values` for a second trait in AusTraits, some data values can be moved to a second column (second trait), using the function '`move_values_to_new_trait`'. In the example below, some data in the contributor's `growth_form` column **only** apply to the trait `parasitic` in AusTraits. Note you need to create a blank variable to move the trait values to. - -```{r, eval=FALSE, echo=TRUE} -data %>% - mutate(new_trait = NA_character) %>% - move_values_to_new_trait( - original_trait= "growth form", - new_trait = "parasitic", - original_values = "parasitic", - values_for_new_trait = "parasitic", - values_to_keep = "NA") -``` - - or - -```{r, eval=FALSE, echo=TRUE} -data %>% - mutate(dispersal_appendage = NA.char) %>% - move_values_to_new_trait( - "fruits", "dispersal_appendage", - c("dry & winged", "enclosed in aril"), - c("wings", "aril"), - c("NA", "enclosed") - ) -``` -* Note, the parameter `values_to_keep` currently doesn't accept `NA` ; this bug is known and will be fixed. - -8. If the `data.csv` file includes raw data that you want to manipulate into a `trait`, or the contributor presents the data in a different formulation than AusTraits: - -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(root_mass_fraction = `root mass` / (`root mass` + `shoot mass`)) -``` - -9. You can do manipulations, such as adding a column with `locations` or manipulating `location names`. This is only recommended for studies with a single (or few) location, where manually adding the location data to the `metadata.yml` file is fast, since in precludes automatically propagating location data into metadata (see [Adding location details](#Adding location details)). As an example, see `Blackman_2010`: - -```{r, eval=FALSE, echo=TRUE} -data %>% - mutate( - location_name = ifelse(location_name == "Mt Field" & habitat == "Montane rainforest", "Mt Field_wet", location_name), - location_name = ifelse(location_name == "Mt Field" & habitat == "Dry sclerophyll", "Mt Field_dry", location_name) - ) -``` - -10. You can generate `observation_numbers` for sequential measurements on the same individual - -```{r, eval=FALSE, echo=TRUE} -data %>% - group_by(Tree) %>% - mutate(observation_number = row_number()) %>% - ungroup() -``` - -11. You can generate`measurement_remarks` from more cryptic notes - -```{r, eval=FALSE, echo=TRUE} -data %>% - mutate( - measurement_remarks = ifelse(material == "FRESH","fresh leaves (indicating amount of leaf moisture)", NA), - measurement_remarks = ifelse(material == "DRIED","dry leaves (indicating amount of leaf moisture)", measurement_remarks), - measurement_remarks = ifelse(material == "SENESCED","senesced leaves (indicating amount of leaf moisture)", measurement_remarks), - ) -``` - -12. You can reformat `collection_dates` supplied into the `yyyy-mm-dd` format, or add a date column - -Converting from any `mdy` format to `yyyy-mm-dd` (e.g. `Dec 3 2015` to `2015-12-03`) -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(Date = Date %>% mdy()) -``` - -Converting from any `dmy` format to `yyyy-mm-dd` (e.g. `3-12-2015` to `2015-12-03`) -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(Date = Date %>% dmy()) -``` - -Converting from a `mmm-yyyy` (string) format to `yyyy-mm` (e.g. `Dec 2015` to `2015-12`) -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(Date = parse_date_time(Date, orders = "my") %>% format.Date("%Y-%m")) -``` - -Converting from a `mdy` format to `yyyy-mm` (e.g. Excel has reinterpreted the data as full dates `12-01-2015` but the resolution should be "month" `2015-12`) -```{r, eval=FALSE, echo=TRUE} -data %>% mutate(Date = parse_date_time(Date, orders = "mdy") %>% format.Date("%Y-%m")) -``` - -A particularly complicated example where some dates are presented as `yyyy-mm` and others as `yyyy-mm-dd` -```{r, eval=FALSE, echo=TRUE} -data %>% - mutate( - weird_date = ifelse(str_detect(gathering_date, "^[0-9]{4}"), gathering_date, NA), - gathering_date = gathering_date %>% mdy(quiet = T) %>% as.character(), - gathering_date = coalesce(gathering_date, weird_date) - ) %>% - select(-weird_date) -``` - - -#### Testing your custom R code - -After you've added the custom R code to a file, check that it has completed the intended data frame manipulation: - -```{r, eval=FALSE, echo=TRUE} -metadata_check_custom_R_code("Blackman_2010") -``` - -You could alternatively read the data.csv file into R and run the code line by line. - -### Fill in metadata$dataset {#metadata_dataset} - -The `dataset` section is a mix of fields that are filled in automatically during `metadata_create_template()` and fields that need to be manually filled in. - -- **individual_id** Individual_id is one of the fields that can be read in during `metadata_create_template`. However, you may instead mutate your own `individual_id` using `custom_R_code` and add it in manually. For a wide dataset individual_id is required anytime there are multiple rows of data for the same individual and you want to keep these linked. This field should only be included if it is required. - -**WARNING** If you have an entry `individual_id: unknown` this assigns all rows of data to an individual named "unknown" and the entire dataset will be assumed to be from a single individual. This is why it is essential to omit this field if there isn't an actual row of data being read in. - -- **collection_date** If this is not read in as a specified column, it needs to be filled in manually as `start date/end date` in yyyy-mm-dd, yyyy-mm, or yyyy format, depending on the relevant resolution. If the collection dates are unknown, write `unknown/publication year` - -- **description:** 1-2 sentence description of the study's goals. The abstract of a manuscript usually includes some good sentences/phrases to borrow. - -- **basis_of_record:** Allowable values include: field, field_experiment, captive_cultivated, lab, preserved_specimen, and literature. See the top of `system.file("support", "traits.build_schema.yml", package = "traits.build"` or [database structure vignette](http://traitecoevo.github.io/traits.build/articles/austraits_database_structure.html) for definitions of these accepted basis_of_record values. This field can also be read in from a column or can be specified at the location or trait level, as described below. Entries under `metadata$locations` or `metadata$traits` (which apply to only that specific location or trait) override the global value entered under `metadata$dataset`. - -- **life_stage:** Allowable values include: adult, sapling, seedling, juvenile. This field can also be read in from a column or can be specified at the location or trait level, as described below. Entries under `metadata$locations` or `metadata$traits` (which apply to only that specific location or trait) override the global value entered under `metadata$dataset`. - -- **sampling_strategy:** Often a quite long description of the sampling strategy, extracted verbatim from a manuscript. - -- **original_file:** The name of the file initially submitted to AusTraits and archived in a Google Drive folder and usually in the dataset folder, in a subfolder named `raw`. - -- **notes:** Notes about the study and processing of data, especially if there were complications or if some data is suspected duplicates with another study and were filtered out. - -There are also fields that will only be used for a subset of datasets: - -- **measurement_remarks**: Measurement remarks is a field to capture a miscellaneous notes column. This should be information that is not captured by "methods" (which is fixed to a single value for a trait). It can be read in for the whole dataset, or entered under [dataset$traits](#add_traits) if the remarks only apply to specific traits. - -- **entity_type**, **value_type**, **replicates**, and **basis_of_value** are standardly added to each trait, but a fixed value or column could be read in under `metadata$dataset` - - -### Add traits {#add_traits} - -Begin by automatically adding all traits to your skeletal `metadata.yml` file: -```{r, eval=FALSE, echo=TRUE} -metadata_add_traits(current_study) -``` -You will be asked to indicate the columns you wish to keep as distinct traits. Include all columns with trait data. - -This automatically propagates each trait selected into `metadata.yml` as follows where `var_in` is the name of a column in the `data.csv` file (for wide datasets) or a unique trait name values in the `trait_name` column (for a long dataset): - - - var_in: leaf area (mm2) - unit_in: .na - trait_name: .na - entity_type: .na - value_type: .na - basis_of_value: .na - replicates: .na - methods: .na - -The trait details then need to be filled in manually. - -- **units**: fill in the units specified by the author - such as mm2. If you're uncertain about the syntax/format used for some more complex units, look through the traits definition file (`config/traits.yml`) or the file showing unit conversions (`config/unit_conversions.csv`). For categorical variables, leave this as `.na`. - -- **trait_name**: This is the appropriate trait name from `config/traits.yml`. If no appropriate trait exists in AusTraits, a new trait can often be added - just ensure it is a `trait` where data will be comparable across studies and has been measured for a fair number (~>50) species. For currently unsupported traits, we leave this as `.na` but then fill in the rest of the data and flag this study as having a potential new trait. Then in the future, when this trait is added to the `traits.yml` file, the data can be read into AusTraits by simply replacing the `.na` with a trait name. - -- **entity_type**: Entity types indicate the taxonomic/ecological hierarchical level corresponding to the trait value. Entity types can be individual, population, species, genus, family or order. Metapopulation-level measurements are coded as `population` and infraspecific taxon-level measurements are coded as `species`. See the top of `system.file("support", "traits.build_schema.yml", package = "traits.build")` for definitions of these accepted entity types. *Note: entity_type is about the hierarchical level to which the trait measurement refers; this is separate from the taxonomic resolution of the entity's name.* - -- **value_type**: Allowable value types are mean, minimum, maximum, mode, range, raw, and bin. See the top of `system.file("support", "traits.build_schema.yml", package = "traits.build")` for definitions of these accepted value types. All categorical traits are generally scored as being a `mode`, the most commonly observed value. Note that for values that are `bins`, the two numbers are separated by a double-hyphen, `1 -- 10`. - -- **basis_of_value**: Basis of value indicates how a value was determined. Allowable terms are measurement, expert_score, model_derived, and literature. See the top of `system.file("support", "traits.build_schema.yml", package = "traits.build")` for definitions of these accepted value types, but in general most categorical traits are values that have been scored by an expert (expert_score) and more numeric trait values are measurements. - -- **replicates**: Fill in with the appropriate value. For categorical variables, leave this as `.na`. If there is a column that specifies replicate number, you can list the column name in the field. - -- **methods**: This information can usually be copied verbatim from a manuscript. -In general, methods sections extracted from pdfs include "special characters" (non-UTF-8 characters). Non-English alphabet characters are recognised (e.g. é, ö) and should remain unchanged. Other characters will be re-formatted during the study input process, so double check that degree symbols (º), en-dashes (–), em-dashes (—), and curly quotes (‘,’,“,”) have been maintained or reformatted with a suitable alternative. Greek letters and some other characters are replaced with their Unicode equivalent (e.g. replaces Psi (Ψ)); for these it is best to replace the symbol with an interpretable English-character equivalent. - - - Note with methods, if the identical methods apply to a string of traits, for the first trait use the following syntax, where the `&leaf_length_method` notation assigns the remaining text in the field as the `leaf_length_method`. - ``` - methods: &leaf_length_method All measurements were from dry herbarium collections, with leaf and bracteole measurements taken from the largest of these structures on each specimen. - ``` - Then for the next trait that uses this method you can just include. At the end of processing you can read/write the yml file and this will fill in the assigned text throughout. - ``` - methods: *leaf_length_method - ``` - -In addition to the automatically propagated fields, there are a number of optional fields you can add if appropriate. - -- **life_stage** If all measurements in a dataset were made on plants of the same `life stage` a global value should be entered under [metadata$dataset](#metadata_dataset). However if different traits were measured at different life stages or different rows of data represent measurements at different life stages you can specify a unique life stage for each trait or indicate a column where this information is stored. - -- **basis_of_record** If all measurements in a dataset represent the same `basis_of_record` a global value should be entered under [metadata$dataset](#metadata_dataset). However if different traits have different basis_of_record values or different rows of data represent different basis_of_record values you can specify a unique basis_of_record value for each trait or indicate a column where this information is stored. - -- **measurement_remarks**: Measurement remarks is a field to indicate miscellaneous comments. If these comments only apply to specific trait(s), this field should be specified with those trait's metadata sections. This meant to be information that is not captured by "methods" (which is fixed to a single value for a trait). - -- **method_context** If different columns in a wide data.csv file indicate measurements on the same trait using different methods, this needs to be designated. At the bottom of the trait's metadata, add a `method_context_name` field (e.g. `method_context` words well). Write a word or short phrase that indicates which method context applies to that trait (data column). For instance, one trait might have `method_context: fully expanded leaves` and a second entry with the same trait name and method might have `method_context: leaves still expanding`. The method context details must also be added to the [contexts](#adding_contexts) section. - -- **temporal_context** If different columns in a wide data.csv file indicate measurements on the same trait, on the same individuals at different points in time, this needs to be designated. At the bottom of the trait's metadata, add a `temporal_context_name` field (e.g. `temporal_context` words well). Write a word or short phrase that indicates which temporal context applies to that trait (data column). For instance, one trait might have `temporal_context: dry season` and a second entry with the same trait name and method might have `temporal_context: after rain`. The temporal context details must also be added to the [contexts](#adding_contexts) section. - -### Adding location details {#adding_locations} - -Location data includes location names, latitude/longitude coordinates, verbal location descriptions, and any additional abiotic/biotic location variables provided by the contributor (or in the accompanying manuscript). For studies with more than a few locations, it is most efficient to create a table of this data that is automatically read into the `metadata.yml` file. - -1. Location names must be identical (including syntax, case) to those in `data.csv` - -2. Column headers for latitude and longitude data must read `latitude (deg)` and `longitude (deg)` - -3. Latitude and longitude must be in decimal degrees (i.e. -46.5832). There are many online converters to convert from `degrees,minutes,seconds` format or `UTM`. Or use the following formula: - `decimal_degrees = degrees + (minutes/60) + (seconds/3600)` - -4. If there is a column with a general vegetation description (i.e. `rainforest`, `coastal heath` it should be titled `description`) - -5. Although location properties are not restricted to a controlled vocabulary, newly added studies should use the same location property syntax as others whenever possible, to allow future discoverability. To generate a list of already used under `location_property`, use: - -``` -austraits$locations %>% distinct(location_property) -``` - -A few contributors provide a standalone file of all location data. Otherwise, the following sequence works well: - -1. Identify all location names in the data.csv file. The following code extracts a list of location names and any other columns in the data file that include location-specific information: -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/data.csv") %>% - distinct(location, .keep_all = TRUE) %>% # the argument `.keep_all` ensures columns aren't dropped - select(location, rainfall, lat, lon) %>% # list of relevant columns to keep - rename(`latitude (deg)` = lat, `longitude (deg)` = long) # rename columns to how you want them to appear in the metadata file. Faster to do it once here than repeatedly in the metadata file - write_csv("data/dataset_id/raw/location_data.csv") -``` - -2. Open the spreadsheet in Excel (or any editor of your choice) and manually add any additional data from the manuscript. Save as a .csv file. - -3. Open in R -```{r, eval=FALSE, echo=TRUE} -read_csv("data/dataset_id/raw/location_data.csv") -> location_data -``` - -As an example of what the location table should look like: -```{r, eval = FALSE, echo=FALSE, results="markup"} -# data_Falster_2005 <- -# remake::make("Falster_2005_1") -austraits$locations %>% - filter(dataset_id == "Falster_2005_1") %>% - select(-dataset_id, -location_id) %>% - pivot_wider(names_from = location_property, values_from = value) %>% - type_convert() -``` - -4. This location data can then be read into `metadata.yml`: -```{r, eval=FALSE, echo=TRUE} -metadata_add_locations(current_study, site_data) -``` -You are first prompted to identify the column with the location name and then to list all columns that contain location data. This automatically fills in the location component on the metadata file. - -It is possible that you will want to specify `life_stage` or `basis_of_record` at the location_level. You can later manually add these fields to some or all locations. - -(During processing location_id's are automatically generated and paired with each location_name.) - -### Context details {#adding_contexts} - -The dictionary definition of a context is *the situation within which something exists or happens, and that can help explain it*. This is exactly what `context_properties` are in AusTraits, ancillary information that is important to explaining and understanding a trait value. - -AusTraits recognises 5 categories of contexts: -- **treatment** contexts are experimental treatments applied to individuals, such as soil nutrient manipulations, growing temperatures, or CO2 enchancement. -- **plot** contexts are either blocks/plots within an experimental design or a variable that has been measured *within* a location and measurements have been stratified across this variable. Topographic position within a location is an example of this. -- **temporal** contexts relate to repeat measurements on the same entity (individual, population, or species) across time. They may simply be number observations or might be explicitly linked to growing season or time of day. -- **method** contexts indicate that the same trait has been measured on the same entity (individual, population or species) using multiple methods. These might be samples from different canopy light environments, different leaf ages, or sapwood samples from different branch diameters. -- **entity_contexts** capture ancillary information about the entity (individual, population or species) that helps explain the measured trait values. This might be the entity's sex, caste (for social insects), or host plant (for insects). - -Context properties are not restricted to a controlled vocabulary. However, newly added studies should use the same context property syntax as others whenever possible, to allow future discoverability. To generate a list of terms already used under `context_property`, use: - -``` -austraits$contexts %>% distinct(context_property) -``` - -The AusTraits workflow can handle as many context properties as is required. These are most easily read with the dedicated function - -``` -metadata_add_contexts(dataset_id) -``` - -The function first displays a list of all data columns (from the data.csv file) and prompts you to select those that are context properties. For each column you are asked to indicate its `category` (those described above). You are shown a list of unique values present in the data column and asked if these require any substitutions. This function adds the following information to the section `metadata$contexts` (example from `Crous_2013`) - -``` -- context_property: unknown - category: temporal_context - var_in: month - values: - - find: AUG - value: unknown - description: unknown - - find: DEC - value: unknown - description: unknown - - find: FEB - value: unknown - description: unknown -- context_property: unknown - category: treatment_context - var_in: Temp-trt - values: - - value: ambient - description: unknown - - value: elevated - description: unknown -- context_property: unknown - category: treatment_context - var_in: CO2_Treat - values: - - find: ambient CO2 - value: unknown - description: unknown - - find: added CO2 - value: unknown - description: unknown -``` - -You must then manually fill in the fields designated as `unknown`. You are permitted to omit the `description` field if the context_property value itself provides sufficient description. - -If there are additional context properties that were designated in the traits section, these will have to be added manually, as this information is not captured in a column. A final output might be: - -``` -- context_property: sampling season - category: temporal_context - var_in: month - values: - - find: AUG - value: August - description: August (late winter) - - find: DEC - value: December - description: December (early summer) - - find: FEB - value: February - description: February (late summer) -- context_property: temperature treatment - category: treatment_context - var_in: Temp-trt - values: - - value: ambient - description: Plants grown at ambient temperatures; Jan average max = 29.4 dec - C / July average min = 3.2 dec C. - - value: elevated - description: Plants grown 3 deg C above ambient temperatures. -- context_property: CO2 treatment - category: treatment_context - var_in: CO2_Treat - values: - - find: ambient CO2 - value: 400 ppm - description: Plants grown at ambient CO2 (400 ppm). - - find: added CO2 - value: 640 ppm - description: Plants grown at elevated CO2 (640 ppm); 240 ppm above ambient. -- context_property: measurement temperature - category: method_context_context - var_in: method_context #this field would be included in the relevant traits - values: - - value: 20°C # this value would be keyed in through the relevant traits - description: Measurement made at 20°C - - value: 25°C - description: Measurement made at 25°C -``` - -### Using substitutions - -It is very unlikely that a contributor will use categorical trait values that are entirely identical to those in the `traits.yml` file. You need to add substitutions for those that do not exactly align to match the wording and syntax supported by AusTraits. Combinations of multiple trait values are allowed - simply list them, space delimited (e.g. `shrub tree` for a species whose growth form includes both) - -Single substitutions can be added by running: -```{r, eval=FALSE, echo=TRUE} -metadata_add_substitution(current_study, "trait_name", "find", "replace") -``` - -where `trait_name` is the AusTraits defined trait name, `find` is the trait value used in the data.csv file and `replace` is the trait value supported by AusTraits. - -If you have many substitutions to add, the following may be more efficient: - -- Add a single substitution via the function and then copy and paste the lines many times in the metadata.yml file, changing the relevant fields - -- Create a spreadsheet with a list of all `trait_name` by `trait_value` combinations requiring substitutions. The spreadsheet would have four columns with headers `dataset_id`, `trait_name`, `find` and `replace`. This table can be read directly into the `metadata.yml` file using the function `metadata_add_substitutions_table`. This is described below under [Adding many substitutions](#adding_many_substitutions). - -#### Excluded data - -This section of the `metadata.yml` file provides the capacity to explicitly exclude specific trait values or taxon names. These are values that are in the `data.csv` file but should be excluded from AusTraits. - -It includes three elements: -- **variable**: A variable from the traits table, typically `taxon_name`, `location_name` or `context_name` -- **find**: Value of variable to remove -- **reason**: Records why the data was removed, e.g. `exotic` - -Multiple, comma-delimited values can be added under `find`. - -For example, in Munroe_2019: -```{r, eval=FALSE, echo=TRUE} -exclude_observations: -- variable: taxon_name - find: Campylopus introflexus, Dicranoloma menziesii, Philonotis tenuis, Polytrichastrum - alpinum, Polytrichum juniperinum, Sphagnum cristatum - reason: moss (E Wenk, 2020.06.18) -- variable: taxon_name - find: Xanthoparmelia semiviridis - reason: lichen (E Wenk, 2020.06.18) -``` - -#### Questions - -The final section of the `metadata.yml` file is titled `questions`. This is a location to: - -1. Ask the data contributor targeted questions about their study. When you generate a report (described below) these questions will appear at the top of the report. - - Preface the first question you have with `contributor:` (indented once), and additional questions with `question2:`, etc. - - Ask contributors about missing metadata - - Point contributors attention to odd data distributions, to make sure they look at those traits extra carefully. - - Let contributors know if you're uncertain about their units or if you transformed the data in a fairly major way. - - Ask the contributors if you're uncertain you aligned their trait names correctly. - - -2. This is a place to list any trait data that are not yet `traits` supported by AusTraits. Use the following syntax, indented once: `additional_traits: `, followed by a list of traits. - -#### Hooray! You now have a fully propagated metadata.yml file! - -Next is making sure it has captured all the data exactly as you've intended. - -# Quality checks {#quality_checks} - -Before starting the quality checks, it is helpful to assign a variable, `current_study`: -```{r, eval=FALSE, echo=TRUE} -current_study <- "Wright_2001" -``` -This lets you have a list of tests you run for each study and you just have to reassign a new `dataset_id` to `current_study`. - -It is best to run tests and fix formatting first. - -## Clear formatting - -The `clear formatting` code below reads and re-writes the yaml file. This is the same process that is repeated when running functions that automatically add substitutions or check taxonomy. Running it first ensures that any formatting issues introduced (or fixed) during the read/write process are identified and solved first. - -For instance, the `write_metadata` function inserts line breaks every 80 characters and reworks other line breaks (except in custom_R_code). It also reformats special characters in the text, substituting in its accepted format for degree symbols, en-dashes, em-dashes and quotes, and substituting in Unicode codes for more obscure symbols. - -```{r, eval=FALSE, echo=TRUE} -f <- file.path("data", current_study, "metadata.yml") -read_metadata(f) %>% write_metadata(f) -``` - -## Running tests {#running_tests} - -Begin by running some automated tests to ensure the dataset meets the required set up. The tests run through a collection of pre-specified checks on the files for each study. The output alerts you to possible issues needing to be fixed, by comparing the data in the files with the expected structure and allowed values, as specified in the schema and definitions. - -Certain special characters may show up as errors and need to be manually adjusted in the `metadata.yml` file - -The tests also identify mismatches between the location names in the data.csv file vs. metadata.yml file (same for context), unsupported trait names, etc. - -To run the tests, the variable `dataset_ids` must be defined in the global namespace, containing a vector of ids to check. For example: - -```{r, eval=FALSE, echo=TRUE} -# load relevant functions -library(traits.build) - -# Tests run test on one study -dataset_ids <- "Bragg_2002" -dataset_test(dataset_ids) - -# Tests run test on all studies -dataset_ids <- dir("data") -dataset_test(dataset_ids) -``` -Fix as many errors as you can and then rerun `dataset_test()` repeatedly until no errors remain. - -See below for suggestions on how to implement large numbers of [trait value substitutions](#adding_many_substitutions). - -## Rebuild AusTraits - -Now incorporate the new study into AusTraits: -```{r, eval=FALSE, echo=TRUE} -build_setup_pipeline() -austraits <- remake::make("austraits") -``` - -## Check excluded data -AusTraits automatically excludes data for a number of reasons. These are available in the frame `excluded_data`. - -When you are finished running quality checks, no data should be excluded due to *Missing unit conversion* and *Unsupported trait*. - -A few values may be legitimately excluded due to other errors, but check each entry. - -The best way to view excluded data for a study is: -```{r, eval=FALSE, echo=TRUE} -austraits$excluded_data %>% - filter( - dataset_id == current_study, - error != "Observation excluded in metadata" - ) %>% - View() -``` - -Missing values (blank cells, cells with NA) are not included in the `excluded_data` table, because they are assumed to be legitimate blanks. If you want to confirm this, you need to temporarily change the default arguments for the internal function `dataset_process` where it is called within the `remake.yml` file. For instance, the default, -```{r, eval=FALSE, echo=TRUE} - dataset_process("data/Ahrens_2019/data.csv", - Ahrens_2019_config, - schema - ) -``` - -needs to be changed to: - -```{r, eval=FALSE, echo=TRUE} - dataset_process("data/Ahrens_2019/data.csv", - Ahrens_2019_config, - schema, - filter_missing_values = FALSE - ) -``` - -### Reasons for data to be excluded - -Possible reasons for excluding a trait value includes: - -- **Missing species name**: Species name is missing from data.csv file for a given row of data. This usually occurs when there are stray characters in the data.csv file below the data – delete these rows. - -- **Missing unit conversion**: Value was present but appropriate unit conversion was missing. This requires that you add a new unit conversion to the file `config/unit_conversions.csv`. Add additional conversions near similar unit conversions already in the file for easier searching in the future. - -- **Observation excluded in metadata**: Specific values, usually certain taxon names can be excluded in the metadata. This is generally used when a study includes a number of non-native and non-naturalised species that need to be excluded. These should be intentional exclusions, as they have been added by you. - -- **Time contains non-number**: Indicates a problem with the value entered into the traits `flowering_time` and `fruiting_time`. (*Note to AusTraits custodians: This error should no longer appear - will retain for now as a placeholder.*) - -- **Unsupported trait**: `trait_name` not listed in `config/traits.yml`, under `traits`. Double check you have used the correct spelling/exact syntax for the `trait_name`, adding a new `trait` to the `traits.yml` file if appropriate. If there is a trait that is currently unsupported by AusTraits, leave `trait_name: .na`. Do not fill in an arbitrary name. - -- **Unsupported trait value**: This error, referencing categorical traits, means that the `value` for a trait is not included in the list of supported trait values for that trait in `config/traits.yml`. See [adding many substitutions](#adding_many_substitutions) if there are many trait values requiring substitutions. If appropriate, add another trait value to the `traits.yml` file, but confer with other curators, as the lists of trait values have been carefully agreed upon through workshop sessions. - -- **Value does not convert to numeric**: Is there a strange character in the file preventing easy conversion? This error is rare and generally justified. - -- **Value out of allowable range**: This error, referencing numeric traits, means that the trait value, after unit conversions, falls outside of the allowable range specified for that trait in `config/traits.yml`. Sometimes the AusTraits range is too narrow and other times the author’s value is truly an outlier that should be excluded. Look closely at these and adjust the range in `config/traits.yml` if justified. Generally, don’t change the range until you’ve create a report for the study and confirmed that the general cloud of data aligns with other studies as excepted. Most frequently the units or unit conversion is what is incorrect. - -You can also ask how many of each error type are present for a study: -```{r, echo=TRUE, results="show"} -austraits$excluded_data %>% - filter(dataset_id == "Cheal_2017") %>% - pull(error) %>% - table() -``` - -Or produce a table of error type by trait: -```{r, echo=TRUE, results="show"} -austraits$excluded_data %>% - filter( - dataset_id == "Cheal_2017", - ) %>% - select(trait_name, error) %>% - table() -``` -Note, most studies have no excluded data. This study is an extreme example! - -## Adding many substitutions {#adding_many_substitutions} - -For categorical traits, if you want to create a list of all values that require substitutions: -```{r, eval=FALSE, echo=TRUE} -austraits$excluded_data %>% - filter( - dataset_id == current_study, - error == "Unsupported trait value" - ) %>% - distinct(dataset_id, trait_name, value) %>% - rename(find = value) %>% - select(-dataset_id) %>% - write_csv("data/dataset_id/raw/substitutions_required.csv") -``` -For studies with a small number of substitutions, add them individually using: -```{r, eval=FALSE, echo=TRUE} -metadata_add_substitution(dataset_id, trait_name, find, replace) -``` -For studies with large number of substitutions required, you can add an additional column to this table, `replace`, and fill in all the correct trait values. Then read the list of substitutions directly into the metadata file: -```{r, eval=FALSE, echo=TRUE} -substitutions_to_add <- - read_csv("data/dataset_id/raw/substitutions_required_after_editing.csv") - -metadata_add_substitutions_list(dataset_id, substitutions_to_add) -``` -## Add taxonomic updates - -The function `add_taxonomic_updates` allows you to manually align submitted taxon names (the `original_name`) with the taxon names in the taxonomic resource. - -```{r, eval=FALSE, echo=TRUE} - metadata_add_taxonomic_change <- function(dataset_id, find, replace, reason, taxonomic_resolution) -``` -- **find** is the name in the taxon name column in the dataset -- **replace** is the equivalent taxon name in the taxonomic resource -- **reason** provides information about why the taxonomic update is required -- **taxonomic_resolution** indicates the most specific taxon rank that the name in `replace` aligns to - -As examples: - -A simple fix correcting a minor typo to align with an accepted taxon name: - -```{r, eval=FALSE, echo=TRUE} -taxonomic_updates: -- find: Drummondita rubroviridis - replace: Drummondita rubriviridis - reason: match_07_fuzzy. Fuzzy alignment with accepted canonical name in APC (2022-11-21) - taxonomic_resolution: Species -``` - -An example of a taxon name that can only be aligned to genus. The `taxonomic_resolution` is therefore specified as `genus`. The portion of the name that can be aligned to the taxonomic resource must be before the square brackets. Any information within the square brackets is important for uniquely identifying this entry within AusTraits, but does not provide additional taxonomic information. - -```{r, eval=FALSE, echo=TRUE} -- find: Acacia ancistrophylla/sclerophylla - replace: Acacia sp. [Acacia ancistrophylla/sclerophylla; White_2020] - reason: match_04. Rewording taxon where `/` indicates uncertain species identification - to align with `APC accepted` genus (2022-11-10) - taxonomic_resolution: genus -``` - -A taxonomic update that aligns a name to the most similar taxon_name within a taxonomic resource (the APC), but this is a taxonomic synonym and the austraits workflow will update it to its currently accepted name (since this is documented within the `taxon_list.csv` file): - -```{r, eval=FALSE, echo=TRUE} -- find: Polyalthia (Wyvur) - replace: Polyalthia sp. (Wyvuri B.P.Hyland RFK2632) - reason: match_15_fuzzy. Fuzzy match alignment with species-level canonical name - in `APC known` when everything except first 2 words ignored (2022-11-10) - taxonomic_resolution: Species -``` - -## Check if AusTraits pivots wider -AusTraits users want to be able to "pivot" between long and wide formats. -Each row of data should have a unique combination of the following fields: - `trait_name`, `dataset_id`, `observation_id`, `source_id`, `taxon_name`, `population_id`, `individual_id`, `temporal_context_id`, `method_context_id`, `value_type`, and `original_name` - -Therefore, the dataset should be able to pivot wider and the following code should have a `1` in every cell. - -```{r, eval=FALSE, echo=TRUE} -austraits$traits %>% - select(dataset_id, trait_name, value, observation_id, source_id, taxon_name, population_id, individual_id, temporal_context_id, method_context_id, value_type, original_name) %>% - pivot_wider(names_from = trait_name, values_from = value, values_fn = length) %>% View() -``` - -If AusTraits fails to `pivot_wider`, likely problems are: -- **Not all context information has been captured.** For instance, is it possible that you have two columns with data for the same trait, measured using different methods? In this case you need to add a `method_context` to both the relevant [traits](#add_traits) and to the [contexts section](#adding_contexts). -- **There are multiple observations per entity.** In a number of large studies which, in theory, include a single observation per species, have a few scattered instances of a second row of trait values with the same taxon name. They might be true duplicates and can be removed or perhaps they are indeed some alternate values. In this case the following custom_R_code works: -``` -' data %>% - group_by(taxon_name) %>% - mutate(observation_number = dplyr::row_number()) %>% - ungroup()' -``` - Then add `observation_number` as a context with `category: temporal_context` - -## Check for duplicates - -AusTraits strives to have no duplicate entries for numeric (continuous) trait measurements. That is, each value in AusTraits should represent a unique measurement, rather than a measurement sourced from another study. - -When you receive/solicit a dataset, ask the data contributor if all data submitted was collected for the specific study and if they suspect other studies from their lab/colleagues may also have contributed any of this data. - -In addition, there are tests to check for duplicates within and across dataset_ids. - -[To check for duplicates:](#dataframe_of_duplicates) - -```{r, eval=FALSE, echo=TRUE} -austraits_deduped <- remove_suspected_duplicates(austraits) -duplicates_for_dataset_id <- - austraits_deduped$excluded_data %>% - filter( - dataset_id == current_study - ) -``` - -### Duplicates within the study {#duplicates_within_study} - -1. First sort `duplicates_for_dataset_id` by the column `error` and scan for duplicates within the study (these will be entries under error that begin with the same `dataset_id` as the dataset being processed) - -2. For legitimately identical measurements, do nothing. For instance, if %N has been measured on 50 replicates of a species and is reported to the nearest 0.01% it is quite likely there will be a few identical values within the study. - -3. If a species-level measurement has been entered for all within-location replicates, you need to filter out the duplicates. This is true for both numeric and categorical values. Enter the following code as `custom_R_code` in the dataset's metadata file: - -```{r, eval=FALSE, echo=TRUE} -data %>% - group_by(Species) %>% - mutate( - across( - c(leaf_percentN, `plant growth form`), replace_duplicates_with_NA) - ) - ) %>% - ungroup() -``` -Note: Using custom R code instead of filtering the values in the data.csv file itself ensures the relevant trait values are still associated with each line of data in the data.csv file, but only read into AusTraits a single time. -Note: You would use `group_by(Species, Location)` if there are unique values at the species x location level. - -### Duplicates between studies {#duplicates_between_studies} - -AusTraits does not attempt to filter out duplicates in categorical traits between studies. The commonly duplicated traits like `life_form`, `plant_growth_form`, `photosynthetic_pathway`, `fire_response`, etc. are legitimately duplicated and if the occasional study reported a different `plant_growth_form` or `fire_response` it would be important to have documented that one trait value was much more common than another. Such categorical trait values may have been sourced from reference material or measured/identified by this research team. - -Identifying duplicates in numeric traits between studies can be difficult, but it is essential that we attempt to filter out all duplicate occurrences of the same measurement. Some common patterns of duplication include: - - 1. For a single trait, if there are a large number of values duplicated in a specific other dataset_id (i.e. the `error` repeatedly starts with the same `dataset_id`), be suspicious. Before contacting the author, check the metadata for the two datasets, especially authors and study locations, to see if it is likely these are data values that have been jointly collected and shared across studies. Similar location names/locations, identical university affiliations, or similar lists of traits being measured are good clues. - - 2. `plant_height`, `leaf_length`, `leaf_width`, `seed_length`, `seed_width` and `seed_mass` are the numeric variables that are most frequently sourced from reference material (e.g. floras, herbarium collections, reference books, Kew seed database, etc.) - - 3. The following datasets are flagged in AusTraits as `reference` studies and are the source of most duplicates for the variables listed above: - `Kew_2019_1`, `Kew_2019_2`, `Kew_2019_3`, `Kew_2019_4`, `Kew_2019_5`, `Kew_2019_6`, `ANBG_2019`, `GrassBase_2014`, `CPBR_2002`, `NTH_2014`,`RBGK_2014`, `NHNSW_2016`, `RBGSYD__2014_2`, `RBGSYD_2014`, `TMAG_2009`, `WAH_1998`, `WAH_2016`,`Brock_1993`, `Barlow_1981`, `Hyland_2003`, `Cooper_2013` - - Data from these studies are assumed to be the source, and the other study with the value is assumed to have sourced it from the above study. We recognise this is not always accurate, especially for compilations within `Kew_2019_1`, Kew's seed mass database. Whenever we input a raw dataset that is also part of the Kew compilation, we filter that contributors data from `Kew_2019_1`. - - 4. Data for `wood_density` is also often sourced from other studies, most commonly `Ilic_2000` or `Zanne_2009`. - - 5. Data from a number of studies from `Leishman` and `Wright` have been extensively shared within the trait ecology community, especially through TRY - -If the dataset you are processing has a number of numeric trait duplicates that follow one of the `patterns of duplication` listed, the duplicates should be filtered out. Any other data explicitly indicated in the manuscript as sourced should also be filtered out. Most difficult are studies that have partially sourced data, often from many small studies, and partially collected new data, but not identified the source of each value. - -Filtering duplicate data is a three-step process. In brief: - -1. Identify traits and studies with duplicates you believe should be removed. -2. Add additional columns to `data.csv`, identifying certain `trait_values` as duplicates. -3. Add `custom R code` that filters out identified duplicates when the study is merged into AusTraits. - - -#### Identify traits and studies -1. Either in R or Excel, manipulate [`duplicates_for_dataset_id`](#dataframe_of_duplicates) to remove rows that you believe are legitimate duplicates, including duplicates values due to replicate measurements within a single study and stray duplicates across studies that likely true, incidental duplicate values. Carefully consider which datasets and traits to include/exclude from the filter. - -As an example: -```{r, eval=FALSE, echo=TRUE} -# Note, this code will be replaced by a function in the future. -duplicates_to_filter <- - duplicates_for_dataset_id %>% - mutate( - dataset_with_duplicate = - error %>% - gsub("Duplicate of ", "", .) %>% - gsub("[[:alnum:]]$", "", .) %>% - gsub("[[:punct:]]$", "", .) - ) %>% - filter(dataset_with_duplicate %in% c("Ilic_2000", "Zanne_2009", "Kew_2019_1", "Barlow_1981", "NTH_2014")) %>% - filter(trait_name %in% c("wood_density", "seed_mass", "leaf_length", "leaf_width")) -``` - -2. Use the following code to add columns to `data.csv` that identify specific values as duplicates: - -```{r, eval=FALSE, echo=TRUE} -# Note, this code will be replaced by a function in the future. -wood_density_duplicates <- - duplicates_to_filter %>% - filter(trait_name == "wood_density") %>% - select(error, original_name) %>% - rename(wood_density_duplicate = error) - -seed_mass_duplicates <- - duplicates_to_filter %>% - filter(trait_name == "seed_width") %>% - select(error, original_name) %>% - rename(seed_mass_duplicate = error) - -leaf_width_min_duplicates <- - duplicates_to_filter %>% - filter(trait_name == "leaf_width", value_type == "expert_min") %>% - select(error, original_name) %>% - rename(leaf_width_min_duplicate = error) - -leaf_width_max_duplicates <- - duplicates_to_filter %>% - filter(trait_name == "leaf_width", value_type == "expert_max") %>% - select(error, original_name) %>% - rename(leaf_width_max_duplicate = error) - -leaf_length_min_duplicates <- - duplicates_to_filter %>% - filter(trait_name == "leaf_length", value_type == "expert_min") %>% - select(error, original_name) %>% - rename(leaf_length_min_duplicate = error) - -leaf_length_max_duplicates <- - duplicates_to_filter %>% - filter(trait_name == "leaf_length", value_type == "expert_max") %>% - select(error, original_name) %>% - rename(leaf_length_max_duplicate = error) - -read_csv("data/dataset_id/data.csv") %>% - left_join(wood_density_duplicates, by = c("column_with_taxon_name" = "original_name")) %>% - left_join(seed_mass_duplicates, by = c("column_with_taxon_name" = "original_name")) %>% - left_join(leaf_width_min_duplicates, by = c("column_with_taxon_name" = "original_name")) %>% - left_join(leaf_width_max_duplicates, by = c("column_with_taxon_name" = "original_name")) %>% - left_join(leaf_length_min_duplicates, by = c("column_with_taxon_name" = "original_name")) %>% - left_join(leaf_length_max_duplicates, by = c("column_with_taxon_name" = "original_name")) %>% - write_csv("data/dataset_id/data.csv") -``` - -3. For the above example, then add the following code to custom R code, removing the duplicate values from the data columns (by setting them as `NA`) as the dataset is read into AusTraits. - -```{r, eval=FALSE, echo=TRUE} -data %>% - mutate( - `wood density` = ifelse(is.na(wood_density_duplicate), `wood density`, NA), - `seed mass (mg)` = ifelse(is.na(seed_mass_duplicate), `seed mass (mg)`, NA), - `leaf width minimum (mm)` = ifelse(is.na(leaf_width_min_duplicate), `leaf width minimum (mm)`, NA), - `leaf width maximum (mm)` = ifelse(is.na(leaf_width_max_duplicate), `leaf width maximum (mm)`, NA), - `leaf length minimum (mm)` = ifelse(is.na(leaf_length_min_duplicate), `leaf length minimum (mm)`, NA), - `leaf length maximum (mm)` = ifelse(is.na(leaf_length_max_duplicate), `leaf length maximum (mm)`, NA) - ) -``` - -Difficulties: - -- This method only identifies values as duplicates if they have the same number of significant figures. -- More complex matching may reveal further duplicates. For seed mass in particular, some studies likely source values from the Kew database and then round these values. They may similarly source several values from Kew and then include the mean in their dataset. If their methods or correspondence with the contributor suggests the values were sourced from Kew (or another lab, papers, etc.) it is best to filter out all values, EXCEPT species that are not yet represented in AusTraits for the trait in question. - - -## Build study report - -The report is located in the `export` folder. - -Check the study report to ensure: - -- All possible metadata fields were filled in -- The locations plot sensibly on the map of Australia -- For numeric traits, the trait values plot sensibly relative to other studies -- The list of unknown/unmatched species doesn’t include names you think should be recognised/aligned - -If necessary, cycle back through earlier steps to fix any errors, rebuilding the study report as necessary - -At the very end, re-clear formatting, re-run tests, rebuild AusTraits, rebuild report. - -If you’re uncertain, also recheck excluded data and duplicates before these final steps. -```{r, eval=FALSE, echo=TRUE} -f <- file.path("data", current_study, "metadata.yml") -read_metadata(f) %>% write_metadata(f) - -dataset_ids <- current_study -austraits_run_tests() - -austraits <- remake::make("austraits") -dataset_report(current_study, overwrite = TRUE) -``` - -To generate a report for a collection of studies: -```{r, eval=FALSE, echo=TRUE} -dataset_reports(c("Falster_2005_1", "Wright_2002"), overwrite = TRUE) -``` - -Or for all studies: -```{r, eval=FALSE, echo=TRUE} -dataset_reports(overwrite = TRUE) -``` - -Add the argument `overwrite=TRUE` if you already have a copy of a specific report stored in your computer and want to replace it with a newer version. - -(Reports are written in [Rmarkdown](https://rstudio.github.io/rmarkdown/) and generated via the [knitr](https://cran.r-project.org/web/packages/knitr/) package. The template is stored in `scripts/report_study.html`). - - -# Working with our GitHub repository - -By far our preferred way of contributing is for you to contribute files directly into the repository and then send a [pull request](https://help.github.com/articles/using-pull-requests/) with your input. You can do this by - -- (for approved maintainers of austraits.build) Creating a branch, or -- (for others) forking the database in github - -In short, - -1. Create a Git branch for your new work, either within the AusTraits repo (if you are an approved contributor) or as a [fork of the repo](https://help.github.com/en/github/getting-started-with-github/fork-a-repo). -2. Make commits and push these up onto the branch. -2. Make sure everything runs fine before you send a pull request. -3. When you're ready to merge in the new features, - -Before you make a substantial pull request, you should always [file an issue](https://github.com/traitecoevo/austraits.build/issues) and make sure someone from the team agrees that it’s worth pursuing the problem. If you’ve found a bug, create an associated issue and illustrate the bug with a minimal [reprex](https://www.tidyverse.org/help/#reprex) illustrating the issue. - -If this is not possible, you could email the relevant files (see above) to the AusTraits email: austraits.database@gmail.com - -## Merging a pull request - -There are multiple ways to merge a pull request, including using GitHub's built-in options for merging and squashing. When merging a PR, we ideally want - -- a single commit -- to attribute the work to the original author -- to run various checks along the way - -There are two ways to do this. For both, you need to be an approved maintainer. - -### Merging in your own PR - -You can merge in your own PR after you've had someone else review it. - -1. Send the PR -2. Tag someone to review -3. Once ready, merge into main choosing "Squash & Merge", using an informative commit message. - - -### Merging someone else's PR - -When merging in someone else's PR, the built-in options aren't ideal, as they either take all of the commits on a branch (ugh, messy), OR make the commit under the name of the person merging the request. - -The workflow below describes how to merge a pull request from the command line, with a single commit & attributing the work to the original author. Lets assume a branch of name `Smith_1995`. - -First, from the master branch in the repo, run the following: - -``` -git merge --squash origin/Smith_1995 -``` - -Then in R - -```{r, eval=FALSE} -dataset_ids <- "Smith_1995" - -# Update remake file -build_setup_pipeline() - -# check data builds -remake::make(dataset_ids) - -# run tests on dataset -austraits_run_tests() - -# read and write yaml to prevent future reformatting -f <- file.path("data", dataset_ids, "metadata.yml") -read_metadata(f) %>% write_metadata(f) - -# rebuild -remake::make(dataset_ids) -``` - -Now back in the terminal - -``` -git add . -git commit -``` - -Add a commit message, referencing relevant pull requests and issues, e.g. - -``` -Smith_1995: Import new data - -For #224, closes #286 -``` - -And finally, amend the commit author, to reference the person who did all the work! -``` -git commit --amend --author "XXX " -``` - -## Commit messages - -Informative commit messages are ideal. Where possible, these should reference the issue being addressed. They should clearly describe the work done and value added to AusTraits in a few, clear, bulleted points. - - - -## Version updating & Making a new release - -Releases of the dataset are snapshots that are archived and available for use. - -We use semantic versioning to label our versions. As discussed in [Falster et al 2019](http://doi.org/10.1093/gigascience/giz035), semantic versioning can apply to datasets as well as code. - -The version number will have 3 components for actual releases, and 4 for development versions. The structure is `major.minor.patch.dev`, where `dev` is at least 9000. The `dev` component provides a visual signal that this is a development version. So, if the current version is 0.9.1.9000, the release be 0.9.2, 0.10.0 or 1.0.0. - -Our approach to incrementing version numbers is - -- `major`: increment when you make changes to the structure that are likely incompatible with any code written to work with previous versions. -- `minor`: increment to communicate any changes to the structure that are likely to be compatible with any code written to work with the previous versions (i.e., allows code to run without error). Such changes might involve adding new data within the existing structure, so that the previous dataset version exists as a subset of the new version. For tabular data, this includes adding columns or rows. On the other hand, removing data should constitute a major version because records previously relied on may no longer exist. -- `patch`: Increment to communicate correction of errors in the actual data, without any changes to the structure. Such changes are unlikely to break or change analyses -written with the previous version in a substantial way. - - - -**Figure:** Semantic versioning communicates to users the types of changes that have occurred between successive versions of an evolving dataset, using a tri-digit label where increments in a number indicate major, minor, and patch-level changes, respectively. From [Falster et al 2019](http://doi.org/10.1093/gigascience/giz035), (CC-BY). - -The process of making a release is as follows. Note that corresponding releases and versions are needed in both `austraits` and `austraits.build`: - -1. Update the version number in the DESCRIPTION file, using ` - -```{r, eval=FALSE} -desc::desc_bump_version() -``` - -2. Compile `austraits.build`. - -3. Update the documentation. - -4. Commit and push to github. - -5. Make a release on github, adding version number - -5. Prepare for the next version by updating version numbers. - -```{r, eval=FALSE} -desc::desc_bump_version("dev") -``` - -# Other - -## File types - -### CSV - -A comma-separated values (CSV) file is a delimited text file that uses a comma to separate values. Each line of the file is a data record. Each record consists of one or more fields, separated by commas. This is a comma format for storing tables of data in a simple text file. You can edit it an Excel or in a text editor. For more, see [here](https://en.wikipedia.org/wiki/Comma-separated_values). - -### YAML files {#yaml} - -The `yml` file extension (pronounced "YAML") [is a type structured data file](https://en.wikipedia.org/wiki/YAML), that is both human and machine readable. You can edit it in any text editor, or in Rstudio. Generally, yml is used in situations where a table does not suit because of variable lengths and/or nested structures. It has the advantage over a spreadsheet in that the nested “headers” can have variable numbers of categories. The data under each of the hierarchical headings are easily extracted by R. - -## Extracting data from PDF tables - -If you encounter a PDF table of data and need to extract values, this can be achieved with the [`tabula-java` tool](https://github.com/tabulapdf/tabula-java/). There's actually an R wrapper (called [`tabulizer`](https://github.com/ropensci/tabulizer)), but we haven't succeeded in getting this running. However, it's easy enough to run the java tool at the command line on OSX. - -1. [Download latest release of `tabula-java`](https://github.com/tabulapdf/tabula-java/releases) and save the file in your path - -2. Run -``` -java -jar tabula-1.0.3-jar-with-dependencies.jar my_table.pdf -o my_data.csv -``` -This should output the data from the table in `my_table.pdf` into the csv `my_data.csv` - -3. Clean up in Excel. check especially that the locations of white spaces are correct. diff --git a/vignettes/austraits.build.Rmd b/vignettes/austraits.build.Rmd deleted file mode 100644 index f83099432..000000000 --- a/vignettes/austraits.build.Rmd +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Getting started with austraits.build -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Getting started with austraits.build} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - results = "asis", - echo = FALSE, - message = FALSE, - warning = FALSE -) - -library(traits.build) - -my_kable_styling <- util_kable_styling_html -``` - -![](figures/logo.png) - -# What type of repository is this and who is it for? - -The main purpose of this repo is to build `AusTraits`, a curated database of traits for Australian flora. It uses the R package \`traits.build\` to build the harmonised AusTraits database outputs. The intended audiences are those who are interested in building AusTraits from scratch, or contributing data to AusTraits. - -Those interested in simply using data from AusTraits should visit and download the compiled resource from the versioned releases archived on Zenodo at doi: [10.5281/zenodo.3568417](http://doi.org/https://doi.org/10.5281/zenodo.3568417). - -The repo contains the data for rebuilding AusTraits, while the workflow to rebuild the dataset is on the [traits.build repo](https://github.com/traitecoevo/traits.build) - -The traits.build workflow makes the process of harmonising different datasets as transparent as possible. The workflow is fully-reproducible and open, meaning it exposes the decisions made in the processing of data into a harmonised and curated dataset (Figure 1); and can also be rerun by others. - -![](figures/Workflow.png) - -# Ways to contribute - -We envision AusTraits as an ongoing collaborative community resource that: - -1. Increases our collective understanding of the Australian flora -2. Facilitates the accumulation and sharing of trait data -3. Builds a sense of community among contributors and users -4. Aspires to be fully transparent and reproducible research of the highest standard. - -Below are some of the ways you can contribute. - -\*Please note that the AusTraits project is released with a [Contributor Code of Conduct](http://traitecoevo.github.io/austraits.build/CODE_OF_CONDUCT.html). By contributing to this project you agree to abide by its terms. - -## Contributing new data - -We gladly accept new data contributions to AusTraits. If you would like to contribute data, the requirements are: - -- Data was collected for Australian plant species growing in Australia -- You collected data on one of the traits listed in the [trait definitions table](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html) -- You are willing to release the data under an open license for reuse by the scientific community -- You make it is as easy as possible for us to incorporate your data by following the instructions. - -If you want to contribute data, please review the instructions [here on how to contribute data](http://traitecoevo.github.io/austraits.build/articles/contributing_data.html). - -## Reporting errors and improving documentation - -Data contributors and data users who are less familiar with the AusTraits format and code than the custodians may determine that important descriptions or steps are omitted from this documentation file. We welcome additions and edits that make using the existing data or adding new data easier for the community. - -If you notice a possible error in AusTraits, please [post an issue on GitHub](https://github.com/traitecoevo/austraits.build/issues). If you can, please provide code illustrating the problem. - -If you would like to value-add to AusTraits in some other way, please get in contact with an idea or offer of time. - -## Improving data quality - -A core initiative of AusTraits from 2021-2023 is to refine and better document the trait names, definitions, and values that are the direct link from each contributor's dataset to the harmonised database. This effort is funded by an Australian Research Data Commons (ARDC) grant through their Australian Data Partnerships program. - -If you are interested in contributing expertise to the revision of a given trait (or cluster of related traits), please contact us. - -# Compiling AusTraits - -In this section, we describe how to build the harmonised dataset. By "compiling" we mean transforming data from all the different studies into a harmonised common format. As described above, and depicted in Figure 1, AusTraits is built so that the database can be rebuilt from its parts at any time. This means that decisions made along the way (in how data is transformed or encoded) can be inspected and modified, and new data can be easily incorporated. - -The first step to compile AusTraits is to download a copy of the [austraits.build](https://github.com/traitecoevo/austraits.build/) repository from Github. Then open the Rstudio project, or open R into the right repo directory. - -Next install a copy of [traits.build]](https://github.com/traitecoevo/austraits.build/): - -```{r, eval=FALSE, echo=TRUE} -#install.packages("devtools") # install devtools if needed -remotes::install_github("traitecoevo/traits.build", quick = TRUE) -``` - -## Source functions - -To successfully compile AusTraits you need to load the package - -```{r, eval=FALSE, echo=TRUE} -library("traits.build") -``` - -and source some custom functions written explicitly for this database: - -```{r, eval=FALSE, echo=TRUE} -source("R/custom_R_code.R") # functions used in custom_R_code -``` - -## Compile via `remake` - -One of the packages that will be installed with the above is [`remake`](https://github.com/richfitz/remake). This package manages the compiling, and also helps streamline the amount of recompiling needed when new sources are added. - -Running the following command will rebuild AusTraits and save the assembled database into an RDS file located in `export/data/curr/austraits.rds`. - -```{r, eval=FALSE, echo=TRUE} -remake::make() -``` - -Remake can also load the compiled dataset directly into R by calling: - -```{r, eval=FALSE, echo=TRUE} -austraits <- remake::make("austraits") -``` - -## Developing AusTraits - -For those working with AusTraits code base or data, you may want to read about - -- the [structure of the compiled AusTraits database](http://traitecoevo.github.io/austraits.build/articles/austraits_database_structure.html), and -- the [structure of the raw data files](http://traitecoevo.github.io/austraits.build/articles/austraits_file_structure.html), -- the [list of trait definitions](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html) diff --git a/vignettes/austraits_database_structure.Rmd b/vignettes/austraits_database_structure.Rmd deleted file mode 100644 index 3e2582f64..000000000 --- a/vignettes/austraits_database_structure.Rmd +++ /dev/null @@ -1,371 +0,0 @@ ---- -title: Structure of AusTraits data compilation -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Structure of AusTraits data compilation} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - results = "asis", - echo = FALSE, - message = FALSE, - warning = FALSE -) - -library(traits.build) - -my_kable_styling <- util_kable_styling_html -``` - -```{r, echo=FALSE, results='hide', message=FALSE} -## Loads austraits into global name space -austraits <- austraits:::austraits_lite - -metadata <- get_schema("config/metadata.yml")$metadata - -schema <- get_schema() -``` - -This document describes the structure of the AusTraits compilation, corresponding to **Version `r metadata$version`** of the dataset. - -Note that the information provided below is based on the information provided within the file `traits.build_schema.yml`, which can be accessed by running `get_schema` or `system.file("support", "traits.build_schema.yml", package = "traits.build")`. - -AusTraits is essentially a series of linked components, which cross link against each other:: - -```{r, results="hide", comment = '', eval=FALSE} -names(austraits) %>% - create_tree_branch("traits.build") %>% - writeLines() -``` - -``` -austraits -├── traits -├── locations -├── contexts -├── methods -├── excluded_data -├── taxonomic_updates -├── taxa -├── contributors -├── sources -├── definitions -├── schema -├── metadata -└── build_info -``` - -These include all the data and contextual information submitted with each contributed dataset. - -# Components - -The core components are defined as follows. - -```{r} -print_schema_element <- function(elements) { - if (elements$type == "character") { - sprintf("**Content:** %s\n", elements$value) %>% - writeLines() - } - - if (elements$type == "table") { - sprintf("**Content:** \n") %>% - writeLines() - - elements$elements %>% - util_list_to_df1() %>% - my_kable_styling() %>% - writeLines() - } -} -``` - -## traits {#traits} - -```{r} -elements <- schema$austraits$elements$traits - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -**Details:** - -#### Entity type - -An entity is the `feature of interest`, indicating what a trait value applies to. While an entity can be just a component of an organism, within the scope of AusTraits, an `individual` is the finest scale entity that can be documented. The same study might measure some traits at a population-level (`entity = population`) and others at an individual-level (`entity = individual`). - -In detail: - -- `entity_type` is `r tolower(schema$metadata$elements$traits$elements$entity_type)` Possible values are: - -```{r entity_type} -schema$entity_type$values %>% - util_list_to_df1() %>% - my_kable_styling() %>% - writeLines() -``` - -#### Identifiers - -The traits table includes 13 identifiers, `dataset_id`, `observation_id`, `taxon_name`, `population_id`, `individual_id`, `method_id`, `temporal_context_id`, `source_id`, `location_id`, `entity_context_id`, `plot_context_id`, `treatment_context_id`, and `method_context_id`. - -`dataset_id`, `source_id` and `taxon_name` have easy-to-interpret values. The others are simply integral identifiers that link groups of measurements and are automatically generated through the AusTraits workflow (`individual_id` can be assigned in the metadata file or automatically generated.) - -To expand on the definitions provided above, - -- `observation_id` links measurements made on the same entity (individual, population, or species) at a single point in time. - -- `population_id` indicates entites that share a common `location_id`, `plot_context_id`, and `treatment_context_id`. It is used to align measurements and observation_id's for `individuals` versus `populations` (i.e. distinct `entity_types`) that share a common `population_id`. It is numbered sequentially within a dataset. - -- `individual_id` indicates a unique organisms. It is numbered sequentially within a dataset by population. Multiple observations on the same organism across time (with distinct `observation_id` values), share a common `individual_id`. - -- `temporal_context_id` indicates a distinct point in time and is used only if there are repeat measurements on a population or individual across time. The identifier links to context properties (& their associated information) in the `contexts` table for context properties of type `temporal`. - -- `source_id` is applied if not all data within a single dataset (`dataset_id`) is from the same source, such as when a dataset represents a compilation for a meta-analysis. - -- `location_id` links to a distinct `location_name` and associated `location_properties` in the `location` table. - -- `entity_context_id` links to information in the `contexts` table for context properties (& associated values/descriptions) with category `entity_context`. `Entity_contexts` include organism sex, organism caste and any other features of an entity that needs to be documented. - -- `plot_context_id` links to information in the `contexts` table for context properties (& associated values/descriptions) with category `plot`. `Plot contexts` include both blocks/plots within an experimental design as well as any stratified variation within a location that needs to be documented (e.g. slope position). - -- `treatment_context_id`links to information in the `contexts` table for context properties (& associated values/descriptions) with category `treatment`. `Treatment contexts` are experimental manipulations applied to groups of individuals. - -- `method_context_id`links to information in the `contexts` table for context properties (& associated values/descriptions) with category `method`. A `method context` indicates that the same trait was measured on or across individuals using different methods. - -As well, `measurement_remarks` is used to document `r tolower(schema$metadata$elements$traits$elements$measurement_remarks)` - -#### Life stage, basis of record - -- `life_stage` is `r tolower(schema$metadata$elements$traits$elements$life_stage)`. - -- `basis_of_record` is `r tolower(schema$metadata$elements$traits$elements$basis_of_record)` Possible values are: - -```{r basis_of_record} -schema$basis_of_record$values %>% - util_list_to_df1() %>% - my_kable_styling() %>% - writeLines() -``` - -#### Values, Value types, basis of value {#value_types} - -Each record in the table of trait data has an associated `value`, `value_type`, and `basis_of_value`. - -`Value type:` A trait's `value_type` is either `numeric` or `categorical`. - For traits with numerical values, the recorded value has been converted into standardised units and the AusTraits workflow has confirmed the value can be converted into a number and lies within the allowable range. - For categorical variables, records have been aligned through substitutions to values listed as allowable values (terms) in a trait's definition. \* we use `_` for multi-word terms, e.g. `semi_deciduous`\ -\* we use a space for situations where two values co-occur for the same entity. For instance, a flora might indicate that a plant species can be either annual or biennial, in which case the trait is scored as `annual biennial`. - -Each trait measurement has an associated `value_type`, which is `r tolower(schema$metadata$elements$traits$elements$value_type)` Possible values are: - -```{r value_type} -schema$value_type$values %>% - util_list_to_df1() %>% - my_kable_styling() %>% - writeLines() -``` - -Each trait measurement also has an associated `basis_of_value`, which is `r tolower(schema$metadata$elements$traits$elements$basis_of_value)` Possible values are: - -```{r basis_of_value} -schema$basis_of_value$values %>% - util_list_to_df1() %>% - my_kable_styling() %>% - writeLines() -``` - -AusTraits does not include intra-individual observations made at a single point in time. When multiple measurements per individual are submitted to AusTraits, we take the mean of the values and record the value_type as `mean` and indicate under replicates the number of measurements made. - -## locations - -```{r} -elements <- schema$austraits$elements$locations - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -## contexts - -```{r} -elements <- schema$austraits$elements$contexts - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -## methods {#methods} - -```{r} -elements <- schema$austraits$elements$methods - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -## exluded_data - -```{r} -elements <- schema$austraits$elements$excluded_data - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -## taxa - -**Description:** A table containing details on taxa that are included in the table [`traits`](#traits). We have attempted to align species names with known taxonomic units in the [`Australian Plant Census` (APC)](https://biodiversity.org.au/nsl/services/apc) and/or the [`Australian Plant Names Index` (APNI)](https://biodiversity.org.au/nsl/services/APNI); the sourced information is released under a CC-BY3 license. - -Version `r desc::desc_get_field("Version")` of AusTraits contains records for `r austraits$traits$taxon_name %>% unique() %>% length()` different taxa. - -```{r} -elements <- schema$austraits$elements$taxa - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -## taxonomic_updates - -```{r} -elements <- schema$austraits$elements$taxonomic_updates - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -Both the original and the updated taxon names are included in the [`traits`](#traits) table. - -## definitions - -```{r} -elements <- schema$austraits$elements$definitions - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -**Details on trait definitions:** The allowable trait names and trait values are defined in the definitions file. Each trait is labelled as either `numeric` or `categorical`. An example of each type is as follows. For the full list, see the [Trait definitions vignette](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html). - -```{r, traits} -for (trait in c("leaf_mass_per_area", "woodiness")) { - elements <- austraits$schema$traits$elements[[trait]] - - data_trait <- austraits$traits %>% filter(trait_name == trait) - - c(sprintf("**%s**\n\n", trait), sprintf("- label: %s", elements$label), sprintf("- description: %s", elements$description), sprintf("- number of records: %s", data_trait %>% nrow()), sprintf("- number of studies: %s", data_trait %>% pull(dataset_id) %>% unique() %>% length()), sprintf("- type: %s%s", elements$type, ifelse(elements$type == "numeric", sprintf("\n- units: %s", elements$units), "")), ifelse(elements$type == "numeric", sprintf("- allowable range: %s - %s %s", elements$values$minimum, elements$values$maximum, elements$units), sprintf("- allowable values:\n%s\n", paste0(" - *", elements$values %>% names(), "*: ", elements$values %>% unlist(), collapse = "\n"))), "") %>% writeLines() -} -``` - -## contributors - -```{r} -elements <- schema$austraits$elements$contributors - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` - -## sources - -For each dataset in the compilation there is the option to list primary and secondary citations. The primary citation is defined as, `r austraits$schema$metadata$elements$source$values$primary$description` The secondary citation is defined as, `r austraits$schema$metadata$elements$source$values$secondary$description` - -The element `sources` includes bibtex versions of all sources which can be imported into your reference library: - -``` -RefManageR::WriteBib(austraits$sources, "refs.bib") # write all sources to file -RefManageR::WriteBib(austraits$sources["Falster_2005_1"], "refs.bib") # write a single reference to a file -``` - -Or individually viewed: - -``` -austraits$sources["Falster_2005_1"] -``` - -A formatted version of the sources also exists within the table [methods](#methods). - -## metadata - -```{r} -elements <- schema$austraits$elements$metadata - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - writeLines(c("")) -``` - -## build_info - -```{r} -elements <- schema$austraits$elements$build_info - - sprintf("**Description:** %s.\n", elements$description) %>% - stringr::str_replace_all("\\.\\.", "\\.") %>% - writeLines() - - elements %>% - print_schema_element() - - writeLines(c("")) -``` diff --git a/vignettes/austraits_file_structure.Rmd b/vignettes/austraits_file_structure.Rmd deleted file mode 100644 index dd1f4f516..000000000 --- a/vignettes/austraits_file_structure.Rmd +++ /dev/null @@ -1,598 +0,0 @@ ---- -title: AusTraits repo file structure -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{AusTraits repo file structure} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - results = "asis", - echo = FALSE, - message = FALSE, - warning = FALSE -) - -library(traits.build) - -my_kable_styling <- util_kable_styling_html -``` - -```{r, echo=FALSE, results='hide', message=FALSE} -austraits <- austraits:::austraits_lite -schema <- get_schema() -``` - -## File structure - -The main directory for the [`austraits.build`](https://github.com/traitecoevo/austraits.build/) repository contains the following files and folders, with purpose as indicated. - -```{r, eval=FALSE} -dir() %>% - create_tree_branch(title = "austraits") %>% - writeLines() -``` - -#### R project file -``` -├── austraits.build.Rproj # Rstudio project -``` - -#### Files for maintaining a repo on github - -``` -├── README.md # landing page -├── .github # folder containing github actions, issue templates, code of conduct -├── LICENCE -├── NEWS.md -├── _pkgdown.yml # used to create packagedown website -├── docs # contains website -``` - -#### Files used for creation of R package austraits.build -``` -├── DESCRIPTION # R data compendium -├── tests # defines tests applied to datasets -├── vignettes # documentation of repo file structure, AusTraits database structure, definitions, data input processes -``` - -#### Files used for data compilation -``` -├── remake.yml # instructions for build -├── config # configuration and definition files -├── data # raw data files -├── export # folder for output -└── scripts # scripts for processing files before/after building austraits, including compiling reports -``` - - -## Details on files used for data compilation: - - -## Configuration - -The folder `config` contains three files which govern the building of the dataset. - -``` -config -├── traits.yml -├── taxon_list.csv -└── unit_conversions.csv -``` - -The file `traits.yml` provides the trait definitions used to compile AusTraits, including allowable trait values. The [trait definitions](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html) are fully described in an additional vignette. A `.yml` file is a structured data file where information is presented in a hierarchical format (see [appendix for details](#yaml)). - -The file `taxon_list.csv` is our master list of known taxa. Each species is listed once, with links to species' identifiers provided by the Australian Plant Name Index (APNI). The file `taxon_list.csv` is added to if a study includes taxa not previously represented in AusTraits. These can be names included in either the APC/APNI, compilations of taxon concepts (APC) or names (APNI) for plants that are either native to or naturalised in Australia, or taxa without recognised names. - -```{r, results='show'} -read_csv("config/taxon_list.csv", show_col_types = FALSE) %>% - select(taxon_name, family, scientific_name_authorship, taxonomic_reference, cleaned_name_taxonomic_status, cleaned_scientific_name_id -) %>% - slice(1:10) %>% - my_kable_styling() -``` - -The file `unit_conversions.csv` defines the unit conversions that are used when converting contributed trait data to common units, e.g. - -```{r, results='show',} -read_csv("config/unit_conversions.csv", col_types = "ccc",show_col_types = FALSE) %>% - slice(1:10) %>% - my_kable_styling() -``` - -## Data - -The folder `data` contains the raw data from individual studies included in AusTraits. - -Records within the `data` folder are organised as coming from a particular study, defined by the `dataset_id`. Data from each study are organised into a separate folder, with two files: - -- `data.csv`: a table containing the actual trait data. -- `metadata.yml`: a file that contains study metadata (source, methods, locations, and context), maps trait names and units onto standard types, and lists any substitutions applied to the data in processing. - -The folder `data` thus contains a long list of folders, one for each study and each containing two files: - -``` -data -├── Angevin_2010 -│ ├── data.csv -│ └── metadata.yml -├── Barlow_1981 -│ ├── data.csv -│ └── metadata.yml -├── Bean_1997 -│ ├── data.csv -│ └── metadata.yml -├── .... - -``` - -where `Angevin_2010`, `Barlow_1981`, & `Bean_1997` are each a unique `dataset_id` in the final dataset. - -### Data.csv {#create_data} - -The file `data.csv` contains raw measurements and can be in either long or wide format. - -Required columns include the taxon name, the trait name (column in long format, header in wide format), units (column in long format, part of header in wide format), location (if applicable), context (if applicable), date (if available), and trait values. - -It is important that all trait measurements made on the same individual or that are the mean of a species' measurements from the same location are kept linked. - -- If the data is in wide format, each row should include measurements made on a single individual at a single point in time or a single species-by-location mean, with different trait values as consecutive columns. - -- If the data is in long format, an additional column, `individual_id`, is required to ensure multiple trait measurements made on the same individual, or the mean of a species' measurements from the same location, are linked. If the data is in wide format and there are multiple rows of data for the same individual, an `individual_id` column should be included. These `individual_id` columns ensure that related data values remain linked. - -We aim to keep the data file in the rawest form possible (i.e. with as few changes as possible) but it must be a single csv file. Additional custom R code may be required to make the file exactly compatible with the AusTraits format, but these changes should be executed as AusTraits is compiled and should be in the `metadata.yml` file under `dataset/custom_R_code` (see below). Any files used to create the submitted `data.csv` file (e.g. Excel ...) should be archived in a sub-folder within the study folder named `raw`. - -### Metadata.yml - -The metadata is compiled in a `.yml` file, a structured data file where information is presented in a hierarchical format (see [Appendix for details](#yaml)). There are `r length(schema$metadata$elements)` values at the top hierarchical level: `r sprintf("%s", schema$metadata$elements %>% names()) %>% paste(collapse = ", ")`. These are each described below. - -As a start, you may want to check out some examples from [existing studies in Austraits](https://github.com/traitecoevo/austraits.build/tree/master/data), e.g. [Angevin_2010](https://github.com/traitecoevo/austraits.build/blob/master/data/Angevin_2011/metadata.yml) or [Wright_2009](https://github.com/traitecoevo/austraits.build/blob/master/data/Wright_2009/metadata.yml). - -#### Source - -This section provides `r tolower(schema$metadata$elements$source$description)` In general we aim to reference the primary source. References are written in structured yml format, under the category `source` and then under sub-groupings `primary`, `secondary`, and `original`. A reference is designated as `secondary` if it is a second publication by the data collector that analyses the data. When the `primary` reference is a compilation of multiple sources for a meta-analysis, the original references are designated as `original`. - -General guidelines for describing a source include: - -- A maximum of one primary source allowed. -- Elements are names as in [bibtex format](https://en.wikipedia.org/wiki/BibTeX). -- Keys should be named in the format `Surname_year` and the primary source is almost always identical to the name given to the dataset folder. A second instance of the identical Surname_year should have the key Surname_year_2. -- One or more secondary source may be included if traits from a single dataset were presented in two different manuscripts. Multiple sources are also appropriate if an author has compiled data from a number of sources, which are not individually in AusTraits, for a published or unpublished compilation. -- If your data is from an unpublished study, only include the elements that are applicable. -- If someone has transcribed a published source, the primary source will be the published work and the person who has completed the transcription will be acknowledged as the `contributor` of the dataset. - -An example of a primary source that is a journal article is: - -``` -source: - primary: - key: Falster_2005_1 - bibtype: Article - author: Daniel S. Falster, Mark Westoby - year: 2005 - title: Alternative height strategies among 45 dicot rain forest species from tropical Queensland, Australia - journal: Journal of Ecology - volume: 93 - pages: 521--535 - publisher: Wiley-Blackwell - doi: 10.1111/j.0022-0477.2005.00992.x -``` - - -If a secondary source is included it may look like: - -``` - primary: - key: Choat_2006 - bibtype: Article - year: '2006' - author: B. Choat and M. C. Ball and J. G. Luly and C. F. Donnelly and J. A. M. - Holtum - journal: Tree Physiology - title: Seasonal patterns of leaf gas exchange and water relations in dry rain - forest trees of contrasting leaf phenology - volume: '26' - number: '5' - pages: 657--664 - doi: 10.1093/treephys/26.5.657 - secondary: - key: Choat_2005 - bibtype: Article - year: '2005' - author: Brendan Choat and Marilyn C. Ball and Jon G. Luly and Joseph A. M. Holtum - journal: Trees - title: Hydraulic architecture of deciduous and evergreen dry rainforest tree species - from north-eastern Australia - volume: '19' - number: '3' - pages: 305--311 - doi: 10.1007/s00468-004-0392-1 -``` - -#### Contributors - -This section provides `r tolower(schema$metadata$elements$contributors$description)` The following information is recorded for each data contributor: - -```{r, echo=FALSE, results="show"} -schema$metadata$elements$contributors$elements$data_collectors$elements %>% - util_list_to_df1() %>% - my_kable_styling() -``` - -An example is as follows: - -``` - data_collectors: - - last_name: Falster - given_name: Daniel - ORCID: 0000-0002-9814-092X - affiliation: Evolution & Ecology Research Centre, School of Biological, Earth, - and Environmental Sciences, UNSW Sydney, Australia - additional_role: contact - - last_name: Westoby - given_name: Mark - ORCID: 0000-0001-7690-4530 - affiliation: Department of Biological Sciences, Macquarie University, Australia -``` - -Note that only the AusTraits custodians have the contributors' e-mail addresses on file. This information will not be directly available to AusTraits users or new contributors via Github. - -Additional fields within contributors are: - -- `Assistants`, `r tolower(schema$metadata$elements$contributors$elements$assistants$description)` -- `AusTraits_curators`, `r tolower(schema$metadata$elements$contributors$elements$austraits_curators$description)` - -#### Dataset - -This section includes `r tolower(schema$metadata$elements$dataset$description)` - -The following elements are included under the element `dataset`: - -```{r} -values <- schema$metadata$elements$dataset$values - -values <- values[!(names(values) %in% c("observation_id", "entity_type", "plot_context_id", "temporal_context_id", "treatment_context_id", "replicates", "basis_of_value", "value_type"))] - -for (value in names(values)) { - sprintf("- **%s**: %s", value, values[[value]]) %>% writeLines() -} -``` - - -Of these, the fields `collection_date`, `life_stage`, `basis_of_record`, and `measurement_remarks` can all be specified at the dataset level or the traits level (which overrides a dataset-level entry) or location level (which also overrides a dataset-level entry). In each case, they can be a fixed text value or indicate a column within the data.csv file (or generated through `custom_R_code`) that includes the relevant information. - -- `life_stage`, `basis_of_record`, and `collection_date` are usually included under `metadata$dataset` unless they vary by trait. - -- `entity_type`, `replicates`, `basis_of_value`, and `value_type` are usually different across traits and are usually mapped under the `metadata$traits` section (see below), but are allowed to be specified for the entire dataset in this section. - -- `traits` and `value` are only specified in metadata$dataset for **long-format** datasets. - -- `measurement_remarks` and `individual_id` are only included if required. They are absent from the majority of datasets. - -An example is as follows: - -``` - data_is_long_format: no - custom_R_code: ' - data %>% - mutate( - location_name = "Howard River catchment", - date = date %>% mdy() - ) %>% - arrange(date) %>% - group_by(Tree) %>% - mutate(observation_number = dplyr::row_number()) %>% - ungroup() %>% - group_by(species) %>% - mutate(across(c("specific leaf area (m2 kg-1)"), replace_duplicates_with_NA)) %>% - ungroup() - ' - collection_date: date - taxon_name: species - context_name: context - location_name: location_name - individual_id: Tree - description: Measurements of stem CO2 efflux and leaf gas exchange in a tropical - savanna ecosystem in northern Australia, and assessed the impact of fire on these - processes. - basis_of_record: field - life_stage: adult - sampling_strategy: The stem CO2 efflux was initially measured at two locations, - each of which was nested within a 3 km 2 plot... - original_file: leaf_summary.xls, Rbranch summary2.xls, and Rstem summary6.xls submitted - by Lucas Cernusak and archived in the raw data folder and GoogleDrive folder. - notes: none -``` - -A common use of the `custom_R_code` is to automate the conversion of a verbal description of flowering or fruiting periods into the supported trait values. It might also be used if values for a single trait are expressed across multiple columns and need to be merged. See `Catford_2014` as an example of this. The [adding data](http://traitecoevo.github.io/austraits.build/articles/adding_data.html) vignette provides additional examples of code regularly implemented in `custom_R_code`, including functions specifically that were developed for AusTraits data manipulations and are in the file `scripts\custom.R`. - -#### locations -This section provides `r stringr::str_replace(schema$metadata$elements$locations$description,"A","a")` - -Although the properties listed under each location are not part of a controlled vocabulary, it is best practice to align with in-use properties whenever possible. These can be identified by running `austraits$locations %>% distinct(location_property)`. - -An example of how a location and its properties, and the value of each property are listed (modified from Vesk_2019), is: -``` - Round Hill-Nombinnie Nature Reserve: - latitude (deg): -32.965 - longitude (deg): 146.161 - precipitation, MAP (mm): 370 - temperature, summer mean (C): 32.5 - temperature, winter mean (C): 14.2 - soil type: loamy red sands light red clays and light red browns earths - description: predominantly open Callitris glaucophylla - Eucalyptus populnea woodland - and Eucalyptus dumosa - E. socialis shrub mallee woodland - fire frequency (years): 5-20 years -``` - -#### Contexts -This section provides `r stringr::str_replace(schema$metadata$elements$contexts$description,"C","c")` - -Within the context section is a list of contextual properties, each encapsulating information read in through a different column or created through `custom_R_code` or as elements within specific `traits` (see below). - -```{r} -values <- schema$metadata$elements$contexts$elements -for (value in names(values)) { - sprintf("- **%s**: %s", value, values[[value]]) %>% writeLines() -} -``` - -If the contextual values read in are appropriate and no substitutions are required, the field `find` can be omitted, with the values from the data.csv column entered under the field `value`. The field `description` can likewise be omitted if it is redundant; for instance, if the values are simply sequential observation numbers, times of day, or taxon names (e.g. insect host plants). - -As with location, the context properties are not part of a controlled vocabulary, but it is best practice to align syntax with in-use properties whenever possible. These can be identified by running `austraits$contexts %>% distinct(context_property)`. - -An example of how the contexts for a study are formatted (modified from Crous_2013), is: - -``` -contexts: -- context_property: sampling season - category: temporal_context - var_in: month - values: - - find: AUG - value: August - description: August (late winter) - - find: DEC - value: December - description: December (early summer) - - find: FEB - value: February - description: February (late summer) -- context_property: temperature treatment - category: treatment_context - var_in: Temp-trt - values: - - value: ambient - description: Plants grown at ambient temperatures; Jan average max = 29.4 dec - C / July average min = 3.2 dec C. - - value: elevated - description: Plants grown 3 deg C above ambient temperatures. -- context_property: CO2 treatment - category: treatment_context - var_in: CO2_Treat - values: - - find: ambient CO2 - value: 400 ppm - description: Plants grown at ambient CO2 (400 ppm). - - find: added CO2 - value: 640 ppm - description: Plants grown at elevated CO2 (640 ppm); 240 ppm above ambient. -- context_property: measurement temperature - category: method_context_context - var_in: method_context - values: - - find: Measurement made at 20°C - value: 20°C - description: Measurement made at 20°C - - find: Measurement made at 25°C - value: 25°C - description: Measurement made at 25°C -``` - - -#### Traits - -This section provides `r stringr::str_replace(schema$metadata$elements$traits$description,"A","a")` - -For each trait submitted to AusTraits, there is the following information: - -```{r} -values <- schema$metadata$elements$traits$elements -for (value in names(values)) { - sprintf("- **%s**: %s", value, values[[value]]) %>% writeLines() -} -``` - -The elements `trait_name`, `entity_type`, `value_type`, `basis_of_record`, and `basis of value` are controlled vocabularies; the values for these elements must be from the list of allowable values. Those for traits are listed in the `traits.yml` [file](https://github.com/traitecoevo/austraits.build/blob/master/config/traits.yml) or [vignette](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html). For the other elements, see the [database structure](http://traitecoevo.github.io/austraits.build/articles/austraits_database_structure.html) vignette. - -The fields `replicates`, `basis_of_value`, `value_type`, `life_stage`, `basis_of_record`, and `measurement_remarks` can all be specified at the dataset level or the traits level (which overrides a dataset-level entry). In each case, they can be a fixed text value or indicate a column (within the `data.csv` file or generated through `custom_R_code`) that includes the relevant information. In addition, fields can be added to specify a specific context (most commonly a `method context`, but occasionally a `temporal context`). If such a field is added, the same name must appear in both the contexts section and for some (or all) of the traits. - -Two examples are as follows: - -``` -- var_in: LeafP.m - unit_in: mg/g - trait_name: leaf_P_per_dry_mass - entity_type: individual # fixed value - value_type: value_type_column # referencing a column - basis_of_value: measurement # fixed value - replicates: count # referencing a column - methods: Oven-dried leaf material was used for determination of total leaf nitrogen - and phosphorus. Dried ground leaf material was hot-digested in acid-peroxide before - colorimetric analysis using a flow injection system (QuikChem 8500, Lachat Instruments, - Loveland, Colorado, USA). - -``` - and - -``` -- var_in: Jmax25 - unit_in: umol/m2/s - trait_name: Jmax_per_area - entity_type: individual # fixed value - value_type: raw # fixed value - basis_of_value: measurement # fixed value - replicates: 1 # fixed value - method_context: 25C # optional field - methods: Controlled photosynthetic CO2 response curve measurements were made using - Li-Cor 6400 portable infrared gas analysers (LiCor Inc., Lincoln, NE, USA). CO2 - response curves of net CO2 assimilation (Anet) were developed at a constant temperature - (termed 'Anet-Ci curves') for intact leaves within each tree chamber. These Anet-Ci - curve measurements progressed at four to five specified leaf temperatures for - the same leaf (i.e. one leaf per chamber) in each of three seasons (early summer, - December 2010; late summer, February 2011... - -``` - - - -#### Substitutions - - -This section provides `r tolower(schema$metadata$elements$substitutions$description)` - -Substitutions are required whenever the exact word(s) used to describe a categorical trait value in AusTraits is different from the vocabulary used by the author in the `data.csv` file. It is preferable to align vocabulary using `substitutions` rather than changing the `data.csv` file. The [trait definitions file](https://github.com/traitecoevo/austraits.build/blob/master/config/traits.yml) provides a list of supported values for each trait. - -Each substitution is documented using the following elements: - -```{r} -values <- schema$metadata$elements$substitutions$values -for (value in names(values)) { - sprintf("- **%s**: %s", value, values[[value]]) %>% writeLines() -} -``` - -An example is as follows: - -``` -substitutions: -- trait_name: life_history - find: p - replace: perennial -- trait_name: plant_growth_form - find: s - replace: shrub -- ... -``` - -#### Taxonomic updates - -This section provides `r tolower(schema$metadata$elements$taxonomic_updates$description)` - -Each substitution is documented using the following elements: - -```{r} -values <- schema$metadata$elements$taxonomic_updates$values -for (value in names(values)) { - sprintf("- **%s**: %s", value, values[[value]]) %>% writeLines() -} -``` - -Algorithms within AusTraits automatically align outdated taxonomy and taxonomic synonyms to their currently accepted scientific name, so such adjustments are not documented as substitutions. - -Some examples of taxonomic updates are as follows: - -``` -taxonomic_updates: -- find: Drummondita rubroviridis - replace: Drummondita rubriviridis - reason: match_07_fuzzy. Fuzzy alignment with accepted canonical name in APC (2022-11-21) - taxonomic_resolution: Species -- find: Acacia ancistrophylla/sclerophylla - replace: Acacia sp. [Acacia ancistrophylla/sclerophylla; White_2020] - reason: match_04. Rewording taxon where `/` indicates uncertain species identification - to align with `APC accepted` genus (2022-11-10) - taxonomic_resolution: genus -- find: Polyalthia (Wyvur) - replace: Polyalthia sp. (Wyvuri B.P.Hyland RFK2632) - reason: match_15_fuzzy. Fuzzy match alignment with species-level canonical name - in `APC known` when everything except first 2 words ignored (2022-11-10) - taxonomic_resolution: Species -``` - -#### Questions - -This section provides `r tolower(schema$metadata$elements$questions)` - -An example is as follows: - -``` -questions: - questions for author: Triglochin procera has very different seed masses in the main traits spreadsheet and the field seeds worksheet. Which is correct? There are a number of species with values in the field leaves worksheet that are absent in the main traits worksheet - we have included this data into Austraits; please advise if this was inappropriate. - austraits: need to map aquatic_terrestrial onto an actual trait once one is created. -``` - -# Appendices - -## File types - -### CSV - -A comma-separated values (CSV) file is a delimited text file that uses a comma to separate values. Each line of the file is a data record. Each record consists of one or more fields, separated by commas. This is a comma format for storing tables of data in a simple text file. You can edit it in Excel or in a text editor. For more, see [here](https://en.wikipedia.org/wiki/Comma-separated_values). - -### YAML files {#yaml} - -The `yml` file extension (pronounced "YAML") [is a type structured data file](https://en.wikipedia.org/wiki/YAML), that is both human and machine readable. You can edit it in any text editor, or also in Rstudio. Generally, yml is used in situations where a table is not suitable because of variable lengths and or nested structures. It has the advantage over a spreadsheet in that the nested “headers” can have variable numbers of categories. The data under each of the hierarchical headings are easily extracted by R. - - -## Adding custom R code into metadata.yml {#custom_R_code} - -Occasionally all the changes we want to make to dataset may not fit into the prescribed workflow used in AusTraits. For example, we assume that each trait has a single unit. But there are a few datasets where data on different rows have different units. So we want to make to make some custom modifications to this particular dataset before the common pipeline of operations gets applied. To make this possible, the workflow allows for some custom R code to be run as a first step in the processing pipeline. That pipeline (in the function [`read_data_study`](https://github.com/traitecoevo/austraits/blob/master/R/steps.R#L59)) looks like: - -```{r, eval=FALSE, echo=TRUE} -data <- - read_csv(filename_data_raw, col_types = cols()) %>% - process_custom_code(metadata[["dataset"]][["custom_R_code"]])() %>% - process_parse_data(dataset_id, metadata) %>% - ...() -``` - -Note the second line. - -### Example problem - -As an example, for `Blackman_2010` we want to combine two columns to create an appropriate location variable. Here is the code that was included in [data/Blackman_2010/metadata.yml](https://github.com/traitecoevo/austraits.build/blob/master/data/Blackman_2010/metadata.yml) under `custom_R_code`. - -```{r, eval=FALSE, echo=TRUE} -data %>% mutate( - location = ifelse(location == "Mt Field" & habitat == "Montane rainforest", "Mt Field_wet", location), - location = ifelse(location == "Mt Field" & habitat == "Dry sclerophyll", "Mt Field_dry", location) -) -``` - -This is the finished solution, but to get there we did as follows: - -Generally, this code should - -- assume a single object called `data`, and apply whatever fixes are needed -- use [dplyr](https://dplyr.tidyverse.org) functions like `mutate`, `rename`, etc -- use pipes to weave together a single statement, if possible. (Otherwise you'll need a semi colon `;` at the end of each statement). -- be fully self-contained (we're not going to use any of the other remake machinery here) - -First, load an object called `data`: - -```{r, eval=FALSE, echo=TRUE} -library(readr) -library(yaml) - -data <- read_csv(file.path("data", "Blackman_2010", "data.csv"), col_types = cols(.default = "c")) -data -``` - -Second, write your code to manipulate data, like the example above - - -Third, once you have some working code, you then want to add it into your yml file under `dataset` -> `custom_R_code`. - -Finally, check it works. Let's assume you added it in. The function `metadata_check_custom_R_code` loads the data and applies the custom R code: - -```{r, eval=FALSE, echo=TRUE} -metadata_check_custom_R_code("Blackman_2010") -``` diff --git a/vignettes/austraits_overview.Rmd b/vignettes/austraits_overview.Rmd deleted file mode 100644 index 0406877a8..000000000 --- a/vignettes/austraits_overview.Rmd +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Overview of AusTraits workflow -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Overview of AusTraits workflow} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - results = "asis", - echo = FALSE, - message = FALSE, - warning = FALSE -) - -library(traits.build) - -my_kable_styling <- util_kable_styling_html -``` - -AusTraits is an open-source, harmonised database of Australian plant trait data. Traits vary in scope, including morphological attributes (e.g. leaf area, seed mass, plant height), physiological measures of performance (e.g. photosynthetic gas exchange, water-use efficiency), tissue biochemical composition (e.g. leaf nitrogen content, leaf chlorophyll content), and life history traits (e.g. seed bank location, plant growth form, salinity tolerance). - -This vignette provides an overview of the traits.build workflow that underpins AusTraits, to demonstrate our commitment to creating a reliable, reproducible resource for anyone interested in plant traits. - -## AusTraits workflow - -### Data sources - -The data in AusTraits is derived from more than 370 distinct sources, each contributed by an individual researcher, government entity (e.g. herbaria, state environment department), or NGO. Each reflects the research agenda of the individual/organisation who contributed the data - the species selected, traits measured, manipulative treatments performed, and locations sampled encompass the diversity of research interests present in Australia throughout past decades. To attain data, the AusTraits data curators have reached out to as many researchers as time permitted. This was done without explicitly soliciting datasets with specific traits; therefore, the spotty data coverage by trait or location simply represents what has been merged into AusTraits at this time. - -These datasets use different variable trait names, units and methods and have different data structures. - -### Standardising and harmonising data - -To create a single database for distribution to the research community, we developed a reproducible and transparent workflow in R for merging each dataset into a harmonised trait database, the [traits.build R package](https://github.com/traitecoevo/traits.build). The pipeline ensures the following information is standardised across all datasets in AusTraits. A `metadata` file for each study documents how the `data tables` submitted by an individual contributor are translated into the standardised terms used in the AusTraits database. - -* **taxonomic nomenclature** follows the Australian Plant Census (APC), with a pipeline to update outdated taxonomy, correct minor spelling mistakes, and align with a known genus when a full species names isn't provided. -* **trait names** are defined in the `traits.yml` file and only data for traits included in this file can be merged into AusTraits. The trait names used in the incoming dataset are mapped onto the appropriate AusTraits trait name. The current `traits.yml` file is synchronised with the [AusTraits Plant Dictionary (APD)](https://github.com/traitecoevo/APD), although additional traits can be tentatively added to the traits.yml file between APD updates. -* For **numeric traits** the `traits.yml` file includes `units` and the allowable `range` of values. All incoming data are converted to the appropriate units and data outside the range of allowable values are removed from the main AusTraits data table. -* For **categorical traits** the `traits.yml` file includes a list of allowable `values`, allowed terms for the trait. Each categorical trait value is defined in the `traits.yml` file. Lists of substitutions translate the exact syntax and terms in a submitted dataset into the values allowed by AusTraits. This ensures that for a certain trait the same `value` has an identical meaning throughout the AusTraits database. -* Site locations are recorded in decimal degrees. - -### Referencing sources and recording methods - -The `metadata` file also includes all metadata associated with the study: - -* The source information for each dataset is recorded. Most frequently, these are the primary publications derived from the dataset. -* People associated with the collection of the data are listed, including their role in the project. -* Collection methods are included. -* Fields capture value type (mean, min, max, mode, range, bin) and associated replicate numbers, basis of value (measurement, expert_score, model_derived), entity type (species, population, individual), life stage (adult, juvenile,sapling, seedling), basis of record (field, field_experiment, preserved_specimen, captive_cultivated, lab, literature), and any additional measurement remarks. -* Available data on location properties are recorded. -* Available data on plot and treatment contextual properties are recorded. -* A context field, temporal_context_id, indicates if repeat measures were made on the same individual over time. -* A context field, method_context_id, indicates if the same trait was measured using multiple methods. -* Collection date is recorded. - -### Error checking - -* The AusTraits data curator runs a series of **tests** on each data set, detailed in the [adding data vignette](http://traitecoevo.github.io/austraits.build/articles/adding_data.html). These tests are part of the traits.build R package. -* These tests identify **misaligned units**, **unrecognised taxon names**, and **unsupported categorical trait values** -* These tests also identify and eliminate *most* **duplicate data** - instances where the same numeric trait data is submitted by multiple people -* Each dataset is then compiled into a **report** which summarises metadata and plots/charts trait values in comparison to other measurements of that trait in AusTraits. The report is reviewed by the data contributor to ensure metadata is complete and data values are as expected. -* A second member of the AusTraits team double checks each dataset before it is merged into the main repository. - - -## Detailed vignettes -A series of more detailed vignettes delve into specific aspects in greater detail: - -* **[austraits.build repo file structure](http://traitecoevo.github.io/austraits.build/articles/austraits_file_structure.html)** -* **[austraits.build database structure](http://traitecoevo.github.io/austraits.build/articles/austraits_database_structure.html)** -* **[how to build AusTraits](http://traitecoevo.github.io/austraits.build/articles/austraits.build.html)** -* **[AusTraits definitions file](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html)** - -* **[how to contribute datasets to AusTraits](http://traitecoevo.github.io/austraits.build/articles/contributing_data.html)** -* **[protocol for adding new datasets to AusTraits](http://traitecoevo.github.io/austraits.build/articles/adding_data.html)** diff --git a/vignettes/config/metadata.yml b/vignettes/config/metadata.yml deleted file mode 100644 index f602091eb..000000000 --- a/vignettes/config/metadata.yml +++ /dev/null @@ -1,79 +0,0 @@ -metadata: - title: 'AusTraits: a curated plant trait database for the Australian flora' - description: "AusTraits is a transformative database, containing measurements on the traits of Australia's plant taxa, standardised from hundreds of disconnected primary sources. While this repository contains the harmonised data, the raw data and code used to build the resource are also available on the project's GitHub repository,http://traitecoevo.github.io/austraits.build. Further information on the project is available in the associated publication and at the project website https://austraits.org." - version: "4.1.0.9000" - doi: 10.5281/zenodo.3568417 - structure_URI: https://github.com/traitecoevo/austraits.build - geo_location: - geo_location_place: Australia - geodetic_datum: EPSG:4326 - language: en - related_identifiers: - - related_identifier_type: url - identifier: https://github.com/traitecoevo/austraits.build/tree/v4.1.0 - relation_type: isCompiledBy - resource_type: dataset - - related_identifier_type: doi - identifier: 10.1038/s41597-021-01006-6 - relation_type: isCitedBy - resource_type: publication-article - - related_identifier_type: doi - identifier: 10.5281/zenodo.3568417 - relation_type: isVersionOf - resource_type: dataset - references: "Falster, Gallagher et al (2021) *AusTraits, a curated plant trait database for the Australian flora*. Scientific Data 8: 254, https://doi.org/10.1038/s41597-021-01006-6" - publisher: Zenodo - publication_year: 2022 - publication_date: 27 Nov 2022 - license: - rights: CC-BY-4.0 - rights_holder: Falster, Daniel - rights_URI: https://creativecommons.org/licenses/by/4.0/ - description: Under this license, the material can be copied and redistributed in any medium or format. It can be remixed, transformed, and built upon for any purpose, even commercially. Re-users must give appropriate credit, provide a link to the license, and indicate if changes were made. Re-users may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. - subject: - subject_scheme: ANZSRC Field of Research - scheme_URI: https://linked.data.gov.au/def/anzsrc-for/2020/ - value_URI: - - https://linked.data.gov.au/def/anzsrc-for/2020/3103 - - https://linked.data.gov.au/def/anzsrc-for/2020/3104 - - https://linked.data.gov.au/def/anzsrc-for/2020/4104 - - https://linked.data.gov.au/def/anzsrc-for/2020/300703 - - https://linked.data.gov.au/def/anzsrc-for/2020/060705 - - https://linked.data.gov.au/def/anzsrc-for/2020/050202 - - https://linked.data.gov.au/def/anzsrc-for/2020/060208 - - https://linked.data.gov.au/def/anzsrc-for/2020/069902 - funding_reference: - - funder_name: Australian Research Data Commons (ARDC) - award_IRI: doi.org/10.47486/DP720 - award_number: DP720 - award_title: AusTraits, A national database on the traits of Australia's complete flora. - - funder_name: Australian Research Data Commons (ARDC) - award_IRI: doi.org/10.47486/TD044 - award_number: TD044 - award_title: AusTraits, A national database on the traits of Australia's complete flora. - - funder_name: Australian Research Council - award_IRI: purl.org/au-research/grants/arc/DE170100208 - award_number: DE170100208 - award_title: Discovery Early Career Researcher Award - - funder_name: Australian Research Council - award_IRI: purl.org/au-research/grants/arc/FT160100113 - award_number: FT160100113 - award_title: Future Fellowship - - funder_name: Australian Research Council - award_IRI: purl.org/au-research/grants/arc/FT100100910 - award_number: FT100100910 - award_title: Future Fellowship - creators: - - last_name: Falster - given_name: Daniel - ORCID: 0000-0002-9814-092X - affiliation: Evolution & Ecology Research Centre, UNSW Sydney, Australia - - last_name: Gallagher - given_name: Rachael - ORCID: 0000-0002-4680-8115 - affiliation: Hawkesbury Institute for the Environment, Western Sydney University, Australia - - last_name: Elizabeth - given_name: Wenk - ORCID: 0000-0001-5640-5910 - affiliation: Evolution & Ecology Research Centre, UNSW Sydney, Australia - contributors: .na diff --git a/vignettes/config/taxon_list.csv b/vignettes/config/taxon_list.csv deleted file mode 100644 index 84a15a19b..000000000 --- a/vignettes/config/taxon_list.csv +++ /dev/null @@ -1,12 +0,0 @@ -cleaned_name,taxonomic_reference,cleaned_scientific_name_id,cleaned_name_taxonomic_status,cleaned_name_alternative_taxonomic_status,taxon_name,taxon_id,scientific_name_authorship,taxon_rank,taxonomic_status,family,taxon_distribution,establishment_means,scientific_name,scientific_name_id -Abelia x grandiflora,APC,https://id.biodiversity.org.au/name/apni/190758,accepted,NA,Abelia x grandiflora,https://id.biodiversity.org.au/taxon/apni/51432945,(Rovelli ex André) Rehder,Species,accepted,Caprifoliaceae,NSW (naturalised),naturalised,Abelia x grandiflora (Rovelli ex André) Rehder,https://id.biodiversity.org.au/name/apni/190758 -Abelmoschus ficulneus,APC,https://id.biodiversity.org.au/name/apni/55929,accepted,NA,Abelmoschus ficulneus,https://id.biodiversity.org.au/node/apni/2897916,(L.) Wight,Species,accepted,Malvaceae,"WA, NT, Qld",native,Abelmoschus ficulneus (L.) Wight,https://id.biodiversity.org.au/name/apni/55929 -Abelmoschus manihot,APC,https://id.biodiversity.org.au/name/apni/55937,accepted,NA,Abelmoschus manihot,https://id.biodiversity.org.au/node/apni/2901085,(L.) Medik.,Species,accepted,Malvaceae,"ChI, NT, Qld (naturalised), NSW (doubtfully naturalised)",native and naturalised,Abelmoschus manihot (L.) Medik.,https://id.biodiversity.org.au/name/apni/55937 -Abelmoschus manihot subsp. manihot,APC,https://id.biodiversity.org.au/name/apni/116920,accepted,NA,Abelmoschus manihot subsp. manihot,https://id.biodiversity.org.au/node/apni/2917035,NA,Subspecies,accepted,Malvaceae,"Qld (naturalised), NSW (doubtfully naturalised)",naturalised,Abelmoschus manihot (L.) Medik. subsp. manihot,https://id.biodiversity.org.au/name/apni/116920 -Abelmoschus manihot subsp. tetraphyllus,APC,https://id.biodiversity.org.au/name/apni/55945,accepted,NA,Abelmoschus manihot subsp. tetraphyllus,https://id.biodiversity.org.au/node/apni/2892917,(Roxb. ex Hornem.) Borss.Waalk.,Subspecies,accepted,Malvaceae,"ChI, Qld (naturalised)",native and naturalised,Abelmoschus manihot subsp. tetraphyllus (Roxb. ex Hornem.) Borss.Waalk.,https://id.biodiversity.org.au/name/apni/55945 -Abelmoschus moschatus,APC,https://id.biodiversity.org.au/name/apni/55953,accepted,NA,Abelmoschus moschatus,https://id.biodiversity.org.au/node/apni/2900572,Medik.,Species,accepted,Malvaceae,"WA, NT, Qld, NSW (naturalised)",native and naturalised,Abelmoschus moschatus Medik.,https://id.biodiversity.org.au/name/apni/55953 -Abelmoschus moschatus subsp. biakensis,APC,https://id.biodiversity.org.au/name/apni/116595,accepted,NA,Abelmoschus moschatus subsp. biakensis,https://id.biodiversity.org.au/node/apni/2907435,(Hochr.) Borss.Waalk.,Subspecies,accepted,Malvaceae,WA,native,Abelmoschus moschatus subsp. biakensis (Hochr.) Borss.Waalk.,https://id.biodiversity.org.au/name/apni/116595 -Abelmoschus moschatus subsp. moschatus,APC,https://id.biodiversity.org.au/name/apni/243806,accepted,NA,Abelmoschus moschatus subsp. moschatus,https://id.biodiversity.org.au/node/apni/2911283,NA,Subspecies,accepted,Malvaceae,NSW (naturalised),naturalised,Abelmoschus moschatus Medik. subsp. moschatus,https://id.biodiversity.org.au/name/apni/243806 -Abelmoschus moschatus subsp. tuberosus,APC,https://id.biodiversity.org.au/name/apni/55961,accepted,NA,Abelmoschus moschatus subsp. tuberosus,https://id.biodiversity.org.au/node/apni/2919287,(Span.) Borss.Waalk.,Subspecies,accepted,Malvaceae,"WA, NT, Qld",native,Abelmoschus moschatus subsp. tuberosus (Span.) Borss.Waalk.,https://id.biodiversity.org.au/name/apni/55961 -Abildgaardia ovata,APC,https://id.biodiversity.org.au/name/apni/150737,accepted,NA,Abildgaardia ovata,https://id.biodiversity.org.au/node/apni/2919627,(Burm.f.) Kral,Species,accepted,Cyperaceae,"NT, Qld, NSW",native,Abildgaardia ovata (Burm.f.) Kral,https://id.biodiversity.org.au/name/apni/150737 -Abildgaardia vaginata,APC,https://id.biodiversity.org.au/name/apni/56037,accepted,nomenclatural synonym,Abildgaardia vaginata,https://id.biodiversity.org.au/node/apni/2899106,R.Br.,Species,accepted,Cyperaceae,"NT, Qld, NSW",native,Abildgaardia vaginata R.Br.,https://id.biodiversity.org.au/name/apni/56037 diff --git a/vignettes/config/traits.yml b/vignettes/config/traits.yml deleted file mode 100644 index d591951a5..000000000 --- a/vignettes/config/traits.yml +++ /dev/null @@ -1,3925 +0,0 @@ -traits: - description: Names and details of plant traits included in the AusTraits compilation - type: list - elements: - accessory_cost_mass: - description: Mass of seed accessory costs, the proportion of a fruit that does not develop into a seed - type: numeric - units: mg - label: Mass of seed accessory costs - allowed_values_min: 0.01 - allowed_values_max: 10000.0 - accessory_cost_fraction: - description: Fraction of total reproductive investment required to mature a seed that is invested in non-seed tissues - type: numeric - units: mg/mg - label: Fraction of total reproductive investment to non-seed tissues - allowed_values_min: 0.01 - allowed_values_max: 1.0 - bark_delta13C: - description: Bark carbon stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Bark carbon (C) isotope signature (delta 13C) - allowed_values_min: -50.0 - allowed_values_max: 0.0 - bark_delta15N: - description: Bark nitrogen stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Bark nitrogen (N) isotope signature (delta 15N) - allowed_values_min: -25.0 - allowed_values_max: 75.0 - bark_dry_mass_per_surface_area: - description: Bark mass per unit surface area of stem - type: numeric - units: g/cm2 - label: Bark mass per unit surface area of stem - allowed_values_min: 0.01 - allowed_values_max: 1.0 - bark_density: - description: Bark dry mass per unit bark fresh volume (bark density) - type: numeric - units: mg/mm3 - label: Bark dry mass per unit fresh bark volume - allowed_values_min: 0.1 - allowed_values_max: 1.1 - bark_C_per_dry_mass: - description: Bark carbon (C) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark carbon (C) content per unit bark dry mass - allowed_values_min: 50.0 - allowed_values_max: 750.0 - bark_N_per_dry_mass: - description: Bark nitrogen (N) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark nitrogen (N) content per unit bark dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - bark_P_per_dry_mass: - description: Bark phosphorus (P) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark phosphorus (P) content per unit bark dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - bark_K_per_dry_mass: - description: Bark potassium (K) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark potassium (K) content per unit bark dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - bark_Al_per_dry_mass: - description: Bark aluminium (Al) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark aluminium (Al) content per unit bark dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - bark_B_per_dry_mass: - description: Bark boron (B) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark boron (B) content per unit bark dry mass - allowed_values_min: 0.001 - allowed_values_max: 1.0 - bark_Ca_per_dry_mass: - description: Bark calcium (Ca) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark calcium (Ca) content per unit bark dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - bark_Cu_per_dry_mass: - description: Bark copper (Cu) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark copper (Cu) content per unit bark dry mass - allowed_values_min: 0.0001 - allowed_values_max: 1.0 - bark_Fe_per_dry_mass: - description: Bark iron (Fe) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark iron (Fe) content per unit bark dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - bark_Mg_per_dry_mass: - description: Bark magnesium (Mg) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark magnesium (Mg) content per unit bark dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - bark_Mn_per_dry_mass: - description: Bark manganese (Mn) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark manganese (Mn) content per unit bark dry mass - allowed_values_min: 0.001 - allowed_values_max: 1.0 - bark_Na_per_dry_mass: - description: Bark sodium (Na) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark sodium (Na) content per unit bark dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - bark_S_per_dry_mass: - description: Bark sulphur (S) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark sulphur (S) content per unit bark dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - bark_Zn_per_dry_mass: - description: Bark zinc (Zn) content per unit bark dry mass - type: numeric - units: mg/g - label: Bark zinc (Zn) content per unit bark dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - bark_morphology: - description: Description of bark morphology - type: categorical - label: Bark morphology - allowed_values_levels: - eucalypt_box: Eucalypts with "Box" type bark (including Corymbia and Angophora) - eucalypt_gum: Eucalypts with "Gum" type bark (including Corymbia and Angophora) - eucalypt_stocking: Eucalypts with "Gum" type bark above a rough barked stocking (including Corymbia and Angophora) - eucalypt_ironbark: Eucalypts with "Ironbark" type bark (including Corymbia and Angophora) - eucalypt_peppermint: Eucalypts with "Peppermint" type bark (including Corymbia and Angophora) - eucalypt_stringybark: Eucalypts with "Stringy" type bark (including Corymbia and Angophora) - eucalypt_ribbonbark: Eucalypts with "Gum" type bark that sheds in ribbons (including Corymbia and Angophora) - bark_thickness: - description: Thickness of the bark of the stem - type: numeric - units: mm - label: Bark thickness - allowed_values_min: 0.01 - allowed_values_max: 50.0 - bark_thickness_index: - description: Thickness of the bark (2 times a single thickness measure) of the stem divided by stem diameter, adjust for increasing bark thickness with increasing stem diameter. (based on Lawes) - type: numeric - units: mm/mm - label: Scaled bark thickness - allowed_values_min: 0.001 - allowed_values_max: 1 - bark_ash_per_dry_mass: - description: Bark ash content per dry mass, where bark ash is the component of the bark remaining after combustion. - type: numeric - units: g/g - label: Bark ash content per dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - bark_cellulose_per_dry_mass: - description: Bark cellulose per unit bark dry mass - type: numeric - units: mg/mg - label: Bark cellulose per unit bark dry mass - allowed_values_min: 0.1 - allowed_values_max: 1.0 - bark_lignin_per_dry_mass: - description: Bark lignin per unit bark dry mass - type: numeric - units: mg/mg - label: Bark lignin per unit bark dry mass - allowed_values_min: 0.01 - allowed_values_max: 1.0 - bark_tannin_per_dry_mass: - description: Bark tannins (polyphenols) per unit bark dry mass - type: numeric - units: mg/mg - label: Bark tannins (polyphenols) per unit bark dry mass - allowed_values_min: 0.00001 - allowed_values_max: 1.0 - branch_mass_fraction: - description: Fraction of plant dry mass comprised of branch material - type: numeric - units: mg/mg - label: Fraction of plant dry mass comprised of branch material - allowed_values_min: 0.00 - allowed_values_max: 1.0 - sprout_depth: - description: Depth of resprouting shoots - type: numeric - units: mm - label: Depth below ground (negative number) or height above ground (positive number) from which buds emerge following a disturbance (i.e. fire) - allowed_values_min: -100 - allowed_values_max: 100 - plant_tolerance_calcicole: - description: Dichotonmous variable, defining plants as calcifuge (intolerant of basic soils) versus calcicole (tolerant of basic soils, such as calcareous sands and limestone derived soils) - type: categorical - label: Calcicole versus calcifuge status - allowed_values_levels: - calcicole: tolerant of basic soils, such as calcareous sands and limestone derived soils - calcifuge: intolerant of basic soils - leaf_carotenoid_per_area: - description: Leaf carotenoid content per unit leaf area - type: numeric - units: umol/m2 - label: Leaf carotenoid content per unit leaf area - allowed_values_min: 10.0 - allowed_values_max: 1000.0 - leaf_carotenoid_per_dry_mass: - description: Leaf carotenoid content per unit leaf dry mass - type: numeric - units: mmol/kg - label: Leaf carotenoid content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 10.0 - cell_cross-sectional_area: - description: Cell cross sectional area - type: numeric - units: um2 - label: Cell cross sectional area - allowed_values_min: 100 - allowed_values_max: 10000 - leaf_epidermis_Ca_per_fresh_mass: - description: Ca content of epidermal cells - type: numeric - units: umol/g - label: Ca content of epidermal cells - allowed_values_min: 1 - allowed_values_max: 500 - leaf_hypodermis_Ca_per_fresh_mass: - description: Ca content of hypodermis cells - type: numeric - units: umol/g - label: Ca content of hypodermis cells - allowed_values_min: 1 - allowed_values_max: 500 - leaf_internal_parenchyma_Ca_per_fresh_mass: - description: Ca content of internal parenchyma cells - type: numeric - units: umol/g - label: Ca content of internal parenchyma cells - allowed_values_min: 1 - allowed_values_max: 500 - leaf_palisade_mesophyll_Ca_per_fresh_mass: - description: Ca content of palisade mesophyll cells - type: numeric - units: umol/g - label: Ca content of palisade mesophyll cells - allowed_values_min: 1 - allowed_values_max: 100 - leaf_sclerenchyma_Ca_per_fresh_mass: - description: Ca content of sclerenchyma cells - type: numeric - units: umol/g - label: Ca content of sclerenchyma cells - allowed_values_min: 1 - allowed_values_max: 100 - leaf_spongy_mesophyll_Ca_per_fresh_mass: - description: Ca content of spongy mesophyll cells - type: numeric - units: umol/g - label: Ca content of spongy mesophyll cells - allowed_values_min: 1 - allowed_values_max: 1000 - leaf_epidermis_P_per_fresh_mass: - description: P content of epidermal cells - type: numeric - units: umol/g - label: P content of epidermal cells - allowed_values_min: 0 - allowed_values_max: 10 - leaf_hypodermis_P_per_fresh_mass: - description: P content of hypodermis cells - type: numeric - units: umol/g - label: P content of hypodermis cells - allowed_values_min: 0 - allowed_values_max: 10 - leaf_internal_parenchyma_P_per_fresh_mass: - description: P content of internal parenchyma cells - type: numeric - units: umol/g - label: P content of internal parenchyma cells - allowed_values_min: 0 - allowed_values_max: 10 - leaf_palisade_mesophyll_P_per_fresh_mass: - description: P content of palisade mesophyll cells - type: numeric - units: umol/g - label: P content of palisade mesophyll cells - allowed_values_min: 0 - allowed_values_max: 30 - leaf_rubisco_per_leaf_dry_mass: - description: Concentration of Rubisco - type: numeric - units: mg/g - label: N content of Rubisco - allowed_values_min: 5 - allowed_values_max: 50 - leaf_rubisco_N_per_total_leaf_N: - description: Percentage of N accounted for by Rubisco - type: numeric - units: g/g - label: Percentage of N accounted for by Rubisco - allowed_values_min: 5 - allowed_values_max: 50 - leaf_sclerenchyma_P_per_fresh_mass: - description: P content of sclerenchyma cells - type: numeric - units: umol/g - label: P content of sclerenchyma cells - allowed_values_min: 0 - allowed_values_max: 10 - leaf_spongy_mesophyll_P_per_fresh_mass: - description: P content of spongy mesophyll cells - type: numeric - units: umol/g - label: P content of spongy mesophyll cells - allowed_values_min: 0 - allowed_values_max: 30 - leaf_thylakoid_N_per_total_leaf_N: - description: Percentage of N accounted for by thylakoid proteins - type: numeric - units: g/g - label: Percentage of N accounted for by thylakoid proteins - allowed_values_min: 5 - allowed_values_max: 30 - leaf_chlorophyll_per_area: - description: Sum of chlorophyll A and B per leaf area - type: numeric - units: umol/m2 - label: Sum of chlorophyll A and B per leaf area - allowed_values_min: 10 - allowed_values_max: 2000 - leaf_chlorophyll_A_per_area: - description: Leaf chlorophyll A content per leaf area - type: numeric - units: umol/m2 - label: Leaf chlorophyll A content per leaf area - allowed_values_min: 50 - allowed_values_max: 2000 - leaf_chlorophyll_B_per_area: - description: Leaf chlorophyll B content per leaf area - type: numeric - units: umol/m2 - label: Leaf chlorophyll B content per leaf area - allowed_values_min: 10 - allowed_values_max: 1000 - leaf_chlorophyll_per_dry_mass: - description: Leaf chlorophyll content per unit leaf dry mass - type: numeric - units: mmol/kg - label: Leaf chlorophyll content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 15.0 - leaf_chlorophyll_A_per_dry_mass: - description: Leaf chlorophyll A content per unit leaf dry mass - type: numeric - units: mmol/kg - label: Leaf chlorophyll A content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 10.0 - leaf_chlorophyll_B_per_dry_mass: - description: Leaf chlorophyll B content per unit leaf dry mass - type: numeric - units: mmol/kg - label: Leaf chlorophyll B content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - leaf_chlorophyll_A_B_ratio: - description: Ratio of leaf chlorophyll A to chlorophyll B - type: numeric - units: umol/umol - label: Ratio of leaf chlorophyll A to chlorophyll B - allowed_values_min: 0.1 - allowed_values_max: 6 - atmospheric_CO2_concentration: - description: Ambient CO2 concentration (external CO2 concentration) - type: numeric - units: umol{CO2}/mol - label: ambient CO2 concentration - allowed_values_min: 50.0 - allowed_values_max: 1000.0 - leaf_chloroplast_CO2_concentration: - description: CO2 concentration inside chloroplasts - type: numeric - units: umol{CO2}/umol - label: CO2 concentration inside chloroplasts - allowed_values_min: 50.0 - allowed_values_max: 1000.0 - leaf_intercellular_CO2_concentration_at_Aambient: - description: CO2 concentration in interstitial spaces under ambient conditions - type: numeric - units: umol{CO2}/mol - label: internal CO2 concentration under ambient conditions - allowed_values_min: 50.0 - allowed_values_max: 1300.0 - leaf_intercellular_CO2_concentration_at_Amax: - description: CO2 concentration in interstitial spaces during Amax measurement - type: numeric - units: umol{CO2}/mol - label: internal CO2 concentration during Amax measurement - allowed_values_min: 50.0 - allowed_values_max: 2100.0 - leaf_intercellular_CO2_concentration_at_Asat: - description: CO2 concentration in interstitial spaces during Asat measurement - type: numeric - units: umol{CO2}/mol - label: internal CO2 concentration during Asat measurement - allowed_values_min: 10.0 - allowed_values_max: 1300.0 - leaf_intercellular_CO2_concentration_to_atmospheric_CO2_concentration_ratio: - description: Ratio of internal to external CO2 concentrations - type: numeric - units: umol{CO2_internal}/umol{CO2_ambient} - label: Ratio of internal to external CO2 concentrations - allowed_values_min: 0.0 - allowed_values_max: 1.3 - competitive_stratum: - description: Categorical descriptions of a taxon's relative stature in its community, used to assess competitive heirarchies within a community (definition based on Keith 2007, Gosper 2012) - type: categorical - label: Competitive stratum - allowed_values_levels: - ground: Graminoids, herbs and ferns reaching maximum heights of c. 0.2–1 m - mid: Shrubs reaching maximum heights of c. 1–2 m - upper: Tall shrubs reaching maximum heights of c. 3–5 m - post_fire_ephemeral: Taxa that avoid competition with other strata by rapidly completing their life cycle after fire; a sub-category of 'ground' - cotyledon_function: - description: Cotyledon function - type: categorical - label: Cotyledon function - allowed_values_levels: - foliaceous: Cotyledons are photosynthetic and function as leaves. - reserve: Cotyledons function as energy reserve organs. - cotyledon_position: - description: Binary variable distinguishing between seedlings where the cotyledon remains within the seed coat versus emerges from the seed coat at germination. - type: categorical - label: Cotyledon position at germination - allowed_values_levels: - cryptocotylar: A type of seed germination in which the cotyledons remain within the seed coat at germination. - phanerocotylar: A type of seed germination in which the cotyledons emerge from the seed coat. - cotyledon_type: - description: Binary variable distinguishing between glabrous versus hairy cotyledons - type: categorical - label: Cotyledon type - allowed_values_levels: - glabrous: Cotyledon lacks hairs - hairy: Cotyledon has hairs - seedling_germination_location: - description: Binary variable distinguishing between seedlings that germinate above versus below ground. - type: categorical - label: Seedling germination location - allowed_values_levels: - epigeal: Germinant with one or more cotyledons emerging aboveground. - hypogeal: Germinant with all cotyledons remaining belowground. - establishment_light_environment_index: - description: The minimum light environment required by seedlings for establishment, scaled from 0 to 8. 0 indicates `No direct light, extremely low levels of transmitted/reflected light, such as beneath dense fern or palm fronds close to ground level.`; 0.5 indicates `No direct light, very low levels of transmitted light`; 1 indicates `Rare or no exposure to direct light from lateral sources, and low levels of transmitted light.`; 2 indicates `Low lateral light and low–moderate transmitted light with <10% of inverted cone exposed to lateral sources of direct light, plus low to moderate levels of transmitted light`; 3 indicates `Low-moderate lateral & moderate transmitted light, wit <5% exposure of the focal crown to vertical direct light, and <15 % of inverted cone exposed to lateral sources of direct light, plus moderate transmitted light.`; 4 indicates `Moderate lateral light & moderate–high transmitted light, with 5 – 10% exposure of focal crown to direct vertical light, plus 2-20% exposure of inverted cone to lateral sources of direct light, plus moderate to high levels of transmitted light.`; 5 indicates `Moderate vertical light and moderate–high lateral light, with 5 – 20% exposure of focal crown to direct vertical light, plus one or both of, i. 10-40% exposure of 90-degree inverted cone to lateral sources of direct light, ii. exposure to high levels of transmitted light`; 6 indicates `Moderate-High vertical and high lateral light, with 10-30% of vertical projection of the crown exposed to vertical light, and lateral light exposure for > 40% of 90-degree inverted cone`, 7 indicates `High vertical and lateral light, with 30-80% of vertical projection of the crown exposed to vertical light, or exposure to lateral sources of direct light for > 60 % of a 90-degree inverted cone encompassing the focal crown.`; 8 indicates `Full light exposure of crown, with > 80% of the vertical projection of the crown exposed to vertical light.` (reference, Wells 2012). - type: numeric - units: '{dimensionless}' - label: Canopy light environment required for seedling establishment - allowed_values_min: 0 - allowed_values_max: 8 - reproductive_light_environment_index: - description: The minimum light environment required by seedlings for reproduction, scaled from 0 to 8. 0 indicates `No direct light, extremely low levels of transmitted/reflected light, such as beneath dense fern or palm fronds close to ground level.`; 0.5 indicates `No direct light, very low levels of transmitted light`; 1 indicates `Rare or no exposure to direct light from lateral sources, and low levels of transmitted light.`; 2 indicates `Low lateral light and low–moderate transmitted light with <10% of inverted cone exposed to lateral sources of direct light, plus low to moderate levels of transmitted light`; 3 indicates `Low–moderate lateral & moderate transmitted light, wit <5% exposure of the focal crown to vertical direct light, and <15 % of inverted cone exposed to lateral sources of direct light, plus moderate transmitted light.`; 4 indicates `Moderate lateral light & moderate–high transmitted light, with 5 – 10% exposure of focal crown to direct vertical light, plus 2-20% exposure of inverted cone to lateral sources of direct light, plus moderate to high levels of transmitted light.`; 5 indicates `Moderate vertical light and moderate–high lateral light, with 5 – 20% exposure of focal crown to direct vertical light, plus one or both of, i. 10-40% exposure of 90-degree inverted cone to lateral sources of direct light, ii. exposure to high levels of transmitted light`; 6 indicates `Moderate-High vertical and high lateral light, with 10-30% of vertical projection of the crown exposed to vertical light, and lateral light exposure for > 40% of 90-degree inverted cone`, 7 indicates `High vertical and lateral light, with 30-80% of vertical projection of the crown exposed to vertical light, or exposure to lateral sources of direct light for > 60 % of a 90-degree inverted cone encompassing the focal crown.`; 8 indicates `Full light exposure of crown, with > 80% of the vertical projection of the crown exposed to vertical light.` (reference, Wells 2012). - type: numeric - units: '{dimensionless}' - label: Canopy light environment required for reproduction - allowed_values_min: 0 - allowed_values_max: 8 - leaf_cuticle_thickness_adaxial: - description: Thickness of the upper cuticle - type: numeric - units: um - label: Upper cuticle thickness - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_cuticle_thickness_abaxial: - description: Thickness of the lower cuticle - type: numeric - units: um - label: Lower cuticle thickness - allowed_values_min: 0.1 - allowed_values_max: 100.0 - diaspore_dry_mass: - description: Dry mass of a plant's dispersal unit, including the seed and any dispersal appendages; synonymous with dispersule and often synonymous with the term disseminule. (Notes, Data mapped onto this trait have been very explicitly defined as a 'diaspore'. There will be additional values mapped as either 'seed_dry_mass' or 'fruit_dry_mass' that are also diaspores, but have identified only as being a 'seed' or 'fruit'. In addition, it is expected that some observations in AusTraits mapped onto 'seed_dry_mass' will actually include both the seed and some dispersal tissue, if the two cannot easily be separated.) - type: numeric - units: mg - label: Dry mass of a plant's dispersal unit - allowed_values_min: 0.00001 - allowed_values_max: 1000000.0 - dispersal_appendage: - description: External appendages of the dispersule presumed to facilitate dispersal away from the parent plant. - type: categorical - label: Appendage of propagule which facilitates dispersal - allowed_values_levels: - aril: Fleshy outgrowth of a seed, that often attracts animals like birds or ants. - bristles: Bristle-like projections. Trait value includes awns, which are slender, bristle-like projections in some grasses. - bracts_and_glumes: When the bracts below the inflorescence are persistent and functional as dispersal appendages. This includes persistent glumes, the modified membranous bracts in the family Poaceae that surround the spikelet of a grass. - elaiosome: Fleshy (often fatty) appendage on seeds that attracts ants. - fleshy_reward: Broad term that includes a suite of appendages that provides a fleshy reward to attract dispersers; highest level of resolution available for some studies. - floating_seed: Seed that is dispersed by floating on water - flotation_scales: Scales enhancing flotation, thereby assisting with dispersal. - floral_parts: When some plant floral parts (the petals, sepals, or style) are persistent and aid in seed and fruit dispersal. This is a broad term not explicitly suggesting a dispersal mechanism. - hairs: Modified hairs that aid in seed dispersal. - hooks: A rear-facing point, as in a fish hook that aids in seed and fruit dispersal. - inflated_parts: When some part of the seed, fruit, or associated tissues is inflated, aiding in seed or fruit dispersal. - none: When a fruit and associated tissues lack any dispersal appendages. Includes exarillate and taxa with explicitly deciduous pappus. - pappus: The calyx in Asteraceae that has been modified into bristles, hairs, scales or awns that are attached to the apex of the fruit. Taxa assigned this trait value have a persistent pappus that aids in dispersal, often, but not exclusively through wind dispersal. The pappus can also assist with flotation. - plumose: Fruit, seed, style, or other floral component that is plumose and assists with dispersal. - receptacle: Fleshy receptacle that aids in dispersal. - sarcotesta: Fleshy seed coat that aids in dispersal. - spines: Spines that aid in dispersal. - tumbleweed: Plant growth form, whereby the aboveground plant component detaches from the roots and is readily rolled by wind across the ground, aiding in dispersal. - wings: Referring to wing-like seed extensions that aid in wind dispersal. - wing_or_plume: Broad term that includes a suite of appendages that aid in wind dispsersal; highest level of resolution available for some studies. - dispersal_syndrome: - description: Plant dispersal syndromes are generally assigned to species based on suites of diaspore characteristics associated with specific mechanisms of dispersal. Trait values are mostly given as the formal dispersal syndromes ending in 'chory', a suffix meaning 'a specified method of plant dispersal' - type: categorical - label: Dispersal syndrome - allowed_values_levels: - anemochory: Diaspore is dispersed by wind. (synonym, wind) - anthrochory: Diaspore is dispersed by humans, either intentionally or unintentionally. - atelochory: Diaspore dispersal is prevented. (synonym, antitelochory) - autochory: Diaspore is dispersed by methods originating from the parent plant or diaspore. - ballistic: Seeds are launched away from the plant by explosion as soon as the seed capsule opens. - barochory: Diaspores are dispersed without assistance. (synonym, gravity, mobile, unassisted) - chamaechory: Diaspore is dispersed by being rolled along ground surface by wind. - endozoochory: Diaspore is ingested by animals, either intentionally or accidentally, then transported before being deposited. (synonym, ingestion) - epizoochory: Diaspore is dispersed by accidentally attaching itself to the outside of an animal vector. (synonym, ectozoochory, exozoochory) - hydrochory: Diaspore is dispersed on the surface of water. (synonym, water) - myrmecochory: Diaspores have elaiosomes (specialised nutritious appendages) that make them attractive for capture, transport and use by ants or related insects. - undefined: Dispersal mechanism unknown. (synonym, unknown) - zoochory: Diaspore is dispersed by animals, by an undescribed mechanism. - dispersal_unit: - description: Plant dispersal unit, broadly defined by taxonomic group. - type: categorical - label: Dispersal unit - allowed_values_levels: - fruit: Dispersal unit is a fruit. - seed: Dispersal unit is a seed. - spore: Dispersal unit is a spore. - dispersers: - description: Dominant diaspore dispersal agents. Terms include both species and more general dispersal agent groupings, matching the different levels of resolution provided by researchers. - type: categorical - label: Diaspore dispersal agents - allowed_values_levels: - indigenous_people: Indigenous people disperse the fruit through traditional practises. - ants: Ants are an important fruit dispersal agent. - bats: Bats are an important fruit dispersal agent. - birds: Birds are an important fruit dispersal agent. - cassowaries: Cassowaries, in contrast to smaller flying birds, are an important fruit dispersal agent. - floods: Floods are an important fruit dispersal agent. - flying_vertebrates: Flying birds and bats are important fruit dispersal agents. - flying_foxes: Flying foxes are an important fruit dispersal agent. - garden_refuse: Fruit are dispersed through garden refuse. - insects: Insects are an important fruit dispersal agent. - invertebrates: Invertebrates are an important fruit dispersal agent. - mammals: Mammals are an important fruit dispersal agent. - non-flying_vertebrates: Mammals and non-flying birds (i.e. cassowary, emu) are important fruit dispersal agents. - passive: There is no special dispersal agent. - rain: Rain is an important fruit dispersal agent; the diaspore is propelled by action of rain on plant structure or the wetting of the plant structure by rain or dew. - rodents: Rodents are an important fruit dispersal agent. - vehicles: Vehicles are an important dispersal agent, such as through mud on tyres. - vertebrates: Vertebrates are an important fruit dispersal agent. - wind: Wind is an important fruit dispersal agent. - water: Water is an important fruit dispersal agent. - water_currents: Water currents are an important fruit dispersal agent; the diaspore may be either floating or submerged in fresh/saltwater currents. - seed_dormancy_class: - description: Classification for seed dormancy - type: categorical - label: Dormancy type - allowed_values_levels: - morphophysiological_dormancy: Seeds exhibit morphophysiological dormancy - non_dormant: Seeds are non-dormant - physical_dormancy: Seeds exhibit physical dormancy - physiological_dormancy: Seeds exhibit physiological dormancy - embryo_colour: - description: Binary variable distinguishing between embryos that are green versus colourless - type: categorical - label: Embryo colour - allowed_values_levels: - colourless: Colourless embryo - green: Green embryo - leaf_epidermal_cell_density_abaxial: - description: Epidermal cell density on the lower leaf surface - type: numeric - units: '{count}/mm2' - label: Epidermal cell density on the lower leaf surface - allowed_values_min: 100 - allowed_values_max: 10000 - leaf_epidermal_cell_density_adaxial: - description: Epidermal cell density on the upper leaf surface - type: numeric - units: '{count}/mm2' - label: Epidermal cell density on the upper leaf surface - allowed_values_min: 100 - allowed_values_max: 10000 - leaf_epidermal_cell_density_both_sides: - description: Epidermal cell density averaged across the upper and lower leaf surfaces - type: numeric - units: '{count}/mm2' - label: Epidermal cell density averaged across the upper and lower leaf surfaces - allowed_values_min: 100 - allowed_values_max: 10000 - leaf_epidermis_thickness: - description: Thickness of the epidermis, leaf surface not specified - type: numeric - units: um - label: Thickness of the epidermis, leaf surface not specified - allowed_values_min: 1.0 - allowed_values_max: 100.0 - leaf_epidermis_thickness_adaxial: - description: Thickness of the epidermis on the upper leaf surface - type: numeric - units: um - label: Thickness of the epidermis on the upper leaf surface - allowed_values_min: 1.0 - allowed_values_max: 100.0 - leaf_epidermis_thickness_abaxial: - description: Thickness of the epidermis on the lower leaf surface - type: numeric - units: um - label: Thickness of the epidermis on the lower leaf surface - allowed_values_min: 1.0 - allowed_values_max: 100.0 - fire_exposure_level: - description: A trait to capture different mechanisms plants use to avoid or experience fire. - type: categorical - label: Plant's fire avoidance or exposure strategies - allowed_values_levels: - fire_not_relevant: Plant never affected by fire (for aquatic taxon). - fire_avoidance_among_rocks: Plants rarely experience fires because their habitat is restricted to rocky outcrops or rock pavement. - fire_response: - description: Distinguishes between mature plants that are killed versus resprout. Species where at least 70% of plants resprout following a fire that causes 100% leaf scorch are designated `resprouters`, while those where fewer than 30% of plants resprout are designated as `fire killed`. Species with an intermediate response have a mixed fire response, and are coded as `fire_killed resprouts`. (Gill & Bradstock 1992, Clarke 2015). This trait is narrowly applicable only to taxa that experience fire; see the trait `fire_exposure_level` for trait values related to species whose `fire strategy` is to avoid fire. - type: categorical - label: Resprouts or is killed by fire - allowed_values_levels: - fire_killed: Fewer than 30% of plants resprout following a hot fire. - resprouts: More than 70% of plants resprout following a hot fire. - partial_resprouting: Between 30-70% of plants resprout following a hot fire. - no_significant_fire_response: Plants are rarely killed by a moderate-intensity fire, but also do not resprout. - unknown: Fire status assessed, but unknown. - fire_response_detailed: - description: Detailed information distinguishing between plants that are killed by fire and resprout following fire - type: categorical - label: Resprouts or is killed by fire - allowed_values_levels: - fire_killed: Plants killed by hot fires - weak_resprouting: Plant shows weak resprouting following fire; unless an author defines a study-specific cut-off, this term is applied to populations where some individuals, but fewer than 30% of individuals resprout following a fire. - intermediate_resprouting: Plant shows intermediate resprouting following fire; unless an author defines a study-specific cut-off, this term is applied to populations where between 30-70% of individuals resprout. - strong_resprouting: Plant shows strong resprouting following fire; unless an author defines a study-specific cut-off, this term is applied to populations where > 70% of individuals resprout. - fire_response_juvenile: - description: Variable summarising how juvenile plants respond to fire - type: categorical - label: Juvenile plants resprout or killed by file - allowed_values_levels: - juvenile_fire_killed: Few to no juvenile plants resprout following fire - juvenile_resprout: More than 50% of juvenile plants survive and resprout following fire - juvenile_moderate_fire_killed: 25-50% of juvenile plants resprout following fire - fire_response_on_maturity: - description: Variable summarising how plants' maturity status changes following fire. - type: categorical - label: Plants' maturity status after fire - allowed_values_levels: - remain_mature: Mature plants remain mature following fire. - mature_to_juvenile: Mature plants become juvenile following fire. - mature_do_not_resprout: Mature plants do not resprout following fire. - post_fire_recruitment: - description: Distinguishes between plants that do and do not have fire-cued seeding. - type: categorical - label: Fire-cued seeding - allowed_values_levels: - post_fire_recruitment: Plants that germinate robustly following fire. - post_fire_recruitment_moderate: Plants with a moderate number of seedlings present post-fire. - no_post_fire_recruitment: Plants that do not show increased seeding following fire. - fire_and_establishing: - description: Trait capturing post-fire time frame during which species establishes. The selection of trait values does not distinguish between intermediate age and mature vegetation, as this level of detail is rarely provide in datasets. - type: categorical - label: Post-fire establishment - allowed_values_levels: - establish_anytime: Plants can establish immediately after fire and in later years as vegetation ages, right thru to mature and over-mature vegetation (assuming suitable seasonal conditions). - establish_just_after_fire_only: Plants establish immediately after a fire (within the first 2 seasons, and usually within the first season), but cannot continue recruitment as the vegetation ages further, unable to establish in mature vegetation. - establish_intermediate_to_mature_vegetation_only: Plants unable to establish immediately after fire (within the first season or two), but can establish in older vegetation (including mature to over-mature vegetation), requires some environmental charateristics not found in vegetation straight after fires. - fire_flame_duration: - description: Flame duration for a single leaf. Time from the first visible flame until no more flames could be seen (seconds) - type: numeric - units: s - label: Flame duration for a single leaf. - allowed_values_min: 0.1 - allowed_values_max: 200 - fire_fuel_bed_bulk_density: - description: Fuel bed bulk density. This is the mass of the fuel bed, divided by the fuel bed volumne. - type: numeric - units: g/cm3 - label: Fuel bed bulk density. - allowed_values_min: 0.001 - allowed_values_max: 1.0 - fire_fuel_consumption: - description: Proportion of fuel that was consumed by fire. - type: numeric - units: g/g - label: Proportion of fuel that was consumed by fire - allowed_values_min: 1 - allowed_values_max: 100 - fire_rate_of_spread: - description: Rate of spread. How fast the fire moves across the landscape. - type: numeric - units: cm/s - label: Rate of spread. - allowed_values_min: 0.01 - allowed_values_max: 1.0 - fire_smoulder_duration: - description: Smoulder duration for a single leaf. Time from the end of the last visible flame until the glowing phase died out (seconds) - type: numeric - units: s - label: Smoulder duration for a single leaf. - allowed_values_min: 0.1 - allowed_values_max: 1000 - fire_total_burn_duration: - description: Sum of flame duration and smoulder duration for a single leaf. - type: numeric - units: s - label: Sum of flame duration and smoulder duration for a single leaf. - allowed_values_min: 0.1 - allowed_values_max: 1500 - fire_time_to_ignition: - description: Time to ignition for a single leaf. Time from ignition source contacting leaf (or other material) until ignition occurs. - type: numeric - units: s - label: Time to ignition - allowed_values_min: 0.1 - allowed_values_max: 100 - flower_colour: - description: Flower colour, with six possible outcomes - type: categorical - label: Flower colour - allowed_values_levels: - blue_purple: blue or purple - green: green flower - pink: pink flower - red_brown: red or brown flower - white_cream: white or cream flower - yellow_orange: yellow orange flower - flower_count_maximum: - description: Maximum flower number produced - type: numeric - units: '{count}' - label: Maximum flower number - allowed_values_min: 0 - allowed_values_max: 1000000 - flower_N_per_dry_mass: - description: Flower nitrogen (N) content per unit flower dry masshermaphrodite - type: numeric - units: mg/g - label: Flower nitrogen (N) content per unit flower dry mass - allowed_values_min: 0.5 - allowed_values_max: 100.0 - flowering_time: - description: Months during which taxon has open (anthetic) flowers; keyed as a sequences of 12 Ns (not flowering) and Ys (flowering) starting with January - type: categorical - label: Range of flowering period - flower_structural_sex_type: - description: Structural flower sex type. - notes: Trait that captures floral sex, distinguishing among three states, bisexual, incompletely unisexual, and unisexual, as defined by Schönenberger et al. (2020) for their character '100. Floral structural sex (D1)'. (See "sex_type" for plant sex type) - type: categorical - label: Floral structural sex - allowed_values_levels: - bisexual: Hermaphrodite; flowers with both male and female reproductive organs - incompletely_unisexual: Male flowers with pistillode and/or female flowers with staminodes - unisexual: Flowers with either male or female reproductive organs - flower_ovary_position: - description: The ovary is the part of the gynoecium where the ovules are produced. The ovary may be located on the receptacle and thus be positioned above the insertion level of the remaining floral organs (i.e., the ovary is superior and the flower is hypogynous). Alternatively, the ovary may be embedded in the receptacle and therefore be located below the insertion level of the remaining floral organs (i.e., the ovary is inferior and the flower is epigynous). Flowers with a hypanthium may either have a superior ovary (perigyny; e.g., many Rosaceae) or an inferior ovary (epiperigyny). It is also possible that the ovary is inferior to a certain degree only, such as half-inferior, if the receptacle is surrounding the ovary to its mid-level. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '102. Ovary position (D1)') - type: categorical - label: Ovary position - allowed_values_levels: - inferior: Flower with inferior ovary, where the ovary is embedded in the receptacle and therefore located below the insertion level of the remaining floral organs - superior: Flower with superior ovary, where the ovary is positioned above the insertion level of the remaining floral organs - half_inferior: Flower where the receptacle is surrounded by the ovary to its mid-level - one_quarter_inferior: Flower where the receptacle surrounds up to one quarter of the ovary - three_quarters_inferior: Flower where the receptacle surrounds more than three quarters of the ovary - flower_perianth_parts_count: - description: The total number of perianth parts, including sepals, petals, or any form of tepal. A value of zero was scored when the perianth is absent. In flowers with perianth whorls fused along their complete length (e.g., Convolvulus), perianth parts are counted based on merism (e.g., if a calyx has 5 distinct sepals and the corolla is entirely fused, then the corolla is often interpreted to consist of five fused petals), anatomy (e.g., number of vascular traces), development (e.g., number of primordia), or comparison with closely related taxa. (Definition derived from Schoenenberger et al. (2020) for their character '201. Number of perianth parts (C1)') - type: numeric - units: '{count}' - label: Number of perianth parts - allowed_values_min: 0 - allowed_values_max: 1000 - flower_perianth_fusion: - description: Fusion of perianth organs (congenital or postgenital) at anthesis, recorded on a continuous scale, from 0 (free parts) to 1 (parts fused along their entire length). Partial fusion was recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the length of perianth parts). In case of multiple whorls, this trait records within-whorl fusion. For example, if organs within each whorl are fused along their entire length, a trait value of 1 is recorded. In cases where organs of two whorls are fused into a common tubular structure, such as frequently observed in monocots (e.g., Polygonatum), the perianth is considered to be fused. If the two (or more) whorls differed in their extent of fusion, a range of trait values may be recorded. For example, if the calyx is only basally fused, up to 10% of its length, but the corolla is entirely fused, a range of 0.1 to 1 is recorded as the trait value for the species. (Definition derived from Schoenenberger et al. (2020) for their character '204. Fusion of perianth (C1)') - type: numeric - units: '{dimensionless}' - label: Fusion of perianth - allowed_values_min: 0 - allowed_values_max: 1 - flower_perianth_symmetry: - description: Trait capturing the symmetry of the perianth. This trait is applied to the perianth as a whole. In case of flowers with two or more perianth whorls, species are considered actinomorphic if all whorls are actinomorphic and as zygomorphic if one or more whorls are zygomorphic. Trait is not applicable when the perianth is missing. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '207. Symmetry of perianth (D1)') - type: categorical - label: Symmetry of perianth - allowed_values_levels: - actinomorphic_general: Perianth displaying radial symmetry - actinomorphic_rotational: Perianth that can be equally divided into three or more identical sections that, when rotated around the center of the flower by some number of degrees, exactly match each other in orientation and shape. - actinomorphic_strictly_polysymmetric: Polysymmetry, with three or more planes of bilateral symmetry - actinomorphic_spiral: Perianth lacking a distinct plane of symmetry because their perianth parts are spirally arranged. - asymmetric: Perianth lacking any planes of symmetry - disymmetric: Perianth with two orthogonal planes of bilateral symmetry - zygomorphic: Monosymmetric, with a single plane of bilateral symmetry - flower_perianth_phyllotaxis: - description: Perianth phyllotaxis at anthesis. Perianth parts may be organised in one or more whorls or along a continuous spiral, usually with wide divergence angles more or less equal to 137.5 degrees. Less frequently, perianth phyllotaxis may be irregular. Perianth phyllotaxis at anthesis may differ from phyllotaxis of perianth part primordia at their inception and it is not uncommon that spirally initiated perianths become whorled later through development. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '230. Perianth phyllotaxy (D1)', with more information of differentiating between trait values in this manuscript.) - type: categorical - label: Perianth phyllotaxis - allowed_values_levels: - irregular: Perianth parts lacking any symmetrical organisation. - spiral: Perianth parts organised along a continuous spiral, usually with wide divergence angles more or less equal to 137.5 degrees, the Fibonacci 'golden angle' - whorled: Perianth parts organised in one or more whorls - flower_perianth_whorls_count: - description: The number of perianth whorls as a continuous trait (with integer values of 1 and above). Not applicable when perianth phyllotaxis is spiral or irregular or when the perianth is absent. (Definition derived from Schoenenberger et al. (2020) for their character '231. Number of perianth whorls (C1)') - type: numeric - units: '{count}' - label: Number of perianth whorls - allowed_values_min: 0 - allowed_values_max: 15 - flower_perianth_merism: - description: The number of perianth parts in each whorl, recorded as a continuous trait (with integer values of 1 and above). Not applicable when perianth phyllotaxis is spiral or irregular or when the perianth is absent. (Definition derived from Schoenenberger et al. (2020) for their character '232. Perianth merism (C1)') - type: numeric - units: '{count}' - label: Number of perianth parts in each whorl (Perianth merism) - allowed_values_min: 0 - allowed_values_max: 50 - flower_perianth_differentiation: - description: The ways in which perianth organs may look different from each other in a given flower. Typically, outer perianth parts are sepaloid and protect the other floral organs during floral development, while inner organs are often petaloid and play a role in pollinator attraction (Endress, 1994). However, it is also possible that all parts are either sepaloid or petaloid but remain differentiated in shape, size, and/or texture. In case of spiral perianths, differentiation may be continuous (i.e., gradual), whereby two successively initiated organs are very similar or only slightly different, while the outermost and innermost organs at both ends of the spiral are very different from each other (e.g., Chimonanthus). In the special case of perianths consisting of a single whorl, they are scored as undifferentiated. This perianth differentiation trait may be seen as both functional (the parting vs. sharing of functions among perianth parts) and developmental (the expression of a genetic program for different forms of perianth parts vs. a single program for a single type of perianth part morphology). Within-whorl differentiation, whereby organs of the same whorl take different forms, is common in zygomorphic flowers (e.g., Balsaminaceae, Fabaceae, Orchidaceae) but is not taken into account with this trait. This trait is not applicable when the perianth is absent. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '234. Perianth differentiation (D1)') - type: categorical - label: Perianth differentiation - allowed_values_levels: - undifferentiated: All tepals alike; includes a single undifferentiated whorl - marked_differentiation_outer_sepaloid_inner_petaloid: A typical flower with calyx and corolla - marked_differentiation_among_petaloid_tepals: - marked_differentiation_among_sepaloid_tepals: - marked_differentiation: - continuous_differentiation_outer_sepaloid_inner_petaloid: - continuous_differentiation_among_petaloid_tepals: - continuous_differentiation_among_sepaloid_tepals: - weak_differentiation: - very_weak_differentiation: - flower_fertile_stamens_count: - description: Count of fertile stamens in bisexual or male flowers; does not score female flowers. (Definition derived from Schoenenberger et al. (2020) for their character '301. Number of fertile stamens (C1)') - type: numeric - units: '{count}' - label: Number of fertile stamens - allowed_values_min: 0 - allowed_values_max: 10000 - flower_filament: - description: Trait that considers the absence or presence of the filament, and in the latter case, the shape of the filament. Shape is considered in terms of length and width and is defined in relation to anther length/width. The width of the filament may thus either be broad as in laminar (e.g., Eupomatiaceae) or bulky stamens (e.g., Chloranthaceae), or narrow (filamentous) as found in many core eudicots groups (e.g., Rosaceae). This trait is considered inapplicable when filaments are entirely fused with each other or to the perianth. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '305. Filament (D1)') - type: categorical - label: Filament presence and shape - allowed_values_levels: - absent: No filaments present - present_general: Filaments present, with no specific defining characteristics - long_and_narrow: Long and narrow shape; also called filiform, slender - short_and_narrow: Short and narrow shape; subsessile anthers - long_and_wide: Long and wide laminar shape - short_and_wide: Short and wide laminar shape - long_and_very_wide: Long and very wide shape; for instance, the petal-like (outer) stamens of Nymphaea - petaloid: Long and wide and colorful, e.g. Canna - fused_into_synandrium: Structure formed when stamens fused together - fused_into_fascicle_stalks: Special case where the stamens are fused into the stalk of a fascicle of flowers - long_and_narrow_divided_in_two: Long and narrow shape that is divided in two; e.g. Adoxa - short_general: Filament is short relative to the anther - flower_filament_fusion: - description: Fusion of stamen (and staminode) filaments among each other at anthesis (congenitally or postgenitally) is recorded on a continuous scale, from 0 (free filaments) to 1 (filaments fused along their entire length). Partial fusion is recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the length of filaments). (Definition derived from Schoenenberger et al. (2020) for their character '306. Fusion of filaments (C1)') - type: numeric - units: '{dimensionless}' - label: Fusion of filaments - allowed_values_min: 0 - allowed_values_max: 1 - flower_filament_fusion_to_inner_perianth: - description: The fusion of filaments with the innermost perianth organs at anthesis on a continuous scale, from 0 (filaments completely free from perianth) to 1 (filaments fused along their entire length with the perianth; the 'entire length' of the filament is defined as the distance between the floral base and the joint between filament and anther). Partial fusion is recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the length of perianth parts). If two (or more) stamen whorls (including staminodial whorls) differ in their extent of filament fusion with the perianth, this trait is recorded as a range of values. For example, if the filaments of an outermost stamen whorl are fused, up to 90% of their length, but an inner whorl only up to 50%, the trait is assigned a range of 0.5 to 0.9. The rationale for this is to provide a general trait that allows comparison of fusion among all angiosperms. (Definition derived from Schoenenberger et al. (2020) for their character '308. Fusion of filaments to inner perianth series (C1)') - type: numeric - units: '{dimensionless}' - label: Fusion of filaments to inner perianth series - allowed_values_min: 0 - allowed_values_max: 1 - flower_anther_orientation: - description: Orientation of anther at anthesis. Anthers of angiosperms are rather uniform in their basic structure. They normally have four microsporangia (pollen sacs) that are arranged pair-wise in two thecae. The two microsporangia of a theca usually release their pollen grains through a common opening (stomium). Often, it is difficult to establish anther orientation clearly in a flower as this is a gradual feature with many intermediate stages. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '311. Anther orientation (D1)') - type: categorical - label: Anther orientation - allowed_values_levels: - apical: When thecae are positioned in a transverse position at the tip of the connective and thus dehisce upward in the flower (e.g., Sinofranchetia, Endress and Hufford, 1989). - extrorse: When the stomia of the thecae face the floral periphery - introrse: When the stomia of the thecae face the floral centre - latrorse: When pollen is released toward the side (i.e., toward neighbouring anthers) - flower_anther_attachment: - description: Anther attachment refers to the area of insertion of the filament on the anther connective (i.e. the tissue connecting the two thecae of an anther). (Definition and trait values derived from Schoenenberger et al. (2020) for their character '312. Anther attachment (D1)') - type: categorical - label: Anther attachment - allowed_values_levels: - basifixed: Filament attached to the base of the connective. Laminar stamens are classified as basifixed - dorsifixed: Filament attached to the dorsal side of the anther - dorsifixed_at_base: Filament attached to the dorsal side of the anther, at the base** - ventrifixed: Filament attached to the ventral side of the anther - flower_anther_dehiscence: - description: Anther dehiscence refers to the type of opening of the anther when releasing its pollen through the stomia. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '313. Anther dehiscence (D1)') - type: categorical - label: Anther dehiscence - allowed_values_levels: - longitudinal_slit: Anther with longitudinal slits that extend along the entire length of each theca - poricidal: Anther where dehiscence of longitudinal slits is incomplete, with pollen exiting via a small pore - h_valvate: Anther with two valves on longitudinal hinges, opening horizontally as sallon doors; when the stomium bifurcates at its distal and/or proximal end and thus a valve is formed - flap_valvate: Anther with one or more flap-like valves on horizontal hinges, opening vertically - transverse_slit: Anther with horizontal slit - short_basal_slits: Anther where dehiscence of longitudinal slits is incomplete and only occurs over a short extent at the base of the theca - short_central_slits: Anther where dehiscence of longitudinal slits is incomplete and only occurs over a short extent at the center of the theca - short_apical_slits: Anther where dehiscence of longitudinal slits is incomplete and only occurs over a short extent at the apical end of the theca - t_valvate: Anther with T-shaped stomium; reduced transverse slit at base - common_stomium_confluent_thecae: (uncertain) - flower_anther_connective_extension: - description: Apical (distal) connective extensions (also called 'distal connective protrusions') are sterile anther structures that distally extend beyond the level of the thecae (i.e., the two lateral pairs of pollen sacs of a tetrasporangiate anther). This trait records both absence or presence of anther connective extensions and also the shape of these extensions in terms of length in relation to the length of the thecae. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '314. Connective extension (apical) (D1)') - type: categorical - label: Connective extension (apical) - allowed_values_levels: - absent: Apical connective extensions are lacking - short_extension: Connective extension less than a third of the length of anther - long_extension: Connective extension more than a third but less than length of anther; e.g. Idiospermum australiense - very_long_extension: Connective extension more than length of anther; e.g. Galbulimima belgraveana - present_general: Apical connective extensions are present, but no information on their length relative to the anthers - flower_androecium_structural_phyllotaxis: - description: Structural phyllotaxy of the androecium, considering both fertile stamens and staminodes. In cases of stamen fascicles, it is the phyllotaxis of fascicles, not individual stamens that are recorded. This character is not applicable when there is a single structural stamen (i.e., one stamen, no staminodes; e.g., Chloranthus, Chloranthaceae). (Definition and trait values derived from Schoenenberger et al. (2020) for their character '330. Androecium structural phyllotaxy (D1)') - type: categorical - label: Androecium structural phyllotaxis - allowed_values_levels: - whorled: Stamens and staminodes arranged in whorls - spiral: Stamens and staminodes have a spiral arrangement - irregular: Stamens and staminodes have an irregular arrangement - flower_androecium_structural_whorls_count: - description: The number of whorls, considering both fertile stamens and staminodes. In cases of stamen fascicles, the count of whorls of fascicles is recorded. This character is not applicable for spiral or irregular stamen arrangements, or when there is a single structural stamen (i.e., one stamen, no staminodes; e.g., Chloranthus, Chloranthaceae). (Definition derived from Schoenenberger et al. (2020) for their character '331. Number of androecium structural whorls (C1)') - type: numeric - units: '{count}' - label: Number of androecium structural whorls - allowed_values_min: 0 - allowed_values_max: 100 - flower_androecium_structural_merism: - description: The number of stamens or stamen bundles (fascicles) in one whorl, considering both fertile stamens and staminodes. This character is not applicable for spiral or irregular stamen arrangements, nor when there is a single structural stamen (i.e., one stamen, no staminodes; e.g., Chloranthus, Chloranthaceae). (Definition derived from Schoenenberger et al. (2020) for their character '332. Androecium structural merism (C1)') - type: numeric - units: '{count}' - label: Number of androecium parts in each whorl (Androecium structural merism) - allowed_values_min: 0 - allowed_values_max: 100 - flower_gynoecium_phyllotaxis: - description: Structural phyllotaxy of the gynoecium. This trait is not applicable to unicarpellate flowers. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '400. Gynoecium phyllotaxy (D1)') - type: categorical - label: Gynoecium phyllotaxis - allowed_values_levels: - one_whorl: Flowers with a single whorl of carpels - two_or_more_whorls: Flowers with two or more whorls of carpels - spiral: Flowers with carpels in a spiral arrangement - flower_structural_carpels_count: - description: Number of fertile or sterile carpels in bisexual or female flowers, recorded as a continuous character (with integer values of 1 and above). Includes the number of co-occurring carpellodes (sterile carpels) because this number is often more easily obtained from the literature than the actual number of fertile carpels. However, the number of carpellodes in male flowers is ignored for this character. In multicarpellate, unilocular gynoecia with complete carpel fusion up to the stigma (e.g., Primula), it may be difficult to assess the number of carpels unequivocally. In such cases, the number of carpels is scored only if it is well established based on anatomical or developmental investigations. Similarly, in gynoecia where one or more carpels are reduced (e.g., in the pseudomonomerous gynoecia of some Arecaceae, Stauffer et al., 2002), the total number of structural carpels is only scored when unequivocally determined in the literature. (Definition derived from Schoenenberger et al. (2020) for their character '401. Number of structural carpels (C1)') - type: numeric - units: '{count}' - label: CNumber of structural carpels - allowed_values_min: 0 - allowed_values_max: 10000 - flower_ovary_fusion: - description: Degree of ovary fusion expressed as a fraction of the total length of the ovary (from the floral base to the apex of the ovary). Fusion of styles and stigmas is not taken into account for this trait. Not applicable when there is a single carpel. (Definition derived from Schoenenberger et al. (2020) for their character '403. Fusion of ovaries (C1)') - type: numeric - units: '{dimensionless}' - label: Fusion of ovaries - allowed_values_min: 0 - allowed_values_max: 1 - flower_style_differentiation: - description: Presence or absence of a style, and, when present, the shape of the style in terms of length and width in relation to ovary length and width. This trait does not distinguish between fused or free styles. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '404. Style differentiation (D1)') - type: categorical - label: Style differentiation - allowed_values_levels: - absent: Stigma sessile - present_length_and_shape_unknown: Style present, but shape unknown - present_short_and_thick: Style present, and short and thick - present_short_and_narrow: Style present, and short and narrow, including short filiform styles - present_long_and_wide: Style present, and long and wide - present_long_and_narrow: Style present, and long and narrow, including long filiform styles - present_petaloid: Style present and petaloid - continuous: When the style is an apical extension of carpel with decurrent stigma - flower_style_fusion: - description: The degree of fusion of styles at anthesis, recorded on a continuous scale, from 0 (free styles) to 1 (styles fused along their entire length, but excluding the stigmatic region). Partial fusion is recorded using an approximate number between these two extremes (e.g., 0.1 corresponds to basal fusion, 0.5 to fusion along half of the total length of the styles). This character is not applicable in unicarpellate flowers. (Definition derived from Schoenenberger et al. (2020) for their character '406. Fusion of styles (C1)') - type: numeric - units: '{dimensionless}' - label: Fusion of styles - allowed_values_min: 0 - allowed_values_max: 1 - flower_ovules_per_functional_carpel_count: - description: Number of ovules per carpel recorded as a continuous character (with integer values of 1 and above). Reduced (sterile) carpels are not taken into account here. (Definition derived from Schoenenberger et al. (2020) for their character '411. Number of ovules per functional carpel (C1)') - type: numeric - units: '{count}' - label: Number of ovules per functional carpel - allowed_values_min: 0 - allowed_values_max: 100000 - flower_gynoecium_placentation: - description: The different types of placentation in apocarpous/unicarpellate and in syncarpous gynoecia. In apocarpous and unicarpellate gynoecia, placentation is often described as marginal as the ovules are usually attached along the ventral slit (i.e., the zone where the carpel margins become postgenitally closed during carpel development). In syncarpous gynoecia there are three main types of placentation, 1) axile placentation refers to ovaries where the ovules are placed in the angle between carpel flanks in the center of the ovary; 2) in ovaries with parietal placentation the ovules attach to the ovary wall where two carpels meet; 3) in ovaries with free-central placentation the ovules are attached to a central column that emerges from the base of the ovary and protrudes into the non-septate ovary. It is not unusual that syncarpous gynoecia show a transition from proximally axile to a distally parietal placentation (e.g., Polemoniaceae). Basal and apical placentation may occur both in apocarpous/unicarpellate and in syncarpous gynoecia. Usually there is one longitudinal series of ovules attached to each carpel margin. However, both in apocarpous/unicarpellate and in syncarpous gynoecia there may be more than one series of ovules at the flanks of a carpel. These latter cases are referred to as laminar (or laminar-diffuse) placentation (e.g., in some Nymphaeaceae). A placenta that is protruding from its surroundings and has more than two series of ovules (either axile or parietal) is called protruding-diffuse. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '412. Placentation (D1)') - type: categorical - label: Placentation - allowed_values_levels: - axile: Ovules are placed in the angle between carpel flanks in the center of the ovary; in syncarpous gynoecia - apical: Ovules attach at the top of the ovary; pendulous; in syncarpous gynoecia and apocarpous and unicarpellate gynoecia - basal: Ovules attach at the base of the ovary; in syncarpous gynoecia and apocarpous and unicarpellate gynoecia - parietal: Ovules attach to the ovary wall where two carpels meet; in syncarpous gynoecia - marginal: Ovules attach along the ventral slit; in apocarpous and unicarpellate gynoecia - free_central: Ovules are attached to a central column that emerges from the base of the ovary and protrudes into the non-septate ovary; in syncarpous gynoecia - laminar: When there is more than one series of ovules at the flanks of a carpel; in syncarpous gynoecia and apocarpous and unicarpellate gynoecia - flower_pollen_apertures_count: - description: A pollen aperture is a structurally delimited region of the pollen grain wall through which the pollen tube emerges during pollen germination and which plays a role in harmomegathy. Here we report the number of apertures per pollen grain as a continuous character. A value of zero is scored when pollen is inaperturate (i.e. when there is no distinct aperture). Aperturate pollen is scored with integer values of 1 and above. (Definition derived from Schoenenberger et al. (2020) for their character '5000. Number of apertures (C1)') - type: numeric - units: '{count}' - label: Number of pollen grain apertures - allowed_values_min: 0 - allowed_values_max: 100 - flower_pollen_aperture_shape: - description: Pollen grains are often described according to the shape, structure, and position of their apertures. This trait describes the main shape of the many described aperture types. Aperture terminology is partly determined by the position of the aperture on the pollen grain (either at the pole or at the equator) and pollen grain polarity, in turn, is determined by the spatial orientation of the microspore in the meiotic tetrad. (Definition and trait values derived from Schoenenberger et al. (2020) for their character '5002. Aperture shape (D1)') - type: categorical - label: Pollen grain aperture shape - allowed_values_levels: - absent: (uncertain) - colporus: Pollen aperture shape that combines the groove of colpate and the pore of porate apertures - colpus: Pollen aperture shape is elongate and grooved and may be positioned globally or equatorially - pore: Pollen aperture shape is round and pore-like and may be positioned globally or equatorially - ring_like: (uncertain) - spiraperturate: Pollen grain with one or more spiral apertures - sulcus: Pollen aperture shape is elongate and grooved and positioned at the pole - syncolpus: Pollen grain with two or more simple (or compound) colpi, the ends of which join at the pole - ulcus: Pollen aperture shape is round and pore-like and positioned at the pole - leaf_photosynthesis_Jmax_per_mass: - description: Capacity for photosynthetic electron transport, measured through chlorophyll fluorescence, on a per mass basis - type: numeric - units: umol/g/s - label: Capacity for photosynthetic electron transport, measured through chlorophyll fluorescence, on a per mass basis - allowed_values_min: 0 - allowed_values_max: 3 - leaf_photosynthesis_Vcmax_per_mass: - description: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), measured through chlorophyll fluorescence, on a per mass basis - type: numeric - units: umol/g/s - label: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), measured through chlorophyll fluorescence, on a per mass basis - allowed_values_min: 0 - allowed_values_max: 1 - leaf_photosynthesis_Jmax_over_Vcmax: - description: Ratio of photosynthetic electron transport capacity to maximum Rubisco activity, measured through chlorophyll fluorescence; this is the maximum quantum yield of PSII (Maxwell & Johnson 2000, doi.org/10.1093/jexbot/51.345.659) - type: numeric - units: '{dimensionless}' - label: Ratio of photosynthetic electron transport capacity to maximum Rubisco activity, measured through chlorophyll fluorescence - allowed_values_min: 0 - allowed_values_max: 5 - leaf_photosynthesis_Jmax_per_area: - description: Capacity for photosynthetic electron transport, calculated from an A-Ci response curve, on an area basis - type: numeric - units: umol/m2/s - label: Capacity for photosynthetic electron transport, calculated from an A-Ci response curve, on an area basis - allowed_values_min: 1 - allowed_values_max: 500 - leaf_photosynthesis_Vcmax_per_area: - description: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), calculated from an A-Ci response curve, on an area basis - type: numeric - units: umol/m2/s - label: Maximum carboxylase activity of ribulose 1,5-bisphosphate carboxylase/oxygenase (Rubisco), measured through chlorophyll fluorescence, on a per mass basis - allowed_values_min: 10 - allowed_values_max: 500 - fruit_colour: - description: Human visible dominant colour of a fresh fruit's exocarp (outermost layer) at maturity. If a fruit is multiple colors, they are listed as a space-delimited string. - type: categorical - label: Fruit colour - allowed_values_levels: - pink: pink - red: red - orange: orange - yellow: yellow - green: green - blue: blue - purple: purple - white: white - cream: cream - brown: brown - black: black - grey: grey - fruit_dry_mass: - description: Fruit dry mass, including seeds. Fruits will generally be oven-dried. - type: numeric - units: mg - label: Fruit dry mass - allowed_values_min: 0.0001 - allowed_values_max: 1000000.0 - fruit_length: - description: Linear dimension from the base to the apex of a fresh fruit, even if this is not the longest dimension. - type: numeric - units: mm - label: Fruit length - allowed_values_min: 0.01 - allowed_values_max: 2000.0 - fruit_width: - description: Greatest linear width dimension of a fresh fruit, sometimes referred to as 'diameter' in fruits where the width and height are identical; orthogonal to the length, the base-to-apex dimension. - type: numeric - units: mm - label: Fruit width - allowed_values_min: 0.01 - allowed_values_max: 2000.0 - fruit_height: - description: Shorter linear width dimension of a fresh fruit and generally not reported in fruits where the width and height are identical; orthogonal to the length, the base-to-apex dimension. - type: numeric - units: mm - label: Fruit height - allowed_values_min: 0.01 - allowed_values_max: 2000.0 - fruit_wall_thickness: - description: Fruit wall thickness of a mature fresh fruit. This term sometimes applies explicitly to the entire pericarp (exocarp + mesocarp + endocarp), but more frequently will have a functional meaning, referring to the outer fleshy layer which might be just some components of the peripcarp, most frequently the exocarp and mesocarp. - type: numeric - units: mm - label: Fruit wall thickness - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - fruit_N_per_dry_mass: - description: Fruit nitrogen (N) content per unit fruit dry mass - type: numeric - units: mg/g - label: Fruit nitrogen (N) content per unit fruit dry mass - allowed_values_min: 0.5 - allowed_values_max: 100.0 - fruit_P_per_dry_mass: - description: Fruit phosphorus (P) content per unit fruit dry mass - type: numeric - units: mg/g - label: Fruit phosphorus (P) content per unit fruit dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - fruit_Mg_per_dry_mass: - description: Fruit magnesium (Mg) content per unit fruit dry mass - type: numeric - units: mg/g - label: Fruit magnesium (Mg) content per unit fruit dry mass - allowed_values_min: 0.05 - allowed_values_max: 10.0 - fruit_Ca_per_dry_mass: - description: Fruit calcium (Ca) content per unit fruit dry mass - type: numeric - units: mg/g - label: Fruit calcium (Ca) content per unit fruit dry mass - allowed_values_min: 0.5 - allowed_values_max: 100.0 - fruit_K_per_dry_mass: - description: Fruit potassium (K) content per unit fruit dry mass - type: numeric - units: mg/g - label: Fruit potassium (K) content per unit fruit dry mass - allowed_values_min: 0.5 - allowed_values_max: 100.0 - fruit_S_per_dry_mass: - description: Fruit sulphur (S) content per unit fruit dry mass - type: numeric - units: mg/g - label: Fruit sulphur (S) content per unit fruit dry mass - allowed_values_min: 0.05 - allowed_values_max: 10.0 - fruit_type: - description: Fruit types - type: categorical - label: Fruit type - allowed_values_levels: - achene: A simple, dry, indehiscent fruit with a single seed that is attached to the pericarp at one point only. (synonym, cypsela) - anthocarp: A ripened ovary surrounded by attached accessory floral tissues; the floral tissues may be fleshy or dry. (synonym, accessory_fruit, pseudocarp, diclesium) - berry: A simple, indehiscent fruit with one to many seeds embedded in a fleshy pericarp. - capsule: A dry, dehiscent fruit composed of two or more united carpels; different types of capsules distinguished by type of dehiscence (e.g. valves, slits, pores). - caryopsis: A simple, dry, indehiscent fruit with a single seed which is fused to the pericarp at one point only; the fruit type of all Poaceae (synonym, grain) - compound_fruit_other: A fruit derived from more than one flower. (synonym, aggregate_fruit) - drupe: A simple indehiscent fruit with a hard, stony endocarp and a fleshy mesocarp. - follicle: A dry, dehiscent fruit derived from a single carpel that splits along one suture. - legume: A dry, dehiscent fruit derived from a single carpel that splits along two sutures; applies to Fabaceae. (synonym, pod) - legume_indehiscent: A dry, indehiscent fruit derived from a single carpel; applies to Fabaceae. - mericarp: A fruitlet (seed-containing portion of a fruit) that is a half-carpel; the individual fruitlets separate from one another at maturity; a specific type of schizocarp. (In some datasets, term likely refers to any fruitlet derived from a portion of a schizocarp that separates at maturity, not explicitly just a half-carpel.) - multiple_fruit: A fruit composed of several fruitlets developing from a single flower (e.g. raspberries, magnolias); fruits developing from more than one flower are included under compound (aggregate) fruits. - nut: A simple, dry, indehiscent fruit with a single seed and a hard pericarp. - nutlet: A diminutive of nut, referring to a simple, dry, indehiscent structure with a single seed that might be an entire fruit (nut; monocarp) or a portion of a fruit, such as the individual components derived from an apocarp (fruit with multiple unfused ovaries) or schizocarp (fruit with multiple ovaries that separate at maturity). - pome: A fleshy fruit with the bulk of the fleshy tissue derived from flora tissue that surrounds the inferior ovary. - pyrene: A fleshy fruit in which the seed(s) are covered by a hard layer of endocarp. - samara: A winged, dry fruit. - schizocarp: Category that includes all fruits derived from a compound pistil that separate into individual carpellary constituents at maturity; broad terms that includes dry and fleshy fruits, some with accessory tissues, others without. The individual seed-containing units that a schizocarp breaks apart into include mericarps, nutlets, and fruitlets. - silique: A type of capsule (dry, dehiscent fruit) where the fruit is divided into two parts by a thin partition; more than three times as long as wide; applies to Brassicaceae (synonym, silicle, siliqua) - strobilus: A modified reproductive shoot system found in many nonflowering plants, especially gymnosperms, comprised of overlapping bracts (scales). (synonym, cone) - syncarp: A compound fruit produced by the adhesion of the fruits from several flowers. - syconium: A fleshy compound fruit, in which the fruitlets are enclosed in accessory material, such as the hollow-centered fruits of Moraceae. (synonym, synconium, fig) - utricle: A bladdery or inflated dry fruit with a single seed; essential an achene in which the pericarp is significantly larger than the mature seed. - fruit_fleshiness: - description: Binary variable, dividing entire, true fruits into 'dry' versus 'fleshy' based on whether their botanical fruit type is fleshy when mature and fresh. This trait explicitly refers to fruit fleshiness, not diaspore or seed fleshiness; diaspore fleshiness is a separate trait. - type: categorical - label: Fruit fleshiness (fleshy / dry) - allowed_values_levels: - dry: Fruits are dry when mature and fresh. - fleshy: Fruits are fleshy when mature and fresh. - fruit_dehiscence: - description: Binary variable, dividing fruits into 'dehiscent' versus 'indehiscent' based on whether the individual fruit units are dehiscent when mature. - type: categorical - label: Fruit dehiscence (dehiscent /indehiscent) - allowed_values_levels: - dehiscent: Fruits are dehiscent when mature. - indehiscent: Fruits are indehiscent when mature. - diaspore_fleshiness: - description: Binary variable, dividing diaspores into 'dry' versus 'fleshy' based on whether they have fleshy pericarps, fleshy accessory tissues (such as the receptacle in Podocarpus), or fleshy appendages (e.g. aril, thalamus, receptacle, calyx, rachis or bract or succulent pedicel) when mature. Dispersal units where none of these tissues is fleshy are designated as 'non-fleshy'. - type: categorical - label: Diaspore fleshiness (fleshy / dry) - allowed_values_levels: - dry: Diaspores where the true fruit, accessory tissues and dispersal appendages are all dry when mature. - fleshy: Diaspores where either the true fruit, accessory tissues or dispersal appendages are fleshy when mature. - fruiting_time: - description: Months during which taxon produces fruit with mature seeds; keyed as a sequences of 12 Ns (not flowering) and Ys (flowering) starting with January. - type: categorical - label: Range of fruiting time - fire_time_from_fire_to_fruit: - description: Elapsed time from fire to fruiting - type: numeric - units: mo - label: Elapsed time from fire to fruiting - allowed_values_min: 1 - allowed_values_max: 500 - leaf_fluorescence_fv_over_fm: - description: Chlorophyll fluorescence measurement that indicates whether plant stress affects photo-system II in a dark adapted state - type: numeric - units: '{dimensionless}' - label: Fv/Fm - allowed_values_min: 0.2 - allowed_values_max: 1 - seed_germination: - description: Proportion of seeds in a sample that germinated under conditions specified under methods or contextual conditions. - type: numeric - units: '{count}/{count}' - label: Germination (proportion) - allowed_values_min: 0 - allowed_values_max: 1 - seed_germination_treatment: - description: Treatment required for seed to display high germination rates. The data included in AusTraits are mostly from seed banks that have recorded the protocols they use to encourage seeds to germinate. The treatments may therefore be only loosely connected to the cues required for a species' to break dormancy. - type: categorical - label: Germination treatment - allowed_values_levels: - after_ripening: Seed germinates more readily after a period of warm, dry storage. - chemical_treatment: Seed germinates more readily after a chemical treatment. - cold: Seed germinates more readily after cold treatment. - dark: Seed germinates more readily after being stored in the dark. - heat: Seed germinates more readily after being heated. - heat_lethal: Seed is heat sensitive. (A fire response, more than a treatment to break dormancy.) - heat+smoke: Seed germinates more readily after a treatment that merges heat and smoke. - imbibe_hot: Seed germinates more readily after being soaked in hot water; water temperature usually between 70 deg C to just below boiling. - leaching: Seed germinates more readily after leaching out certain chemicals. - light: Seed germinates more readily after light exposure. - mycorrhizae: Seed germinates more readily if infected by a mycorrhizal symbiont. - none: No treatment required for seed to display high germination rates. - rain: Seed germinates more readily after rain. - scarify: Seed coat is removed, nicked, or otherwise punctured to increase germination. - smoke: Seed germinates more readily after being subjected to a smoke treatment; includes smoked water. - stratification: Seed germinates more readily after being stored in moist conditions; not specified if the treatment was `cold stratification` or `warm stratification` - stratification_cold: Seed germinates more readily after a period of cold, wet storage. - stratification_warm: Seed germinates more readily after a period of warm, wet storage. - genome_size: - description: Mass of the plant's genome - type: numeric - units: pg - label: Plant genome size - allowed_values_min: 0.5 - allowed_values_max: 100.0 - leaf_guard_cell_length: - description: Length of guard cells - type: numeric - units: um - label: Guard cell length - allowed_values_min: 10 - allowed_values_max: 200 - huber_value: - description: Sapwood area to leaf area ratio - type: numeric - units: mm2{sapwood}/mm2{leaf} - label: Huber value - allowed_values_min: 0.000001 - allowed_values_max: 0.2 - seedling_hypocotyl_hairs: - description: Binary variable distinguishing between glabrous versus hairy hypocotyls (the embryonic axis to which the cotyeledons are attached). - type: categorical - label: Hypocotyl type - allowed_values_levels: - glabrous: Hypocotyl lacks hairs - hairy: Hypocotyl has hairs - leaf_hypodermis_thickness_adaxial: - description: Thickness of the upper hypodermis - type: numeric - units: um - label: Upper hypodermis thickness - allowed_values_min: 1.0 - allowed_values_max: 100.0 - leaf_hypodermis_thickness_abaxial: - description: Thickness of the lower hypodermis - type: numeric - units: um - label: Lower hypodermis thickness - allowed_values_min: 1.0 - allowed_values_max: 100.0 - plant_tolerance_inundation: - description: Ability of taxon to tolerate being under water - type: categorical - label: Inundation tolerance - allowed_values_levels: - not_applicable: Taxa is not typically confronted with beng inundated and its response is unknown. - 'less_than_1_month': Taxa able to tolerate being inundated for less than 1 month. - '1-6_months': Taxa able to tolerate being inundated for 1-6 months. - 'greater_than_6_months': Taxa able to tolerate being inundated for more than 6 months. - aquatic: Taxa truly aquatic and able to be permanantly inundated. - plant_flood_regime_classification: - description: Functional group classification scheme used to categorise taxa into seven groups based on their growth and germination responses to flood regime. Based on Brock and Casanova (1997) and Casanova (2011). - notes: Change name to `water plant functional groups` - references: Brock and Casanova 1997 (ISBN 008043200X); Casanova 2011 (doi.org/10.1111/j.1365-2427.2011.02680.x) - type: categorical - label: Growth and germination response to flood regime - allowed_values_levels: - terrestrial_dry: Species which germinate, grow and reproduce where there is no surface water and the water table is below the soil surface. (Dry species; Tdr) - terrestrial_damp: Species which germinate, grow and reproduce on saturated soil. (Damp species; Tda) - amphibious_fluctuation_tolerators_emergent: Species which germinate in damp or flooded conditions, which tolerate variation in water level, and which grow with their basal portions under water and reproduce out of water. (Emergent species; ATe) - amphibious_fluctuation_tolerators_low: Species which germinate in damp or flooded conditions, which tolerate variation in water level, which are low-growing and tolerate complete submersion when water-levels rise. (Low-growing species; ATl) - amphibious_fluctuation_responders_plastic: Species which germinate in flooded conditions, grow in both flooded and damp conditions, reproduce above the surface of the water, and which have morphological plasticity (e.g. heterophylly) in response to water-level variation. (Morphologically plastic species; ARp) - amphibious_fluctuation_responders_floating: Species which germinate in flooded conditions, grow in both flooded and damp conditions, reproduce above the surface of the water, and which have floating leaves when inundated. (Species with floating leaves; ARf) - amphibious: Species which germinate in damp or flooded conditions and can grow in or our of water. - submerged: Species which germinate, grow and reproduce underwater. (S - leaf_inclination_angle: - description: The inclination angle of the upper (adaxial) leaf lamina surface relative to a horizontal plane, such that a leaf surface facing the solar zenith has an angle of 0. - notes: This trait records the slope of the leaf lamina relative to the ground surface. The angle between a stem and the leaf lamina is a separate trait, `leaf_axil_angle`. Complanate leaves can be scored as having a `leaf_inclination_angle` of 0. - type: numeric - units: deg - label: Leaf inclination angle, relative to horizontal - allowed_values_min: -90 - allowed_values_max: 90 - leaf_axil_angle: - description: The angle between a shoot and a leaf that branches from the shoot axis. - notes: This trait records the angle between the upper surface of a leaf and the stem to which it is attached. The slope of the leaf lamina relative to the solar zenith is a separate trait, `leaf_inclination_angle`. - type: numeric - units: deg - label: Angle between a leaf and stem - allowed_values_min: 0 - allowed_values_max: 180 - leaf_pendulousness: - description: Binary variable describing whether or not leaves are pendulous, hanging loosely downward and possessing the ability to flutter. - notes: This is a binary categorical trait, scoring whether or not leaves are pendulous and therefore hanging loosely downward and able to flutter. Two additional traits, `leaf_inclination_angle` and `leaf_axil_angle` document the actual angle of the leaf lamina relative to, respectively, the solar zenith and the stem. - type: categorical - label: Pendulous leaves - allowed_values_levels: - pendulous: Leaves are pendulous. - not_pendulous: Leaves are not pendulous. - leaf_posture_numeric: - description: The maximum perpendicular height of a leaf when positioned on a flat surface. - notes: A measure of how planar versus 3-dimensional a leaf is. The term posture refers to the placement of different parts of the leaf's lamina relative to a flat plane. - type: numeric - units: mm - label: Leaf lamina posture (3-dimensionality) - allowed_values_min: 0 - allowed_values_max: 100 - leaf_area: - description: The 2-dimensional projected (scanned) area of the surface of a leaf or a leaf analogue (leaflet, cladode, phyllode). - notes: This trait includes measurements of leaves and leaf analogues, including leaflets, cladodes, and phyllodes. When a measurement is made on a leaf analogue, the tissue measured should be documented as part of the methods or noted as a `context` or under `measurement_remarks`. Leaflet area can alternatively be mapped to the trait `leaflet_area`. It is most common for leaf area measurements to include the petiole; the measurement methods should indicate if the petiole is included in or excluded from the leaf area measurements. For terete leaves, leaf area should still be recorded as the 2-dimensional projected area. - type: numeric - units: mm2 - label: Leaf area - allowed_values_min: 0.1 - allowed_values_max: 1.0e+07 - leaflet_area: - description: Area of the surface of a single leaflet - type: numeric - units: mm2 - label: Leaf area - allowed_values_min: 0.1 - allowed_values_max: 1.0e+06 - leaf_area_ratio: - description: The total leaf area of a plant divided by the plant's total dry mass; LAR. - notes: Since the total plant dry mass is required for leaf area ratio measurements, this is standardly measured only on young plants or plants grown for experiments where the entire plant can be harvested. It is best practice for leaf area measurements to include the petiole. - type: numeric - units: mm2/mg - label: Leaf area ratio - allowed_values_min: 0.05 - allowed_values_max: 100.0 - leaf_absorption: - description: Proportion of incoming visible light (between 400-700 nm) that is absorbed by the leaf - type: numeric - units: umol/umol - label: Proportion of incoming visible light that is absorbed by the leaf - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_reflectance: - description: Proportion of incoming visible light (between 400-700 nm) that is reflected by the leaf - type: numeric - units: umol/umol - label: Proportion of incoming visible light that is reflected by the leaf - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_reflectance_near_infrared: - description: Proportion of incoming near infra-red light (between 750-10500 nm) that is reflected by the leaf - type: numeric - units: umol/umol - label: Proportion of incoming near infra-red light that is reflected by the leaf - allowed_values_min: 0.1 - allowed_values_max: 1.0 - leaf_transmission: - description: Proportion of incoming visible light (between 400-700 nm) that is transmitted through the leaf - type: numeric - units: umol/umol - label: Proportion of incoming visible light that is transmitted through the leaf - allowed_values_min: 0.001 - allowed_values_max: 1.0 - leaf_photochemical_reflectance_index: - description: Photochemical reflectance index measures plant responses to stress, by indicating changes in carotenoid pigments in live foliage. - type: numeric - units: umol/umol - label: Photochemical Reflectance Index - allowed_values_min: -1.0 - allowed_values_max: 1.0 - leaf_arrangement: - description: Leaf arrangement across stem nodes, indicating the 3-dimensional arrangement of leaves along the length of the stem. - notes: Leaf arrangement, as defined for this trait, indicates patterns of leaf arrangement across nodes, including both formal terms (decussate, distichous, spiral) as well as indications of leaf clustering due to variation in internode length. See the trait `leaf phyllotaxis` for terms describing leaf arrangement at a single node. See the trait `stem_growth_habit` for whole-plant leaf pattern terms, such as `rosette`. - type: categorical - label: Leaf arrangement across stem nodes. - allowed_values_levels: - decussate: When sequential pairs of opposite leaves attach at right angles to the pair above or below. - distichous: When alternate or opposite leaves are arranged in two opposite rows. - spiral: When alternate leaves are attached in a progressive spiral pattern along the stem. - fasciculate: A tight bundle or cluster of leaves attached to the stem in a single location, generally due to the shortening of internodes. - crowded: When internode length varies considerably along a stem, such that leaves appear crowded or tufted. - leaf_phyllotaxis: - description: Leaf arrangement at a stem node, indicating the relative number and position of leaves at a single stem note. - notes: This trait only includes true phyllotaxis, the arrangement of leaves at a single node, while the trait `leaf arrangement` indicates how the leaves are presented along the entire shoot system. See the trait `stem_growth_habit` for whole-plant leaf pattern terms, such as `rosette`. - type: categorical - label: Leaf phyllotaxis - allowed_values_levels: - alternate: A single leaf is attached at each stem node. - opposite: A pair of leaves are attached opposite to one another at each stem node. - whorled: Three or more leaves are attached at each stem node, arranged in a symmetrical pattern around the stem. (synonym, verticillate) - leaf_ash_per_dry_mass: - description: Leaf ash content per dry mass, where leaf ash is the component of the leaf remaining after combustion. - type: numeric - units: g/g - label: Leaf ash content per dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - leaf_Al_per_dry_mass: - description: Leaf aluminium (Al) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf aluminium (Al) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 12000.0 - leaf_B_per_dry_mass: - description: Leaf boron (B) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf boron (B) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - leaf_C_per_dry_mass: - description: Leaf carbon (C) content per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf carbon (C) content per unit leaf dry mass - allowed_values_min: 50.0 - allowed_values_max: 750.0 - leaf_Ca_per_dry_mass: - description: Leaf calcium (Ca) content per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf calcium (Ca) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - leaf_cell_wall_fraction: - description: Fraction of total leaf biomass that is cell wall material - type: numeric - units: mg/mg - label: Leaf cell wall fraction (fraction of cell wall material recovered from total leaf biomass) - allowed_values_min: 0.1 - allowed_values_max: 1.0 - leaf_cell_wall_N_per_cell_wall_dry_mass: - description: Proportion of leaf cell wall material that is nitrogen - type: numeric - units: mmol{N}/g - label: Leaf cell wall nitrogen concentration - allowed_values_min: 0.1 - allowed_values_max: 10.0 - leaf_cell_wall_N_per_leaf_N: - description: Proportion of all N in leaves that is found in the leaf cell walls - type: numeric - units: mg/mg - label: Leaf cell wall nitrogen fraction - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_Cl_per_dry_mass: - description: Leaf chlorine (Cl) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf chlorine (Cl) content per unit leaf dry mass - allowed_values_min: 10.0 - allowed_values_max: 10000.0 - leaf_CN_ratio: - description: Leaf carbon/nitrogen (C/N) ratio - type: numeric - units: g/g - label: Leaf carbon/nitrogen (C/N) ratio - allowed_values_min: 10.0 - allowed_values_max: 1000.0 - leaf_Co_per_dry_mass: - description: Leaf cobalt (Co) content per unit leaf dry mass - type: numeric - units: ppm - label: Leaf cobalt (Co) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 150.0 - leaf_Cr_per_dry_mass: - description: Leaf chromium (Cr) content per unit leaf dry mass - type: numeric - units: ppm - label: Leaf chromium (Cr) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 150.0 - leaf_Cu_per_dry_mass: - description: Leaf copper (Cu) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf copper (Cu) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 150.0 - leaf_dark_respiration_per_area: - description: Leaf respiration rate per unit leaf area, in the dark - type: numeric - units: umol{CO2}/m2/s - label: Leaf respiration rate per unit leaf area, in the dark - allowed_values_min: 1.0e-03 - allowed_values_max: 15.0 - leaf_dark_respiration_per_dry_mass: - description: Leaf respiration rate per unit leaf dry mass, in the dark - type: numeric - units: umol{CO2}/g/s - label: Leaf respiration rate per unit leaf dry mass, in the dark - allowed_values_min: 1.0e-03 - allowed_values_max: 1.0 - stem_respiration_per_dry_mass: - description: Stem respiration rate per unit dry mass - type: numeric - units: umol{CO2}/g/s - label: Stem respiration rate per unit dry mass - allowed_values_min: 1.0e-02 - allowed_values_max: 10.0 - leaf_light_respiration_per_area: - description: Leaf respiration rate per unit leaf area, in the light - type: numeric - units: umol{CO2}/m2/s - label: Leaf respiration rate per unit leaf area, in the light - allowed_values_min: 1.0e-05 - allowed_values_max: 10000.0 - leaf_delta13C: - description: Leaf carbon stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Leaf carbon (C) isotope signature (delta 13C) - allowed_values_min: -50.0 - allowed_values_max: 0.0 - leaf_delta15N: - description: Leaf nitrogen stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Leaf nitrogen (N) isotope signature (delta 15N) - allowed_values_min: -25.0 - allowed_values_max: 75.0 - leaf_xylem_delta15N: - description: Xylem nitrogen stable isotope signature from leaves - type: numeric - units: '{delta}[ppth]' - label: Xylem nitrogen (N) isotope signature (delta 15N) from leaves - allowed_values_min: -25.0 - allowed_values_max: 75.0 - leaf_delta18O: - description: Leaf oxygen stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Leaf oxygen (O) isotope signature (delta 18O) - allowed_values_min: -10.0 - allowed_values_max: 50.0 - stem_water_delta18O: - description: Oxygen stable isotope signature of stem water - type: numeric - units: '{delta}[ppth]' - label: Oxygen stable isotope signature (d18O) of stem water - allowed_values_min: -10.0 - allowed_values_max: 50.0 - leaf_density: - description: Leaf tissue density - type: numeric - units: mg/mm3 - label: Leaf tissue density - allowed_values_min: 0.05 - allowed_values_max: 1.1 - leaf_dry_mass: - description: The oven dry mass of a leaf or leaf analogue (leaflet, cladode, phyllode). - notes: This trait includes measurements of leaves and leaf analogues, including leaflets, cladodes, and phyllodes. When a measurement is made on a leaf analogue, the tissue measured should be documented as part of the methods or noted as a `context` or under `measurement_remarks`. Leaflet dry mass can alternatively be mapped to the trait `leaflet_dry_mass`. It is most common for leaf dry mass measurements to include the petiole; the measurement methods should indicate if the petiole is included in or excluded from the leaf dry mass measurements. - type: numeric - units: mg - label: Leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 15000.0 - leaflet_dry_mass: - description: Dry mass of a single leaflet - type: numeric - units: mg - label: Dry mass of a single leaflet - allowed_values_min: 0.005 - allowed_values_max: 15000.0 - leaf_dry_matter_content: - description: Leaf dry mass per unit leaf fresh mass. (See also leaf_water_content_per_mass, the ratio of water content to leaf dry mass, recorded by some studies.) - type: numeric - units: g/g - label: Leaf dry mass per unit leaf fresh mass (Leaf dry matter content, LDMC) - allowed_values_min: 0.001 - allowed_values_max: 2.0 - leaf_Fe_per_dry_mass: - description: Leaf iron (Fe) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf iron (Fe) content per unit leaf dry mass - allowed_values_min: 1.0 - allowed_values_max: 10000.0 - leaf_fresh_mass: - description: The fresh mass of a leaf or leaf analogue (leaflet, cladode, phyllode). - notes: This trait includes measurements of leaves and leaf analogues, including leaflets, cladodes, and phyllodes. When a measurement is made on a leaf analogue, the tissue measured should be documented as part of the methods or noted as a `context` or under `measurement_remarks`. It is most common for leaf dry mass measurements to include the petiole; the measurement methods should indicate if the petiole is included in or excluded from the leaf dry mass measurements. A source of variation for this trait will be how leaves are stored and if they are partially rehydrated before weighing; these details should be documented in the methods. - type: numeric - units: mg - label: Leaf fresh mass - allowed_values_min: 0.1 - allowed_values_max: 30000.0 - leaf_fresh_mass_per_area: - description: The ratio of leaf fresh mass to leaf area, measured on an entire leaf including the petiole. - notes: Leaf fresh mass per area is explicitly measured on an entire leaf, including the petiole. - type: numeric - units: g/m2 - label: Leaf fresh mass per leaf area - allowed_values_min: 200 - allowed_values_max: 2000.0 - leaf_glaucousness: - description: Variable describing whether or not mature adult phase leaves have a glaucous appearance, the colour due to being covered with a smooth, usually whitish to bluish epicuticular wax that can easily be rubbed off. - notes: The accompanying methods should specify if the trait was scored on the upper (adaxial) or lower (abaxial) surface of the leaf; in the absence of any notes, it is assumed the trait was scored on the upper (adaxial) leaf surface. - type: categorical - label: Whether mature leaves are glaucous - allowed_values_levels: - glaucous: Mature (fully expanded) leaves on adult plants have a waxy coating, giving them a glaucous appearance. - not_glaucous: Mature (fully expanded) leaves on adult plants do not have a glaucous appearance. - leaf_hairs_adult_leaves: - description: Variable describing whether or not mature (fully expanded) adult phase leaves on adult plants have hairs (trichomes). - notes: This trait captures the presence or absence of hairs on mature (fully expanded), adult phase leaves on adult plants. Best practice is to sample leaves that are recently fully expanded, since older leaves have often shed many of their hairs. The accompanying methods should specify if the trait was scored on the upper (adaxial) or lower (abaxial) surface of the leaf; in the absence of any notes, it is assumed the trait was scored on the upper (adaxial) leaf surface. - type: categorical - label: Presence of hairs on mature (fully expanded) leaves - allowed_values_levels: - glabrous: Mature (fully expanded) leaves on adult plants do not have hairs (trichomes). - hairy: Mature (fully expanded) leaves on adult plants have hairs (trichomes). - leaf_hairs_immature_leaves: - description: Variable describing whether or not immature (still expanding) adult phase leaves on adult plants have hairs (trichomes). - notes: This trait captures the presence or absence of hairs on immature (still expanding) leaves on adult plants. The accompanying methods should specify if the trait was scored on the upper (adaxial) or lower (abaxial) surface of the leaf; in the absence of any notes, it is assumed the trait was scored on the upper (adaxial) leaf surface. - type: categorical - label: Presence of hairs on immature (still expanding) leaves - allowed_values_levels: - glabrous: Immature (still expanding) leaves do not have hairs (trichomes). - hairy: Immature (still expanding) leaves have hairs (trichomes). - leaf_hairs_juvenile_leaves: - description: Variable describing whether or not fully expanded juvenile phase leaves (on adult or juvenile plants) have hairs (trichomes). - notes: This trait captures the presence or absence of hairs on fully-expanded juvenile phase leaves. It is best practice for the methods to specify whether these leaves were sampled from adult or juvenile plants. The accompanying methods should also specify if the trait was scored on the upper (adaxial) or lower (abaxial) surface of the leaf; in the absence of any notes, it is assumed the trait was scored on the upper (adaxial) leaf surface. - type: categorical - label: Presence of hairs on juvenile phase leaves - allowed_values_levels: - glabrous: Juvenile phase leaves do not have hairs (trichomes). - hairy: Juvenile phase leaves have hairs (trichomes). - leaf_specific_conductance: - description: Measure of how efficiently water is transported through the leaf, determined as the ratio of water flow rate through the leaf to the difference in water potential across the leaf, standardised to leaf area. - type: numeric - units: mmol/m2/MPa/s - label: Leaf hydraulic conductivity - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_hydraulic_vulnerability: - description: Leaf water potential value at which leaf hydraulic conductance has declined by 50% from the mean maximum rate - type: numeric - units: MPa - label: Leaf hydraulic vulnerability - allowed_values_min: .001 - allowed_values_max: 40 - leaf_K_per_area: - description: Leaf potassium (K) content per unit leaf area - type: numeric - units: g/m2 - label: Leaf potassium (K) content per unit leaf area - allowed_values_min: 0.1 - allowed_values_max: 10.0 - leaf_K_per_dry_mass: - description: Leaf potassium (K) content per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf potassium (K) content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_length: - description: Length of a leaf (including the petiole) or a leaf analogue, from the leaf apex to the leaf axil (base). - notes: If a leaf analogue (leaflet, cladode, or phyllode) is measured instead of a true leaf, this should be noted as a `context` or under `measurement_remarks`. - type: numeric - units: mm - label: Leaf length - allowed_values_min: 0.1 - allowed_values_max: 100000.0 - leaf_lifespan: - description: Duration of time that an individual leaf is attached to the stem and physiologically functional. - notes: Leaf lifespan is the inverse of the rate of leaf turnover. For some species, leaflets or other portions of a leaf may be censused rather than the entire leaf lamina. - type: numeric - units: mo - label: Leaf lifespan (longevity) - allowed_values_min: 1.0 - allowed_values_max: 1000.0 - leaf_cellulose_per_dry_mass: - description: Leaf cellulose per unit leaf dry mass - type: numeric - units: mg/mg - label: Leaf cellulose per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_lignin_per_dry_mass: - description: Leaf lignin per unit leaf dry mass - type: numeric - units: mg/mg - label: Leaf lignin per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_tannin_per_dry_mass: - description: Leaf tannins (polyphenols) per unit leaf dry mass - type: numeric - units: mg/mg - label: Leaf tannins (polyphenols) per unit leaf dry mass - allowed_values_min: 0.001 - allowed_values_max: 1.0 - leaf_margin: - description: Shape of the leaf margin, referencing incisions or projections in the outermost 1/8 of the leaf lamina. - notes: Terms describing leaf lamina projections and incisions that are greater than 1/8 of the distance to the midrib are captured under the traits `leaf_lobation` and `leaf_lamina_division_detailed`. - type: categorical - label: Leaf margin - allowed_values_levels: - entire: Leaf margin lacks projections or indentations that extend less than 1/8 of the distance to the midrib. - toothed: Leaf margin has small projections or lobes along the edge of the leaf lamina. This is a broad term that includes serrate, dentate, and crenulate. - toothed_serrate: Type of toothed leaf margin with sharp teeth that are angled toward the tip of the leaf. (synonym, saw-toothed) - toothed_dentate: Type of toothed leaf margin with sharp teeth that point outwards at right angles to the leaf margin. - toothed_crenate: Type of toothed leaf margin with teeth that are rounded or obtuse, rather than having a sharp apex. [PO:0025519] - leaf_margin_posture: - description: The posture (curvature or curling) of the leaf margin. - notes: This trait captures the posture of the leaf margin, where posture refers to the placement of different parts of the leaf's margin relative to a flat plane. This trait's definition and allowable levels will be further refined once more data are available to map onto possible trait values. - type: categorical - label: Leaf margin posture - allowed_values_levels: - revolute: Leaf margins along the side of the leaf are rolled under or downward. [PATO:0001963] - recurved: Leaf tip is curved outward or downward. [PATO:0002211] - flat: Leaf lamina, including margins, is a flat plane. [PATO:0000407] - leaf_lobation: - description: A trait that indicates whether or not a leaf lamina displays any divisions or dissections on a 2-dimensional plane that extend greater than 1/8 of the distance to the midrib. - Notes: For terms pertaining to 2-dimensional leaf lamina divisions and incisions that are less than 1/8 of the distance to the midrib, see the trait `leaf_margin`. See also the trait `leaf_lamina_division` for more detailed leaf lobation (and leaf compoundness) trait values. Note that there might be some species that grade from deeply lobed simple leaves to compound leaves. - type: categorical - label: Leaf lobation - allowed_values_levels: - unlobed: Leaf margin lacks projections or indentations that extend more than 1/8 of the distance to the midrib. - lobed: Leaf margin has incisions, either rounded or sharp-tipped, that extend more than 1/8 of the distance to the midrib. - lobed_deep: Leaf margin with lobes that extend more than halfway to the midrib. (synonym, parted, divided) - lobed_shallow: Leaf margin with lobes that extend less than halfway to the midrib. (synonym, cleft) - leaf_compoundness: - description: A binary trait that indicates whether a leaf lamina is simple or divided into discontinuous leaflets (compound). - notes: See also the trait `leaf_lamina_division` for more detailed leaf compoundness trait values. Note that there might be some species that grade from deeply lobed simple leaves to compound leaves. - type: categorical - label: Leaf compoundness - allowed_values_levels: - simple: A leaf with a single undivided blade. [PO:0020042] - compound: A leaf that is divided into multiple leaflets. [PO:0020043] - leaf_lamina_division: - description: A trait that captures the types of lobed leaves and compound leaves, including the arrangement of the lobes or leaflets relative to the midrib or other primary veins and the number of orders of axes across which there are incisions or divisions. - notes: This trait provides detailed description of leaf divisions, beyond what is captured in `leaf_compoundness` (simple versus compound) and `leaf_lobation` (entire versus lobed). - type: categorical - label: Leaf divisions - allowed_values_levels: - pinnately_lobed: Leaf with divisions that are symmetrical across a central axis, usually the midvein. - palmately_lobed: Leaf with divisions that radiate from a single point, usually the basal junction of major veins. - pinnatifid: Leaf with lobes that extend less than half-way to the midrib. - bipinnatifid: Leaf that is twice pinnatifid, with two series of lobes that extend less than half-way to the midrib. - pinnatipartite: Leaf with lobes that extend more than half-way to the midrib. - pinnatisect: Leaf with lobes that extend nearly to the midrib, but the divisions are not separated into distinct leaflets. - bipinnatipartite: Leaf that is twice pinnatipartite, with two series of lobes that extend more than half-way to the midrib. - bipinnatisect: Leaf that is twice pinnatisect, with two series of lobes that extend nearly to the midrib, but the divisions are not separated into distinct leaflets. - trichotomously_divided: Leaf divided repeatedly into three lobes. - dichotomously_divided: Leaf divided repeatedly into two lobes. - bipartite: Leaf divided into two lobes. - tripartite: Leaf divided into three lobes. - pinnately_divided: Leaf divided into leaflets that attach along a central axis. [PATO_0000410] - palmately_divided: Leaf divided into leaflets that attach to a central point. (synonym, digitate) - bipinnate: Leaf that is twice pinnate, having pinnate leaflets that are themselves pinnately divided. - tripinnate: Leaf that is three times pinnate, with pinnate leaflets that are twice more pinnately divided. - trifoliate: Leaf divided into three leaflets. (synonym, ternate, trifoliolate) - leaf_mass_fraction: - description: Ratio of leaf dry mass to total plant dry mass - type: numeric - units: g/g - label: Leaf mass fraction - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_mass_to_stem_mass_ratio: - description: Ratio of leaf dry mass to stem dry mass - type: numeric - units: g/g - label: Ratio of leaf dry mass to stem dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - leaf_mesophyll_conductance_per_area: - description: Rate of CO2 movement between chloroplasts and sub-stomatal cavities (intracellular space), per unit leaf area - type: numeric - units: mmol{CO2}/g/s - label: Mesophyll conductance per unit leaf area - allowed_values_min: 0.01 - allowed_values_max: 1 - leaf_mesophyll_conductance_per_mass: - description: Rate of CO2 movement between chloroplasts and sub-stomatal cavities (intracellular space), per unit leaf mass - type: numeric - units: mol{CO2}/m2/s - label: Mesophyll conductance per unit leaf mass - allowed_values_min: 0.01 - allowed_values_max: 10 - leaf_Mg_per_dry_mass: - description: Leaf magnesium (Mg) content per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf magnesium (Mg) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 10000 - leaf_Mn_per_dry_mass: - description: Leaf manganese (Mn) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf manganese (Mn) content per unit leaf dry mass - allowed_values_min: 1.0 - allowed_values_max: 20000.0 - leaf_Mo_per_dry_mass: - description: Leaf molybdenum (Mo) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf molybdenum (Mo) content per unit leaf dry mass - allowed_values_min: 0.0 - allowed_values_max: 100 - leaf_N_per_area: - description: Leaf nitrogen (N) content per unit leaf area - type: numeric - units: g/m2 - label: Leaf nitrogen (N) content per unit leaf area - allowed_values_min: 0.15 - allowed_values_max: 50.0 - leaf_N_per_dry_mass: - description: Leaf nitrogen (N) content per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf nitrogen (N) content per unit leaf dry mass - allowed_values_min: 0.5 - allowed_values_max: 100.0 - leaf_Na_per_dry_mass: - description: Leaf sodium (Na) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf sodium (Na) content per unit leaf dry mass - allowed_values_min: 1.0 - allowed_values_max: 20000.0 - leaf_Ni_per_dry_mass: - description: Leaf nickel (Ni) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf nickel (Ni) content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_P_per_area: - description: Leaf phosphorus (P) content per unit leaf area - type: numeric - units: g/m2 - label: Leaf phosphorus (P) content per unit leaf area - allowed_values_min: 0.005 - allowed_values_max: 1.2 - leaf_P_per_dry_mass: - description: Leaf phosphorus (P) content per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf phosphorus (P) content per unit leaf dry mass - allowed_values_min: 0.03 - allowed_values_max: 12 - leaf_phenol_per_dry_mass: - description: Leaf phenol content, measured as gallic acid equivalents (GAE), per unit leaf dry mass - type: numeric - units: mg/g - label: Leaf phenol content per unit leaf dry mass - allowed_values_min: 1 - allowed_values_max: 500 - leaf_phenology: - description: Trait indicating whether a plant retains a leaf canopy throughout the year and what environmental cues are associated with canopy shedding. - notes: .na - type: categorical - label: Leaf phenology type - allowed_values_levels: - deciduous: Plant loses its entire leaf canopy for part of the year, in response to either drought or cold. - evergreen: Plant retains a leaf canopy throughout the year. - cold_deciduous: Plant loses its entire leaf canopy for part of the year, in response to cold. - drought_deciduous: Plant loses its entire leaf canopy for part of the year, in response to drought. - facultative_drought_deciduous: Plant sometimes loses its leaf canopy for part of the year, in response to drought. - semi_deciduous: Plant thins, but does not entirely lose, its leaf canopy in response to an environmental cue, usually drought. - brevi_deciduous: Plant briefly loses its entire leaf canopy, but flushes a new leaf canopy almost simultaneously to leaf loss. - leaf_photosynthetic_nitrogen_use_efficiency_maximum: - description: Ratio of photosynthesis (CO2 assimilation rate) to leaf nitrogen content at saturating light and CO2 conditions - type: numeric - units: umol{CO2}/mol{N}/s - label: Leaf photosynthesis rate per unit leaf nitrogen (N) content (photosynthetic nitrogen use efficiency, PNUE) at saturating light and CO2 conditions - allowed_values_min: 1.0 - allowed_values_max: 1000.0 - leaf_photosynthetic_nitrogen_use_efficiency_saturated: - description: Ratio of photosynthesis (CO2 assimilation rate) to leaf nitrogen content at saturating light conditions but ambient CO2 conditions - type: numeric - units: umol{CO2}/mol{N}/s - label: Leaf photosynthesis rate per unit leaf nitrogen (N) content (photosynthetic nitrogen use efficiency, PNUE) at saturating light conditions but ambient CO2 conditions - allowed_values_min: 1.0 - allowed_values_max: 1000.0 - leaf_photosynthetic_phosphorus_use_efficiency_maximum: - description: Ratio of photosynthesis (CO2 assimilation rate) to leaf phosphorus content at saturating light and CO2 conditions - type: numeric - units: umol{CO2}/mol{P}/s - label: Leaf photosynthesis rate per unit leaf phosphorus (P) content (photosynthetic phosphorus use efficiency, PPUE) at saturating light and CO2 conditions - allowed_values_min: 100.0 - allowed_values_max: 100000.0 - leaf_photosynthetic_phosphorus_use_efficiency_saturated: - description: Ratio of photosynthesis (CO2 assimilation rate) to leaf phosphorus content at saturating light conditions but ambient CO2 conditions - type: numeric - units: umol{CO2}/mol{P}/s - label: Leaf photosynthesis rate per unit leaf phosphorus (P) content (photosynthetic phosphorus use efficiency, PPUE) at saturating light conditions but ambient CO2 conditions - allowed_values_min: 10.0 - allowed_values_max: 100000.0 - leaf_Se_per_dry_mass: - description: Leaf selenium (Se) content per unit leaf dry mass - type: numeric - units: ppm - label: Leaf selenium (Se) content per unit leaf dry mass - allowed_values_min: .01 - allowed_values_max: 100 - leaf_Si_per_dry_mass: - description: Leaf silicon (Si) content per unit leaf dry mass - type: numeric - units: g/kg - label: Leaf silicon (Si) content per unit leaf dry mass - allowed_values_min: .01 - allowed_values_max: 100 - leaf_S_per_dry_mass: - description: Leaf sulphur (S) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf sulphur (S) content per unit leaf dry mass - allowed_values_min: 50.0 - allowed_values_max: 50000.0 - leaf_shape: - description: Shapes of a leaf or leaflet. - notes: This trait includes terms to describe the shape of leaves, regardless if they are broad leaves, scale-like leaves, or needle-like leaves. For compound leaves, it is generally the shape of the leaflet that is recorded. See the trait `leaf_type` for broad terms referencing leaf form (broadleaf, needle, scale) and `plant_photosynthetic_organ` for terms indicating which plant organ or tissue functions as the plant's primary photosynthetic organ (e.g. phyllode, cladode, article). - type: categorical - label: Leaf shape - allowed_values_levels: - linear: 'A 2-dimensional shape that is very long and narrow, has parallel sides and a length:width ratio between 12:1 and 6:1' - narrowly_oblong: 'A 2-dimensional shape that is long and narrow, has parallel sides and a length:width ratio between 6:1 and 3:1 (synonym: lorate)' - oblong: 'A 2-dimensional shape that is somewhat elongated with parallel sides and a length:width ratio between 2:1 and 3:2' - linear_elliptical: 'A 2-dimensional shape that is a very narrow oval, with curved margins, lacking a distinct point, and a length:width ratio between 12:1 and 6:1' - narrowly_elliptical: 'A 2-dimensional shape that is a narrow oval, with curved margins, lacking a distinct point, and a length:width ratio between 6:1 and 3:1' - elliptical: 'A 2-dimensional shape that is an oval, with curved margins, lacking a distinct point, and a length:width ratio between 2:1 and 3:2 (synonyms, oval)' - widely_elliptical: 'A 2-dimensional shape that is a broad oval, with curved margins, lacking a distinct point, and a length:width ratio of approximately 6:5' - orbicular: 'A 2-dimensional shape that is approximately circular. (synonym: circular)' - oblate: 'A 2-dimensional shape that is a broad oval, with curved margins, lacking a distinct point, and a length:width ratio of approximately 5:6, where the petiole attaches along the broader side.' - lanceolate: 'A 2-dimensional shape that is narrowly egg-shaped or teardrop-shaped, with a length:width ratio between 6:1 and 3:1. The petiole attaches near the wide, curved portion of the leaf lamina.' - narrowly_ovate: 'A 2-dimensional shape that is narrowly egg-shaped, with a length:width ratio between 3:1 and 2:1. The petiole attaches near the wide, curved portion of the leaf lamina. (synonym, lance_ovate, widely_lanceolate)' - ovate: 'A 2-dimensional shape that is egg-shaped, with a length:width ratio between 2:1 and 3:2. The petiole attaches near the wide, curved portion of the leaf lamina.' - widely_ovate: 'A 2-dimensional shape that is broadly egg-shaped with a length:width ratio of approximately 6:5. The petiole attaches near the wide, curved portion of the leaf lamina.' - narrowly_oblanceolate: 'A 2-dimensional shape that is very narrowly teardrop-shaped, with a length:width ratio between 12:1 and 6:1. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole. (synonym, linear_oblanceolate)' - oblanceolate: 'A 2-dimensional shape that is narrowly teardrop-shaped, with a length:width ratio between 6:1 and 3:1. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole.' - narrowly_obovate: 'A 2-dimensional shape that is narrowly egg-shaped or teardrop-shaped with a length:width ratio between 3:1 and 2:1. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole. (synonym, oblance-obovate)' - obovate: 'A 2-dimensional shape that is egg-shaped with a length:width ratio between 2:1 and 3:2. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole.' - widely_obovate: 'A 2-dimensional shape that is broadly egg-shaped with a length:width ratio of approximately 6:5. The leaf lamina has curved outer margins and narrows nearly to a point where it attaches to the petiole.' - narrowly_triangular: 'A 2-dimensional shape that is narrowly triangular to wedge-shaped, with a length:width ratio 6:1 to 3:1 and the petiole attaching near the widest portion of the leaf (synonym: triangular; wedge-shaped).' - triangular: 'A 2-dimensional shape that is triangular to wedge-shaped, with a length:width ratio 2:1 to 3:2 and the petiole attaching near the widest portion of the leaf (synonym: wedge-shaped).' - deltate: 'A 2-dimensional shape that is triangular to wedge-shaped, with a length:width ratio of 1:1 and the petiole attaching along one of the broad sides.' - obtriangular: 'A 2-dimensional shape that is triangular to fan-shaped or wedge-shaped, with a length:width ratio 2:1 to 3:2 and the petiole attaching near the narrowest portion of the leaf (synonym: flabelliform, fan-shaped, wedge-shaped).' - narrowly_rhomboidal: 'A 2-dimensional shape that is like a narrow diamond, with approximately straight edges, widest near the middle, and a length:width ratio 6:1 to 3:1. The petiole attaches near one of the points.' - rhomboidal: 'A 2-dimensional shape that is approximately diamond or parallelogram-shaped, with approximately straight edges, widest near the middle, and a length:width ratio 2:1 to 3:2. The petiole attaches near one of the points. (synonym: rhombic, diamond)' - trullate: 'A 2-dimensional shape that is approximately parallelogram-shaped, widest near where the petiole attaches (base), and with a length:width ratio 2:1 to 3:2.' - narrowly_obtrullate: 'A 2-dimensional shape that is narrowly parallelogram-shaped, widest near the tip, and with a length:width ratio 3:1 to 6:1.' - obtrullate: 'A 2-dimensional shape that is approximately parallelogram-shaped, widest near the tip, and with a length:width ratio 2:1 to 3:2.' - widely_obtrullate: 'A 2-dimensional shape that is broadly parallelogram-shaped, widest near the tip, and with a length:width ratio of approximately 6:5.' - acicular: 'A 2-dimensional or 3-dimensional shape with a needlelike tip, often round in cross-section, with margins straight and parallel, and a length:width ratio greater than 12:1. (synonym, needle-shaped)' - terete: 'A 3-dimensional shape that is a long, narrow cylinder approximately circular in cross-section. Terete leaves often taper toward the tip.' - cordate: 'A 2-dimensional heart shape, approximately ovate with a cordate base, with the petiole attaching at the notch between the lobes. (synonym, cordiform)' - obcordate: 'A 2-dimensional heart shape, approximately ovate with a cordate apex, and the petiole attaching along the broad, curve side.' - falcate: 'A 2-dimensional sickle-shape, approximately lanceolate to linear and curved on one side. (synonym: scimitar-shaped, sickle-shaped, falciform)' - reniform: 'A 2-dimensional shape that is roughly kidney-shaped, wider than long with a rounded apex and two rounded, basal lobes that are smoothly concave at their intersection.(synonym, kidney-shaped)' - spathulate: 'A 2-dimensional shape that can be approximately oblong, obovate, or oblanceolate in outline with a long attenuate base, like a spoon. (synonym, spoon-shaped)' - subulate: 'A 2-dimensional shape that is awl-shaped, approximately narrowly oblong to narrowly triangular with a broad base. (synonym, awl-shaped).' - peltate: 'A 2-dimensional orbicular shape, distinguished by the petiole attaching near the center of the leaf lamina.' - filiform: 'A 2-dimensional shape that is long, thin, and typically flexuous, threadlike, filamentous' - leaf_base_shape: - description: The shape of the basal margin of a leaf. - type: categorical - label: Leaf base shape - allowed_values_levels: - attenuate: Basal leaf margin abruptly incurved (concave), the two sides intersecting at an angle of less than 45°. - auriculate: Basal leaf margin with two rounded lobes. The leaf margin above the lobes is concave. The petiole attaches in the incised region between the lobes. - cuneate: Basal leaf margin approximately straight, the two sides intersecting at an angle between 45° to 90°. - hastate: Basal leaf margin with two lobes oriented outward, such that they are at approximately 90° relative to the central axis and the leaf margin is fairly flat at the base. - sagittate: Basal leaf margin with two lobes oriented downward, away from apex. The petiole attaches in the concave region between the lobes. - leaf_specific_conductivity: - description: Kl; the ratio of leaf hydraulic conductivity to the leaf area distil to the segment - type: numeric - units: 10^4.kg/m/MPa/s - label: Leaf specific hydraulic conductivity (Kl) - allowed_values_min: 0.1 - allowed_values_max: 500.0 - leaf_thickness: - description: The thickness of the leaf lamina, generally measured away from the midrib. - notes: Leaf thickness measurements submitted from the ecological literature will generally avoid the midrib, but not avoid lower order leaf veins. In contrast, leaf thickness measurements from the taxonomic literature will usually include any veins or midribs, because in this literature leaf thickness is generally measured on succulent plants. The `methods` field should document whether the midrib was explicitly included, excluded, or ignored. - type: numeric - units: mm - label: Leaf thickness - allowed_values_min: 0.01 - allowed_values_max: 51.0 - whole_plant_transpiration: - description: Rate of water loss per plant, as calculated across longer periods of time under experimental conditions. - type: numeric - units: g/cm2/d - label: Whole plant transpiration - allowed_values_min: .01 - allowed_values_max: 1000 - leaf_transpiration: - description: Rate of water loss from leaf under ambient conditions - type: numeric - units: mmol{H2O}/m2/s - label: Leaf transpiration under ambient conditions - allowed_values_min: 0.0001 - allowed_values_max: 10000.0 - leaf_transpiration_at_Amax: - description: Rate of water loss from leaf during Amax measurement - type: numeric - units: mmol{H2O}/m2/s - label: Leaf transpiration during Amax measurement - allowed_values_min: 0.0001 - allowed_values_max: 10000.0 - leaf_transpiration_at_Asat: - description: Rate of water loss from leaf during Asat measurement - type: numeric - units: mmol{H2O}/m2/s - label: Leaf transpiration during Asat measurement - allowed_values_min: 0.0001 - allowed_values_max: 10000.0 - leaf_dark_transpiration_per_area: - description: Leaf transpiration rate per unit leaf area, in the dark - type: numeric - units: mmol{H2O}/m2/s - label: Leaf transpiration rate per unit leaf area, in the dark - allowed_values_min: 0.0001 - allowed_values_max: 10000.0 - leaf_turgor_loss_point: - description: Water potential at which a leaf loses turgor - type: numeric - units: MPa - label: Leaf turgor loss point - allowed_values_min: .01 - allowed_values_max: 100 - leaf_relative_water_content_at_turgor_loss_point: - description: Ratio of water in a fresh leaf to water in a leaf at turgor loss; calculated from a pressure-volume curve. - type: numeric - units: g/g - label: Leaf relative water content at turgor loss point - allowed_values_min: 0.1 - allowed_values_max: 1.0 - bulk_modulus_of_elasticity: - description: In leaves, the ratio of the change in cell turgor to the change in cell volume as a plant dries out; calculated from a pressure-volume curve - type: numeric - units: MPa - label: Bulk modulus of elasticity (e) - allowed_values_min: 0.1 - allowed_values_max: 100 - osmotic_potential_at_full_turgor: - description: Osmotic potential at full tugor; calculated from a pressure-volume curve - type: numeric - units: MPa - label: Osmotic potential at full tugor - allowed_values_min: -10 - allowed_values_max: -0.1 - plant_photosynthetic_organ: - description: Trait indicating a plant's primary photosynthetic organ or tissue. - notes: This trait is not intended to record the presence of primary versus secondary photosynthetic organs; only the primary photosynthetic organ should be keyed in. Many of the allowable values for this trait are frequently included under `leaf type` or `leaf form`. Here, we separate terms pertaining to the general form of the leaf (in the trait `leaf_type`) from those identifying the plant organ responsible for photosynthesis. - type: categorical - label: Plant photosynthetic organ - allowed_values_levels: - leaf: A true leaf, including both laminar and needle-shaped leaves. - cladode: A photosynthetic shoot, regardless of form, that functions as a leaf. For example, cacti pads and Casuarina articles. (synonyms, article, phylloclade, cladophyll) - phyllode: A flattened bladelike petiole. - non-photosynthetic_plant: A plant that lacks any photosynthetic organs. - deprecated_name: leaf_type - leaf_type: - description: Variable distinguishing between general leaf form (shape) categories. - notes: Terms identifying the plant organ responsible for photosynthesis are mapped to the trait `plant_photosynthetic_organ`, while `leaf_form_general` only includes terms pertaining to the general form of the leaf. The trait `leaf_shape` provides detailed vocabulary to describe a leaf's shape. - type: categorical - label: Leaf form - allowed_values_levels: - broadleaf: Flat leaf lamina, including leaves that both are and are not,toothed, lobed, or compound. - needle: Needle or awl-shaped leaf that is generally 3-dimensional. - scale: Leaf reduced to a small scale. - leafless: An adult stage plant that lacks leaves throughout the year. - leaf_water_content_per_area: - description: Ratio of the mass of water in a leaf to leaf surface area; leaf succulence - type: numeric - units: g/m2 - label: Leaf water content per unit area - allowed_values_min: 10.0 - allowed_values_max: 5000.0 - leaf_water_content_per_dry_mass: - description: Ratio of the mass of water in a leaf to leaf dry mass. (See also leaf_dry_matter_content, the ratio of a leaf's dry mass to fresh mass, that is recorded by a greater number of studies.) - type: numeric - units: g/g - label: Leaf water content per unit dry mass - allowed_values_min: 0.01 - allowed_values_max: 20.0 - leaf_water_content_per_fresh_mass: - description: Ratio of the mass of water in a leaf to leaf fresh mass. (See also leaf_dry_matter_content, the ratio of a leaf's dry mass to fresh mass, that is recorded by a greater number of studies.) - type: numeric - units: g/g - label: Leaf water content per unit fresh mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - leaf_water_content_per_saturated_mass: - description: Ratio of water in a saturated leaf (maximal water holding capacity at full turgidity) to leaf saturated mass - type: numeric - units: g/g - label: Leaf water content per unit mass of saturated leaf - allowed_values_min: 0.1 - allowed_values_max: 10.0 - stem_water_content_per_saturated_mass: - description: Ratio of water in a saturated stem (maximal water holding capacity at full turgidity) to stem saturated mass - type: numeric - units: g/g - label: Water content per unit mass of saturated stem - allowed_values_min: 0.1 - allowed_values_max: 10.0 - bark_water_content_per_saturated_mass: - description: Ratio of water in a saturated bark (maximal water holding capacity at full turgidity) to bark saturated mass - type: numeric - units: g/g - label: Water content per unit mass of saturated bark - allowed_values_min: 0.1 - allowed_values_max: 10.0 - bark_water_content_per_dry_mass: - description: Ratio of the mass of water in a bark to bark dry mass. - type: numeric - units: g/g - label: Bark water content per unit dry mass - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_width: - description: The maximum width axis of a leaf or a leaf analogue (a leaflet, cladode, or phyllode), measured perpendicular to the leaf length. - notes: This trait refers to the single line marking the maximum width of the leaf lamina. For a compound leaf the correct measure is the maximum width of the total leaf blade. It is the width measure that will be reported in taxonomic treatments. It is not the `effective_leaf_width`, a trait that records the diameter of the largest circle that can be drawn within the leaf lamina. If a leaf analogue (leaflet, cladode, or phyllode) is measured instead of a true leaf, this should be noted as a `context` or under `measurement_remarks`. - type: numeric - units: mm - label: Leaf width - allowed_values_min: 0.01 - allowed_values_max: 100000.0 - leaf_work_to_punch: - description: Measure of how much force (work) is required to punch through a leaf; units same as J/m2; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies - type: numeric - units: 'N/m' - label: Work to punch through a leaf - allowed_values_min: 0.5 - allowed_values_max: 10000.0 - leaf_work_to_punch_adjusted: - description: Measure of how much force (work) is required to punch through a leaf, adjusted for leaf thickness; units same as J/m2; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies - type: numeric - units: 'N/m2' - label: Work to punch through a leaf, adjusted for leaf thickness - allowed_values_min: 1000.0 - allowed_values_max: 30000000.0 - leaf_work_to_tear: - description: Measures of how much force (work) is required to tear/rip a leaf; units same as J/m; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies - type: numeric - units: 'N' - label: Work to tear a leaf - allowed_values_min: 0.01 - allowed_values_max: 50.0 - leaf_work_to_tear_adjusted: - description: Measures of how much force (work) is required to tear/rip a leaf, adjusted to leaf thickness; units same as J/m2; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies - type: numeric - units: 'N/m' - label: Work to tear a leaf, adjusted for leaf thickness - allowed_values_min: 10.0 - allowed_values_max: 15000.0 - leaf_work_to_shear: - description: Measures of how much force (work) is required to shear a leaf; equivalent to cutting a leaf with scissors; units same as J/m; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies - type: numeric - units: 'N' - label: Work to shear a leaf - allowed_values_min: 0.01 - allowed_values_max: 10.0 - leaf_work_to_shear_adjusted: - description: Measures of how much force (work) is required to shear a leaf, adjusted to leaf thickness; same units as J/m2; also referred to as 'fracture toughness'; slight variation in methods used will mean that, in some cases, values are not perfectly comparable across studies - type: numeric - units: N/m - label: Work to shear a leaf, adjusted for leaf thickness - allowed_values_min: 100.0 - allowed_values_max: 10000.0 - leaf_Zn_per_dry_mass: - description: Leaf zinc (Zn) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Leaf zinc (Zn) content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 1000.0 - life_form: - description: Raunkiaer classification of life form, indicating the location of and protection provided to surviving meristematic tissue (buds) during the unfavourable (cold or dry) season. - type: categorical - label: Life form - allowed_values_levels: - phanerophyte: Plant whose perennating buds are on persistent shoots which rise at least 50 cm above the soil surface. These are normally woody perennials. - chamaephyte: Plant whose perennating buds are on persistent shoots that do not extend more than 50 cm above the soil surface. These are normally woody perennials. - hemicryptophyte: Plant whose perennating buds are at or near the soil surface. - cryptophyte: Plant whose perennating buds are subterranean or under water. This grouping can be further divided into geophyte, helophyte, and hydrophyte. - geophyte: Plant that perennates as an organ (rhizome, bulb, corm, or tuber) buried in dry soil, with all leaves dying back each year; a subcategory of cryptophyte. - helophyte: Plant that perennates as an organ (rhizome, bulb, corm, or tuber) buried in marshy or wet soil or lying under water, with buds emerging during the growing season and shoots and leaves rising about the water surface; a subcategory of cryptophyte. (synonym, emergent_hydrophyte) - hydrophyte: Plant that perennates as buds or as an organ (rhizome, bulb, corm, or tuber) buried in marshy or wet soil or lying under water, with shoots emerging during the growing season that remain below or at the water surface; a subcategory of cryptophyte. - therophyte: Annual plants whose shoot and root systems die completely at the end of flowering and seed production, such that they survive the unfavourable cold or dry season in the form of seeds. - epiphyte: Plant that grows on the surface of another plant. - aerophyte: Plant that obtains moisture and nutrients from the air and rain, resting on other plants or the ground surface. - life_history: - description: Categorical description of the duration of a plant's lifespan, from germination to death. - type: categorical - label: Life history - allowed_values_levels: - ephemeral: A very short-lived plant, generally with a lifespan of only a few months and the exact length of lifespan quite variable and determined by environmental conditions. - annual: A plant that lives for up to one year after germinating, completing its life cycle in a single growing season. - biennial: A plant that lives for up to two years after germinating, requiring two growing seasons to complete its life cycle and dying following the second growing season. - perennial: A plant that lives for three or more growing seasons, with an exact lifespan that is indeterminate. - short_lived_perennial: A perennial whose lifespan is less than approximately five years, with the exact lifespan generally dependent on environmental conditions. - lifespan: - description: Broad categories of plant life span, in years - type: numeric - units: a - label: Life span (years) - allowed_values_min: 0.1 - allowed_values_max: 10000 - sex_type: - description: Plant sex type - type: categorical - label: Plant sex type - allowed_values_levels: - androdioecious: Taxa in which hermaphroditic and staminate (male) plants coexist within a population - andromonoecious: Taxa with hermaphrodite flowers and staminate flowers (producing just male gametes) on the same plant but no pistillate (female) flowers. - dioecious: Taxa that produce male and female flowers on separate plants - gynodioecious: Taxa in which hermaphroditic and pistillate (female) plants coexist within a population - gynomonoecious: Taxa with hermaphrodite flowers and pistillate flowers (producing just female gametes) on the same plant but no staminate (male) flowers. - hermaphrodite: Taxa with flowers that produce both male and female gametes; bisexual - monoecious: Taxa that have both male and female flowers on the same plant, but an individual flower produces only male or female gametes. - polygamous: Taxa with both unisexual and bisexual flowers on the same plant - polygamodioecious: Taxa where some flowers on a plant are hermaphrodite and other are pistillate (female) or staminate (male) - polygamonoecious: Taxa where some plants in a population have hermaphrodite and pistillate (female) flowers and others have hermaphrodite and staminate (male) flowers - trioecious: Taxa where plants in a population have either hermaphroditic (bisexual) flowers, pistillate (female) flowers, or staminate (male) flowers - unknown: inadequate information to assign a sex type - modified_NDVI: - description: Modified normalized difference vegetation index (modified NDVI), based on Landsat data - type: numeric - units: '{dimensionless}' - label: modified normalized difference vegetation index (modified NDVI) - allowed_values_min: 0.1 - allowed_values_max: 1 - xylem_modulus_of_elasticity: - description: A measure of xylem's resistance to being deformed elastically (i.e., non-permanently) when a stress is applied to it; definition for measurements on wood (secondary xylem) - type: numeric - units: MPa - label: Modulus of elasticity (Young's modulus) - allowed_values_min: 10 - allowed_values_max: 100000 - stem_modulus_of_elasticity: - description: A measure of the force required to bend a stem; This is the modulus of a compound tissue made up of bark and wood (or xylem) and potentially pith; could also be called structural modulus of elasticity - type: numeric - units: MPa - label: A measure of the force required to bend a stem - allowed_values_min: 10 - allowed_values_max: 100000 - bark_modulus_of_elasticity: - description: A measure of the force required to bend bark - type: numeric - units: MPa - label: A measure of the force required to bend bark - allowed_values_min: 10 - allowed_values_max: 100000 - modulus_of_rupture: - description: A measure of the force required to rupture xylem vessels - type: numeric - units: MPa - label: Bulk modulus of rupture - allowed_values_min: 1 - allowed_values_max: 10000 - nitrogen_fixing: - description: Binary variable describing whether or not a plant hosts a nitrogen-fixing bacteria - type: categorical - label: Plant nitrogen fixation capacity - allowed_values_levels: - non_nitrogen_fixer: plant does not exhibit nitrogen-fixation - nitrogen_fixer: plant does exhibit nitrogen-fixation - leaf_NP_ratio: - description: Ratio of N to P per unit leaf dry mass - type: numeric - units: g/g - label: Ratio of N to P per unit leaf dry mass - allowed_values_min: 1 - allowed_values_max: 100 - osmotic_potential: - description: Potential for water to move across a semi-permeable membrane based on solute concentration - type: numeric - units: MPa - label: Osmotic potential - allowed_values_min: -10 - allowed_values_max: 0 - leaf_palisade_cell_length: - description: Length of individual palisade cells - type: numeric - units: um - label: Length of individual palisade cells - allowed_values_min: 10 - allowed_values_max: 1000 - leaf_palisade_cell_thickness_abaxial: - description: Thickness (length) of lower palisade cells - type: numeric - units: um - label: Lower palisade cell thickness - allowed_values_min: 10 - allowed_values_max: 1000 - leaf_palisade_cell_thickness_adaxial: - description: Thickness (length) of upper palisade cells - type: numeric - units: um - label: Upper palisade cell thickness - allowed_values_min: 10 - allowed_values_max: 1000 - leaf_palisade_cell_width: - description: Width of individual palisade cells - type: numeric - units: um - label: Width of individual palisade cells - allowed_values_min: 1 - allowed_values_max: 50 - leaf_palisade_layer_number: - description: Number of layers of palisade cells - type: numeric - units: '{count}' - label: Number of layers of palisade cells - allowed_values_min: 1 - allowed_values_max: 10 - parasitic: - description: Trait indicating whether a plant forms haustoria and obtains part or all of its energy-rich carbon compounds (photosynthetic sugars), mineral nutrition and/or water directly from another plant (its host) in an interaction that does not benefit the host plant. - notes: Plants described as parasitic in the context of this trait always have haustoria, specialised organs that penetrate the host plants's vascular bundles. This trait does not document plants that have symbiotic relationships with fungi; that is documented in the trait `root_structures`. It also does not document trait values that indicate other specialised organs or tissues plants use to obtain carbon or mineral nutrition; these are documented in the trait `plant_specialised_resource_acquistion_strategies` - type: categorical - label: Plant's parasitic status - allowed_values_levels: - hemiparasitic: Plant that is photosynthetic, but augments its energy, mineral nutrition, and /or water supply through parasitism. This trait value does not distinguish between obligate hemiparasites, plants which require a host for at least part of their life cycle, and facultative hemiparasites, plants which can grow and reproduce without a host. - hemiparasitic_obligate: Plant that is photosynthetic, but requires a host for at least part of its life cycle. - hemiparasitic_facultative: Plant that is photosynthetic and can grow and reproduce without a host, but augments its energy, mineral nutrition, and /or water supply through parasitism. - holoparasitic: Plant that obtains all (or nearly all) of its energy through parasitism. - parasitic: Plant that obtains some energy, mineral nutrition and/or water through parasitism. This term is used if a dataset does not specify if a plant is a hemiparasite or a holoparasite. - not_parasitic: In the context of this trait, a plant that does not acquire energy, mineral nutrition, and/or water via haustoria connected to another plant. It can include species that form a symbiosis, including a parasitic interaction, with a fungal partner. - root_parasitic: Parasitic plant whose haustoria penetrate the root of a host plant. - stem_parasitic: Parasitic plant whose haustoria penetrate the stem of a host plant. - plant_energy_aquisition_strategy: - description: Trait indicating non-photosynthetic strategies plants use to acquire energy. - type: categorical - label: Plant energy aquisition strategy - allowed_values_levels: - saprophyte: Plant that acquires nutrients from decaying matter. - bark_photosynthetic_status: - description: Binary variable indicating whether or not bark is photosynthetic - type: categorical - label: Bark photosynthesis - allowed_values_levels: - non_photosynthetic_bark: bark is not photosynthetic - photosynthetic_bark: bark is photosynthetic - photosynthetic_pathway: - description: Type of photosynthetic pathway displayed by plants - type: categorical - label: Photosynthetic pathway - allowed_values_levels: - c3: Plant using the 'standard' photosynthetic pathway, where a 3-carbon compound is produced after the first stage in the photosynthetic pathway - c4: Plants in which the photosynthetic light-dependent reactions and the Calvin cycle are physically separated to reduce photo respiration - c3-c4: Taxa that shift between c3 and c4 photosynthesis - cam: Plants which display crassulacean acid metabolism - c3-cam: Taxa that shift between c3 and cam photosynthesis - c4-cam: Taxa that shift between c4 and cam photosynthesis - facultative_cam: Species that shifts between C3 and CAM photosynesis depending on water availablility. - unknown: Photosynthetic pathway unknown - leaf_photosynthetic_rate_per_area_ambient: - description: Rate at which a plant consumes carbon dioxide through photosynthesis, per unit leaf area - type: numeric - units: umol{CO2}/m2/s - label: Leaf photosynthesis rate per unit leaf area - allowed_values_min: 0.25 - allowed_values_max: 50 - leaf_photosynthetic_rate_per_area_maximum: - description: Rate at which a plant consumes carbon dioxide through photosynthesis at saturating light and CO2 conditions, per unit leaf area - type: numeric - units: umol{CO2}/m2/s - label: Leaf photosynthesis rate per unit leaf area at saturating light and CO2 conditions - allowed_values_min: 0.25 - allowed_values_max: 85 - leaf_photosynthetic_rate_per_area_saturated: - description: Rate at which a plant consumes carbon dioxide through photosynthesis at saturating light conditions but ambient CO2 conditions, per unit leaf area - type: numeric - units: umol{CO2}/m2/s - label: Leaf photosynthesis rate per unit leaf area at saturating light conditions - allowed_values_min: 0.01 - allowed_values_max: 100 - leaf_photosynthetic_rate_per_dry_mass_ambient: - description: Maximum rate at which a plant consumes carbon dioxide through photosynthesis, per unit leaf dry mass - type: numeric - units: umol{CO2}/g/s - label: Leaf photosynthesis rate per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_photosynthetic_rate_per_dry_mass_maximum: - description: Maximum rate at which a plant consumes carbon dioxide through photosynthesis at saturating light and CO2 conditions, per unit leaf dry mass - type: numeric - units: umol{CO2}/g/s - label: Leaf photosynthesis rate per unit leaf dry mass at saturating light and CO2 conditions - allowed_values_min: 0.01 - allowed_values_max: 1.0 - leaf_photosynthetic_rate_per_dry_mass_saturated: - description: Maximum rate at which a plant consumes carbon dioxide through photosynthesis at saturating light conditions but ambient CO2 conditions, per unit leaf dry mass - type: numeric - units: umol{CO2}/g/s - label: Leaf photosynthesis rate per unit leaf dry mass at saturating light conditions - allowed_values_min: 0.001 - allowed_values_max: 1.0 - plant_growth_form: - description: The form of a plant, capturing a general sense of plant height and shape, which parts of a plant are woody versus herbaceous, the number of stems arising at ground level, and the distribution of leaves relative to the main stem. - notes: This definition of plant growth form is narrower than what is used by many other references. Here, information pertaining to where a plant grows is captured by `plant_growth_substrate`. Terminology about the shape and length of stems and distribution of leaves is included in `stem_growth_habit`. An indication of whether or not a plant is parasitic is presented in `parasitic`. Included in the list of plant growth forms are two terms that are exclusively used to describe Australian plants, mallee and hummock, and one, tussock, that is an important growth form of Australian grasses, but globally used less frequently. - type: categorical - label: Plant growth form - allowed_values_levels: - herb: A seed-bearing plant which does not have a woody above-ground stem; when available this term has been divided into more detailed terms. (synonym, forb) - subshrub: A plant that is only woody at the base, with the remainder of the stems regenerating yearly. This term is not meant to encompass short-lived plants that are only borderline woody. (synonym, suffrutescent) - shrub: A woody plant that is distinguished by NOT being a tree, due to one of more of the following characteristics, 1) they are less than 8 metres in height; 2) if a plant community includes trees, the shrubs are shorter than the surrounding trees and not part of the canopy; 3) in comparison to trees, the leaves are more distributed along the entire trunk; 4) the plant has multiple relatively narrow stems arising at or near ground level. The definition of `shrub` is complex, as there are many single-stemmed shrubs within Australia and many taxa that are described in the taxonomic literature as a shrub or small tree. - mallee: Refers to Eucalyptus species which are small trees that form a large lignotuber. They have multiple stems arising at or near ground level and regenerate from the lignotuber following fire. - tree: A tall, woody, perennial plant, usually with a single main trunk, and its leaves predominately elevated above the ground surface. - graminoid: Herbaceous plant with a grass-like morphology that is within the order Poales. Taxa both with and without a tussock form are mapped to this term. This term is most frequently applied to three large monocot families, Poaceae, Cyperaceae, and Juncaceae, but the term could apply to other taxa within Poales with a grass-like morphology, including narrow, linear leaves and non-showy flowers, including Restionaceae, Centrolepidaceae, Anarthriaceae, and Ecdeiocoleaceae. Taxa outside Poales with a grass-like morphology should be designated as `herbs` and also have the term `tufted` mapped to the trait `stem_growth_habit`. - tussock: A subcategory of graminoid, which is a plant where many shoots from the basal meristem form prominent tufts. - graminoid_not_tussock: A subcategory of graminoid, indicating a plant which explicitly lacks a tussock morphology, with the leaves not growing in tufts. - hummock: Plant that grows as a dense mound up to 1 metre in height. The term generally applies only to species within the genera Triodia that form such mounds and these are considered a distinctive and uniquely Australian growth form. - basal_large: A plant whose leaves form a distinctly large basal tuft or rosette, including large acaulescent monocots and cycads. - geophyte: Subcategory of herb, specifically referring to plants that survive the winter/dry season as an organ (rhizome, bulb, corm, or tuber) buried in dry soil, with all leaves dying back each year. - palmoid: Plant that bears a rosette-like canopy of typically large, often compound leaves atop a usually thick (pachycaulous), columnar, unbranched or little-branched stem. Palms, tree ferns, trunked cycads, trunked grass-trees, and Pandanus are mapped to this term. (synonym, rosette-tree, palm, grass-tree) - climber: Plant that climbs up another plant's stem or branches, rather than being able to support itself. Term used only if datasets do not specify if a climbing plant is herbaceous (a vine) or woody (a liana). - climber_herbaceous: Herbaceous plant that climbs up another plant's stem or branches, rather than being able to support itself. This is usually synonymous with `vine`. Types of climbers (scrambling, twining) are captured under the trait `plant_climbing_mechanism`. (synonym, vine) - climber_woody: Woody or thick-stemmed (>2 cm) plant that climbs up another plant's stem or branches, rather than being able to support itself. This is usually synonymous with `liana`. Woody climbers generally use hooks, tendrils, and/or adventitious roots to climb; the climbing mechanisms used by a taxon are captured under the trait `plant_climbing_mechanism`. (synonym, liana) - fern: A taxonomic grouping; ferns are vascular plants that reproduce via spores. - lycophyte: A taxonomic grouping that includes quillworts, clubmosses, and selaginella. - plant_succulence: - description: Trait characterising whether the leaves or stems of a plant are thick and fleshy because they store water, generally an adaptation to arid or salty environments. - notes: Succulence generally has either a water storage function or is a mechanism to cope with (or thrive in) saline conditions. See the trait `salt tolerance` for detailed variation in plant salt tolerance and salt avoidance strategies. - type: categorical - label: Plant succulence - allowed_values_levels: - succulent_stems: Stems are thick and fleshy. - succulent_leaves: Leaves are thick and fleshy. - succulent: A plant is designated as succulent, but it is not specified which tissues are thick and fleshy. - semi-succulent: A plant has tissues that are somewhat thick and fleshy, including many chenopods. - not_succulent: Neither stems nor leaves are thick and fleshy. - stem_growth_habit: - description: Trait characterising a stem's structure and 3-dimensional extent, including the position of stems, degree of branchiness, density of branches, and branch angles relative to other branches and the ground surface. - notes: This trait captures how a plant explores 3-dimensional space, with trait values predominantly adjectives that modify the core plant growth forms. - type: categorical - label: Stem growth habit - allowed_values_levels: - arborescent: Tree-like growth habit. - erect: Stems that grow upright. - caespitose: Multiple short-shoots arise from the base of the plant forming a dense tuft, as in a bunch-grass (synonym, cespitose, bunch-grass, tussock) - cushion-forming: Multiple erect, short stems arise from the soil and are so tightly packed that they form dense, even, rounded canopy with no gaps. (synonym, cushion) - mat-forming: Multiple stems that are mostly horizontal and are densely packed, but open enough that there are still a few gaps between them. - tufted: Plant has a dense clump of leaves, either at the base of the plant or clusters of leaves growing close together higher on the plant. This term can refer to grasses, shrubs, or trees. - creeping: Stem that creeps along the ground, rooting at nodes. (synonym, repent) - decumbent: Stems whose bases lie flat on the ground, but whose tips grow upward. (synonym, ascending) - prostrate: Stems lie flat on the ground but do not root at nodes (synonym, procumbent, reclining, trailing) - rosette: Plants whose leaves radiate from a central point at or near ground level. (synonym, acaulescent, rosulate) - climbing: Stem that does not have a self-supporting structure and ascends by leaning on or attaching itself to surrounding vegetation or another substrate. Climbing mechanisms include tendrils, petioles, adventitious roots, scrambling, and twining and are distinguished between in the trait `plant_climbing_mechanism`. - sprawling: Stem that sprawls across other plants or objects, but lacks specialised climbing structures or mechanisms.(synonym, clambering, scandent) - rhizomatous: Plants with short horizontal underground stems from which shoots emerge. - stoloniferous: Plants with long horizontal branches either slightly belowground or aboveground, that root at their nodes or tips, producing new plants. (synonym, sarmentose) - spreading: Plants with a notable horizontal extent, referring either to a broad tree canopy or a shrub or herb that spreads across the ground. - floating: Plant where most of the leaves are floating on water. - submerged: Plant where most of the leaves are submerged beneath the surface of a waterbody. - dense: Plant with a high density of branches. - compact: Plant with closely packed branches. - bushy: Plant with much-branched branches. (synonym, shrubby) - open: Plant with an open architecture of branches. - spindly: Plants with weak, skinny branches. - plant_climbing_mechanism: - description: Mechanisms plants use to climb, including both specialised leaf and stem adaptations and stem growth habits. - type: categorical - label: Mechanism vines use to climb - allowed_values_levels: - adventitious_roots: Roots arising from stem nodes which cling to a host plant. - hooks: Curved stem outgrowths which allow climbers to cling to a host plant. - spines: Straight stem outgrowths (including true spines as well as thorns and prickles) which allow climbers to cling to a host plant. - tendrils: Modified leaves, petioles, or specialised axillary shoots that coil tightly, forming a specialised structure for climbing. - scrambling: Stem growth habit, where the plant stems are too weak to support themselves, and instead lean on and are supported by host vegetation. There are no specialised structures employed. - twining: Stem growth habit, where the plant stems twist or coil around a host plant to provide support. - plant_growth_substrate: - description: Trait broadly indicating the habitat in which a plant grows, the substrate on which a plant grows, or its growth medium. - type: categorical - label: plant growth habitat - allowed_values_levels: - epiphyte: A plant that grows upon another plant. - lithophyte: A plant that grows upon a rock. - terrestrial: A plant that grows on land, and generally referencing a plant that grows in soil. - semiaquatic: A plant that grows partially submerged in water or spends part of its life growing in water. - aquatic: A plant that grows in water. - marine: A plant that grows in the sea. - hemiepiphyte: A plant that spends part of its life cycle as an epiphyte, growing upon another plant. - plant_type_by_resource_use: - description: Plants categories referencing their ability to tolerate/obtain water and/or salt in their environment - type: categorical - label: Water and salt tolerance and use strategies - allowed_values_levels: - hydrohalophyte: Tidal swamp or 'mangrove' and coastal lagoon elements and temperate-zone salt-marsh taxa are classed together. - phreatophyte: Deep-rooted plants—usually trees—obtaining water from a deep underground source that may or may not be saline. - psammophile: Sand-loving plants commonly found in littoral strand or inland sandfields - weedy: This inexact term is meant to indicate a high degree of adaptability to sites, and proven tendency toward aggressive colonization of either dry or wet sites, or rarely, both. In general, weeds invade and colonize highly disturbed sites or areas. - xerohalophyte: Plants adapted to inland salt desert and saline habitats - xerophyte: Drought-tolerant and drought-adapted plants - plant_height: - description: The maximum vertical height of the vegetative shoot system for a taxon in a given location. - notes: This trait is not meant to document the height of all individuals sampled, but instead the maximum height for a typical mature individual within a population or across a taxon. The trait should only be scored for self-supporting plants, not climbers whose height is dependent on the surrounding vegetation. The documented height should be the maximum height achieved by vegetative shoots, not the height reached by reproductive shoots, as it represents the plant's access to light. - type: numeric - units: m - label: Plant height - allowed_values_min: 0.001 - allowed_values_max: 130 - plant_width: - description: Width of the plant canopy - type: numeric - units: m - label: Plant width - allowed_values_min: 0.001 - allowed_values_max: 20 - plant_breadth: - description: Breadth of the plant canopy (smaller of two dimensions) - type: numeric - units: m - label: Plant breadth - allowed_values_min: 0.001 - allowed_values_max: 20 - ploidy: - description: Chromosome ploidy - type: numeric - units: '{count}' - label: Chromosome ploidy - allowed_values_min: 1 - allowed_values_max: 4 - pollination_syndrome: - description: Pollination syndrome - notes: Specific animal taxa or abiotic forces that are the plant's primary pollinators (pollen vectors), generally classified based on suites of floral traits. // Specific [NCIT:C38024] animal taxa [NCIT:C25341] or abiotic forces that are the plant's primary pollinators (pollen vectors), generally classified based on suites of floral traits (floral phenotype [NCIT:C16977]). - type: categorical - label: Pollination syndrome - allowed_values_levels: - abiotic: Pollination occurs through wind, water, or collision of free-floating particles - animal: Generic catch-all for any form of animal pollination; change to biotic - bat: Bat-pollinated - bee: Bee-pollinated - beetle: Beetle-pollinated - bird: Bird-pollinated - butterfly: Butterfly-pollinated - fly: Fly-pollinated - insect: Insect-pollinated, type of insect not specified - moth: Moth-pollinated - none: Spore-producing plants - vertebrate: Vertebrate-pollinated, broadly defined - wind: wind-pollinated - pollination_rare: plants mostly reproduce through vegetative spread and flowering is rare - pollination_system: - description: Pollination system - notes: - type: categorical - label: Pollination system - allowed_values_levels: - abiotic: Taxa use nonliving methods such as wind and water for pollen transfer - biotic_unspecialised: Taxa use living methods for pollen transfer, but do not have a specialist pollinator - biotic_specialised: Taxa depend upon a specialist pollinator for pollen transfer - self_pollination: Flowers are self-pollinated or pollinated by another flower on the same plant - bud_bank_location: - description: Location of resprouting buds following a fire. The trait `vegetative_regeneration_or_reproduction_strategy` captures the explicit tissue types that provides a more detailed list of species' ability to regenerate vegetatively and their bud locations. See Pausus, Lamont et al. 2018, doi.org/10.1111/nph.14982 for trait values used and detailed desciptions of recolonization ability and level of fire protection provided by each regeneration strategy. See also the trait `storage_organ`. - type: categorical - label: Location of resprouting buds following a fire. - allowed_values_levels: - apical_buds: Plant resprouts from above-ground apical meristems. Also termed a caudex. Term refers to palm-like plants with aerial buds that resprout, including grass trees, palms, tree ferns, and pandanus. - basal_buds: Plant resprouts from its base, with basal stem versus underground buds not distinguished between. Most buds designated as `basal_buds` likely to be resprouts from a lignotuber, but this trait value is used if the dataset reported `basal buds` rather than `basal stem buds` or `lignotuber`. - basal_stem_buds: Plants resprout from the base of the stem following a fire. Australian plants with basal stem buds usually have a lignotuber; see the trait `storage_organ`. - bud-bearing_root: Root buds produce vertical suckers (from root crown) or adventitious roots following a fire. - epicormic_buds: Plants resprout from the stem or trunk following a fire. - rhizome: Plants reprout from a rhizome. - stem_buds: Plant resprouts from stem buds (separate to epicormic buds) - stem_tuber: Plant resprouts from buds on a stem tuber - stolon: Plants resprouts from buds on horizontal branches (stems) growing from the base of the plant. - underground_buds: Plants that resprout from underground organ, but the type of organ isn't specified. - none: Plant lacks regenerative buds. - storage_organ: - description: Storage organ - type: categorical - label: Storage organ, either for post-fire regeneration or general energy storage. Trait values include both generic terms and quite specific ones. See Pausus, Lamont et al. 2018, doi.org/10.1111/nph.14982 for trait values used and detailed desciptions of recolonization ability and level of fire protection provided by each regeneration strategy. See also the trait `bud_bank_location`. - allowed_values_levels: - bulb: Below ground storage organ derived from stem (and sometimes leaf) tissue. - fleshy_underground_organ: Plants that use fleshy, generally underground organs (swellings) to regenerate; examples include corms, tubers, bulbs, and caudex - lignotuber: Swollen woody structures are located at the transition between the stem base and root crown of woody shrubs, mallees and small trees, and are formed from stem tissues. Buds are located over the entire structure. No colonisation ability. - rhizome: Plant has an underground stem; this stem may be woody or non-woody. Rhizomes are both a mechanism for vegetative spread and a strategy to survive fire. - storage_organ: Storage organ present, but the type is unknown - woody_rootstock_or_lignotuber: Plant that regenerates by resprouting from either a woody rootstock or lignotuber. - no_storage_organ: No storage organ present - regeneration_non_fire_disturbance: - description: An indication of whether a plant is able to regenerate from a disturbance other than fire. - type: categorical - label: A plant's ability to regenerate following a non-fire disturbance. - allowed_values_levels: - resprouts_non_fire_disturbance: Fire-killed plants that have the ability to resprout following a disturbance other than fire. - clonal_spread_mechanism: - description: Mechanisms a plant uses to grow vegetatively, including the production of clones. Overlap with terms under `storage_organ` and `bud_bank_location`. - type: categorical - label: Clonal growth mechanisms - allowed_values_levels: - aboveground_clonal: Vegetative buds or plant fragments that can disperse and produce new plants (including axillary buds, bulbils and turions). - adventitious_root_buds: Adventitious root buds on main root or lateral roots - bulb: Below ground storage organ derived from stem (and sometimes leaf) tissue, that divides into new individuals. - belowground_clonal: Plants use an unspecified underground organ for clonal spread. - corm: Below ground organ derived from stem tissue that can function either for vegetative spread or to regenerate following a disturbance. - rhizome: Plant has an underground stem; this stem may be woody or non-woody. Rhizomes are both a mechanism for vegetative spread and a strategy to survive fire. - root_buds: Lateral root that produces vertical suckers, adventitious roots - root_tuber: Below ground storage organ derived from root tissue. - stem_tuber: Below ground storage organ derived from stem tissue. - stolon: Plants having horizontal branches (stems) from the base of the plant that produce new plants from buds at its tip or nodes - viviparous: Plant produces clonal offspring that grow while still attached to the parent plant. - non_clonal: Plant does not display clonal growth - reproductive_maturity: - description: Age of plants at reproductive maturity. - type: numeric - units: a - label: Age of plants at reproductive maturity - allowed_values_min: 0 - allowed_values_max: 1000 - reproductive_maturity_secondary_after_fire: - description: For species that survive a fire, the number of years post-disturbance required to resprout and re-reach reproductive maturity. - type: numeric - units: a - label: Years required to reach secondary reproductive maturity following disturbance (fire) - allowed_values_min: .1 - allowed_values_max: 100 - leaf_N_resorption: - description: Nitrogen resorption from leaves - type: numeric - units: mg/mg - label: Nitrogen resorption from leaves - allowed_values_min: -1.1 - allowed_values_max: 1 - leaf_P_resorption: - description: Phosphorus resorption from leaves - type: numeric - units: mg/mg - label: Phosphorus resorption from leaves - allowed_values_min: -1.1 - allowed_values_max: 1 - fire_response_numeric: - description: Proportion of individuals in a population that resprout following a fire. - type: numeric - units: '{count}/{count}' - label: Proportion of individuals in a population that resprout - allowed_values_min: 0 - allowed_values_max: 1 - fire_response_stem_ratio: - description: Ratio of stem count post-fire to pre-fire at an individual or population level; this trait is appropriate to use for plants that have many stems from the base (shrubs, herbs, graminoids) where the number of stems before and after fire is censused. It is effectively a continuous measure of resprouting strength conditioned on initial size - type: numeric - units: '{count}/{count}' - label: Ratio of stem count post-fire to pre-fire - allowed_values_min: 0 - allowed_values_max: 4 - root_C_per_dry_mass: - description: Root carbon (C) content per unit root dry mass - type: numeric - units: mg/g - label: Root carbon (C) content per unit root dry mass - allowed_values_min: 50.0 - allowed_values_max: 750.0 - root_N_per_dry_mass: - description: Root nitrogen (N) content per unit root dry mass - type: numeric - units: mg/g - label: Root nitrogen (N) content per unit root dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - root_P_per_dry_mass: - description: Root phosphorus (P) content per unit root dry mass - type: numeric - units: mg/g - label: Root phosphorus (P) content per unit root dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - root_delta13C: - description: Root carbon stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Root carbon (C) isotope signature (delta 13C) - allowed_values_min: -50.0 - allowed_values_max: 0.0 - root_delta15N: - description: Root nitrogen stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Root nitrogen (N) isotope signature (delta 15N) - allowed_values_min: -25.0 - allowed_values_max: 75.0 - root_xylem_delta15N: - description: Xylem nitrogen stable isotope signature from roots - type: numeric - units: '{delta}[ppth]' - label: Xylem nitrogen (N) isotope signature (delta 15N) from roots - allowed_values_min: -25.0 - allowed_values_max: 75.0 - root_diameter: - description: Root diameter; should only be used to record the maximum root diameter - type: numeric - units: mm - label: Root diameter - allowed_values_min: 0.01 - allowed_values_max: 1000 - root_distribution_coefficient: - description: Root biomass depth distribution coefficient ('B' from Gale & Grigal (1987), where high values indicate root biomass allocated deeper in the soil). - type: numeric - units: '{dimensionless}' - label: Root biomass depth distribution coefficient - allowed_values_min: 0.5 - allowed_values_max: 1.0 - root_dry_matter_content: - description: Root dry mass per unit root fresh mass - type: numeric - units: mg/g - label: Root dry mass per unit root fresh mass (Root dry matter content) - allowed_values_min: 10.0 - allowed_values_max: 1000.0 - root_fine_root_coarse_root_ratio: - description: Volume of fine root (<0.5mm diametre) / Volume of coarse root (>0.5mm diametre) - type: numeric - units: mm3/mm3 - label: Volume of fine root / Volume of coarse root - allowed_values_min: 0.05 - allowed_values_max: 50.0 - root_mass_fraction: - description: Fraction of plant dry mass comprised of root material - type: numeric - units: mg/mg - label: Fraction of plant dry mass comprised of root material - allowed_values_min: 0.01 - allowed_values_max: 1.0 - root_morphology: - description: Categorical root descriptions sensu Cannon 1949, A Tentative Classification of Root Systems, Ecology, doi.org/10.2307/1932458 - type: categorical - label: Categorical root descriptions, sense Cannon 1949 - allowed_values_levels: - type_i: The primary root is fibrous or fleshy and is relatively long; mesophytic - type_ii: The primary root is relatively short and is fibrous. Roots are well branched in a dry habitat but branch little in one that is wet. - type_iii: The primary root is usually long and fibrous. The first order lateral roots are well branched and are usually short; they are rather evenly distributed along the primary root; xerophytic - type_iv: The primary root is usually long and slender like that of Type II. The first order lateral roots are well branched. Those closest to the surface of the ground, or not far below, are relatively long; xerophytic and mesophytic - type_v: The primary root is divided-forked or branched-and fibrous, and with few first order lateral roots, or, in age, apparently with none; xerophytic - type_vi: The primary root is usually as in Type V. The first order lateral roots are mostly on the upper portion of the primary root and are thus relatively superficial; xerophytic or in well aerated sandy soil where the rainfall is not light. - type_vii: Adventitious roots that are in one group and arise on a short horizontal, or vertical, axis of the shoot. They are fibrous or fleshly; mesophytic and hydrophytic - type_viii: Adventitious roots that are in one group and are fibrous and fleshy, or fibrous and thick. The fibrous adventitious roots are absorbing-anchoring roots and are usually with laterals to the second order; meophytic - type_ix: Adventitious roots that arise on the aerial stem and branches of some herbaceous taxa, shrubs, and trees; on creepers, vines, and runners; and on subterranean rhizomes and stolons - root_shoot_ratio: - description: Ratio of root dry mass to shoot dry mass - type: numeric - units: mg{root}/mg{shoot} - label: Root to shoot ratio (dry mass) - allowed_values_min: 0.01 - allowed_values_max: 15.0 - root_structure: - description: Specific specialized types of root structures and root symbioses. https://www.mycorrhizas.info/ provides detailed information for types of mycorrhizal associations. - type: categorical - label: Root structure - allowed_values_levels: - arbuscular_mycorrhizal: Symbiosis in which the mycorrhizal fungi does penetrate the cortex cells of the plant roots and its hyphae form arbuscules and vesicles inside the plant root; endomycorrhizal, AM, VAM - carnivorous: non-mycorrhizal carnivorous root - cluster_roots: cluster roots in non-proteoid taxa - coiling_vam: Associations that spread predominantly by intracellular hyphal coils within roots - dauciform_root: A type of cluster root found in the family Cyperaceae - ectomycorrhizal: Symbiosis in which the mycorrhizal fungi does not penetrate the cortex cells of the plant roots - ericoid_mycorrhizal: A form of arbuscular mycorrhizal relationship only found on plants in the order Ericales. The fungi's hyphae penetrate the plant root but do not form arbuscules - fine_roots: Particularly fine roots for nutrient uptake - haustorium: highly modified stem or root of a parasitic plant, such as mistletoe , or a specialized branch or tube originating from a hairlike filament (hypha) of a fungus. The haustorium penetrates the tissues of a host and absorbs nutrients and water. - hemiparasitic_root: Partially parasitic root - long_root_hairs: Specialised long root hairs - mycorrhizal: Mycorrhizal, type not specified - non_mycorrhizal: Plants lacking a mycorrhizal symbiont - orchid_mycorrhizal: A mycorrhizal relationship specific to orchid taxa, and for most orchids, essential for seedlings to establish - parasitic_root: Parasitic root - proteoid_root: Also known as cluster roots, are plant roots that form clusters of closely spaced short lateral rootlets and aid in nutrient upake in nutrient-poor soils; common in members of the family Proteaceae, but present in other families as well - root_hairs: Specialised root hairs - sand-binding: Persistent sheaths of sand that form around the roots of taxa in the families Restionaceae, Cyperaceae, Haemodoraceae, and Lomandraceae in western Australia. Assumed to function in nutrient uptake. - saprophyte: Plant that acquires nutrients from decaying matter - subepidermal_mycorrhizal: Mycorrhizae where hyphae grow in a cavity under epidermal cells. Only in the genus Thysanotus (family Laxmaniaceae). - unknown: root structures unknown - root_wood_density: - description: Root wood dry mass per unit root wood fresh volume - type: numeric - units: mg/mm3 - label: Root wood density - allowed_values_min: 0.05 - allowed_values_max: 10.0 - plant_tolerance_salt: - description: Salt-tolerance categories; Also see 'plant_tolerance_soil_salinity' for studies reporting actual soil salinity levels taxa can tolerate. Kew data on salt tolerance included in 'water_tolerance' trait - type: categorical - label: Salt tolerance strategies - allowed_values_levels: - glycophyte: Plants that cannot survive even one tenth the salt concentration found in seawater - halophyte: Plants that complete their life cycle in a salty environment; many survive in seawater or even higher concentrations of salt - halophyte_moderate: Plant that is moderately tolerant of soil salinity/sodicity - hydrohalophyte: Tidal swamp or 'mangrove' and coastal lagoon elements and temperate-zone salt-marsh taxa are classed together. - salt_spray_tolerant: Plant that is tolerant of salt spray (typically inhabiting near-coastal environments) - salinity_tolerance_undefined: Plant's ability to tolerate salt is unknown - xerohalophyte: Plants adapted to inland salt desert and saline habitats - sapwood_specific_conductivity: - description: Ks; Describes the flow rate of water (kg/s) along a stem for a given drop in pressure (1/MPa), normalised to the length of the segment (1/m). Calculated as hydraulic conductivity divided by the sapwood cross-sectional area where the measurement is taken. - type: numeric - units: kg/m/MPa/s - label: Sapwood specific conductivity (Ks) - allowed_values_min: 0.01 - allowed_values_max: 500 - sapwood_specific_conductivity_theoretical: - description: Theoretical Ks or Kp; Describes the theoretical flow rate of water (kg/s) along a stem for a given drop in pressure (1/MPa). Calculated as theoretical Kh, calculated based on Hagen-Poiseuille's law, divided by the microscopically determined cross-sectional area without bark and pit. - type: numeric - units: kg/m/MPa/s - label: Theoretical sapwood specific conductivity (Ks) - allowed_values_min: 0.05 - allowed_values_max: 5000 - stem_specific_conductivity: - description: Describes the flow rate of water (kg/s) along a stem for a given drop in pressure (1/MPa), normalised to the length of the segment (1/m). Calculated as hydraulic conductivity divided by the transverse branch area where the measurement is taken. - type: numeric - units: kg/m/MPa/s - label: Sapwood specific conductivity (Ks) - allowed_values_min: 0.01 - allowed_values_max: 500 - seed_count: - description: Number of seeds produced by a plant - type: numeric - units: '{count}' - label: Seed count - allowed_values_min: 0 - allowed_values_max: 100000.0 - seed_length: - description: Longest linear seed dimension. (Notes, Observations of this trait in AusTraits are almost certainly an undocumented mix of dimensions of true seeds and diaspores. When all or part of the fruit is not easily separated from the true seed, many researchers will have recorded and submitted a diaspore length, but labeled the data 'seed length'. The intent of this measurement is that it excludes appendages, although it is likely some submitted measurements include small appendages that are not easily separated from the seed.) - type: numeric - units: mm - label: Seed length - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - seed_width: - description: Longest width dimension of a seed; orthogonal to the length. (Notes, Observations of this trait in AusTraits are almost certainly an undocumented mix of dimensions of true seeds and diaspores. When all or part of the fruit is not easily separated from the true seed, many researchers will have recorded and submitted a diaspore width, but labeled the data 'seed width'. The intent of this measurement is that it excludes appendages, although it is likely some submitted measurements include small appendages that are not easily separated from the seed. - type: numeric - units: mm - label: Seed width - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - seed_height: - description: Shortest axis of a seed; orthogonal to its length and width. (Notes, Observations of this trait in AusTraits are almost certainly an undocumented mix of dimensions of true seeds and diaspores. When all or part of the fruit is not easily separated from the true seed, many researchers will have recorded and submitted a diaspore height, but labeled the data 'seed height. The intent of this measurement is that it excludes appendages, although it is likely some submitted measurements include small appendages that are not easily separated from the seed. - type: numeric - units: mm - label: Seed height - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - seed_volume: - description: Volume of a seed - type: numeric - units: mm3 - label: Seed volume - allowed_values_min: 0.001 - allowed_values_max: 100000.0 - seed_dry_mass: - description: Dry mass of a mature seed, including both oven dried and air-dried samples. (Notes, Standard methods people will have used for dried seeds include, 'fresh' (at dispersal, mature); 'air dried' (at local ambient conditions); 'seed bank air dried' (to 15% relative humidity); 'oven dried' (>100 deg C for a set number of hours; e.g. seed bank standard is 103 deg C for 17 hours) - type: numeric - units: mg - label: Seed dry mass - allowed_values_min: 0.00001 - allowed_values_max: 1000000.0 - seed_dry_mass_reserve: - description: Dry mass of a seed's embryo and endosperm (if present), the component of a seed that provides energy to a seedling. Distinct from a seed's dispersal structures or protective tissues. - type: numeric - units: mg - label: Seed dry embryo and endosperm mass - allowed_values_min: 0.00001 - allowed_values_max: 100000.0 - seed_oil_per_seed_dry_mass: - description: Seed oil content as a fraction of total seed weight, usually on a dry weight basis - type: numeric - units: g/g - label: Seed oil content - allowed_values_min: 0.0001 - allowed_values_max: 1.0 - seed_N_per_seed_dry_mass: - description: Seed nitrogen (N) content per unit seed mass - type: numeric - units: mg/g - label: Seed nitrgeon concentration - allowed_values_min: 10.0 - allowed_values_max: 1000.0 - seed_K_per_seed_dry_mass: - description: Seed potassium (K) content per unit seed mass - type: numeric - units: mg/g - label: Seed potassium concentration - allowed_values_min: 1.0 - allowed_values_max: 100.0 - seed_Mg_per_seed_dry_mass: - description: Seed magnesium (Mg) content per unit seed mass - type: numeric - units: mg/g - label: Seed magnesium concentration - allowed_values_min: 0.1 - allowed_values_max: 100.0 - seed_S_per_seed_dry_mass: - description: Seed sulphur (S) content per unit seed mass - type: numeric - units: mg/g - label: Seed sulphur concentration - allowed_values_min: 0.1 - allowed_values_max: 100.0 - seed_Ca_per_seed_dry_mass: - description: Seed calcium (Ca) content per unit seed mass - type: numeric - units: mg/g - label: Seed calcium concentration - allowed_values_min: 1.0 - allowed_values_max: 100.0 - seed_P_per_seed_dry_mass: - description: Seed phosphorus (P) content per unit seed mass - type: numeric - units: mg/g - label: Seed phosphorus concentration - allowed_values_min: 1.0 - allowed_values_max: 100.0 - seed_protein_per_seed_dry_mass: - description: Seed protein content as a fraction of total seed weight - type: numeric - units: g/g - label: Seed protein content - allowed_values_min: 0.00001 - allowed_values_max: 1.0 - seed_shape: - description: Three-dimensional shape of the seed. (Notes, The trait values indicate the approximate shape of the seed, acknowledging few seeds are exactly ellipsoid, globoid, etc. The list of terms has been chosen to represent different length:width:height ratios and different levels of symmetry. Terms that suggest very specific shapes have generally been grouped into a broader category for increased interoperability across datasets.) - type: categorical - label: Three-dimensional shape of the seed - allowed_values_levels: - comma-shaped: A seed displaying a single arc of curvature, such that it bilaterally symmetrical. (synonyms, comma-shaped, falcate, sickle-shaped scimitar-shaped) - conical: Cone-shaped, with a broad flat base and narrow apex; turbinate refers to the inverse shape. (synonyms, obconical, cone-shaped, turbinate, top-shaped) - cylindrical: A cylinder, a shape with a flat top and bottom that are circular or elliptical in outline and are linked by a curved surface. (synonyms, terete) - discoid: A subset of cylinder, a shape with a flat, circular or elliptical top and bottom, linked by a curved surface, where the length of the curved surface is much shorter than the cross-section of the flat surfaces. (synonyms, flat) - ellipsoid: A 3-dimensional shape that is elliptic in long section and circular in cross section; length:width ratio between 2:1 and 3:2. (synonyms, obloid, oblong) - ellipsoid_flattened: A 3-dimensional shape that is elliptic in long section and and laterally compressed/flattened such that it is non-circular in cross section; length:width ratio between 2:1 and 3:2. - fusiform: Spindle-shaped; A 3-dimension shape that is narrowly ellipsoid, circular in cross-section and tapering sharply toward both ends. (synonyms, spindle-shaped) - globoid: A 3-dimensional shape that is circular in both long section and cross section. (synonyms, globose, globular, spherical) - globoid_flattened: A 3-dimensional shape that is circular in both long section and somewhat flattened such that it is non-circular in cross section. - hemispheric: Half a sphere or globe, with a flat base, domed top, and circular in cross-section. - hemispheric_flattened: A 3-dimensional shape that is a laterally compressed/flattened half-sphere or globe; shape has a flat base, a domed top, and is elliptical in cross-section. - lenticular: Shaped like a biconvex lens and circular in cross section; shaped like a lentil. - orbicular: A poorly defined term that remains in AusTraits only as a placeholder; it appears to be used as both globoid (spherical) and lenticular by different authors. - ovoid: A 3-dimensional shape that is egg-shaped in long section and circular in cross section. Term as used in AusTraits includes variants on egg-shaped including pyriform (pear-shaped) and obovoid (inversely egg-shaped) (synonyms, pyriform, obovoid) - ovoid_elongated: A 3-dimensional shape that is egg-shaped in long section and circular in cross section, where the length dimension is much longer than the width/height dimensions. Term as used in AusTraits includes specific shapes club-shaped (clavate/obclavate) and tear-shaped (lachrimiform). (synonyms, lachrimiform; tear-shaped; lachrymiform; clavate; obclavate; club-shaped) - ovoid_flattened: A 3-dimensional shape that is egg-shaped in long section and laterally compressed/flattened such that is non-circular in cross section. - polyhedral: A 3-dimensional shape with distinct, fairly flat faces and edges; includes prisms and tetrahedral shaped seeds. (synonyms, rhomboid, prismatic, pyramidal, rectangular, square) - polyhedral_elongated: A 3-dimensional shape with distinct, fairly flat faces and edges, where the length dimension is much longer than the width/height dimensions; includes elongate prisms and elongate tetrahedral shaped seeds. - polyhedral_inflated: A 3-dimensional shape with distinct faces and edges, but the faces tend to bulge outwards. - reniform: Having a cross-section that is roughly circular with a notch; strictly a kidney-shape, but the definition applied here includes heart-shaped seeds and other seeds with a distinct notch. (synonyms, cordiform, kidney-shaped, heart-shaped) - samara: A seed with wings. - sectoroid: Shaped like an orange segment or wedge of a sphere. (synonyms, wedge-shaped) - sinusoidal: A seed with two arcs of curvature or a single arc, such that it lacks an axis of symmetry. (synonym, sigmoidal) - seed_surface_hairs: - description: Surface hairiness of a seed, including vestiture (trichome cover) and bristles. - type: categorical - label: Seed surface hairs - allowed_values_levels: - hairs: Seed surface with trichomes or bristles. - hairs_branched: Seed surface with branched trichomes or bristles.(synonyms, stellate, plumose) - hairs_simple: Seed surface with simple trichomes or bristles. (tomentose, velutinous, velvety, sericeous) - seed_surface_texture: - description: Surface texture of a seed, including descriptions of configuration (overall surface patterns of the epidermal cells) and epidermal excrescence (surface patterns caused by structural outgrowths of the epidermis). This trait does not include appendages; see `dispersal_appendages` for descriptions of seed appendages. - type: categorical - label: Seed surface texture - allowed_values_levels: - bumpy: Seed surface covered with minute, rounded protuberances. (synonyms, verrucate, papillate, tuberculate, undulate) - netted: Seed surface covered with raised, reticulate, interconnected ridges. (synonyms, reticulate) - papery: Seed surface with a thin and papery texture. (synonyms, chartaceous) - pitted: Seed surface pitted. (synonyms, foveolate, foveate, dimpled, punctate) - ribbed: Seed surface with longitudinal raised ribs or ridges. (synonyms, costate, carinate, lineate, fluted, striate, strigate, lineolate, scalariform) - rough: Seed surface rough with no organization of markings, resembling sandpaper. (synonyms, scabrous) - scaly: Seed surface rough with loose scales differing in direction or not parallel in direction. (synonyms, scurfy, squarrose) - smooth: Seed surface smooth, lacking texture. (synonyms, glabrous) - wrinkled: Seed surface with a wrinkled, rugose texture. (synonyms, rugose, rugulose, bullate) - seed_viability: - description: Proportion of mature seeds in a sample that are capable of germinating under suitable conditions. - type: numeric - units: '{count}/{count}' - label: Seed viability - allowed_values_min: 0.0 - allowed_values_max: 1.0 - canopy_seedbank: - description: Binary variable indicating if seeds present in canopy seedbank; see also 'seed_longevity_categorical', 'seed_storage_location', 'soil_seedbank', and 'serotiny' - type: categorical - label: Seeds present in canopy seedbank - allowed_values_levels: - canopy_seedbank_absent: Seeds not present in canopy seedbank - canopy_seedbank_present: Seeds present in canopy seedbank - soil_seedbank: - description: Binary variable indicating if seeds present in soil seedbank; see also 'seed_longevity_categorical', 'seed_storage_location', 'canopy_seedbank', and 'serotiny' - type: categorical - label: Seeds present in soil seedbank - allowed_values_levels: - soil_seedbank_absent: Seeds not present in soil seedbank - soil_seedbank_present: Seeds present in soil seedbank - seed_storage_location: - description: Location where seeds are stored at maturity; see also 'seed_longevity_categorical', 'soil_seedbank', 'canopy_seedbank', and 'serotiny' - type: categorical - label: Location where seeds are stored at maturity - allowed_values_levels: - canopy: Seeds stored in the canopy, usually still within a woody cone - soil: Seeds stored in the soil - none: Seeds are not stored - not_canopy: Seed explicitly not stored in the canopy; other storage locations unknown - seed_longevity_numeric: - description: Seed longevity - type: numeric - label: Seed longevity - units: a - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - seed_longevity_categorical: - description: Seed or propagule longevity - type: categorical - label: Seed longevity - allowed_values_levels: - transient: Propagule transient, lasting in the seedbank for only weeks to months. - intermediate_longevity: Propagule survives for approximately months to less than a year, although cutoff varies by study. - persistent: Propagule persistent, time not specified. - short_persistent: Propagule is persistent for approximately 1 to 5 years, although cutoff varies by study. - long_persistent: Propagule is persistent for more than 5 years, although cutoff varies by study. - widely_dispersed: Seed longevity not important, as seeds are widely dispersed and always available for germination. - seed_release: - description: When a fruit or cone only releases its seeds following an environmental trigger, often fire; ; see also 'seed_longevity_categorical', 'seed_storage_location', 'soil_seedbank', 'canopy_seedbank', and 'serotiny' - type: categorical - label: Serotiny - allowed_values_levels: - serotinous: Plant releases its seeds following an environmental trigger (usually fire) - mature_en_mass: Seeds released en masse when mature (eg annually) - gradual_release: Seeds maturing and released gradually from parent - serotiny: - description: Categorical variable describing whether a fruit or cone only releases its seeds following an environmental trigger, often fire - type: categorical - label: Serotiny - allowed_values_levels: - not_serotinous: Plant does not display serotiny - serotinous: Plant serotinous, level not specified - serotiny_low: Plant displays a low level of serotiny - serotiny_moderate: Plant displays a moderate level of serotiny - serotiny_high: Plant displays a high level of serotiny - seedling_first_node_leaf_type: - description: Binary variable distinguishing between seedlings where the first leaf is scale-like (cataphyll) versus leaf-like. - type: categorical - label: First leaf style - allowed_values_levels: - scale-like: When the first leaf at germination is scale-like, also referred to as a cataphyll - leaf-like: When the first leaf at germination is leaf-like - seedling_first_node_leaf_count: - description: Binary variable distinguishing between seedlings where the leaves at the first node are single versus paired. - type: categorical - label: Leaf count at first node - allowed_values_levels: - single: When there is a single leaf at the first node - paired: When there is a pair of leaves at the first node - leaf_senesced_Al_per_dry_mass: - description: Senesced leaf aluminium (Al) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf aluminium (Al) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - leaf_senesced_B_per_dry_mass: - description: Senesced leaf boron (B) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf boron (B) content per unit leaf dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - leaf_senesced_C_per_dry_mass: - description: Senesced leaf carbon (C) content per unit leaf dry mass - type: numeric - units: g/g - label: Senesced leaf carbon (C) content per unit leaf dry mass - allowed_values_min: 10.0 - allowed_values_max: 100.0 - leaf_senesced_Ca_per_dry_mass: - description: Senesced leaf calcium (Ca) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf calcium (Ca) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 1000.0 - leaf_senesced_Cu_per_dry_mass: - description: Senesced leaf copper (Cu) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf copper (Cu) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - leaf_senesced_Fe_per_dry_mass: - description: Senesced leaf iron (Fe) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf iron (Fe) content per unit leaf dry mass - allowed_values_min: 1.0 - allowed_values_max: 10000.0 - leaf_senesced_K_per_dry_mass: - description: Senesced leaf potassium (K) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf potassium (K) content per unit leaf dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_senesced_Mg_per_dry_mass: - description: Senesced leaf magnesium (Mg) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf magnesium (Mg) content per unit leaf dry mass - allowed_values_min: 0.01 - allowed_values_max: 100 - leaf_senesced_Mn_per_dry_mass: - description: Senesced leaf manganese (Mn) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf manganese (Mn) content per unit leaf dry mass - allowed_values_min: 1.0 - allowed_values_max: 10000.0 - leaf_senesced_Mo_per_dry_mass: - description: Senesced leaf molybdenum (Mo) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf molybdenum (Mo) content per unit leaf dry mass - allowed_values_min: 0 - allowed_values_max: 30 - leaf_senesced_N_per_dry_mass: - description: Senesced leaf nitrogen (N) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf nitrogen (N) content per unit leaf dry mass - allowed_values_min: 1.0 - allowed_values_max: 100.0 - leaf_senesced_Na_per_dry_mass: - description: Senesced leaf sodium (Na) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf sodium (Na) content per unit leaf dry mass - allowed_values_min: 100.0 - allowed_values_max: 20000.0 - leaf_senesced_Ni_per_dry_mass: - description: Senesced leaf nickel (Ni) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf nickel (Ni) content per unit leaf dry mass - allowed_values_min: 10.0 - allowed_values_max: 100000.0 - leaf_senesced_P_per_dry_mass: - description: Senesced leaf phosphorus (P) content per unit leaf dry mass - type: numeric - units: mg/g - label: Senesced leaf phosphorus (P) content per unit leaf dry mass - allowed_values_min: 0.005 - allowed_values_max: 15 - leaf_senesced_S_per_dry_mass: - description: Senesced leaf sulphur (S) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf sulphur (S) content per unit leaf dry mass - allowed_values_min: 100.0 - allowed_values_max: 50000.0 - leaf_senesced_Zn_per_dry_mass: - description: Senesced leaf zinc (Zn) content per unit leaf dry mass - type: numeric - units: mg/kg - label: Senesced leaf zinc (Zn) content per unit leaf dry mass - allowed_values_min: 0 - allowed_values_max: 100.0 - plant_tolerance_snow: - description: Description of a taxon's tolerance to snow cover - type: categorical - label: Snow tolerance - allowed_values_levels: - not_applicable: Taxa is virtually never confronted with snow in nature and the response is unknown. - intolerant: Taxa is frost tender and known to be killed by any snow. - days: Taxa can tolerate being covered by snow for days (typically less than 1 week). - weeks: Taxa can tolerate being covered by snow for weeks (typically less than 1 month). - months: Taxa can tolerate being covered by snow for months. - plant_tolerance_soil_salinity: - description: Maximum salinity tolerated by a taxon, reported as the conductivity of the soil - type: numeric - units: dS/m - label: Salt tolerance - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_soluble_protein_per_area: - description: Mass of soluble protein per leaf area - type: numeric - units: g/m2 - label: Soluble protein per leaf area - allowed_values_min: 0.1 - allowed_values_max: 20.0 - leaf_insoluble_protein_per_area: - description: Mass of insoluble protein per leaf area - type: numeric - units: g/m2 - label: Insoluble protein per leaf area - allowed_values_min: 0.1 - allowed_values_max: 20.0 - leaf_total_non-structural_carbohydrates_per_area: - description: Total non-structural carbohydrates per leaf area - type: numeric - units: g/m2 - label: Total non-structural carbohydrates per leaf area - allowed_values_min: 0.1 - allowed_values_max: 50.0 - leaf_total_non-structural_carbohydrates_per_mass: - description: Total non-structural carbohydrates per leaf mass - type: numeric - units: mg/g - label: Total non-structural carbohydrates per leaf mass - allowed_values_min: 10.0 - allowed_values_max: 200.0 - leaf_soluble_starch_per_area: - description: Mass of soluble starch per leaf area - type: numeric - units: g/m2 - label: Soluble starch per leaf area - allowed_values_min: 0.1 - allowed_values_max: 100.0 - leaf_soluble_sugars_per_area: - description: Mass of soluble sugars per leaf area - type: numeric - units: g/m2 - label: Soluble sugars per leaf area - allowed_values_min: 0.10 - allowed_values_max: 100.0 - leaf_soluble_starch_per_mass: - description: Mass of soluble starch per leaf mass - type: numeric - units: mg/g - label: Soluble starch per leaf mass - allowed_values_min: 0.1 - allowed_values_max: 200.0 - leaf_soluble_sugars_per_mass: - description: Mass of soluble sugars per leaf mass - type: numeric - units: mg/g - label: Soluble sugars per leaf mass - allowed_values_min: 1.0 - allowed_values_max: 200.0 - stem_soluble_starch_per_mass: - description: Mass of soluble starch per stem mass - type: numeric - units: mg/g - label: Soluble starch per stem mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - stem_soluble_sugars_per_mass: - description: Mass of soluble sugars per stem mass - type: numeric - units: mg/g - label: Soluble sugars per stem mass - allowed_values_min: 1.0 - allowed_values_max: 200.0 - root_soluble_starch_per_mass: - description: Mass of soluble starch per root mass - type: numeric - units: mg/g - label: Soluble starch per root mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - root_soluble_sugars_per_mass: - description: Mass of soluble sugars per root mass - type: numeric - units: mg/g - label: Soluble sugars per root mass - allowed_values_min: 1.0 - allowed_values_max: 200.0 - leaf_mass_per_area: - description: The ratio of leaf dry mass to leaf area, measured on an entire leaf including the petiole; LMA. (The inverse of specific leaf area, SLA.) - notes: Leaf mass per area includes measurements submitted as `specific_leaf_area` (SLA); they are simply inverted. Leaf mass per area is explicitly measured on an entire leaf, including the petiole. Measurements made on a piece of the leaf lamina, excluding petiole and midrib, are a separate trait `leaf_lamina_mass_per_area`. If measurements are made on the entire leaf lamina, but the petiole is excluded, this should be noted in the methods or under `measurement_remarks`. - type: numeric - units: g/m2 - label: Leaf mass per area - allowed_values_min: 1.0 - allowed_values_max: 3000.0 - leaf_lamina_mass_per_area: - description: The ratio of leaf dry mass to leaf area, measured on a piece of the leaf lamina that does not include the petiole or major veins. - notes: This trait only includes data made on subsamples of a leaf, usually a leaf punch sample associated with leaf strength measurements or from the herbivory literature. For whole-leaf LMA/SLA data, see the trait `leaf_mass_per_area` - type: numeric - units: g/m2 - label: Leaf lamina mass per area - allowed_values_min: 1.0 - allowed_values_max: 1000.0 - root_specific_root_area: - description: Root area per unit root dry mass - type: numeric - units: mm2/mg - label: Root area per unit root dry mass (specific root area) - allowed_values_min: 0.001 - allowed_values_max: 1.0 - root_specific_root_length: - description: Root length per unit root dry mass; SRL - type: numeric - units: m/g - label: Root length per unit root dry mass (specific root length, SRL) - allowed_values_min: 0.5 - allowed_values_max: 5000 - root_specific_taproot_length: - description: Taproot length per unit root dry mass. This trait measures the efficiency of taproot length per unit mass during the very early stage of growth when seedlings need to reach reliable water. - type: numeric - units: m/g - label: Taproot length per unit root dry mass (specific tap root length, STRL) - allowed_values_min: 0.5 - allowed_values_max: 5000 - plant_physical_defence_structures: - description: The presence (or explicit absence) of specific physical defence structures on a plant, including spines, thorns, prickles, and sharp-tipped leaves. - notes: This trait identifies explicit physical defence structures on a plant. For a curated trait identifying the degree of defence afforded to plants, see `plant_spinescence`, with values defined by Pérez-Harguindeguy et al. 2013 (doi:10.1071/BT12225). - type: categorical - label: Physical defence structures - allowed_values_levels: - absent: Plant that lacks a physical defence structure. - sharp_pointed_defence: Plant that has either spines, thorns, or prickles, but the type of physical defence structure is not specified. - prickle: A sharp-tipped outgrowth from the epidermis, bark or other plant organ that is explicitly not a spine (modified leaf) or thorn (modified stem). - pungent_leaf_apex: A sharp-tipped leaf. - spine: A sharp-pointed structure, which is a modified leaf or leaf part, including petioles, midribs, secondary veins, leaflets, or stipules. - stinging_or_irritant_hairs: Trichomes that sting or irritate, by injecting a toxin. - thorn: A sharp-pointed, stiff, woody modified stem. - plant_spinescence: - description: Degree to which a plant is defended by spines, thorns and/or prickles, as defined by Pérez-Harguindeguy et al. 2013. - notes: The values for this trait are exactly those defined by Pérez-Harguindeguy et al. 2013 (doi:10.1071/BT12225). See the trait `plant_physical_defence` for individual plant structures a plant uses for physical defence. - type: categorical - label: Spinescence - allowed_values_levels: - no_spines: No spines. (level 0) - low_density_soft_spines: Low or very local density of soft spines <5mm long; plant may sting or prickle when hit carelessly, but not impart strong pain. (level 1) - high_density_soft_spines: High density of soft spines, intermediate density of spines of intermediate hardness, or low density of hard, sharp spines >5mm long; plant causes actual pain when hit carelessly. (level 2) - high_density_hard_spines_to_5mm: Intermediate or high density of hard, sharp spines >5mm long; plant causes strong pain when hit carelessly. (level 3) - high_density_hard_spines_to_20mm: Intermediate or high density of hard, sharp spines >20mm long; plant may cause significant wounds when hit carelessly. (level 4) - high_density_hard_spines_to_100mm: Intermediate or high density of hard, sharp spines >100mm long; plant is dangerous to careless large mammals, including humans. (level 5) - leaf_spongy_mesophyll_thickness: - description: Thickness of the spongy mesophyll cells - type: numeric - units: um - label: Spongy mesophyll cell thickness - allowed_values_min: 10.0 - allowed_values_max: 1000.0 - leaf_starch_per_area: - description: Mass of starch per leaf area - type: numeric - units: g/m2 - label: Starch per leaf area - allowed_values_min: 0.1 - allowed_values_max: 50.0 - stem_C_per_dry_mass: - description: Stem carbon (C) content per unit stem dry mass - type: numeric - units: mg/g - label: Stem carbon (C) content per unit stem dry mass - allowed_values_min: 100.0 - allowed_values_max: 1000.0 - stem_count_categorical: - description: Number of stems present, expressed in groups, where categories were 1=1; 2-3=2; 4-10=3; 11-30=4; and >30=5. Used by Peter Vesk. - type: numeric - units: '{count}' - label: Stem Count, categorical - allowed_values_min: 0 - allowed_values_max: 5 - stem_cross_sectional_area: - description: Cross-sectional area of the stem - type: numeric - units: mm2 - label: Stem cross-sectional area - allowed_values_min: 1.0 - allowed_values_max: 1000.0 - sapwood_cross_sectional_area: - description: Cross-sectional area of the stem once bark is removed - type: numeric - units: mm2 - label: Stem cross-sectional area without bark - allowed_values_min: 1.0 - allowed_values_max: 1000.0 - stem_dry_matter_content: - description: Stem dry mass per unit stem fresh mass - type: numeric - units: mg/g - label: Stem dry mass per unit stem fresh mass (Stem dry matter content) - allowed_values_min: 100.0 - allowed_values_max: 1000.0 - stem_hydraulic_conductivity: - description: Kh; Measure of how efficiently water is transported through the leaf, determined as the ratio of water flow rate through the leaf to the difference in water potential across the leaf, standardised to leaf area; units same as mg*m/s/MPa - type: numeric - units: 10^6.kg.m/MPa/s - label: Hydraulic conductivity (Kh) - allowed_values_min: 0.01 - allowed_values_max: 2000.0 - stem_mass_fraction: - description: Ratio of stem dry mass to total plant dry mass - type: numeric - units: g/g - label: Stem mass fraction - allowed_values_min: 0.01 - allowed_values_max: 1.0 - stem_N_per_dry_mass: - description: Stem nitrogen (N) content per unit stem dry mass - type: numeric - units: mg/g - label: Stem nitrogen (N) content per unit stem dry mass - allowed_values_min: 0.1 - allowed_values_max: 1000.0 - plant_diameter_breast_height: - description: Diameter at the base of the plant, usually "DBH" except in short plants; only "maximum" values are included - type: numeric - units: mm - label: Stem diameter - allowed_values_min: 0.01 - allowed_values_max: 5000.0 - leaf_stomatal_resistance_conductance_ambient: - description: Leaf stomatal resistance under ambient conditions. This is the original way leaf stomatal conductance was measured and reported and is still regularly used in environmental models and meteorology. An equation converts between resistance conductance and the molar values obtained through gas exchange readings ("Plants and Microclimate" by H.G. Jones (1992), page 55 and Appendix 3; "Elevated Carbon Dioxide Impacts on Soil and Plant Water Relations" by M.B. Kirkham (2011), page 149). - type: numeric - units: cm/s - label: Leaf resistance conductance under ambient conditions - allowed_values_min: 0.0001 - allowed_values_max: 10 - leaf_stomatal_conductance_per_area_ambient: - description: Rate of water loss through stomata under ambient conditions, per unit leaf area - type: numeric - units: mmol{H2O}/m2/s - label: Stomatal conductance per unit leaf area under ambient conditions - allowed_values_min: 0.1 - allowed_values_max: 2000 - leaf_stomatal_conductance_per_area_at_Amax: - description: Rate of water loss through stomata, per unit leaf area under saturated light and CO2 conditions - type: numeric - units: mmol{H2O}/m2/s - label: Stomatal conductance per unit leaf area under saturated light and CO2 conditions - allowed_values_min: 0.1 - allowed_values_max: 2000 - leaf_stomatal_conductance_per_area_at_Asat: - description: Rate of water loss through stomata, per unit leaf area under saturated light conditions - type: numeric - units: mmol{H2O}/m2/s - label: Stomatal conductance per unit leaf area under saturated light conditions - allowed_values_min: 0.1 - allowed_values_max: 2000 - leaf_stomatal_density_abaxial: - description: Stomatal density on the lower leaf surface - type: numeric - units: '{count}/mm2' - label: Stomatal density on the lower leaf surface - allowed_values_min: 1 - allowed_values_max: 1000 - leaf_stomatal_density_adaxial: - description: Stomatal density on the upper leaf surface - type: numeric - units: '{count}/mm2' - label: Stomatal density on the upper leaf surface - allowed_values_min: 0 - allowed_values_max: 1000 - leaf_stomatal_density_average: - description: Stomatal density averaged across both leaf surfaces - type: numeric - units: '{count}/mm2' - label: Stomatal density averaged across both leaf surfaces - allowed_values_min: 0 - allowed_values_max: 1000 - leaf_stomatal_distribution: - description: Distribution of stomatal across the two leaf surfaces - type: categorical - label: Stomatal distribution - allowed_values_levels: - amphistomatic: Leaves with stomata on both leaf surfaces - amphistomatic_uneven: Leaves with stomata on both leaf surfaces, but more stomata on the lower leaf surface - epistomatic: Leaves that only have stomata on the upper (adaxial) leaf surface - hypostomatic: Leaves that only have stomata on the lower (abaxial) leaf surface - leaf_stomatal_hairs: - description: Binary variable describing whether or not stomata are covered by dense hairs - type: categorical - label: Whether or not stomata are covered by hairs - allowed_values_levels: - stomata_covered_with_dense_hairs: Stomata densely covered by dense hairs - stomata_not_covered_by_hairs: Stomata not hair-covered - stem_mass_to_shoot_mass_ratio: - description: Fraction of shoot dry mass that is stems (versus leaves) - type: numeric - units: g/g - labels: Fraction of shoot dry mass that is stems (versus leaves) - allowed_values_min: 0 - allowed_values_max: 1 - root_system_type: - description: Binary variable describing whether or not a plant has a tap root - type: categorical - label: Tap root - allowed_values_levels: - tap_root_absent: tap root not present - tap_root_present: tap root present - tap_root_sometimes_present: tap root sometimes present - root_thickest_diameter: - description: Diameter of the thickest root - type: numeric - units: mm - label: Thickest root diameter - allowed_values_min: 0.01 - allowed_values_max: 1000 - branch_terminal_twig_cross_sectional_area: - description: Cross-sectional area of the terminal twig - type: numeric - units: mm2 - label: Terminal twig cross-sectional area - allowed_values_min: 0.05 - allowed_values_max: 50 - branch_terminal_twig_length: - description: Length of the terminal twig - type: numeric - units: mm - label: Terminal twig length - allowed_values_min: 1 - allowed_values_max: 1000 - vapor_pressure_deficit: - description: Vapor pressure deficit across the leaf surface - type: numeric - units: kPa - label: Vapor pressure deficit - allowed_values_min: 0 - allowed_values_max: 5 - vegetative_reproduction_ability: - description: A binary trait, indicating whether a plant taxon is able to reproduce and spread through the growth and division of vegetative material. For plants able to reproduce vegetatively, more detailed information is provided in the trait `clonal_spread_mechanism`. - type: categorical - label: Ability to regenerate and spread through the growth and division of vegetative material. - allowed_values_levels: - not_vegetative: Plant taxa that regenerate and spread only by seed. - vegetative: Plant taxa that can regenerate and spread through the growth and division of vegetative material, not just from seed; examples include runners, rhizomes, and bulbs. - stem_vessel_diameter: - description: Diameter of xylem vessels in stems - type: numeric - units: um - label: Diameter of xylem vessels in stems - allowed_values_min: 1 - allowed_values_max: 1000 - leaf_vessel_diameter: - description: Diameter of xylem vessels in leaves - type: numeric - units: um - label: Diameter of xylem vessels in leaves - allowed_values_min: 1 - allowed_values_max: 250 - stem_vessel_diameter_hydraulic: - description: Hydraulic diameter (hydraulically weighted diameter) is based on the equivalent circle diameter D and has been introduced to reflect the actual conductance of conduits. Based on the Hagen–Poiseuille law, a few large conduits may transport an equal amount of water as many small ones. - type: numeric - units: um - label: Hydraulic mean diameter of xylem vessels - allowed_values_min: 1 - allowed_values_max: 500 - stem_vessel_density: - description: Count of vessels per area in stems - type: numeric - units: '{count}/mm2' - label: Count of vessels per area in stems - allowed_values_min: 0.4 - allowed_values_max: 2000 - leaf_vessel_density: - description: Count of vessels per area in leaves - type: numeric - units: '{count}/mm2' - label: Count of vessels per area in leaves - allowed_values_min: 1 - allowed_values_max: 50000 - stem_vessel_lumen_fraction: - description: Fraction of xylem vessels comprised of lumen - type: numeric - units: um2/um2 - label: Fraction of xylem vessels comprised of lumen - allowed_values_min: 0.001 - allowed_values_max: 1.0 - stem_vessel_multiple_fraction: - description: Vmf; A vessel grouping index, the number of groups of vessels (vessels in direct contact with one another) divided by the total number of vessels (Scholz et al. 2013). A Vmf value approximating 1 denotes a tendency towards solitary vessels. - type: numeric - units: '{count}/{count}' - label: Index for the tendency of vessels to occur in clusters (smaller value) versus occur as solitary vessels (1) - allowed_values_min: 0.001 - allowed_values_max: 1.0 - stem_vessel_non_lumen_fraction: - description: Fraction of xylem vessels comprised of non-lumen - type: numeric - units: um2/um2 - label: Fraction of xylem vessels comprised of non-lumen - allowed_values_min: 0.001 - allowed_values_max: 1.0 - stem_vessel_wall_fraction: - description: Fraction of xylem vessels comprised of cell wall - type: numeric - units: um2/um2 - label: Fraction of xylem vessels comprised of cell wall - allowed_values_min: 0.001 - allowed_values_max: 1.0 - stem_xylem_vulnerability_index: - description: The ratio of vessel diameter to vessel density, as an index of sap conductance and susceptibility to vessel cavitation - type: numeric - units: '{dimensionless}' - label: Ratio of vessel diameter to vessel density - allowed_values_min: 0.05 - allowed_values_max: 1000.0 - plant_tolerance_water_logged_soils: - description: Ability of taxon to tolerate water-logged soils - type: categorical - label: Water-logging tolerance - allowed_values_levels: - not_applicable: Taxa is not typically confronted with waterlogging and its response is unknown - 'less_than_1_month': Taxa able to tolerate less than 1 month of waterlogging - '1-6_months': Taxa able to tolerate 1-6 months of waterlogging - 'greater_than_6_months': Taxa able to tolerate more than 6 months of waterlogging - aquatic: Taxa truly aquatic and able to be permanantly inundated - wood_axial_parenchyma_fraction: - description: Fraction of wood comprised of axial parenchyma - type: numeric - units: um2/um2 - label: Fraction of wood comprised of axial parenchyma - allowed_values_min: 0.001 - allowed_values_max: 1.0 - wood_conduit_fraction: - description: Fraction of wood comprised of all conduits - type: numeric - units: um2/um2 - label: Fraction of wood comprised of all conduits - allowed_values_min: 0.01 - allowed_values_max: 1.0 - wood_fibre_fraction: - description: Fraction of wood comprised of fibres - type: numeric - units: um2/um2 - label: Fraction of wood comprised of fibres - allowed_values_min: 0.01 - allowed_values_max: 1.0 - wood_ray_parenchyma_fraction: - description: Fraction of wood comprised of rays - type: numeric - units: um2/um2 - label: Fraction of wood comprised of rays - allowed_values_min: 0.01 - allowed_values_max: 1.0 - wood_tracheid_fraction: - description: Fraction of wood comprised of tracheids - type: numeric - units: um2/um2 - label: Fraction of wood comprised of tracheids - allowed_values_min: 0.0 - allowed_values_max: 1.0 - leaf_secondary_vein_angle: - description: Angle between a leaf's secondary vein and its primary vein (midrib). - notes: For a palmate leaf, the main veins radiating from the base are generally referred to as primary veins, with secondary veins branching off each primary vein. - type: numeric - units: deg - label: Angle of secondary veins - allowed_values_min: 0 - allowed_values_max: 180 - leaf_vein_frequency: - description: A measure of vein density, which is the number of veins intersecting the perimeter of a square divided by the perimeter of the square. - notes: .na - type: numeric - units: '{count}/mm' - label: Leaf vein frequency - allowed_values_min: 0.01 - allowed_values_max: 20 - leaf_total_vein_density: - description: The length of all minor and major leaf lamina veins per unit leaf area. - notes: This trait records the length of all orders of leaf lamina veins, while the trait `leaf_major_vein_density` records only the length of major veins (primary, secondary and tertiary veins). - type: numeric - units: mm/mm2 - label: Length of all minor and major leaf lamina veins per unit area. - allowed_values_min: 0.01 - allowed_values_max: 20.0 - leaf_major_vein_density: - description: The length of major leaf lamina veins per unit leaf area, where primary, secondary and tertiary leaf lamina veins are considered `major` veins. - notes: This trait records the length of only major veins (primary, secondary and tertiary veins), while the trait `leaf_total_vein_density` records the length of all orders of leaf lamina veins. - type: numeric - units: mm/mm2 - label: Length of all leaf lamina veins per unit area. - allowed_values_min: 0.01 - allowed_values_max: 20 - leaf_water_band_index: - description: Water band index, the ratio of the reflectance at 970 nm / 900 nm, recorded from the spectro-radiometer. - type: numeric - units: '{dimensionless}' - label: Water band index - allowed_values_min: 1 - allowed_values_max: 1.1 - water_potential_midday: - description: A plant's water potential during the heat of the day - type: numeric - units: MPa - label: Midday water potential - allowed_values_min: -10 - allowed_values_max: 0 - water_potential_predawn: - description: A plant's water potential just before sunrise - type: numeric - units: MPa - label: Pre-dawn water potential - allowed_values_min: -8 - allowed_values_max: 0 - leaf_relative_water_content_predawn: - description: Ratio of water in a fresh leaf to water in a saturated leaf; measured pre-dawn - type: numeric - units: g/g - label: Leaf relative water content predawn - allowed_values_min: 0.1 - allowed_values_max: 1.4 - water_potential_50percent_lost_conductivity: - description: Xylem pressure at which 50% of conductivity is lost - type: numeric - units: MPa - label: Xylem pressure at which 50% of conductivity is lost - allowed_values_min: -15 - allowed_values_max: 0 - water_potential_88percent_lost_conductivity: - description: Xylem pressure at which 88% of conductivity is lost - type: numeric - units: MPa - label: Xylem pressure at which 88% of conductivity is lost - allowed_values_min: -15 - allowed_values_max: 0 - hydraulic_safety_margin_50: - description: Difference between minimum observed water potential and water potential at which 50% of conductivity is lost. - type: numeric - units: MPa - label: Hydraulic safety margin (versus 50% loss conductivity) - allowed_values_min: -5 - allowed_values_max: 10 - leaf_water_use_efficiency_integrated: - description: WUE; Rate of carbon dioxide uptake relative to water loss, per unit leaf area. This measures how much biomass is produced relative to transpiration, and is therefore an integrated measure of water use efficiency. (Calculated as biomass production / transpiration) - type: numeric - units: g{H2O}/g{biomass} - label: Integrated water use efficiency - allowed_values_min: 0.1 - allowed_values_max: 200.0 - leaf_water_use_efficiency_intrinsic: - description: PWUE calculated as Aarea/gs; Ratio of photosynthesis (CO2 assimilation rate) to stomatal conductance (gs). This is intrinsic water use efficiency. - type: numeric - units: umol{CO2}/mmol{H2O} - label: Leaf photosynthesis rate per unit stomatal conductance (photosynthetic water use efficiency, PWUE, or intrinsic WUE) - allowed_values_min: 0.001 - allowed_values_max: 2.0 - leaf_water_use_efficiency_photosynthetic: - description: PWUE calculated as Aarea/E; Ratio of photosynthesis (CO2 assimilation rate) to leaf transpiration (E; water loss). This is also termed instantaneous water use efficiency. - type: numeric - units: umol{CO2}/mmol{H2O} - label: Leaf photosynthesis rate per unit leaf transpiration (photosynthetic water use efficiency, PWUE, or instantaneous WUE) - allowed_values_min: 0.1 - allowed_values_max: 200.0 - wood_delta13C: - description: Wood carbon stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Wood carbon (C) isotope signature (delta 13C) - allowed_values_min: -50.0 - allowed_values_max: 0.0 - wood_delta15N: - description: Wood nitrogen stable isotope signature - type: numeric - units: '{delta}[ppth]' - label: Wood nitrogen (N) isotope signature (delta 15N) - allowed_values_min: -25.0 - allowed_values_max: 75.0 - stem_density: - description: Stem dry mass per unit stem fresh volume, specifically for non-woody or partially woody stems that otherwise are outliers for wood density - type: numeric - units: mg/mm3 - label: Stem dry mass per unit fresh stem volume - allowed_values_min: 0.1 - allowed_values_max: 1.4 - wood_density: - description: Stem dry mass per unit stem fresh volume (stem specific density or SSD or wood density) - type: numeric - units: mg/mm3 - label: Stem dry mass per unit fresh stem volume - allowed_values_min: 0.05 - allowed_values_max: 1.4 - wood_C_per_dry_mass: - description: Wood carbon (C) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood carbon (C) content per unit wood dry mass - allowed_values_min: 50.0 - allowed_values_max: 750.0 - wood_N_per_dry_mass: - description: Wood nitrogen (N) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood nitrogen (N) content per unit wood dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - wood_P_per_dry_mass: - description: Wood phosphorus (P) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood phosphorus (P) content per unit wood dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - wood_K_per_dry_mass: - description: Wood potassium (K) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood potassium (K) content per unit wood dry mass - allowed_values_min: 0.01 - allowed_values_max: 100.0 - wood_Ca_per_dry_mass: - description: Wood calcium (Ca) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood calcium (Ca) content per unit wood dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - wood_Mg_per_dry_mass: - description: Wood magnesium (Mg) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood magnesium (Mg) content per unit wood dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - wood_Na_per_dry_mass: - description: Wood sodium (Na) content per unit wood dry mass - type: numeric - units: mg/g - label: Wood sodium (Na) content per unit wood dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - wood_dead_N_per_dry_mass: - description: Dead wood nitrogen (N) content per unit dead wood dry mass - type: numeric - units: mg/g - label: Dead wood nitrogen (N) content per unit dead wood dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - wood_dead_P_per_dry_mass: - description: Dead wood phosphorus (P) content per unit dead wood dry mass - type: numeric - units: mg/g - label: Dead wood phosphorus (P) content per unit dead wood dry mass - allowed_values_min: 0.001 - allowed_values_max: 10.0 - wood_dead_K_per_dry_mass: - description: Dead wood potassium (K) content per unit dead wood dry mass - type: numeric - units: mg/g - label: Dead wood potassium (K) content per unit dead wood dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - wood_dead_Ca_per_dry_mass: - description: Dead wood calcium (Ca) content per unit dead wood dry mass - type: numeric - units: mg/g - label: Dead wood calcium (Ca) content per unit dead wood dry mass - allowed_values_min: 0.1 - allowed_values_max: 100.0 - wood_dead_Mg_per_dry_mass: - description: Dead wood magnesium (Mg) content per unit dead wood dry mass - type: numeric - units: mg/g - label: Dead wood magnesium (Mg) content per unit dead wood dry mass - allowed_values_min: 0.01 - allowed_values_max: 10.0 - wood_dead_Na_per_dry_mass: - description: Dead wood sodium (Na) content per unit dead wood dry mass - type: numeric - units: mg/g - label: Dead wood sodium (Na) content per unit dead wood dry mass - allowed_values_min: 0.001 - allowed_values_max: 1.0 - woodiness: - description: A binary trait, indicating whether or not a plant’s stems are woody, with woody broadly defined to include both `true wood` (secondary xylem) and taxa that do not produce secondary xylem (i.e. monocots and ferns) but have thick, stiff, robust lignified stems. - notes: This trait considers all species that have stiff lignified stems as `woody` and those that lack such stems as `herbaceous`. See the trait `plant woodiness detailed` for sub-categories of `woody` that indicate the extent and type of woodiness present in a plant stem - type: categorical - label: Woodiness - allowed_values_levels: - herbaceous: Plant with non-lignified stems. - woody: Plant whose stems are stiff and lignified, including both stems that produce secondary xylem and those that produce only lignified primary tissues but are notably stiff and robust. - woodiness_detailed: - description: A variable to indicate the extent, distribution, and type of secondary xylem (true wood) and wood-like lignification (woodiness in monocots and ferns) in stems, roots, and reproductive shoots. - notes: This trait documents in detail the degree and type of lignification in a plant's stems and roots (woodiness), while `plant woodiness` is a binary trait collapsing woodiness into a pair of values, `woody` versus `herbaceous`. Datasets that only use the terms `woody` versus `herbaceous` are only mapped to the binary trait; only datasets that explicitly indicate different levels of woodiness are mapped to `plant woodiness detailed`. - type: categorical - label: Detailed woodiness categories - allowed_values_levels: - herbaceous: Plant with non-lignified stems. - woody: Plant whose stems produce secondary xylem (true wood). - woody_base: Plant where secondary xylem (true wood) is present only at the base of stems. (synonym, suffrutescent) - woody_root: Plant that has a woody rootstock, but non-woody above-ground stems. - semi_woody: Plant that forms stems considered only "partially woody", generally having lower lignin and cellulose contents and possibly not forming secondary xylem. These are generally short-lived, fast-growing stems. (synonym, green-stem shrub, soft shrub, soft wood) - woody_like_stem: Taxa, including monocots and ferns, that produce thick, stiff, robust lignified stems, but do not produce secondary xylem. - woody_like_inflorescence: Taxa, including monocots and ferns, that produce thick, stiff, robust lignified inflorescence shoots, but are otherwise non-woody. diff --git a/vignettes/config/unit_conversions.csv b/vignettes/config/unit_conversions.csv deleted file mode 100644 index f49a88177..000000000 --- a/vignettes/config/unit_conversions.csv +++ /dev/null @@ -1,149 +0,0 @@ -unit_from,unit_to,function -%,mg/g,x*10 -%,g/g,x*0.01 -%,mg/mg,x*0.01 -%,mg/kg,x*10000 -%,{dimensionless},x*.01 -%,{count}/{count},x*.01 -{dimensionless},{count}/{count},x*1 -a,mo,x*12 -{count}/m2,{count}/mm2,x*1/1000000 -cm,m,x*0.01 -cm,mm,x*10 -um,mm,x*0.001 -mm,um,x*1000 -m,mm,x*1000 -cm2,mm2,x*100 -m2,mm2,x*1000000 -mm,m,x*0.001 -g,mg,x*1000 -um/2,um,x*2 -mm2/mm2,um2/um2,x*1 -%,um2/um2,x*.01 -{dimensionless},um2/um2,x*1 -mg/mg,mg/g,x*1000 -g/g,mg/mg,x*1 -mg/mg,g/g,x*1 -mg/g,g/g,x*0.001 -ppm,mg/g,x*1/1000 -ug/mg,mg/g,x*1 -g/g,mg/g,x*1000 -g/kg,mg/g,x*1 -mg/kg,mg/g,x*.001 -ug/g,mg/g,x*0.001 -mmolN/g,mg/g,x*14.0067 -ug/mg,mg/kg,x*1000 -ug/g,mg/kg,x*1 -ppm,mg/kg,x*1 -mg/g,mg/kg,x*1000 -g/kg,mg/kg,x*1000 -mg/kg,ppm,x*1 -m/g,cm/mg,x*0.1 -cm/mg,m/g,x*10 -cm/g,m/g,x*1/100 -mm/g,m/g,x*1/1000 -mg{shoot}/mg{root},mg{root}/mg{shoot},1/x -kg/m2,mm2/mg,1/x -g/m2,mm2/mg,1/x*1000 -mg/cm2,mm2/mg,1/x*100 -mg/mm2,mm2/mg,1/x -ug/mm2,mm2/mg,1/x*1000 -g/dm2,mm2/mg,1/x*10 -cm2/g,mm2/mg,x*0.1 -cm2/mg,mm2/mg,x*100 -m2/g,mm2/mg,x*1000 -m2/kg,mm2/mg,x*1 -mm2/g,mm2/mg,x*0.001 -mm2/kg,mm2/mg,x*0.000001 -m2/g,g/m2,1/x -m2/kg,g/m2,1000/x -cm2/g,g/m2,10000/x -cm2/mg,g/m2,10/x -mm2/g,g/m2,1000000/x -mm2/mg,g/m2,1000/x -kg/m2,g/m2,x*1000 -mg/cm2,g/m2,x*10 -mg/m2,g/m2,x*0.001 -g/cm2,g/m2,x*10000 -g/dm2,g/m2,x*100 -mg/mm2,g/m2,x*1000 -mol{H2O}/m2,g/m2,x*18 -mmol{N}/m2,g/m2,x*14.0067/1000 -mmol{P}/m2,g/m2,x*30.973761/1000 -kg/m3,mg/mm3,x*0.001 -g/cm3,mg/mm3,x*1 -ug/mm3,mg/mm3,x*1/1000 -mg/ml,mg/mm3,x*1 -ppm,umol/mol,x*1 -%,umol/umol,x*1/100 -mol/mol,umol/umol,x*1 -umol/g,mmol/kg,x*1 -mmol/g,mmol/kg,x*1/1000 -mol/kg,umol/g,x*1000 -nmol/g/s,umol/g/s,x*0.001 -mol/m2/s,mmol/m2/s,x*1000 -mmol/m2/MPa/s,mmol/m2/MPa/s,x*1 -kg/m2/MPa/s,mmol/m2/MPa/s,x*18015200 -umol{CO2}/mol{H2O}/m2/s,mmol{CO2}/mol{H2O}/m2/s,x*1/1000 -ppm,umol{CO2}/mol,x*1 -ppm,umol/mol,x*1 -umol{CO2}/kg/s,umol{CO2}/g/s,x*0.001 -mmol{CO2}/g/s,umol{CO2}/g/s,x*1000 -nmol{CO2}/g/s,umol{CO2}/g/s,x*0.001 -neg_umol{CO2}/g/s,umol{CO2}/g/s,x*-1 -mmol{CO2}/m2/s,umol{CO2}/m2/s,x*1000 -mmol{CO2}/m2/s,umol{CO2}/m2/s,x*1000 -nmol{CO2}/m2/s,umol{CO2}/m2/s,x*1/1000 -neg_umol{CO2}/m2/s,umol{CO2}/m2/s,x*-1 -mol{CO2}/m2/d,umol{CO2}/m2/s,x*11.57407 -umol{CO2}/umol{H2O},umol{CO2}/mmol{H2O},x*1/1000 -mmol{CO2}/mol{H2O},umol{CO2}/mmol{H2O},x*1 -umol{CO2}/mol{H2O},umol{CO2}/mmol{H2O},x*1/1000 -umol{CO2}/nmol{H2O},umol{CO2}/umol{H2O},x*1/1000 -umol{CO2}/mmol{H2O},umol{CO2}/umol{H2O},x*1/1000 -umol{CO2}/umol{H2O},umol{CO2}/nmol{H2O},x*1000 -umol{CO2}/g{N}/s,umol{CO2}/mol{N}/s,x*14.0067 -umol{CO2}/g{P}/s,umol{CO2}/mol{P}/s,x*30.973761 -mmol{CO2}/mol{P}/s,umol{CO2}/mol{P}/s,x*1000 -umol{H2O}/m2/s,mmol{H2O}/m2/s,x*0.001 -mol{H2O}/m2/s,mmol{H2O}/m2/s,x*1000 -mol{H2O}/m2/d,mmol{H2O}/m2/s,x*0.011574 -mol{H2O}/m2/s,mmol{H2O}/m2/s,x*1000 -mol{H2O}/m2/s,umol{H2O}/m2/s,x*1000000 -mmol/m2/s,umol{H2O}/m2/s,x*1000 -mmol{H2O}/m2/s,umol{H2O}/m2/s,x*1000 -nmol{H2O}/m2/s,umol{H2O}/m2/s,x*1/1000 -cm2{leaf}/cm2{sapwood},mm2{sapwood}/mm2{leaf},1/x -mm2{leaf}/mm2{sapwood},mm2{sapwood}/mm2{leaf},1/x -cm2{leaf}/mm2{sapwood},mm2{sapwood}/mm2{leaf},x*1/100 -cm2{sapwood}/m2{leaf},mm2{sapwood}/mm2{leaf},x*1/10000 -10^4.mm2{sapwood}/mm2{leaf},mm2{sapwood}/mm2{leaf},x*1/10000 -MPa,Pa,x*1000 -neg_MPa,MPa,x*-1 -MN/m2,MPa,x*1 -N/m2,MPa,x*1/1000 -mJ/m,N,x*1/1000 -J/m,N,x*1 -kJ/m2,N/m,x*1000 -J/m2,N/m,x*1 -100xJ/m2,N/m,x*100 -kN/m,N/m,x*1000 -10^1.kN/m,N/m,x*100 -10^1.MN/m2,N/m2,x*100000 -MJ/m2/m,N/m2,x*1000000 -MN/m2,N/m2,x*1000000 -mg/m/MPa/s,10^4.kg/m/MPa/s,x*1/100 -kg/m/MPa/s,10^4.kg/m/MPa/s,x*10000 -10^4.ml/cm/MPa/s,10^4.kg/m/MPa/s,x*0.1 -10^3.kg/m/MPa/s,10^4.kg/m/MPa/s,x*10 -ml/cm/MPa/s,10^4.kg/m/MPa/s,x*100 -kg/m/Pa/s,kg/m/MPa/s,x*1/1000 -10^6.kg/m/MPa/s,kg/m/MPa/s,x*1/1000000 -10^4.kg/m/MPa/s,kg/m/MPa/s,x*1/10000 -10^1.kg/m/MPa/s,kg/m/MPa/s,x*0.1 -ml/cm/MPa/s,kg/m/MPa/s,x*0.1 -ml.cm/MPa/s,10^6.kg.m/MPa/s,x*100 -mg.cm/MPa/s,10^6.kg.m/MPa/s,x*1/100 -kg.m/MPa/s,10^6.kg.m/MPa/s,x*1000000 -10^4.kg.m/MPa/s,10^6.kg.m/MPa/s,x*100 -10^7.kg.m/MPa/s,10^6.kg.m/MPa/s,x*1/10 diff --git a/vignettes/contributing_data.Rmd b/vignettes/contributing_data.Rmd deleted file mode 100644 index 6133a3af0..000000000 --- a/vignettes/contributing_data.Rmd +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Contributing data to AusTraits -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Contributing data to AusTraits} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - results = "asis", - echo = FALSE, - message = FALSE, - warning = FALSE -) - -library(traits.build) - -my_kable_styling <- util_kable_styling_html -``` - -AusTraits is an open-source harmonised database of Australian plant trait data. It exists because hundreds of researchers across Australia (and beyond) have contributed their datasets to this endeavour. Each dataset we receive incrementally broadens trait coverage for the Australian flora and, in turn, makes the database a little better to address your research questions. - -As such, we welcome all data contributions to AusTraits, including recently collected trait data, legacy trait data from your file archives, transcribed reference works, and transcribed datasets from the literature. - -The AusTraits data-entry people then merge each dataset into AusTraits. AusTraits is a harmonised database: for each study we carefully check to ensure units are accurate, continuous trait values map in the expected range, categorical trait values map onto sensible terms, location data are accurate, taxon names are aligned to current standards, and all metadata are recorded. - -After completing a series of quality checks, we will send you a report to review that summarises the data and metadata. The reports include plots for each continuous trait, comparing values in your submission to those already in AusTraits. It plots your study locations (sites) on a map. It summarises your metadata and indicates the taxonomic alignments made. The report includes both targeted questions (sometimes) and automated questions, acting as prompts to review aspects of the report. Reviewing your report should not take long, and confirms the transparent, thorough process used to build AusTraits. - -As a first step, all we really require is a **Data Spreadsheet** and a copy of your **Manuscript**. - - -## Data - -**Your dataset, preferably in a spreadsheet format.** - -• **Traits:** Make sure the trait names used in your dataset are easy to interpret or, alternatively, provide a brief definition - -• **Units:** Please make sure the units for each trait are provided as part of the trait name or in a separate spreadsheet/worksheet - -• **Value type:** We prefer to incorporate raw values (or individual means) in AusTraits, but can use population or multi-site means if that is what is available. For mean values, please provide sample size. - -• **Location:** For field studies, please provide location details (see more below). - -• **Context:** Optional, but AusTraits can read in one (or more) column(s) with contextual information, such as canopy position, experimental manipulation, dry vs. wet season, etc. - -• **Collection date:** Optional, but AusTraits can read in a column with sampling date (in any format) - -• **Species/taxa:** Please provide complete species names or a look-up table to match species codes. Out-dated taxonomy is fine – we have name-matching algorithms. - - -## Metadata - -The AusTraits structure has fields to input all metadata associated with your study, including methods, location details, and context. In detail: - -• **Methods:** For published studies the necessary methods and study information can be extracted from a publication; just attach a copy of the manuscript or the DOI. - - - The only commonly missing information is the general sampling period, such as ‘October-December 2020’; this is only required if your data file doesn't have a date column. - - - For unpublished studies, provide brief methods for how each trait was measured; you can simply refer to a standard published protocol - -• **Study locations:** Whenever possible, AusTraits includes location names, location coordinates (latitude/longitude), and any other location properties you have measured/recorded (vegetation description, soil chemistry, climate data, etc.). This information can be provided as a second spreadsheet or as additional columns in the main data spreadsheet. Just make sure the location name is the same in both spreadsheets. - -• **Context:** If your study includes contextual variables, make sure the context values are included as columns in the data spreadsheet. Also, please make sure the contextual values are self-explanatory or provide the necessary explanation. - -• **Authors:** Authorship is extended to anyone who played a key intellectual role in the experimental design and data collection. Most studies have 1-3 authors. For each author, please provide a **name**, **institutional affiliation**, **email address**, and their **ORCID** (if available). Please nominate a single contributor to be the dataset's point of contact; this person's email will not be listed in the metadata file, but is the person future AusTraits users are likely to seek out if they have questions. Additional field assistants can be listed. - -• **Source:** The published manuscript is generally the source. If different traits or observations from a single dataset were published separately, please provide both references. If the dataset you are submitting is a compilation from many sources, please provide a complete list of sources and indicate which rows of data are attributable to which source. - - -## Most common hang-ups - -• **Categorical trait values:** If you have categorical traits, please define any trait values (i.e. entries for that trait) that are not self-explanatory. A copy of our definitions file, including allowable values for each trait is available [here](http://traitecoevo.github.io/austraits.build/articles/trait_definitions.html). The definitions file is a work-in-progress and additional trait values can be added if needed to capture the exact meaning you intended. - -• **Data sourced from others:** For numerical traits, AusTraits strives to only include data collected by you for this project, to avoid having multiple entries of the same measurement/observation. If you have certain trait values that were sourced from the literature, an online database, or colleagues, please indicate that clearly. If trait values for some species were collected by you and others were sourced, it is very helpful if you could add a column to your spreadsheet that indicates the source for different rows of data. diff --git a/vignettes/figures/Workflow.png b/vignettes/figures/Workflow.png deleted file mode 100644 index 91221e91aa501c48b70b3cd1f63476299482c79e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78508 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

    A|NU#4H82MD4`%Z zAR*E%eEays`+MK(`{VJto@<6P=j^@D-uGJfeXn&>Ir!(G{p*B0q=8egYoRo=%ZIV@ z@{^!S@;i2v(Np(xf7V5@)r`5C%f2N`6h}r;G&<2_VDGxzfBSO(5~Dn8&Mj`%8N|1* zuNNI3^rXCy`S^YS3+0eWei-1`Y7Lr6%E;zik6-ZkGYDIcTeH}(JU=HQgnJ3J2Z`0} z4(i&yEXk0usPbH+sWUO1mAMuWF8wW9J{X&?!YT+0pG27$2?1C`(8Ew z&8mI(M+^GG&8hN)Zcj-)YU`1N_+~F%fBr>GY&&nf%=y%XJ{jA!lVs-AfP;eBR_Us7 z6^jupQ*`?m+tu^;-}&-o0;+s>T1AGg&SmN62UR6A7d$0-A(i@5QbM1v=C#M<{TDB9 zthZ)sKMrjJZPUqzn+j4xKQ8gn)(~-P_s&=02G$gN+FBEY4|B$|eT+1W_>wdc7BXBq zu_9qgiV2o)w!2=^&O_!V&TspEy|yo7BL7`y<0`{ff(g#n_ZCG@#f=@XN+0{Au8 z@0GP_US3I7Uw><6r}0^W_$+B=VnlAIYfo%Q?)A&=bsuE~v&pLx{(Lp;9@2B+lz5#7 zAwU}<@rcm(zdyz8IFw|Cu) z{P~n~*k-9JxN}%9=l$5P%zQio>+(@z`o1{_nhi_Bp*BH_&iF1a(0Nx%9j{Yh8W@_k zDE?DZ6CS}$wBp0rqtZ2}&=k(t8QoW&+hR2r;5Nqg;v(Kq;FqdJNyReAn7j|Gs=2iF2|c+1_Vkg6ot@pgs=GxNha0hqm{-gCTyT>mo;SW38jaDv!4(~yvvPUkYus|@M?%Ww^ zt(%nfkXrvCF1BIvjfAEVWoMQ7-DEYd_TWWQ`qBLiMrTh!$`l-g* zL`CK_{}Hnwjc!uwlxuoEYO+?=BH`=w&9GKZg|Ea}L_0(^1m=iW>JPRLA$0?*<>?&-0!sRa*!}(WNSfR#Y(xITuN4F; z1?SS^F8CT7%y795)n!TFifOkGKew|^?l0dfrPK~t@-MIQn1Lidju0A5sJl$vDaqzb zJbh`L?RlWjlQuG+vg22it>j&d_? zOwCJq;(Sf%Z=)lAqloU?n912FPC@$bW=66*3?Ceq_J?>HCPD;XDXUJ*`vBF9UhkWo z*Qy^d6FdLp{$z%!Ke3F?a&jqos_nk=GK>1+A{Q<`P1Cc8AKe5;+4vro7rZTCHe z$-olSDIDn}yKkf?U22=V+Ci!)H}sLm1i4yK?ug>jZD&*by`nGXz9^~wfvzBA4bo9~ zXjReeO()fjEbyC;nS44c#s4aM$jr1U+r9Znln5(7#d+I~dTjhHGOmE-`whOApF8zR zi95AdJPM(rl^FWvXD>dxL`!#j-~OS5p!6mWPZ6kY&Xk0At;N)7N|&S^ z=w_Fkb}gw6K%x^<6by}3?^mBU4$7vJsF8+Nyrsu?dCTp@=K*I&9On!F_+%C8wk)%l z_dblltA`aOXu-K7wPd{b7WO_3o1&&PmQXtg>_6xnqQYhHod_o4OF_;F>sq%-Ial z2_>t7Yw;sAt?U-E8i#O@2@svW)6D zkRXs;t`=0OW8tWIi;}pNS8Ur|t3pG^U8!i+%zA;xmp?G++D3!}dEf78-tZKNJj=%#d3ur`Zjn!HRq8EKFF z!PEZO=uZtx3`4y_$4bRYWKtNZA)O-)8qNh2L7%*|P^{y6eU5Ewf*vp9<<*~wAfLWo zpGv~+i9i+E>&QTvu!jcG9Z`qTGVmW1aJH@{#D%grRpqYgycE-(yq>^*_g<;gEtlIR zau!6CNX!#WN!2}2#1ZrwY8_|fuhNcc-cEnjFC{*w&Rujta>6F;0li-$dR16_-#uXM z&dwvtU&4N5QF=7R8EFJxFKNm=Ny_dB8c~NZ|siH z%k8V*ycO=TYlhXDB__QkI8KBP8>Wz(cPNt6=_c-S)17;Px|e0Rh~v+NC>mmm;~2bN z{-<@?JpB~$4~~iPZVFV2hRoO|<*CrXgF5%dtrgFsF0yyPX$L(z9p0&&;`tNMpTWs{ ziG%8ccs}Rdqq|;2dm2h8$TM7D&dl}##&XDjr_7^Vq)p_o^q5ka4R3uzGe?u>P>#7& zAV`{-ShcKs?_Qc$tiK5-LYuAJi=g^mo|mZ_*Nv@4sEd3Oq-Azw=zpU(kcE88RX5^9 zIn-?^GqR^pDKWkek{L6OiGIBr)(Acbe`dj>k>(pdeHkjBnG4%=<6TQzV2R*F+%F&< zF$brdd!G>#(Af5 zD0=CQ+gUnwsg~KQiZ_#2=EOJmmL@pslJ}Tv1R>wuhHVTVa-P|TqjHWj+C7r6@80qJ zHu`y#4ok^kF=c4lyCXuwTkWCQTdko^-S6lvvQ_(pe8eqSMTux?j&;51ygt%+u1t zvQKVsts!G8zZM-sW9erd<10pkTI@2kuK6YC8Up&zUoxJ&9mBK($W!iuk5C2cCpDYT znkcgdQ6U~hUWGI5?20)jQ9ZLj!c>2Qf+U0`I}Wb}oh||8{VbjE6g6{|)pE|cS6Rf~ zM6%1 zz|0^GE$Cc+LD#Ny2bZdZGNY%FXeIbrH(5{$u8g!T@4y$~ERW8+?0pkTN>~%PS%cw` z>Et-7y#kG_a_jN2YOyHaGNonL?P0qcg{-`Hc}K9;UZdOuu6|%r&_1GNXs*7pn4+*) zK$;(FRkR%Hoh0a)l}3G5KWSbzdSjZHI=H`hge7lPz|)wtUJ$pq?uy1DV&vsAHm5)X zHA}}_YGkkB$GFxY9fi=JHeK0%asHmljXdIuGK;%+Fscg@-+4)LV*NPv;0~iI8KTca z@6nGoF&*uD@ zCSd`%dVHGpbEK8xC-WMWEozdT(~2Z3-TzT%xN&GeWrl@|4n8L@ zd74a>uKR^OUBe_@>4%g`23dQO8_~yQ&jW32>NVa}?|Sp^$a)r$%QFsU@PxtycJUu6=gd-3AFN_<#LED`>wa@W!C2U?g zk-5!D3@1?BZDmCh$jY?;;NU+nyWb$B{r>h@6wDz(RJS|!CY6WXt`L`y6U;}2wLQ+H zQ!X6sKKsn8=-_b#!-#givSwm3fjWbIvwne*bbr{Y_A)_Vz%%_hy>!<0pEcoxH&*R2 z0_>7$zTVtL^(ZoHGXGUdJo*fDiPaNp6xB#kSQirxjVq1od^Sy~ZJiNT-T7!7dhdj< z;66Q7S6ifvJ-6a{+uwoBv@STSJY1PWmdA*lvK`XS^U;wGSB186@F!$PhlOwV*_-4g z%~IdUGV3re|2kvvegzaF2NiU1i)O^QZ1Os#a5X3DOtGG+)4P7|A~X%&6^Va3!9^Fb z8$`NYkh)qQ3D+9*(;;DF1SK0H-n8 z$;Bn;BHeXNz65LqT@kFjW!9!Rz)G5)$rMEeD1#Q!<7$W}-3KaxwaDX8zv@ z(hrSatKccr9vX>}*Jbu7O7`ecYUfBO`_Y@+m{ZWHCXtNTZNkzp+rrNujx5rex2gH$ zFB6L9AC04vS>CUl48U)UJW<#|e=cWnme#+}Pqx8m@+Hq(w+a4&SaM2uL1a!y=9}xZ zjqw$4QXlRfYrS^Is!MDZt+2L4+NR4Tirnki-b1?teAN7f!9y;6N9CZ}<3!jB1SI#rH)m%qqz$wYpv`N^Tw+%e5!TJ=Ov$-{gyVsmaIS!*P@ zq(4PcSEh8d_rAb$`Xnx{+b-=~d_9|uNpC%fd%S;Ggk4;YxU!;Dn@%!bv7qz$Itx~g zZ=CfQk$Sr~RtEFgvWIIgp|_Y~-tfQ=-#dZpgOW!FTLGhvO!o1n70bHiQyp?V`KYSW zb84n5}r+Ps&%s9;0IJ%?h5$|<=iKHv- zpMGo;nj2goR=S4axhvjpcCTLlWm-*p4VoVH@qRCbYtjXT{G#>iJ?RV|wb|EncqTOS zDxyECKfjRr1gn<8?+jmVf7E-QUXC>W@|ZV*&a;7}?P+n?UYF=wvQ`-lRMFP*J8ctH zjQJM6ic-VVs@+GKWbhI4HZb&#mV&HpXdb@GYs!A{wZTN}26@GUU-rW4q+W5(mPN1) zsZJcDcy{tAMMCaP(|2BSksIm|kA57k2VdUhpWYF_xj;A6gCy6WNg*9slAHLVqVT9x zUuuw2qyDC%bonC;s!41*whpDfOUX#I8||>p`h=5wI8*FuHL4ima(R_&!?Ko*wwREW9pUj1mdFv4Z&HOUYG8rET$PpKZ3_g~^)|J*YLYk5&~P?fdbe_BFw(Utp=p1a@{v(pCo*@BME+dpf<5f9fsG;Jsj zADN?W)5u1av7P6~u))U}`Qe)bN%z{0PA6I{J12p%3zlJj*Ul%-Tenk#@nGn(;Oz!G z!qg-2>_?B79~+xOnl{)=0yyg=e%?R?&!i~rkM71A5i z`plK-n)KYh(Vy>g3F7KV%(%DwzENqBN;$GuqH{kn{RL+1j=QDZ8~%Kz^qHYfE|&-Q zKMKD4ibCEJozJC%*jpLE-1@?{p8jQ?DV_jhU;@ma~S&LKa3WNc^7KBt5zov@11cdc9(Du`!pwE_1|8kzL!ukmV4B5%E& z&^cJ^fJx&$vSsugBh+ANX^P%w^qsnyVP+RYAv=^Y(fE@8?SviYL!=|9O=u z#jO~9j<&@3$xF=q-)nB(){dOyo(H0f{598ItrFv>Zah#KPYD=NuG3dtr^`ik=3it> zT+@BPm8or+qA*kqK*VxN^m(i~1|T@=F$?5?goDsI_Gt&d{nE? z@_>6FGRE?HdU((u&0Hf^n}hTUmMwz6S@fH5)rTOgiX7W!`0zAiC}0DbeRtht3Yo1R zEo0&|Z~MEei0K2zvZFjydD;NqN<$R$Rg~sCkDUgx#oYv>47VYRKQ}c2fg>=taf` zz%r*KxdRDW?6cwo3^Hls_rZ+f%U|^$XWw5x1j>)ah$u)X5LGbvk?PKa9c&0$tTbUQKzos}%g- z7isMRhU5?G6xM31?RhmkdXp<_y6BE`Th`BFgk@ky8k*E?E#FJzo^ED>ab<)byL9U* zG5>j^p|_C;$Gp*#H>4h;aT+H!$kQj(g1(*TU&?CjecGj#M^Jul_Q~^iYl}aaay`Ob zpyXru5X7S1gdx|E?h2i@xaHB_uTBQQvT~So$ka_icam$=Q5yJyjtq{G`i|M}p@bMf zTz@*Q96!4C9#dRkX*+h?<)wEqE5nAU1^$ItXs(}7;}-mwB)kFzS5W$lRz(S(o^C>R z+V*ZH@WlI~^x|505U6Rc=Ax5MI%`pu^ zRPIwZ&9+pxHX3&Z*AcTtxaL%zU2hhF#_tWqZAj*13M`csN|G&ZA?^Y{yW_M}rXoKh zyLs-=k5-{B#6?csdw6a6j-b6}kTgGL0H{8H9(Nv!JL-e-dNILTM_FirK_Gq&mMEH? z#YN=qKIl9WOft8S+HC5g`+fx>;92eQ`WOS|IirNel*~k=?V?)XOns)XGO~kMQpehB z#O})#bT8;c8uylNvyAM00yPhm`SfyTE()ksv3{$sUk9(1*7_D{H?F=yZyyj-&g}$m zkP3cC0qB)6`~TfNK9oWn4FSo%^pA8RP;d7lneo{kLRQ-mb(g3y zjI^;0btw;_29ew5(H)`*^&_*_13^6}$)>~jlA7`?a{hj<^7)_R&YNsgb%=yT;qO#1 zt;Q3s*6CZSMIV->yI#WENhTv<*X>TUbejoA`KAN6Sm)UmZWNNJ3XmPi=#CgZGPU$E zwk>{IT}3UyWcP-~!ZL}5lSZjW+O)i*<}W^o6o{Dz_8d0;_0;{Ma3B{`W{&5{Pxzv? zdY;gw!u|DtM7FWSg?35CAk?21%toEO`UDflw(JLu69~)f5VI8Rg4s!4T!!~mmZGO^ z!YMB??^(ROxTav@{c!)U@FX$}tagu2NQ=LAvcCoy{4p-VPpgw0HmvnOamE~rjiCa= zF2f)A{2vMSI2aIWXNMJ~{&Ru9Kk87ni8Qsgm3#vTy#T3$hyVLCyyO!=y}S=3oW3iZ z5T$Ml1s(Na!T-5YZZrS)9ofJmBU^#|xT0tYI*eF?hmgOz_0z_x!Cw#ipF62T@Hg#_ z{0uq+_mAUo_-82o^J)JhxZE&u%zi`mpUv^_WrYI;55XPy|9v@|F(5UsuqJZA_}{Ab ztuPRr;kV9R`0slZUIWKM;a=8B!v9_W!^4 zu7h!sUurJ?@5|5xgDHebq5t!ge+8cM;74CGA!ml6)$pGWiIl(*3}aCEuUiquea!@Z z)I71_*S&we0{;9N9yH-F66XK922F^0V(X~WZvk-Y!k%RHpqKelArwN)%cT`|f=$$x zT^Q)=XZVa;zT>a^q|%|+M*uD$EKLT+hvC5)O2Z*fY)hbdqV;+){?BN7EO1v_qV zb$syX!)?>P;{SJcgmDGH018|_v;Xe_QO6IlJxT-X)LL-d%Kzo>CH3X$_@fU{RP;x> z9>sxSNUr%i;NSJ7Y)+LrG-jd5LwA%&@u_DT?vN}9 zk86Rnd_u8BVqv8MID{jvxc_^aaM9s*?DHOAC@EiR#`W)#~ zU{+ICTu;pJz&*ljLPg>6`3KFL5kgs6?|#G$DXtehBW?cu;Cm<^d1?Y`hCva;%0HLE z@ywSfx2RDoOyR3scb=J^sUN9A1~Vf}HcGQzrCFYIM=yC2~oFv-y zT7+<+Rhmk)pdkDLT69LJIYR5KF)smIgh;m?3HWbNRjF@L4d&AD@9kHr*r=p#1Gj;b z75c}V-oTZC?-gpm1ruwvTVx*bQ>Tfvxw?|B7OeDyZv(k33yLR`Ll}_R&v@a`f2&m{ z#vbRRC`p2u3hPpmuOg-U#qD%Wf!ozC8%>>7T9liec0M+EM5hu&A60MZnGQdolYIgm{cWq2U?SfwQTeJygw{qOz4MvhIGH2@<7V8kU?YPn<-lIRt+tb$8`(mg9c|bpN!0xcuSLgE56SASfk)&x7 z(q(~v-om)nN@W|Blx-lCAu{X_{2>fUq>(2q%u`j0pPL4|^yUgY=0E%DG!A1M)F<%vryI%+Wc4HNU)Um+s;D*(&K;_HkRf#0+VAJ^4B z)`NnPdz{6x?C_DBn=<^?8}do^_&w&yx|Emcz@$<|9La>|I$d&`a3PtOb}U-L!H3iZcQ9=2^4MBRbb07g*;FhzWVl^kRyBd`L67hV%J^4_MKK5Zb#==OmgvY_T&K`P zYko@BV9KtdoyuKH^5$Zi_v+~4va}tU19NKraLTh=H0@2shpp~a5!E{-Ne3gG3wzQ9 zPsjJ1lTq`&ug1-I0+NFQeMl|LCu|TizUcmJGHG&1P@O-nes-R7ox2@*MEeJ^K||F9gZ^_myT^-L7grUghXpAL(8kf^287oI)tA_m7pv0Id$W z#atAP=VVan+G|t2n^4bJS*?N>m1S=U8NL+Wd5BCI#64h>)84MxMyTM!W;~8G7mh=J z9ooeTWQ^~rS@}uaEh6JB2uqZalA{NuBgxpDTjR^C=a2CB8jgbwWLA&~!tbpaBhf4t z_VdDlSV(Ci_WZmmVa9zxt@YjaKLppG;3-Z4mog!3VczqLu_<L!pA8H~x)!7MT;d^=28xZa1MOtRu1hC+$s zNFm@o6tfJJb&{yoI5W)HdTaP&AjhFt$?zts9!9pJo*;>WHo6!>V#;ekqvZSP$7O~> zU;ZC?VR@rktzL?>YTHVjmK;M20qY@a^QxYIL0kbJ1XCwP z#ln3Mn^pnKre9ix9wv9%#OHyrj%XmU0C; zE)nUXX4pkw33Z=vI&Go^Po)ufhF}{QA5O3eV3P#7Y}g=Wm7|Gng^a#g&;D9JKwjN! z0P@Mm_8+2s{6^K!XFvob&_EeNHObDjn3!%2JY0fGI4!iVLT^PwJ7KCk>)c^RszURx z9-!}%j|!pD)ArW4u<3doOlfA5O+~xR&@ME@JKyhf7JKjDyl5{m4!-J!3FVLBQ=Weg4G_Ojrlei(s!p&^KLbWl$s9n~|FfYs z@kBnks2`vpu=lxi`osGLz{$39yXajHMR?_7aQ?nq^x-<0!?bhgHRRbCJ2{Xr@(J?Y zQF?1mK`wb^%G?U^vY`9DX#3_?fKP>=^$X0^3D3Af1%mKRo^vQVmX9>!k(!I88j$T}__ zJqtGSXB`DC+fKhwHA7m6%k)(7PPV_@W%S~>Sj3a7dg}{rjVRM-*>r)BnUEdWbzYqe>TvM>^9m*bz56s2p+>;Y)t{XF|I|*-QUMG|8Cim z0Q7c$qelj6z;U?zAnpxYzmV{{4-?I@s`}5jXhHx*aF9OtWVwEUDgU2{=E;GlBORRq@(z665ksmgNyz)FVKW2gNT`c(PmJsDGr(Y+1-ZfBIl03LZs zc-j(3KWwa{38BLo``vtgcEUaVXhw&{!M+G$Y9l+&H4r#UI1k=@F=0>3N&N?B2tOpF zq2iqZ^-aiFzdKc3gM^HH(ze{A#1a!vs+B+8O;MvV=g2fcFD7enjoJ^@I#~wneZgO^ zlI?R_rw0kHKiD~|7eN%8_WFdC8CqQD*Ms$X0N}Kj`uDj3O0`7z?WM1T_J#aAs(=2t zwFhDmwzFi^{y}?xjRW|8R+>Jw1<8Z|L6{H}PwxKA`#&7TiV6t$-_Ls4{Lf{!A#f~L zruRQUUxymNkkN~o7yelWeFJ|IEf;k6`njjAm>}8MqAjf>(LUaKdof z4t^g#F$`Hy2|+mqRF_!6P3xRb=aaoVVDkCEA+Z@AI5_;M9&m)kjT=6%_@KYM=g@ZW z50Vx(f`(oZg8E<~o0yo{Mr5Z*bISyh9|C_oOGqTD7VMAdkR8*)fpVGHG7xZMhM=tp zBs8`Xw=#QOdA7DskPm`Rx|k^3jE=vNW4(%vSqU1zDk0hR>g%Y{T+nL9^ffzQ908fa zl{)8`BVUVnQ5PJP3I#Y*?1-e45~Rn2bi@m}qs3Ip)$CK@f1Y2-WDU~Yq&&stZT{JsW67q1jm(U+5p;hkG==|J8hg0a5Tn%AM?swWI%x6Cg0+0E?6K)T=cn z99AX1GazX_>9-Ky2Wma<+bJYlRTcgVoTMP!$IyJu33ZpOHNpX#ZYt;wtluyI?OK@4 zkNzh^`;gm4Q7DE*)SC{6JlHbUNIT$!j(Q4CzM-22SHRT1m(P1 zaqt(bs>v2NL?7q9a44xtC83nh-aM)+mludR0=ul4hck#wEivX!`NmLk?0D?#AG`#y zyV;Ro6m-JI2uLr6K+qF=XXe;sGVtVQDj6x~pk{>a_yDwv%Hl$TT!bz*3-%GIW&k6qRlxM<$J2JC{OM*#1QKLO{2PG3VQR@x z$(^CPyPmWmMCU>KgYw_sRZN}loLZHKFH(3_JQ)61%JDeO-bjP`or>p(nor7&B5zf} z6CO6+(w@?kTY{WvwGl}wSAFzKdIZ7+b5$}&nOpXl{97`eNRcm_#;j)EjGYFK?=)KN z$aeX;*~d8z{>lSfR+fE=sNF!bSI%RbNoW34)_3-Yk$y+1E6V&7^Um#=e%4HY83-orPW4o?W>5NglaZ z@OPlZ*t`_Rd}`AX8&G)sx%|f2gngobjSE;OjNi9>zoVRxAWjN{4VX9^G0{ZD-9TW4nYmvr zu|EnJB-@$0uwuz6kL$^=Ky~;4pyS>q$x+cXTuc&^IRh7HXaKK9E(qD4&T)l5bgOQ| zyV)eP9c@4=qy4*=+Mn5j-UdZO!KJ17@?3hgyWAaW@oIqhxq z8o2g}L#fCM!ca^{tX2kkPoUCxtlS=GGtl+YU1_E!pQUR}#W-Y`mr-wwXn>JPBBx1c zZ4LDj@_>-dktUJ6!e;A*Tx!5kU7QdAOcN&piq4T>a3vv)xsH$Ib}@|rSJWOI1f3rk zI;tf=R+A2Cztdl#9dMAaIbgWxkaYkGa2srI6FfPD!0z>?7U053*LntVs9mM|1)JgA zX}s6E8IU?SXV7bs49Wco`iS@hQ!_VYdwAC)s7_&*txvv=OSnH8&Aq`0^$)xTNoUEO zrGeP{0qOW;vZ8JsE}K7j-ptf;+5y(Y%2(T_SpCIufs2C7~RO+al= zsCyWsmPaaUF;_1>qklm&)UR&^hx{tGx1Q^x=P6T7wH|F~!D*D{c=_~sDANu&N>(_) z*dWMh%nV49ns-OE`+B5;sf7o${lW8LJq~b~qnIAuqumQ8C2IjhL~hgm*B6r@CEORW zEj@(N!`Y(28RIbd8N4V$F+`A?>=H~e%P=csh97?63C?KT{Ob{XrC&eYgZz(Cf~7zzm2(3m`VS0v1=WLs5*JXaNR~=_>;K@4CGy zVMp)Rs=lp*e;k;EB;lFXfv6qOUh{JEel^Wno~*AMj!7kp*Y2=}&^0XA>fUuLG6tis z0?}_t7t#qAT@-5=c0zqtkwNTEbQGdiM2y$w{T7xyD@rr&qeI2+1*|^`LQ{O+dpNke zFS0q0vMuXoJ1HdZLF_8vULeE}TwxE1yKN0zaR)$}?@Jzdw;kv%$+e0m#xwiPhKRN^ zmMIun&DwA*_>gwKGutDMCLdRE8 zhn%;jM*uJ+%@k$-1{%Yxd&d=nm3(>x`e#zO+{GBdfkD>Ls$g+^> z44oKa?3>Gq=MAX67uM7DPulzA+GqE3Tv*IPo$CZ2i_|y$G#SF9NE0g!OLj8hoh!Ye zo;oLDdC{(pfdv<2PEK0-2+>dyo;JYoV;W>~thPazE;rKh;NEkB_m%jAgeAumpWY0J zJ61{ctpq?tFiKHxUg0eAzv^M|Qj$RqZ1vp`sw0qo(TWBYUIIcPT^$jM7!8H(l^a=$%nu>iLY#<+@9?w(kO`oW|U7}ZF{p6 zuz@~#bl+g*Rv+mvd5;}@Mj(1g=!`!2Fr#bGY@k}31eRnc!h_geIL4jMk0fEc|G*bc zQ#n@_`(=e9P5);z0}$^(&|>i{s+o2`rp?qu-FA^qfjwN%=_C5~7}auwzWNBtnPRq& zdm_KNy)RS8S^8iKnalk9hsFS;7AvaH7(5s)TL;96(=%ajc>A9gCI+nAI|LwMOlPRJ z)GMZk)#ROYtB^r4y%o%%GuPO>o_1F4OU_|2Y+^-2H;=~IUy)+13X08ztasrLu7@s} z;Tc>gno~m&H`ZvFJ`s=_eBRkncXh#;DBajw(w=MWlvzxpR z#pUqlN@)yO`@v5*xY2;Fx zF5?(eBK**ueM1yy>w# zayV~m-`45k`&;chq-D|b2Fssdq!;CE=VCA{6#CJSY@YJ^?R{Qw)?^hSJV+eGa~OCF zi-PrS#n;D6R$^L}!nRikoX2De5SwYUAUqxO(|J_3MlI`!U|H^sLiXTaNjl*7Tj2p0 z_-9KgP-js_>33ug9&_S0UTFOxRV=S(ZtL8uoPYhh&(RO&4OZ<5;$FwCJ$ng8#{aY_g5NlzM2PI&G}X_4Cqa`YK*QwZ`cE=D1_ct5R3{P|5CB>XUV z7QED>jq46Ve0=#$Tk-A>2IY48Jp)Q1h3xAcH(U>GCLN-G6;?m`>f5}NU$B?-Drq5A zjWxy51nzZ=>Hj)2`RyY4ELOjH=@iQUn{vpOiQ>#MD7Vi)Fb8~|a0<+?^n zw)ppdv;dAjJ@K>=@Yt=0J-@O0ae&_&M88z1JB3HVly85i&eP!+N{!-gLkZ}j8%we@ zA#g0?6z^n7Zz7EQo`S#-er}2=ZWtYo;J(g~-Q^@9s_SvW8uOt8?-<+~x4PyMowq)! z`@v@G<-WcG9`?AKM^#F2V<<%IFtwY6unw+4!EOn6`Y-9$g|&JZEqX9l@>QibJaJzc zip7&zeQyW5-ZlRQ;9yN09qv^cW%v)9zJW-kFp1Zp6pa(qzwgQ@;-Zt{ljp)nWbXC1 zzNM~Nkdgsj_PI_Vhll;f5Qn={vcPyhW+QZxI0EJV2(X(lO=c?azS>?_Zj1LU6iGof^B>AQj8}e+Kb~ziQNDS z8K^XW{W#GHzyz#)$dryIdNS8NrTTaR%7MGdICtPHY~mQ-z>H2oX`ulK3)F6XaZ@~w z#MS=RJbO`yC-4)hgZ{hlY0Kg{v{*9DM6N`>KUCK?e8(=#YA|Sd$Bi~DIRR(m^M@Oi zq>AQ=c$QxrO6oa+=FhXMm`p8QsA1`QhqMlkbz~lapxBGw+ZLZ;hn1J9Wyh8`nl!)7 z{wrZCo(J&4ZmNO|Q!nx08n8eq=00&)YrMN88fHPWlG;5UTQj#5y#JuKmumpTAzvX& zbnKmrJyYL7#URPMh?`!)#Oyh{PGDtp1su)Nz~bq{K~-O)PH(G_T<{El?8a_aAA6k< zX}~=CHFnG%?+0HX$r800JhMOBgDMZ2;m1HDwejeOhT>PK^|iw_mR7wZyJbLT_cS-#?2>>!$yB&uF=Ubuoq*mSf+*bv&dg^W;jAV6b2}y;0fWkVn7gy4TKQ<^-3) zIrcXpY8Rxqj)YkxlVIpo8y}(QM7r%#_vXi#@viJ|gD~>*rsKZZQ^mvcnp;BW()+Z` zZ^G(ral-Ad=Yoi1W(i6G88z;P2}q7jRsOMdgvt=@auuiJTf>*qAd6`1U~0FL7HtR( zj^6D&Z<_RMt9 zipmhQc9YE3&Ohdp06GK@aW>K4a}#|%Q(F;@uDEb{z*GnoH=;dhliF{^eKECe%9i(k zhy)~#lL9c!i(#(0ZttCG zKVCe<<-l3n%M8bPlBb<*bx)R7XKrFE%j}j>HXZH+R_ftZgv3AI65UpL3rtklWp zas^|n{bgseCmAl(#otQgvMb7KKKl@ktSsj}B|m~PF4!esK>G7OZ~TUX(>aV)4?8DO zRYX0yc@Ud?3^j41XA^QSyU}IQ;cd04%wIZO)}pZHTju>D2~gs8UCc`Maj~9v%6sMz z0#>dw9yysf?zs(L={r)!)Iz!Yo%UQGZA4EnAALaSZf^foye`RQ zNA*uIb{OqFkPQ}il9w!L)xTIIV8-=JZHfikSc7Jta=>v~O z4tW{eV7+%-W!}j+^&Qt2TRZo-`Gg^PV z*G8)ETu*}2A8;u=xV^TeN@<0SSa0P7#wz0haJ{q4KnNw_IGnN&U6GOLBdeOy$83VIlGAMreyInx^4~p zt^i9R^$Ck|G|Tk0x76}(GBB=wQiw|E!xLUEn}d4zX(KdVX{+)_zYxjByd}3T_<=*g zD541X9*k$3Qm*GOpWGjO%NqOS%bKgUGs6iW4SaO-OGBaV%~lP5Ma(n1e!86Tfm@do z0t$Lyfvi>(Wde=x0ZQ7F{yg8MugFtj-SBh5(YNz~Y>CYhCcRq(JYCF^QI&L^-sDTg zNVNaybD{b&Im5!$N5gNdjLyR37(=7En-8rQnEl=EqS})_Gm~eL@%%~@bmSBJ1I+qk zVLN85Wj+Y?I9%#=sHWSZv1#){0vsPk6_c!>bm6k6sSM0S^D3*S=vJ>&n z8x+7xd?1x?U%n}uxRO2AO5qcirTw-yS^e9Kyfo^?!$DYa-h?P=7B5`q=B%^wxDvrA zYnI+8ybZgSNBQLnWjCc-asoc|i}s~e@W-W5-YKg^96mBuoGnbYEfd_bE8?@l$v|y~ z=vYxKA;QU){EVUMjm_W>!E#MpO+8kHb$}%e?F# z?eiK(S%=$WMOK5#C76dNnRH@~D`fw}2wuR2U0lOW^RPFDE7#6GaoMeEzc8A-4CB|Y z$0_PGuo?V-3q$%f71$5<$mt8fu#I^==>5J(fXaFajh<(j4h}FCH#a`(+v<*uX{?SV z7P^k>xNzdKZj|7#WOyNP^1OecilDG@U5D||+&*3$^MMdzt8Ne-y2F03x+%1PSnP_@ zz%$8Th8|))M#THH-5j0^Svyj@j^vE3!cVe}W*Yrs1}m-$d8+6M*uwMaZ(DhQrN@qY zP$ac$bP_2vM2~QDM4>VoR;KcVr=!SG^W6g%PslC5mH*QDzz8C$>F)=ts5h#u_Ic^eE_KR~}0ggUu@u2Lh zIRc9Q&*F4G6p`)Wv^&#FzKh#7qV8sw#F1lUNoYLnrM$F?t+=9J^JxxinBfa=rS#n= zRSnwgtr4sVnw9<%buMsDZ`V6;>Gv`(OenAxfqx#9AhcAPc$q%H>1#fMgXh;^b591u z!d$qF!{onnh?a?_ZlY;&j9+JXt#=haIM-1h6Gye3Y9B{5!6ry7ip0tJk_lsy(|$ zchr+S^kQl^b!%dPj5)F&r*(>FYv#%H*5Rzf-7;irxxCz)IjIYp7b@qrIL84_y{x3q zELCQj-XD`C5@!bn7;Mr8xDKgW2(o5@kV) z?Pn{7HPzC8MfZF$!Dk|E>$T6~v^Fe0Y2z7~j`eM@(H~YR{>(v<7C)~?0lL0m29Jb* zz|n~7r<1xC)#L<*gi9oEimLK4dN|DZK*qN<9Sn9q-Lj8sHM*%KG}Vd7_E{mQo(D6i z*_XIMpLNZ@mtf2`2f16XI~Z$JEiuG>X>n8i0iYy^{sGWL`8WL%weXr@C;*wJpC~Gi zxU1ux4GSf{2F>c3Y+8Q!K>Q%l4{dkZ6vTeaq;kE$ZA^@^|Fog^f7+_kBrR{ZG97H_ zV}GzAbD06k>_^G}eX^_mmvwh2nP&2NtjJHjt9X;Epi91vJNDmL8i#dLn28QAo#!G) zuvE?FzxIZbm%A_6Ux0ya6`&VQjBQOt@=+4Z?_82h3P(4N(qhD~dUKRbru5OJ=Oqdu z4KW1wpN{!I;t$xJGGFyqv?k}rM=I;Jz5WLW>|&ybH>p=@fCG7m^Y6ozP?kn@gA*j( zU56q0bE-k!e5e-v;b7!6pH$rlEMJN+NPvH?uRAnZZAnnzV)i|0jLyeW^&;|-&8z52 zqqF|q?Wr11-owJ_GM9bpGrzZnESH`;xIS@aZLl@t+$S~XL_aMdSfNj03uWc~%Wuc7 zP4Jw@aGp$EQ2L+Ha8Cx*d_Ofwq${vU%a(njQigN+fn#r+X9T@rJ5e<`suUJ+`kL7V zezs=ODiyGQCn`d6V-%&OgsnT9+6#BBEfHVN zSH$W|Z?aJh8)u>|NyeRBji3$S0+9Cfzo#!=sRrq$`AGDjahPw-)3E0tRkyO@=Ir%| zjm#Tm{5=NlYN`)?wyuHqMnhdP;gY53Q&sU}GZ8+LpK8cQH^?b)c7IM#bELDGA7=+m z4iZhP*3P|yqZU*okVK=o^L5#MHzu~Li!Mau{EMyU>2S<8fVQpcPFfm8zli^%r~mCp zs{-lcb6AKEq2_ybeijr<(#_49SB zK=1CtSNUD_HlE6r6p>h^tj)%=&t3qP_N$nc;8vv-|YO(W#pVFOmm6!2NU}1!%-`-yngv)30*}UC}1!Q?T;a)n)QC0)#Zdn=$JAZ>EO{~wE`V^|u z-XzVw=r=>6M0FBmVOP}MViOC?CNv7q}Jkrx~tnbn^~?lo=I zRrvEI)rhfCHJ&#Bvb9KX1)SFHP3@sth$~SvAAHN9uY=R!)WCUHiFX5Q=Z%K@7M82Z zj?ZSz%JcqXg{yCWs}$l9mu3$7L$G)tUTK^SVxG(wTkDO9vuMiMVsB=f8|*#1I+6Na z(K8^03&JiWDGQFj>;!YZ$9d-Q?B`sw3TH}g@4-nnLDeJ3w@$S~H#(e11q2y^bg z)s6Z7r-Ge8R#}N5#|-aNb6Xt7@?Q>nolh6If?ss?wm$}~MVy*f;gH|4;61b=agkGm z5aWCge?!?hl_|?-S0WtQs#O_@_5(2bT45s2>**^#_;wLRFSK}Mz3vt=cba3EjoJWJ z`4N#*q6)J7)-QkRBLMKF*>s(d0>6*kzM`3zyuh37ed(4U-##dHi5Kzl==7|aWMSK5 z1U_xM<20SRT&(H zzRu;Xwr3VtJu+v2+_L4l z#z6(8#8Z^Wd`ZvjUnN2qJoc5-DKim*h_cpuUf-_*2Lm&w&_2L8eK9RY1dabujVM8G|S)$y9!4gpTc)`16oF^>Rt;x)c4($y*6 zz6l@??qCD`v+uWE6ivL&vvy*drH;aOJ%Oh5CA7>(+>^aS>)_S8*WKZ7J* zf%(cKK|7MZln_3QFcO>+gl+6?uP8&Ft~+TO8Ij$T+09O}Ar}LkzAeI=;}1Vi$AEwS zB@RFv3=@#_GEkQ%0zy@EgtFPQGe?|?(t5+dfN)euy8hXZErLgTp5@V9f`IR^rz)Ed zXG}RPQ~-8GQ_g3~hdBiAd5~Su((A7x`5`GrDzf%R1h}*vgd6R6rjW;rqt0Ntgl|OX zfh5fCzBtr4_3muK;DQ$5dc@>E5!3V}jxHD;P8C`;lzd4!eYehGFq7bt2riBuY{k9o z_aI4iL4UKAN7#8DpT*_Qdds(lKc3|aO~ftULI;`dR1&soGX*_5VAJZSj%c4)H|9LN zdJx_b$lfe;E&`$YE=lz^H543uCohFl2QfFZ1M!I2P7)&&uM``2f&oFf79(8oz?&x+=a!8!!Mn2WUrhzQMb=E zS<@4g>S(7$KIe(2>S@&>s$Fz5hc1HtfKEkVzK_aii?dPR>we2{&OD~{qqXN0=f}CD ze1)@Rp6qJyZZ$Et>&~(Ei!q<(;}Obldv>`r5*}-W{ZsH-zRCF0QEG9rI?>_$u6%ZmN543r9hgpMpJ;JF+)eNyVn#0;XVqQ?M0Mq<}|1l_N2^?KIm=&!#|bawXpI@!VSV>vpm}5wcz?G|p4o zkMYYoI)Zr-%&IsnXG8(Q-`qT1ccp$_2t z24tQfqqd6q2cMc)IzZEwIgyAGoGOxC-_E%@B%S_zHaeek9tj=LiHndLC1^0Y7wz|* zwAFmQEk8wO$Oo@$+24G*vm9}}r3OY<+ULX>HCP|3isj;b^XSPWu2HXY3To{8e6L$e zojsm;5^bAhU84&=a1=fR>TYnIf1-Rf>grcl7}_~sW$kQm2XC1;)X;0%I+5Qt{)yY| zZ|nSc!b2{{ZM#Y*X;nGG3ukt`V+LdW{QTPuPp(5Dr-q1lbfQiAZ>IzGh?hhE2IA6% zXKZ*5qnK_6mOos82!o4Lx!D(Usq`z44^R5vm}sc(=RZ`&l9ETX1odzK)Y^5EvLah+ z-gS5=?D1B;Q}6kQaR~({sxj#Eozu2XUH@7ZyLmZjnu)U6alKpcQ8xY7;85bdJ}O?> zwdZMDM4izBc6#;~r-y7MXaBY|A!+inZQuR3=gw<3cLOwsl{Kro4LVjVUwM)jvK5lV z7fN%!#18Xe&k3|lHL>xNI{32Z#pZKV{~!I+I~*=fpvW_ijwTH}OjnoyX0vw1ea#8R z^%Jsh<`%DQKFyG`lo6zJ+yG5q`;N{Fq<5koy`ZyQgYx5|7R=7PSBtRpJpG)zbyw)> z#Rr^crMelBu2*Uw%PN)Ga}pK~rM-RGESp8t>KDVx(;I;`J%Id>2XYy$@rJC2cilB#fgT6;vUe97Asjd`ck zZ-T<}?eN%^=(tk(hHkEFfHUQ|DQ6&oj~xJfL)=>5$oO`!3``JP*KPs!^CZ!84#T9L#0C?tMD_i{sqU zX93ll(!QP2o{N?hSpknu*r#&^Y{m#ui6ueoQ+V2k-|)IUetos^p{*zGdj#S$6N5W_>NyH}OHeXR|)^eoy>qA^iG?R(C;((YmZa z=1A0@5F0sAtMOR^F{QFfMBusvK9I{Q;zq=X(`a1 zGcD963z$xOc!rn-QVF6o(*X%)J2u4=!M^4k#2yh%xEaC4d4~HTkHxkY{8I0ttbK0# zes?+Mik-t-_O50&rclzEw0^T0^^|fbGH;bQ^U$`4Q&0z@lOCyM1b&XIUzI>(-K-tT7!Y)s4z!zgNDzl!) z`K+c+P|oZj!d@|iJ(S10bec^3938qLv4?aC9H=yd&=$+Pw> zuYD$dZ+%^8!Szw`<2V-{GjoemQEISH>E^`E{=-V~$w8xI?Re;;*xV z+(15@t&t8n1iVj+dZ~|&+MHfz-E`5@_hA&Iwg)%lxd!~f9VM3cp@XM;ljotQ->tDs z$vB;5Ejfv*@RVW%yP7G2q11b}{R|shP4kOt9Qq7FWCKgLD6ePgwjJRj-3)tvKK&xt zblSiT`qIzTa`!H-_^sv0Lqf+cRlErcnOhPGYuwTA zm5vdI59lgY?k_;}LqcR--B_xO(riy$ctdngjLLTNaRcTmU?ZOsYGTFS;B=BIu0Yt9Zy6jRycA$oD5V7od-Hy7_~Ilyfc@|V>Kl(5I7A?c z|8ue#fI-<>x@Wv@+`c5<+Vu|T_FG#n@2q{{hiM>2=?PvTg{(M>(G`GMiq6pbd#TMl zYd#9^CeN{aE{&{0{A>II%UDA{r4CZ%Orn}d=0(j{Nw(4?Sm(Q2JC|&~cL+Z76=EZ^ zd&+~xJ0zBniVrjR@h45>Y8JcoH%K0CA2ZMqB?|Ga@^HklLp9+qhH!|-oU zhvfwZoHh->D`3|>3Mkk_UQ2c<;55Gw9oT*ACjda7p26Io=6N_<4I}`m0CvTl&ylwj z**=S&a6TL3er2OgEh4AA+HmPis-TZ3JWb3g)7+ga~DEBQRatU_|y>3y8w zlm=nq>eL3-kO&R1(|L=L9@v_$xqve-9Gh{lD9h)B_wvc=k+BCXBsduv481 z@J%|Iy15YQ{s(^Ug0Dc3fZqmCnEMOVCx`xD8`9C6fUS`;GNX83jP35d`%7dX9O~W9 z!~!D2w`2E_xpUY5dm@(w1Ya~&ZfN_RzfKT56U_NSj0{->7<4tZozXApS$|(>)^qFN z0bDHv|3HuKc&QirctyN@Xl zt|n;z`ZT^^ol+e3KVu)OA^P@|?|iqbvBr99rfA~|2OSFt2Ely9z_TUM>9t>{btYu8w$ER23Do zh|W3dS|HJaFMRG_i6)9V;Ih;Bh}#8>n6}+Br9R$!MroSZs4`gBfDnHkZQJPq{7(#N z?6(a4cztRwrv> zbQ$1s{!%z+opj{2iY(m$F}DE`a6Gxun8?3-q*?v@!O|nO^{nn~ql|ET6oCeQ*YLB+ zzbr_)9g4<^YOK#+B*HdCAHN4EiTnolmz`Tqz_+4&oju;I#+z+Rru*54DLk*Hh->k` z-Yw3$eE8Zp9}2TK{J^($OS)vg)<#O#&f(DEuoHj5D-K=zJ35CcJv-@s$T*O|AL@NA znVf4J4HtU;`_AC+^{+~8;qCiqHCagC91oQyXY=#=7?HIIO$Z9av)`5`Q|EkJxXxS@ zaw5DPKd*)@=z-Mnf3nZn()HhMhoBx^*|qIh;=LK%*}ld29PSY=kw*zvD6uIVLw(vA z4Z{`nxf}#5sJqFAJNc%@u8Ae%2-anA2PW`g(ky$c>J!i`X%)bs%=<{&_~FWo`kOU0?Q!G z3T_g$%~FQ-&GIch<6_Y!zJT#2?Nqvjy6MT|b!@siui-jPAtCYS+y@8`-Zqx*j^EKV z4QzZniLk0DWtcu~Gi$=et86rCoGg4Za5qC^fI|A!L>|OtL#JL(<$b5p@G-D+!Yip4t9}PT+yV?V>Kn z_WF1{76Md-ewwV`iWE~F%KEKd$O!1faYb_JMC=(tCD|e}Z>}hCBwAEVj`HTtAhgZ3 zjmcbSZ9Vc^Q9>Dq7W?Hn^2L+~HHgP^`fx_7nPholzZ3I?%Rcitwgx(`z0&<% zUeF+qp<8MpAZI0hd8uGyWtyKS#nA*& z;wFj>W_MO=%{N%R4mB3-!a_MH{89JaDn?tjlcC=tx>e%4#8|IonDi|q}S;_RV<2c@IgH; zoFM9HV(Z>5SL{|O1b9#~Kk)76^ACm9#=+@K=>&M!TA8j*AURD>b8fiwWqpxJF=;9X z*y-}YEU!;k%Mp=O!M__1n3;vm`3%TufK604TbEDG3Hg}L(mH#9Vk8@Yczli(YWlua z-{@A(W?^fmQiY-e30yY=3-Z(iv+8qCx}%^*(`@8NfG_EOv#8a%KF6ky;gw4KqhSCK z#H$TuS^Xzj@NSQuh|S;xU<>a#3eCAaaeuZL&B>H0FHN^hY(9}2!QYfRw}ifK`X(Kv zNtcYG=zYSXRMN$6jTfUsE%8`Wev<#7IuVt9F=pg0w|bpTx%&@hf_FT&bl(L`vd^`PhrDYi9a%{A=HL5AAm{r8nXryW9N`f(o~NQ zPNOy1E|CZm=h)9c{Fj{yy@TZngjXN1JpH_n<(3EVh$wZPdyNU(%j-XlXy+^?iM&@b5PkehZ;CLo@ZSj0!vtynU8cFq z1=LW~@;pL>7AW{FZk_te&OuQ?W|)083x8bTl>db4VlveKiaLGqF{o@S&d`P~fHB*s zHL&eGzP~6(w9Krpd+AR=X0CeG)Z}5SiOg3dpXE5lO;H@CDuG(Cz9lHOe5E3MK#yV9 zNI_7fQ#@1yu);gk*&a2Fsz;BnhE7|7FdYi%n`Sj}*1mNX8`*M_faoZdzj-oFnmFlP zpI+-{=V5C&B^8;J4EE}H&2^P6`Ws7aPdUmKZ`kN7LvT^uaZQ{FUIVT|_ZY-07UgJY zM2KnVXOhM#n#sq5mrGY)0kUeXZkuzk+x6vP#BgD}F#K!A!Sn}46)@oHRk%k%ztgbe zj}3+S!{O?F=9$&L8vg#`a=sOf3rVOc$xvqmq;H6Ig|ytx03$cfkJ=%7vtY0J?o8!U zM$txmbD&J~Kz3Nx$%~g|PF>T>mxD#h&fK>Q4xC@UWA76CzL{6DS#B6Feptmvr!9gd zx2{Sh955ayB0AcM%_HU>1|Bi1=MscNDT>sp@~u-OrcyM2XB@MtydTP>xuT90h+x)| zszfXF7+|rB6j8CA;wn-{4I*%ump_z23;b+uOt}DS1CYx_7og++$gkb025=2_Tm5h; zOd$UwD}VpRl|VrOflY&6z?Yaf4@6#h)&QT?Ru8!-79iZ znZT)FUl^!__G>>>mutp>ppOuy)c^vm!s1?e z0cPMID*)$<*RTz~Tkb*`D z88qh97vDIBdm${;3hd)FDAwXo8;4DcE`Nkq_9m2MRTk zG}O}s^^Vjp`07zxh7rN_oy39~o&1mUV#$`P6=7U*6`3+-Y|6mm;pEmN;as2PSmJhm znS%Q5atMAfsOKH87C8yfgzCkChw!)Nz7+?``!nC#^Y!r_%OCSJLyOhNzx7U80*&Py z{b181r5p~t9(qvqVdRH0m?+pjG^~-%3?`Ix&O_ z0cX-xFwu<(5zYA@Y=f5*ROpNmR(R51Z#|0)r(utnQ4_*=;z7Cszp>4ao(M~-N1kuV z)>!S2>WhM2HuEC+9SB8Vd#x92w%IYj72<-oBMWxiiy<-YyX9?)nqf>-nKfW?yNvD! zVqwKvWySKy0|i}luKL%&#rCZ?j#?K{nb^m$>A3Cw3#J`G9;&5?LM=aqk<#7PP~;_o zxm_-1S^BlaViwB$Qve{*)SqRspdq=Lf^S%jr%%8qlhuycs+v3hmIb2p02meR{V%-e z(0djo-xGt_EMPTYJ8u-8HxuNXPtp2~>lF(t-~&|wxh+>&v|Bcds-2_qU+zuWxwDe+ zbFhU(mq|d;t0uDV1uaK!d=~=-(amfEpu|e~#;q;q21mEFwNa@*Q5r4xoQT4eE{Jj(EUVn7Qtfl(l`N^lnnZGN{~nCm*I%13q>(_j*Z zEEaV$>$jyVv{t7G;8Jw_=iMqOc3mRWQq^aFQ5iVhR1T4htGGY5*8@3h%e7+gL_|ueuQ_Bkhg|y8(fvN|P`4@B{@Gv{&&TcXs-xdh z-^ED+xEqr&a$025?K^kKe$ofyKw{jMHly9S^ZmDe zz+$Q0I4X~6)($TXHMzU1ixS1{eV6PYS(x8f+%`FlqZYzudv;F4(~E~+!?5MO!d4U~ z(fv`_?vsfV*{qX~9*Z&s)ClW{Kdj)N?*QDmgE`g}ey|X(@*o%I?As>#K%SEv4gi5y zS&6Y5Q&IdXtnPFTkVJhP?YjfGAa941eVmEyVa2)|vjY>)ys}vsh-KK$9B^tHD+Yz# zUCVC(rYEU30Ut;kgpH4=!~9*v^nRz>&W`0C=ufMWe@$*#P~2AQAwGNV80oP8?$aTH+`J`Ks1@znTiB zbl}oEqVP_ zPmfEw=KW`jX5Eq=smILu>#o3HcpbDi$WA zC$U>F@o{NH<)-Fx8`mdQu5FAK>h^mrC+4~Go&FMR=M`2VaQxgw?mKL^MUONBkpfvP zY6-)+IcSDf*igke$%g__0x;MPz;)Q@aYtMO+)7+O0A#Unnm`x(x%QOn^6Hg1;4#&& zv1B85GAowO8IS*()e;sGnNFL(}``(qXrN5V)2(>Ut+S ztU47p9hbtr@sllT``yu<95vr87Gc+|1E@XjVxDL7f!M&;EVi6{sVTuavS!|<#>b-R%vcWl^Hax)k^23 z3NFU*Xu#FpgYR8$Q$fthqFsNoxR3^Yo@=a}&}^2I2IHRq1d0&jd1h#=PbW*Yamfht zWRDdb;tS~Xrz?+JJnrrM-2Whg)Y{4Jzz1&yhqDs#A*60I1Q5a*oA=3gL4_5CR|9~s zS6RUg8!TQrg3jWsPZX|d?R28E03p2sH(ZnZuPxo7Hd%0ol{d5~vM_}A_YrDYJYYq7 z6fdrEf_B3S1KAUxRt~gV84V(5ncU!9;^m6QbRg?S`MWLu4cf3m|z)9+!VoL!;T(q{hJp% zp;g38L0QJa4-1*v++y2F^{L|_Z*+kS>F$w?8GH@h({&%WdQf(6A@X;m-gW;`*JVeabPj4Ob8$6$RO(8a$22|(&9(UAK-t%K#UhSwk01`-Nd^|yeA>>cFm z%%|)ZcYu8G(Z4eYg2;ewxN-kBg3`%tmvbEC4e~*-|CRKCLQ3To``QQq+|0AgOJ6oq zSn<W3aDoD49 z5GuoXa;cXj5UjX;(kCz{WV|D#x>_Z84@bD!tIoJZCf(1gzQjAA`SCGLq}gdwB#r(g zI{U_O=lqK&AX=2RI696w8Bm&M7(UL*6TN;}5^v)+sgJEHSNeH?x;3p^lsXh6@&_NX zzioFDZTZriTMMh+F%5xwh0@%h;6v(|3rgenpvJzdd+f{A&*0WiNIN1oLWPovvaPo>_XFZ3YfDrMJ#zWTdNmX>58#UxyaES+Z|-}@@8C&yAjacSs)=*)OYKNOdUpxN zQ=#x%yeCIrK_FZ024YnR_OObgO zqaAS*R~M$0s%aS%c_G0m6A|=kj$LGxb96EA`__|{ueU`>>z%_yv}5R^LvN}~G2C1E z>xls=qt&%*aK)mw^bjqf-4A)p&%$b+2h8aB^277w^`={6hc6H1nDgPld5Jt{k{%=e zDjs`oA0-*IT@|)LXBdz_70&xkjPm<4D$wNN6BS#J8;EHltJI#;kvWVxmUlv8Yl)RG zT5T6dXVV6sqhC8)gcuXSvvp-|A=nQpt|jhyb#8>;EMMX6HCvP3oV`%N6BE|A(PVH; z&vwMCUu0Bno*ENIJGhC!_Elh;KQIb;Cr2$ZWPLV@D1`P3QhyXRr7eIE)2?!| zR5@8=NA$5Gl2xYo0*hAmhPBUi|xy#j$nPP?QL<%inl2{$?Q~?l0X$_4EQA zn5V9C=wQkKc~InV6XcAn*eT@rF5~T>Q-LV;0CIlyR#|~SpN`u5XRyKm?5BX@MrHt2_iZyp&B2AnJ=v<);&s zzdp;p22zvTIDVEftEBuL@$gU%TtpfxdH?#L{n^z+aMwZm#Tq>vmGCFL{jlF>u%vfQ zdbuxrZ~$M*{Q7Va1?+6YCHxG1LVNwI@}Qr6m*N;RVohZIp51fihq*Cp?g-il-2)9qMk^vC}9~mDKgu3L0dhm>RamZ0NwxLgatW#=CIDPBPv$Ds6k9j9!HphML^X;#h2xuc<$2@EMk(ks- zS0%&yme{%>^4rVTS8L7K!Y1@9XSlndrcnR71hP8$*YlV4Wg~G<7=LunqDjP&lyd0( zZNkEH@lQ}IGe1=I7j6cjy0oMm9s=t4WH~!$XZs2he&Xahl{?m#y1R4DZCq7S8Cy+d zTwvc5+2`NYqK6|-{EB*!jLO(JMLhUzID2S%xIQs_p}oZaw%1^l#9DXCTQhX$n|&8Y ztJ*03QhqzpP?JfbEF@ZgsFacB_)ebUZZ58{hS4;!6Wg3B6v9zb+|ZH|jHxcU%mVOM z4CGJkS3y5Ig@W9N2N{>Sa;sD83Oyu--Nyz4Mz!{v@mn;@rfO5211C;($;ZIqwlxQ) zOg~v<#y`bY&(_jlanw86en)3`56Oz^b;R|joEN}7Kj~241%$HH0P%Ev9moT$EXkL+WI|H z4p?U|&|+wKi^2A#+qVEqn8L1@HsTqC${Ksnm4LKX&U3^=FVBZ;|KBVCWQ}tVTpl^}sD97Y}d-how@8rX)0UP=M`uPq&lAb<}8gB$*rlh<##VS#Tq zN&zcX$LBFsDrYBQww+_9KV9Gzu3xaIE2^;?YYN1Q7ooqqluX*gCjzjq;sM+ z!%C61i;PaHPzX1+G6%Oh@cT$R+z*lEOMGAOObQLXn}4qwvhLm}|A4bzm~}|y%uKsG zii8||jDK-Gt;k5^cH6VyqOqC>{32{$K)+RH^wfcIS?&-t;y6m;kq^Z;KV@N>$HjTd2@sMx8t*vwfI3z1~!( zNUr1G#F~|v=Q135(Nb=2HRmi;>#HP8E@;u$>@xZb!^UsK0^?9TfUQW4c5$RhmO0*+%%XtMus0DTBw3g2rD*~|uPUL!J> z`+zoT%eO6gaW;_Bz+;-&S>v*tn~t%VP=|j}6}d?YsC|kE><^v&GWvWDx#a|(*zbbHA(MF(#ydD+x{32-&| zN5bQFc7;qw9>7g1zXe;OFOr0}Hck8=3wts#!mN{CW8!Aw3p^9NJzH&E%VpG#x zdHFx1POPM!iaw&Xw&@t#(ICr6!iTMc#}mX&M~GkHxY=8|M&Pd>t5u!rx~o@ftV;%8 z^N;IRjdDmMxH5_JqR3q?$~`*d%B)4JcqpgT1VLZ08w^mpY4H>!|S{9_fd&@_+hVbj?(E6tr@v|DhY z79)vZ&L8e^dl1@NeEbt)Y6(U1H*GVvnIoVPG&$w3D#`w?Q8`8+tQy(fu2xiYyf_>y z`+>nr3ZR&#JJ{L+wkbtcZj8vEe~7N%Ayd!C{X4ir`F4u9Yoktq@+E=5toh0>d~(0} z4Ic;{IZnJUK$e&I56Es$Q#@KLb6H5EKs$UH@ns?0B1L0Ux=YD!H`agb^x-VfVjytK z-xw||Q_zd)IatbuljN5xJZtZS?UpT6hMGuK zabbgTuC-O=l*M+HOc^{Uc-#eVJz11KcdCv3B_*#KaP-*31Kt+JUuhl#MW_fNO_4Mp zgaKMoW*AgkQp^tfIox)Du{0&Yrn*|m#p+lN-bew;cf1ejQ?p3C|xw{?8Z4Q?k&jUJd02mf8H{ z1`=)BT1DG^d6>O7aT*jEz(2jI3rOsLzSxpgwlvt|lk5QYVs0kG>~4_cPuE8sdZL%B zfTHE}ZS5$TGi#A2CPT8tC9^@G&=xigmn*wE85=)19dBAonLa)V-yl!xL~72UByYq3 zcv}r0w*M-=Tt#Upe6tIo3oT~$Lov%S+?|jFqRCz1n6S#US6+b~Z?xt$6R8CdsSmcR z`eU2#at6mz^*mOhJ-(!(A~Kq{^@WyO@wFHBQdKX>t>8FWdc=LH2w&I~ zdt%4N46IV>rQ6Oc%7~s?m2gK|#EJbr<8im+{Ty!!3?$Wx%C&oZ00O9WU)xr5;F?3Z zmsyC5-EJHsX#_u&u5!Z!4X(9mBI;Ti4k<~d*C|~+J^IFMA=o;2jLsMxmQkfA*e{RBC01U-JhpY8TZR3m)IM$iOTYk^U$B-GI#P z-AZJQBOv-}`Kyns?+DsIiAE0w`{eAMZ8zs|PepU}PulIxh+y_NI@h!YLJt7Tk>~b| zrCr^}ySPJs+0zY`Z^<89to|a`DYR)a!J#8()E5YA>;mCGupg@$#5DYc4jc zM%xL&iCHpv8YG6@!ca7SDfn@w#;$#6KU8B}&hB~_C36NAX~RfMageJ_!%K=Ws=n^O zPN*-6G!GdHeMai5JHf17r4LEJ{sm;z!H-IE;z_MrZ*<=(_!qu=Iaj|=uG94_>-cXd zX!yCfsJ|t*Y)HqQeb#CKj7dzi&H)xHG8JNvD2_R0EYb%13hBOzV zbXiDW7B@KL;oEn)f{ezQQxz^MKLck4cWHWJ(Sgzze$RhBYZF*J`l73g6P&CTFa zuiuqS_2S0L4~Wn#ve&!9;pbHe0c&h#WTUDPSn1SJ63J*xi!c~%zT8zKX{xgMs=KG)qnev z&WaT5#y2M$D2}lP1CSpYnsLf3RvxuZn)@;<^Goku^Nma+QP=YSK331Tv;bxla-m_a z|Gh+YlhfmIo~c6^Oh2+|*zxWAIZ6g*;OuSUPV~YBi+BdlRG;Yc&A6BTl&310>P6e! zWx#Sc9>q^5lxUfSS`KG0Qf_oW0^7bZOUIeF&U;8XO4->^iCW|ixkA3KQ9V0y(wCUN z$6gY}%o-#5st|_g5~szeixF9l?wu#0JjHIIYTEJYM98oZcAdAS@FlQ$hCOSBe8}JL zqx|*h049|4?6#>U(!KLX@_1_?59)6_i%NtJ;zE-z>1H&*v9}73Ul#15-5Wy4nlHD+ZM9Jpc?m~D*>zMpYUydxfsDX- zaL6E|1@CVW=WbDw zzTfRov4Uz~2Oo1Ud4;(iz?7n2d95zEcONGBT-$blaMg~FCRG=p_h}X%FyjfZP)O87 z@9WE(kVzk4zkSczZ_WQ066FA&jYSzx;N#&JaO&3_pFtBzGruwF&`y24q*b;0{N%`DLa;p(BD>x+{InEaM6j7QI#ovrJ|CCla}riQ-yH390>H%t#%- z01_{fEX}UhE12WXqs-zT-FMJbxbOvA$k!2&lo7+fFBJpBH~4>6#%p3ifo19RzP*sY ztQX1#xG!@MQ(LZ@;X`dEc$cF6aO13!g7VO7zY{M>rg{KI-=F2b?yQUl4- z0QxHce?g-6lS{)=-F08mJK9I(d{a+r;)UoPLsiDB(*qa2>r-0ZjhDef^eJ-h%oq;g z6k46l;_6yg#U;B zV&WW9j^c!XTz<(i^1kfvt!G(QbCICib9!04JHY4=${s60fhREVu{nCpX^hK+%O%Oj z8y{46JkLX*p0cD&cGF64zsHS0y#Dbb`RWB=vqL=7e)SwNdTXrp7czqPB)Il|D7|PYp}7IK@w6pZ#7*&AnP^^q!=GI) z(D9>1oO(rcefK`Dhp`%ug-UTPrw$zFl&CDexkYEd5I$Be(72$CH+m|HTl+Pj%o z_0xhIdwTPgqfHTwWt@|yncJS>4Wo{fsuVHr*~3@55QD^2h)G5LT3SjyE-G4b=Oezd zg}c6=KSXxR$YwXuSRuxI#Au9^?BE#OfdY@R`ub;Cef=NGWA91Nnt}PW{W*YPqNfv@ zHzBerK}G%qW**E%$yn#76klKmfkF8EH}C7XbWJiewkU1;T;P*AmiR4yO?G&wY2ra& ziTG+7io_@do6(a5O@p8CC5wo#4 zhBR}kl4Q(fzpBVBtxt87P(r^v8AQuMiXJpf_j3mkrvB3lV^yLo=HdOXOb>IroA!X9 z?>?Gbti{gC9ke{r%Bw8mxG^wU--2cHPK@Y!!Ao8Iq(T2BLZwRRC93x$4=JV@Pfqwe z3z6?K&k(k?(yY}}1EMpwdj1bre;y6x`~QLCNhmE|B}tf33Q-9~)}fLXOQn!~Ut&zz zmoZ~W%9`w1MiiBO8)D2@vhPWQvG3bp7=u~A_w@e!e&2Jx=RU{r=Y3yuUC-;eJQkm& z+#X~h?w0vxvmqDtyNFrW$%Y(v^|=A3us;>%sYelRQP6Ox26d1-3!yvRkrIJbTaD1M zWG$6z2ihNWBR7PPxOdl-=kt-!j3hmF(hxH>DhHl3EgB{2njLR6W9jjOj;nb;I1eu?!wpF~M5)2= z58H;tx{xEXup`1di z&V~8h{37a?&Hfnq`OS-~xzQTL7#gR=4lzm*9sUf2u+1C*2?hMsN>fuK=dhMI>w(N8 zMSQdUML}0lH~N1J0qwhDmfg>HX55qqC+>+Iywu328C|23EwIb!@AWzL2OkQa*cf)9 z1Y{%l#buQwX2n3Grv=rYR`1{JWohR@=Dd;L3@!hN!vb?4TPs~{vd;(v(0&!9GydgI zp8-B^em;9j8@wnEMoyZ=0p1X$d{4lEt7vEyR^`iIgNcAY#+KD-5yV2&5S z#w`W$IRF?Mp%6K3P0jz3>Tl^-E(G$2oCU7`;QITU!()(S4%1L2zk}D^1_Yd+{B2cp zIleh%69(4GKu8tDftcB*_<%&$T&w-!En6WgIfEBwD-D)U4L}ZF;$Y#XT7_KFLU*7We4nXM)-$xgWPJtG?H zYO(VG3j5Os5bU}DG}7eQypbc}AFZX~?1d?9#IYaWf9D=P-23v?p?9}ixzEEmk(;g! zEr>sP`aAiugMg5jA*URjptzl^ZYlL>w19JxVxsgNdhgx~(X}hN;{DNxoD=?vv=H#x z9N`*qCuZ{79ng!5en2Vh)ov&#jCF%h=XUZziksg#GnZ1--ni@T9O=7t7r7$dCM(yE zyR1Qu11XLI>6%!6VXV)JxWT`16#${e_?AQe!Obsx5S)A+?%LFOKuqyK;zh9w0yokG zo#T14N(U{~{fE26lVpR#^JVSJbSEhB(vl@sK^H32_XdrGcS`TLN9tWE05cL&tmKa( z3i&48s9L%jog|yI(~+0=(M7LfpO1o1+Qz0%^F|Ym5lh7Z|ae9YLgH?4b;y*`aD(>aDJP0oNAEY77h{+wq-ou85!^eJ*jekXt38O)mCsdU&J91;HF!|Y8D$# z%-1JCy8zYlRsoJ{4UBt$Uj+h?#>M0nma*mWmDuiH+ko+2HGrfG`~=vV;|9mylg>yT ziTp4Wd>@qg+epbB+!XvrilrGni0eBLy`+tUkiMn~#qpW@i9V;w3vu zc=y@YvG?|Co#3Ntf_7+x*nyS-9k9iLeZV4vAmY`p)dTo$|NQ^~1hmuHb9gq~MU^1H zA#nWke`&nkwzK21OQi!yt^Dlha>Q!Tci7+(0RvtcIAb9-DppY_GQqZ|SfCJKV9Psd zz>7mG@gVWEj86Gjp zXKM-PvodP6*EwLU&%4~LLQJR~W=*mfRxV2Nhd~rJ?7jl92RQ>yOj=DiEq^uqf9U8V zovIkmau@cA*t^isQj0oVS~_q~_$FJhB)uBI@AUA>6!z2GkaQikCaHkffcJG9j7z@Q z(F5E=<=?_E*P6rD6qwzd=x(z(%2t_n>$@Lf|AEkz+V#M(^muw;Vm`%cA_MSO>;a}n zUb+#qyA#y*J5>;Pba)PUTdqZC{GMN#Mwj@|cbsX-f_R)pj>wBIQc?cib1kP|q$9m6 zMIS{Tw|8UHEfm=hpHH)K5Nxnd(2sm~xlW)BjAGL@P;1}Z9Dxh5bm{P|r)cLMcjp6Q zalj7|er}r$eGKkI(yEcGWGUqsZu-4`?TMbC^Y7#Z#B}}x)X!8x9rmL)Z*L8hA%f0_ zl|VXQ+nc0$5XndT2>?a?=ylnoc>^c$O<+KnHv)L6boE5GMFnTb&oRA`zG#J!(&&az z0H@n`=RBJUk$TuqZXJIj6G2_>`5XZnRRfS3?k4~fTboxSL(BtyT&)lhg*eHbeca@|{SaKPdfiSrT}KRLbF3T9g?zVvLXzr#|56>R3`w zdCA64Eda2Gmwy2q)a!uM0PhgF%LlZsU#SU~JSz_lx#2VX;o*`EOd9nJ_c!c>|2wrW zMe|MOn})P#mAUa8y@fhq4$4j8xw1KCgz@6^@l$|Vj9yO{zzAgXH$=X;@90_8$gzQo zqihcabyv^Ot*mf)QTEM0D9Rz*KR6ys`pW`j*7HVy3@{xKp~BiwAEsEXM+fnf&-!W= ze-9QC_R7&v33Vk70716%NpTF;m7xeefHr}sJa*%BfVb98UGjz;gwl>>(dudHCYUq5 zfDUxpO;;lY-}SK;&ksfb+0pPD+okEq{a6S*mu|awTzU49>$;#w{~+FmC_tQpEDrh0 z&sYje)Kd@A25Af#XSw)_Phq!)KY!g+dpm|-@vfGP!pl?J0x!q;ciWxm(=yeQI(S8( zGXZD$G<3`Io=TH7R6{vap z_`9hiiAxzkChN(6p&|CbBa79~-ETFl4{12GQy=_%eDB409&mq#6$Mb`o=Xk_l|j&a znLymhI4)Dr_BinYx)7kemkqf-d_1xGE)U1PM@BCk*qgblEF{_0vGj-Snp8TYL!gt` zwyFpEI=)pKYrI!#cozddgntb=>@}U1e|(O^a9yc$>;8D$R#`}d#-F^|3~z^}<|yxk zYLT6G$sL13YRp@2FOr3qby>DKSm>_^~#WO(mD;w4KX@IHf~ z5byR}9o{2vnt zc6wVvaDDYh{QI0168hqt3^fLKj476JH4+%yRIo$yc{Ad>oe0*+!z z|3>pE33Yp?fU!gel8XI}Qa_PvLj zn5KZgq2KW1*h74QjCiNS)8+c!Q}H^*F)E$+Kewa$Iwk>CJsDC>-vedGvB@3MV7SIW z9zaw2@)H1&*7avxc5N1N${2tzKeCb*$Fo6TLRAxNKd3BZWq`su0Zhm9-&UR7o%UJO714qk?J0UmIM_mbHT&Icd=^FCrb)ao26__hCsH91k= z_OjZ7i-ANuFuU^f!hbn(l^H)wvUfh3Li;c9IDftGD#rWtLUQDMPVm8}hkj&>oeK|6 z$!^!ap_O?yAogYS8L4Dkd2kGdm5<2%HAZ+(NgUc@j%biqa}!K)D; znaoKRjd134!8(fGfx?Vvu{ulWot!^Qm@6e3@Fq!kQ{&B5zh2KQ&%IFDy-=t?y%?(z zvd2S^l?e z8vU06{nxZHYsD%k{u=yn9 zxi8Cdka5g{Q_g%|-Ny((sxP>%iN=_v#uW3{xXv26P3pfOsZAd-xTOXN+d$x>BeJ)p zePk=HvmmTRmWT$hn9R)|0GZ7?{Dsv370hf#-h$66A!Y|$n<=Lt9*%uL9o*d}f?aUM zI@Sq!UV{MNk2GASX5zMe-909^)h8<~SUA=$i`mQ*)XyWz{5wfC;~Ox>u!iFp!xYCK zz~8uWL|bD|Fsfo#+!aTxW}u--3?0Or&I#PU5^LdVTqG4qgRzK4Z)kFt2qv428+)R- z+08GK>dT{ws!Df}#1ckTbG=jG2%8g!r2TEG+Wrk#V4r_I_P+NHP7uR?@(N0Zll=%L za&X}<>o*B{1xUI$S{)YR3_sPN0Ge)fJoD6tkj4X2odTBIkHICjMH|D-%+LKjg(&#hpcYO=YnnhxYl7)9c ziC6jz7flFN`y(jE2qF0tArd%swv?VY& zO}|kl!DldRC7z(fFraEzvc_>VUmmkZh{+9F5Ft+c#ZBY0OFZa^VcuX0;1}X2o7bxS<;prHPR_cL@uWwmZzZrXLwqcHIKsx z+(92WKpNq5YcXWvcFb_zguL01*2zs_L~|o{dU87uVX!WHOlhIDNOA1u->TO(CuG|{ z_|02A*)McbcclqGO|9$r87<(+B~?1#yi((5$)e(6H?)7gMr{H{Jg*76&?`|J)xgHD zEqY2rFFIado47+AoQYm6@Q3Ab8@b&XoQqcL}cZu>4+c_O1S%(kI7y#D`D5E9!A}4(~v}q8U z6U$A; z1PAnw6SfPl`-0pH)ec|wt>&j&9h&DgdKcK*s2HbSg9wJ6kIhcnqT-v2kK^OF8Jx%| zJ~t#Mee|J&Su|d#_A=>}}DZC6^_h=2^lhM z^(!falQoM0zXn|W)WAU5G`T%dYj``IgE=YOAp7D)*rvq>-PF}*p!x9 zNos{4Uc*9T=}UfT4(+WH#)c3fgD6-udN%HC^5nVwNS@u!q>*UglI*#2Fdqxqm}R#% z)dd=u*^I0i|MSIHcOl0G{=Sd5DyWa@o(Sj9f$G9`Blp>e^CC^e^iivtacfako$xx> zrsFxTw>j2THl=k6df6r==zRFf=;++1+(B>E{jB^~+l!yJDME|1MlijRuyZ@M=g8io z7P5j-ghy>{9gCb#RaZ*MKU5$E`8r?%D8?2ZQ=2)q*G8}zDo!$FVHP0{MCS^N0||3)1Hw&Ma)~^znpJWmz5v6z|krux-^Qe|E=#;0%qUQ--GUbxY8`v2YW5qFZE)bQL z&myBhr(HoG4X;Q$Q%I+sWJosJHNqzfP(~I-7(y4##feX0qVvZ~(%50alx>a}=q*NT z4Pvv0k2vg^>w#9a4sc^g5Mgw^N&eSJFkE^BU-U5ud zK;-xxv)>T0+D>=|7v7w=V$KtkRGDYss&i(irviSya9)%7QOEr|MJJ+2rr67kk2)rDYt_Mt#0~<*_T2Pl3g1X%){$n2O@xmcob`cW2#GVG1W@A?u^CA+{+`Ti z^QL)U1AIysV(Ah>`Hzz-)eZKGN27nABPQP@@~Wx4LY9ky>NFYj%JcJm5)bCbV~!JU zd>oeX--=Szjl{e_Go0vHlX!AzI**Ph?WRyl|)fe|le+%j=2_m}kQF>*t)&$#Yry`HKXXGmD;KNt-XlJE)vZYg+IZ4a2Z9rWF_6PWkCzTdUe+0fb0;@ALj z~QzFc8=}!fTg&5z*19TX;WRC zj+D`W!MoX|N2m{R=Kj}vq~}xM9Vu?GJ7t}>Cea=;1qIt{D2+(V_Qi~NP3qP~_QptUs_&4dhk>zV%F?uu$CAaZ+s5O6T zLZ77ajk22azpIm4nk(JUT{~wEqxcX^4{1zsYFNvZSG9b0J`)8sY7mBxISUzwm+)Mx zFVlWv+579ILjZzSei^c<)hqi_y0_lcuy_2fbY~FY(>XlCnGqy2_dF8e+!6DI1#Y;x zB9OV8QMAH|KOHpG> zS0tfLgUL4sKizO`)|8U7a8SduLH@%6j^^ zj+4g|VQ1}KS4H;kgJeYgsE-_}l6{Kj%;P7O^~~%CSnM>3z%=ITPxBM7?I`=)W2v}g zaazi~(2elOy~;0ih6<#exO#QW_xt5rhvDPy2GuiTirkMiSSwbH0zz0KuP~uP?U&ol z|GJwT#myJP>fKHiFd)n})~#EomwCmxbTMfPDn!rfA1fS>NdZw&Xkjjy1fwp2c_V8W z&shcS84=ajkw0C(?8WV)0y@02Eckai^wUR+Axgg4ia+VD8#}X$ao5s{9SCpT9vz%` z=21sUB^1vLhwWvNqMgjeX@R8R^7=XV(_`DRlWne`_1kIi2R)lgaqevLf@J8>(8DzQPIfTfuOCvK!vlo?2 zv7|vfH`S{=EScC*a&?2(v!%4?ibp`c=4;wXFre|$lWWy>qnHA;inmwOfCwRtt?Sq@ zy^Kr0=b72X4i#1Jiyu6GsQXE8LZX-P>y|^h)NbX7lfqAl(f6drFQS8SilmI;U5(B1 zx|_wb;uap6+ZrH@I+Wrnh(d53wg^r(584V8v%6I4*BJW)q(dhU z9?5kze)Uonqt_%Xi!mNC-ZG-EMM0CQM4)eFm+l;!xb^uKgz{f{JpoksOiacL{&ijF z#h9klD}mZbbD71WoG60vj%CtP#%W!nGf>&#u!ti>r|L+P;ts;o8BE24KHi)XQoZTG zt;>gt{LIRB|NDMR?a&gVZz455HeE!XvKg5YosL2)V;AM~nEI zhB(*d)Qw_sH6L>BS5*Cyebwx$YaPOLxfMm3(Gf4mB-ZQUV_Yq5+|ApiyT|E%kGdSf zZb4nCVaQEBcjTQJ4}Lcc3hpzDo|=&_jogarnlGx~mLi2h3xa;BK5 zUooQTt^ci+gcMK5{G^Gg?vH4$)?VPxtVN5=xVGgF?z~AxpmPSa!gi@UBluqM_^276 z-(5pe_1X4~X!cjpamuU^OGoQw=<_3UWXX50Td(_%7C#BB4oaU%c@b1mF}2>? zAlRoqnJ&GqEBB~2~&60DUtn#GbgYAg{IX>%f$h zsHfe#Z^c?g)~9V!68oryeYF(cJ9kU|+sQRkKSos)E*NF zWetQ-j77UA-vnl+N2i|D!r8mUylJ(4Gu>S!CEWN4;zgPzf}N9IyUHn{!k@3C(e0~| zyYcw}e~|vSQNLL7l*G_?o!zst$AR>S;=daVbB`(%FHQTlqF$u4Ay z8mew1WHvHUXxP^x&7Fxr7;iw0_D?0U-?w4TE+w$ z$bDJ9NyhkOef{f>ILH0x{jEn?lPnq%xz`G#w?gIS!His_*IuOot+L3v@9n{f0&T|Q zj}f``D8}=WfahyHiYUuv=k&4aAVM`1rd&QxEVmJuPst?B!`PSeQ+ex9+6Ie(1JkJ) z?`<1f9H#)bFbRF?`4f$(tjJU~qsl*R1_;?l5~cyy@8_dKxnt;G;`?;yFX(PfK)myO zQ*~eRQ%Ea*_~yEWQp_U8eZgffZ!rS77f}s}C(2LC}g}wec%ct!nEjWFokzd~02aTk^z#KMcQw zqKzMVk;!@s+k4xyP_|n$xwfw^^7DBjB%|QE}NJ3Ze1D;f`PZx<`N*vV)@oauh zf9)=(N3J-2zV2Y&D;e{1DND=Q!jc7PhK>f}V6cxafkg4xx06K)==nMGmn*xZ456QX zKk(%Kn6#88b}o&zyC;I0W~mhXoeFl{`c;zEKe(D^$SxDGQqjQ*rd5mr>^ZdZ`b~wXnO_`rtai3nh`UzBEwvwFo!N*Q4cQyYJ2klZtAD)-=dTACj?GO7+sgN)%GF#Q6;QY zVk5Jiucx_4T5kC*6NyWM5&1D*6*p%`4?<|~@=*-Gl#qHsbDK>kW;g1mgYN`vy#T(U z$cJ5D#jab&6+LfQEi#qHU<}L~8C+JIT#IM^xSw(3DZMK8_|S_U?`GH4Havoeci+>8 zkIUvM_fkD|cNTAc2DfL<>Nl`;U7!x8YmuXbstCGMFQRuM`9JNVoYA^PfjPuH1;yG% zVl6mfKwB4WyK6vy4=IBZhZmc@9s8ge$nzB~TGwK<I`4ZtSEuD zE3k`re6*%_>>}A$%1DFp-&x3v{bWhAG^P=ln^f39zJ*f&lUaCzi;O8!xG&&ug`zTF zP#BrMmn5u*3$vz0=U~+7#jkOn%+%6npv)SUYARvPKFvzVE+G zSavg9roE_!YRXKBKdv0_sy?P2Y({g5(B}A>{Q2QBVjY+(**Z(MX|fPtFX^LlZS7%7Dw=U$V|CQ0Mm=Hu0=rJ z0(LF31n12-bE8V@?d->_H~4+`FUOCrPZeww2jt$ZU$^;t zujE@~ufE4J(SM2mx7H({tpVxaUw1)slF>f8V1`df=)E$#mJvJ!9kG{mSKGjRg&~b zrq1Z`{5HSFG(URrsA-Z~-(T&)m~jne7pPgsL!Z~fOvioEl~4W9k+n>86EUD{h;z91 zko4mq84r+DEOFMybHS9T^?=qNf(c{zx&0Cc7nyWvArs!eIA3i%_7I!?zGN@5WY}c? z>AU;{D}2)-rElmOljpm>v&2WX1?^dr7aYWcm`EedR^P~1o9}8u#I=9;Y?q6-@P;UFvXjk!ie0wurpSUz){3`XAjr@Ke zX#dE5dL?1V=!5_EuX-n$L^@lAWQ2FZ7-(7(K*lnkC<6gY23lLufamo2&r&9*XCe=8 zqO0qPn+r-fe=~;B7?`u~;Be?>s36ALOfIv9CAY7HnLaN3;x*@KZ_sHt0J1^srBxK2 zWEW?(F##Z$J=_ z%zOT>6xjIJU$(HKnA9m7&atA9B-vs{(0bHdeN51#QM_HY*se?sWXBLvr5?QeR$(b5 zXp&MB@(MH#uWdXA=ePGBM|igEm(aX%?sh-*CxBWe(3POU`OD^c7WTHt2haBL9rtI7 z(?^*=JAzBnE6wcR@${>-&$j*6fzeRY;&4kEy{IG!BlB*!eTmQqW!Ae?_^22<0tPSX zC^sFH&yoNku`ZJcDqa2jpupE?7qQlca0{H$f3n_qqhzPjV@Za7B=Q~ak(R217V(P( z0etnMVZhw6WXxkmw72LSC?U#7qbo-E0N2-yJlM`N5%fi=zl%O^*2b=l0Wq%*ZjoqF zHag1yvu2TFpgl}`gvzd5Ko1J44<>7Yz5WdaV;ITR7>ByDm8&uW>*HfYsNd4SaTN5S zW%^-y?X_1|gWbI9rILvp$R_@*(jflIBQbFkFK1ME%?*H=5~`jk?t8qhj2;i(kB=da zBDY2qPfu>vJlN|1=A_MRA8}VgPqCvXw|>TGub$Kj{Ikf+!|++y zxC_Ubgm|8e!r$2PO?$=K^-EcPy>I&e3wN&a*$v;UU2pq%jCwX@N}8AH$%>{HeXpB5 z7^d@fEfIA?ai`*WAT_PlR(Ap8SDo$N9P#|sW1AudeG!5*>oL3`^#=2mbB`l&yP@-Q z5)7tQRz8f_u-lsddSNBC`%4c-uhs`$sG-7B5Esel3N5aq56Lbp<-ZkxN9y)*jP-_& z`3G`0=zTOkSbI&ac}ik)*#JqU6!E4-dg4D_y-&l1v9p%3)={IgFy1ZAB^gT+?+-ls zMbdU_@KtS$aEo1kOa_hvFT1(cw2Ro-b%z#=V})#+8?%x;_!a`rG)=xY7971dJM?Zh zD~NxJc-dVIPP2C%25=f{dT+5f@Zu#fcDW3n#ax8Z4$=-+QL15^J$3zMPVgt4Msd%j5U)W1h=s!e6En%hV zIv2e=%esDcJn2Jq3+f1>jCq3tm2cjaOiC;rJ;~J9$T) zhCW)Ek_sG@D0P!d&z59<43~a%-61DA(Z*UF96m-vPu5rE%55hs5NYFtdeI<6rp(%_ zEUbl#n@zCq!>PRQ>eQ5zcpdmJ9diQrB|)@HH;?G}W<8*oHBl^!?`G!pdfUdKpTqhT zrTpgiqi}msB^Gzw<;iueYJPM%0OiO>Qs_(K+Ykqu6nW|fHUgF*@MESu#u>D_slJ}D z)gn?=`TFyOwuXJ5-Wh5;Fj$5jjrXe~>GmbdDMHp~HLm^s3Yf4(VQ%2N2G~6;_VXOL zRv(oemHsr~`1wu5!ht}`%2!-TOi;N((4~Z+AR@0k1OB%de2-_am61rGxqSVPyc0B` zv9d;#@#FQFlpdz>Vo1LLOahnH4$Vfu+AQ?yNy_h!qy=89Z5a)6pjoQ~oH9K&e==(- z`HVEwep>nj9921_Z^jL@RQJ0=Z8ywor{!ZUQes@nQv?X#_v6#u zKS}F5MMqlDjlM{hpoQ|t@VWJn%UgvMs~hzbCN-j{zQnT zaADo6Yw67pdNUqMQl{5B4Z>%B)kEqZ8JU%{LT*z@%}9+q0Q{t$d>0Wf{adLF~5B zrlJ_1q*;{)R}H(zTfb0$a=F~j6j*I1_&)n$t+^`X{JTi1?y7$BfNz(ke_Lw!_1aug z|AgQpl7ypVy<2NZ>Dz?&_b6vSaE=5I8h_|z$}tEJ4BxQ}6cs65dPYq>E@a4qa9?80 zg$-+ypgGezoJ!(Vx!vzmN=z>1n?TUAn22=>y09O)=!;lHkGJ0OO*s++)eyEL7gxQK zKZ-Kq9X~d`I)r3%GnGIMx3I#82QK?rS@Gj{NU>^gHdK`MN-AX|Y7+jdUc1 z>q)p=hVG3Zv~>XgNGR<&@T@78lJGiP^4;U1zI#BM?5<=Qzbjofj4mTxDTsDrqh58nD|_*%`BL4|C; zK<&H`44@WB;rhL<*|EVozS5j}SOE`T=~$hF$w+WZVa~bkP?I{u>>Y`Hby;Ei3JVe< zi^#jufx?z2iE8A#$#thHhU~oF5^~NECLDB+CXqfyA*-zeSvZO-j^eJI=?!ucG70R& zJFsyq>}Ru7{;`&7l-OJ8&?aYl=?_y!cAP?DCc{!kbi~s$UBI%bTcbP8%Z;&1%d+sB z^8Maoql~jY2}34UF$$(nG)5IR`&rR(6t}|d|CMbuZ;tILd%;GRbQEgn?1ohgr5vc^ zO%F|UYxQQ$8b;W)K(!6S2mHfNVa5Fyf3*Le6g2Z&)Ag69R(#7(H;32GX;M~md(h0# z!QNofOE=-bpi*42K26uiONMjT$y#83_2K_TrMYADr8wpi<<%J5zREQVxygfkmCN>8 z#@++CEPEj_6bNgPg}J9%bx*thSCtGPU9JAq^Y2~&=w;$)(ddgoDunebUMo3jY{SA*(I2u^4SKC6@wZeEy)A1O1N8es_ z->tp#sc|Ya<((@YfaQfx7@O$ zAlh)7yI)X-4>$esfQaGjNX!uCgg)&G`{(29X)wKvbk;Cpcl7>^+$0nppM3VDsB~Pg zQQ&^ZpFZuD)6qP5eMMc#G`m~i()6(JDSEe5&1Tn{{Xcx&24HwE>m7@KWn5p6Fspr^ zj=zJ~vI}a;FS~6f$*pizqDiI3ucPqqnCvYf|k6EJ+Cl#fWf|Ex7mKb%iG<1!J(Y#)x_26Kwsm6Kp#eJ^00(gP#B>}5Ip&+bGO~-(pI8DIGnLkIS6HtMa1Zgk^ zA&m3kBL3*%4x`je9bueEiqcQ#wU=E-uy<%aoBIb@>_(`oT~VJT@+bgyumwIHA)o_o zVdE@;O?pA-@uBBpM;>TZ%C?eo1<;5s@@jKMNspt?@`tp7b-$Ja#_hQV?a8-a-}X`z z@UQp=ta%ol@Z3v9r>$pLk|&andwKE*qAXE{bT`a(5|CRW6Wi2E+*4I18G7ewBy=m) zMCjJ^F*P#e?-8C_VDT!FOB)Me5=DtBd#xA@gW5Gq^3x^)8`H!TI0 z{R|Zu;l|wh%ABrW>4`c{E&mSUppf%ZcX@r%>$pJko^aXgoB}gx&(3NqaK~_(zkc5M z3?iiHsG5E~oxh!9*21P3GT**bUH%D9b`iJqTeO4Zht;xPhe>;Hah?+CQ7Jj|A?3ueif5K{iOBjn{sx zT_h{Q?TPa%>BN=hNC}v2qo-8%X-s`)xUSvP#^;}7c+M59;eq`L>DD3AuBthUt7K%_ zTh|H%*jG-E+EW5XcqI)X`|oGtGokWSEtQTpq=fKihH5sWT;drZnhBEk_UdTxU#3^>nLM|$yIp+yVj#8I(XJJPK=Q7fo~hg!FGVEo(kP}d9<%W6N4=jd1>WZXn(*gz^$u9ZkO((EX za+ZpnNS{cBOmaC6FXQeLt;C#Im@CVdJyDv{(x)Rg7ufo7Vux;E>9g&x&hmrTw&wM@ zWz$+OE~%hiyYjT4^tNXBUgldtm`y-H`V>EGtsWB#PCuHR64sjLVrCc&=`F^D;Wy zGmMnyE8&Unm_`>KX0gG+|f z_&g`y#3##eXXEJqftMHUvmXc*UoWV+-(o*`hz)>IQXK$YgQzYpPhQhNPN~s$J;5LV zqoz$A<#$AOzSqHp79;$NQTj@!MkFG5+6MW~nNhUl=g(uYK8UHc(|1$`_V3yyFvzZw zD1=<&$o+d(ft~Aw3JBC?He~J3+gX<|7pJXAmzlkhmBYM(iqWKOc?lxQoJ&o6@(gE;)IwR6v3*D!e9=o0gx8HI58&+vnyB*3+Gw3~$lC z4gYS-<(Z0w8`*~^jGqSeUzWHLU|*gNr!I$+Wagq|MCF}ZLf6|B)ofNSg+T~y)WNqt zK1=htKENTLEB`9HKDQ#s%2FcsD%JyOk4Cv*tP;_+OO9~_zp7-pUxGrEb(h`oZ2n~h z_iOBI`2O#x{=c6P`~d&Pg7jtM+lOEo0Qx-FkWuKWM8X3&7*%qG0yO>-|3)fvqU}$d zuR5bX?mKRAnI}Q1k5m2UGD`P9^`E_EGfsW^f>%{b!;S~UQUf7g9aU6Oh`GqLOJL{J zBIg4CMQ|LroK$fXFCkNWK=io1PTlaxLkSVt{r7zpJtr)&dj|#=7>N;xk0`}$?U#Kr zMruBbCuLcr_H}>zJQ1NF6%P?U#<23|u(_q7dj=6!A1rR26JqQcBE^g2l0x{q*=f_O z$42+r8;K7Bq}38m&;(C@ZzIVV-GqHh-^u*Azfa^IgOMA%M*e}|!G)|vHEEA6PX(sx zX`?Otd_ITVi2hy@(ANH8BEx}CLSa_3OHwV)|JvZ9B?Rf# zGKd9TRPydHpvqakzNjN+% z$mg;SBg|YBv~RNOU*!4oFYN`1Xz{EbNb z=qm6@1VM6@1jB5hJ_&YCXO`E#ln_&~OWRi6HYy$YV0|ZwlQ1iw!5vY_SqWd?Pe>`T zU#&0<>>F(JbT+6tDO+a<8%-m+-J}Fs!o41^S7fSD6Gz_og6E}_*PO{C-PfW8)iWbx$K^?X+2b6eMfr0(gEmg?BdOC-?Gy@nJ$69D9>G2HW3@tu(fHP$W3^%h7trlY$n@d2*JnwqVsN~$PA=`LETk@DPbsBDWUiu1we zjD6Ah-7iayWxQmkbw9)_X4qwppNWw3DJ2)S3l{`KpO^iA%DVP=ruYA!9CJd{SL2k+ zoH|h{moDbIDWQ{%9HGJ_!#YhaE#xvJIT6FkZDvHI5;m9Q)=9&PEvci;$#u*!F`LU6 zexKFv{C?lx@4G!7pFj6_eD?Xg-|y$`^?D5}iBbZv`^lt4p3Ury6hH}(>Aw35-oS60 zp=PRtn|xw4&hzz;gqdZ#Zu^=x&82PeM3lRfpBq&=F2;5ZL}uQBu5$SH!#@T=0Hw9C zdh9PpV>qL9CUK*|K1+VI_33)uaijB5MP4{d;bhYT`MR+I124f!eFxK2N6J}FcZ?2A zP^0>4bq-FaF^ubSNa79&5`y}6vOM2tpQvq?Anv{|+vkVzr5fTU;33`j%P)fhfM zQdiJv{Or=j(i0SwQ@Pj|TK;i>2cD<`IO0kw@0G%2>%4O(=CD5d7T&*Vukh62Gg(KK z8#?_oPBMh#^1!_M{l&^jQINw)D!c0hl8DCred06 znWEEhlqGuk8X8Jsyi$JL;KX*IknY?!5H`JS z?^MgNbuxBiBgJ{gD+67U-40%tIHxw5#CnA4ClBRtUkmU1=r$hcpjd+M>4C^aWep_xCAb?#+|kut}DEg~}Fdm{7A0w0@6yHYH+CL_xu*TY@SI^_#ocb}sS8wEy6;x)GoP0qHrU zq2ytd+s=I~rLy8n-RFM5ptBvTM{XL{>}pRvGM}-9_UUb>7#`3^OD>XP#~aCe;zzk7 z80^XF*6mD~I8F0w%iNU;`GHP@c7i)a7e%dEFT0#1X1tT{5_cm}4V=d`9x}cjDjx)i z8J=R?qMt$ZM@lP8x2CqYWIeQE@$d{_EQX}irHR8ZZaEzKcxTicoL}ki{M$+f)YD{@ zyaeQkUaayLC$Yxi;vauIs$-aQ;Q3ugdsln6HFUYt;x1@7Zobqv%fVm`u!$sj$$_yg zoaL%9n*4imI5%yNk2wI%#G{-sIH=#5_oJp;+ZfoXA+Y_LL#g7c`f;#k^o@O;xKs)v z?03!n*Nk5jS$Szy*Gi|mp>eeeG^FZF@u>8qlNvl9qYUgc(V&ctNb`k9p0WQx*q2=F z?vVFzM{E|v546J$Y+th{uSKbJndsQ|zz}aXf=Qov4fbb@Cr*uC26Ch7JjJi42;RZg z!HO@EhA%&fsGaIhbB2;brGoyCsytt~72}K5fe2zi3@N#!gq`Hts~l8*!pXPCF#ZAwqMHSEB%IX=H5LoCYmiMolm*M5Pgx*7TM zSywP$5ba|6?Ht_;^H`6gr2{F9m$+$`^+*tOkl}3Uli&c?Vy7&L_uD~t2DeDT!}so_ zM5tJ5n!_cUd;WMvR{IH;AxShq!ch?;zdmW*=?$oFo_fHtXy2Svcfwnyjfa5>@`xXX z`^OH&n(jO!zBiuw_~1a-z%$#^Mczkel#b0z%QazZp6DDxw10ZnZSRz#n=b+=g}}`v zF}T^jVN@EN!GxunS}|tF^VSLMi$OpsU9{Q4l5p&P?$}9rNog)Zyh6|QX(PwmLh~__ zeCxxET7@q}`M&y!t5Qs8Fjeq}VN47n5P-<;-N4ab{c2y;x4q6rH3tMsl;@lQ-h5ugsISm*UIld zFO6qK-h+#o?pkGDSV_V-vZ>Og-1M)ZX=ipXTc*+UsaP-jicZRV`~CORJq?;Hvo;WU z)z+dzVDj^aSm3~;^@ew;AD(BrCrlf@?6#z4k;Q#iXzmcC*4b{IapW#Gu1<99GCP@f z9QC)J1ie73-=eZ}jY;r+!9Z%&cc3jB_Y>5pV29am&$aM$qatk05r39P)Ji2ewxOb0 zd{NqEJ!v{HcCS4=>rkHd4O5MQI=jFVLgKGLgeqPc9k}cCS+;*jdzoo|ays=e} zc351SQug%*Wq@s}E=<}VKRfCkcDB|cEO|#ON1T1x+Q2vlwd88*@M|ZBq3lZrTVu5)K=Urk@!<0XlmIN#@jS zM)-OBoD;iFO`6>lDqabFG5YMjxcsgeo;p`+)-;CHZ>CYMnstbim{3$0(h5BtS;Q^9 zl3R_DIESdiR^J)B5W9@5*vZ7VFs(jnBtq91F8DnNj#{*eKP<=QKIlEiw|qBGS!?Pw z`21Z%BUns~d`GK>@=#Kuez7A9ph1pw$dA@)-qa!QcgbXcrLUmyiZm@u~)c|0+ z!)R{^UNoA5pGr}kT^pK>GdR(_pA!D}=|FqeWY_UpNXq^J^DwiC14H^%3HnH_n*7h4 zs=tVpr#?QLb22VyGmBeiAorD5!e;^vwAgP!t(OWHE8wO?fB9c1=~FB0KXP^W0qD?8So<;tmx3VV1b@iwhiy)goRNOSTW0H$xG04326QySYAs#0VXj442z zmjY`6D$*?Y4_dTY4<3ze4c2g0(qBu}pGmD(su3L1Xa7McQfW!SzS2RbhP;_oHV0UC z`#=XNv)cct^`=PGP(?2e1Dj4G{5p{H1P2tcm+bY@UZJC`3ghSzc+ux{+uAW2@nE#c zjHA_UBB?g3pOAy%xq8=>e(L|3^|h>&&NA2)hg)UGY1IR0=`s2u;M^bBQ$O}?yYmAT z6q7!MJPJLrSynsUh}rS4SxM1s6BwdY>XxGPXzZ!pVGX^fn8%M!I92bq!AFcJ)x?cD zwC}!4E{=dL5S{ez=Kftq9?++(ReCk&y?$)t?@S18siZA=BIx8p=DLG1UXpI(^JV}W zZNI~xRI|~Fu|!35mnDHLje){M^3`y*<3I%NYN%KgY8l$#m$3LOvh~W9YJgHd$p(~e z-}_k?!k&ExECqQX7e;^h0leMT^f$lo&3-=6Td5B(d0te+=%ja{bRoU2+a2QH1gTX8 zgE3r@RlxgnPa^}L=1+5ms5D-lO?bb@BF)~BR27B6&Fd7wg8WEEFfGYjRM>5{;xgOl zwshj(oQAYHk9?_6ulZi-ZbhJ>^*Z4E{oi?}(!;gf~yHM7a zoK1fL8H^{$9Ar5C7O1>>#Z4`EG04h`z0GN!u{Q}NU?4A8*jcH4I_=pE^X2Hp7Ny(! z?lixz;@x|G`Yg3^Os1imH>r3pY&j?OoX~!K-u0OB6-|5b4I`z8=P{!td($dxl;T7Re6ZLiq_d6#D2I76 zD`V`@(>$4#q3a4N_&{2QWYt;~dnbk|dJj{bnn0=L^M~-_CM9j-CLm}_pj7ov0R!3d z@MC{2OGj7{izECrXX|;@xRs&5h|pfknxDKwkGiMvJSJR}nDhl}R)r4elS3`d6!Px>}uQWoKw5lDdk&u$-0fT+QJ$IS4Yu3 z1UG^tm3H(?^m7u;Mw`~E3^NU|>oWS!GWS!*@PeC{p^{Kb?&RZ0z>!?tzv^WdDV+V5890(iz+Jz>5@l#)Xa;I=iG_;?i~Caj z)O8_5&sFQeDajt?FDZ->p)sVm0SaykJ7Cs=t_W^OP42n*9}CJvUVmI4ZI7h?xfMK{ znQ(3?x$(qI5_~yn_RPt~$p-ISUR;TL$qw>@g#(BGR|ZA!nv>wH5K7my?(&9n)-I@N zYzW6XBowNoz;wduX()HVH73N6G{+T^$R@iIbiifgK`t-XsG0xgf+!bno-ZwSOcJRh z<2fgXyY9}OGQ;C6^6O8NXyX$jAy{i|9%-rVpHKz9ieH0AS_} zLUgYFx@I|+w(#STGs2F$yZ1f96eMRi>_Jic7KjG&BRI2H>@F0r^CM$AOUP|E&o{3h zmHAMWsd@F9L=W$nmL*fqF7_Xgq6jNB^JbwYu<9pds7L&7nD!*7Ab}(ZIT3Kj z`yyz^sf<*|VE@eriVoZ>AB$*=NK~lgskzD>vUVY?ED^1}Jn-*J96e zC3|z%U-LclvO*9v^-ksT*jO0N(Fl%C+v#B7NqX8QZ`^vP-+%;wBN{rF_ZdC^$d{HpB%PjL@T-eE*biE-bB6;RGfqK=g+i{uAF#{9sWAif zI6%K@-Yb7)@`aZ}IJrwEG1gxy-SU~+Iyw7OzU*}#|n?I>3Fwbu|fbf~A zBpoc&_NwnAQiNRNm=$n4H_&PggWYT?hw?I;CpbVY&cP|dcZ{1D4&#bq-$hAf9xE_* z9;-0bm4JYCxH)@ctu__1m;{tm>JlG?-V{w;ks#E9PsFw@Cll#!zkaB+Sv%SB4}C5WQeTw~YAh`=50&xP3TZ?4;)kO$X}f=ez;%1R-m9GHwW3EL zjC~d@)qcuU6nO`E6Jfz=#0>$~fe9-&;?%jA*_?x~g@ahv{$zpT*$6c?a>n941Cn<% zF~_AYVJmM0oGSA)Ps_wFcZc8UO){^zL*;0R`cu8A>ZRyvtuKcXy;!yi_g)1}k{|j? z>Ao!uD^Cd3=HdHZfCp8>hx$}EWSNdppb?|hx8@sCp!Z9A!wKoPULry9i$RT-X54_N zasCUBO&-sKUmveNg~-v~0OzMRpC1_o6eA)5H0D0lCx@o_LV`OJob^vtz*-v9a#)q8tKgj)OJ2`O3=1cfMg zB^TUB*)QeBv2%6sD;4q4~Bhk^Q?j@9;!RY;Mz%s{6|(i5axBs1rW zfZ_Gp-zvgsy&iBqJ4e4MP$DF=dIddy-#VW$yn_YHreAYj@jJW{#c;pJ95aDQS_y&) zcuW_T2hGQ3DPS|@*!LBivK;ID&*0}$k6Eo`j5+E1LLX>eX-hMV6UvFBv_=IkQ)f>;KQAR9LB`{o8fn*XuEopzeYL0t_up@2ydkfHU(M&H4Ig<-Rc>ex(S zS?^-i+>(OF3lmZ!k>#lHrgj-(w4q=e^{0n9%YBpsL>MS_pSK;;knU1z?|yXg!@7I> z7f+p`ahsv>5l>`2W$u;%Hjc{34C*iW^h3CN7_X%}0uRP+(6>)643h2)|M`v1F zMdA!bDcI9ICbSMWJ$@a3DKFx^W4{sV1+!v#?&f9rL-|a=6WJke?YEMO(xv$x46Umi zu$X{ajmGNs8>st8v9&&eD9L-KM+0z&&kyVbg68f!E5SV3v)p>*9T)MAyHN;4Vmaum z4Wo*Q%cPwjS0=fOeY(u){4_rXNSFbi)+Y%aRmf@>}+59U=)DU2cX z;eN5vZqN((5l$4i+bu(Fc=x8@OlC{It)Z@YK6m_%;w{1i9F=z{bL-k=2tiP$Gfi~z z)XKbeufMV}x7F7_?wLv<9yAnJI?V5C+5P<}H!qMQhMh?)87@;RRjl_TTK-`+*q8>7 z^EivxsCcE>bwhYxG-foppQ0l8^meL(g7{>P&{-4nUz4I57(0}s=_VJF_mb4#r5X6* zbT$!Gx+5CI{dCIAiV~xB>soBq+kw|aipquB%#V?CCFfXb7aHm+@VL5GZIm=>g~Pt1 zJ9HO*QMqdQUGtVSP({~Qm@jT_$=pVa%O+7*fm9gaxyVvP@Q+#N!@fzSzkwE$x2Mc*ms0yAIr zFT5m#C3g`o7W!EVD|*G{Rm?t#Bc)*q(M(s+^vc5qOD`1@hU&M6yyt`XA5+r&-h0FZ zjGP6ca_y6D>EZP6@zhY_&QC6{^cODr?#oh`!#XN=!S#>asP9*HY|p~a$HdZB7&8mg zUF{#u7o)=;Zz^co>*m@ytV=Dad4F4ujHP!dg3$|o-CU@TGu0-k)X`HgD1$ z(q<5>{uAWLkhpK^3rkdJs-muDLHV`1*THns7@?1vU+54U?C^?hxs>J!x1mO5?1vBH zGCn^qX8rW3piOjKe*;s`k1TfijCJ{@bX5k8l*He!(49&Bp4%F++-b4}Y5`?*Y+~sS z>R+$Zj}10i2m;hS7$HTKdM$pogd!Z-!e(j$;4j;PklQL|PD5x!Y}>q?BgvF!r`pWU zkDx&p>WRVH)OHH8D^ z>NQmapmzb!BUae0p|*?Nd8?PXcU7Du&dzUo(~TD661eI zq&IskgI{aM%$i{r;iu?M@ss9kj3Dc+5q{fN_%?&p2`!&ti%k*2mkWYGn(0`Y&SDS{ z&IC-ffD~0*Wok(^xqZy>?Nzgp`3%7HDsKm*g#U-1dJ=qZ#{v~+G0W{6OB+{b_g24r z^wY(cTwl2}+dtmYsUCZEl8{4IGM?{>5+BfBeyaDb{KyULgHgG-Hu1O*t7{=D#tJ&^ ztIZ?tA;oO7Yw9rc?CVc_dzlB=;Zr7`=gGYSeRUn?#)s+H{v;hYSdpl=6BYRWN{9nf za?0VL}Qp7*{B`2T*5^pQcSfvtSYlJDV~|Ghqu1p$5Qw|fa? z^2on`|Gq9e-h7~C)3?571poK??1Jp~K009O-y6;S6Ve4>+CTtskCC4J{{;yi%t`pai< zzW4L}ddGi^4Gw|5&)RFRHRt@r-0!qBm9Q}$VIUwNV5=z0>mVRNJ|`2L0_Yq>V41voH#nS9{+PGOu4Oy`3p}{+PS%wr2kA z!<|l%I{DRFoD@N|Q5iqFZ$^8CX|v77U^4CR%Y*tQj74|qz{}iPmjyAKtmSU=z$=BJ zF4wG8Q%EhI-^HR`vF**@gAdPLzw0N{8ip_WpJ~iiTSxex{Sbb2*tq48ZrvA~9EM4{ z>phghdEOIDs&2QwKJWojIK){sB2BBJc7J!Vr1v#v|HnsRHHWKs)Rc0Ifo!R^I$Z8i zF|S=HHBKXL539-E_;|jOTuO&L0S&Al&vz|GcpaRVTE7(d{Ql_S{wZe9QNZ?C?f_TN z(wfx6?FSBtZ=r4@qW+g|4hsF%)_v=hZTG7DxTl2-v1|Q@3(dM>!++e+$Rddd(C~PQ zEc?WToBU4)m|>ny{ttH-npdYARApi%ETaM+YVf4^7=ISRLXRe zTRSh*x@kc`;&K!TS3GCy{Ag*Z@#e7klT}ZY=vr^gq|@Z*r#|Y!$telUPamV&Rv3L{ z(hB8$v)9-aj_on`&2ft+PJ6MI@~jhWonQ5xHIWdr&*8jrO0|_}427_FbPscUUrT5v zmuZuTNVs=)z~9-Xw%6wlKRlM(5xvU$J~ZhIbbBzeJskaZbF=-SeIlm*MUG)z(N4sd-u30$ADG zN7qB#ZCI2?zpC@IJbnnyKqodwvyV((4KS*VT&=$6hV;dpo4kE^k?9_u^=32u#qQ0Z zX+?F@lW&eQ-p5=rrtHru_U8j{4r1Mf(UQKt9H;y2FjX>Q|M}Bqj*EVYp8Mv=Ckl~R zpC0G>g`y*wB-ozmn}cs7t3B_L{2K5dBcgLtcwB`c5TV@`=Uj%;7u_hI$>jzmu|Ly% zTg%dQNwtG3swdiuQMffrig+qV`+Dn>j{wz;L3O(j5$f7ZfkHBusaQN}-#n%n6P~r{ zs}a$y%y!-ubtlOdo*Xn86zoR@JH_l~E_IR(;a5>V{r`$vBkLBjo45ME#@UTXE#d9h z3rTW=Q23}m6&Mh%X7UV=r2NToXZXVpQUQ(7G&wGqYz?OI_?9bLh#se8- z$UBcHkMR8wW|#bDDooFtq;8Kx*kqM`%$Z+|WFi*6{Ifm&`tf2%?0TgGC2qYgFptXQf<$Wrx~CIi3vS8?X&O&3=91Xy%wJ`>6YpWycT1u-eq+ z45%`VI>aTcAM4WX_(^c5<=Yops++^<`Gtax)9P;>t6sUz)+mtPJPs{HCMd(3U3#+k ztmui^XonI*;NEmpXh2KcWB+5ByM|Y9_sOZ%`Wk3o24;rDarT3`{(O`bj!m&E$+0Zr zf>I&UYd${P8qi#aY;TbJb>{p1_1^iXaG#=p2$|XZ(5FF~Q=0>Mw@U5eVh;zm51g08 z8fiSVDz8BtEOcFJRhi(cu`c609ao}$S6zYTAHLjz#%nHTm4vh)gptth_uEjzbLpN} zHRETcxw%hFp;D9A9@8R zCxLoYnLw}PP@`R!n0dBW**5626u^ARxwc>}IlsTN`&sXc4kPcv-L8}k5jWKrMe_!y&khqHE;XlEz-I=!2 zb)JREK_&cY_MJ0r9C~qL&2smG%lFE^|W(pmkS9|xG5Au^AUcomGOvR)_KJ58!j4_0S0uGyH}!320%N~x z&>A^^1@8%3u%}@R&E~TlTBIuHrsi5F|0&wKME7ta!|>w`G^1AkMq@`$<`}6ze+%O~rMowc;=uyML>IdI8vO#4#)pGz(L9XdliD`Y#co|;>WhX!pLtz*o;#dS<0>;keVs+B1F zP6BmBaZDmEPS8_-g|d`k_ADoo)<5zfR!&TE1aA;&1_nVY?7b9pcqSH0FORnSqB7*r zvxO876UX$lA@)Rn;+Ta6X+|;L1o}xn4bihlX5w{(J=6VFoODzj{o`X!#Avrp9^bPh zhUdd^+LJnad|hbhZ@9usBMA2NoCAkdaPs%qlhVn~VY;;4-s!X26n~8kpJs|^pS9a8 z)Y?xkqmBV z9~!@|Tw@l)|ZRltS& z1zN+%rzfa`UR%7Xx``_{#xxHFs>=drf={}o3*x1N5Sl)!J5he~Z-?QUQ*2Mb2zf~S zz0$NTAi4sZ)myq%tXDCJMY1GyKNik(=h3 zzvKyfzDH1|SxgNzV5}WrF%(Nizf7~Ng}f(ess+hVz%Z{J>0B|Dtaa}AjITPSmeK?l zHmQ|z;+&YssOHdgXMI~I01+8{`Lj5|cx#`xLIuJBp`D6dILqUjJ@1qo~q= zj5U~)VtC89dev6tUl`y22=a$^@X<&M26}-i!o8XuQ52ipCC2_(u3X8LU;IC)ou&r* zO1@4cMG-R29CXO)IhnpvGTvrLVv1PgmDa~Q*p0O}!&T4GB)~2A4-H^}Ry7nIhlmd1 zF#HHQLa!PczKBCW{Lc>%Kv}cO|3AuL`3*p5{tsw)|Nc4rJ29Ok(*HPxR%Yq2{{K7u zKhwER1NjfKJr;w7pyCdG(f!Qey4aHV#OKiFheY6Q!z}<+8D3K!-q1fnxjZh@~5#MU&c+iToBgjJ3VC7wERuE#=;GUl0Kc8W zR0gHkhxM`9g8m-*dN$sEGNrsI}LV&>b!6)J6Zhw1{9Pjjsk4zrV5V z2u4=H;Wny~uXFy*B;tZRT>$EpXLEJVr7FytnRuS1GC0(d93bSU05rN2cubuX#^-Y| zm%NVGw7)OP{4^^Gl#mRfBcFZ| z=Tm$ho9eJ0R7fdy(>Nd+2q$LeOv~Xo9L@#k7OCT3=E}Zn0@xGT)FmFo(4o_fA$=9& z##e<{RAPGN>OKozsm)~M;=WZx>;~$O1OALN?99L8gguC9TR+D&`}EIj20`;w5uz}Y zQtT&-2Id<*3cdEGPp6)lqnF7jzuhaZpJ=&Pq7Gn~D$$?xkHDcyq?HTrr+#~zYwEJi z)O^%>vkq$3i8U}a$>3`M@F=!Fi?v}j&+D96vjeZ~EwU+2WP(WYE*o&mkpDBec+&Oc zO)XCKhBoCQk-@uv7vF1WhJZaC0L7_*m{0?l4!ZC%ofvu@hP-n=W1fnHiu2N) zEJNz;y+3ReuR`gaD}3BH_f_8ijvJpTC?|Tx>`i&f9AH}nlv2Yy{IIH(^!5PPA~WV} zP;I5qxL-3=0M;MhtMz`jD2psI!hXA!!v|qAo?haC-Jy$}Nu}O6>g@fRNWBp&@QRqzli=?nAV(3HgE9?y0hdi)M!G@m zKdh}JO*LGL09wRh_M_{QpH^Ng5D^QH9er82-!NDt|)we5m{hH!cx` zY-w47AYJYhu;|oOdEEl9cbJ`@f6*!Qy!121?jg$r3vmbU6rfE0@_lhl2)Y7TMxjln zWgPIw7pi2@9f>a{i;-V|7s_MU`fz{Kege=VD&URciicQmyM|a9mIc9xTD+BJAHyff z4gV4ZrS%Y8Nw>mV*U6EM(Uz{(SzDaPwxx69~q1)eNIPd6#HkR zQmJ=07tEsJh7#Uc+$=be8*751Ub{&)Aa=ak9Nzg>bX6h&GMHEMtRWa%8@{x>ogo(< z(byo^!yAC7OWmtz9%0(K{#9)avE7R19~oN?B{gw_q2PtqAc?xKhSC`P2Km;D+VmxO znx8Emb3^C9E*9UsrhFSeov(x&Glw-aA-v>ID3XFkq2)avEQH#}U!nUs)@i;$ z8%dz)%<5))JikL_;BUx~S_%x^NER&h6pKxTe{NR@n)63GA)VJ+F$c2E)wO?E{=6Qi zz;dl|D@&Jsw92x}X0k}525>ib5t6>g%M4fhQpfIVy#s38-x>V3 zC6T>I=Cg8ReKX&cFzG<`?=Zeazbz{LQzv!tO=W4rs zbp<#pFKYiRzfE#ckheC#<)1PC0Tk~Lz_ouw@+{XLePDiSP*|&+K$o$V^4tZV#UzOg zpGSBk)#|!~*H)#b$N%m!5tTv%!m!K={`Oe%iPFl!FQ3~xZu{&;9d!rhh}{MNUxqWEq?{Hf$s z0h4~QRtK*~geb_owMKb$W;HhN%x<#Y9HN_a4ck@D0A8iJ2%B2cs`(J)G_wb&`r-NhsG}* zcJ8g?B#LZ3_kWG23)m-m{C2M2Y1P&|zuf%s(TjSf-0XW3l0gIWFJX+L&6Vsj=61`A zP4t3)YOhpuc*f!+Aq$VIpgO}f;=$lF9Q%&4MCa*FOHGom^^(-s%}m6x%cnTt=C2Bl zrL6Adq|>h|+W1(mLIOrr=->Qru)Rz`8J^zX9HBDl^$3-52`_kl@TPba_Ox7--JlFj z4{71Gb#HV6h~6Uc-X}ezm}RnxCkb(q*UDQWau+$;E&{ks56fjPN!{(DzuMI=s`OSw z%GB{pZUBeOXW0og`f8`q?t^K-m>-1B^ig59ipY{nK-CFUksLzvep8-!?L+W-v}w5z zu01JJ!$5xAld@q!-R2tlC|p_V{9DL~7KDC+^&Tl_PiGlFIF(=HuPow!S(SrX;(M~H z5=+0}|C>2oM)K|bt;(sq2kL^C)}>SZEQl6`AL<`D#*WCxxv+O@@ug(72Uqa3@Ew=d z1iJ{a$bq^ech9juo^~Qv4)qgR3*ggAe8CzY%F1)>w(k_o0MUhE;T7~bdjqOgI87Sm zUy!QCE0o@3?v*i0V`@*IZcgz@Bbb+&HhWL;lX97mO}O(S^_&tB9AhKi$_bl3gKQue zP+#JtALcL|M97_kATd>s+$v3Gh3j|lZ6yw@+V%;#rHkJDJRYaJaHwSdO9HenQ zs%EuRu5yFNhJhB}Y9yuH_U|`R%@g%-Qy4E$NpIhlSx`*V83w}X*W5Q5eL=UY4L z>0IePz?jOQQa?ycq{uGxQM$n4I!$7d2{4!M%Rw2hC z6b~c@UBKagHnn6mdYMBsUHa^4vYg>aJ7mGMiltF$GFSZaG3{T%+t~a28&?MOGFSc= zBSeN%4%1~{>~9I*LVwwkyuAn&q=S!7osfsV+%rw&UQ~`}n8MWZn7R|vA?0nzS2hKa z>sm34dAq4amji9D-{_@q)q6`TF>sE05|zSb%I2{-j6eJyWltHX5=a}g?BO@4H?s{< zk%LUK*zFjhLGf-c>mVdm79G5g7A#&;%VM_6%tzN^UY`BB^~UaVXL;i`=K>HZn>dgc z(v6d}!Vj3_1CROWXV?G!c73*#&tB0W%cFt8VNZ65`=T=$|q64W!~_jT(Fx>Pg(vMMHypmX01DAl%WA; znSNwK=rsyzcK1(ut-oe(@4RN~oIgHRdc>iES4%xInfCPu29X$x=C*986_P^f(`-pT zw`FOsy599hk-j=&4AQ2<9GjI#S_DdQkEz_WBCNu1I}C&`8Ds_uy2GV~qW{GGD71c~ zFFwq(hk}_`wTf8OjSJhE{5<(ZEYJnjaa9+RhVU0?BnH`(>f_@DDumgI7GJ-s29eNJ zE*jOnhp%EfWdxkQNCDG)MeGBiD2s89DClZ1s2Up@u*;zEvZGrVkwqRLoya5A8gGVp zbO@zw3c9a&@_%a}fM|;G{MICEi2qjvrGp}fh49#y4SxP*GJ@508oJfpoPXUDC?dZ~ zd2Cac0JC?8axV~c(5++(iI(~0wZ(kqK^@Q~`Pt`a5!RlUJBY~~BPqY4W%W-XLjz-g zvKf>W%ME>Cc-1!p}zgSjnNE z%JRS*RD<7|p=n0;{~$WTm)24r&VGTc+hM`=U3k$~PKj;KvyAr(SC-OEOJiJNZOoX6 zueZ+YSbPn%QOkD(j5=&|He$`gvR0OK|IDBi;&8Qo?aOh7@icA6;l?meby7qb23wF@ zRQZ^Q6mk?OZ1DSl>{@Al4$_Ohg57kP(Y0+X%jo5VQjijqP~J_3J#uXR`x~ET_DGG; z$eBy#P~;DVBOisi-C6+56SM7y3v;Fvk+;z_k!b?StIm+f#h5MpX*$P&j$5C!Ug(Z5 z(}}ndBSk(rKr-%O5QV{!?lC;Pe@y`jlnCphL$_f8%Gh^x zWwz>>BICT~e@Ea%zhB_(iIPMgi?}8bQ@wuQ>b@Elw}{nl$^^ye3@?5L)mhvyFMbvk zzi`H;j9H7v4=MI?q`^MXex(x>#7WMgi(kVpQVV4497r{U&syxSug~|+XWPHt0H4N= zRbIf}ncMNQOy4loRvOyc>ycvZd`d#9dEUtp5j#E;)KRvqzKF-Km9uZau=R#ot~Ngk zN@Y0{%FL4syo|Rd;_PENRoP9P!)YF#&?8U(2imWuA~5mwB;lq##nK$vj>>rAQ=#Y+ zp|B0K5&b?r$_Nj3XbPqJaTNC}`Gb0h8Ud4Im<0}>p}PgLtPe`jCeMRSEqmu?y`#va zRi3VTMwC4VO&S4ohC=jJ!N^LOfagp{cDJTG%)>0;T>t!u`%~25mUnE&`PC@`RiF~F z%oAelIzJrGk7!SS1YzFnwbxyyl;91M0&oYR z%La}ul%WvQCeH+b#h*U-Nz=*-lizDw$Qqz2?n?7^N@1|41yBW}8rUr zF~d_QdjEDGZ=O_&O@6yXR+tRBke4=tZCa$|NfYx(aDvN(WuX`HMRklh+dr=_8d+(k zSz6V~?gWR@iVrmc-+hB3UB!&>MKLikF7wcuMnM|Z364wdj<>#oJD_(;$YfN)JMTJBsi7~h_kns$ zpQD9L5F&K!Zz&y={72HsCJqijt zjXl7Xy4AWU9~}qU#-G`lZuR?I*(8-9@qdUKD-8rwT>t{UvpsQR@w!oi>lN1RX$jwU zzlON*iR5*v5J%~;@aDIz!$A$dm3jns{mXILW+6QL2J^PS0ZkbM36Z|eY;^N$x5$9~ z>ON0HPq=|&<3(^AdV2!3>6c^vQq$%-$tOZC#7TZEl0vcgP2MY{5ihVbuia`Y49YXS zFI*N|jIuysA0#O7Rc}Ww$tYMn8=m@BgAgeFR>)$0aknDxd|vAd~<)l8P? zv+GAXNy_8n;Jk_u@YKzDk8NrP3R`_f^qC+FHk2f6V5?DHesqirBLrw`iIdFPrulG8 zAp#-51$K@RsDd@NU6k1H+pRTXt>rl_?$jfe)orU!e6~^7x64K$6W9;J;`v&~9|awY zOzjev22g86 zxfu!k=fd&QR-hzKBD;9^?SB+ZBpn!|cIZ$Z&?5dF5E#uDOzm? z5<^S)*+23^K(#gXuAbl9`!-V{j3w|8+41xN9Y7NU%`EYBrZ}(~l%^}qv+X49z_9v_ zA4f21E?BzGY4)e;Pk=GYam&!Fh_nf^5f%ru z!UL~1NIOtDl5zn<&g|b+jK_G(`Ns}v%sC~cs+ogR7I10RjBdcARg%077tEuiXO`ia&Bf_+Njhg9j_T^p$Yc^)jtNL|SJ?v$>Y_CO-z1~3~rFoKNlk~y6+r5b~fxnW5ThrD*pcYl9Rxw3ro zAlM-z&XaF?E?Mg6U~2V+>WrL8C>6SzC7sG;3elV<<3Us#2M?L@;@l4TfxgOhNm4(2 zG2p^fV}I^jDVrQJ2GJ$AZm_F1t?Dtw_Qr1h?|nd!DNlC;^OG{$vx-cPPv~GvoTwpa zPW#NeM;N$`WQvv$QHj1{2xK45Kt`kCqU4YxWKtii1<9e5&l4Dcpr^i;As7jyhj~iB zgIvBkR(=;U+IvZ*8Xk(yfOi1}oZT0LJnw@!d(*x+>ZixpUv1%FqbeZbJZEKB1@fdajx$>v$1Y!Vhap)w6E8k~6DwJ|L>7A)s(8d(Hx zw$S2cb9PbheZy}!xp!3~UGJI#@2<1DWy1PD)K5K$aR4Z-x1oyD$|s$%LlB*T3GudQ zJiwsE*Bxe#kwoY7GN#)pS=jMz^P_7CpXc@%EvtS>5}O?GMV#ANYm@>g@^|`mzU8)1 zDd0|;1%3Tz8{e(wekFoh;N=={$YuPBIW;`sUBI{v2aAdhEOuR6w2L1@ zvSIy0J~Q;rUv&|3L;;idRmr%=EE3cRsGiY%F%d#LdIm*BbxVNLRRoW_$@2e zfafZYKq!)bQwB_NV%jW8bdI0U1_u{d2&C0nF0nMy`4lRHWqX3(TM1ej3vkNw z_KdzqB@_WfE~QkU3F#%_E%0?FvOnYcqMaWOm?=-Ds96 z9$PD5MRkg`XiY!Y#x#ByOk$-^vmp2_k_sL^o*(2=g4?)Ox%K|q5hlmQbPvA;e*auB z`+8LjP0npF&m7QPbU)8@dQ`cCg4@@F!Jwmi>ueLP6pJDKtTn?0=wrwesEI(~p1 zji$fIV!b-snpycs)``xDvhz#Rx#Jm~S(#SSgmI3i%$2Mpi_tc&(xWofOGxL8CLpE? zWy3IFf_2*57$CM^qfBbq1IDlJM^a( zaJXuD*yp`BC4f&eegIz1(m1`>WHw%l@Un?h?&jiX#%Be12$|qYq`g=cP@k$bkBm$! z4Nc-Ov^k2Iw*_+zEyy-I!!T`6R(on}1_%UENm+H|@n9sFW|1={9vT+Z)8x19R*b%) zcK{g#lX9j2Pv#(Cv$^4R-J<;G6(D5OLSu<$kvI)f)=mU! zxUHODM}(5yIw(`0Ve%*n0oGiTC*kG6+_yrHt&wzAA+=EjJUMno)g-)HRx{h)X!6tP z=dS2UxxhdA#p-vnkLz6(C6Mgk0^s010Dt2*1eFJohTn&!M9l}w>lb&)A_qv$M#oac zbsTE7$ub)~w!}cK+pOEOP43vl(K zMHF1CGm!?cUNNf6wpU957YciP>0Cbdw^t*?&rEW?1gXnot5F!)&wy&{rcRpCN;u9{ ziP=Qx&k9gd+d*#!0JHY7=#@ug>~U;Zb}U8KP5C-fyd80?8 z$HCT3iv%sUWs>Of;q8F8rScca&?3W;WXoghmBrWM7)I0WyJS$@)4}Hy#wVg%Yd92e zoaSi10JuUu0kPqu7TW8!n6Lg(S1oR!ii%I}KO)J)rVtXblhyCLJQoq3cMGu&Zxb_n zz%TeCC;9qMF~9Siz!p#(epXH?J@)H9>3XK4DxRhZp>dnie5g6+2l^H4prf|B|cq(uzvq!!MtY-1P=MnZfvX_eNN&u_jyd3yWIz*}LM|K99$wj^y-|Yfr;m~L z@FLK-T({%~PKgiVtyun8F(ojx}&U}2ar9~Tc^PFe_gRbEb)SMhx zd;R~;zOYiv4SNgmNR$pH46;SgUG7$0oNpZv*qTssYvI#T|$~!ExVTV$iL; z&^tbiOhU%Q7zf&Xk3>X9IceGJDlE%Kj3OO!ZVX~N z?!_t3+5wy|!rH}CQV8^DeEh7|VqBlxj8?|{K)vfIa)U!9#$a-1WJ%D^0rS07LSuxg z;%};Sdx~pC8B~~j(cm9XwFOC~iK>jnw(g)~3r>VqhSBcWvnpzZYCTnV4Q={J<_cjx z8OCU;_`5%w-;-w11zT0OFx3xts+Xi(;kC(16a$#(%h}0~aUcipRlQ-6Pa7%)-4#}J zx|o~Sr(c(Ct&8x-a{pEpl^cCkZ0lb(QHJMuY(zt`97E~hKLjOCITU@y5l-dD_=KD= zStLdzRXQf+uyc&4gx_tw@}~yxt=wV5 zR#En}K$*H=)JPSK!0dyK*b}G16Y>{`{cR@4av1>cwqpcSYXh360A!jbi@YAd61*nC zZxyk0=yd5o9QGk6S?XecjsG?6BD4 zr{aK(j7X@iq?Yrmp*c5)tdUdK?hy^|Bo$+$cv7*lVT2aTZNxkzo2{kt_&$7@3dc6m zePcdJXR$~&iI2jZ5_U#w13;YEYXm7h!f8{u>j8~UfS!gna2?>hnHJv;6QJ2X;=o3n ztg>ixnyo=UA%<+p)&BmT#;OK=pZ--H&lM?(TBPOnbjXTHT78)|PSH3Ckul6Vh_2!uf`+B$rlPExq#9 z@nRe2C;p^+I|j-Fjg$3t;?G?OyH0VcD*`1PmgT7~12ry~2SLksSuGTKLAQgzxzE7_ z7XzoM7?_ku{I6_oo{FEymmHprN^5rxAz&(&%sQ8ybOuB4WAlZY4z#FS=Bs)k zjF{YFw_^vv0T<8G%GHh^-Tftt36{J8`htD)vUqGjv$QDYGq*cl>t3{`5uhV%&*pw! zIkk`^=x2l2$?AMk!^6N?WWD6UR5~6HPcR&(q>6}R_6%t(m(SfLQCXr*qMkS1Y-K82 zvP*RN=9&MIx>dusZ7o1mB^?YsY4&m#&5UQ;(FGW&jFs_9^MK%}lPCX9PqaN7B?^^f z_(@VCym+o^AO4tyJcwInu-&VAMDT@LDz827X&_KxAH8`ADBKb)T4O=D>GT@P6G0+b zXVFuaU((sg7L0GzgfIUhwkXt^F{ ziDV|J^0S|1lURJ%2G6_WkUczQScB2qayJ7-8%o!ULI6%g;vwuM4eDDoxuAuk**gov;?01}U6d;Swua}v(_02h^` zI!^aSkgnjgcSkD~VsK=&TT$;2G0yt7N1u>?x-5EV!4R zaZUU6El}jw6eO}5y`yuclC{=3qwaLS6rt0ihe*E`RmYfnq=J6e8@EnuXkbFvPD%Eah zNwd$TY8*{wT%NZvT(sW27NI`qC(ERA@oizw`hh3$-H9^>4qJ{4{F1mItR#2oeXsdSa8T5#f_ckk{CXhE&MHz8AnP^ zBy9Lf=eg_#Y*feYQ>iv8)XE=FGsqvB=uX+K{7v58owEvlgtyKbsUxJA4s-tnPNN}s zBTlPg9R^um+}d~wh>t8P2}J&(P0VYG&;Y{_7Z6Fmbt;`22eQA%NLV`b#W)C?q+K;$ z9$EwHeiCRubO?PWva*sbHJ!_$#7ab}-1|%|FWt$~QZ|zjTF|YGBVr)Ox;tI|(VH~y zO-w=wQhgc)1Ku;}m}zJnX=qw$=T%HeRZw$8E=b^>AQjtzXC^$JaGY_sY;1ac>^p2J0sayw6w4QVEr&A zrRdpKZVue}G%PY`QV2>XKn%3EP)S=md8Oc!>s1^(b+_X6kDVG}iE8-A<(M4q&e+ZI z=&*^VBV(u5h4S+VEq*MgjvG;W>f&_A^o!9V+4Z|OnYkpgiYZ`6cK zjSPpcs|4*qxWheZ$q)rJ3^lOJUdkENGqN}KTpQ~}S_PmIEMH%0&j6bM>2p){_n>j_ z?RF~0w6{@%TW(QD`WyzwQx+sl|DcJl;dIFCIQ~&NX@xIh&dPFdwB`phzNl8!I?d{o zKli3S`W;Vgk4ki>}vZ>1CMD^*H88+Fw;vbU2$0JIlCjVuBZxw%&kN=RX;tmXN02WL%Q2ZlQxt$q0cK#8~rz^g?IId+y4uULK?`q&}w^T*)+tF(MPLcy6O_w=BNnh7ylzDz4O*n+?! z)HV$;m%(tC)c1-bcT-6#oF;Kk7fD<%Iz6(Zt(|w8;v;v(4S5gp60~uSu z(1^DGxfU_3A0x@huo4gH5D?{4M!N^qfU)CWKC_u@h!qF*ZNiH|0$iIjADEIBO-FmCGF&xOzvJopyg7qsZ}D@P#RA}Ysqix6Ko?< zjmtedrNVjm>Ls$JIH1j)eY}2C^%KWVd>Mctq1u2pR~X0n-VCmjH4;W5v0;q&(W0|Y zV=Mt&c7P07fg!Z0ECcFMbDGC6x|ocyi(otyD6~xJ9RZ*KRvGNmlXK}{n8H(U<_G*| z`$Ucml24tdGkrw{G1SW|jwz%|BDl?1MGfW-%(FbGAD{C~40GBiZ;cEcMB@XsgV#kI zm^s=%LoFDa4(fi()@4O$D|6thh;LDJ`sy<>yLd2VPZt(XIYqIlZ8+wY3_d#Mgnci0p!>o3#TV*V?b1y7t7f*b>mLp zvxT7NZocru{k8-c9~#$UY#$?$$0k|L9F$K>#n*FfVnON{K3SV(SZ0NQZdsze=-n^j zJ;l6{KGvTqvw^!2Wp-#ipy9A-uK=ifVr{fhvi0QQ<;~@wOeIIe&Idb3^;mFzm>dTEFpx4 zhO5yh2XEfL>|sSG&Q0onDN zcwTeUNH>Qqzi>%H@%ujtyV9r%5=bs&8vCcAMZaDS=kTBdt-0p0IdfmD+L-G+J!dB-iKCVZ{l?&k$Yc(+r@^Y)&Tk# z7T_Wex8ZMB+YW$S_L!c>rXLTc@bdC_c#4toXAtgGHq`k5Bs+|hBxp>ljo$x=s7=BtY{U-9i86157|L28(n+~9Y z&6w~iVg@|84-Zc(P5vMCJw7vNO=N&DeU%+z7Kl=eceSgnx%dlo5;(2`<>UjkjcOD$ zmg)%;cprx9i3o0d&4$p3fSA`n)rP-yAr-uXpda{5Cw*#0Up@UKrVsDDBA0kwE8z5N>_zzt zk301o;BbJyz{3xir|+UW>Yb(hP79(R392^v9C7)buAeZVvdL$)l2<{R8kLDqx6Qe?6&EF(KW=)$iysTt5D6kT6 zM)Bej$Qq(r=E;;Lei3Fn3s5uwd&d49hYQ zFz`vPzaZ=OcZ8sx%OS?r0aNAW&gbl($&hL32K^l7j-kXK{wFtl69(Cm0XDanCj*BE zvoEqa;jfQL8G+(=vjtB8b1%g7EilYPA#?YGL}Naf%3bN`WDN^rd~9`2Ddwph2(*Uw z8qkr^{ukI2^bt#**H?%o3p>y0l^B$>T@n<50-!+M0w`e3f49d&+CC<^ zGycT)XX#8O()hvW%_0eqe0QV}Y5l9$D)GyF^0T}`-59#-z=Y>$KN$$RMV^}g~u!U7J zo4#sIjv8LTs$P&zfzGqs;wM{KpU|-*#%F#}O|)gI zceo}Tk%HeGrr7SZLi65CY6$N%i))rVnsNYdzUWkg4-dr~Y?{Ks{vwT!-CWH+MT9;BiUn0D}KP%FFKf-S)YnL*kx+4;jr3; z+0~LZH4-wA5nn#HNb&1_yyco&d_@s2nVt&q+$zU#k1)9;bL3Z6rrBy!eL@=UWx&3) znJmW15MbJL72_+U=m1@ zG>CSBys6-*gV^D~pPwCpgt#-G)_4yw+%hR2NebdV36z%L|IedJOxia z`FnrHg7-O{?bXe(H(M=ehx`1#S-GkgLfbYEZY`Y<<=x>>P61ib_2}%cqwtU-70)s- zV-#7};3!W_1Ix;&1T^Ce|DJh-*C2rt#1CZSgp7*PM>_(h`lXR;$6hsPoU&1a+w~XJ zlVjboy>CaMeA2a6`uXS=%*b*@c@;f^TFnq1+Xc3bt&;=TJUqem+10}-G9*5o3mwR( z$I%^3S<=vG9rRR!U|lm0H=h9tn!uHj>=2T4`Tpr?yMvQoo;bCiOx-eo((e+|^zW)-6}RhXWmF@gNB;&2=`ff@(f9|dOi46WXrt5V$o&B7 zW%$x-uEO=MIQBx!gNekbx}1dhO%CB`urj{Fh=i{4ED)0^2P(LgkCLdG5N z(-sGx*YEe;>TYBcgi;A8qTfkW!VLbzE}(J5O;5j0zo@ou!}Tl;&H7ypnGjuG`_=od zhGpUr(D?TGH~r}bPgdb6x~vX6mZbDiF>+^?7-g5WQ}^)$%7Zj$VQ995XOUE!fFWPP zyR@;hE=@H>P@U5eKjHU&y<)o{R5dcRR6} z=9pdrMLTuFGz5FB}HIufl8sImLX@A0yMCSE0us9^PG!xta` zA@GF%PRoRJBCce58EN^desC%JMXsy8s$(K%pm%oFk0i0X;R>=-7%|Py@tzb^o;InV z=qjm>IXyFQ>#;7Vfs18WcpfCzq7X?+K*CM4E5vRw>`-7Mq}ycmMwkmuc8odxF2PM3 zjTiw|#0{6|bHhz27th+{R|zrzmlfM&2-?Qr{N`KuyY$Y)g`{4OSMGVSa|cp2&CUg&B<-o z%^8HrA%Bd@A5ieeK4Oh)ZGFgY$TUK~eS_!|m=T^8#n+XI}SY6vjoQsivQXQWT4=$QwZ9j*Tp)tx8H!CX~)iLzK?-0O-(Tg_sxm7<8@_< zVq1m{sW0IZ1bTUF!8G?jEPYrnjk*@|@3AT`y zv~AkAwkMXE69f<_b-lBOPm|277~&>p4e@k#Y+DO>y`e9_7`^}`e^%L#H9vJ3Fju*T zuHxt`B`DQI-a*-FVfx~ir*8Lb0W-|7k`mMrwbd2ciU+Cc`;p3)is;d^AM-=r3pmeo z+L{I;HN$qm&<4YZVqD8nvot}xH+?+}NW)>o$lrKzNT9_! zSzmRNnmW?>KRB{VUnXvPFz6Fl;2IW{N{LtEu7FjXzZH*l+~yfHg~DN;{du)U=U)*p zE|AKfznq(oI7-NnDE&BstsBoWlrVyaD;@SHQ}wZ(D-gH8U)o2C1=ImRsB_Oi-+S|l zqCZ~%#oQE;7jaBR0EXNhvzrTJ+N(Vmc80mm*VGfK20@dS4rYFnU31VRoPvQ8$AM4! zcUK{48PvW*H8+NW2AL#KFub?9dC#%tr~wq=NmoK=9!B|GF+zO0GWpuM-QsovMO#z4PK#f-rVlriQ%}T&-zl=+(Si zG*facI=wc0^|VzRBne35Xhehn24tC__{H}1>oy`rXk6G2GBvxLXC@uY=tlg^b_%%# zmRLH-$qQ1TSqJsyHxaw8GWlR2zhTv zh`7xjWad3KFgzSOyLm{&9mpO6Qdk=Dv4mj%6*R@E9CDueP^mF9GZJmUNY3KdI`o8M zsFavFTyA|3jZo6EC?f*J90T*fsX_-Y>w|*H9W>vb(+4j{hdL1=&!|;|`zbZWOAYLL zM6^tZnvvL5yg^PXmIAq0uJYNM7g86S5~T8h{-#pCLql{b2%A4I0R*|l#x=;LMi;qN zkc)zokNhVcjLS}Sg=P0_#~VDl;922oEZ*dD_%ge!u`?Xpga!8NA`&_ME@TbK^;nXg z`*!}x+I*t(WjdRPp$u7Y;Xp2#V=yV31#Mff9ec~3*drEqoEm?}KM7s*JqzP?U!g9t z{62+7Y(cLw*2CFrou;0H^?khTu_q0CB*W%(e7vorN0$Hz)u~DBvcLKLp{33xia$Pd zQJDFR>4ls+Pz|5h) z6+ieQU9l#hy|?JfU9|6EO>c_8&c4EmjYBDX-O*!X&u|tG4ta&{kNgHL=z@2^Eu<-q z`yxemTl+iQVRH1+H3VuDK{GXNGI|adC25BkLz;5l#e)ib7{ zo$E>6U6}KQ-t3kz032-Llw!CW<#q4`2mOKDb=?N4&+J>1ZL6I*Sk?g9h3QX+k4@{2 zc_s-p3`NmmN$k?~m|u0<1p}PV-NDewb2l2~a>{l@DLtC)<$0AW9YmFd3{7G@umWvu zm7CI@oaXfwT1iVm@(UQ&sce|uM$-7RBg?(e;8RSWmV_GuPt2*r&dEa+cAHMho%)6} zweM~rl}&E}fU@J^tNS_7MOTY8q{H^{#(eF)B$hohdI)O#w@02bbjH`r0+~jwd!uL) zC+p-ke^`VK-|ZEHdv97%<-8BmckJrf8wg*(Pw*HSelmU9!n7pa)H@D|F~p}r%ZEof z*c8=sv@ELLZhv85ib5iKzw7=Kh)AUo`1{h~2A)BrUE|3LpK+PZ+f_;%xJ8M~{dBou z=Pb@+dP?dDJ!T&~>HCi60-m0MroCKc)s;xa$Th%G%Dl(dEm={|l+fb;R`$(7eLCuw;-6{ESE57n0>U@oJF2s+ zuz7V?>rm_0<}j3}hXhfB9jGAtiq+;EB?Fg;xZOQdS_2fy{*%!dwTsA!aNCqw-b#1< z4D;%=tcoXY9wW`~DBo3I{klQhQ)uR0`Qgcq zw)!JxhGDT{S8E!49kk|J{dP7 zp?&l!jDsdY7y|6GM60(*ps1@uBIi>n@Nd#yTDp>S1;rqcRH~`~=`=|EMAsUt4E0f(kjsN20d2f{Gei+@Vv_wKN~RuKkm+3>7Bve(%bb z+}-WAg9=m^g#tyND!}}M;|WeWsj4aWVL?m z3nssYkTxjD+0c-}##(h;iC`lpk+IlOIK8PQM$rhTuLK@QaM{e?-nLhmme8)?6Vd;F z9rbut;ipmLCGrxH6*QWb`BT9i! z@vFrlm6BhVTzD8p|2uxCh8+)5y*SH(i`hExxWGvp+b_fg|f&j2~ z_KWPGXCRMb$aqP8%wD<|uM>XlpfwK3FMH*9>9U1fWpbKJGecj|l`;%PMa7Htt8-hdX*`RFQFeU@`JLju55`piq#8 z_IgrBcdjf&vZK zV^$)eLnk!qNJUUmztqgs@Kc873+j&>#<_e5BVyp1JufRo`@X_dbyw-&JXqHHNj0!_Pt>e{SU z@(+`C5r1w>8wbRLf~U+43w`!M60O~Dxi2K{N;1ipc8f#KNH6J+QS2~Og(%aIH^RXm z$YjRzOW8G!EQYG+AIt>j&YVi7E6>2CX!>Lg(BWP5!|LrKlfGl%i6#b78%Kn(s*svQ zFl=rmjpFW*46eMAi%Ywcmf9G)IKiTNzXIwp0~o*!!gqoRQ-=1p0(qayJy|0wZ~;l@ zZ&-AF_Nh3fyW(njXDoetgM9ZY8^V;X2#GWB( zzS# zZd}rjOnhHqE8Fh7yPU1rGe$!GbcxPPoMtDxlyl?@jRf=Ix&fG>Y>c$$Z4r?)e!ues z^s0x_`J@Z3+2b?&#AlU8+Fttd%{3f^>DQn1Ub+}*-dV5_c|P^wuG=XeNvF5dZod(u zyk;xHE=(p!^*p7P?nB{)Sz0@2RtudU2#Th%k&>NbsWP-0D9#!CQos1A`gD4UuSw$W zQaw)vJ)jv>)XtxuK*b@zP8w_W@UYDoc+L=a>ke4QcjC{8@b-DKj2pT*X+I#GONH|V znrY_}&J4zO#kYrzJ7h3`>WoSaNgZbd+2)Ny1y?;^OuQ@af=6~Q0D-J)0oP%c2A&Zy zkkP#}C^Q?nq7*O&$Pf+7XBd@8p5CdSFhnVob-D|x#uC7Kz+%Mxp837wW+r=mTm+gf z)0klf1gz7rHRf@m`b z--qDM$p89aEf@^|TsPc7PfGt(>vfnEt&B|>sM|c76ET@8g2jJ1K@OB&(Yd!A({y1vw>{NGI^kBayu&lntugq zx|}Z<>;H)$`XD~EuQ1H6{Cg{DRJ4D45V;G1g_}PKa?lu6Ki=_3bu$qn)V>>OCzi#X z|EH92JqX8L@ssS%q5q#A6164)ydkK~Evz%JuaW7}O70vTI>T8(@@M{GAAIFk)V4$q zf6o+zKfDBk);^0MdIsEGS>}L*O086xtJr0=6W3L08Yibx-kM2~2 z0s_>od_IOIP57kO3daHj&*uQHNYHcaO9im%#?PY#U$26*o&y+|%7pwrexkpssMoId z+e)r_hS0(5#Hz2UD)%ndaTp=Ddkqm%;=$*T$q1^4Iv7=g-^UX-I}x=7rQ#*1VwMWqy^Hgj z>ikE?pi4^ySz~>MO6|ee4vPn}qsg7%)I$fn1?;?#1m*c_$!3^H?S#meHK)0A%{b}C z5Wcbj>aU@G?aux zo+4CDKwc<;6Ij96-1SH{&XLjpKdA8xVN#C(X$)I)tXBd&W6fxp&hfMS+_?lS=yk{i z=8YjiC=uS|ywdvSw%e$THd*ugA)aV=0R3e`|9Iyr1>8ttlh&kRC6q1HniZ%=7al zSYb2ULlL)+rUH{T^pZ9&vi#{}e-Oq}(>41eD3z%H$oAJLE#r^z^3(H$e)~w~_zf_{hqMb}*hEKIT4Flaga`|_lFP(~#q)~JjVROn{VuE!dcJF7K5&5<< z;(Xu=1#8f`j6_)n-XNgy2**cW?4NfuRnecdx0*oskoBG*eY&(%pSv@R)92;KB zrmho}jul9V6wpW?6Cfz*e_LNI-maCDMN0ZF^K2(PE%U&KfKhT6 zpBlmCic`bsgO}1ktdsBoAa%Z_(eoR@eJUxf`L8J7bF&ad_5e8JHbyhf~#=aRi!CsFqi*;Wi>fs}B)C?dREfCX|?S zm;bu!MnDH^2##RNnD^;ivfr#h(|N4(LmkR6Zx-gNo#eVHA5YwK=<5R<2sgj+d-8p+ zyUMXMTWq!YWvHY?4_^6cw2!=-u9dDDZ2n|l^;QwK^GJ*q%*gna&arPN8Unc<2vNsM zhmRiH0wLhv7G6k4T%KWD^a~`eCNoG`N}h@z{=JIi2b~#BJVycCgj*TQ579R%944p# zy^6pE`LU(w>HprC3+eN(#bxCGdle2KwEu4o$It&goK|j*P!$*}0&CKEh!erhFus~e zw5?fkI5eFBHQRHj6$LKH=+T5x_3YBCXyXbZA8jEj z6+e%+|FO3G3$1S$hqTtT7vS2mMIMNgjcVWk`Vf>F?htrF)_Wt?Ej~R2BwmFFHer1} zQtNr?>Mx$nOH68GDuglND>l#Lu;2^==t*E2Jouf6aDgW9uox{-9~2;e{``PaC|&;c z&y&$#&aECqksUagUsuJ=%9y0z&J^aTH*%yMRtJW49iQzs(_n%I&cMs;H*&sUC^nO-zN~bgtZpx068%4 zm#|;SP39n~Sj0J;d>Xz00R0K}jfndvzeoTNmko=WjxQtG;V0U!g@H&=ht~Nlt}Ooi z`Ad;yw@vu`w;nNgQs3OSr!C|G)27GX&>?bz)!m(TTAx-G5&ya;0pCr+>3mMWgyntq zY03<=&#Mt+7@MgEvIjs{x*{Q>WE$r;4LQK+j2+xS3#!B;$Up(q7&^CI6ZBf*LO>8E1VA?8 zOm4Z;U*OvWmIgGzD)K?nzSUcXJERDy?5qXkJ19Ha&hMm{(=>G=nC76q_xa8jRIon^ zY+$(*uR=#}=K;5dklzX3$PY*GkLbnlnK!^MT?c|+iM`eVl3h0YqHq=n~uk27K~ zFjuG}IrYN*Ug;T)TTz9o5egp=C{wLd6*Uc7nH@bY^qL1$mxgwnbTkbstb%-MAg&E{ zgsH-n2V{&W7Bx{o)OqNf`k{S8m~4^hI-pY%dp`ovq7418=K@;J_1meiZqIDpW8h%(_jC3f4E0 zn>~c`Tu7LzeV2%~=J?4#z;z~Mt0Xp=gr3B zLRt=O<1x4iO6~olQ!uB=B*KxPL?eLM(x;;)KMw>`2truz3S3Q@mPCT^_W* z<$0YVe10c+bC%RLmM@x1v+~Hw(vhB53AnKCuB`PPv^!S8-rka_pg+fe)zum=IO(2a(sy0{;MOsj z!K+1?pGF}_?XQCe?Sy~x+aTOXB646FhiN+}B-yYs&>)k+`YTwICaHZzv1+Z2f1voA zOp>->U1-*c9r_B@Qro0#W)@gP(cE~Wm20GLd;q#PPRSW6|3kQ!aj!wlCe@rI?}u8n zZ^sQweLruiNfem$N0&!8Hag7*-g+H6GFLLB)=Gt&b;q8e5_G3l=WU)6wmE2Ah^&*| zl?8wbu@m~sS`D0K+`Dhkpfh}Ig3jB^@17`GEZLi`vGr!bdqz?A1P} zZa(`PIZ}Etc&H=mzbC0hmSEoK%T;#~zZ(6)B5?WoP}8i{=3R!t1m?nXHT}9B5I%di zpj5|?`&Vh^4(N;E+;MZNHs;a)Nj%a7n%a^;*HWLZLsltrG%Bu($^hSUiUXRT*}g>O z{l;uR+M9Q5r6(LpPnrbVgY(pcynPqCjcBAQ+y%!f^tTLu9+ zjm_?;%72;?dU$GzH7*4SC8`tJyiedQ2hDiO>FuZylO0`D9~E3!uKxlLQ3TUQ-F+Z_VDOL z0<>Bv*)e{3yzHZ}6wpJ$|G)O#jJK(_yEy97C85|RXoZYYBJn=A+PQ&a7h@eH9qRD& z`Dlm5%T=XQV=pOOppPvNB{F!W(6SOm0MGp8Yg&a=A?OF60AGf>Ww5vz*7+UsHHKXJ zp#cTxJHy`W0e zO^{)Wqv8R4UMHnrfZwHr>2Y&=c$E2p*;@341udyCf6xJ1$dW8#o2cCJm+D9}0v&NV ztdmTpG52KT__BG0MU4puujrXCh38?rF|H zH4@V#1hVFuPW6(bvPJx@%)h~cshlqm^xd5>)y^yVc&XU#5O^46r1zYkXz1oRAvDK7 zk_)2L>#Wz28&ty#8e0GgoyH-2o2WU)JajMgSc+GFqaDm})L#VCJMN&fyh6u;^C+XU zy5r<{7tyYBbI>TONh#F7!p9uZiEQvwB&o>coIQ2buLwF0hz#&3U_h+_|rz=l#{ zN1tQ4wYcL`H_#>3f6KL4?LLPtW+W%I-^WHyJr(@|KzeT)1tL~ebz?060WioE%lvWJ z*;_C#@fHTRA3!m<|J2+YVE66cFcObEcBtY#&XIdd%(AplLZ{+;9ECS8#2Q-7wCt^J zatb!ar0vlYkMfZ}GG#-~edG@y%kQkdRL`&GNV^>c*0cuDYR4~=AXLt}d#o2w8ryx* za@O}0$_MgBk+{1)aGbBdrNf${PVUq1^xp9GNPmheRtc z*t@DiTq~4J_v3}plOM#`Y(6Gwdb&``xdA4q8Xve=kw*MMIj982?~ha}jP=RR_lTH$ zj=$!YsuFtIs--Z;5lTh0ak=())4WBMvqmkM3oL8-EYSED8isk`usoT&prS>dZ3WlA z+inf66HX%-c(B^wRhBp`i+VB@x-cPV^L&R_o=Z<9*n$f7Gl*E3N>vSl#U^hTKea$+ zahq?Ip?gQF2Jp`URjh&@vW89_aRT!~A7OEaLoE)T&olMj&(KC4Q-)i3L1wg|^P`{UZhqreeBKkS0w%roU+Bv*qeD;jVHM{j$>K(WrB zk(2ba1AJ9noKfY&WnP2zwaDXi|1|e>0qkH&pZvDH-K^RO((_cx!3+23$e-fd`Vj1o zW~&UDSojC>)FK{t=P4X=3K&Eik?xka)g4M(0y`j0(H4vK^_39Ri+hwSY(( z!cvzY=0Lzy5^e{sNTM#+fdZqJpT@6wE&JTqfF=jERw^e5@HE6TlgvYJKIMA8V^2B z20MW~?~46!VKYI^K5iLm6S+olVMpcamuOd#`UDJcOnRt1^(Gp-$GbA?n+m%|4Mox1 z*Hgw5(b1Ek z23=$9-e%wL1n2v2bGJ#kuU1?VSvuxMHU-bpn$bXRVK9 zW9AcJbWY&quP~x3yWgr`lZ>KpYA^%>=HBPK1k+-eIBP67Kr<1g$ji0(^UIOcFI21o zHhQUTcx&FNB4WQ8es?Woz1kImN~7O@UI2s-0`hgs;K%MOC=#jPuju(!1PO0VY9F|% zeel@2LNV}I8Rn#k88uyg0~G2Y8CjPD(f+=%xIV5zm+TJ!E1C2jS9w{Vsm&EVjO*@I zyie(^$GLYT2~d+=QfAi;2>V6S$YjHL2@B7$qN(6f3yX&rPrK36!&GVf}3aAM^ zpKH?(EZB{p=K83qx46slpCHfwW;;*kPygn3G9mI~8^-12AfD=|%7ZK|I(%jp)I6S3 zOn>_5=k)smEEsxo)V;7CZcjN`WWD`%u!>oCho*Sp($NeY{M2Q`=Pag#*Mu-oJToqj zKOmY)uvq~`*?vLpXZ@JlN**)0jiS-FepmfgchPLxm-VrU+rD(6*O+~(=ton@?(;(v z>fvK@n-_)r*jA2A>U4t6RWR|T-+C$hy9&kb z(I?VwiCeh@{__9!Z~Q7WW3Gq6j=Q8E2?X|G`11JdgvGWdJ0KwIhhtK#5~_@~!P^eV zmviTF?iInGVGQyh3tJkEE%pB>G(5Z$w#DZ9J(wkgon-nyWf+E2kJKDJUl|bV&I_7q z9+O@FgFOjx)QWbz6R;V)(rz8*mpTyQgFJIzn>Ojl2mUZU(N~cx!5jhsRCxR>>pwT^ zDk^e4F>RZ0G&9PsL$LPoU8Jy%se*;hj54a`1!V)j2G@rq8<91YWehfVGv&ic?#a7Kjk z;hDqy2e;TD5jCJR79aXrRfPG@0(8Cgnx;S4^_!yokHts_oP+XgjhgIO^ikxJkeO_R z*iJj>Zq29s-&q`E@_VEiGi+EHgjP!xHFVn+g#P&t+YQ6jY4XmW$y>(jw;7z;Ri^zY zYID=p=I5BFMT)T$JNw>k^SjwVl+LvI?^RO=n|9GK#fdnGF%Gy>(6Cf3irig5Px$5! zFLj+RZ`3Cu7xm#Zn(vPP$JY>q+x$%hP*VoQ#%FBP{i>z5ztjG#NG}$?BvbR-DuLM_ z{si>IZ8NXx>9{&WUMSu(4y8Yh(HFEL8J4PU!3F3BO*n|DG*1|khc?5hST|~>M%%@e zcl*xu!;&8s)n==1vkU(r5zzKMFCSijen{F(e)*c2{Q}A7t*$WZT*$>QQOyLMwZuIXl z+1?6?x@9g*r6n96ZPs$Le=m zlg0bKt(1-^d(yJVzgs_PC;S5Yz!s{<@Hps^!~Fi;7Y+FYyv1Aq;EuxpTD;BnURgSIw#&1KhS}Hgg*z>K22sZ zl<=P>GxDC_{tN8db+c=_w+3h)U)_8L2nu-5eXOB&gG-iNz@e3d6%C*)c$$_za*jmins1 zpHJJ{J7-h-Gxn5m$0~Ba2*#XHK5}|y z?S8=8OQAc_Fpimp9EV|K;kw5ADlX8C=oWJ20<% zpc0p?UBta$2#|)RA+5_SMSn_HHn&8%o0%J-B~>44y|SOK6V{Ib-|^Ya;YsjZF(|+^ z0?c?zxmc?JRlH#xuJ`sN`?L~egO z`~0d(11vfeH?RjOAJ(u3>VWin;Dc%hb0#A2F>lyJ1k8vq`$L(MEq3@t!!zlRI@?`> z0(1#8+#96}+?Dr%U!Z2W26DMFSJ(w0N-B=(3Gr5mAK7Ur#V-LuP1=IrK^Ftk(qaB1CCcXcl zD}82txmesxrao@OVpgyodaib)6sgOqCQDUZcO{ISA`E5J^p7{Pm^)eCd zKbmcQ|Awd)!Qg}M=0&Mhz3n(JkV+s~p6A_bem%iBf4`jb=((j~s$B5m?NuROUxw#! z)j?Jm8MK=`K^xt=1qb;T>9?@x%};06B3QBTjU{gqX@6W?%pyb`>ik~LizM25l)l;9 zVdb`~jf1zm#_Gau$x4g5>O#@1lj@JTjymc_{sF*XCc}l@_HtSz{zGos6r;g9N)e^* zViHFlSG;-l{?3s*p<}JcDN!Pvq^z`!6+q~JE10^M#_W1SlCm7IguidG(qzA*S%Cfm zkv3t^ogFIyx1qX{9Oo`vrA+~A^!N&(EGXEk*+(Pe(JcZ1NV@RV;FgdN-`OVJRA!rY z)Q83NCU0Eb6ox>Hh}I_LC`#c8PTOS-iG?uK&&FrtUJ)e_u|5w9KuXIvQ-(<=m)HOi zEt?-Zt$8Cf=9|zEvF2z5<9E}*RAaoC2L(v@Q%Voa0!V6Zbhzr&qs=)!6n60{s7hjv z_6A)VZ=$%Veuh#5XoE7?)L;`UT z?J?#R{z0I^Gz3+CI4mynZxsaV1O;Rpzaegwqq;n{^Jh?-7zGUmI{f>8rjstWvTV{y`&IaVH6@;;j#Jx82hNz-0%jk5tk(ci=$nCst0fTZauI`ie` zA)Y%jF^M+O^p)}v%fRQ3Mx6i7M2J+BAbxipL|lubrUwMc^C7LUA3)Glz3RT*y%N|= zg2-X&eUr>TXFwDBIlh?cE3N>czBYMs;OgfiJo1GAr}%ai0Y(2f;U%nt4=);^U}O>z z%~=TgGiCcTXl?&9me6vT)p#CK_N=eaXCv0bjO@uv(CIA(_bwl4s@P}v8>dbl7sQ~k zXzIY!@D3Ut4Q{dPW>Od0(qPRo^opHbZY~ z*+1}ocUsdRicrO~nAY31S6`6STOV1OA$ec4g z`aHAqJI7=7zfah9glpK``3vNaYS7S8=<6{?85`e@;K>K5Dg0N}T7R|ej0~l_yMb?F z=)w;a;ccu4epb!NlsaskD*ik)5*1=ki{oqbM>Y z5x;>{X{gNWWg+Ph#@vQ7ErVte!KG+0JiIIzo=b}5I_G9>VxATGmq%ysJ_7n3UyN`sK!BS$$j)>S*p|heNqxLbI#-u)>T`0bi1~M}PF!~q+dFK1aMUEf_N&!oNoH!73=1<8(p$5j6u2p&%6XZLWoHMBH(I5UtSD%-A+1}PsVBV$4)2iF zQN&@p7riBX+Rw6gtSAa?Dg}!$UQfK@zou112iK0ESg$%YX#06~PeW(4?_e7!=oTLP?{I4&yARVaKmHev#W_XAaxl80ODnlyQWPHXikYIUoi?(q#mqk^4gE7uKLZ4z9 zd|no6yoRMowNtRjOk=P(;jpIEJu4)?a%WoIK|wL663p}bGW&%(g%hs@8sm+}bwO=a z8jo9wFTs(oSMgCWV<%e8(WKH@z*|dzxV^k*Fmn*}7$&%;?<_Pg!0qNvpM*`fR2P%d zgQUWUVD9reuO!;|coPq7CX6d+;dPAeI}zPO3CH3W8@(>?w?2NV)bRKDh zr}m~bq3(LB+63^rzwe8s($XnNU!!F$h7|PX*+JG)Tg`r;t?>TC(5v$vF@9f`pd&hXuL@8VMHJ#g7t&5i# zPVislRp+VNx~-p+qXK@`{b=?```7ULoTTtCw=5<37i6~^z0{xXZbhvL71+QH51_j$!WP1YCioJy_K_N?y;Wp@k_j}Q0iP)UL zyRrP(Q_AT2k(#3WOHe%a+7g{6uO{)8_=5pHAlP4icP=VM86(mj;hrx$@+5gJCxC?9Q>V|rhtt-Bbv&j2fcWz_*(Bph4 zXM`wpR0T6Es4u(%?cb#MvrU@Rj}rkO&h39Ol@%{7~-T05y$S5L6i~aYz>)AG7 z^?J^CPARS_{R6<9KYxX!ZThxEwnDXj;bo+qxOOSCG+&NKvgA&$$e_aaF4pX>hwJLR z2>a6>Qi>TAx{I%Q=~c-v%W=$|iQqVM`QZ`R^wD$L=f&SqzwRI?y_0(qsI8wWWpa00 z(+ZjPIXBC=X7XIoy4B)w33QjV^89`Cb(A_UKOVAR2qn(JMXGPzx~GMACMdx0`p0-!URwAD*92)KhK*r^*m5K3)1Qv%Xwjcf?U*Vys!E$;cZodos5%zBxx@}C z^C-|AnDLF=d`EA6`F(~CnFO=Iqt+=IArtEM6op?k^bMUtTaZN?8!6{5zMZWgK|a1RKE}VL?9Xc>$y;700B%)f zbS|j}((V!Xg&(6>_>W1~l#wGTI9D`n3(qjUH1?vdImV@gckKZcwd zbAsQDdXhlWXKu1PqH8>XxkfjMwu-zd@ZWnbRYlQJ9tPSzA5LE<`EbdA|MwD0@JlF_Ub09OT~)xFOk&R zg-EsHni?7O%Avl?)i1JN0G$kI*1#Q6Ce>v6DbQ*aj@KHxZ}D$&Y3km9cd~GfHd$kN zU*571Zqzzsi&uZNMMvS8FqJ{MNd6419~+}9^n*x|G*|gca|tWqP)9&>22gu<07%jJ z3BKJ&&-y0Up8?0hLQKj7x2H~MC3~}Az_uV@V->mDfWMJG*nPDABrAYn4V(c%Lc-+z zZU@k=A`x|!o~zZ`mz!;>_S0kGRGW|;1kMiaok+d@9d@Dv5t_$B~b z+`)I?GivymiABF*n5celkHJbmJM;ZE32fm2QlcU63*$ZS}J0uLY0BpYQCHXrCK_#R-8Tvzy*EmzU%eF=B&ls z5>NtnL>wwoL_!0P7gt0fVVmph5VFP|cwcI!^#DZ8IER$eOd_YNRBzkfecAw@X?WWZ zCgD;K%+zfrH?()hvA*qey7~pYdYuMzLSKP%oQI0m2xR@{V~t@3&zYJSpF<_q1vXid zun;Q~a-NctXfYhYa_WPKrn7Z{964z&JTYV6nHHE|TgOK%5!h3~>1MQogtvWo+tm%^7P9Ow}DuBs}JnQhItG-gKv)T(>GH8crf#G9y^h4a6??NGjbf`>w ztM}a09P2MSX!lG?j+@kmWVE2i&_pI|_h=l$aaq3L<~Y)*o-cC`Rr~2Y`UB!5_mf4!}Z#c?jQ~U|;ZJ zEMSK7+~GfLY8dbi<4q7Ps>>idC&h0j@rc?4>={hB-bt;*jQ`FtaCbD8OY(GB=+I(R z5rA@))%e}b)W|o~LjfrRt}Khpr4A2kD%pnKJ~<0A!PO6c#+SjeO)mB0cfLcK%u=>h z`76(OkA6SI-njqvR4_kfn6NGKISc)bF?D36zts*6+oO87JL^)TXW*~*# zK@W@Q8mknL_EZ?zIA63H&6hyiJl&00C7p=*|wqv)4USLN_$Qe6Le1VZ~72wpsO_D8Hgk{5>As8gUgrO8s0&RalSb@pUs zgUL-F00JCOinHWHHu(|9&SaC0&0Apm4kD44b+~&}S$E2;%4sUpk!{fapo!8`Y)Nts ziFjfN@*RQ%SA~GbKip3e?sLoDEX0OE@Thl6i};%3Vt&`-;9z$noXiP{s|b>mulVJj zQlvP{W{896@7LpEfWPYwZF*>u*ZTLmxbLr2y?0AG{pO}>@VL=7njg$lQ^5+>vkD@? zHgP+?gMzv*9OPWT8*d~R{rSOI;SRFEm#(JR?Xu$!GLQN^y8BfhztI8!8EB4%8Oz`% ztycH4FcrJg#@d;pg)-ZmKst2_a0`-PXMOY6qbiJnNiu+9zm#{@Xm+*-uqyg<7i5GE zRjg+~p;w2(KJd&zFkuNSk*NVsT#aIxZL6}sP!H5>u<2G%RRt1KIlKa0bgdw#Sf!~G zf*>4~fV!lNtZ5{jMPq=zPxtPpmE%=damWFew5K55l+)q;QraD_P5&{Xam(6N=rHRe zPqfa_@1-}HEOwCI?U>WfagjgySs57|qUGVQADleW3GmXlA<|?8Y^8yPe}axX=zS#` zXa>$9BO%a>d-@i^B-q3$E>IYlm+xe02C20^ZRN8~7NnUUUHBgJw-_Tv7bMQ8$aVFQS+Bf1?!8sDpt&}oc zZ+Jo@suL_umb?=JYMi3^66yqSBNqy%cxmPOd^9mnou6~dglcI%WT_?F*t$~^&O$xr zdM?4dl7tlENDPWrhoj-2-o#-ctpU3GfcgJW!R~8KjydtY-`TyHTZ|Vnfa9^C<`q}$ z1q#syb*QcvlXg? z@ib-Y05jYRD=qXC;S=iEUsUL6ysURsAd~j+%Pi2Rn1hL2Nw_AFiTIzJ#VY!U4e2Bs z#-Y!ezPw?tTKB}cE2mzhl6`@8C~ZRoBC4nyH)*{il87GWR-9zosktu z#3?U6C~o)U>EE&lC2dOt$_>@eBTX}!d#$&A53J5nz>w#m^6^a9Y54m7y+A-)L>?>Oc%qyAimnyhdaMJ?e+?cp{64DM#pm|KO|ST7*Hr#EfdzCMd`6( z64*7>rSF5v&2cAD0#rWl7cax?nq4YBZ%6hegJ2t&Wv=$EO9{v{@FA@-G{4bjIbSC{ z=~2n+C5O$b0oDb_+Mr`1)O}-=W%Vt$#^VAkpV1J~jhnD&+_rhbw9(tTD~1Bumhi-X zWutWywvzI1@AlJC7Jgkg6fex0{`8B0;crx3gU|Y-|EIn8j;Feh|A#ppn;bJMo9va8 zz4uOZtg_2UR4O6PK_q2nL`I0LjLcH@ij-_66)DPUh{W&prtft>?)(1h{^$PZ_q!hT zcw86fI^*+spZELqdcK~6wAU1|vw1qp(w zjE-=j?mZu^tkDkC+{^E?GJ&<=jO=QR(n?A;8BWu^rs4N!zz1<& z!@RK88Ko2TXhP!0L)v#umo~@pTB0_I&0S#HIUtmJ=2#vR9wVw<#2mT}+%c(sic$EC zZcS12QE12|&of0A9>zp`(Dqq@2c9L`662S;1_QfOQ7}DtlW|Gn%_sgtJwP3mPY{>* z*uzjiX<~M8C|sTwZ^C(|GltZn(TT51!U=X1zProSz-jSlXGHzVv^L2}mx?1tkEW0a zD?6EL3V^NJPg@_3QCV?jsbESMK7>DM2J;H*>KLKp4jAl?I>p*z^d-tXa~_V6aW)mY z9TGAC)!?Cgv2I^-q&mUz6UPUT#Fq&Q`!p4@Q(i+I!8p!1TIf8f2e z*fY1h)?;t&0DrK{Ec_y-cq1y(>EzEi1J1i%w&G}9a3qx^rJkU540uNUi?_ahP5#WJ zF+o$}zSoASU4mmAF!tl@tu;WDGf!pJ$~jo|IfG8~WlsVGd0k%6x@#jO{NN`)c!fMW zcQZh!%tg|>>BYxx)SR*3Dg|V(Sr>~-jw1_|Ri+GVj87^7qH&|o%^NcLmycKaerQ^o zS_oN!&V)=>Qx7Q+&KLawLgq$h*N5xFM`zXB4nbs^nyFgw?}`CMbAH4@gVYBFxK^pS zF!4??zqidUIvw3cLaSX{Mz@CHNP^oN{N(q&?mFSXLt43=67~XH#x$BMwVyPq#mqmk zFAC_xbIjnYgyA{%F*K(R!*_f3wQF#TrR=IE;|kLZEwRcKkVD)ItJW%BU@Io6f!jN% zkN+TXz+A-e^VOnLfzr;fsQ+g{;NnS2bw<)yt)gQR_!#asS&!R7>Ck*T;xfO9d6d(| z^!>y*=f9QZ*Q0ISZCVd6v^Da++w7}4m6ei@BF#3SMC*m5mX!)Cz(>ik35=7Zj5>j!dX*p82Z6e)ybI`o$9 z`Q*=tu&!ELnvV4`od%DE!2-O`+v{vzD#V8%=|Ez(yjULf6Hq*}XqQzVw?YLj^8E!0 zt7jX7vYT~uDQiA{iCqFZRo@{G7rKKbo4|!0u`(5yK2JEn0Mu`hdq-^9(VD>uldMs$ zerm4LbQh7y%Xf$zbY-w5M1^{t!!%1Z&8N3Mayv4Rinjm0nAcg4|A)KBXm; zEgQE$BRlGv&lvWYz6yE_$7z<9b)1ST*0&kV7BZ|B^N=uNbp`2eFMeVN_P386>q`;Ad93>@C3iK z-vA;|0vhK9WetS`;mFqF0G65|(L`%`9p%+FZu#xiJqr$ni1i)_&6dAm0d#+jW_gNp zYO6>FktOOaNUD!p&c=L=Hq)(Vf|877`_17`EXN{fuYdlUP+bU=^OcmB6-ke2-JpCg z_B~dAjL$%790qNw3ft4w*x5MP1~c7R9iNs09M#-{bt24LYEn04e(I{c)E=SQ@yhIQ%&v$%O8vDH&1i=>t>s%!UOLq+y*6Ql`C6hHb zndcA8?AP(pGOpqv=A}}=$|?Z}y_V9(U%5rhIpduUP4e%3D_Qj5dDj;!Q{RT6vME38 zUQv6;`lUx{Tpd`)J3hGx1GV{IC7>a6>U4k#yR;*a3%P>b!=?-l}8n4(-}A#0e8@Iu8+x6YPa649GR4Q>rid&3u*#P%5DFr}52N235R zdeCO(rjEj9*|}#^ppt^Xvex2K=O@zHziYxo<=a zOA|X_LUj~n{2k*aLEMn$t5_sj|8wY$Brs_x4a20W<1b&{@!CaoSu-8nvNn|wzI!r~U>p8C%?*KZG0lfG>3zjoy(@Wi~x zHD;`@^wv zyZjgQj&O-^(f&VO8eZJKefl`TX%z3prTXOhk^>AsX92vr9vUXp^aPfoHU}c60Bn{D z`?%uM?5|D`ze77+J*@*44ege6dFIHw6#ho6H=wmJchIn8O)(;(>;NPs&sQz6`B1prhM93)0JSS8)SpVjbTv#xow+Z$ke zqRHYc&~W@L2ga=rGc})517WBfD0>gP`USj$`bQidp9F}Ta^fBqe*L}Pm+!VlH9-Sg z{5KAu7C2wHPU!Bv>ILY=QJ^MizIh2~i4erW?_HF9tcTeaAaO4``|hb6=-+?}J+|$; z+|7aovC0WUZKihy8J2q6r#KjLV#1oT13A&H34RZ&t2nGh0%0m2rP$0<0gtF zb_5l@@~m6$K~~*8dG=XZuO&2qLna&0uk--eWp$t7!R8KO^&PT>_`D4$@(fTB5`mE1 z3p(H2t3QtU@}D%vh?@83PA9lQ{82(Cd78Wo{42gCv6g|3=*)N8!S&B%Tha8dco z%zw3B%5VM7%cd00j}M!qk_UkhsA?r4urGf)N*hc+-rj1j{Hq?a@kmS?bkw8Iu2<|; zvK_pfc&0&a62OTjq{dz8tOYY^*v|=P-Ob3Mr!tA5Na217d{GapfUiJU#F0p;rc(pl{ieiCK@X5> zWRSbHJvjkPeCxD|s0FHOre$$J4Y;P7wq>)74P?IUSCp-Ie>^te>@EMlU~h&I@`VrF z7=@t_qWIRrGE(aC=#J+rzn%&PsB44*tr-fzSgZQ%oCsb*>NuPo1-(qnMKB+y-W+Vf zmWzrAj{!j`Cn!0J(XH0PwkCHO`CdXtbl)EA|2urT*&`Or`X6z`iat!zfZ&R#SHSvn zhrAFk)y{3pO`aFva+YsCP!xOGKhCXbZXi1q+*!PC|DL>VL5h8G9H?N453jE`{`S1N z&R2DEPi{Mi{*Tsaly&jE1T*5xhc{2P2Ue&q=DvWw%m8j&_+r@_ZV#erMFYT2qIrwo zCt6fa{aVGT`CFgA$F*}V?_p49UTK4j^s^VvJP`zSV(=Zjej?>Gy+|@A*f4;62iI(p z4~6x@r_2+T2YmUOJrDY_d;a?G(BKt;y#BM0}Y4oZm)RM=v^6onP;6(=NA3PNjFucUL%`z`%`80Ak*khMwE+ zn|gL-nDBu}V8Fpol3@LBCIhT22*}_MisP~WAEBWjjudv||4kmFaV6+*cG&?!Gxipb zx)gE(%s`wu7)MXqFT>0~8IX$kbzsN~!Im`@v_*k{Vx$j55gZUp_UqaHq&cVs6YJ}b z^nj@U*ueypO`kXWM^w zh>1@xK@$yBFt(*8SdkGv1K<-d3lpeh5F@z+Lc)o-MCXP#y5fTo-M|UA~nm}>y zsJb|Uq6kAkKDG3+m{YdOY=%Ww00!cK233VEU9)zF`u*JRWoH!n^9I^jJE_pEO-K)u zfP|qNYl?V-k#a|I*ejC2jld8}G9fq&uWUnP0;c3BeEDjmL_A{pT64$kYEa$vDvUic9>c5W3hLt!2}3nHbFi_@(0h}W3{3fg$2;Q6)m zPTFF#H$}2!37TwHL6IO3m?BP9FZ5)yfRn@MLP`{@R@LH80qL@EU<6QLNwaC}0w;EW zNBN@3ZN!xH3W8&{cnuL^MC@ToT+;~^zWHP#4A5+WKZ+bV?0f-6o4611BSUzF+c&1B z)zLRAeh{k?%H}8v1~0MSD{j>VKBaZ&5lB&11!nHj5lM%78B5cj!I}#Pv!pkV#K|$u z`3HSDKNgf6cOOGV>5nO1EZidAnwE>0u#41;6K?A z$T#rg3Bb}%s~iS7;F!D-_;u%G3=Z(0{Z%kJXfq$!)i_Z2Sd zg6s9)0J3)Ekwoh|i|VM*A9V0xVwd^w7TxC!v003g}V=Ye+R@o+Vz9 z0v0I4bB&5C!7DfPZ5i+Ehv7C zp+G7ms!s`BYFf*O(|qdG9E`wh*y7I3HL-r3h7B13^g7r{(DATC|6=Ipx@Z|(eKHL0K&cX80Z&-DxOBD0Vk2LwurbBjkI(&jul z(Yu%OgEvscc;r6+Mhq8#Lr&iX^|SS1P6t0fTRw8i6|-o^E5MaBsVT;$J9);{n6M;6 zmRm0}KSO@gi;ckUH+FRT^d7MgPz=oqKBcc9><knM) znoB@U_-(#=KiuYxu+L5|Z%jMMD8%ZxV!xM9<5U3O$Hz%u7w`Q^|P`sy)@cQB2*;K6ZAl`v;FviY%ctRpbl z;LNiw)uIrk^PgfH`c)B{l`le&znn2gpS6H}_M^;SketMYD?TnVu@Nhi)Qg=W_ogBS zs#-OLzcpJ8s4vFF`>@ovJKfdX%QMp_OT-HXn>mH_rpe|tWPVk3Np)ITIjf%&lR)tq zWbZ@=!x0rjLNEE_YYv*Z6HAsB^6zk%E+zr0;klC(Tbs?Z(Q3RNF+0k#2fAUJ!w+<` zmgo$d>wUCXv`mZzh2j~B4`y*6ISwvqOB_w$*X{Fc|K)dG$R-CXR7aPa%=c)|qHgFu z*P>rS$FjGp{c6}#3$|6Wb|^PSD99%9(R#TKlSYnI@;xVGkLK1>E~gkBJ=w?@o`;*f z&Web1R_WK@EoZ-?a@J9=H}ad#^ck7RZtSccC(VfLKTYJ3Y^Y@wLu1cOYMVRNT+&Ob zVajrslvm98$+1HrM&BVtz*&T%xU(UmroO+TFZ>zrp6XK1Xc4H z568;==}BLtZpgUV>?##_k469HgAo~isW?OEE@WF0|)1#_|P z#Xph5S0kf}P53(q&*XO9Mq%zoU+~RLF@|7FXzfXmbFBsYk)XK#L)#%RgB?B!nh{0A z)7tjP;bzt^c&3{Hg#rTtBi{InojDIkhzos(7Pw1B{u#c!0bD&Hs7vi@7K$-omB8~N ztO6KDy-=eBT)zqIMFS{M14_WDXpL<&cPKx_q3Mcs*)hbJszw%3FzP7XnR>H~a>}3P z1)zsn;+$oM`1nuzV-!N3iKLLNz7Q``VP^`9P{aeg;PUh2;RK z+RJxWo1xVdy&tOkju-fL2V>MopokU(eM?HDefc@&8fOSa)9^jU^K^TwHKB4&gks?H zH8CVhstJRl+ZeJ;%jW<=dhIGg{5JueW0*d+f9|GdRZv9EC&=G1+>_wUas`;`@~m?( z=}ZB4t#(V`&*A-+-uid#Uxndp4{Y+Y0KD9WJ^O(Wt#=8Z!tNJca9RQh&Ae5T-e!PD zxh)*TYB#snK?aczW6_@S*DqLjZ&CW|j&1#X7}^6!z8FgWg>%{nQpwm(xy`k>Pv(JT zuluH-45vrNQI~9zt*I856Hs}hXd~aWjs;eL<5CjLbkv=xcAQ6}5F_a7_#atqhgaYR zkq?mCIjG#`V;d1oB8{nsp4r^d*a@6ASAq2K9Ohy_wmYDy%1QC)lbaQc9NWh8=CjG( zGe{z`H{v#%+UPa=dIK7vN8X@3P!$RY8Ulm7pWu@Djr=fBFu!8In0EUbmp%-+X-}kG zLIz`D9-QFraFNGNeQT+spHs@i;A{SVOGZf9-18iJ?l^4$PF@Vuep0vJWd2LV6F=tHx zqs#LCEY!Ye@%jN*m6~<@DS!jBQ9M`ue7Hozi{JkGvUl+046_!mtk4QpMv~{?pp1LA z7RFaFEWZ#WD5Da~utM_WW}4|q9qxjx?pfnt4wrMStPQn{2wP;~88A!N@!2b8ew z@?cZkR|s%W-iF%l@jgt@q8-NIatsw)#VvkavaATehV?c>#QJRV3gWulLVG2_hjK z_^BBn3>uy2Pzc?CZAK0hKAN>&X*Y9meDnzUIWu)oAsgE&uncrABS^?A0Pyp@b#tMQ zDaiwtczfy-WCy5N_z&Flz-|y9%;2BX&}8$=jzZMV1wBnz*FTSwdT=@sjvb&$?Bx^2 z2nL)yNkX#!siBVMvF$IFFHwYA0epdoCp+++*zuA|R_^cgitAR*Pb2xm#)}MIC)~NA z5aq?Qq?<~zYV54Q_vVxt<0rmzgQtb7rMpdTrhE920{CcNhbZkIu@#Mf5xWJY_BFc@ zb-YnvW51jHp&;dUCS;q)k^yTcu=N_WlydJH=9+c(_dqS=-<@ zL)okqld0|7?eO*53T<6n^#1T+F4llejf+HB#jPTGMf4TF-+=oFGB!q-FQ3J=O(7s! z9R>f|x20=2@vu2JKXztKQH=USXEg+YFkT^o)3V8Y?ZVS!Ylh9`*kx_3)}?eueHpoL zopH9&>nb|;M~2EGsV(PM;~vzxQc;V@;on|`-ibpXOv9zG$jAWbEYjC34w~f*HNQ<6 zq8nio(FM08qrnvLC~0A((&PwgH+3?^;JZ-_HR3{kok}Rm4u}tPq!b(>dZ%tx+Yxpp)Jze$*yy zjIWMw;vA9mfj(-V#Nq}x)p~BxmDtO2vHsI}^VUN95L32dFg)S|-do|t3=7|ZZ8;BO z(u@6OF-Q2Y`vivtX29 zR4p1GvA4@&K9=_Y16G#h|HZ?REqDTOaJPRvHB9c!=0m4G1Xbw!SQMRq)As!|k3u_dx@+~?GY^mW_rOuZ6e2L5lUZeE zU#lXqq*CAS&_n{8W~h^-c9mWf< zP&8f($UuJ424)bmuIo7a6vpC&nALw-CjD?btH#50s~ZqIZ3B=;WR4I;$Zk?{yrIybZ1Gqt^hDM->8f4#54qh$pPdH3(K}2`_tZ-;ld!e!%SNd zzT@!tVwuOB-l8D>ZVr}?O-2LtMh6#ND(QWgcAtC|Jvq0!zWU8^4}2R9CngU3i6mf( z!GyIExJoXiP~QeDv}VLY%Q&>ow@X6f*H7Xd{90xx;7`{w9IZ*@&7$n(uChR0YPZ#u z#e+oqGnRHVu8$F8ax}sC{lzxZYxV3tU{Ch4P9TTfSI|Vci(H)M7f`e^!0gG9h0a^S zQ-rmmo_8|f=&#FrW9VG2<4z?ftM=MWhE2}{575wm;2dXkU@Lb<1G!NAuBXPd8mh$) ze_~jW#oX?Hw5f61#e?mBlPjHUY2Zg5`Tb%=9Nsr`5u2=j$%HpROLI7FF;2zsq5(B~ zw9v!df>{ULRPKFV4G8#_cK_@uLjwm^c^5;+ea8-V2Gfjd?DiQu^`RW#{SYQI|KB_n zYA8pKN_9OSzTL|iL4{CZ7%7z{NyRH+d)(Vt`da@2Ls&jQ|2m_P{7HM@-L{sQjmGLs zzSPTC)T9*@+Cbt5HP@$LJKXGyodV`h|Et*w--dh2&^e5BJV+3!Mbv^=dYApV-NApp z)fsw#oq_b{jaZA~_NFa#6cSMF8B<8$O6} zZ$n|8w5O5Jb@N+nd_xlu5C(zZEvBciA%dL3a@rUK{oFG&h!oq2UHGA@Y5Tl?y-@l#WBxqGuhw*nn0CzB!1GEu7P=1+dU z?mxf4G^ooe#UyYs2?Y_XvR9GAP20!F1~zGRqra|IRg8H! zKJ!WV_p`-GFbDHgVYDF+BYL!#K0N)RAx;9;NWyH-1hmHvS|m37A{sU=RSL&qOLh1| zgCWIK6b#ip(xM_MG`qIsT-qs@LXy)#{UydWat`0lL7bi|%(~Khz*D^H+W|qC6t1v( zg86u-(0fePdkAm;I~8P+9G|0*>?A5!9gORRspx<`m#?C$P-_QlzgL!4c&lK`(@ivWe z!%g@Fe7fZkf21|`&)HM|4hO^=7;t{FSc66LGs~5n<3o}bm4vko!X($^q4sFx4{N9Z z?%?_EkO=Ur3)%4r@}nl*Z0TARO`gV9be@Er?ZUUG8U?W~$B-NW7SW+jK?}tb#vBAh z-ojS5VU9JNb1$0#1Vl|%1H3v0*`)D=3Nl6!3!6(ErJ=c4;AFj$CE9w~tYo)l$47Q= z__p(}KYS3q0ml3H9~u-%c`IMel!sj*vGYcOVe=s@$~uK9!#UH?ym3nrJ<6xoTq0~u zj@*whCuw4QO|V$cp;=;k|otr76-sQU`2lz#UIrMvQz| zmKaa-!Y(`1v8c=Lq*j3KyXPPCk^QRY6Z{>lgEq;t=7j1<#yiar{))A^9)WGC+(S+q z5Az?PW65hwnk2r}Nb+Fp@@X7~2SXvA`){DJJ1^NsXyXy5S(9j5^5)7y*_2Y*=-)W# zN|w%3{j}{+UyBb7^tR=)U-~l|`DbLK)ZIUhQ4uaEe^=t6gs?nHRO#QEH_>yqOJ zWDQU19MI}fdbmQwwy;y+^pw&9t#JffOR22MT9gJsF2FhN%OBjf=O2Ua)7WgGzRZId z-8e>sJLpDm$a* zSy{bXTwl)99ng(oPCynBtwa?)z4(D{iK+<*a$fpzwNx7h{4$zV`t8ZKNeV7{4j@K) zMD5mIEA|SkWQJ$5EV`Y9+2BM=GLTQ-E%_tHQtSb3H|2Z932NRjFO?Gq7?_iC;RxBY-V4V&?dHzbmwgr&!! zjhmWF!cI>y{COY#cIj*miEy$&k6l)mp@2pz&@d`@3}L##tn~*?Y%O|o89 zW&=JWvxQtg(`>c3r+VnOH*(}%KiPpX^*YRm=)(!_%5WLf zJ0U4o{A|};iys3X#af>h`3)UsTqA-Ug0I) zqxj>S=30va5_E%zl3zOeo_qm!S69E7v5`1Lo2gAp4tG`C2H zPh7B61X>kKX=ySXtv%S%g%gSm*%!Y|dOvJRak66gc>5SZ3;DxF1(!lFIFSyMiqCnX zf1e1WQJPvOV)}W2JBB3j>?h*5k#xK(<{k|H)%&o&r`Z2LtZt z;kj!u&EhcDL-3R5>*x2T!E-3lAYI-wu`f$id4;~AegKR^C3*_8uip8(k?GI^xdb~g6VO@rf@@6X8|z;? z8SM^0*G}-hru6>Sudm})JH|Z0$f5_>PN~b-Z%Z0*h@MI{OA@|$aTy#2ZhaA9;qRh#pHVv3Mt2zH*q}5T z6r|Pw#O(seA6RW?GCv*5AR%PNy4i9P+KDF{^CdgE=CIj*oocdwx-lU_%!f7>Q(~K? z5_s<&4oYVq4HET4r~PA3Lmq>rbSt@}2UDIV$;WIkV(kI7t9-HfZKVge0_uxFP0Uu$ zbGe*2l`oc}au-1jP-mwg7ct^7@MslvYdye<%tFATfbdlUrH1jp6n-&*C=IZj^n|bzE|>vl!nqnao-I2Fl^gUG#O4jdf_i$ zuu@Oqz|J*Ta$K7Iu&=|DxV=xu=(&#ImXxG{6}`OzTR2iZRt0|d$o>W~4I35+!U82N zrWTT%hkgsTi;zt&m$Y4>kD+2lt_DJ0%0a(M>)wE0i#ssBh<^dE5`uye`OW?fKLJR% zENA(9kdqqlI%E6}d|W#4VIgxy&ai$?f)oQri^(8PMq@7_AXHwW1(D)aZ9|aF8pxT& z?N=5CqRfgf1wA*jh#`pGMw@=J8JW~K1_G~YxPYvVHCcLLt8tBgnz0_t$lbvQ7)@6_-#u+&mU1|9 z?`L(@m{3@c0zzM&1ehJYrjg0Y|7>8tB-rF%HbNX(Qp#xxS{H-m0G`_&doSP6b zQD{jMz+y@`j`U9~W}X%)3|SrH*=g*YF%=_b>2kUs$rB#ZQZsfmU~_0&IHK`pr5@Ar z?vw)hk=+g1Cx6AF{r8>`$w4D$QH@m_H$O;ku|D>$tJf-u#3PyS2dU-{fWa8rJ(PBp znEOWxfxSfq1zxRU>8Y=Ksm8KNR^vf&tam_ySK1a(B>BSBzd@fCxt$VeRtG>tX7*Z~ z*YFzvJ^^HV3KN|zYOM4}H2-=*3-F8FyDS8hetYNHA8TP=@P>(wK|j#c2ZM+3vRpP8 z(-<=y<_~m*-752yWz-tR2-tv8*oN_oL94aSzoaEXe{05YoiW=7a#SAYT|>U3(Hc;c z=R-|@$IBI(ewSL5B@}7bJSrGPA{VdSpxfHN?Y(s3ireSbBVpNwF5K{V@n5A;eJ59G?7Ct+jq2 zN`Qt?OnI5!(pt=2oeIaR0ly_sQR?i;t8vC)Dd7h>Vi?T-U%wqvz|DGB&3G?Jd|Cx5 zPUlZY*7F&)x?v=w@Lo292ovP@g1_B{@S6fy&G)5GKK&sX0-y2%V3NrX7hL$@-NPg2 zg)AmDlAp^TI&|CjO??8K2uUZN29I0Ks)cT4!iezY@AS+}le|2s?GdK@+vqcfHREW8 zlyJ~0i@@R$2HKMZOuNM2f>%}vDD7AHZ^p$H2457B24b7nn~kWQ_k$}+)hOHZ3bxJH zz}w|y`SW|lRSDE@VAgwd1Dpqm*2t%ugOk&EJw!VYt zbX#q0@#~WM)y=fOP3t!<+FG?r?!23#LXB^GET!z9ow@|0xpGIFfsgM>cP@>FHm?qE z@0n`Y{?;5;ukNuPkoM8tT^iF5DI+L#8qNSdTA8JB{;?0Z1gMsI3;kO-92h=~rIhZ& zQ-P13Z!How;V}LI>^8EKKj5={fhL7UZGdU_H4b2$F_yj=pxM92l$0{}gCpNg;e%Nh z2F@mPI9|*^gKE4kjx%}=KX?u4L9anbVnoj=uyey5X(FiLU8FoSF3Qk-T*_J25#*~T zehI#@oi!h)o`t@vdJpWW0yy*T!(LkmwAWgdPkVPh_GfEe6W(5pw^`p_NiF=Wm_OU( zahF>yc0;b>rVZ-v+(bsLIev!(c4t{6sJeejl@FFO4RjjJ<0@1hB=byYbAHOpW;Nam|`%)EpobjOveETP;BWU4jqSTC9UCFEpgHvj6CT>ENEZP%u(cA4B)&UQY-y$amN!xQa!hLCOp18 zdVYto&0qO23G!Qi>~o~oMH;PtWkLm9o5KDHvVsZgr~FJ4&=X8N2|Vw57AWI(2~8mB zMGrd!4-={DhgxCqsPwlg)?2v^N!rEc5Jsu^l@i{LmnaUl4X+pKocWFlnO&F5UyqI9 zK_T(lZ!xEdAFd#wmnL>|BlN+h#FfnEy0h;F!8K#Bug}DlX5DC>iHS+ox8EzA`SS8~ z%h^*u$k(sbnxd~-B~}Z*o%2u$6hQ5l|3)h4`zKS5{rhhQVAFQLGraLyb$#dlW}G?r zO>UcWcOg3vmIk> w)3DXx6?@FKyFCBT@BYtqfi?60ToaoVHu7|lm-M@nNZ=nsT{E3>Ehpmt0-Xo|r~m)} diff --git a/vignettes/figures/logo.png b/vignettes/figures/logo.png deleted file mode 100644 index d17cf78d54e0c93fcc4178ba16ca1891bef97673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33406 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 diff --git a/vignettes/trait_definitions.Rmd b/vignettes/trait_definitions.Rmd deleted file mode 100644 index 8f2cc937a..000000000 --- a/vignettes/trait_definitions.Rmd +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Definitions for traits in AusTraits -date: "`r Sys.Date()`" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Definitions for traits in AusTraits} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -editor_options: - chunk_output_type: console ---- - -```{r setup, echo=FALSE, message=FALSE, warning=FALSE, results="hide"} -# knitr defaults -knitr::opts_chunk$set( - echo = FALSE, cache = FALSE, message = FALSE, warning = FALSE, - results = "asis" -) -``` - -```{r, echo=FALSE, message=FALSE, warning=FALSE, results="hide"} -library(knitr) -#library(yaml) -library(kableExtra) -library(traits.build) - -print_defintions_element <- function(elements) { - if (elements$type == "character") { - sprintf("**Content:** %s\n", elements$value) %>% - writeLines() - } - - if (elements$type == "table") { - sprintf("**Content:** \n") %>% - writeLines() - - elements$elements %>% - util_list_to_df1() %>% - my_kable_styling() %>% - writeLines() - } -} - -# default for table format -if (knitr::is_html_output()) { - options(knitr.table.format = "html") - my_kable_styling <- util_kable_styling_html -} else { - options(knitr.table.format = "latex") - my_kable_styling <- kableExtra::kable -} - -definitions <- yaml::read_yaml("config/traits.yml") -metadata <- yaml::read_yaml("config/metadata.yml") -``` - - -This document provides a full list of trait definitions used in AusTraits version `r metadata$metadata$version`, as defined in the file configuration files [`config/traits.yml`](https://github.com/traitecoevo/austraits.build/blob/master/config/traits.yml). - -```{r, results="asis"} -for (trait in names(definitions$traits$elements) %>% sort()) { - elements <- definitions$traits$elements[[trait]] - - # data_trait <- austraits$traits %>% filter(trait_name == trait) - - c( - sprintf("## %s\n\n", trait), - sprintf("- label: %s", elements$label), - sprintf("- description: %s", elements$description), - # sprintf("- number of records: %s", data_trait %>% nrow() ), - # sprintf("- number of studies: %s", data_trait %>% pull(dataset_id) %>% unique() %>% length() ), - sprintf( - "- type: %s%s", elements$type, - ifelse(elements$type == "numeric", sprintf("\n- units: %s", elements$units), "") - ), - ifelse(elements$type == "numeric", - sprintf("- allowable range: %s - %s %s", elements$allowed_values_min, elements$allowed_values_max, elements$units), - sprintf("- allowable values:\n%s\n", paste0(" - *", elements$allowed_values_levels %>% names(), "*: ", elements$allowed_values_levels %>% unlist(), collapse = "\n")) - ), - "" - ) %>% - writeLines() -} -``` -