Add poster with figures

This commit is contained in:
2025-06-17 22:07:55 +02:00
parent 5319430d5d
commit 4cda1ffb72
23 changed files with 3463 additions and 0 deletions

20
docs/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

35
docs/make.bat Normal file
View File

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

2
docs/poster/.latexmkrc Normal file
View File

@ -0,0 +1,2 @@
$bibtex_use = 2;
$clean_ext = "nav snm";

22
docs/poster/LICENSE.md Normal file
View File

@ -0,0 +1,22 @@
The MIT License (MIT)
=====================
**Copyright (c) 2018-2022 Anish Athalye (me@anishathalye.com)**
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

92
docs/poster/README.md Normal file
View File

@ -0,0 +1,92 @@
# Gemini [![Build Status](https://github.com/anishathalye/gemini/workflows/CI/badge.svg)](https://github.com/anishathalye/gemini/actions?query=workflow%3ACI)
Gemini is a modern LaTeX [beamerposter] theme.
<p align="center">
<a href="https://raw.githubusercontent.com/anishathalye/assets/master/gemini/poster-gemini.pdf">
<img src="https://raw.githubusercontent.com/anishathalye/assets/master/gemini/poster-gemini-small.png">
</a>
</p>
If you're looking for a beamer presentation theme, take a look at [Auriga].
## Dependencies
* A TeX installation that includes [LuaTeX]
* You also need `latexmk` if you want to use the provided `Makefile`
* LaTeX package dependencies including beamerposter (these usually come with
your TeX installation, but if not, you can get them from [CTAN])
* [Raleway] and [Lato], which are both available under Open Font License
## Usage
1. Copy the files in this repository (or clone the repository)
1. In `poster.tex`, set up your paper size, column layout, and scale the
content as necessary
1. Make a copy of `beamercolorthemegemini.sty`, update the `\usecolortheme`
line in `poster.tex`, and theme the poster to your liking (optional, but
highly recommended)
1. Run `make` to build your poster
## FAQ
See the [FAQ] in the Wiki for answers to frequently asked questions such as how
to add an institution logo to the poster.
## Themes
Gemini currently includes three color themes:
* `gemini` (default)
* `mit`
* `labsix`
The alternative themes are intended to be inspiration for you to make your own
color theme. You're highly recommended to make your own color theme (it's
really easy!) or use the default Gemini theme.
### MIT theme
<p align="center">
<a href="https://raw.githubusercontent.com/anishathalye/assets/master/gemini/poster-mit.pdf">
<img src="https://raw.githubusercontent.com/anishathalye/assets/master/gemini/poster-mit-small.png">
</a>
</p>
### LabSix theme
<p align="center">
<a href="https://raw.githubusercontent.com/anishathalye/assets/master/gemini/poster-labsix.pdf">
<img src="https://raw.githubusercontent.com/anishathalye/assets/master/gemini/poster-labsix-small.png">
</a>
</p>
## Design goals
* **Minimal**: clean and easy to read, so that the emphasis is on the content
* **Batteries included**: works and looks good out of the box
* **Easy theming**: easy to create and use a new color theme
## Contributing
Contributions to Gemini such as bug reports, new themes, and new poster
components are greatly appreciated! Given the subjective nature of design,
you're encouraged to open an issue or pull request early to get feedback before
investing a lot of time in implementing a new feature.
## License
Copyright (c) 2018-2022 Anish Athalye. Released under the MIT License. See
[LICENSE.md][license] for details.
[beamerposter]: https://github.com/deselaers/latex-beamerposter
[Auriga]: https://github.com/anishathalye/auriga
[LuaTeX]: http://www.luatex.org/
[CTAN]: https://ctan.org/
[Raleway]: https://www.fontsquirrel.com/fonts/raleway
[Lato]: https://www.fontsquirrel.com/fonts/lato
[license]: LICENSE.md
[FAQ]: https://github.com/anishathalye/gemini/wiki/FAQ

View File

@ -0,0 +1,58 @@
% Gemini theme
% https://github.com/anishathalye/gemini
% ====================
% Definitions
% ====================
\definecolor{lightgray}{RGB}{245, 246, 250}
\definecolor{blue}{RGB}{64, 115, 158}
\definecolor{darkblue}{RGB}{39, 60, 117}
\definecolor{lightblue}{RGB}{232, 244, 255}
% ====================
% Theme
% ====================
% Basic colors
\setbeamercolor{palette primary}{fg=black,bg=white}
\setbeamercolor{palette secondary}{fg=black,bg=white}
\setbeamercolor{palette tertiary}{bg=black,fg=white}
\setbeamercolor{palette quaternary}{fg=black,bg=white}
\setbeamercolor{structure}{fg=darkblue}
% Headline
\setbeamercolor{headline}{fg=lightgray,bg=blue}
\setbeamercolor{headline rule}{bg=darkblue}
% Block
\setbeamercolor{block title}{fg=blue,bg=white}
\setbeamercolor{block separator}{bg=black}
\setbeamercolor{block body}{fg=black,bg=white}
% Alert Block
\setbeamercolor{block alerted title}{fg=blue,bg=lightblue}
\setbeamercolor{block alerted separator}{bg=black}
\setbeamercolor{block alerted body}{fg=black,bg=lightblue}
% Example Block
\setbeamercolor{block example title}{fg=blue,bg=lightgray}
\setbeamercolor{block example separator}{bg=black}
\setbeamercolor{block example body}{fg=black,bg=lightgray}
% Heading
\setbeamercolor{heading}{fg=black}
% Itemize
\setbeamercolor{item}{fg=darkblue}
% Bibliography
\setbeamercolor{bibliography item}{fg=black}
\setbeamercolor{bibliography entry author}{fg=black}
\setbeamercolor{bibliography entry title}{fg=black}
\setbeamercolor{bibliography entry location}{fg=black}
\setbeamercolor{bibliography entry note}{fg=black}
\setbeamertemplate{bibliography entry article}{}
\setbeamertemplate{bibliography entry title}{}
\setbeamertemplate{bibliography entry location}{}
\setbeamertemplate{bibliography entry note}{}

View File

@ -0,0 +1,65 @@
% Gemini theme
% https://github.com/anishathalye/gemini
% UTA colors added
% primiary HEX: #0064B1
% ====================
% Definitions
% ====================
%\definecolor{camblue}{RGB}{0, 62, 114}
% \definecolor{lightnyupurple}{RGB}{159, 120, 184}
% \definecolor{msugreen}{HTML}{18453B}
% \definecolor{umichblue}{HTML}{00274C}
% \definecolor{yaleblue}{HTML}{00356B}
% \definecolor{ualbertagreen}{HTML}{1F4D2A}
% \definecolor{ualbertagold}{HTML}{EDC40A}
% \definecolor{utaBluePrimary}{HTML}{003C77}
% \definecolor{ulethgold}{HTML}{FFCF01}
\definecolor{utaBluePrimary}{HTML}{0064B1}
% Extra colors
\definecolor{lightgray}{RGB}{240, 240, 240}
\definecolor{lightorange}{RGB}{255, 245, 242}
% ====================
% Theme
% ====================
% Basic colors
\setbeamercolor{palette primary}{fg=black,bg=white}
\setbeamercolor{palette secondary}{fg=black,bg=white}
\setbeamercolor{palette tertiary}{bg=black,fg=white}
\setbeamercolor{palette quaternary}{fg=black,bg=white}
\setbeamercolor{structure}{fg=utaBluePrimary}
% Headline
\setbeamercolor{headline}{fg=white,bg=utaBluePrimary}
% Block
\setbeamercolor{block title}{fg=utaBluePrimary,bg=white}
\setbeamercolor{block separator}{bg=black}
\setbeamercolor{block body}{fg=black,bg=white}
% Alert Block
\setbeamercolor{block alerted title}{fg=utaBluePrimary,bg=lightorange}
\setbeamercolor{block alerted separator}{bg=black}
\setbeamercolor{block alerted body}{fg=black,bg=lightorange}
% Example Block
\setbeamercolor{block example title}{fg=utaBluePrimary,bg=lightgray}
\setbeamercolor{block example separator}{bg=black}
\setbeamercolor{block example body}{fg=black,bg=lightgray}
% Heading
\setbeamercolor{heading}{fg=black}
% Itemize
\setbeamercolor{item}{fg=utaBluePrimary}
% Bibliography
\setbeamercolor{bibliography item}{fg=black}
\setbeamercolor{bibliography entry author}{fg=black}
\setbeamercolor{bibliography entry title}{fg=black}
\setbeamercolor{bibliography entry location}{fg=black}
\setbeamercolor{bibliography entry note}{fg=black}

View File

@ -0,0 +1,257 @@
% Gemini theme
% https://github.com/anishathalye/gemini
% ====================
% Dependencies
% ====================
\RequirePackage{exscale}
\RequirePackage{ragged2e}
\RequirePackage{changepage}
\RequirePackage{fontspec}
\RequirePackage{calc}
% ====================
% Fonts
% ====================
\newfontfamily\Raleway[Ligatures=TeX]{Raleway}
\newfontfamily\Lato[Ligatures=TeX]{Lato}
\usefonttheme{professionalfonts}
\setsansfont{Lato}[
UprightFont=*-Light,
ItalicFont=*-LightItalic,
BoldFont=*-Regular,
BoldItalicFont=*-Italic
]
\setbeamerfont{headline}{family=\Raleway}
\setbeamerfont{headline title}{size=\Huge,series=\bfseries}
\setbeamerfont{headline author}{size=\Large}
\setbeamerfont{headline institute}{size=\normalsize}
\setbeamerfont{block title}{family=\Raleway,size=\large,series=\bfseries}
\setbeamerfont{heading}{family=\Lato,series=\bfseries}
\setbeamerfont{caption}{size=\small}
\setbeamerfont{footline}{family=\Raleway,size=\normalsize}
% ====================
% Macros
% ====================
\newcommand{\samelineand}{\qquad}
% ====================
% Elements
% ====================
% List
\def\@listi{\leftmargin\leftmarginii
\topsep 1ex % spacing before
\parsep 0\p@ \@plus\p@
\itemsep 0.5ex} % spacing between
% Itemize
\setbeamertemplate{itemize item}{\raise0.5ex \hbox{\vrule width 0.5ex height 0.5ex}}
\setbeamertemplate{itemize subitem}{\raise0.3ex \hbox{\vrule width 0.5ex height 0.5ex}}
\setbeamertemplate{itemize subsubitem}{\raise0.2ex \hbox{\vrule width 0.5ex height 0.5ex}}
% Enumerate
\setbeamertemplate{enumerate item}{\insertenumlabel.}
\setbeamertemplate{enumerate subitem}{\insertsubenumlabel.}
\setbeamertemplate{enumerate subsubitem}{\insertsubsubenumlabel.}
% Equation
\setlength\belowdisplayshortskip{2ex}
% Caption
\setbeamertemplate{caption}[numbered]
\setbeamertemplate{caption label separator}[period]
\setlength{\abovecaptionskip}{2ex}
\setlength{\belowcaptionskip}{1ex}
% Bibliography
\setbeamertemplate{bibliography item}[text]
% Navigation
\beamertemplatenavigationsymbolsempty
% ====================
% Components
% ====================
% Heading
\newcommand\heading[1]
{%
\par\bigskip
{\usebeamerfont{heading}\usebeamercolor[fg]{heading}#1}\par\smallskip
}
% logo
\newlength{\logoleftwidth}
\setlength{\logoleftwidth}{0cm}
\newlength{\logorightwidth}
\setlength{\logorightwidth}{0cm}
\newlength{\maxlogowidth} % space on both sides set to maxlogowidth to keep title centered
\setlength{\maxlogowidth}{0cm}
\newcommand{\logoright}[1]{
\newcommand{\insertlogoright}{#1}
\settowidth{\logorightwidth}{\insertlogoright}
\addtolength{\logorightwidth}{10ex}
\setlength{\maxlogowidth}{\maxof{\logoleftwidth}{\logorightwidth}}
}
\newcommand{\logoleft}[1]{
\newcommand{\insertlogoleft}{#1}
\settowidth{\logoleftwidth}{\insertlogoleft}
\addtolength{\logoleftwidth}{10ex}
\setlength{\maxlogowidth}{\maxof{\logoleftwidth}{\logorightwidth}}
}
% Headline
\setbeamertemplate{headline}
{
\begin{beamercolorbox}{headline}
\begin{columns}
\begin{column}{\maxlogowidth}
\vskip5ex
\ifdefined\insertlogoleft
\vspace*{\fill}
\hspace{10ex}
\raggedright
\insertlogoleft
\vspace*{\fill}
\else\fi
\end{column}
\begin{column}{\dimexpr\paperwidth-\maxlogowidth-\maxlogowidth}
\usebeamerfont{headline}
\vskip3ex
\centering
\ifx \inserttitle \empty \else
{\usebeamerfont{headline title}\usebeamercolor[fg]{headline title}\inserttitle\\[0.5ex]}
\fi
\ifx \beamer@shortauthor \empty \else
{\usebeamerfont{headline author}\usebeamercolor[fg]{headline author}\insertauthor\\[1ex]}
\fi
\ifx \insertinstitute \empty \else
{\usebeamerfont{headline institute}\usebeamercolor[fg]{headline institute}\insertinstitute\\[1ex]}
\fi
\end{column}
\begin{column}{\maxlogowidth}
\vskip5ex
\ifdefined\insertlogoright
\vspace*{\fill}
\raggedleft
\insertlogoright
\hspace{10ex}
\vspace*{\fill}
\else\fi
\end{column}
\end{columns}
\vspace{5ex}
\ifbeamercolorempty[bg]{headline rule}{}{
\begin{beamercolorbox}[wd=\paperwidth,colsep=0.5ex]{headline rule}\end{beamercolorbox}
}
\end{beamercolorbox}
}
% Block
\setbeamertemplate{block begin}
{
\begin{beamercolorbox}[colsep*=0ex,dp=2ex,center]{block title}
\vskip0pt
\usebeamerfont{block title}\insertblocktitle
\vskip-1.25ex
\begin{beamercolorbox}[colsep=0.025ex]{block separator}\end{beamercolorbox}
\end{beamercolorbox}
{\parskip0pt\par}
\usebeamerfont{block body}
\vskip-0.5ex
\begin{beamercolorbox}[colsep*=0ex]{block body}
\justifying
\setlength{\parskip}{1ex}
\vskip-2ex
}
\setbeamertemplate{block end}
{
\end{beamercolorbox}
\vskip0pt
\vspace*{2ex}
}
% Alert Block
\setbeamertemplate{block alerted begin}
{
\begin{beamercolorbox}[colsep*=0ex,dp=2ex,center]{block alerted title}
\vskip0pt
\usebeamerfont{block title}\insertblocktitle
\vskip-1.25ex
\begin{beamercolorbox}[colsep=0.025ex]{block alerted separator}\end{beamercolorbox}
\end{beamercolorbox}
{\parskip0pt\par}
\usebeamerfont{block body}
\vskip-0.5ex
\begin{beamercolorbox}[colsep*=0ex]{block alerted body}
\justifying
\begin{adjustwidth}{1ex}{1ex}
\setlength{\parskip}{1ex}
\vskip-2ex
}
\setbeamertemplate{block alerted end}
{
\end{adjustwidth}
\vskip1ex
\end{beamercolorbox}
\vskip0pt
\vspace*{2ex}
}
% Example Block
\setbeamertemplate{block example begin}
{
\begin{beamercolorbox}[colsep*=0ex,dp=2ex,center]{block example title}
\vskip0pt
\usebeamerfont{block title}\insertblocktitle
\vskip-1.25ex
\begin{beamercolorbox}[colsep=0.025ex]{block example separator}\end{beamercolorbox}
\end{beamercolorbox}
{\parskip0pt\par}
\usebeamerfont{block body}
\vskip-0.5ex
\begin{beamercolorbox}[colsep*=0ex]{block example body}
\justifying
\begin{adjustwidth}{1ex}{1ex}
\setlength{\parskip}{1ex}
\vskip-2ex
}
\setbeamertemplate{block example end}
{
\end{adjustwidth}
\vskip1ex
\end{beamercolorbox}
\vskip0pt
\vspace*{2ex}
}
% Footer
\newcommand{\footercontent}[1]{\newcommand{\insertfootercontent}{#1}}
\setbeamertemplate{footline}{
\ifdefined\insertfootercontent
\begin{beamercolorbox}[vmode]{headline}
\ifbeamercolorempty[bg]{headline rule}{}{
\begin{beamercolorbox}[wd=\paperwidth,colsep=0.25ex]{headline rule}\end{beamercolorbox}
}
\vspace{1.5ex}
\hspace{\sepwidth}
\usebeamerfont{footline}
\centering
\insertfootercontent
\hspace{\sepwidth}
\vspace{1.5ex}
\end{beamercolorbox}
\else\fi
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,459 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (20241206.2353)
-->
<!-- Pages: 1 -->
<svg width="6530pt" height="1932pt"
viewBox="0.00 0.00 6529.73 1932.13" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1928.13)">
<polygon fill="white" stroke="none" points="-4,4 -4,-1928.13 6525.73,-1928.13 6525.73,4 -4,4"/>
<!-- apply_calibration_factors -->
<g id="node1" class="node">
<title>apply_calibration_factors</title>
<polygon fill="lightblue" stroke="black" points="3465.5,-1569.02 2960.5,-1569.02 2960.5,-1507.02 3465.5,-1507.02 3465.5,-1569.02"/>
<text text-anchor="middle" x="3213" y="-1519.42" font-family="Times New Roman,serif" font-size="48.00">apply_calibration_factors</text>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv -->
<g id="node6" class="node">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv</title>
<g id="a_node6"><a xlink:title="data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv">
<ellipse fill="lightgreen" stroke="black" cx="4235.12" cy="-1629.02" rx="613.24" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-1637.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="4235.12" y="-1583.42" font-family="Times New Roman,serif" font-size="48.00">ACSM_JFJ_2024_timeseries_calibrated.csv</text>
</a>
</g>
</g>
<!-- apply_calibration_factors&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv -->
<g id="edge5" class="edge">
<title>apply_calibration_factors&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv</title>
<path fill="none" stroke="black" d="M3465.84,-1560.49C3541.01,-1567.2 3626.35,-1574.81 3712.14,-1582.46"/>
<polygon fill="black" stroke="black" points="3711.64,-1585.93 3721.92,-1583.33 3712.27,-1578.96 3711.64,-1585.93"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv -->
<g id="node7" class="node">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv</title>
<g id="a_node7"><a xlink:title="data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv">
<ellipse fill="lightgreen" stroke="black" cx="4235.12" cy="-1447.02" rx="665.74" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-1455.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="4235.12" y="-1401.42" font-family="Times New Roman,serif" font-size="48.00">ACSM_JFJ_2024_timeseries_calibrated_err.csv</text>
</a>
</g>
</g>
<!-- apply_calibration_factors&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv -->
<g id="edge6" class="edge">
<title>apply_calibration_factors&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv</title>
<path fill="none" stroke="black" d="M3465.84,-1515.56C3532.55,-1509.61 3607.26,-1502.94 3683.18,-1496.17"/>
<polygon fill="black" stroke="black" points="3683.24,-1499.68 3692.89,-1495.31 3682.62,-1492.71 3683.24,-1499.68"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv -->
<g id="node8" class="node">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv</title>
<g id="a_node8"><a xlink:title="data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv">
<ellipse fill="lightgreen" stroke="black" cx="4235.12" cy="-1265.02" rx="733.62" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-1273.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="4235.12" y="-1219.42" font-family="Times New Roman,serif" font-size="48.00">ACSM_JFJ_2024_timeseries_calibration_factors.csv</text>
</a>
</g>
</g>
<!-- apply_calibration_factors&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv -->
<g id="edge7" class="edge">
<title>apply_calibration_factors&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv</title>
<path fill="none" stroke="black" d="M3251.12,-1506.8C3303.31,-1464.79 3403.06,-1391.29 3501.5,-1356.02 3544.65,-1340.57 3590.03,-1327.66 3636.19,-1316.88"/>
<polygon fill="black" stroke="black" points="3636.87,-1320.31 3645.83,-1314.66 3635.3,-1313.49 3636.87,-1320.31"/>
</g>
<!-- pipelines/steps/apply_calibration_factors.py -->
<g id="node2" class="node">
<title>pipelines/steps/apply_calibration_factors.py</title>
<g id="a_node2"><a xlink:title="pipelines/steps/apply_calibration_factors.py">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-1720.02" rx="399.52" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-1728.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/steps/</text>
<text text-anchor="middle" x="2450.21" y="-1674.42" font-family="Times New Roman,serif" font-size="48.00">apply_calibration_factors.py</text>
</a>
</g>
</g>
<!-- pipelines/steps/apply_calibration_factors.py&#45;&gt;apply_calibration_factors -->
<g id="edge1" class="edge">
<title>pipelines/steps/apply_calibration_factors.py&#45;&gt;apply_calibration_factors</title>
<path fill="none" stroke="black" d="M2755.98,-1666.86C2812.28,-1655.5 2870.36,-1642.75 2924.5,-1629.02 2987.3,-1613.11 3056.57,-1591.31 3111.37,-1573.04"/>
<polygon fill="black" stroke="black" points="3112.33,-1576.42 3120.7,-1569.92 3110.11,-1569.78 3112.33,-1576.42"/>
</g>
<!-- data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5 -->
<g id="node3" class="node">
<title>data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5</title>
<g id="a_node3"><a xlink:title="data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5">
<ellipse fill="lightgrey" stroke="black" cx="684.83" cy="-721.02" rx="684.83" ry="82.02"/>
<text text-anchor="middle" x="684.83" y="-729.42" font-family="Times New Roman,serif" font-size="48.00">data/</text>
<text text-anchor="middle" x="684.83" y="-675.42" font-family="Times New Roman,serif" font-size="48.00">collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5</text>
</a>
</g>
</g>
<!-- data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;apply_calibration_factors -->
<g id="edge2" class="edge">
<title>data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;apply_calibration_factors</title>
<path fill="none" stroke="black" d="M747.19,-803.01C914.82,-1019.22 1406.27,-1602.59 1975.92,-1811.02 2371.84,-1955.89 2532.94,-1967.31 2924.5,-1811.02 3042.77,-1763.82 3140.24,-1642.27 3185.22,-1578.48"/>
<polygon fill="black" stroke="black" points="3188.02,-1580.58 3190.86,-1570.37 3182.27,-1576.58 3188.02,-1580.58"/>
</g>
<!-- generate_flags_diagnostics -->
<g id="node9" class="node">
<title>generate_flags_diagnostics</title>
<polygon fill="lightblue" stroke="black" points="1939.92,-515.02 1405.67,-515.02 1405.67,-453.02 1939.92,-453.02 1939.92,-515.02"/>
<text text-anchor="middle" x="1672.79" y="-465.42" font-family="Times New Roman,serif" font-size="48.00">generate_flags_diagnostics</text>
</g>
<!-- data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;generate_flags_diagnostics -->
<g id="edge9" class="edge">
<title>data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;generate_flags_diagnostics</title>
<path fill="none" stroke="black" d="M1042.49,-650.67C1148.23,-628.25 1263.99,-602.17 1369.67,-575.02 1434.59,-558.35 1506.47,-536.82 1563.83,-518.89"/>
<polygon fill="black" stroke="black" points="1564.8,-522.26 1573.29,-515.93 1562.7,-515.58 1564.8,-522.26"/>
</g>
<!-- generate_flags_cpc -->
<g id="node13" class="node">
<title>generate_flags_cpc</title>
<polygon fill="lightblue" stroke="black" points="1864.92,-333.02 1480.67,-333.02 1480.67,-271.02 1864.92,-271.02 1864.92,-333.02"/>
<text text-anchor="middle" x="1672.79" y="-283.42" font-family="Times New Roman,serif" font-size="48.00">generate_flags_cpc</text>
</g>
<!-- data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;generate_flags_cpc -->
<g id="edge13" class="edge">
<title>data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;generate_flags_cpc</title>
<path fill="none" stroke="black" d="M1218.39,-669.45C1274.12,-646.71 1326.18,-616.06 1369.67,-575.02 1413.58,-533.58 1367.96,-491.19 1405.67,-444.02 1445.06,-394.75 1506.31,-360.4 1560.12,-337.85"/>
<polygon fill="black" stroke="black" points="1561.44,-341.09 1569.38,-334.07 1558.8,-334.61 1561.44,-341.09"/>
</g>
<!-- generate_flags_species -->
<g id="node15" class="node">
<title>generate_flags_species</title>
<polygon fill="lightblue" stroke="black" points="3441.12,-752.02 2984.87,-752.02 2984.87,-690.02 3441.12,-690.02 3441.12,-752.02"/>
<text text-anchor="middle" x="3213" y="-702.42" font-family="Times New Roman,serif" font-size="48.00">generate_flags_species</text>
</g>
<!-- data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;generate_flags_species -->
<g id="edge16" class="edge">
<title>data/collection_JFJ_2024_2025&#45;06&#45;10_2025&#45;06&#45;10.h5&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M1301.98,-756.85C1751.98,-776.71 2376.64,-791.19 2924.5,-757.02 2940.41,-756.03 2956.78,-754.73 2973.27,-753.22"/>
<polygon fill="black" stroke="black" points="2973.56,-756.71 2983.18,-752.28 2972.9,-749.74 2973.56,-756.71"/>
</g>
<!-- pipelines/params/calibration_factors.yaml -->
<g id="node4" class="node">
<title>pipelines/params/calibration_factors.yaml</title>
<g id="a_node4"><a xlink:title="pipelines/params/calibration_factors.yaml">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-1538.02" rx="341.18" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-1546.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/params/</text>
<text text-anchor="middle" x="2450.21" y="-1492.42" font-family="Times New Roman,serif" font-size="48.00">calibration_factors.yaml</text>
</a>
</g>
</g>
<!-- pipelines/params/calibration_factors.yaml&#45;&gt;apply_calibration_factors -->
<g id="edge3" class="edge">
<title>pipelines/params/calibration_factors.yaml&#45;&gt;apply_calibration_factors</title>
<path fill="none" stroke="black" d="M2791.83,-1538.02C2844.5,-1538.02 2898.19,-1538.02 2948.82,-1538.02"/>
<polygon fill="black" stroke="black" points="2948.74,-1541.52 2958.74,-1538.02 2948.74,-1534.52 2948.74,-1541.52"/>
</g>
<!-- campaignDescriptor.yaml -->
<g id="node5" class="node">
<title>campaignDescriptor.yaml</title>
<g id="a_node5"><a xlink:title="campaignDescriptor.yaml">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-1394.02" rx="360.27" ry="43.84"/>
<text text-anchor="middle" x="2450.21" y="-1375.42" font-family="Times New Roman,serif" font-size="48.00">campaignDescriptor.yaml</text>
</a>
</g>
</g>
<!-- campaignDescriptor.yaml&#45;&gt;apply_calibration_factors -->
<g id="edge4" class="edge">
<title>campaignDescriptor.yaml&#45;&gt;apply_calibration_factors</title>
<path fill="none" stroke="black" d="M2750.23,-1418.56C2808.37,-1425.84 2868.59,-1435.16 2924.5,-1447.02 2989.92,-1460.9 3061.63,-1483.59 3117.07,-1502.83"/>
<polygon fill="black" stroke="black" points="3115.91,-1506.14 3126.51,-1506.13 3118.22,-1499.53 3115.91,-1506.14"/>
</g>
<!-- prepare_ebas_submission -->
<g id="node22" class="node">
<title>prepare_ebas_submission</title>
<polygon fill="lightblue" stroke="black" points="5512.75,-1114.02 5004.75,-1114.02 5004.75,-1052.02 5512.75,-1052.02 5512.75,-1114.02"/>
<text text-anchor="middle" x="5258.75" y="-1064.42" font-family="Times New Roman,serif" font-size="48.00">prepare_ebas_submission</text>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv&#45;&gt;prepare_ebas_submission -->
<g id="edge26" class="edge">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_calibrated.csv&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4821.17,-1604.77C4873.28,-1588.47 4923.39,-1566.73 4968.75,-1538.02 5126.45,-1438.22 5213.83,-1217.78 5244.75,-1125.24"/>
<polygon fill="black" stroke="black" points="5248.06,-1126.37 5247.85,-1115.78 5241.41,-1124.19 5248.06,-1126.37"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv&#45;&gt;prepare_ebas_submission -->
<g id="edge27" class="edge">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_calibrated_err.csv&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4823.06,-1408.28C4873.53,-1394.79 4922.8,-1377.67 4968.75,-1356.02 5083.37,-1302.03 5182.21,-1185.09 5228.96,-1123.25"/>
<polygon fill="black" stroke="black" points="5231.66,-1125.49 5234.84,-1115.39 5226.05,-1121.3 5231.66,-1125.49"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv&#45;&gt;prepare_ebas_submission -->
<g id="edge28" class="edge">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_calibration_factors.csv&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4776.16,-1209.25C4841.34,-1199.19 4906.75,-1187.52 4968.75,-1174.02 5034.17,-1159.78 5105.99,-1137.2 5161.67,-1118.1"/>
<polygon fill="black" stroke="black" points="5162.48,-1121.52 5170.79,-1114.95 5160.2,-1114.91 5162.48,-1121.52"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_meta_flags.csv -->
<g id="node12" class="node">
<title>data/.../2024/ACSM_JFJ_2024_meta_flags.csv</title>
<g id="a_node12"><a xlink:title="data/.../2024/ACSM_JFJ_2024_meta_flags.csv">
<ellipse fill="lightgreen" stroke="black" cx="2450.21" cy="-484.02" rx="474.29" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-492.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="2450.21" y="-438.42" font-family="Times New Roman,serif" font-size="48.00">ACSM_JFJ_2024_meta_flags.csv</text>
</a>
</g>
</g>
<!-- generate_flags_diagnostics&#45;&gt;data/.../2024/ACSM_JFJ_2024_meta_flags.csv -->
<g id="edge11" class="edge">
<title>generate_flags_diagnostics&#45;&gt;data/.../2024/ACSM_JFJ_2024_meta_flags.csv</title>
<path fill="none" stroke="black" d="M1940.37,-484.02C1948.27,-484.02 1956.23,-484.02 1964.26,-484.02"/>
<polygon fill="black" stroke="black" points="1964.13,-487.52 1974.13,-484.02 1964.13,-480.52 1964.13,-487.52"/>
</g>
<!-- pipelines/steps/generate_flags.py -->
<g id="node10" class="node">
<title>pipelines/steps/generate_flags.py</title>
<g id="a_node10"><a xlink:title="pipelines/steps/generate_flags.py">
<ellipse fill="lightgrey" stroke="black" cx="684.83" cy="-302.02" rx="250.49" ry="82.02"/>
<text text-anchor="middle" x="684.83" y="-310.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/steps/</text>
<text text-anchor="middle" x="684.83" y="-256.42" font-family="Times New Roman,serif" font-size="48.00">generate_flags.py</text>
</a>
</g>
</g>
<!-- pipelines/steps/generate_flags.py&#45;&gt;generate_flags_diagnostics -->
<g id="edge8" class="edge">
<title>pipelines/steps/generate_flags.py&#45;&gt;generate_flags_diagnostics</title>
<path fill="none" stroke="black" d="M925.99,-324.46C1057.85,-339.16 1223.76,-361.56 1369.67,-393.02 1437.59,-407.68 1512.39,-430.15 1570.56,-449.1"/>
<polygon fill="black" stroke="black" points="1569.2,-452.33 1579.79,-452.12 1571.38,-445.68 1569.2,-452.33"/>
</g>
<!-- pipelines/steps/generate_flags.py&#45;&gt;generate_flags_cpc -->
<g id="edge12" class="edge">
<title>pipelines/steps/generate_flags.py&#45;&gt;generate_flags_cpc</title>
<path fill="none" stroke="black" d="M935.59,-302.02C1100.61,-302.02 1314.15,-302.02 1468.72,-302.02"/>
<polygon fill="black" stroke="black" points="1468.7,-305.52 1478.7,-302.02 1468.7,-298.52 1468.7,-305.52"/>
</g>
<!-- pipelines/steps/generate_flags.py&#45;&gt;generate_flags_species -->
<g id="edge15" class="edge">
<title>pipelines/steps/generate_flags.py&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M926.6,-279.95C1185.54,-257.41 1609.46,-223.93 1975.92,-211.02 2081.25,-207.31 2833.49,-157.86 2924.5,-211.02 3103.02,-315.32 3179.36,-575.86 3203.19,-678.5"/>
<polygon fill="black" stroke="black" points="3199.75,-679.19 3205.38,-688.17 3206.58,-677.65 3199.75,-679.19"/>
</g>
<!-- pipelines/params/validity_thresholds.yaml -->
<g id="node11" class="node">
<title>pipelines/params/validity_thresholds.yaml</title>
<g id="a_node11"><a xlink:title="pipelines/params/validity_thresholds.yaml">
<ellipse fill="lightgrey" stroke="black" cx="684.83" cy="-484.02" rx="348.07" ry="82.02"/>
<text text-anchor="middle" x="684.83" y="-492.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/params/</text>
<text text-anchor="middle" x="684.83" y="-438.42" font-family="Times New Roman,serif" font-size="48.00">validity_thresholds.yaml</text>
</a>
</g>
</g>
<!-- pipelines/params/validity_thresholds.yaml&#45;&gt;generate_flags_diagnostics -->
<g id="edge10" class="edge">
<title>pipelines/params/validity_thresholds.yaml&#45;&gt;generate_flags_diagnostics</title>
<path fill="none" stroke="black" d="M1033.1,-484.02C1151.31,-484.02 1281.81,-484.02 1393.87,-484.02"/>
<polygon fill="black" stroke="black" points="1393.83,-487.52 1403.83,-484.02 1393.83,-480.52 1393.83,-487.52"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_meta_flags.csv&#45;&gt;generate_flags_species -->
<g id="edge18" class="edge">
<title>data/.../2024/ACSM_JFJ_2024_meta_flags.csv&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2800.5,-539.64C2842.75,-549.74 2884.92,-561.47 2924.5,-575.02 3006.44,-603.08 3094.34,-650.55 3151.07,-683.72"/>
<polygon fill="black" stroke="black" points="3149.25,-686.71 3159.64,-688.77 3152.8,-680.68 3149.25,-686.71"/>
</g>
<!-- data/.../2024/CPC.lev1_flags.csv -->
<g id="node14" class="node">
<title>data/.../2024/CPC.lev1_flags.csv</title>
<g id="a_node14"><a xlink:title="data/.../2024/CPC.lev1_flags.csv">
<ellipse fill="lightgreen" stroke="black" cx="2450.21" cy="-302.02" rx="279.13" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-310.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="2450.21" y="-256.42" font-family="Times New Roman,serif" font-size="48.00">CPC.lev1_flags.csv</text>
</a>
</g>
</g>
<!-- generate_flags_cpc&#45;&gt;data/.../2024/CPC.lev1_flags.csv -->
<g id="edge14" class="edge">
<title>generate_flags_cpc&#45;&gt;data/.../2024/CPC.lev1_flags.csv</title>
<path fill="none" stroke="black" d="M1864.97,-302.02C1953.71,-302.02 2061.12,-302.02 2159.51,-302.02"/>
<polygon fill="black" stroke="black" points="2159.34,-305.52 2169.34,-302.02 2159.34,-298.52 2159.34,-305.52"/>
</g>
<!-- data/.../2024/CPC.lev1_flags.csv&#45;&gt;generate_flags_species -->
<g id="edge19" class="edge">
<title>data/.../2024/CPC.lev1_flags.csv&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2720.95,-322.42C2790.53,-335.93 2863.07,-357.81 2924.5,-393.02 3048.73,-464.24 3146.3,-609.22 3188.81,-680.13"/>
<polygon fill="black" stroke="black" points="3185.56,-681.51 3193.67,-688.32 3191.58,-677.94 3185.56,-681.51"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv -->
<g id="node21" class="node">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv</title>
<g id="a_node21"><a xlink:title="data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv">
<ellipse fill="lightgreen" stroke="black" cx="4235.12" cy="-1083.02" rx="545.89" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-1091.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="4235.12" y="-1037.42" font-family="Times New Roman,serif" font-size="48.00">ACSM_JFJ_2024_timeseries_flags.csv</text>
</a>
</g>
</g>
<!-- generate_flags_species&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv -->
<g id="edge24" class="edge">
<title>generate_flags_species&#45;&gt;data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv</title>
<path fill="none" stroke="black" d="M3236.24,-752.4C3279.66,-810.91 3382.02,-935.82 3501.5,-992.02 3563.56,-1021.22 3631.69,-1042.19 3700.63,-1057.09"/>
<polygon fill="black" stroke="black" points="3699.72,-1060.47 3710.22,-1059.12 3701.16,-1053.62 3699.72,-1060.47"/>
</g>
<!-- pipelines/params/calibration_params.yaml -->
<g id="node16" class="node">
<title>pipelines/params/calibration_params.yaml</title>
<g id="a_node16"><a xlink:title="pipelines/params/calibration_params.yaml">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-82.02" rx="347.01" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-90.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/params/</text>
<text text-anchor="middle" x="2450.21" y="-36.42" font-family="Times New Roman,serif" font-size="48.00">calibration_params.yaml</text>
</a>
</g>
</g>
<!-- pipelines/params/calibration_params.yaml&#45;&gt;generate_flags_species -->
<g id="edge17" class="edge">
<title>pipelines/params/calibration_params.yaml&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2778.64,-108.98C2830.85,-124 2881.69,-146.02 2924.5,-178.02 3098.66,-308.23 3177.76,-575.4 3202.75,-678.83"/>
<polygon fill="black" stroke="black" points="3199.28,-679.35 3204.99,-688.28 3206.09,-677.74 3199.28,-679.35"/>
</g>
<!-- data/.../2024/flag_10_Org_11000.json -->
<g id="node17" class="node">
<title>data/.../2024/flag_10_Org_11000.json</title>
<g id="a_node17"><a xlink:title="data/.../2024/flag_10_Org_11000.json">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-1250.02" rx="349.66" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-1258.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="2450.21" y="-1204.42" font-family="Times New Roman,serif" font-size="48.00">flag_10_Org_11000.json</text>
</a>
</g>
</g>
<!-- data/.../2024/flag_10_Org_11000.json&#45;&gt;generate_flags_species -->
<g id="edge20" class="edge">
<title>data/.../2024/flag_10_Org_11000.json&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2779.78,-1222.34C2831,-1208.27 2881.22,-1188 2924.5,-1159.02 3074,-1058.94 3164.11,-852.05 3197.35,-763.14"/>
<polygon fill="black" stroke="black" points="3200.62,-764.41 3200.79,-753.82 3194.05,-761.99 3200.62,-764.41"/>
</g>
<!-- data/.../2024/flag_11_NH4_11000.json -->
<g id="node18" class="node">
<title>data/.../2024/flag_11_NH4_11000.json</title>
<g id="a_node18"><a xlink:title="data/.../2024/flag_11_NH4_11000.json">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-1068.02" rx="362.39" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-1076.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="2450.21" y="-1022.42" font-family="Times New Roman,serif" font-size="48.00">flag_11_NH4_11000.json</text>
</a>
</g>
</g>
<!-- data/.../2024/flag_11_NH4_11000.json&#45;&gt;generate_flags_species -->
<g id="edge21" class="edge">
<title>data/.../2024/flag_11_NH4_11000.json&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2772.96,-1030.42C2825.2,-1017.52 2877.52,-1000.23 2924.5,-977.02 3032.51,-923.68 3130.95,-818.54 3179.75,-760.99"/>
<polygon fill="black" stroke="black" points="3182.14,-763.59 3185.89,-753.68 3176.78,-759.09 3182.14,-763.59"/>
</g>
<!-- data/.../2024/flag_12_NH4_11000.json -->
<g id="node19" class="node">
<title>data/.../2024/flag_12_NH4_11000.json</title>
<g id="a_node19"><a xlink:title="data/.../2024/flag_12_NH4_11000.json">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-886.02" rx="363.45" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-894.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="2450.21" y="-840.42" font-family="Times New Roman,serif" font-size="48.00">flag_12_NH4_11000.json</text>
</a>
</g>
</g>
<!-- data/.../2024/flag_12_NH4_11000.json&#45;&gt;generate_flags_species -->
<g id="edge22" class="edge">
<title>data/.../2024/flag_12_NH4_11000.json&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2725.6,-832.08C2790.89,-818.78 2860.24,-804.25 2924.5,-790.02 2973.44,-779.19 3026.87,-766.59 3074.25,-755.13"/>
<polygon fill="black" stroke="black" points="3074.84,-758.59 3083.73,-752.84 3073.19,-751.79 3074.84,-758.59"/>
</g>
<!-- data/.../2024/flag_14_Org_11000.json -->
<g id="node20" class="node">
<title>data/.../2024/flag_14_Org_11000.json</title>
<g id="a_node20"><a xlink:title="data/.../2024/flag_14_Org_11000.json">
<ellipse fill="lightgrey" stroke="black" cx="2450.21" cy="-666.02" rx="349.66" ry="82.02"/>
<text text-anchor="middle" x="2450.21" y="-674.42" font-family="Times New Roman,serif" font-size="48.00">data/.../2024/</text>
<text text-anchor="middle" x="2450.21" y="-620.42" font-family="Times New Roman,serif" font-size="48.00">flag_14_Org_11000.json</text>
</a>
</g>
</g>
<!-- data/.../2024/flag_14_Org_11000.json&#45;&gt;generate_flags_species -->
<g id="edge23" class="edge">
<title>data/.../2024/flag_14_Org_11000.json&#45;&gt;generate_flags_species</title>
<path fill="none" stroke="black" d="M2784.9,-690.15C2848.29,-694.73 2913.43,-699.44 2973.15,-703.76"/>
<polygon fill="black" stroke="black" points="2972.89,-707.25 2983.12,-704.48 2973.4,-700.27 2972.89,-707.25"/>
</g>
<!-- data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv&#45;&gt;prepare_ebas_submission -->
<g id="edge29" class="edge">
<title>data/.../2024/ACSM_JFJ_2024_timeseries_flags.csv&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4781.33,-1083.02C4854.93,-1083.02 4927.58,-1083.02 4993.11,-1083.02"/>
<polygon fill="black" stroke="black" points="4992.9,-1086.52 5002.9,-1083.02 4992.9,-1079.52 4992.9,-1086.52"/>
</g>
<!-- data/JFJ_ACSM&#45;017_2024.txt -->
<g id="node26" class="node">
<title>data/JFJ_ACSM&#45;017_2024.txt</title>
<g id="a_node26"><a xlink:title="data/JFJ_ACSM&#45;017_2024.txt">
<ellipse fill="lightgreen" stroke="black" cx="6035.24" cy="-1174.02" rx="361.86" ry="82.02"/>
<text text-anchor="middle" x="6035.24" y="-1182.42" font-family="Times New Roman,serif" font-size="48.00">data/</text>
<text text-anchor="middle" x="6035.24" y="-1128.42" font-family="Times New Roman,serif" font-size="48.00">JFJ_ACSM&#45;017_2024.txt</text>
</a>
</g>
</g>
<!-- prepare_ebas_submission&#45;&gt;data/JFJ_ACSM&#45;017_2024.txt -->
<g id="edge32" class="edge">
<title>prepare_ebas_submission&#45;&gt;data/JFJ_ACSM&#45;017_2024.txt</title>
<path fill="none" stroke="black" d="M5513.07,-1112.79C5573.33,-1119.87 5638.51,-1127.53 5701.71,-1134.95"/>
<polygon fill="black" stroke="black" points="5701.22,-1138.42 5711.56,-1136.11 5702.04,-1131.47 5701.22,-1138.42"/>
</g>
<!-- data/JFJ_ACSM&#45;017_FLAGS_2024.txt -->
<g id="node27" class="node">
<title>data/JFJ_ACSM&#45;017_FLAGS_2024.txt</title>
<g id="a_node27"><a xlink:title="data/JFJ_ACSM&#45;017_FLAGS_2024.txt">
<ellipse fill="lightgreen" stroke="black" cx="6035.24" cy="-992.02" rx="486.49" ry="82.02"/>
<text text-anchor="middle" x="6035.24" y="-1000.42" font-family="Times New Roman,serif" font-size="48.00">data/</text>
<text text-anchor="middle" x="6035.24" y="-946.42" font-family="Times New Roman,serif" font-size="48.00">JFJ_ACSM&#45;017_FLAGS_2024.txt</text>
</a>
</g>
</g>
<!-- prepare_ebas_submission&#45;&gt;data/JFJ_ACSM&#45;017_FLAGS_2024.txt -->
<g id="edge33" class="edge">
<title>prepare_ebas_submission&#45;&gt;data/JFJ_ACSM&#45;017_FLAGS_2024.txt</title>
<path fill="none" stroke="black" d="M5513.07,-1053.26C5548.72,-1049.07 5586.08,-1044.68 5623.74,-1040.26"/>
<polygon fill="black" stroke="black" points="5623.88,-1043.76 5633.4,-1039.12 5623.06,-1036.81 5623.88,-1043.76"/>
</g>
<!-- pipelines/steps/prepare_ebas_submission.py -->
<g id="node23" class="node">
<title>pipelines/steps/prepare_ebas_submission.py</title>
<g id="a_node23"><a xlink:title="pipelines/steps/prepare_ebas_submission.py">
<ellipse fill="lightgrey" stroke="black" cx="4235.12" cy="-901.02" rx="401.64" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-909.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/steps/</text>
<text text-anchor="middle" x="4235.12" y="-855.42" font-family="Times New Roman,serif" font-size="48.00">prepare_ebas_submission.py</text>
</a>
</g>
</g>
<!-- pipelines/steps/prepare_ebas_submission.py&#45;&gt;prepare_ebas_submission -->
<g id="edge25" class="edge">
<title>pipelines/steps/prepare_ebas_submission.py&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4604.46,-933.56C4721.67,-947.43 4851.34,-966.47 4968.75,-992.02 5034.17,-1006.27 5105.99,-1028.84 5161.67,-1047.95"/>
<polygon fill="black" stroke="black" points="5160.2,-1051.14 5170.79,-1051.1 5162.48,-1044.53 5160.2,-1051.14"/>
</g>
<!-- pipelines/params/&quot;limits_of_detection.yaml -->
<g id="node24" class="node">
<title>pipelines/params/&quot;limits_of_detection.yaml</title>
<g id="a_node24"><a xlink:title="pipelines/params/&quot;limits_of_detection.yaml">
<ellipse fill="lightgrey" stroke="black" cx="4235.12" cy="-719.02" rx="365.57" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-727.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/params/</text>
<text text-anchor="middle" x="4235.12" y="-673.42" font-family="Times New Roman,serif" font-size="48.00">&quot;limits_of_detection.yaml</text>
</a>
</g>
</g>
<!-- pipelines/params/&quot;limits_of_detection.yaml&#45;&gt;prepare_ebas_submission -->
<g id="edge30" class="edge">
<title>pipelines/params/&quot;limits_of_detection.yaml&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4600.88,-719.23C4722.49,-730.88 4855.7,-756.77 4968.75,-810.02 5083.37,-864.02 5182.21,-980.96 5228.96,-1042.8"/>
<polygon fill="black" stroke="black" points="5226.05,-1044.75 5234.84,-1050.66 5231.66,-1040.56 5226.05,-1044.75"/>
</g>
<!-- pipelines/params/&quot;station_params.yaml -->
<g id="node25" class="node">
<title>pipelines/params/&quot;station_params.yaml</title>
<g id="a_node25"><a xlink:title="pipelines/params/&quot;station_params.yaml">
<ellipse fill="lightgrey" stroke="black" cx="4235.12" cy="-537.02" rx="306.71" ry="82.02"/>
<text text-anchor="middle" x="4235.12" y="-545.42" font-family="Times New Roman,serif" font-size="48.00">pipelines/params/</text>
<text text-anchor="middle" x="4235.12" y="-491.42" font-family="Times New Roman,serif" font-size="48.00">&quot;station_params.yaml</text>
</a>
</g>
</g>
<!-- pipelines/params/&quot;station_params.yaml&#45;&gt;prepare_ebas_submission -->
<g id="edge31" class="edge">
<title>pipelines/params/&quot;station_params.yaml&#45;&gt;prepare_ebas_submission</title>
<path fill="none" stroke="black" d="M4533.42,-517.32C4674.96,-521.44 4840.81,-547.06 4968.75,-628.02 5126.45,-727.83 5213.83,-948.27 5244.75,-1040.81"/>
<polygon fill="black" stroke="black" points="5241.41,-1041.86 5247.85,-1050.27 5248.06,-1039.68 5241.41,-1041.86"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

38
docs/poster/poster.bib Normal file
View File

@ -0,0 +1,38 @@
@book{chacon2014pro,
title={Pro git},
author={Chacon, Scott and Straub, Ben},
year={2014},
publisher={Springer Nature}
}
@article{wilkinson2016fair,
title={The FAIR Guiding Principles for scientific data management and stewardship},
author={Wilkinson, Mark D and Dumontier, Michel and Aalbersberg, IJsbrand Jan and Appleton, Gabrielle and Axton, Myles and Baak, Arie and Blomberg, Niklas and Boiten, Jan-Willem and da Silva Santos, Luiz Bonino and Bourne, Philip E and others},
journal={Scientific data},
volume={3},
number={1},
pages={1--9},
year={2016},
publisher={Nature Publishing Group}
}
@article{konnecke2015nexus,
title={The NeXus data format},
author={K{\"o}nnecke, Mark and Akeroyd, Frederick A and Bernstein, Herbert J and Brewster, Aaron S and Campbell, Stuart I and Clausen, Bj{\"o}rn and Cottrell, Stephen and Hoffmann, Jens Uwe and Jemian, Pete R and M{\"a}nnicke, David and others},
journal={Journal of applied crystallography},
volume={48},
number={1},
pages={301--305},
year={2015},
publisher={International Union of Crystallography}
}
@article{bartels2023time,
title={It is Time to Introduce the Next Generation of Chemists to FAIR and Open Science: Chemical Education},
author={Bartels-Rausch, Thorsten and Ammann, Markus},
journal={Chimia},
volume={77},
number={10},
pages={694--696},
year={2023}
}

313
docs/poster/poster.tex Normal file
View File

@ -0,0 +1,313 @@
% Unofficial University of Texas at Arlington Math Poster template:
% A fork of the unofficial University of Lethbridge Poster template: https://www.overleaf.com/latex/templates/university-of-lethbridge-unofficial-poster-template/nddfzgvqvfwf
% which is a fork of unofficial University of Alberta Poster template:
% which is a fork of Yale template: https://www.overleaf.com/latex/templates/yale-poster-template/rjpgqfgvsjcv
% which is a fork of the UMich template https://www.overleaf.com/latex/templates/university-of-michigan-umich-poster-template/xpnqzzxwbjzc
% which is fork of the MSU template https://www.overleaf.com/latex/templates/an-unofficial-poster-template-for-michigan-state-university/wnymbgpxnnwd
% which is a fork of https://www.overleaf.com/latex/templates/an-unofficial-poster-template-for-new-york-university/krgqtqmzdqhg
% which is a fork of https://github.com/anishathalye/gemini
% also refer to https://github.com/k4rtik/uchicago-poster
\documentclass[final]{beamer}
% ====================
% Packages
% ====================
\usepackage[T1]{fontenc}
\usepackage[utf8]{luainputenc}
\usepackage{lmodern}
%\usepackage[size=custom, width=122,height=91, scale=1.2]{beamerposter}
\usepackage[orientation=portrait, size=a0, scale=1.25]{beamerposter}
\usetheme{gemini}
\usecolortheme{msu}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepackage{anyfontsize}
\usepackage{multirow}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
% ====================
% Lengths
% ====================
% If you have N columns, choose \sepwidth and \colwidth such that
% (N+1)*\sepwidth + N*\colwidth = \paperwidth
\newlength{\sepwidth}
\newlength{\colwidth}
\setlength{\sepwidth}{0.025\paperwidth}
\setlength{\colwidth}{0.3\paperwidth}
\newcommand{\separatorcolumn}{\begin{column}{\sepwidth}\end{column}}
% ====================
% Title
% ====================
\title{Implementing FAIR Data Exchange in ACTRIS Switzerland : An Expert-Driven Approach}
%\setbeamerfont{title}{size=\huge}
\author{Juan F. Fl\'orez-Ospina, Leïla H. Simon, Nora K. Nowak, Benjamin T. Brem, \\ Martin Gysel-Beer, and Robin L. Modini}
%\author{Juan F. Florez-Ospina$^{1}$, Natasha M. Garner$^{1}$, Lucia Iezzi$^{1}$, David Bell$^{1}$,\\ Imad El Haddad$^{1}$, Julia Schmale$^{2}$, and Thorsten Bartels-Rausch$^{1}$}
% add following line if you have co-author(s)
% Coauthor One$^{2}$, Coauthor Two$^{3}$
\institute[shortinst]{PSI Center for Energy and Environmental Sciences, 5232 Villigen PSI, Switzerland}
% ====================
% Footer (optional)
% ====================
\footercontent{\hfill
\href{mailto:juan.florez-ospina@psi.ch}{juan.florez-ospina@psi.ch, juanflo16@gmail.com,} \href{robin.modini@psi.ch}{robin.modini@psi.ch}}
% (can be left out to remove footer)
%\footercontent{22-Nov-2023, Swiss Data Science Conference, Bern \hfill
% \href{mailto:juan.florez-ospina@psi.ch}{juan.florez-ospina@psi.ch} \href{thorsten.bartels-rausch@psi.ch}{thorsten.bartels-rausch@psi.ch}}
% (can be left out to remove footer)
% ====================
% Logo
%\logoleft{\includegraphics[height=5.5cm]{logos/psi_01_sn.png}}
% ====================
% use this to include logos on the left and/or right side of the header:
% Left: institution
% \logoright{\includegraphics[height=5cm]{logos/logo-wordmark-variations.png}}
% Right: funding agencies and other affilations
%\logoright{\includegraphics[height=7cm]{logos/NSF.eps}}
% ====================
% Body
% ====================
\begin{document}
\begin{frame}[t]
\begin{columns}[t]
\separatorcolumn
\begin{column}{1.5\colwidth}
\begin{block}{Motivation}
%Given an \textit{allocated time frame},
\textbf{Problem.} Scientific datasets in atmospheric science are often large, complex and highly specialized, making them hard to reuse across users, tools, and time.
\textcolor{white}{insert line here :)}
Adhering to the FAIR data principles promises to resolve long term reuse of data by machines and humans.
\textcolor{white}{insert line here :)}
\textbf{Yet in practice,} implementations often have the following configuration,
\vspace{1em} % Add some space before next block
\begin{figure}
\centering
\includegraphics[width=0.75\textwidth]{figures/styled_typical_exchange.pdf}
\caption{Diagram of tightly coupled system for integration, processing and ingestion of scientific data into ORD repositories.}
\end{figure}
which in turn exhibits the following
\vspace{1em}
\begin{exampleblock}{System drawbacks:}
\begin{itemize}
\item
Task-specific outputs, limiting adaptability to new needs or use cases.
\item
Monolithic design, making the system hard to maintain, reuse or understand internally.
\item
Embedded domain knowledge in hard-coded parameters, reducing transparency and flexibility.
\end{itemize}
\end{exampleblock}
%\begin{itemize}
% \item
% Convey the idea about fragmented heterogeneous data (highly collaborative, plenty of coordination, planning)
%\item
% Data analysis, also heterogeneous (but highly independent)
%\end{itemize}
\begin{block}{Expert-driven FAIR data exchange systems}
\textbf{Therefore.} \textit{We aim to explore and prototype an expert-driven data exchange system, as conceptualized below.}
\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{figures/extended_data_flow_dag_with_actris.pdf}
\caption{Diagram of the expert-driven FAIR data exchange system.}
\end{figure}
This system, unlike the above implementation, exhibits the following:
\end{block}
\vspace{1em} % Add some space before next block
\begin{exampleblock}{System characteristics:}
\begin{enumerate}
\item
Adaptable to new needs, making it interoperable across users and systems.
\item
Modular, allowing components to be reused, replaced, or maintained independently.
\item
Configurable with domain knowledge supplied externally, supporting expert feedback loops.
\item
Transparent, enabling monitoring of data flows and tracking of data provenance through a clear, structured design.
\end{enumerate}
\end{exampleblock}
\textbf{Practical implementation (Technical stack)}
\begin{figure}[H]
\centering
\includegraphics[width=0.5\textwidth]{figures/layered_stack.pdf}
%\caption{Diagram of the expert-driven FAIR data exchange system.}
\end{figure}
\vspace{0.5em}
\colorbox{lightgray}{
\parbox{0.95\linewidth}{
\textbf{Code Repository:} \url{https://gitea.psi.ch/APOG_public/acsmnode.git}
}
}
\vspace{0.5em}
\end{block}
\end{column}
%\end{columns}
%\begin{columns}[t]
\separatorcolumn
\begin{column}{1.5\colwidth}
\begin{block}{FAIR data chains in ACTRIS Switzerland---Use case}
\textbf{Challenge: }Standardized annual submission of aerosol composition observations from field stations (\textbf{Payerne} and \textbf{Jungfraujoch}) to the \textbf{EBAS database}.
\textcolor{white}{ }
We consider raw data described in the Table below.
\textcolor{white}{white}
\begin{table}[!ht]
\resizebox{0.75\textwidth}{!}{%
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Data Source} & \textbf{File Formats} & \textbf{Submission Date} \\
\hline
Aerodyne & TXT, CSV & \multirow{3}{*}{May 31, 2025} \\
Aerosol Chemical Speciation Monitor & NAS & \\
(ACSM) & YAML & \\
%PTR-TOF MS & NetCDF \\
\hline
\end{tabular}
}
\end{table}
\end{block}
%\begin{comment}
%\begin{exampleblock}{General data chain properties:}
%\begin{itemize}
% \item
% Standards Compliance: CF convention metadata + EBAS database rules for quality control (flagging)
% \item
% \textbf{Docker} ensures consistent processing across stations and %time periods
%\end{itemize}
%\end{exampleblock}
%\end{comment}
%\textcolor{white}{white}
\begin{block}{Configurable Data Integration using YAML files}
\textbf{Goal:} Search, Retrieve, and Integrate Raw Data in HDF5 format
\begin{figure}
\centering
%\includegraphics[width=0.65\textwidth]{figures/EarthObservation_HSI.pdf}
\includegraphics[width=0.7\textwidth]{figures/data_integration_step.pdf}
\end{figure}
\colorbox{lightgray}{
\parbox{0.95\linewidth}{
\textbf{Code Repository:} \url{https://gitea.psi.ch/5505-public/dima.git}
}
}
\end{block}
\begin{block}{Interactive Data Annotation for Quality Control} % Quality Control Workflow}
\textbf{Goal:} Apply time-dependent correction factors to observations and generate quality control flags with expert validation, complying with EBAS database.
\begin{figure}
\includegraphics[width=0.6\textwidth]{figures/quality_control_workflow.pdf}
\end{figure}
Enables reconciliation of \textbf{Automatic Diagnostic Flags}, \textbf{Station-specific Flags}, and \textbf{Manual Review Flags}.
%%\textbf{Features:} Enable reconciliation
%\begin{itemize}
% \item \textbf{Automatic Diagnostic Flags}: threshold-based detection of instrument malfunctions.
% \item
% \textbf{Expert Knowledge Flags:} Station operator insights on local conditions and maintenance events and calibration periods.
% \item
% \textbf{Manual Review Flags:} Visual inspection of time series anomalies.
%\end{itemize}
\end{block}
\begin{block}{Accessible Data Products for Domain-Agnostic Reuse}
\textbf{Primary Product:} EBAS-ready files conforming to ACTRIS Level 2 quality standards.
\textbf{Secondary Product:} A comprehensive, self-describing file that integrates:
\begin{itemize}
\item Original and intermediate data products with rich contextual and provenance metadata, as shown below.
\begin{figure}
\includegraphics[width=0.9\textwidth]{figures/hdf5_before_after.pdf}
%\caption{Initial integrated file (left) and enhanced HDF5 file (right)}
\end{figure}
\item An auto-generated prospective provenance graph in Renku workflow format, visualized as below
\begin{figure}
\includegraphics[width=\textwidth]{figures/workflow_acsm_data_JFJ_2024.pdf}
\end{figure}
\end{itemize}
\end{block}
%\begin{block}{References}
% \nocite{*}
% \footnotesize{\bibliographystyle{ieeetr}\bibliography{poster}}
%\end{block}
\end{column}
\separatorcolumn
\end{columns}
\end{frame}
\end{document}

28
docs/source/conf.py Normal file
View File

@ -0,0 +1,28 @@
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = 'ACSM FAIRifier Tool'
copyright = '2025, Juan F. Flórez-Ospina, Leïla H. Simon, Nora K. Nowak, Benjamin T. Brem, Martin Gysel-Beer, and Robin L. Modini'
author = 'Juan F. Flórez-Ospina, Leïla H. Simon, Nora K. Nowak, Benjamin T. Brem, Martin Gysel-Beer, and Robin L. Modini'
release = '0.0.1'
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions = []
templates_path = ['_templates']
exclude_patterns = []
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme = 'alabaster'
html_static_path = ['_static']

20
docs/source/index.rst Normal file
View File

@ -0,0 +1,20 @@
.. ACSM FAIRifier Tool documentation master file, created by
sphinx-quickstart on Tue Jun 17 16:17:43 2025.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to ACSM FAIRifier Tool's documentation!
===============================================
.. toctree::
:maxdepth: 2
:caption: Contents:
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`