From b87d935f3f8770c1e419a9cf5992b8991d097555 Mon Sep 17 00:00:00 2001
From: Jonas Eschle 'Mayou36 <mayou36@jonas.eschle.com>
Date: Tue, 5 Dec 2017 19:23:47 +0100
Subject: [PATCH 1/2] Add README to utils, small typo fixes

---
 .gitlab-ci.yml                    |   2 +-
 analysis/__init__.py              |   2 +-
 analysis/batch/batch_system.py    |   1 -
 analysis/data/hdf.py              |   2 +-
 analysis/data/mergers.py          |   3 +-
 analysis/efficiency/__init__.py   |   2 +-
 analysis/efficiency/efficiency.py |   2 +-
 analysis/efficiency/legendre.py   |   2 +-
 analysis/fit/__init__.py          |   2 +-
 analysis/fit/result.py            |   2 +-
 analysis/physics/factory.py       |  14 +--
 analysis/physics/pdf_models.py    |   4 +-
 analysis/toys/README.md           |   4 +-
 analysis/utils/README.md          | 137 +++++++++++++++++++++++++++++-
 analysis/utils/config.py          |   6 +-
 analysis/utils/root.py            |   2 +-
 ci/static_checker.sh              |   4 +-
 docs/api/conf.py                  |   4 +-
 docs/api/tools/change_headline.py |   4 +-
 docs/make_docs.sh                 |   2 +-
 tests/test_config.py              |   2 +-
 tests/test_data.py                |   2 +-
 22 files changed, 169 insertions(+), 36 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 19161ab..f012d65 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -110,4 +110,4 @@ build_apidoc:
 #  type: test
 #  script:
 #    - conda install -y pylint
-#    - pylint analysis/*/*.py || echo "========= Pylint run with errorcode > 0 ========"
+#    - pylint analysis/*/*.py || echo "========= Pylint run with error code > 0 ========"
diff --git a/analysis/__init__.py b/analysis/__init__.py
index 5f056cc..bb7b88f 100644
--- a/analysis/__init__.py
+++ b/analysis/__init__.py
@@ -11,7 +11,7 @@ from __future__ import print_function, division, absolute_import
 import os
 from collections import defaultdict
 
-# TODO: automative version and author
+# TODO: automate version and author
 __version__ = '3.0'
 __author__ = 'Albert Piug'
 
diff --git a/analysis/batch/batch_system.py b/analysis/batch/batch_system.py
index f324b18..ee1b771 100644
--- a/analysis/batch/batch_system.py
+++ b/analysis/batch/batch_system.py
@@ -91,7 +91,6 @@ echo "------------------------------------------------------------------------"
         Arguments:
             job_name (str): Job name.
             script (str): Commands to run.
-            script_args (list): List of arguments passed to the script.
             log_file (str): Logfile location.
             extra_config (dict, optional): Extra configuration for 'script'. Defaults
                 to `None`.
diff --git a/analysis/data/hdf.py b/analysis/data/hdf.py
index 5b34dca..0b48518 100644
--- a/analysis/data/hdf.py
+++ b/analysis/data/hdf.py
@@ -44,7 +44,7 @@ def modify_hdf(file_name, compress=True):
                 mode = 'a'
             else:
                 logger.info("File %s exists but seems empty -> not construct with pytables?"
-                            "Overwritting existing file!", file_name)
+                            "Overwriting existing file!", file_name)
     with pd.HDFStore(file_name, mode=mode, format='table') as data_file:
         yield data_file
     logger.debug('Compressing...')
diff --git a/analysis/data/mergers.py b/analysis/data/mergers.py
index 68c076f..da95fea 100644
--- a/analysis/data/mergers.py
+++ b/analysis/data/mergers.py
@@ -51,6 +51,7 @@ def merge_root(data_list, name=None, title=None, destruct_data=True):
         name (str): Dataset name.
         title (str): Dataset title.
         data_list (list[ROOT.RooDataSet]): Datasets to merge.
+        destruct_data (bool): Destruct the ROOT objects afterwards.
 
     Return:
         ROOT.RooDataSet: Merged dataset.
@@ -67,7 +68,7 @@ def merge_root(data_list, name=None, title=None, destruct_data=True):
         raise ValueError("Incompatible observables")
     # Check weights
     if len(set(data.isWeighted() for data in data_list)) > 1:
-        raise ValueError("Input dataset list contains weighted and uneweighted datasets.")
+        raise ValueError("Input dataset list contains weighted and unweighted datasets.")
     # Merge by append, since we don't know the original weight situation
     output_ds = data_list.pop(0)
     for data in data_list:
diff --git a/analysis/efficiency/__init__.py b/analysis/efficiency/__init__.py
index a2ab8ac..cf86ecf 100644
--- a/analysis/efficiency/__init__.py
+++ b/analysis/efficiency/__init__.py
@@ -141,7 +141,7 @@ def load_acceptance(name, **extra_parameters):
         `analysis.efficiency.Acceptance`: Acceptance object.
 
     Raise:
-        OSError: If the efficiecny file does not exist.
+        OSError: If the efficiency file does not exist.
         analysis.utils.config.ConfigError: If there is a problem with the efficiency model.
 
     """
diff --git a/analysis/efficiency/efficiency.py b/analysis/efficiency/efficiency.py
index 53452af..8b64a0c 100644
--- a/analysis/efficiency/efficiency.py
+++ b/analysis/efficiency/efficiency.py
@@ -104,7 +104,7 @@ class Efficiency(object):
         return self._get_efficiency(data[var_list].copy()).clip(lower=0.0)
 
     def get_randomized_efficiency(self, data):
-        """Get the efficiency for the given event or dataset Gaussianly randomized by its uncertainty.
+        """Get the efficiency for the given event or dataset Gaussian randomized by its uncertainty.
 
         Arguments:
             data (`pandas.DataFrame` or Sequence): Data to calculate the efficiency of.
diff --git a/analysis/efficiency/legendre.py b/analysis/efficiency/legendre.py
index 052d620..8bf114a 100644
--- a/analysis/efficiency/legendre.py
+++ b/analysis/efficiency/legendre.py
@@ -126,7 +126,7 @@ class LegendreEfficiency(Efficiency):
 
         Raise:
             KeyError: On missing coefficients.
-            ValueError: On bad range or bad symmetric variable defintion.
+            ValueError: On bad range or bad symmetric variable definition.
 
         """
         super(LegendreEfficiency, self).__init__(var_list, config)
diff --git a/analysis/fit/__init__.py b/analysis/fit/__init__.py
index dd908cd..7724e5d 100644
--- a/analysis/fit/__init__.py
+++ b/analysis/fit/__init__.py
@@ -113,7 +113,7 @@ def fit(factory, pdf_name, strategy, dataset, verbose=False, **kwargs):
         logger.error("Problem getting the PDF -> %s", error)
         raise
     if kwargs.get('Extended', False) != factory.is_extended():
-        logger.warning("Requested fit with Extended=%s fit on %sextended PDF. Check this is what you want.",
+        logger.warning("Requested fit with Extended=%s fit on %s extended PDF. Check this is what you want.",
                        kwargs.get('Extended', False),
                        'an ' if factory.is_extended() else 'a non-')
     return fit_func(model, dataset, fit_config)
diff --git a/analysis/fit/result.py b/analysis/fit/result.py
index ac94620..786141c 100644
--- a/analysis/fit/result.py
+++ b/analysis/fit/result.py
@@ -322,7 +322,7 @@ class FitResult(object):
 
     @ensure_initialized
     def has_converged(self):
-        """Determine wether the fit has converged properly.
+        """Determine whether the fit has converged properly.
 
         All steps have to have converged and the covariance matrix quality needs to be
         good.
diff --git a/analysis/physics/factory.py b/analysis/physics/factory.py
index 146bee8..6878c11 100644
--- a/analysis/physics/factory.py
+++ b/analysis/physics/factory.py
@@ -42,7 +42,7 @@ class BaseFactory(object):
             **config (dict): Configuration of the factory.
 
         Raise:
-            KeyError: When parameters or observables are missingo or there is an
+            KeyError: When parameters or observables are missing or there is an
                 inconsistency in the configuration.
 
         """
@@ -198,7 +198,7 @@ class BaseFactory(object):
             key (str): Object identifier.
 
         Return:
-            bool: Wether the object is in the workspace.
+            bool: Whether the object is in the workspace.
 
         """
         return key in self._objects
@@ -366,7 +366,7 @@ class BaseFactory(object):
         return self.get(pdf_name, self.set(pdf_name, self.get_unbound_extended_pdf(name, title)))
 
     def get_unbound_extended_pdf(self, name, title):
-        """Get an extedned physics PDF."""
+        """Get an extended physics PDF."""
         raise NotImplementedError()
 
     def is_extended(self):
@@ -600,7 +600,7 @@ class PhysicsFactory(BaseFactory):
                 elif isinstance(yield_, (float, int)):
                     self['Yield'].setVal(yield_)
             else:
-                logger.warning("Trying to set a yield that cannot be overriden")
+                logger.warning("Trying to set a yield that cannot be overridden")
 
 
 # Product Physics Factory
@@ -716,7 +716,7 @@ class ProductPhysicsFactory(BaseFactory):
                 self['Yield'].SetName(yield_.GetName())
                 self['Yield'].SetTitle(yield_.GetTitle())
             else:
-                logger.warning("Trying to set a yield that cannot be overriden")
+                logger.warning("Trying to set a yield that cannot be overridden")
 
     def transform_dataset(self, dataset):
         """Transform dataset according to the factory configuration.
@@ -911,7 +911,7 @@ class SumPhysicsFactory(BaseFactory):
                 elif isinstance(yield_, (float, int)):
                     self['Yield'].setVal(yield_)
             else:
-                logger.warning("Trying to set a yield that cannot be overriden")
+                logger.warning("Trying to set a yield that cannot be overridden")
 
     def transform_dataset(self, dataset):
         """Transform dataset according to the factory configuration.
@@ -1059,7 +1059,7 @@ class SimultaneousPhysicsFactory(BaseFactory):
     def transform_dataset(self, dataset):
         """Transform dataset according to the factory configuration.
 
-        The category nane is used as column name to determine each of the
+        The category name is used as column name to determine each of the
         samples to transform.
 
         Note:
diff --git a/analysis/physics/pdf_models.py b/analysis/physics/pdf_models.py
index 6278a1a..09d1953 100644
--- a/analysis/physics/pdf_models.py
+++ b/analysis/physics/pdf_models.py
@@ -209,7 +209,7 @@ class ArgusConvGaussPdfMixin(object):
         usual PDF instantiations.
 
         Note:
-            The Argus and Gaussian PDFs are created new everytime the RooFFTConvPdf is
+            The Argus and Gaussian PDFs are created new every time the RooFFTConvPdf is
             instantiated.
 
         Return:
@@ -336,7 +336,7 @@ class RooWorkspaceMixin(object):
             raise KeyError("PDF name ('workspace-pdf-name') is missing")
         tfile = ROOT.TFile.Open(workspace_path)
         if not tfile:
-            raise KeyError("Cannot open wokspace file -> {}".format(workspace_path))
+            raise KeyError("Cannot open workspace file -> {}".format(workspace_path))
         workspace = tfile.Get(workspace_name)
         if not workspace:
             raise KeyError("Cannot get workspace from file -> {}".format(workspace_name))
diff --git a/analysis/toys/README.md b/analysis/toys/README.md
index c191efa..8cdc308 100644
--- a/analysis/toys/README.md
+++ b/analysis/toys/README.md
@@ -102,8 +102,8 @@ These fit strategies should consist of a function that gets the model (PDF), the
 
 The `data` key is used to specify the input data for each toy.
 Each of the entries is used to load a toy generated by `generate_toys.py` using its name (`source`), and configures the number of entries to sample from the input data set (`nevents`).
-If a simultaneous fit is performed, the `category` key has to be specified in the datae with the name of the category.
-This does *not* select the given category from the data but *lables* the given data as having that category. 
+If a simultaneous fit is performed, the `category` key has to be specified in the data with the name of the category.
+This does *not* select the given category from the data but *labels* the given data as having that category. 
 In the end, all sampled datasets are merged and used as the data for the fit.
 Special care needs to be taken when extended fits are involved:
 if the fit model is extended (if more than one is specified, they all need to be either extended or not extended) the number of entries sampled from each input dataset will be varied according to a Poisson distribution;
diff --git a/analysis/utils/README.md b/analysis/utils/README.md
index 829784e..7b56265 100644
--- a/analysis/utils/README.md
+++ b/analysis/utils/README.md
@@ -1,6 +1,139 @@
 Utils
 =====
 
-This module contains several utilities used throughout the package.
+This package contains several utilities used throughout the package.
+
+config
+------
+
+Several helpers dealing with yaml configuration files are placed
+inside.
+
+Loading (and interpreting substitutions) as well as dumping a configuration
+can be achieved with `load_config` resp. `write_config`.
+
+Comparing two dictionaries and finding the differences is done by
+`compare_configs`.
+
+In order to manipulate nested dicts easier, `unfold_confi` resp.
+`fold_config` convert the dicts to a file-like structure.
+
+The logic of converting a parameter specified in the configuration
+into a ROOT object is implemented in `configure_parameter`.
+
+Adding shared variables is done with `get_shared_vars`.
+
+
+decorators
+----------
+
+This module contains the decorators used throughout this library.
+
+`memoize` is memorizing the creation of a class if a function is called
+with the same arguments again as before.
+
+
+fit
+---
+
+Helpers for the fitting and results.
+
+`fit_parameters` converts fitted RooRealVars into a dict containing
+information about the errors.
+
+`calculate_pulls` creates pulls taking no error/ the symmetric error/
+asymmetric errors into account.
+
+
+iterators
+---------
+
+Several iterators for large iterations are available.
+
+`pairwise` converts a sequence s -> (s0, s1), (s1, s2), (s2, s3)
+
+`chunks` iterator over chunks given a chunksize
+
+
+logging_color
+-------------
+
+Logging related utils.
+
+To get a new logger given a certain name, use `get_logger`.
+
+
+monitoring
+----------
+
+Functions to monitor the resources needed for execution.
+
+Memory usage can be tracked with `memory_usage`.
+
+Tracking the execution time can be achieved using the context manager of `Timer`.
+
+
+path
+----
+
+The path management of the package happens inside this module.
+
+Several default paths are set:
+
+- toy
+- toy config
+- toy fit
+- toy fit config
+- log
+- efficiency
+- genlevel mc
+- plot style
+- fit result
+
+Additional paths can be added with `register_path`.
+
+To save a file, `prepare_path` takes care of the right naming, implicit
+folder creation and more. If you want in addition to that to work with a
+file in a thread-safe manner, the function (or better contextmanager)
+`work_on_file` can be used.
+
+ 
+pdf
+---
+
+TODO
+
+
+random
+------
+
+Any randomness related utils.
+
+In order to retrieve a *really* random integer, use `get_urandom_int`.
+
+
+root
+----
+
+ROOT framework related functions including iterators for ROOT containers.
+
+`load_library` is used to load a C++ library or to compile it inplace.
+
+`destruct_object` deletes ROOT objects safely.
+
+A functional helper is the `execute_and_return_self` function, which 
+executes an object and returns it again.
+
+#### Different Converters
+
+The following converters are implemented:
+
+- Python list to RooAbsCollection
+- Python list to RooArgList
+- Python list to RooArgSet
+
+- RooArgSet to Python set
+- RooArgList to Python list
+
+To iterate over a RooAbsCollection, use `iterate_roocollection`.
 
-TODO: Extend this README
diff --git a/analysis/utils/config.py b/analysis/utils/config.py
index 3141a4e..91d7482 100644
--- a/analysis/utils/config.py
+++ b/analysis/utils/config.py
@@ -416,7 +416,7 @@ def get_shared_vars(config, external_vars=None):
 
         @id/name/title/config
 
-    where config follows the conventions of `configure_parameter`. In further occurences,
+    where config follows the conventions of `configure_parameter`. In further occurrences,
     `@id` is enough.
 
     Arguments:
@@ -426,12 +426,12 @@ def get_shared_vars(config, external_vars=None):
             over the configuration. Defaults to None.
 
     Return:
-        dict: Shared parameters build in the same parameter hierachy as the model they
+        dict: Shared parameters build in the same parameter hierarchy as the model they
             are included in.
 
     Raise:
         ValueError: If one of the parameters is badly configured.
-        KeyError: If a parameter is refered to but never configured.
+        KeyError: If a parameter is referred to but never configured.
 
     """
     # Create shared vars
diff --git a/analysis/utils/root.py b/analysis/utils/root.py
index e49b135..a675de9 100644
--- a/analysis/utils/root.py
+++ b/analysis/utils/root.py
@@ -120,7 +120,7 @@ def list_to_rooabscollection(iterable, collection_type):
 
 
 def list_to_rooarglist(iterable):
-    """Convert a list into a RooArgSet.
+    """Convert a list into a RooArgList.
 
     Arguments:
         iterable (iterable): Iterable to convert.
diff --git a/ci/static_checker.sh b/ci/static_checker.sh
index 5915cd5..b72fb19 100755
--- a/ci/static_checker.sh
+++ b/ci/static_checker.sh
@@ -10,11 +10,11 @@ tail -n 3 pylint_report.txt
 echo "============================== Pylint check DIFF ==============================="
 diff-quality --violations=pylint --fail-under=95 pylint_report.txt --options="--rcfile=ci/pylintrc"
 
-echo "============================= Codestyle check FULL ============================="
+echo "============================= Code style check FULL ============================="
 pycodestyle --max-line-length=1000 analysis > report_pycodestyle.txt || (exit 0)
 pycodestyle --statistics -qq --max-line-length=100 analysis || (exit 0)
 
-echo "============================ Codestyle check DIFF =============================="
+echo "============================ Code style check DIFF =============================="
 diff-quality --violations=pycodestyle --fail-under=95 report_pycodestyle.txt  --options="--max-line-length=100"
 
 echo "===========================  Finished static checks ============================"
diff --git a/docs/api/conf.py b/docs/api/conf.py
index d81068a..97275bf 100644
--- a/docs/api/conf.py
+++ b/docs/api/conf.py
@@ -8,7 +8,7 @@
 # containing dir.
 #
 # Note that not all possible configuration values are present in this
-# autogenerated file.
+# auto-generated file.
 #
 # All configuration values have a default; values that are commented out
 # serve to show the default.
@@ -30,7 +30,7 @@
 
 
 
-# Manually added tthings
+# Manually added things
 import analysis
 
 autoclass_content = 'both'  # document modules and packages
diff --git a/docs/api/tools/change_headline.py b/docs/api/tools/change_headline.py
index 54a3561..bbd76a4 100644
--- a/docs/api/tools/change_headline.py
+++ b/docs/api/tools/change_headline.py
@@ -13,9 +13,9 @@ for rest_file in parsed_args.files:
             continue
         replacement = first_word.split('.')[-1]
         underline = f.readline()[0] * len(replacement)
-        lower_file = f.read() 
+        lower_file = f.read()
     with open(rest_file, 'w') as f:
         f.write("\n".join((replacement, underline, lower_file)))
     n_files += 1
 
-print("finished sucessfully parsing {} files".format(n_files))
+print("finished successfully parsing {} files".format(n_files))
diff --git a/docs/make_docs.sh b/docs/make_docs.sh
index 510c9b9..4c66e7f 100755
--- a/docs/make_docs.sh
+++ b/docs/make_docs.sh
@@ -9,4 +9,4 @@ popd > /dev/null
 sphinx-apidoc -o ${MAKE_DOCS_PATH}/api ${MAKE_DOCS_PATH}/../analysis  -fMeT && \
 python ${MAKE_DOCS_PATH}/api/tools/change_headline.py ${MAKE_DOCS_PATH}/api/analysis.* && \
 make -C ${MAKE_DOCS_PATH}/api clean && make -C ${MAKE_DOCS_PATH}/api html -j4 && \
-echo "Documentation succesfully build!" || echo "FAILED to build Documentation"
+echo "Documentation successfully build!" || echo "FAILED to build Documentation"
diff --git a/tests/test_config.py b/tests/test_config.py
index cb7dac0..1daba60 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -33,7 +33,7 @@ def create_tempfile(suffix=None):
     try:
         os_handle, filename = tempfile.mkstemp(suffix=suffix)
     except Exception:  # aiming at interruptions
-        print("Exception occured while creating a temp-file")
+        print("Exception occurred while creating a temp-file")
         raise
     finally:
         atexit.register(cleanup_file, filename)
diff --git a/tests/test_data.py b/tests/test_data.py
index 61a2f3a..2575b05 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -5,7 +5,7 @@
 # @author Albert Puig (albert.puig@cern.ch)
 # @date   16.05.2017
 # =============================================================================
-"""Test data-related funcionality."""
+"""Test data-related functionality."""
 from __future__ import print_function, division, absolute_import
 
 import os
-- 
GitLab


From 6e69009cbd32e7b94c581544135461de9332c41d Mon Sep 17 00:00:00 2001
From: Jonas Eschle 'Mayou36 <mayou36@jonas.eschle.com>
Date: Tue, 5 Dec 2017 22:10:55 +0100
Subject: [PATCH 2/2] Fix typos, add bullet points

---
 analysis/toys/README.md  |  6 +++---
 analysis/utils/README.md | 41 +++++++++++++++++++++-------------------
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/analysis/toys/README.md b/analysis/toys/README.md
index 8cdc308..4afdbc7 100644
--- a/analysis/toys/README.md
+++ b/analysis/toys/README.md
@@ -31,9 +31,9 @@ pdfs:
         pdf: signal
         parameters:
             - S4: 1.0
-    mass
+    mass:
         pdf: doublecb
-    q2
+    q2:
         pdf: flat
 ```
 
@@ -44,7 +44,7 @@ The `pdfs` key configures the generation PDFs, and details on how to configure t
 ### Trick
 
 If using the `link-from` option, several users can share the same toys if the config file is committed (or we know its location) and the same `link-from` is given.
-When executin `submit_generate_toys.py`, it checks for the existence of the toy file.
+When executing `submit_generate_toys.py`, it checks for the existence of the toy file.
 If it does, it is simply symlinked to the user directory, thus making everything work.
 
 
diff --git a/analysis/utils/README.md b/analysis/utils/README.md
index 7b56265..02dd7ff 100644
--- a/analysis/utils/README.md
+++ b/analysis/utils/README.md
@@ -9,19 +9,19 @@ config
 Several helpers dealing with yaml configuration files are placed
 inside.
 
-Loading (and interpreting substitutions) as well as dumping a configuration
+- Loading (and interpreting substitutions) as well as dumping a configuration
 can be achieved with `load_config` resp. `write_config`.
 
-Comparing two dictionaries and finding the differences is done by
+- Comparing two dictionaries and finding the differences is done by
 `compare_configs`.
 
-In order to manipulate nested dicts easier, `unfold_confi` resp.
+- In order to manipulate nested dicts easier, `unfold_config` resp.
 `fold_config` convert the dicts to a file-like structure.
 
-The logic of converting a parameter specified in the configuration
+- The logic of converting a parameter specified in the configuration
 into a ROOT object is implemented in `configure_parameter`.
 
-Adding shared variables is done with `get_shared_vars`.
+- Adding shared variables is done with `get_shared_vars`.
 
 
 decorators
@@ -29,7 +29,7 @@ decorators
 
 This module contains the decorators used throughout this library.
 
-`memoize` is memorizing the creation of a class if a function is called
+- `memoize` is memorizing the creation of a class if a function is called
 with the same arguments again as before.
 
 
@@ -38,10 +38,10 @@ fit
 
 Helpers for the fitting and results.
 
-`fit_parameters` converts fitted RooRealVars into a dict containing
+- `fit_parameters` converts fitted RooRealVars into a dict containing
 information about the errors.
 
-`calculate_pulls` creates pulls taking no error/ the symmetric error/
+- `calculate_pulls` creates pulls taking no error/ the symmetric error/
 asymmetric errors into account.
 
 
@@ -50,9 +50,9 @@ iterators
 
 Several iterators for large iterations are available.
 
-`pairwise` converts a sequence s -> (s0, s1), (s1, s2), (s2, s3)
+- `pairwise` converts a sequence s -> (s0, s1), (s1, s2), (s2, s3)
 
-`chunks` iterator over chunks given a chunksize
+- `chunks` iterator over chunks given a chunksize
 
 
 logging_color
@@ -60,7 +60,7 @@ logging_color
 
 Logging related utils.
 
-To get a new logger given a certain name, use `get_logger`.
+- To get a new logger given a certain name, use `get_logger`.
 
 
 monitoring
@@ -90,10 +90,11 @@ Several default paths are set:
 - plot style
 - fit result
 
-Additional paths can be added with `register_path`.
+- Additional paths can be added with `register_path`.
 
-To save a file, `prepare_path` takes care of the right naming, implicit
-folder creation and more. If you want in addition to that to work with a
+- To save a file, `prepare_path` takes care of the right naming, implicit
+folder creation and more.
+- If you want in addition to that to work with a
 file in a thread-safe manner, the function (or better contextmanager)
 `work_on_file` can be used.
 
@@ -109,7 +110,7 @@ random
 
 Any randomness related utils.
 
-In order to retrieve a *really* random integer, use `get_urandom_int`.
+- In order to retrieve a *really* random integer, use `get_urandom_int`.
 
 
 root
@@ -117,11 +118,11 @@ root
 
 ROOT framework related functions including iterators for ROOT containers.
 
-`load_library` is used to load a C++ library or to compile it inplace.
+- `load_library` is used to load a C++ library or to compile it inplace.
 
-`destruct_object` deletes ROOT objects safely.
+- `destruct_object` deletes ROOT objects safely.
 
-A functional helper is the `execute_and_return_self` function, which 
+- A functional helper is the `execute_and_return_self` function, which 
 executes an object and returns it again.
 
 #### Different Converters
@@ -135,5 +136,7 @@ The following converters are implemented:
 - RooArgSet to Python set
 - RooArgList to Python list
 
-To iterate over a RooAbsCollection, use `iterate_roocollection`.
+The following iterators are implemented:
+
+- To iterate over a RooAbsCollection, use `iterate_roocollection`
 
-- 
GitLab