#!/usr/bin/env python2 """ Automatically finds n, the number of core electrons. Calls qp_set_mo_class setting all MOs as Active, except the n/2 first ones which are set as Core. If pseudo-potentials are used, all the MOs are set as Active. For elements on the right of the periodic table, qp_set_frozen_core will work as expected. But for elements on the left, a small core will be chosen. For example, a Carbon atom will have 2 core electrons, but a Lithium atom will have zero. Usage: qp_set_frozen_core [-q|--query] EZFIO_DIR Options: -q --query Prints in the standard output the number of frozen MOs """ import os import sys import os.path try: import qp_path except ImportError: print "source .quantum_package.rc" raise from docopt import docopt from ezfio import ezfio def main(arguments): """Main function""" filename = arguments["EZFIO_DIR"] ezfio.set_filename(filename) n_frozen = 0 try: do_pseudo = ezfio.pseudo_do_pseudo except: do_pseudo = False if not do_pseudo: for charge in ezfio.nuclei_nucl_charge: if charge < 5: pass elif charge < 13: n_frozen += 1 elif charge < 31: n_frozen += 5 else: n_frozen += 9 mo_num = ezfio.mo_basis_mo_num if arguments["--query"]: print n_frozen sys.exit(0) if n_frozen == 0: os.system("""qp_set_mo_class -a "[1-%d]" %s""" % (mo_num, sys.argv[1])) else: os.system("""qp_set_mo_class -c "[1-%d]" -a "[%d-%d]" %s""" % (n_frozen, n_frozen+1, mo_num, sys.argv[1])) if __name__ == '__main__': ARGUMENTS = docopt(__doc__) main(ARGUMENTS)