Source code for DatabankLib.bin.compute_databank

#!/usr/bin/env python3
r"""
Compute properties for systems of the databank.

Script can compute selected set of properties for selected range of systems of the databank.
Properties available: APL, thickness, PCA relaxation times, MAICOS (density profiles,
water orientation, dielectric profiles, X-ray form factor).

**Usage:**

.. code-block:: console

    nml_compute_databank [--apl] [--nmrpca] [--maicos] [--thickness] \
        [--OP] [--range 0-1000] [--debug] [-h]


**Command line arguments:**

--range=ID_RANGE
    Range of system IDs to analyze, e.g. 0-1000. The interval `ID_RANGE` \
    can be opened at either end, e.g. ``*-50`` or ``25-*``. Use ``*-0`` to analyze all \
    just-added systems.
--apl        Compute APL (Area Per Lipid) for all systems.
--nmrpca     Compute NMR PCA for all systems.
--ff         Compute MAICOS electron density and form-factor for all systems.
--maicos     Compute MAICOS profiles for all systems.
--thickness  Compute Thickness for all systems.
--OP         Compute Order Parameter for all systems.
--debug      Enable debug logging.
--help       Show this help message and exit.

"""

import argparse
import logging
import sys

from DatabankLib.utils import run_analysis


[docs] def compute_databank(): parser = argparse.ArgumentParser( prog="compute_databank.py Script", description="Compute computable properties", ) parser.add_argument( "--apl", help="Compute APL (Area Per Lipid) for all systems", action="store_true", ) parser.add_argument( "--nmrpca", help="Compute NMR PCA for all systems", action="store_true", ) parser.add_argument( "--ff", help="Compute MAICOS electron density and form-factor for all systems", action="store_true", ) parser.add_argument( "--maicos", help="Compute all MAICOS properties for all systems", action="store_true", ) parser.add_argument( "--thickness", help="Compute Thickness for all systems", action="store_true", ) parser.add_argument( "--OP", "--op", help="Compute Order Parameter for all systems", action="store_true", ) parser.add_argument( "-r", "--range", help="Range of system IDs to analyze, e.g. 0-1000", type=str, default=None, metavar="ID_RANGE", ) parser.add_argument( "-d", "--debug", help="Enable debug logging", action="store_true", ) args = parser.parse_args() # configure logging logging_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig( format="%(asctime)s [%(levelname)s]: %(message)s", datefmt="%I:%M:%S %p", level=logging_level, ) logger = logging.getLogger() id_range = (None, None) if args.range: # range can be *-50 or 25-* or 25-38 if args.range == "*": id_range = (None, None) elif args.range.startswith("*-"): try: id_range = (None, int(args.range[2:])) except ValueError: logger.exception("Invalid ID range format. Use 'start-end' format.") sys.exit(1) elif args.range.endswith("-*"): try: id_range = (int(args.range[:-2]), None) except ValueError: logger.exception("Invalid ID range format. Use 'start-end' format.") sys.exit(1) else: # assume format is start-end try: id_range = tuple(map(int, args.range.split("-"))) except ValueError: logger.exception("Invalid ID range format. Use 'start-end' format.") sys.exit(1) if args.apl: logger.info("Computing APL (Area Per Lipid) for all systems") from DatabankLib.analyze import computeAPL run_analysis(computeAPL, logger, id_range=id_range) if args.nmrpca: logger.info("Computing NMR PCA for all systems") from DatabankLib.analyze import computeNMRPCA run_analysis(computeNMRPCA, logger, id_range=id_range) if args.ff and args.maicos: pass if args.ff and not args.maicos: logger.info("Computing MAICoS electron density and form-factor for all systems") from DatabankLib.analyze import computeMAICOS run_analysis(computeMAICOS, logger, id_range=id_range) if args.maicos: logger.info("Computing MAICOS for all systems") from DatabankLib.analyze import computeMAICOS def compute_all_maicos_props(s, ell): return computeMAICOS(s, ell, ffonly=False) run_analysis(compute_all_maicos_props, logger, id_range=id_range) if args.thickness: logger.info("Computing Thickness for all systems") from DatabankLib.analyze import computeTH run_analysis(computeTH, logger, id_range=id_range) if args.OP: logger.info("Computing Order Parameter for all systems") from DatabankLib.analyze import computeOP run_analysis(computeOP, logger, id_range=id_range)
if __name__ == "__main__": compute_databank()