1#!/usr/bin/python3
2# This script downloads the basis set library data from www.basissetexchange.org
3# into the directory $NWCHEM_TOP/src/basis/libraries.bse
4# to use, set the env. variable NWCHEM_BASIS_LIBRARY=$NWCHEM_TOP/src/basis/libraries.bse/
5# Requires the installation of the python env. from
6# https://github.com/MolSSI-BSE/basis_set_exchange
7# See https://molssi-bse.github.io/basis_set_exchange/
8#
9# names changed
10# def2-universal-jfit was weigend_coulomb_fitting
11# dgauss-a1-dftjfit   was dgauss_a1_dft_coulomb_fitting
12# dgauss-a2-dftjfit   was dgauss_a2_dft_coulomb_fitting
13#
14import basis_set_exchange as bse
15from datetime import datetime
16today = datetime.now().isoformat(timespec='minutes')
17print(today)
18all_bs = bse.get_all_basis_names()
19md = bse.get_metadata()
20for bas_name in all_bs:
21    #get version and list of elements
22    version_bs = md[bas_name]['latest_version']
23    elements_list = md[bas_name]['versions'][version_bs]['elements']
24    #open file
25    # get rid of asterisks
26    file_name = bas_name.replace("*","s")
27    #get rid of parenthesis
28    file_name = file_name.replace("(","")
29    file_name = file_name.replace(")","")
30    #replace commas with underscore
31    file_name = file_name.replace(",","_")
32    #replace whitespace with underscore
33    file_name = file_name.replace(" ","_")
34    #replace forward slash with underscore
35    file_name = file_name.replace("/","_")
36    print(' file name is '+file_name+"\n")
37    output_file = open(file_name,'w')
38    output_file.write('# BSE Version '+bse.version()+'\n')
39    output_file.write('# Data downloaded at '+today+'\n')
40    output_file.write('# '+bas_name+' version number '+version_bs+'\n')
41    output_file.write('# Description: '+md[bas_name]['description']+'\n')
42    output_file.write('# Role: '+md[bas_name]['role']+'\n')
43    output_file.write('# '+bse.get_references(bas_name,fmt='txt').replace('\n','\n# '))
44    output_file.write('# \n')
45    for element in elements_list:
46        #element='h'
47        try:
48            bs_str=bse.get_basis(bas_name, header=False, elements=element, fmt='nwchem', optimize_general=True, uncontract_general=True)
49        except:
50#            print("failed for"+element)
51            pass
52        else:
53            bs_str=bs_str.replace("BASIS","basis")
54            bs_str=bs_str.replace("END","end")
55            bs_str=bs_str.replace("PRINT","")
56            element_str=bse.misc.compact_elements([element])
57            bs_str=bs_str.replace("ao basis",element_str+"_"+bas_name)
58            #ECP
59            bs_str=bs_str.replace("ECP","ecp \""+element_str+"_"+bas_name+"\"")
60            output_file.write(bs_str)
61            #
62            print(bas_name+" "+element_str)
63print("end")
64
65