Changed return values of Looper.run

Instead of returning a panda dataframe, return both a list
of [x0, y0, x1, y1,...] values for all the calculations and the
corresponding dict of parameters
This commit is contained in:
Sylvain Tricot 2021-07-20 16:45:37 +02:00
parent c2b9e9a572
commit 3743cb8d17
4 changed files with 64 additions and 13 deletions

View File

@ -747,15 +747,30 @@ class _PED(_MSCALCULATOR):
proto_index = i+1 proto_index = i+1
title = 'Scattering factor at {:.3f} eV'.format(kinetic_energy) title = 'Scattering factor at {:.3f} eV'.format(kinetic_energy)
mini = min(map(np.min, [dset.sf_real, dset.sf_imag, dset.sf_module]))
maxi = max(map(np.max, [dset.sf_real, dset.sf_imag, dset.sf_module]))
view = dset.add_view("Proto. atom #{:d}".format(proto_index), view = dset.add_view("Proto. atom #{:d}".format(proto_index),
title=title, projection='polar') title=title, projection='polar',
ylim=[mini, maxi])
where = "proto_index=={:d}".format(proto_index) where = "proto_index=={:d}".format(proto_index)
view.select('theta', 'sf_module', where=where, view.select('theta', 'sf_module', where=where,
legend=r'$|f(\theta)|$') legend=r'$|f(\theta)|$')
view.select('theta', 'sf_real', where=where, view.select('theta', 'sf_real', where=where,
legend=r'$\Im(f(\theta))$')
view.select('theta', 'sf_imag', where=where,
legend=r'$\Re(f(\theta))$') legend=r'$\Re(f(\theta))$')
view.select('theta', 'sf_imag', where=where,
legend=r'$\Im(f(\theta))$')
if scan_type == 'energy':
absorber_symbol = self.atoms[self.atoms.absorber].symbol
title = (r'Energy scan of {}({}) at $\theta$={:.2f}$\degree$ and '
'$\phi$={:.2f}$\degree$').format(
absorber_symbol, level, theta, phi)
xlabel = r'Photoelectron kinetic energy (eV)'
ylabel = r'Signal (a. u.)'
view = dset.add_view("EnergyScan".format(ke), title=title,
xlabel=xlabel, ylabel=ylabel)
view.select('energy', 'cross_section')
# save the cluster # save the cluster
#clusbuf = StringIO() #clusbuf = StringIO()
@ -922,6 +937,27 @@ class _PED(_MSCALCULATOR):
malloc={'NPH_M': 8000}) malloc={'NPH_M': 8000})
return data return data
def get_energy_scan(self, phi=0, theta=0,
level=None, kinetic_energy=None, data=None):
"""Computes an energy scan of the emitted photoelectrons.
:param phi: All the values of the azimuthal angle to be computed. See
:ref:`scanparameters-phi`.
:param theta: The polar angle in degrees. See
:ref:`scanparameters-theta`.
:param level: The electronic level. See :ref:`pedparameters-level`.
:param kinetic_energy: see :ref:`scanparameters-kinetic_energy`.
:param data: a :py:class:`iodata.Data` object to append the results to
or None.
:returns: The modified :py:class:`iodata.Data` object passed as an
argument or a new :py:class:`iodata.Data` object.
"""
data = self._get_scan(scan_type='energy', level=level, theta=theta,
phi=phi, kinetic_energy=kinetic_energy, data=data)
return data
class _EIG(_MSCALCULATOR): class _EIG(_MSCALCULATOR):
""" """

View File

@ -236,7 +236,22 @@ class Looper:
df = pd.DataFrame(dfdata, columns=columns) df = pd.DataFrame(dfdata, columns=columns)
self.data = df self.data = df
return df
#return df
# return a list of [x0, y0, x1, y1,...xn, yn] and a list
# of corresponding dict of parameters {'keyA': [val0,...valn],
# 'keyB': [val0,...valn], ...}
all_xy = []
for irow, row in df.iterrows():
all_xy.append(row.output[0])
all_xy.append(row.output[1])
parameters = df.to_dict()
parameters.pop('output')
return all_xy, parameters
@ -282,7 +297,7 @@ if __name__ == "__main__":
looper = Looper() looper = Looper()
looper.pipeline = bar looper.pipeline = bar
data = looper.run(emitter, emitter_plane, uij, theta, levels, ncpu=1, data = looper.run(emitter, emitter_plane, uij, theta, levels, ncpu=4,
passindex=True) passindex=True)
print(data)
print(data[data.emitter_plane.eq(0)].theta.unique()) #print(data[data.emitter_plane.eq(0)].theta.unique())

View File

@ -853,8 +853,8 @@ class MuffintinParameters(BaseParameters):
def __init__(self, phagen_parameters, spec_parameters): def __init__(self, phagen_parameters, spec_parameters):
parameters = ( parameters = (
Parameter('charge_relaxation', types=bool, default=True, doc=""" Parameter('charge_relaxation', types=bool, default=True, doc="""
Used to specify wether the charge density of the photoabsorbing atom, which is used Used to specify whether the charge density of the photoabsorbing atom, which is used
to construct the potential, is allowaed to relax around the core hole or not. to construct the potential, is allowed to relax around the core hole or not.
"""), """),
Parameter('ionicity', types=dict, default={}, doc=""" Parameter('ionicity', types=dict, default={}, doc="""
A dictionary to specify the ionicity of each kind of atoms. If empty, the atoms are considered to be A dictionary to specify the ionicity of each kind of atoms. If empty, the atoms are considered to be

View File

@ -113,7 +113,7 @@ C
CST PROGRAM COMP_CURVE CST PROGRAM COMP_CURVE
SUBROUTINE COMP_CURVES() SUBROUTINE COMP_CURVES()
C C
PARAMETER (N_SIZE=1000,N_FILES=100,NMAX=9999) PARAMETER (N_SIZE=1000,N_FILES=1000,NMAX=9999)
C C
INTEGER CC_EXP(N_SIZE),CC_CAL(N_SIZE),VALUE,NVALUE INTEGER CC_EXP(N_SIZE),CC_CAL(N_SIZE),VALUE,NVALUE
C C
@ -1634,7 +1634,7 @@ C Author : D. Sébilleau
C C
C Last modified : 9 Sep 2014 C Last modified : 9 Sep 2014
C C
PARAMETER (N_SIZE=1000,N_FILES=100) PARAMETER (N_SIZE=1000,N_FILES=1000)
C C
REAL*4 X_CAL(N_SIZE),I_CAL,X,Y REAL*4 X_CAL(N_SIZE),I_CAL,X,Y
REAL*4 DIFF,STEP1,STEP2 REAL*4 DIFF,STEP1,STEP2
@ -2955,7 +2955,7 @@ C Author : D. Sébilleau
C C
C Last modified : 5 Sep 2014 C Last modified : 5 Sep 2014
C C
PARAMETER (N_SIZE=1000,N_FILES=100) PARAMETER (N_SIZE=1000,N_FILES=1000)
C C
REAL*4 EXPE(N_SIZE),CALCULATION(N_SIZE,N_FILES) REAL*4 EXPE(N_SIZE),CALCULATION(N_SIZE,N_FILES)
REAL*4 MIN_EXP,MIN_CAL,MINIMUM,SHIFT REAL*4 MIN_EXP,MIN_CAL,MINIMUM,SHIFT
@ -9748,7 +9748,7 @@ C Author : D. Sébilleau
C C
C Last modified : 19 Aug 2014 C Last modified : 19 Aug 2014
C C
PARAMETER (N_SIZE=1000,N_FILES=100) PARAMETER (N_SIZE=1000,N_FILES=1000)
C C
REAL*4 EXPE(N_SIZE),CALC(N_SIZE),Y_MEAN(N_SIZE) REAL*4 EXPE(N_SIZE),CALC(N_SIZE),Y_MEAN(N_SIZE)
real*4 x(N_SIZE) real*4 x(N_SIZE)