Working on scripts_common

Former-commit-id: 830060579114debef9874748618e0dcf3f14882c
This commit is contained in:
Marek Nečada 2017-07-11 10:48:52 +03:00
parent e2f9923f31
commit 4dbb8f09b0
1 changed files with 142 additions and 103 deletions

View File

@ -1,4 +1,13 @@
import argparse
#import argparse # Do I need it when calling just parser methods?
import warnings
__TODOs__ = '''
- Implement a more user-friendly way to define the lattice base vectors and positions of the particles.
cf. https://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string/2371789
- low priority: allow to perform some more custom operations on T-Matrix, using some kind of parsing from the previous point
- Autodetect symmetries
'''
def make_action_sharedlist(opname, listname):
class opAction(argparse.Action):
@ -10,7 +19,7 @@ def make_action_sharedlist(opname, listname):
def add_argparse_k_output_options(parser):
parser.add_argument('--kdensity', '--k_density', action='store', type=int, default=33, help='Number of k-points per x-axis segment FIXME DESCRIPTION')
parser.add_argument('--kdensity', '--k_density', action='store', type=int, nargs='+', default=33, help='Number of k-points per x-axis segment FIXME DESCRIPTION')
parser.add_argument('--bz_coverage', action='store', type=float, default=1., help='Brillouin zone coverage in relative length (default 1 for whole 1. BZ)')
parser.add_argument('--bz_edge_width', action='store', type=float, default=0., help='Width of the more densely covered belt along the 1. BZ edge in relative lengths')
parser.add_argument('--bz_edge_factor', action='store', type=float, default=8., help='Relative density of the belt along the 1. BZ edge w.r.t. k_density (default==8)')
@ -52,43 +61,32 @@ def add_argparse_common_options(parser):
parser.add_argument('--frequency_multiplier', action='store', type=float, default=1., help='Multiplies the frequencies in the TMatrix file by a given factor.')
__TODOs__ = '''
BIG TODO: Use more efficient way to calculate the interaction sums: perhaps some customized Ewald-type summation?
Small TODOs:
- Implement a more user-friendly way to define the lattice base vectors and positions of the particles.
cf. https://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string/2371789
- low priority: allow to perform some more custom operations on T-Matrix, using some kind of parsing from the previous point
- Autodetect symmetries
def arg_preprocess_particles(parser, d=None, return_tuple=False):
'''
import argparse, re, random, string
import subprocess
from scipy.constants import hbar, e as eV, pi, c
import warnings
Nanoparticle position and T-matrix path parsing
parser = argparse.ArgumentParser()
pargs=parser.parse_args()
print(pargs)
returns a dictionary d with keys 'particle_specs' and 'TMatrix_specs'
exit(0) ###
parser: ArgumentParser on which add_argparse_unitcell_definitions() and whose
parse_args() has been called.
maxlayer=pargs.maxlayer
#DEL hexside=pargs.hexside
eVfreq = pargs.eVfreq
freq = eVfreq*eV/hbar
verbose=pargs.verbose
d['TMatrix_specs'] is a list of specs where a spec is a tuple of
(lMax_override, TMatrix_path, ops).
#DEL TMatrix_file = pargs.TMatrix
lMax_override: int or None
TMatrix_path: string
ops: iterable with operations on the T-Matrix to be processed with perform_ops()
epsilon_b = pargs.background_permittivity #2.3104
gaussianSigma = pargs.gaussian if pargs.gaussian else None # hexside * 222 / 7
interpfreqfactor = pargs.frequency_multiplier
scp_dest = pargs.scp_to if pargs.scp_to else None
kdensity = pargs.kdensity
chunklen = pargs.chunklen
d['particle_specs'] is an iterable of tuples (label, (xpos, ypos), TMatrix_spec_index)
TMatrix_spec_index is an index of the corresponding element of d['TMatrix_specs']
#### Nanoparticle position and T-matrix path parsing ####
If a dictionary d is provided, the result is written into it; if d is None (default),
a new dictionary is created.
If return_tuple is true, then a tuple (particle_specs, TMatrix_specs) is returned
instead of the dictionary d.
'''
TMatrix_paths = dict()
lMax_overrides = dict()
default_TMatrix_path = None
@ -182,6 +180,46 @@ particles_specs = [(label, positions(label),
tuple(ops[label]))]
) for label in positions.keys()]
# This converts the TMatrix_specs dict to a list of its ex-keys in the ex-value order
TMatrix_specs = dict((v,k) for (k,v) in TMatrix_specs.items()) # invert dict
TMatrix_specs = [TMatrix_specs[i] for i in range(len(TMatrix_specs))] # convert to list
if d is None:
d = dict()
d['particle_specs'] = particle_specs
d['TMatrix_specs'] = TMatrix_specs
if return_tuple:
return (particles_specs, TMatrix_specs)
else:
return d
'''
import argparse, re, random, string
import subprocess
from scipy.constants import hbar, e as eV, pi, c
import warnings
parser = argparse.ArgumentParser()
pargs=parser.parse_args()
print(pargs)
exit(0) ###
maxlayer=pargs.maxlayer
#DEL hexside=pargs.hexside
eVfreq = pargs.eVfreq
freq = eVfreq*eV/hbar
verbose=pargs.verbose
#DEL TMatrix_file = pargs.TMatrix
epsilon_b = pargs.background_permittivity #2.3104
gaussianSigma = pargs.gaussian if pargs.gaussian else None # hexside * 222 / 7
interpfreqfactor = pargs.frequency_multiplier
scp_dest = pargs.scp_to if pargs.scp_to else None
kdensity = pargs.kdensity
chunklen = pargs.chunklen
# -----------------finished basic CLI parsing (except for op arguments) ------------------
from qpms.timetrack import _time_b, _time_e
btime=_time_b(verbose)
@ -344,3 +382,4 @@ for chunki in range(chunkn):
_time_e(btime, verbose)
#print(time.strftime("%H.%M:%S",time.gmtime(time.time()-begtime)))
'''