Giter Club home page Giter Club logo

ges-comp-echem's People

Contributors

ges-mpalermo avatar lbabetto avatar ppravatto avatar

Stargazers

 avatar

ges-comp-echem's Issues

Implement a better handling of gbw files and wrapper of orcaplot

We should discuss how to improve the interface of reading and generating cube data.

If the save_cubes flag of orca.spe is set to 'True', then the binary content of the gbw file might be saved into the System instance.

We might implement a wrapper for orca_plot, and then use the relevant functions to implement properties of System instances such as e.g. system.spin_density to generate cubemaps on the fly. This prevents the use of explicit file names of temporary files to read and manipulate cubes.

Implement System generation from output files

Library should be able to correctly generate a System object starting from a program (like Orca or xTB) output file. This is already somewhat implemented in the parse_output functions in the various Engines but it needs to be generalized.

The VMD labels overlap with the 3D representation of atoms and bonds

When rendering condensed Fukui functions using VMD the labels of the condensed Fukui values are covered by the 3D objects. The labels appear to be fixed in a 2D plane perpendicular to the viewer point of view with its origin fixed on the coordinates of each atom. As such, the atom itself covers the label. So far I only managed to apply an offset in the XY plane.

If possible the label should appear on top of the 3D representation of the atom like, for example, in chemcraft.

Add customization options for CPCM block

e.g., if the alternative GEPOL-SES scheme needs to be invoked:

%CPCM
  SMD True
  SMDsolvent "water"
  SurfaceType gepol_ses_gaussian  # <---
end

Since the default option is the vdW gaussian scheme...

%CPCM
  SMD True
  SMDsolvent "water"
  SurfaceType vdw_gaussian  # <---
end

...for the time being we can just add a flag in the Engine init, but I don't like this approach, we should implement a customizable %CPCM block like we're doing for SCF and GEOM

Implement unit testing

Implement unit testing for covering missed updates such as this, in oneeloxidation.py:

while pKa < 20:

        deprotomer_list = crest.deprotonate(currently_protonated, nproc=nproc)

        if type(method) != XtbInput:
            deprotomer_list = tools.reorder_energies(
                deprotomer_list, nproc=nproc, method_opt=xtb, method_el=method, method_vib=xtb,
            )

        if deprotomer_list:
            currently_deprotonated = deprotomer_list[0]

        # if deprotonation is unsuccessful (e.g., topology change), save the molecule but with
        # sentinel values for pKa (which cannot be calculated)
        else:
            mol_list.append([currently_protonated, None, None])
            break

Where this block:

else:
            mol_list.append([currently_protonated, None, None])
            break

Should have been this:

 else:
            currently_protonated.properties.pka[method.method] = None
            mol_list.append(currently_protonated)
            break

Code refactoring: preparation to release 0.2.2

Desired features:

  1. Create a constants .py module to store and organize all the numeric constants, dictionary and conversion factors
  2. Store the coordinates in numeric form within the System object instead of strings
  3. Implement save and load functions in the System object to allow the export of all the data in .json format (Ensuring the back-compatibility for future System objects)
  4. Define a VMD-based tool to export data in image format and define a separate module
  5. Refactor the save cube option in the orca wrapper to allow for more flexibility in selecting the volumetric data to be saved

Other ideas:

  1. Implement custom check to verify if the required program is available. (e.g. check if orca is available before moving to the system(...) call)
  2. Define a new parser of the orca output file to load many properties in one run (e.g. join final single point energy, search of mulliken charges etc.)
  3. Define a more structured form of the properties to be stored to avoid confusion on the format.

To do:

  • Update the documentation accordingly

To be discussed:

  • Referencing a config.txt file created by the user to set all the paths to the required programs (The config.py can be used to read the paths or automatically read the default ones available on the system. I would avoid any reference to explicit paths in the package.)
  • Final conversion of the package in a pip-friendly format and release on PyPI

config.get_ncores() not working

config.get_ncores() calls from within the modules need to be moved to the function calls (spe, opt, etc.) and not in the initialization of the class instance.

Automatically fetch number of cores from bash variable?

def __init__(
self,
method: str,
basis_set: str = "def2-TZVP",
aux_basis: str = "def2/J",
nproc: int = len(os.sched_getaffinity(0)),
maxcore: int = 350,
solvation: bool = False,
solvent: str = "water",
optionals: str = "",
) -> None:
"""
Parameters
----------
method : str
level of theory
basis_set : str, optional
basis set, by default "def2-TZVP"
aux_basis : str, optional
auxiliary basis set for RIJCOSX, by default "def2/J"
nproc : int, optional
number of cores, by default all available cores
maxcore : int, optional
memory per core, in MB, by default 350
solvation : bool, optional
CPCM(SMD) implicit solvation model, by default False
solvent : str, optional
SMD solvent, by default "water"
optionals : str, optional
optional keywords, by default ""
"""
self.method = method
self.basis_set = basis_set
self.aux_basis = aux_basis
self.nproc = nproc
self.maxcore = maxcore
self.solvation = solvation
self.solvent = solvent
self.optionals = optionals

What if we add:

if os.environ["OMP_NUM_THREADS"]: # or "== Value" I don't know what's the default if it is not set, 
    self.nproc = int(os.environ["OMP_NUM_THREADS"])

I think it should work

Implement a check for job failures

Implement an error detection procedure to detect a system job that exited abnormally. For example, when orca fails, no "Normal termination" should be found in the output file. If the error is detected it can be reported to the user in a more self-explanatory way than some random exceptions raised during the parsing phase.

Write a developer's guide

The developer's guide should integrate the already existing documentation with:

  • Codebase Overview: Start with a high-level overview of your codebase. Describe the purpose of the library, its main features, and how it is structured at a high level. This includes the main modules, classes, and their relationships.

  • Directory Structure: Provide a clear explanation of the directory structure of your codebase. This should include the purpose of each directory and the type of files that can be found in them.

  • Key Components: Identify the key classes, functions, and modules in your codebase. For each of these, provide a brief description of its purpose, how it works, and how it interacts with other parts of the codebase.

NAMD engine implementation

Desired features:

  • Implement an engine for NAMD
  • Refactoring and re-deploy of MDTrajectory class for NAMD and DFTB+
  • Proper definition and placement of the velocity property and related quantities

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.