From 2ed0c82eff6af8aecd34b3e697b0e392ab129cd3 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 20 Jan 2020 19:45:24 +0000 Subject: New rendering of the file architecture plot Until now the file architecture plot at the directories ontop of the top-level files. This made it hard to visually identify the top-level files. They are not placed ontop of the sub-directories and some space is added to highlight the files in the top-level directory and those in the subdirectories. Two other changes were made: - The symbolic links created in the top source directory are also shown. - The coding of this figure was made much more elegant by defining a PGFPlots node class and just changing the things that are direrent between each directory. --- paper.tex | 1 + tex/src/figure-file-architecture.tex | 290 ++++++++++++----------------------- tex/src/preamble-pgfplots.tex | 11 ++ 3 files changed, 109 insertions(+), 193 deletions(-) diff --git a/paper.tex b/paper.tex index 7237876..f03bd5e 100644 --- a/paper.tex +++ b/paper.tex @@ -524,6 +524,7 @@ In short, its a version-controlled directory with many plain-text files, distrib Directory and (plain-text) file structure in a hypothetical project using this solution. Files are shown with thin, darker boxes that have a suffix in their names (for example `\texttt{*.mk}' or `\texttt{*.conf}'). Directories are shown as large, brighter boxes, where the name ends in a slash (\texttt{/}). + Directories with dashed lines are symbolic links that are created after building the project, pointing to commonly needed built directories. Files and directories are shown within their parent directory. For example the full address of \texttt{analysis-1.mk} from the top project directory is \texttt{reproduce/analysis/make/analysis-1.mk}. } diff --git a/tex/src/figure-file-architecture.tex b/tex/src/figure-file-architecture.tex index 3a7b760..5c00e6e 100644 --- a/tex/src/figure-file-architecture.tex +++ b/tex/src/figure-file-architecture.tex @@ -7,217 +7,121 @@ %% Use small fonts \footnotesize - %% project - \node [at={(0,4cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum width=15cm, - minimum height=7.5cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{top-project-directory/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(-6.0cm,-3cm)}] {COPYING}; - \node [node-nonterminal-thin, at={(-3.5cm,-3cm)}] {paper.tex}; - \node [node-nonterminal-thin, at={(-1.0cm,-3cm)}] {project}; - \node [node-nonterminal-thin, at={(+1.5cm,-3cm)}] {README.md}; - \node [node-nonterminal-thin, at={(+4.25cm,-3cm)}, + %% project/ + \node [dirbox, at={(0,4cm)}, minimum width=15cm, minimum height=9cm, + label={[shift={(0,-5mm)}]\texttt{project/}}] {}; + \node [node-nonterminal-thin, at={(-6.0cm,3.3cm)}] {COPYING}; + \node [node-nonterminal-thin, at={(-3.5cm,3.3cm)}] {paper.tex}; + \node [node-nonterminal-thin, at={(-1.0cm,3.3cm)}] {project}; + \node [node-nonterminal-thin, at={(+1.5cm,3.3cm)}] {README.md}; + \node [node-nonterminal-thin, at={(+4.25cm,3.3cm)}, text width=2.5cm, text depth=-3pt] {README-hacking.md}; - %% reproduce - \node [at={(-1.4cm,3.5cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=6cm, - minimum width=11.9cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{reproduce/}}] {}; - - %% reproduce/software - \node [at={(-4.35cm,3cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=5.3cm, - minimum width=5.7cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{software/}}] {}; - - %% reproduce/analysis - \node [at={(1.55cm,3cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=5.3cm, - minimum width=5.7cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{analysis/}}] {}; + %% reproduce/ + \node [dirbox, at={(-1.4cm,2.6cm)}, minimum width=11.9cm, minimum height=6cm, + label={[shift={(0,-5mm)}]\texttt{reproduce/}}] {}; - %% reproduce/software/config - \node [at={(-5.75cm,2.5cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{config/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(-5.75cm,1.8cm)}] {LOCAL.conf.in}; - \node [node-nonterminal-thin, at={(-5.75cm,1.3cm)}] {versions.conf}; - \node [node-nonterminal-thin, at={(-5.75cm,0.8cm)}] {checksums.conf}; + %% reproduce/software/ + \node [dirbox, at={(-4.35cm,2.1cm)}, minimum width=5.7cm, minimum height=5.3cm, + label={[shift={(0,-5mm)}]\texttt{software/}}] {}; + %% reproduce/software/config + \node [dirbox, at={(-5.75cm,1.5cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{config/}}] {}; + \node [node-nonterminal-thin, at={(-5.75cm,0.8cm)}] {LOCAL.conf.in}; + \node [node-nonterminal-thin, at={(-5.75cm,0.3cm)}] {versions.conf}; + \node [node-nonterminal-thin, at={(-5.75cm,-0.2cm)}] {checksums.conf}; %% reproduce/software/make - \node [at={(-2.95cm,2.5cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{make/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(-2.95cm,1.8cm)}] {basic.mk}; - \node [node-nonterminal-thin, at={(-2.95cm,1.3cm)}] {high-level.mk}; - \node [node-nonterminal-thin, at={(-2.95cm,0.8cm)}] {python.mk}; + \node [dirbox, at={(-2.95cm,1.5cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{make/}}] {}; + \node [node-nonterminal-thin, at={(-2.95cm,0.8cm)}] {basic.mk}; + \node [node-nonterminal-thin, at={(-2.95cm,0.3cm)}] {high-level.mk}; + \node [node-nonterminal-thin, at={(-2.95cm,-0.2cm)}] {python.mk}; %% reproduce/software/bash - \node [at={(-5.75cm,0.2cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{bash/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(-5.75cm,-0.5cm)}] {bashrc.sh}; - \node [node-nonterminal-thin, at={(-5.75cm,-1.0cm)}] {configure.sh}; - \node [node-nonterminal-thin, at={(-5.75cm,-1.5cm)}] {git-pre-comit}; + \node [dirbox, at={(-5.75cm,-0.8cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{bash/}}] {}; + \node [node-nonterminal-thin, at={(-5.75cm,-1.5cm)}] {bashrc.sh}; + \node [node-nonterminal-thin, at={(-5.75cm,-2.0cm)}] {configure.sh}; + \node [node-nonterminal-thin, at={(-5.75cm,-2.5cm)}] {git-pre-comit}; %% reproduce/software/bibtex - \node [at={(-2.95cm,0.2cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{bibtex/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(-2.95cm,-0.5cm)}] {fftw.tex}; - \node [node-nonterminal-thin, at={(-2.95cm,-1.0cm)}] {numpy.tex}; - \node [node-nonterminal-thin, at={(-2.95cm,-1.5cm)}] {gnuastro.tex}; + \node [dirbox, at={(-2.95cm,-0.8cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{bibtex/}}] {}; + \node [node-nonterminal-thin, at={(-2.95cm,-1.5cm)}] {fftw.tex}; + \node [node-nonterminal-thin, at={(-2.95cm,-2.0cm)}] {numpy.tex}; + \node [node-nonterminal-thin, at={(-2.95cm,-2.5cm)}] {gnuastro.tex}; + + %% reproduce/analysis/ + \node [dirbox, at={(1.55cm,2.1cm)}, minimum width=5.7cm, minimum height=5.3cm, + label={[shift={(0,-5mm)}]\texttt{analysis/}}] {}; %% reproduce/analysis/config - \node [at={(0.15cm,2.5cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{config/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(0.15cm,1.8cm)}] {INPUTS.conf}; - \node [node-nonterminal-thin, at={(0.15cm,1.3cm)}] {param-1.conf}; - \node [node-nonterminal-thin, at={(0.15cm,0.8cm)}] {param-2.conf}; + \node [dirbox, at={(0.15cm,1.5cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{config/}}] {}; + \node [node-nonterminal-thin, at={(0.15cm,0.8cm)}] {INPUTS.conf}; + \node [node-nonterminal-thin, at={(0.15cm,0.3cm)}] {param-1.conf}; + \node [node-nonterminal-thin, at={(0.15cm,-0.2cm)}] {param-2.conf}; %% reproduce/analysis/make - \node [at={(2.95cm,2.5cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{make/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(2.95cm,1.8cm)}] {initialize.mk}; - \node [node-nonterminal-thin, at={(2.95cm,1.3cm)}] {download.mk}; - \node [node-nonterminal-thin, at={(2.95cm,0.8cm)}] {analysis-1.mk}; + \node [dirbox, at={(2.95cm,1.5cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{make/}}] {}; + \node [node-nonterminal-thin, at={(2.95cm,0.8cm)}] {initialize.mk}; + \node [node-nonterminal-thin, at={(2.95cm,0.3cm)}] {download.mk}; + \node [node-nonterminal-thin, at={(2.95cm,-0.2cm)}] {analysis-1.mk}; %% reproduce/analysis/bash - \node [at={(0.15cm,0.2cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{bash/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(0.15cm,-0.5cm)}] {process-1.sh}; - \node [node-nonterminal-thin, at={(0.15cm,-1.0cm)}] {process-2.sh}; - \node [node-nonterminal-thin, at={(0.15cm,-1.5cm)}] {process-3.sh}; + \node [dirbox, at={(0.15cm,-0.8cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{bash/}}] {}; + \node [node-nonterminal-thin, at={(0.15cm,-1.5cm)}] {process-1.sh}; + \node [node-nonterminal-thin, at={(0.15cm,-2.0cm)}] {process-2.sh}; + \node [node-nonterminal-thin, at={(0.15cm,-2.5cm)}] {process-3.sh}; %% reproduce/analysis/python - \node [at={(2.95cm,0.2cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=2.1cm, - minimum width=2.6cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{python/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(2.95cm,-0.5cm)}] {operation-1.py}; - \node [node-nonterminal-thin, at={(2.95cm,-1.0cm)}] {operation-2.py}; - \node [node-nonterminal-thin, at={(2.95cm,-1.5cm)}] {fitting-plot.py}; - - %% tex - \node [at={(6cm,3.5cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum height=6cm, - minimum width=2.7cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{tex/}}] {}; + \node [dirbox, at={(2.95cm,-0.8cm)}, minimum width=2.6cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{python/}}] {}; + \node [node-nonterminal-thin, at={(2.95cm,-1.5cm)}] {operation-1.py}; + \node [node-nonterminal-thin, at={(2.95cm,-2.0cm)}] {operation-2.py}; + \node [node-nonterminal-thin, at={(2.95cm,-2.5cm)}] {fitting-plot.py}; - %% tex/src - \node [at={(6cm,3cm)}, anchor=north, - rectangle, - very thick, - text centered, - font=\ttfamily, - minimum width=2.5cm, - minimum height=5.3cm, - draw=green!50!black!50, - fill=black!10!green!2!white, - label={[shift={(0,-5mm)}]\texttt{src/}}] {}; - %% Its files - \node [node-nonterminal-thin, at={(6cm,2.2cm)}] {preamble-1.tex}; - \node [node-nonterminal-thin, at={(6cm,1.7cm)}] {preamble-2.tex}; - \node [node-nonterminal-thin, at={(6cm,1.2cm)}] {figure-1.tex}; - \node [node-nonterminal-thin, at={(6cm,0.7cm)}] {figure-2.tex}; + %% tex/ + \node [dirbox, at={(6cm,2.6cm)}, minimum width=2.7cm, minimum height=6cm, + label={[shift={(0,-5mm)}]\texttt{tex/}}] {}; + %% tex/src + \node [dirbox, at={(6cm,2.1cm)}, minimum width=2.5cm, minimum height=2.1cm, + label={[shift={(0,-5mm)}]\texttt{src/}}] {}; + \node [node-nonterminal-thin, at={(6cm,1.4cm)}] {preamble-1.tex}; + \node [node-nonterminal-thin, at={(6cm,0.9cm)}] {preamble-2.tex}; + \node [node-nonterminal-thin, at={(6cm,0.4cm)}] {figure-1.tex}; + + %% tex/build + \node [dirbox, at={(6cm,-0.2cm)}, minimum width=2.5cm, minimum height=1.3cm, + label={[shift={(0,-5mm)}]\texttt{build/}}, dashed] {}; + \node [anchor=west, at={(4.7cm,-1.0cm)}] {\scriptsize\sf Symbolic link to}; + \node [anchor=west, at={(4.7cm,-1.3cm)}] {\scriptsize\sf \LaTeX{} build directory.}; + + %% tex/build + \node [dirbox, at={(6cm,-1.7cm)}, minimum width=2.5cm, minimum height=1.6cm, + label={[shift={(0,-5mm)}]\texttt{tikz/}}, dashed] {}; + \node [anchor=west, at={(4.67cm,-2.5cm)}] {\scriptsize\sf Symbolic link to TikZ}; + \node [anchor=west, at={(4.67cm,-2.8cm)}] {\scriptsize\sf directory (figures built}; + \node [anchor=west, at={(4.67cm,-3.1cm)}] {\scriptsize\sf by \LaTeX).}; + + %% .local + \node [dirbox, at={(-3.6cm,-3.7cm)}, minimum width=7cm, minimum height=1.2cm, + label={[shift={(0,-5mm)}]\texttt{.local/}}, dashed] {}; + \node [anchor=west, at={(-7.1cm,-4.4cm)}] + {\scriptsize\sf Symbolic link to project's software environment, e.g., }; + \node [anchor=west, at={(-7.1cm,-4.7cm)}] + {\scriptsize\sf Python or R, run `\texttt{.local/bin/python}' or `\texttt{.local/bin/R}'}; + + %% .build + \node [dirbox, at={(3.6cm,-3.7cm)}, minimum width=7cm, minimum height=1.2cm, + label={[shift={(0,-5mm)}]\texttt{.build/}}, dashed] {}; + \node [anchor=west, at={(0.1cm,-4.4cm)}] + {\scriptsize\sf Symbolic link to project's top-level build directory.}; + \node [anchor=west, at={(0.1cm,-4.7cm)}] + {\scriptsize\sf Enabling easy access to built project components.}; \end{tikzpicture} diff --git a/tex/src/preamble-pgfplots.tex b/tex/src/preamble-pgfplots.tex index 57a0128..7f566b8 100644 --- a/tex/src/preamble-pgfplots.tex +++ b/tex/src/preamble-pgfplots.tex @@ -202,3 +202,14 @@ draw=green!50!black!50, top color=white, bottom color=green!50!black!20 } } + +\tikzset{ dirbox/.style={ + thick, + rectangle, + anchor=north, + text centered, + font=\ttfamily, + minimum width=15cm, + minimum height=7.5cm, + draw=green!50!black!50, + fill=green!3!white }} -- cgit v1.2.1