{"id":118329,"name":"eu_cbm_hat","description":"Enables the assessment of forest CO2 emissions and removals under scenarios of forest management, natural disturbances and forest-related land use changes.","url":"https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat","last_synced_at":"2026-04-06T12:30:18.988Z","repository":{"id":64391177,"uuid":"13292356","full_name":"bioeconomy/eu_cbm/eu_cbm_hat","owner":"bioeconomy","description":"A python package that enables the assessment of forest CO2 emissions and removals under scenarios of forest management, natural disturbances and forest-related land use changes.","archived":false,"fork":false,"pushed_at":null,"size":null,"stargazers_count":1,"open_issues_count":69,"forks_count":0,"subscribers_count":null,"default_branch":"main","last_synced_at":"2025-12-30T21:24:09.721Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.2","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":null,"metadata":{},"created_at":"2019-07-12T16:23:41.714Z","updated_at":"2025-12-23T08:49:45.588Z","dependencies_parsed_at":"2023-01-13T14:34:08.621Z","dependency_job_id":null,"html_url":"https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat","commit_stats":null,"previous_names":[],"tags_count":13,"template":null,"template_full_name":null,"purl":"pkg:gitlab/bioeconomy/eu_cbm_hat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners/bioeconomy","download_url":"https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat/-/archive/main/eu_cbm_hat-main.zip","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat/sbom","scorecard":null,"host":{"name":"gitlab.com","url":"https://gitlab.com","kind":"gitlab","repositories_count":4521539,"owners_count":7348,"icon_url":"https://github.com/gitlab.png","version":null,"created_at":"2022-05-30T11:31:42.605Z","updated_at":"2026-01-12T22:45:04.389Z","status":"online","status_checked_at":"2026-03-29T02:00:08.186Z","response_time":262,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.382Z","robots_txt_url":"https://gitlab.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners"}},"owner":{"login":"bioeconomy","name":"Bioeconomy","uuid":"organization-4897061","kind":"organization","description":"This group gathers repositories relating to the provision of data and analysis on biomass/bioeconomy supply and demand on a long-term basis in the context of the European Commission's in-house science service, DG Joint Research Center.","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://gitlab.com/uploads/-/system/group/avatar/4897061/bioeconomy_graphic_full.jpg","repositories_count":7,"last_synced_at":"2023-04-27T10:38:57.438Z","metadata":{},"html_url":"https://gitlab.com/bioeconomy","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-04-27T10:38:57.439Z","updated_at":"2023-04-27T10:38:57.439Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners/bioeconomy","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners/bioeconomy/repositories"},"packages":[],"commits":{"id":1638838,"full_name":"bioeconomy/eu_cbm/eu_cbm_hat","default_branch":"main","total_commits":1382,"total_committers":9,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":153.55555555555554,"dds":0.3104196816208393,"past_year_total_commits":389,"past_year_total_committers":6,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":64.83333333333333,"past_year_dds":0.21850899742930596,"last_synced_at":"2026-03-29T09:01:16.702Z","last_synced_commit":"3d0ae0c3c624f1f7c7bfa5f3372c126b28bb843e","created_at":"2024-07-24T20:00:53.558Z","updated_at":"2026-03-29T09:01:14.668Z","committers":[{"name":"Paul Rougieux","email":"paul.rougieux@gmail.com","login":null,"count":953},{"name":"Lucas Sinclair","email":"649288+xapple@users.noreply.github.com","login":null,"count":279},{"name":"Viorel Blujdea","email":"blujdvi@jeodpp-terminal-jd003-01.cidsn.jrc.it","login":null,"count":63},{"name":"blujdvi","email":"86364720+blujdvi@users.noreply.github.com","login":null,"count":37},{"name":"Viorel Blujdea","email":"Viorel.Blujdea@ec.europa.eu","login":null,"count":29},{"name":"Viorel Blujdea","email":"blujdea.viorel@gmail.com","login":null,"count":12},{"name":"Viorel Blujdea","email":"blujdvi@jeodpp-terminal-jd006-01.cidsn.jrc.it","login":null,"count":6},{"name":"Matteo Piccardo","email":"matteo.pcc@gmail.com","login":null,"count":2},{"name":"Scott Morken","email":"smorken@nrcan.gc.ca","login":null,"count":1}],"past_year_committers":[{"name":"Paul Rougieux","email":"paul.rougieux@gmail.com","login":null,"count":304},{"name":"Viorel Blujdea","email":"blujdvi@jeodpp-terminal-jd003-01.cidsn.jrc.it","login":null,"count":47},{"name":"blujdvi","email":"86364720+blujdvi@users.noreply.github.com","login":null,"count":28},{"name":"Viorel Blujdea","email":"blujdea.viorel@gmail.com","login":null,"count":4},{"name":"Viorel Blujdea","email":"blujdvi@jeodpp-terminal-jd006-01.cidsn.jrc.it","login":null,"count":4},{"name":"Matteo Piccardo","email":"matteo.pcc@gmail.com","login":null,"count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat/commits","host":{"name":"gitlab.com","url":"https://gitlab.com","kind":"gitlab","last_synced_at":"2026-03-31T00:00:13.320Z","repositories_count":23869,"commits_count":4102748,"contributors_count":113805,"owners_count":12292,"icon_url":"https://github.com/gitlab.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/gitlab.com","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/gitlab.com/repositories"}},"issues_stats":{"full_name":"bioeconomy/eu_cbm/eu_cbm_hat","html_url":"https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat","last_synced_at":"2026-03-29T09:00:34.257Z","status":"error","issues_count":null,"pull_requests_count":null,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":null,"issues_closed_count":null,"pull_requests_closed_count":null,"pull_request_authors_count":null,"issue_authors_count":null,"avg_comments_per_issue":null,"avg_comments_per_pull_request":null,"merged_pull_requests_count":null,"bot_issues_count":null,"bot_pull_requests_count":null,"past_year_issues_count":null,"past_year_pull_requests_count":null,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":null,"past_year_pull_requests_closed_count":null,"past_year_pull_request_authors_count":null,"past_year_issue_authors_count":null,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":null,"past_year_bot_pull_requests_count":null,"past_year_merged_pull_requests_count":null,"created_at":"2024-08-16T07:00:49.197Z","updated_at":"2026-03-29T09:00:34.257Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/bioeconomy%2Feu_cbm%2Feu_cbm_hat/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{},"pull_request_author_associations_count":{},"issue_authors":{},"pull_request_authors":{},"host":{"name":"gitlab.com","url":"https://gitlab.com","kind":"gitlab","last_synced_at":"2026-03-31T00:00:10.902Z","repositories_count":0,"issues_count":0,"pull_requests_count":0,"authors_count":61892,"icon_url":"https://github.com/gitlab.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/gitlab.com","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/gitlab.com/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/gitlab.com/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/gitlab.com/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":null,"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-01-13T14:34:08.602Z","updated_at":"2023-01-13T14:34:08.602Z","repository_link":"https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat/blob/main/setup.py","dependencies":[{"id":6876258790,"package_name":"autopaths","ecosystem":"pypi","requirements":"\u003e=1.6.0","direct":true,"kind":"runtime","optional":false},{"id":6876258791,"package_name":"plumbing","ecosystem":"pypi","requirements":"\u003e=2.11.1","direct":true,"kind":"runtime","optional":false},{"id":6876258792,"package_name":"pymarktex","ecosystem":"pypi","requirements":"\u003e=1.4.6","direct":true,"kind":"runtime","optional":false},{"id":6876258793,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6876258794,"package_name":"simplejson","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6876258795,"package_name":"pyyaml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6876258796,"package_name":"tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6876258797,"package_name":"p_tqdm","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6876258798,"package_name":"pyarrow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":6.4457198193855785,"created_at":"2023-10-18T00:00:22.393Z","updated_at":"2026-04-06T12:30:18.990Z","avatar_url":null,"language":null,"category":"Emissions","sub_category":"Carbon Offsets and Trading","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# EU-CBM-HAT\n\nThe forest carbon model `eu_cbm_hat` is a python package that enables the assessment of\nforest CO2 emissions and removals under scenarios of forest management, natural\ndisturbances, forest-related land use changes.\n\nEU-CBM-HAT depends on the [libcbm model](https://github.com/cat-cfs/libcbm_py) developed\nby Forest Carbon Accounting team of the Canadian Forest Service. Both python modules use\n[pandas data frames](https://pandas.pydata.org/) to transform and load data.\n\n\n# Documentation\n\nThe model was described in a 2022 JRC Technical Report called [The JRC Forest Carbon\nModel: description of\nEU-CBM-HAT](https://publications.jrc.ec.europa.eu/repository/handle/JRC130609)\n\nSee also\n\n- Installation instructions below\n\n- Software documentation at\n  https://bioeconomy.gitlab.io/eu_cbm/eu_cbm_hat/eu_cbm_hat.html\n\n\n# Licence\n\nThis program is free software: you can redistribute it and/or modify it under the terms\nof the European Union Public Licence, either version 1.2 of the License, or (at your\noption) any later version. See [LICENCE.txt](LICENCE.txt) and [NOTICE.txt](NOTICE.txt)\nfor more information on the licence of components.\n\n\n# Funding\n\nThis work was partially funded by DG Research and Innovation under the Administrative\nAgreement DG RTD N° 013 KCB (LC-01591551) JRC Reference N ° 35895 NFP.\n\n\n# Dependencies\n\n* `libcbm` is a C++ library with python binding developed by the Canadian Forest\n  Service. It is bundled into the libcbm_py python package available at\n  https://github.com/cat-cfs/libcbm_py\n\n* `eu_cbm_data` contains the model's input and output data located at\n  https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_data . In 2022, this is a private\n  repository subject to ongoing research.\n\n* `eu_cbm_aidb` contains the \"Archive Index Databases\" in a separate repository located\n  at https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_aidb\n\n\n# Installation\n\n- **EU-CBM-HAT Quick Start Guide on JRC BDAP**. A guide to install the model and\n  related input data (from a private git repository called `eu_cbm_data`) at:\n  https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat/-/blob/main/docs/setup_on_jrc_bdap.md\n\n- If you bring your own data. You can use the smaller runner object called a\n  [Bud](eu_cbm_hat/bud.html#Bud) see the documentation of that object for an\n  example of how to set up the input data structure based on sample data.\n\nInstallation instructions for linux and windows might be outdated. They are available in\nthe docs directory.\n\n\n# Location of the data\n\nBy default, the data is located in your home folder. You can display the default\nlocation where the data should be with these commands in python:\n\n    \u003e\u003e\u003e import eu_cbm_hat\n    \u003e\u003e\u003e print(eu_cbm_hat.eu_cbm_data_dir)\n    \u003e\u003e\u003e print(eu_cbm_hat.eu_cbm_aidb_dir)\n\n|                        | On Unix                 | On windows                              |\n| ---------------------- | ----------------------- | --------------------------------------- |\n| Data                   | `~/eu_cbm/eu_cbm_data/` | `C:\\Users\\user_name\\eu_cbm\\eu_cbm_data` |\n| Archive Index Database | `~/eu_cbm/eu_cbm_aidb/` | `C:\\Users\\user_name\\eu_cbm\\eu_cbm_aidb` |\n\n\nPlease create the `eu_cbm` directory at the desired location on your system. The model\nwill work once these folders exist on your system. If you don't want to use the default\nlocation, you can also define the environment variables `EU_CBM_DATA` and `EU_CBM_AIDB`\nto tell the model where the data and AIDB are located.\n\nAt a python prompt, copy test data to your local `eu_cbm_data` folder (location defined\nabove in python in `eu_cbm_hat.eu_cbm_data_dir`):\n\n    \u003e\u003e\u003e from eu_cbm_hat.tests.copy_data import copy_test_data\n    \u003e\u003e\u003e copy_test_data()\n\n\n## Software upgrade\n\nOver time it's important to regularly upgrade the packages with:\n\n    python -m pip install --upgrade eu_cbm_hat\n    python -m pip install --upgrade https://github.com/cat-cfs/libcbm_py/archive/refs/heads/1.x.tar.gz\n\nYou should also update the DATA and AIDB git repositories by pulling latest changes from\nthose repositories.\n\nIn case you need to install the latest development version of `eu_cbm_hat`, use the\n`--upgrade` parameter and install from the main branch of the gitlab repository. That\nthe `--no-dependencies` argument avoids reinstalling all dependencies as well:\n\n    python -m pip install --upgrade --force-reinstall --no-dependencies https://gitlab.com/bioeconomy/eu_cbm/eu_cbm_hat/-/archive/main/eu_cbm_hat-main.tar.gz\n\n\n## Installation for development purposes\n\nSkip this section if you do not intend to change the code of the model. For development\npurposes, these instruction leave the capability to modify the code of the model and\nsubmit changes to the git repositories composing the model. Extensive installation\ninstructions are available for two different platforms:\n\n* [Installation on Linux](docs/setup_on_linux.md)\n* [Installation on Windows](docs/setup_on_windows.md)\n\n\n# Running the model\n\nRun the test country ZZ at a python prompt:\n\n    from eu_cbm_hat.core.continent import continent\n    runner = continent.combos['reference'].runners['ZZ'][-1]\n    runner.num_timesteps = 30\n    runner.run(keep_in_ram=True, verbose=True, interrupt_on_error=True)\n\nSee example of how to run the model for different countries in the `scripts/running`\ndirectory.\n\n## Run a scenario combination\n\nRun a scenario combination for all EU countries at once (see the [documentation on\ncombos](https://bioeconomy.gitlab.io/eu_cbm/eu_cbm_hat/eu_cbm_hat/combos.html)\nfor how to specify them):\n\n    cd $HOME/eu_cbm/eu_cbm_hat/scripts/running/\n    ipython -i run_scenario_combo.py -- --combo_name reference --last_year 2050\n    ipython -i run_scenario_combo.py -- --combo_name pikssp2 --last_year 2070\n    ipython -i run_scenario_combo.py -- --combo_name pikfair --last_year 2070\n\nDisplay which country has finished running or is still ongoing with this bash script:\n\n    ./monitor_log_files.sh ~/eu_cbm/eu_cbm_data/output/reference/\n\nProcess the output data for a list of scenario combinations provided as an argument.\nCompute the harvest expected and provided as well as the sink\nin an aggregated way:\n\n    cd $HOME/eu_cbm/eu_cbm_hat/scripts/post_processing\n    ipython -i process_scenario_combo.py -- --combo_names reference pikssp2 pikfair\n\n\n## Read the model output\n\nInspect the output of the model\n\n    # Input events sent to libcbm\n    events_input = runner.input_data[\"events\"]\n    # Events stored in the output including the ones related to the harvest\n    # allocation tool HAT\n    events_output = runner.output[\"events\"]\n    # Available volumes used by the Harvest Allocation Tool\n    output_extras = runner.output.extras\n\n    # Load tables without classifiers\n    area = runner.output.load('area', with_clfrs=False)\n    params = runner.output.load('parameters', with_clfrs=False)\n    flux = runner.output.load('flux', with_clfrs=False)\n    state = runner.output.load('state', with_clfrs=False)\n\n    # Load classifiers with their actual values\n    classifiers = runner.output.classif_df\n    classifiers[\"year\"] =  runner.country.timestep_to_year(classifiers[\"timestep\"])\n\n    # Merge tables\n    index = ['identifier', 'year']\n    flux_dist = (params\n                 .merge(area, 'left', on = index) # Join the area information\n                 .merge(flux, 'left', on = index)\n                 .merge(state, 'left', on = index) # Join the age information\n                 .merge(classifiers, 'left', on = index) # Join the classifiers\n                 )\n\n\n## Further process the output\n\nInstantiate a runner object. Note: this can be done after a model run, once the model\nhas been run, no need to re-run the model at this point, since the output has been\nsaved to the `eu_cbm_data/output` directory. The `runner.post_processor` method will\nread data from that directory.\n\n    from eu_cbm_hat.core.continent import continent\n    runner = continent.combos['reference'].runners['LU'][-1]\n\nCompute the Net Annual Increment (NAI)\n\n    nai_lu = runner.post_processor.nai.df_agg([\"status\"])\n\nCompute harvest expected and provided,\n\n    runner.post_processor.harvest.expected_provided(\"year\")\n\nCompute the sink.\n\n    runner.post_processor.sink.df_agg(\"year\")\n\nThe above post processing methods can be computed for one country individually. They can\nalso be computed for all countries together and saved in a parquet file for further\nanalysis and comparison between different scenario combinations. For a given scenario\nsuch as \"reference\", save all post processing output for all countries to parquet files.\nThis function implements all post processing steps.\n\n    \u003e\u003e\u003e from eu_cbm_hat.post_processor.agg_combos import save_agg_combo_output\n    \u003e\u003e\u003e save_agg_combo_output(\"reference\")\n\nFurther checks for information:\n\n- Check wood density and bark fraction in all countries:\n\n        from eu_cbm_hat.post_processor.agg_combos import get_df_all_countries\n        wood_density_bark_all = get_df_all_countries(\n            combo_name=\"reference\",\n            runner_method_name=\"post_processor.wood_density_bark_frac\"\n        )\n\n\n## Testing\n\nAll dependencies are clearly stated in `.gitlab-ci.yml` and the `setup.py` files at the\nroot of the repository. In fact those 2 files are used to automatically install and test\nthe install  each time we make a change to the model. The test consist in unit tests as\nwell as running a mock country called \"ZZ\". You can see the output of these runs\n(successful or not) in the CI-CD jobs page on gitlab.\n\n\n## Model runs used in publications\n\n- The model run used in the technical report\n\n    - European Commission, Joint Research Centre, Rougieux, P., Pilli, R., Blujdea, V.,\n    Mansuy, N. and Mubareka, S.B., Simulating future wood consumption and the impacts on\n    Europe's forest sink to 2070, Publications Office of the European Union, Luxembourg,\n    2024, https://data.europa.eu/doi/10.2760/17191, JRC136526.\n\n    - Corresponds to the data at commit d7ddf2963666bc57360c6576e050e022d3b75e3f in\n      branch run-ssp2-fair-v2023\n\n\n\n# Definitions and specification\n\n- A specification for an Harvest Allocation Tool (HAT) is available at\n  [docs/harvest_allocation_specification.md](docs/harvest_allocation_specification.md)\n\n- Input files (disturbances, yield, inventory) defined in `eu_cbm_data` contain scenarios for the activities (afforestation, deforestation, reforestation, disturbances in forest remaining forest, wood use specified in the silviculture and product_types.csv tables)\n\n\n\n## Growth period\n\nFor the purpose of initializing the soil carbon pool, we use a different growth curve\ncalled the \"Init\" growth curve. That growth curve takes into account previous harvest\nand natural disturbances within the growth curve.\n\n- Looking at the input inventory you will see a classifier called \"growth period\" which\n  has the value \"init\" everywhere.\n\n- See figure 3 of Pilli 2013 \"Application of the CBM-CFS3 model to estimate Italy’s\n  forest carbon budget, 1995–2020\" for an explanation of the need to switch from an init\n  growth period to a current growth period. The `Simulation.switch_period()` method\n  changes the growth period from \"Init\" to \"Cur\". As a result all stands will have the\n  value \"Cur\" for the groth_period classifier from inventory start year onwards. Note\n  the inventory start year is specified in `runner.country.inventory_start_year`.\n\n\n## Units\n\nThe main unit used inside CBM are in tons of carbon. But input yield curves are in m3 of\nmerchantable biomass per hectare. The harvest data is in m3 of biomass under bark.\n\nSee some of the unit conversion functions inside post_processor/convert.py for more\ninformation on the units.\n\n\n# Extra documentation\n\nMore documentation is available at:\nhttps://bioeconomy.gitlab.io/eu_cbm/eu_cbm_hat/eu_cbm_hat.html\n\nThis documentation is simply generated in `.gitlab-ci.yml` with:\n\n    $ pdoc -o public ./eu_cbm_hat\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["carbon-emissions","european-union","forestry","simulation-model"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/118329","html_url":"https://ost.ecosyste.ms/projects/118329"}