ForamEcoQS is a Windows desktop application for ecological quality assessment based on benthic foraminifera. It targets .NET 10, uses Windows Forms for the graphical interface, and can also run in command-line mode. The software calculates multiple biotic and diversity indices from species-by-sample abundance matrices and assigns Ecological Quality Status (EQS) classes where implemented.
- Matteo Mangiagalli (m.mangiagalli@campus.uniurb.it)
- Fabrizio Frontalini (fabrizio.frontalini@uniurb.it)
- Carla Cristallo (c.cristallo1@campus.uniurb.it)
- Fabio Francescangeli (fabio.francescangeli@unifr.ch)
Year: 2026
ForamEcoQS supports a practical analysis workflow:
- Import abundance matrices from Excel or CSV files;
- Create or edit sample tables directly in the application;
- Clean and normalize sample data;
- Calculate selected indices for each sample;
- Review EQS classifications for supported indices;
- Export tables, plots, and EQS agreement summaries.
- Create an empty dataset.
- Open existing datasets from Excel or CSV.
- Save the current dataset to Excel.
- Create spreadsheet templates from reference lists.
- Add, remove, and rename sample columns.
- Undo recent data edits.
- Clean and normalize sample values.
- Compute selected indices from the
Advanced Indicesworkflow. - Choose threshold systems and reference options from
Index Calculation Settings. - Apply optional EQR calculations for
FSIandexp(H'bc). - Use selected Foram-AMBI lists for eco-group based indices.
- Open plot options for calculated results.
- Open a composite dashboard.
- Load existing index tables for plotting without recalculation.
- Export result tables to Excel.
- Export plots to PNG.
- Foram-AMBI List Manager.
- FSI List Manager.
- Geographic Areas Database.
- User Custom Lists Manager.
- Ecological-group override support for taxa assignments.
- Export and import ecological-group overrides as a JSON file, so they can be shared with collaborators or committed to version control alongside a dataset.
Species that are not found in the selected local reference databank can optionally be checked against the WoRMS (World Register of Marine Species) online REST API. This is an opt-in feature that requires an internet connection.
For each unmatched name, WoRMS lookup can:
- Confirm it is a recognized, valid marine taxon even though it is absent from the local databank (in the GUI, such rows are highlighted orange instead of red, and are no longer removed by
Clean and Normalize). - Detect likely typos via fuzzy/phonetic name matching.
- Surface the currently accepted scientific name when the entered name is an outdated synonym (e.g. a species that has since been reclassified into a different genus).
In the GUI, enable it via the "Verify unmatched species against WoRMS" checkbox in Index Calculation Settings (disabled by default). In CLI mode, pass the -worms flag (see below). Without WoRMS verification, the CLI still always reports which species were excluded from eco-group-based indices because they were not found in the reference databank.
- EQS summary table.
- Pairwise Cohen's kappa matrix.
- Confusion matrices between indices.
- Kappa heatmap.
- Exportable EQS agreement summary.
- Run the same calculator in command-line mode by passing arguments at startup.
- Read the first worksheet from an Excel input file.
- Print results to console or export them to Excel.
- Foram-AMBI
- Foram-M-AMBI
- FSI
- TSI-Med
- NQIf
- FIEI
- BENTIX
- BQI
- FoRAM Index
exp(H'bc)H'log2H'lnSimpson (1-D)Pielou's JES100
- Species Richness (
S) - Total Abundance (
N) - Ecological group percentages (
EG1-EG5) - FoRAM functional group percentages
The threshold system is selectable in Index Calculation Settings.
| System | High | Good | Moderate | Poor | Bad |
|---|---|---|---|---|---|
| Borja 2003 | <= 1.2 |
<= 3.3 |
<= 4.3 |
<= 5.5 |
> 5.5 |
| Parent 2021 | < 1.4 |
< 2.4 |
< 3.4 |
< 4.4 |
>= 4.4 |
| Bouchet 2025 (Brazilian transitional waters) | < 1.4 |
< 1.8 |
< 3.0 |
<= 4.0 |
> 4.0 |
Implemented formula:
TSI-Med = ((%TS - %TSref) / (100 - %TSref)) x 100
%TSref is derived from mud percentage (%mud) using the selected reference curve:
- Barras 2014:
%TSref = 5.0 + 0.3 x %mud - Parent 2021 (>125 µm):
%TSref = 4.5 + 0.28 x %mud - Jorissen 2018 homogenized:
%TSref = 3.6718 + 0.3247 x %mud
Supported EQS conventions:
| Convention | High | Good | Moderate | Poor | Bad |
|---|---|---|---|---|---|
| Parent 2021 | <= 4 |
<= 16 |
<= 36 |
<= 64 |
> 64 |
| Barras & Jorissen 2011 | > 64 |
<= 64 |
<= 36 |
<= 16 |
<= 4 |
The second convention inverts the ecological meaning of low TSI values.
| Class | Rule |
|---|---|
| High | >= 9 |
| Good | >= 5.5 |
| Moderate | >= 2 |
| Poor | >= 1 |
| Bad | < 1 |
0 is treated as Azoic.
| Class | Rule |
|---|---|
| High | >= 0.54 |
| Good | >= 0.45 |
| Moderate | >= 0.31 |
| Poor | >= 0.13 |
| Bad | < 0.13 |
| Threshold Set | High | Good | Moderate | Poor | Bad |
|---|---|---|---|---|---|
O'Brien 2021 Norway >125 µm |
>= 10 |
>= 7 |
>= 5 |
> 2 |
<= 2 |
O'Brien 2021 Norway >63 µm |
>= 22 |
>= 13 |
>= 7 |
> 3 |
<= 3 |
O'Brien 2021 Italy >63 µm |
>= 5 |
>= 4 |
>= 3 |
> 2 |
<= 2 |
Optional EQR mode is available for FSI and exp(H'bc).
EQR = Observed / Reference- The value is clamped to the
0.0-1.0range.
EQS boundaries from EQR:
| Class | Rule |
|---|---|
| High | >= 0.8 |
| Good | >= 0.6 |
| Moderate | >= 0.4 |
| Poor | >= 0.2 |
| Bad | < 0.2 |
Default reference values exposed by the settings dialog:
FSIreference value:10.0exp(H'bc)reference value:20.0
| Index | High | Good | Moderate | Poor | Bad |
|---|---|---|---|---|---|
| BENTIX | >= 4.5 |
>= 3.5 |
>= 2.5 |
>= 2.0 |
< 2.0 |
| BQI | >= 12 |
>= 8 |
>= 5 |
>= 2 |
< 2 |
| Foram-M-AMBI | >= 0.81 |
>= 0.61 |
>= 0.41 |
>= 0.21 |
< 0.21 |
For BENTIX and BQI, 0 is treated as Azoic.
Implemented formula:
FI = (10 x Ps) + Po + (2 x Ph)
Where:
Ps= symbiont-bearing proportionPo= stress-tolerant proportionPh= heterotrophic proportion
Interpretation:
> 4: suitable for coral growth2-4: marginal conditions< 2: unsuitable for coral growth
.NET 10 SDKfor build and run from source. Confirm the installation withdotnet --list-sdks; a10.0.xentry is required.- Windows 10 or Windows 11 for normal GUI execution. The application target is
net10.0-windows. - Bundled reference
.csvand.xlsfiles available at runtime.
NuGet packages used by the project:
ClosedXMLExcelDataReaderExcelDataReader.DataSetOxyPlot.CoreOxyPlot.WindowsFormsSystem.Data.DataSetExtensions
Important build note:
- The project targets
net10.0-windows. - On non-Windows systems,
dotnet buildcan fail withNETSDK1100unless Windows targeting is enabled explicitly.
These instructions build and run the application from this repository. They apply to 64-bit Windows installations; use PowerShell or Windows Terminal.
-
Install the
.NET 10 SDK, then close and reopen the terminal so itsPATHis refreshed. -
Clone the repository and enter its directory:
git clone https://github.com/uniurbit/ForamEcoQS.git cd ForamEcoQS
-
Confirm that an SDK in the
10.0.xseries is available:dotnet --list-sdks
-
Restore, build, and start the GUI:
dotnet restore ForamEcoQS.sln dotnet build ForamEcoQS.sln -c Release dotnet run --project ForamEcoQS -c Release
-
Install all pending Windows updates, then install the
.NET 10 SDK. -
Open a new PowerShell window and verify the SDK:
dotnet --infoThe output must list a
10.0.xSDK. -
Follow steps 2–4 in the Windows 11 tutorial above. The commands and expected behavior are identical on Windows 10.
For users who only need to run a future packaged release, install the matching .NET Desktop Runtime rather than the SDK. Building from this source repository always requires the SDK.
Standard build:
dotnet restore ForamEcoQS.sln
dotnet build ForamEcoQS.sln -c ReleaseOn non-Windows systems:
dotnet build ForamEcoQS.sln -c Release -p:EnableWindowsTargeting=trueThis can build the Windows-targeted application, but GUI execution is still intended for Windows.
dotnet run --project ForamEcoQSIf no command-line arguments are passed, the application starts in GUI mode, shows the splash screen, and then opens the main window.
To run the application without dotnet run (and without installing the .NET runtime on the destination PC), publish a self-contained executable. Run this command from the repository root on a 64-bit Windows machine:
dotnet publish ForamEcoQS\ForamEcoQS.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o .\publish\win-x64The generated application is publish\win-x64\ForamEcoQS.exe. Start the graphical interface directly with:
.\publish\win-x64\ForamEcoQS.exeTo distribute it, copy the complete publish\win-x64 directory, not only the .exe: the bundled .csv and .xls reference databanks in that directory are required for indices that use reference lists. For a 32-bit destination, replace win-x64 with win-x86 in both the publish command and output path.
The executable also accepts the same CLI arguments as dotnet run. For example:
.\publish\win-x64\ForamEcoQS.exe -i "C:\Data\input.xlsx" -index=all -list jorissen -o "C:\Data\results.xlsx" -mud=50dotnet run --project ForamEcoQS -- -i INPUT_FILE [options]Supported options:
-i INPUT_FILE-index=INDEX_LIST-list LIST_NAME-o OUTPUT_FILE-mud=VALUE-worms(verify species not found in the reference databank against the WoRMS online database; requires internet access)-help--help/?
Supported reference list names for -list:
jorissenalvebouchetmedbouchetatlbouchetsouthatlOMalley2021
Accepted index names in -index=:
exp(H'bc)H'log2H'lnFSITSI-MedNQIfFIEIForam-AMBIForam-M-AMBIBENTIXBQIFoRAM IndexSpecies Richness (S)Total Abundance (N)Simpson (1-D)Pielou's JES100
Example:
dotnet run --project ForamEcoQS -- -i data.xlsx -index=all -list jorissen -o results.xlsx -mud=50Example with WoRMS verification of unmatched species:
dotnet run --project ForamEcoQS -- -i data.xlsx -index=all -list jorissen -o results.xlsx -wormsUse this small, deterministic example to verify that the CLI, input parsing, and Excel export work after installation.
-
Create an Excel workbook named
verification-input.xlsx. Its first worksheet must contain the following table, with the first row used as headers:Species Sample_A Sample_B Taxon alpha 10 0 Taxon beta 20 25 Taxon gamma 0 5 -
From the repository root, run:
dotnet run --project ForamEcoQS -c Release -- -i .\verification-input.xlsx "-index=Species Richness (S),Total Abundance (N)" -o .\verification-results.xlsx
-
The command must finish with
Results saved.andDone.. Open theResultsworksheet inverification-results.xlsxand verify these values:Index Sample_A Sample_B Species Richness (S) 2 2 Total Abundance (N) 30 30
This example intentionally uses indices that do not require a reference databank. To calculate reference-list-dependent indices such as Foram-AMBI, add -list jorissen (or another supported list) to the command.
The expected input layout is a species-by-sample matrix:
- The first column must contain species names;
- Each following column represents one sample;
- Positive numeric values are treated as abundances.
CLI mode supports Excel .xls and .xlsx files and reads the first worksheet. GUI mode also supports CSV import.
| Symptom | Cause | Resolution |
|---|---|---|
dotnet is not recognized |
The SDK is not installed or the current terminal has an outdated PATH. |
Install the .NET 10 SDK, close every terminal window, open a new PowerShell window, and run dotnet --info. |
NETSDK1045 or an error saying net10.0-windows is unsupported |
An older SDK is being used. | Install .NET 10 SDK and ensure dotnet --list-sdks shows 10.0.x. Remove or update any repository/user global.json that pins an older SDK. |
NETSDK1100 on macOS or Linux |
The project is Windows-targeted. | Build with -p:EnableWindowsTargeting=true; run the WinForms GUI on Windows. |
Error: Input file ... not found |
The -i path is incorrect or not quoted. |
Use an absolute path or quote a path containing spaces, for example -i "C:\Data\input file.xlsx". |
Error: Input file is empty or invalid |
The file is not a readable Excel workbook, has no rows, or its first worksheet has no header row. | Save the data as .xls or .xlsx, place species names in the first column, and include a header row. |
Error: Could not load reference databank |
The list name is invalid or the application is not run from its build/project output. | Use one of the documented list names (for example jorissen) and run with dotnet run --project ForamEcoQS so bundled data files are copied to the output directory. |
| Excel export fails because the file is in use | results.xlsx is open in Excel or another application. |
Close the file, choose a different output name, and rerun the command. |
ForamEcoQS can produce:
- Calculated result tables in the
Advanced Indiceswindow; - An EQS summary table;
- Excel exports of results;
- PNG exports for generated plots;
- Exports for EQS agreement outputs, including the kappa matrix.
The application includes:
- Selectable Foram-AMBI reference lists;
- A Foram-AMBI List Manager;
- An FSI List Manager;
- A Geographic Areas Database;
- A User Custom Lists Manager;
- Taxon-specific ecological-group overrides;
- Template generation from lists.
- The GUI is Windows-oriented because the project is a Windows Forms application.
- Some indices depend on the selected databank and species classification coverage.
- TSI-Med depends on mud percentage and the selected reference curve.
- FoRAM Index is mainly meaningful for tropical or subtropical reef settings; the software warns when too little of a sample's assemblage matches a FoRAM functional group for the index to be meaningful.
Azoicis treated separately fromBadin several EQS outputs.- WoRMS species verification (GUI checkbox or
-wormsin the CLI) is optional and requires internet access; results depend on the availability and currency of the WoRMS online database at the time of the query.
- Borja A. et al. (2003). AMBI classification boundaries.
- Parent B. et al. (2021). Foram-AMBI and TSI-related threshold updates.
- Bouchet V.M.P. et al. (2025). Brazilian transitional waters Foram-AMBI thresholds.
- Barras C. et al. (2014). TSI-Med reference relationship.
- Jorissen F.J. et al. (2018). Foram-AMBI Mediterranean development.
- O'Brien B.J. et al. (2021).
exp(H'bc)thresholds and related foraminiferal EQS work. - Dimiza M.D. et al. (2016). Foram Stress Index.
- Alve E. et al. (2019). Norwegian Quality Index for foraminifera.
- Simboura N. and Zenetos A. (2002). BENTIX.
- Rosenberg R. et al. (2004). BQI framework.
- Muxika I. et al. (2007). M-AMBI / multivariate ecological quality approach.
- Hallock P. et al. (2003). Original FoRAM Index.
- Prazeres M. et al. (2020). FoRAM Index revisit.
- Mojtahid M. et al. (2006). FIEI.
- WoRMS Editorial Board. World Register of Marine Species. Available from https://www.marinespecies.org at VLIZ. doi:10.14284/170.