Giter Club home page Giter Club logo

molsimplify's Introduction

Pytest Documentation Status Linter

molSimplify is an open source toolkit for the automated, first-principles screening and discovery of new inorganic molecules and intermolecular complexes. molSimplify is developed by the Kulik Group in the Department of Chemical Engineering at MIT. The software can generate a variety of coordination complexes of metals coordinated by ligands in a mono- or multi-dentate fashion. The code can build a coordination complex directly from a central atom or functionalize a more complex structure (e.g. a porphyrin or other metal-ligand complex) by including additional ligands or replacing existing ones. molSimplify also generates inter-molecular complexes for evaluating binding interactions and generating candidate reactants and intermediates for catalyst reaction mechanism screening. molSimplify also ships neural network models that can predict the metal-ligand bond lengths, spin-splitting energy, frontier orbital energies, spin-state dependent reaction energies, and simulation outcomes for octahedral transition metal complexes. See the Tutorials at the Kulik group webpage for a more complete list of jobs molSimplify can do.

Installation

via pip, from PyPI

Starting with version 1.7.4 molSimplify is available on PyPI enabled by the openbabel-wheel project.

pip install molSimplify

via pip, from GitHub

To obtain the latest development version or if you plan to modify the code we recommend installation from GitHub.

  1. Clone molSimplify source from github and change into the directory.

    git clone https://github.com/hjkgrp/molSimplify.git
    cd molSimplify
  2. Locally install the molSimplify package using pip.

    pip install -e .[dev]
  3. To test your installation, you can run the command below at the root directory of molSimplify. You are good to go if all the tests are passed! Note, some test will be skipped because none of the optional dependencies are installed this way.

    pytest

via conda, from GitHub

The easiest way of installing molSimplify including optional dependencies such as xtb is via the Conda package management system.

  1. Prerequisite: have Anaconda or miniconda installed on your system. For M1 Macs, please use Miniforge for Mac OSX arm64. (We do not recommend simultaneously installing Anaconda and Miniforge - only install Miniforge.)

  2. Clone molSimplify source from github and change into the directory.

    git clone https://github.com/hjkgrp/molSimplify.git
    cd molSimplify
  3. Create a new conda environment and specify the desired Python version (we currently recommend 3.8).

    conda create --name molsimp python=3.8
  4. Activate the conda environment you just created and update using one of the provided environment yaml files. In case you are experiencing problems using the full environment file in devtools/conda-envs/mols.yml (some packages might not be available on all architectures such as M1 Macs) try commenting the lines marked optional or switch to the minimal environment file devtools/conda-envs/mols_minimal.yml.

    conda activate molsimp
    conda env update --file devtools/conda-envs/mols.yml
  5. Locally install the molSimplify package using pip.

    pip install -e . --no-deps
  6. To test your installation, you can run the command below at the root directory of molSimplify. You are good to go if all the tests are passed!

    pytest

via conda, from Anaconda

Releases of molSimplify are also available on Anaconda on the conda-forge channel and the hjkgroup channel.

via docker

We also maintain an active docker image on dockerhub for plug-and-play use.

For line by line instructions on an installation via docker, please visit molSimplify installation webpage of Kulik group.

Tutorials

A set of tutorials covering common use cases is available at the Kulik group webpage. Note that the GUI is no longer supported, so users are encouraged to generate structures through the command line or using the Python command startgen_pythonic.

Documentation

Documentation for molSimplify can be found at our readthedocs page.

Citation DOI for Citing MDTraj

molSimplify is research software. If you use it for work that results in a publication, please cite the following reference:

@Article {molSimplify,
author = {Ioannidis, Efthymios I. and Gani, Terry Z. H. and Kulik, Heather J.},
title = {molSimplify: A toolkit for automating discovery in inorganic chemistry},
journal = {Journal of Computational Chemistry},
volume = {37},
number = {22},
pages = {2106--2117},
issn = {1096-987X},
url = {http://dx.doi.org/10.1002/jcc.24437},
doi = {10.1002/jcc.24437},
year = {2016},
}

@Article{Nandy2018IECR,
author = {Nandy, Aditya and Duan, Chenru and Janet, Jon Paul and Gugler, Stefan and Kulik, Heather J.},
title = {Strategies and Software for Machine Learning Accelerated Discovery in Transition Metal Chemistry},
journal = {Industrial {\&} Engineering Chemistry Research},
volume = {57},
number = {42},
pages = {13973-13986},
issn = {0888-5885},
url = {https://doi.org/10.1021/acs.iecr.8b04015},
doi = {10.1021/acs.iecr.8b04015},
year = {2018},
}

If you use any machine learning (ML) models in molSimplify that results in a publication, please cite the corresponding reference in this ML model reference page.

Note that we have disabled developers' supports for Python 2.7 and will only release conda builds on Python 3.

molsimplify's People

Contributors

aarongarrison avatar adityanandy avatar adrianaladera avatar allikeys avatar asteeves avatar chcltchunk avatar chenruduan avatar davidkastner avatar dbkchu avatar demxr99 avatar ffangliu avatar gianmarco-terrones avatar harpmit avatar iliak14 avatar isabelthecat avatar jpjanet avatar jwtoney avatar mgt16 avatar naveenarun avatar nickyangmit avatar pascalfriederich avatar pre-commit-ci[bot] avatar ralf-meyer avatar rolan701 avatar shuwenyue avatar terrygani avatar vyshnavivennelakanti avatar xiaohuangmit avatar yang15 avatar ysc1220 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

molsimplify's Issues

List of dependencies when not using conda

Hi,

On HPC clusters of universities, it is rather uncommon to use Conda, as it creates a large number of small files (several hundred thousand files with an average size of KB), which is kind of a worst case scenario for many high-performance file systems as for instance Lustre.

Therefore I am trying to install molSimplify without using conda on the Euler cluster of ETH Zurich, but already getting a list of dependencies is not trivial. When looking at

https://github.com/hjkgrp/molSimplify/tree/master/devtools/conda-envs

there are two .yml files. The one for m1 lists more than 160 dependencies, but not XTB or PSI4, whereas the other one only lists 18 dependencies including XTB and psi4. And the README.md again lists a different set of dependencies, not containing XTB and psi4.

Would it be possible that you provide a minimal list of dependencies (not RPM packages, not Conda packages) for molSimplify, that allows to build the software from source?

Thank you very much in advance and best regards

Sam

Controlling the location of ligand placement

Hello,

Is it possible to control the location of specific ligands in the presence of multiple ligand types? I am interested in enumerating symmetrically unique configurations for a complex with two or more different ligands but I cannot seem to find the right input for startgen_pythonic. I have been able to control the location to some extent, but the requested binding site on the molecule (which I am passing in from a SMILES string and attempting to choose the carboxyl group) is applied to the first molecule, but not to the second, leading to strange configurations.

For example, this input

    smiles = "C1=CSC(=C1)C(=O)O"
    input_dict = {
        '-core'    : 'Cu',
        '-coord'   : '6',
        '-geometry': 'oct',
        '-spin'    : '1',
        '-oxstate' : '2',
        '-skipANN' : 'True',
        '-smicat'  : '8',
        '-keepHs'  : 'no,yes',
        '-lig'     : f'{smiles},water',
        '-ligocc'  : '2,4'
    }

leads to this particular geometry:
image
but if I try to force the ligand to the other side (with perhaps an incorrect input dict) using:

    smiles = "C1=CSC(=C1)C(=O)O"
    input_dict = {
        '-core'    : 'Cu',
        '-coord'   : '6',
        '-geometry': 'oct',
        '-spin'    : '1',
        '-oxstate' : '2',
        '-skipANN' : 'True',
        '-smicat'  : '8',
        '-keepHs'  : 'no,yes,no',
        '-lig'     : f'{smiles},water,{smiles},water',
        '-ligocc'  : '1,1,1,3'
    }

I obtain this strange configuration:
image
I was hoping if somebody could let me know if this is a bug or just user error? Are there methods already available to do the type of structure enumeration I am attempting here?

Thanks,
Stephen

Installing to existing conda env

Hi there,

Forgive my ignorance as I'm not a conda expert, but I'm trying to add your package to an existing conda environment. I tried conda env update --file mols.yml but because there's a name defined in the yml file it creates a new environment anyway. I then tried to manually install the dependencies in the yml file and pip install from the molSimplify directory as suggested in the instructions, but 9 tests fail:

FAILED tests/test_bidentate.py::test_bidentate - ValueError: Inpu...
FAILED tests/test_example_1.py::test_example_1 - ValueError: Inpu...
FAILED tests/test_example_1.py::test_example_1_No_FF - ValueError...
FAILED tests/test_example_5.py::test_example_5 - ValueError: Inpu...
FAILED tests/test_example_7.py::test_example_7 - ValueError: Inpu...
FAILED tests/test_molcas_caspt2.py::test_molcas_caspt2 - ValueErr...
FAILED tests/test_molcas_casscf.py::test_molcas_casscf - ValueErr...
FAILED tests/test_orca_ccsdt.py::test_orca_ccsdt - ValueError: In...
FAILED tests/test_orca_dft.py::test_orca_dft - ValueError: Input ...

Could I get some help as to how to safely install your package to an existing conda env?
Thanks,
Puck

Generate same complex in diffrent runs

Hi,
I am wondering if there is any parameter (like set a seed random) to set to generate same structure in different run for the same metal core and ligands? In the current version, if we run the program on the same metal-ligand complex we will get slightly different results for each run.

DB search with SMARTS pattern fails due to splitting on comma

Both from GUI and from command line, trying to search a database with the smarts pattern from Tutorial 4 ([#7D1,#7D2;!+]) fails with a SMARTS error in Open Babel:

(test-env)  [asteeves  @ ahsmbp:~/Runs]$ molsimplify -i dbsearch.in 
main_invoked

************************************************************
******** Welcome to molSimplify! Let's get started. ********
************************************************************


[#7D1
ligdb fastsearch database file missing from ChemDB/. Please make sure file ligdb.fs is there, it speeds up search significantly..
ligdb fastsearch database file missing from ChemDB/. Please make sure file ligdb.fs is there, it speeds up search significantly..
Performing substructure search:
==============================
*** Open Babel Error  in SMARTSError
  SMARTS Error:
[#7D1
     ^

==============================
*** Open Babel Error  in Do
  [#7D1 cannot be interpreted as either valid SMARTS or the name of a file with an extension known to OpenBabel that contains one or more pattern molecules.
0 molecules converted
2 errors 11 audit log messages 

Applying filters:
0 molecules converted
8 audit log messages 

Stripping salts and removing duplicates
0 molecules converted

Filtering by allowed elements:
Element filter returns 0 results
==============================
*** Open Babel Error  in SMARTSError
  SMARTS Error:
[#7D1
     ^

Traceback (most recent call last):
  File "/Users/asteeves/anaconda/envs/test-env/bin/molsimplify", line 11, in <module>
    load_entry_point('molSimplify', 'console_scripts', 'molsimplify')()
  File "/Users/asteeves/Documents/molSimplify/molSimplify/__main__.py", line 72, in main
    emsg = startgen(sys.argv,False,gui)
  File "/Users/asteeves/Documents/molSimplify/molSimplify/Scripts/generator.py", line 114, in startgen
    emsg = dbsearch(rundir,args,globs)
  File "/Users/asteeves/Documents/molSimplify/molSimplify/Scripts/dbinteract.py", line 480, in dbsearch
    flag = matchsmarts(smistr,outf,catoms,nres)
  File "/Users/asteeves/Documents/molSimplify/molSimplify/Scripts/dbinteract.py", line 318, in matchsmarts
    sm = pybel.Smarts(smarts)
  File "/Users/asteeves/anaconda/envs/test-env/lib/python2.7/site-packages/pybel.py", line 912, in __init__
    raise IOError("Invalid SMARTS pattern")
IOError: Invalid SMARTS pattern

Identification of solvent in MOF_descriptors.py

Hi there,

I noticed there are some instances where molSimplify is failing to featurize some structures due to solvent being present in the structure. In my case, I have found this to be flagging structures incorrectly, I have attached an example .cif file (as a txt file) where this has occurred. I was curious whether this behaviour is intended or if it is a bug?

When running get_MOF_descriptors function on this cif, I receive the following output in FailedStructures.log:

Failed to featurize DB5-hypotheticalMOF_1000051_0_0_3_26_9_1: solvent molecules
DB5-hypotheticalMOF_1000051_0_0_3_26_9_1.txt

Generate haptic bond with molsimplify

Dear all
I tried to generate the structure of complex with haptic bond such as ferrocene with the following input

#input for ferrocene
-coord 2
-core Fe
-ligocc 2
-geometry li
-spin 0
-oxstate II
-lig [CH]1[CH][CH][CH][CH]1

However, the rings align vertically.

I expect that this alignment comes from the intrinsic force field to maximize the COM.

Is there any way to generate the intial haptic bond using molsimplify?

Best regards

Git Tags for releases

I noticed that the latest git tag is pointing to version 1.1.48 while the conda package is build for 1.5.0. Can you create a git tag for 1.5.0 ?

DB search fails with "AttributeError: globalvars instance has no attribute 'installdir'

DBsearch fails from GUI and from command line:

************************************************************
******** Welcome to molSimplify! Let's get started. ********
************************************************************


Traceback (most recent call last):
  File "/Users/asteeves/anaconda/envs/test-env/bin/molsimplify", line 11, in <module>
    load_entry_point('molSimplify', 'console_scripts', 'molsimplify')()
  File "/Users/asteeves/Documents/molSimplify/molSimplify/__main__.py", line 72, in main
    emsg = startgen(sys.argv,False,gui)
  File "/Users/asteeves/Documents/molSimplify/molSimplify/Scripts/generator.py", line 114, in startgen
    emsg = dbsearch(rundir,args,globs)
  File "/Users/asteeves/Documents/molSimplify/molSimplify/Scripts/dbinteract.py", line 360, in dbsearch
    print(globs.installdir)
AttributeError: globalvars instance has no attribute 'installdir'

Segmentation fault (core dumped) error

Hi,
I used conda to install molsimlify. It seems it is installed successfully and when I run the test, all test passed successfully. But when I want to run molsimplify command I got the following error:

Segmentation fault (core dumped)

Problem w/ tutorial 4: "Globalvars instance has no attribute 'installdir' "

Hello!

First of all, your software is looks really amazing and fits my research interests.

I installed molSimplify using conda. I'm trying out the tutorial 4, but I'm getting the following error

$molsimplify -i ex1.in 
main_invoked

************************************************************
******** Welcome to molSimplify! Let's get started. ********
************************************************************


Traceback (most recent call last):
  File "/home/markus/anaconda2/envs/molSimplify/bin/molsimplify", line 11, in <module>
    load_entry_point('molSimplify==1.2.6a0', 'console_scripts', 'molsimplify')()
  File "/home/markus/anaconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/__main__.py", line 69, in main
    emsg = startgen(sys.argv,False,gui)
  File "/home/markus/anaconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/generator.py", line 114, in startgen
    emsg = dbsearch(rundir,args,globs)
  File "/home/markus/anaconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/dbinteract.py", line 360, in dbsearch
    print(globs.installdir)
AttributeError: globalvars instance has no attribute 'installdir'

with ex1.in being

-dbcatoms 1 # index of connecting atom in SMARTS query, see below
-dbbase chembl_22_1 # name of your database file without the file extension
-dbfs yes
-dbfname simres.smi # results file name, default is simres.smi
-dbatoms <15 # atom filter
-dbsmarts [#7D1,#7D2;!+]
-dballowedels H,C,N,F,Cl,Br,I # allowed element filter
-dbmaxsmartsmatches 1 # max. SMARTS matches filter

I read the manual and it mentioned that INSTALLDIR should be set to "the installation directory (top directory) of the program where all the supporting files are located". I set my ~/.molSimplify to
INSTALLDIR=/home/markus/anaconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify
but it didn't work.

Any tips on solving this problem?

Best regards,
Markus

avoid that molecule "falls apart"

Dear all,

I am facing a strange problem: I want to place a flat molecule (TCNE) on MgO (100); the molecule geometry has spacings between the Ns that are almost the same as the lattice constant of MgO, so I assumed it would be easy to convince the molecule to lie flat on MgO. In order to find the equilibrium geometry I then wanted to move it around a bit but two things happen a lot

  1. the molecule "stands up"
  2. the molecule "falls apart" and the fragments attach to random atoms

is there a way to avoid both things? Atom 1 and 2 in below script are the "C=C" axis and I want to rotate the molecule just a bit to get more configurations

molSimplify input file generated from CLI input

-place_on_slab
-unit_cell MgO.xyz
-cell_vector [[12.6510000, 0, 0], [0, 12.6510000, 0], [0, 0, 30.000]]
-target_molecule TCNE.xyz
-align_distance_method physisorption
-align_method alignpair
-num_surface_atoms 2
-surface_atom_type O
-object_align [1]
-angle_control_partner 2
-angle_surface_axis [1,1]
-control_angle 0

MgO-TCNE-slab.zip

Molsimplify crashing on clicking "Draw Ligands"

I'm a new user to anaconda and python. I've just installed molSimplify using the following commands as per the installation instruction of HJKgrp.mit.edu/content/new-installation-option-molsimplify

conda create -n molSimplify python=2.7
source activate molSimplify
conda install -c hjkgroup molSimplify
conda install pyqt=5

It does get launched successfully but when I tried the first tutorial, the moment i click on draw ligand after selecting tpp, it crashes. The traceback for the error is as follows:

File "$HOME/Work/Softwares/anaconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/grabguivars.py", line 137, in writeinputf
f = open(args['-rundir']+'/geninput.inp','w')
IOerror: [Errno 2] No such file or directory: u '$HOME/Runs//geninput.inp'
Aborted (core dumped)

I've tried it on two different computer both have ubuntu 16.04 installed as OS and conda 4.3.24 installed

Also, why is it searching in $HOME/Runs//geninput.inp? There isn't any folder like that and it makes sense that it crashed because it didn't find what it was looking for.

Any help provided to solve this issue is much appreciated.

Critical typo in test helperFuncs.py

There is a minor typo on line 133 in helperFuncs.py:
pssLG = False instead of passLG = False

This causes a false negative (or positive?) test result. Fixing the typo breaks test_example_3.py. I have no idea what this test is supposed to check for. Since the original contributors are no longer here: Can anyone else help me out?

Custom SMILES ligand naming not working as expected

I am trying to use the -sminame option to give a custom ligand name for the folder creation, e.g. to avoid having folder names with "smiX" in them. However, using the option does not have any effect on the folder naming.

Example with -sminame test:

actual resulting folder name: <core>_<geom>_<ox>_smi1_<ligocc>_s_<spin>
expected resulting folder name: <core>_<geom>_<ox>_test_<ligocc>_s_<spin>

Could you clarify, if the folder name should have changed the way I expected it?

Possible scikit-learn dependency issue [installing through conda]

Hello,

I encounter the error message below after installing molSimplify following the instructions listed here for a conda installation: http://hjkgrp.mit.edu/content/installing-molsimplify. Is the version of molSimplify installed through conda the most up to date release and is it installing the correct version of scikit-learn?

± molsimplify -i example-1.in
Using TensorFlow backend.
TensorFlow connection successful
WARNING:tensorflow:From /Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/main.py:84: The name tf.logging.set_verbosity is deprecated. Please use tf.compat.v1.logging.set_verbosity instead.

WARNING:tensorflow:From /Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/main.py:84: The name tf.logging.ERROR is deprecated. Please use tf.compat.v1.logging.ERROR instead.

Input file detected, reading arguments from input file
molSimplify is starting!


******** Welcome to molSimplify! Let's get started. ********


Checking input...
swithcing core from ['cobalt'] to Co
building an equilibrium complex
loading ligand from dictionary: tpp
looking for /Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Ligands/tpp.mol
loading ligand from dictionary: imidazole
looking for /Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Ligands/imidazole.mol
loading ligand from dictionary: x
looking for /Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Ligands/x.mol
[False, '1']

Directory /Users/weitzner1/Codes/molSimplify/examples/Runs//co_oct_2_tpp_1_imidazole_1_x_1_s_1 already exists. Keep both (k), replace (r) or skip (s) k/r/s: r
Traceback (most recent call last):
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/bin/molsimplify", line 11, in
sys.exit(main())
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/main.py", line 191, in main
emsg = startgen(sys.argv, False, gui)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/generator.py", line 209, in startgen
emsg = multigenruns(rundir, args, globs)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/rungen.py", line 316, in multigenruns
emsg = rungen(rundir, args, fname, globs)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/rungen.py", line 620, in rungen
args, rootdir, ligands, ligocc, globs, mcount)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/structgen.py", line 3887, in structgen
strfiles, args, rootdir, ligands, ligoc, globs, sernum)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/structgen.py", line 3650, in structgen_one
args, ligands, ligoc, licores, globs)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/structgen.py", line 2795, in mcomplex
args, ligands, occs, dents, batslist, tcats, licores)
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/structgen.py", line 148, in init_ANN
from molSimplify.Scripts.tf_nn_prep import tf_ANN_preproc
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/Scripts/tf_nn_prep.py", line 14, in
from molSimplify.python_krr.sklearn_models import sklearn_supervisor
File "/Users/weitzner1/opt/anaconda3/envs/molSimplify/lib/python3.6/site-packages/molSimplify/python_krr/sklearn_models.py", line 2, in
from sklearn.externals import joblib
ImportError: cannot import name 'joblib'

Revised autocorrelation descriptor calculator function returns a different value on each individual run

Hello,
I'm using molsimplify to calculate revised autocorrelations by using SMILES as input . But I noticed that for every individual run the function returns different values for some properties. Following is the code and images showing the varying values that are returned. How can this problem be solved ? I wish to continue using SMILES as input so a solution that uses SMILES will be preferred over any other workarounds.
Thanks .

def dataset_generator(input_data):
  descriptor_dataset=pd.DataFrame()
  for smiles in input_data:
    descriptor_set=pd.DataFrame()
    complex_mol=mol3D()
    complex_mol.read_smiles(smiles=smiles,ff='uff')
    results_dictionary=Informatics.lacRACAssemble.generate_metal_autocorrelations(complex_mol,depth=8,loud=False)
    results=results_dictionary["results"]
    results=np.reshape(results,(1,-1))
    results=pd.DataFrame(results)

    for i in range(len(results)):
      descriptor_set=pd.concat([descriptor_set,results.iloc[i,:]],axis=0,ignore_index=True)
    descriptor_dataset=pd.concat([descriptor_dataset,descriptor_set],axis=1)
  
  descriptor_dataset=descriptor_dataset.T
  print(descriptor_dataset)
  scaler=StandardScaler()
  scale=scaler.fit(descriptor_dataset)
  normalized_data=scale.transform(descriptor_dataset)
  normalized_data=pd.DataFrame(normalized_data)
  return normalized_data

Data-1
Data-2

small bug surfacce_atom_ind

the keyword surface_atom_ind is misspelled internally as surfacce_atom_ind (two "c") and only works if spelled incorrectly.

Deprotonating both coordinating groups on a custom bidentate ligand.

Hello,

I've been generating structures with a set of custom ligands (3D structures), some of which contain two alcohol groups which both need to be deprotonated when generating the metal complex. For this I use the auto keepHs value and I've been seeing strange deprotonation behaviour.

For example with ethylene glycol, when using the SMILES string the correct structure is generated with both alcohols deprotonated. However, when switching to a 3D optimized structure, including hydrogens, and adding to the database the first OH is deprotonated correctly, but then the second remains protonated.

When running in debug mode both keepHs are correctly identified with [False, False], but the second is not removed.

Any insight into this behaviour would be most appreciated.

Thanks!

dictionary lookup problem for some elements (Pb?)

It seems the supercell builder has a problem looking up certain elements such as Pb.

the error message in the console would be

We didn't find the atomic mass of Pb in the dictionary. Assigning default value of 12!

QE input subsequently fails (xyz seems to be written properly though)

final cell vector, inc vapour space is :
[[4.93, 0, 0], [0, 4.9299999999999997, 0], [0, 0, 24.93]]
Traceback (most recent call last):
  File "/home/chris/miniconda2/envs/molSimplify/bin/molsimplify", line 11, in <module>
    load_entry_point('molSimplify==1.2.6a0', 'console_scripts', 'molsimplify')()
  File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/__main__.py", line 78, in main
    emsg = startgen(args,False,gui)
  File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/generator.py", line 144, in startgen
    emsg = slab_module_supervisor(args,rundir)
  File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/cellbuilder.py", line 1389, in slab_module_supervisor
    write_periodic_mol3d_to_qe(super_cell,new_dup_vector,rootdir + 'slab/slab.in')
  File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/periodic_QE.py", line 70, in write_periodic_mol3d_to_qe
    f.write(str(elements) + "    " +  str(globs.amass()[elements][0])  + "     " + ps_info + '\n')
KeyError: 'Pb'

Include PyYAML in Conda dependencies

Hi,

A small issue: when I create a new conda environment and install molSimplify using the instructions on the website, I get an error with finding the yaml module.

$ conda create -nmstest python=2.7
...
$ conda activate mstest
...
$ conda install -c hjkgroup molSimplify
...
$ molsimplify
Traceback (most recent call last):
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/bin/molsimplify", line 11, in <module>
    load_entry_point('molSimplify==1.2.7a0', 'console_scripts', 'molsimplify')()
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
    return ep.load()
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2443, in load
    return self.resolve()
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2449, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/lib/python2.7/site-packages/molSimplify/__main__.py", line 34, in <module>
    from .Scripts.inparse import *
  File "/usr/local/Caskroom/miniconda/base/envs/mstest/lib/python2.7/site-packages/molSimplify/Scripts/inparse.py", line 15, in <module>
    import yaml
ImportError: No module named yaml

Running conda install pyyaml solves the issue, so this can probably be fixed by just including pyyaml in the dependencies for molSimplify.

mol3D metal list

I am looking for input how we should resolve the following bug I found:

mol3D keeps track of indices of metal atoms in the list self.metals. It appears that this was renamed from self.metal. The issue is that several methods including addAtom(), deleteatom(), and convert2mol3D still reset self.metal instead of the newer self.metals.

Proposed options to fix this:

Minimal test case showing the current problem:

from molSimplify.Classes.mol3D import mol3D
from molSimplify.Classes.atom3D import atom3D


def test_adding_and_deleting_atoms():
    mol = mol3D()
    mol.addAtom(atom3D(Sym='Fe'))

    assert mol.natoms == 1
    assert mol.findMetal() == [0]

    mol.addAtom(atom3D(Sym='Cu'))

    assert mol.natoms == 2
    assert mol.findMetal() == [0, 1]

    mol.deleteatom(0)

    assert mol.natoms == 1
    assert mol.findMetal() == [0]

Define a custome core structure

Hi,
I noticed the core structures should be in the following list:

ag au cadmium
cd chromium chromiumporphyrin co cobalt
cobaltporphyrin copper copperporphyrin cr cr4nh3o cu
fe fe2o2 fen4py fen4pyo fenh3o ferrcore ferrocene gold
hafnium hf hg ir iridium iron ironporphyrin la
lanthanum manganese manganeseporphyrin mercury mn
mn3nh3o mn5nh3o mo molybdenum n2ots nb ni nickel
nickelporphyrin niobium os osmium palladium pd
platinum pt re rh rhenium rhodium ru ruthenium sc
scandium scandiumporphyrin silver ta tantalum tc
technetium ti titanium titaniumrphyrin tungsten v
vanadium vanadiumporphyrin w y yttrium zinc
zincporphyrin zirconium zn zncat zr

I am wondering if there is any solution to define some custom core structure, like these structures as core:
[Zn]O([Zn])[Zn]
[Fe]O[Fe]
[OH2][Co][OH2][Co][OH2][Co][OH2]

For example, given the following building blocks, can we use molsimplify to build the MOF?
Core: [Zn]O([Zn])[Zn]
Lig1: [O-]C(=O)c1cc(F)c(c(c1F)F)C(=O)[O-]
Lig2: [O-]C(=O)c1cc(F)c(cc1F)C(=O)[O-]
Lig3: [O-]C(=O)c1ccc(c(c1)F)C(=O)[O-]

Thanks,

Hardcoded paths for locations of openbabel utilities on OS X

draw_ligs fails on OS X due to hardcoded paths in Classes/mGui.py

            if globs.osx:
                cmd = "/usr/local/bin/obabel -isdf "+outputf+" -O "+locf+".svg -xC -xi"

In my case, installing with conda on OS X, this fails with an error message in the GUI and the following printed to the terminal:

/bin/sh: /usr/local/bin/obabel: No such file or directory

Strain rotation: AttributeError: 'OBAtom' object has no attribute 'atomicnum'

Dear all,

I am trying to align a "ligand" to hollow sites on an Ag(111) slab. To the best of my understanding this could be achieved by assigning each target ligand atom 3 Ag surface atoms. Now my ligand has to Fe (atom 39 and 40 in my xyz file) and I would like use

-object_align 39, 40

this however leads to a crash with the following error

starting strain rotation

begining distortion
Traceback (most recent call last):
File "/home/chris/miniconda2/envs/molSimplify/bin/molsimplify", line 11, in
load_entry_point('molSimplify==1.2.7a0', 'console_scripts', 'molsimplify')()
File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/main.py", line 152, in main
emsg = startgen(sys.argv,False,gui)
File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/generator.py", line 159, in startgen
emsg = slab_module_supervisor(args,rundir)
File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/cellbuilder.py", line 1367, in slab_module_supervisor
weighting_method = 'linear',weight=weight, masklength = num_surface_atoms, surface_atom_ind = surface_atom_ind,debug=debug)
File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/cellbuilder.py", line 798, in molecule_placement_supervisor
loaded_cell = combine_multi_aligned_payload_with_cell(loaded_cell,super_cell_vector,payload,cand_list,sites_list,align_dist,duplicate,control_angle,debug)
File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/cellbuilder.py", line 604, in combine_multi_aligned_payload_with_cell
distorted_payload,enl = cell_ffopt('mmff94',distorted_payload,cand_list)
File "/home/chris/miniconda2/envs/molSimplify/lib/python2.7/site-packages/molSimplify/Scripts/cellbuilder_tools.py", line 55, in cell_ffopt
if atom.atomicnum in metals:
AttributeError: 'OBAtom' object has no attribute 'atomicnum'

if I only select one atom to align it works without problem, so I guess it has something to do with the force-field, but selecting a different FF (-ff ..) does not help in this case. OBAtom should have the attribute atomicnum, so I am not sure what causes the problem here...

Thanks in advance for your help!

Chris

Flake8 E711

Task: fix the 2 occurrences of E711
comparison to None should be 'if cond is not None:' (because None is a singleton)

> flake8 molSimplify --select=E711 --show-source                                            
molSimplify/Informatics/bridge_functionalizer.py:193:18: E711 comparison to None should be 'if cond is not None:'
            if m != None:
                 ^
molSimplify/Informatics/MOF/PBC_functions.py:395:17: E711 comparison to None should be 'if cond is not None:'
    if filename != None: 
                ^

ligands.dict charge assignment for xyz files

When using molSimplify from the command line, the generated terachem_input files do not have the correct charge if the ligand is not neutral and uses an xyz file as its geometry in ligands.dict.

Randomize orientation of molecule on slab

Dear all,

I was reading through the manual but I am not sure if molsimplify can do the following:

I have a slab.xyz and a molecule.xyz. I want to place the molecule on the slab with a certain distance but randomize orientation (to generate a set of input files and sample the configuration space), e.g. lets say I want 1000 randomized positions where I keep the distance fixed but allow the molecule to move in x-y plane and rotate around its z axis (the molecule is planar and "long" in the z-direction, z being the surface normal).

can this be achieved with molsimplify?

Thanks in advance for your help!

Best,
Chris

Set custom data directory non interactively

Is there a way to set the custom data directory non-interactively?

I'm trying to develop a package that uses molSimplify through the python API to generate catalyst structures on demand. I'm planning on including several custom ligands as part of this package and I'd prefer to be able to set their locations as part of a config file in the root of the package, rather than a user needing to type it into the command line or having to modify the dot file in their home directory.

Ideally I'd like to be able to set this as a flag in the python API or a config file in the directory root.

Thanks!

Missing file Data/no.dat

Running
molsimplify -lig water
Results in
FileNotFoundError: [Errno 2] No such file or directory: '.../molSimplify/Data/no.dat'
because it can not find the corresponding template file

∆E_H-L from a xyz file

Hi,
I'm trying to get the value of ∆E_H-L of a complex from an xyz file (included at the end). The command line I use is the following:

molsimplify -core DPL424BT.xyz -geometry oct -coord 6 -oxstate II -spin 5

However, I get an error in the process. I guess the error is due to the fact that I did not enter the information of the ligand correctly but I do not know how to do it since the complex has two bidentate ligands and two monodentate ligands.

How can I get the properties with molSimplify from a complex with bidentate ligands (or higher) in an xyz file?

Any help with this or advice is appreciated.
Best,
David


63
DPL424BT
Se 7.527825 7.028065 6.006982
Fe 10.153138 3.855600 8.676598
N 9.198281 4.477894 10.536861
C 9.064387 5.774147 10.857895
H 9.393165 6.425589 10.250359
N 8.627933 4.876563 7.645818
C 8.476816 6.204432 12.015353
H 8.406345 7.132528 12.205683
S 8.733284 1.761469 9.277019
C 8.830065 2.117496 11.050515
H 9.694733 1.781881 11.393102
H 8.110112 1.617871 11.511676
C 8.705225 3.574141 11.402785
C 7.989811 5.274461 12.893425
H 7.585479 5.546381 13.708921
C 8.096909 3.945821 12.581067
H 7.755300 3.285796 13.171267
C 6.987753 2.193836 8.945573
H 6.859245 3.163990 9.097101
H 6.781861 2.006138 7.994999
C 8.186079 5.722482 7.017633
C 5.837698 0.087137 9.622347
H 6.299588 -0.369066 8.928775
C 6.042085 1.436597 9.808026
C 5.356393 2.072771 10.828394
H 5.480458 3.004345 10.964634
C 4.961683 -0.609956 10.439683
H 4.828280 -1.540659 10.305248
C 4.497564 1.376449 11.645730
H 4.052218 1.824894 12.354782
C 4.285760 0.041640 11.442698
H 3.673172 -0.433662 11.992655
Se 12.778451 0.683135 11.346214
N 11.107995 3.233306 6.816335
C 11.241889 1.937053 6.495301
H 10.913111 1.285611 7.102837
N 11.678343 2.834637 9.707378
C 11.829460 1.506768 5.337843
H 11.899931 0.578672 5.147513
S 11.572992 5.949731 8.076177
C 11.476211 5.593704 6.302681
H 10.611543 5.929319 5.960094
H 12.196164 6.093329 5.841520
C 11.601051 4.137059 5.950411
C 12.316465 2.436739 4.459771
H 12.720797 2.164819 3.644275
C 12.209367 3.765379 4.772129
H 12.550976 4.425404 4.181929
C 13.318523 5.517364 8.407624
H 13.447031 4.547210 8.256095
H 13.524415 5.705062 9.358197
C 12.120197 1.988718 10.335564
C 14.468578 7.624063 7.730849
H 14.006687 8.080266 8.424421
C 14.264191 6.274603 7.545170
C 14.949883 5.638429 6.524802
H 14.825818 4.706855 6.388562
C 15.344593 8.321156 6.913513
H 15.477996 9.251859 7.047949
C 15.808712 6.334751 5.707466
H 16.254058 5.886306 4.998415
C 16.020516 7.669560 5.910499
H 16.633104 8.144862 5.360541

Custom ligands with charges

Hi,
It is a pretty powerful package and I'm happy to find and use it!
When I followed tutorial 10: Adding ligands to molSimplify and would like to add a ligand with -1 charge. But I figure out that I don't have the option.
In source code addtodb.py, when we add a ligand:
sminame+':'+sminame+'.smi,'+shortname+','+css+','+grp+','+ffopt
this line would be added to ligands.dict without charge information. Is it possible to add an input option for charge or identify charge automatically from input files?
Many thanks!
Jocelyn

Code quality

(This serves mostly as a reminder to myself for the next hackathon)

Running a code linter (flake8) on the main source folder shows many more potential bugs such as the one reported in Issue #47. While the most common errors (Line too long, Missing whitespace, etc.) might not be a problem, others such as F821 (undefined variable) show parts of the code that will most likely not execute and are hard to fix without knowing the intention of the original author.

Summary:

4540 E501    Line too long (82 > 79 characters)
2119 E231    Missing whitespace after ',', ';', or ':'
 765 E266    Too many leading '#' for block comment
 462 W291    Trailing whitespace
 378 E225    Missing whitespace around operator
 366 W293    Blank line contains whitespace
 276 E261    At least two spaces before inline comment
 269 E265    Block comment should start with '# '
 251 F841    local variable name is assigned to but never used
 244 E302    Expected 2 blank lines, found 0
 244 F405    name may be undefined, or defined from star imports: module
 116 E251    Unexpected spaces around keyword / parameter equals
 103 E228    Missing whitespace around modulo operator
 102 E722    Do not use bare except, specify exception instead
  96 F401    module imported but unused
  88 E127    Continuation line over-indented for visual indent
  83 E128    Continuation line under-indented for visual indent
  73 E262    Inline comment should start with '# '
  68 E741    Do not use variables named 'I', 'O', or 'l'
  64 E203    Whitespace before ':'
  54 E114    Indentation is not a multiple of four (comment)
  51 E711    Comparison to None should be 'cond is None:'
  49 E713    Test for membership should be 'not in'
  48 F821    undefined name name
  32 E111    Indentation is not a multiple of four
  32 E222    Multiple spaces after operator
  30 E117    Over-indented
  25 F403    ‘from module import *’ used; unable to detect undefined names
  24 E712    Comparison to true should be 'if cond is true:' or 'if cond:'
  24 E271    Multiple spaces after keyword
  19 E303    Too many blank lines (3)
  14 E202    Whitespace before ')'
  13 E221    Multiple spaces before operator
  12 W605    Invalid escape sequence 'x'
  12 W391    Blank line at end of file
  10 W292    No newline at end of file
  10 E502    The backslash is redundant between brackets
   9 F811    redefinition of unused name from line N
   9 E115    Expected an indented block (comment)
   8 E122    Continuation line missing indentation or outdented
   6 E201    Whitespace after '('
   4 E227    Missing whitespace around bitwise or shift operator
   4 E125    Continuation line with same indent as next logical line
   4 E305    Expected 2 blank lines after end of function or class
   3 E306    Expected 1 blank line before a nested definition
   2 E124    Closing bracket does not match visual indentation
   2 E129    Visually indented line with same indent as next logical line
   2 F632    use ==/!= to compare str, bytes, and int literals
   2 F402    import module from line N shadowed by loop variable
   2 E401    Multiple imports on one line
   1 W191    Indentation contains tabs
   1 E211    Whitespace before '('
   1 E101    Indentation contains mixed spaces and tabs
   1 E731    Do not assign a lambda expression, use a def
   1 E131    Continuation line unaligned for hanging indent
   1 E703    Statement ends with a semicolon
   1 E272    Multiple spaces before keyword
   1 E116    Unexpected indentation (comment)
   1 E999    SyntaxError

Broken test/helperFuncs.py

The merge in 79b8b1e introduced some problematic typos into the test suite. The functions compareNumAtoms(xyz1, xyz2) and compareMLBL(xyz1, xyz2) actually do not compare the two geometries. Instead they just compare xyz1 to itself. Correcting this typo results in several failed tests hinting at either bad tests or some bugs in structgen.

Flake8 E502

Task: fix these two instances of E502
The backslash here is redundant and makes the code "more difficult to read"

> flake8 molSimplify --select=E502 --show-source 
molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py:461:58: E502 the backslash is redundant between brackets
                linker_cart_coords=np.array([at.coords() \
                        for at in [molcif.getAtom(val) for val in atoms_list]])
                                                         ^
molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py:468:55: E502 the backslash is redundant between brackets
                sbu_cart_coords=np.array([at.coords() \
                       for at in [molcif.getAtom(val) for val in sbu_temp]])
                                                      ^

examples

git should come with an example directory that contains representative input files for each feature. there is some of this buried in Docs/Userguide/example-files but it is probably out of date and should be at the root level.

Flake8 E713

Task: Fix the 5 occurrences of E713:
Using x not in list is faster and more readable than not x in list. (It is faster because we do not need to check all items in the case that the list actually contains x)

> flake8 molSimplify --select=E712 --show-source
molSimplify/Informatics/MOF/PBC_functions.py:1042:28: E712 comparison to False should be 'if cond is not False:' or 'if cond:'
        if occupancy_index != False: # This means that occupancy information is available
                           ^
(molsimp) ralf@Ralfs-MacBook-Pro molSimplify % flake8 molSimplify --select=E713 --show-source
molSimplify/Informatics/MOF/cluster_extraction.py:86:24: E713 test for membership should be 'not in'
                    if not jj in link_list:
                       ^
molSimplify/Informatics/MOF/MOF_descriptors_alternate_functional.py:143:24: E713 test for membership should be 'not in'
                    if not jj in main:
                       ^
molSimplify/Informatics/MOF/MOF_descriptors.py:236:24: E713 test for membership should be 'not in'
                    if not jj in link_list: # linker atom is not bonded to a metal
                       ^
molSimplify/Informatics/MOF/MOF_descriptors_alternate_functional_2.py:142:28: E713 test for membership should be 'not in'
                        if not jj in link_list:
                           ^
molSimplify/Informatics/MOF/PBC_functions.py:936:21: E713 test for membership should be 'not in'
                if (not val in SBUlist):
                    ^

RMSD function

The whole rmsd.py file is based on the implementation in the pypi package of the same name. Clorice noticed that the reordering of atoms using the Hungarian method yields unexpected results (larger RMSDs than before reordering). As far as I can tell the main reason is that the Hungarian algorithm is solely based on Cartesian distances of atoms without first aligning the two molecules. A possible solution might center and align the molecules using their principal axes of inertia first.

Setup of data directory

Jacob discovered that when first setting up the location of the database folder for molSimplify, e.g. by following tutorial 3 or 10, wrong formatting of the path variable might result in deleting all the "data" folders in the molSimplify directory.

Flake8 E712

Task: Fix the occurance of E712
Instead of if occupancy_index != False: we could use the more readable if occupancy_index:

> flake8 molSimplify --select=E712 --show-source
molSimplify/Informatics/MOF/PBC_functions.py:1042:28: E712 comparison to False should be 'if cond is not False:' or 'if cond:'
        if occupancy_index != False: # This means that occupancy information is available
                           ^

Python 3 Compatibility

As Python 2.7 is planed to retire by 2020, is there any plan to make it Python 3 compatible?

NameError: global name 'ligloc' is not defined

I'm having some problems with molsimplify's cli. I followed the installation instructions of the user guide:

conda create -n mols2 python=2.7
conda activate mols2
conda install -c hjkgroup molSimplify
conda install -c dsdale24 pyqt5

After which I ran

molsimplify -core Fe -lig water -ligocc

Which gives

No input file detected, reading arguments from commandline
molSimplify is starting!

************************************************************
******** Welcome to molSimplify! Let's get started. ********
************************************************************


Checking input...
WARNING: No oxidation state specified. Defaulting to 2
WARNING: No spin multiplicity specified. Defaulting to 5
Please check this against our ANN output (where available)
Traceback (most recent call last):
  File "/home/markus/anaconda3/envs/mols2/bin/molsimplify", line 11, in <module>
    load_entry_point('molSimplify==1.2.7a0', 'console_scripts', 'molsimplify')()
  File "/home/markus/anaconda3/envs/mols2/lib/python2.7/site-packages/molSimplify/__main__.py", line 161, in main
    emsg = startgen(args,False,gui)
  File "/home/markus/anaconda3/envs/mols2/lib/python2.7/site-packages/molSimplify/Scripts/generator.py", line 106, in startgen
    emsg = checkinput(args)
  File "/home/markus/anaconda3/envs/mols2/lib/python2.7/site-packages/molSimplify/Scripts/inparse.py", line 92, in checkinput
    if ligloc:
NameError: global name 'ligloc' is not defined

CentOS on docker

I have mol simplify installed in Docker's cent8 environment with the aim of using it with terachem. However, even if I start the molsimplify command, a core dump occurs. How is it used in combination with terateam?

import openbabel" is deprecated

I'm not sure if this has been corrected for the next release, but I couldn't find an issue for it.

The method for import the openbabel method has changed and I get this error upon running molSimplify.

warnings.warn('"import openbabel" is deprecated, instead use "from openbabel import openbabel"')

Tetrahedral / tetradentate ligands

From mail to HJK:

I am an experimental chemist working at ETH, and I am interested in Molsimplify to speed-up the computational part of my work, and specifically get insights as described in Tutorial #12.
I have requested Molsimplify to be installed on our cluster and tried generating a few complexes. While I found no problem generating the structures from the tutorial and, in general, octahedral structures, I faced specific problems for tetrahedral complexes with custom ligands. I have tried several commands from the trutorial, but whatever I do, the tetradentate ligand always coordinates in a monodentate fashion to the metals that I choose. For example, for the ligand attached, the following command does not lead to the desired tetrahedral complex:
molsimplify -lig pdp.mol -ligocc 1 -ligcon 1,4,7,12 -skipANN True -core co -geo thd
I would be very grateful for any recommendations or insight regarding the generation of tetrahedral complexes.

The main issue here is that -ligcon is not a valid way of specifying the connecting ligands. Resolving this issue in an email exchange has highlighted the following problems:

  • defining connecting atoms for ligands loaded from files is currently not supported, i.e. -smicat does not work.
  • the fact that the path for a custom data dir has to be provided in quotation marks is poorly documented and confusing to people.

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.