#!/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. 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 <= 2: pass elif charge <= 10: n_frozen += 1 elif charge <= 18: n_frozen += 5 elif charge <= 36: n_frozen += 9 elif charge <= 54: n_frozen += 18 elif charge <= 86: n_frozen += 27 elif charge <= 118: n_frozen += 43 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)