Skip to content

Commit 5a4d6d0

Browse files
committed
Update CLI scripts to use logging_utils.
1 parent 019cba7 commit 5a4d6d0

File tree

9 files changed

+143
-172
lines changed

9 files changed

+143
-172
lines changed

ppafm/GUIWidgets.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,10 @@ class FigImshow(FigCanvas):
122122

123123
cbar = None
124124

125-
def __init__(self, parentWiget=None, parentApp=None, width=5, height=4, dpi=100, verbose=0):
125+
def __init__(self, parentWiget=None, parentApp=None, width=5, height=4, dpi=100):
126126
super(self.__class__, self).__init__(parentWiget=parentWiget, parentApp=parentApp, width=width, height=height, dpi=dpi)
127127
self.fig.canvas.mpl_connect("button_press_event", self.onclick)
128128
self.fig.canvas.mpl_connect("scroll_event", self.onscroll)
129-
self.verbose = verbose
130129
self.img = None
131130
self.cbar = None
132131

@@ -509,9 +508,8 @@ def updateParent(self):
509508

510509

511510
class FFViewer(SlaveWindow):
512-
def __init__(self, parent=None, title="View Forcefield", width=5, height=4, dpi=100, verbose=0):
511+
def __init__(self, parent=None, title="View Forcefield", width=5, height=4, dpi=100):
513512
super().__init__(parent=parent, title=title)
514-
self.verbose = verbose
515513

516514
self.figCan = FigImshow(parent, width=width, height=height, dpi=dpi)
517515
self.centralLayout.addWidget(self.figCan)

ppafm/cli/conv_rho.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
#!/usr/bin/python
22
import gc
3+
import sys
34

45
import numpy as np
56

67
from .. import common, fieldFFT, io
8+
from ..logging_utils import get_logger
9+
10+
logger = get_logger("conv_rho")
711

812

913
def handle_aeccar(fname, lvec, rho):
@@ -35,21 +39,23 @@ def main(argv=None):
3539

3640
args = parser.parse_args(argv)
3741

38-
print(">>> Loading sample from ", args.sample, " ... ")
42+
logger.info(f"Loading sample from {args.sample}")
3943
rho_sample, lvec_sample, n_dim_sample, head_sample = io.loadXSF(args.sample)
40-
print(">>> Loading tip from ", args.tip, " ... ")
44+
logger.info(f"Loading tip from {args.tip}")
4145
rho_tip, lvec_tip, n_dim_tip, head_tip = io.loadXSF(args.tip)
4246

4347
if np.any(n_dim_sample != n_dim_tip):
44-
raise Exception("Tip and Sample grids have different dimensions! - sample: " + str(n_dim_sample) + " tip: " + str(n_dim_tip))
48+
logger.error(f"Tip and Sample grids have different dimensions! - sample: {n_dim_sample} tip: {n_dim_tip}")
49+
sys.exit(1)
4550
if np.any(lvec_sample != lvec_tip):
46-
raise Exception("Tip and Sample grids have different shapes! - sample: " + str(lvec_sample) + " tip: " + str(lvec_tip))
51+
logger.error(f"Tip and Sample grids have different shapes! - sample: {lvec_sample} tip: {lvec_tip}")
52+
sys.exit(1)
4753

4854
handle_aeccar(args.sample, lvec_sample, rho_sample)
4955
handle_aeccar(args.tip, lvec_tip, rho_tip)
5056

5157
if args.Bpauli > 0.0:
52-
print(">>> computing rho^B where B = ", args.Bpauli)
58+
logger.info(f"Computing rho^B where B = {args.Bpauli}")
5359
# NOTE: due to round-off error the density from DFT code is often negative in some voxels which produce NaNs after exponentiation; we need to correct this
5460
if not args.no_negative_check:
5561
handle_negative_density(rho_sample)
@@ -61,15 +67,15 @@ def main(argv=None):
6167
io.save_scal_field("tip_density_pow_%03.3f.xsf" % args.Bpauli, rho_tip, lvec_tip, data_format=args.output_format, head=head_tip)
6268

6369
if args.density_cutoff:
64-
print(f">>> Applying a density cutoff of {args.density_cutoff} to sample and tip electron densities.")
70+
logger.info(f"Applying a density cutoff of {args.density_cutoff} to sample and tip electron densities.")
6571
rho_sample[rho_sample > args.density_cutoff] = args.density_cutoff
6672
rho_tip[rho_tip > args.density_cutoff] = args.density_cutoff
6773

68-
print(">>> Evaluating convolution E(R) = A*Integral_r ( rho_tip^B(r-R) * rho_sample^B(r) ) using FFT ... ")
74+
logger.info("Evaluating convolution E(R) = A*Integral_r ( rho_tip^B(r-R) * rho_sample^B(r) ) using FFT ... ")
6975
f_x, f_y, f_z, energy = fieldFFT.potential2forces_mem(rho_sample, lvec_sample, n_dim_sample, rho=rho_tip, doForce=True, doPot=True, deleteV=True)
7076

7177
namestr = args.output
72-
print(">>> Saving result of convolution to FF_", namestr, "_?.xsf ... ")
78+
logger.info(f">>> Saving result of convolution to FF_{namestr}_?.xsf ... ")
7379

7480
# Density Overlap Model
7581
if args.energy:

ppafm/cli/generateDFTD3.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
from .. import common
99
from ..HighLevel import computeDFTD3
10+
from ..logging_utils import get_logger
11+
12+
logger = get_logger("generateDFTD3")
1013

1114

1215
def main(argv=None):
@@ -45,7 +48,7 @@ def main(argv=None):
4548
df_params = {"s6": p[0], "s8": p[1], "a1": p[2], "a2": p[3]}
4649
else:
4750
if args.df_name not in d3.DF_DEFAULT_PARAMS:
48-
print(f"Unknown functional name `{args.df_name}`!")
51+
logger.error(f"Unknown functional name `{args.df_name}`!")
4952
sys.exit(1)
5053
df_params = args.df_name
5154

ppafm/cli/generateElFF.py

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
loadValenceElectronDict,
1313
subtractCoreDensities,
1414
)
15+
from ..logging_utils import get_logger
16+
17+
logger = get_logger("generateElFF")
1518

1619

1720
def main(argv=None):
@@ -43,7 +46,8 @@ def main(argv=None):
4346
subtract_core_densities = (args.doDensity) and (args.Rcore > 0.0) and (args.tip_dens is not None)
4447
if subtract_core_densities: # We do it here, in case it crash we don't want to wait for all the huge density files to load
4548
if args.tip_dens is None:
46-
raise Exception("Rcore>0 but no tip density provided!")
49+
logger.error("Rcore>0 but no tip density provided!")
50+
sys.exit(1)
4751
valence_electrons_dictionary = loadValenceElectronDict()
4852
rs_tip, elems_tip = getAtomsWhichTouchPBCcell(args.tip_dens, Rcut=args.Rcore, parameters=parameters)
4953

@@ -66,43 +70,42 @@ def main(argv=None):
6670

6771
if args.tip_dens is not None:
6872
# No need to renormalize: fieldFFT already works with density
69-
print(">>> Loading tip density from ", args.tip_dens, "...")
73+
logger.info(f">>> Loading tip density from {args.tip_dens}")
7074
if args.tip_dens.lower().endswith("xsf"):
7175
rho_tip, lvec_tip, _, head_tip = io.loadXSF(args.tip_dens)
7276
else:
73-
print(f'ERROR!!! Unknown or unsupported format of the tip density file "{args.tip_dens}"\n', file=sys.stderr)
77+
logger.error(f'Unknown or unsupported format of the tip density file "{args.tip_dens}"\n')
7478
sys.exit(1)
7579
if subtract_core_densities:
76-
print(">>> subtracting core densities from rho_tip ... ")
80+
logger.info(">>> subtracting core densities from rho_tip ... ")
7781
subtractCoreDensities(rho_tip, lvec_tip, elems=elems_tip, Rs=rs_tip, valElDict=valence_electrons_dictionary, Rcore=args.Rcore, head=head_tip)
7882

7983
parameters.tip = -rho_tip # Negative sign, because the electron density needs to be negative but the input density is positive
8084

8185
if args.KPFM_sample is not None:
8286
sigma = parameters.sigma
83-
print(parameters.sigma)
87+
logger.debug(f"{parameters.sigma}")
8488
if input_format == "xsf" and args.KPFM_sample.lower().endswith(".xsf"):
8589
v_ref_s = args.Vref
86-
print(">>> Loading Hartree potential under bias from ", args.KPFM_sample, "...")
87-
print("Use loadXSF")
90+
logger.info(f">>> Loading Hartree potential under bias from {args.KPFM_sample}")
91+
logger.debug("Use loadXSF")
8892
v_kpfm, lvec, n_dim, head = io.loadXSF(args.KPFM_sample)
8993

9094
elif input_format == "cube" and args.KPFM_sample.lower().endswith(".cube"):
9195
v_ref_s = args.Vref
92-
print(">>> Loading Hartree potential under bias from ", args.KPFM_sample, "...")
93-
print("Use loadCUBE")
96+
logger.info(f">>> Loading Hartree potential under bias from {args.KPFM_sample}")
97+
logger.debug("Use loadCUBE")
9498
v_kpfm, lvec, n_dim, head = io.loadCUBE(args.KPFM_sample)
9599

96100
else:
97-
print(
98-
f'ERROR!!! Format of the "{args.KPFM_sample}" file with Hartree potential under bias is unknown or incompatible with the main input format, which is "{input_format}".\n',
99-
file=sys.stderr,
101+
logger.error(
102+
f'Format of the "{args.KPFM_sample}" file with Hartree potential under bias is unknown or incompatible with the main input format, which is "{input_format}".\n'
100103
)
101104
sys.exit(1)
102105
v_kpfm *= -1 # Unit conversion, energy to potential (eV -> V)
103106
dv_kpfm = v_kpfm - electrostatic_potential
104107

105-
print(">>> Loading tip density under bias from ", args.KPFM_tip, "...")
108+
logger.info(f">>> Loading tip density under bias from {args.KPFM_tip}")
106109
if input_format == "xsf" and args.KPFM_tip.lower().endswith(".xsf"):
107110
v_ref_t = args.Vref
108111
rho_tip_kpfm, lvec_tip, _, head_tip = io.loadXSF(args.KPFM_tip)
@@ -118,28 +121,23 @@ def main(argv=None):
118121
if parameters.probeType == "8":
119122
drho_kpfm = {"pz": 0.045}
120123
sigma = 0.48
121-
print(" Select CO-tip polarization ")
124+
logger.debug("Select CO-tip polarization ")
122125
if parameters.probeType == "47":
123126
drho_kpfm = {"pz": 0.21875}
124127
sigma = 0.7
125-
print(" Select Ag polarization with decay sigma", sigma)
128+
logger.debug(f"Select Ag polarization with decay sigma {sigma}")
126129
if parameters.probeType == "54":
127130
drho_kpfm = {"pz": 0.250}
128131
sigma = 0.67
129-
print(" Select Xe-tip polarization")
132+
logger.debug("Select Xe-tip polarization")
130133
else:
131-
raise ValueError(
132-
'ERROR!!! Neither is "'
133-
+ args.KPFM_sample
134-
+ '" a density file with an appropriate ("'
135-
+ input_format
136-
+ '") format\nnor is it a valid name of a tip polarizability model.\n'
137-
)
134+
logger.error(f'Neither is "{args.KPFM_sample}" a density file with an appropriate ("{input_format}") format nor is it a valid name of a tip polarizability model.')
135+
sys.exit(1)
138136

139137
ff_kpfm_t0sv, _ = computeElFF(dv_kpfm, lvec, n_dim, parameters.tip, computeVpot=args.energy, tilt=args.tilt, parameters=parameters)
140138
ff_kpfm_tvs0, _ = computeElFF(electrostatic_potential, lvec, n_dim, drho_kpfm, computeVpot=args.energy, tilt=args.tilt, sigma=sigma, deleteV=False, parameters=parameters)
141139

142-
print("Linear E to V")
140+
logger.debug("Linear E to V")
143141
zpos = np.linspace(lvec[0, 2] - args.z0, lvec[0, 2] + lvec[3, 2] - args.z0, n_dim[0])
144142
for i in range(n_dim[0]):
145143
# z position of the KPFM tip with respect to the sample must not be zero or negative
@@ -149,14 +147,14 @@ def main(argv=None):
149147
ff_kpfm_t0sv[i, :, :] = ff_kpfm_t0sv[i, :, :] / ((v_ref_s) * (zpos[i] + 0.1))
150148
ff_kpfm_tvs0[i, :, :] = ff_kpfm_tvs0[i, :, :] / ((v_ref_t) * (zpos[i] + 0.1))
151149

152-
print(">>> Saving electrostatic forcefield ... ")
150+
logger.info(">>> Saving electrostatic forcefield")
153151
io.save_vec_field("FFkpfm_t0sV", ff_kpfm_t0sv, lvec_samp, data_format=args.output_format, head=head_samp)
154152
io.save_vec_field("FFkpfm_tVs0", ff_kpfm_tvs0, lvec_samp, data_format=args.output_format, head=head_samp)
155153

156-
print(">>> Calculating electrostatic forcefield with FFT convolution as Eel(R) = Integral( rho_tip(r-R) V_sample(r) ) ... ")
154+
logger.info(">>> Calculating electrostatic forcefield with FFT convolution as Eel(R) = Integral( rho_tip(r-R) V_sample(r) )")
157155
ff_electrostatic, e_electrostatic = computeElFF(electrostatic_potential, lvec, n_dim, parameters.tip, computeVpot=args.energy, tilt=args.tilt, parameters=parameters)
158156

159-
print(">>> Saving electrostatic forcefield ... ")
157+
logger.info(">>> Saving electrostatic forcefield")
160158

161159
io.save_vec_field("FFel", ff_electrostatic, lvec_samp, data_format=args.output_format, head=head_samp, atomic_info=(atoms_samp[:4], lvec_samp))
162160
if args.energy:

ppafm/cli/generateTraining_PVE.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
from .. import common, core
1212
from ..HighLevel import prepareArrays, relaxedScan3D
13+
from ..logging_utils import get_logger
14+
15+
logger = get_logger("generateTraining_PVE")
1316

1417
file_format = "xsf"
1518

1619
parameters = common.PpafmParameters.from_file("params.ini")
1720

1821
if os.path.isfile("atomtypes.ini"):
19-
print(">> LOADING LOCAL atomtypes.ini")
22+
logger.info(">> LOADING LOCAL atomtypes.ini")
2023
ff_params = common.loadSpecies("atomtypes.ini")
2124
else:
2225
ff_params = common.loadSpecies(cpp_utils.PACKAGE_PATH / "defaults" / "atomtypes.ini")
@@ -32,11 +35,11 @@
3235
parameters.gridA = lvec_t[1]
3336
parameters.gridB = lvec_t[2]
3437
parameters.gridC = lvec_t[3] # must be before parseAtoms
35-
print(parameters.gridN, parameters.gridA, parameters.gridB, parameters.gridC)
38+
logger.debug(parameters.gridN, parameters.gridA, parameters.gridB, parameters.gridC)
3639

3740
force_field, _ = prepareArrays(None, False)
3841

39-
print("FFLJ.shape", force_field.shape)
42+
logger.debug("FFLJ.shape", force_field.shape)
4043
core.setFF_shape(np.shape(force_field), lvec_t, parameters=parameters)
4144

4245
base_dir = os.getcwd()
@@ -54,7 +57,6 @@
5457

5558
force_field[:, :, :, :] = 0
5659
lj_coefficients = common.getAtomsLJ(pp_indexes, izs, ff_params)
57-
# print "cLJs",cLJs; np.savetxt("cLJs_3D.dat", cLJs); exit()
5860
core.getVdWFF(rs, lj_coefficients) # THE MAIN STUFF HERE
5961

6062
# Generate Pauli force field.

0 commit comments

Comments
 (0)