diff --git a/.pymol/license.lic b/.pymol/license.lic new file mode 100644 index 0000000..ed20f8f --- /dev/null +++ b/.pymol/license.lic @@ -0,0 +1,11 @@ +INCREMENT PYMOL_MAIN SCHROD 999 01-nov-2018 uncounted HOSTID=ANY \ + ISSUED=01-Mar-2018 NOTICE="PyMOL for educational use only" \ + START=01-Apr-2018 TS_OK SIGN="1105 4C2B 9FDB A342 EE69 01FA \ + FD52 45EB A96D A598 C83A 6ABC 4814 2B73 5EFD 093F 4558 99F3 \ + 1F13 4414 EFBA 39B6 8749 13AA 46D6 8417 AF3D D869 02DF ADCC" \ + SIGN2="04A4 3110 8811 34B4 D31E 093F F4CF 689F 8DAF 4090 F108 \ + 36D2 D171 7680 25AD 1055 506F 8D50 6616 18E3 EC15 22FD 87D1 \ + FD92 0F1F D069 4EB3 D748 2CB7 5D4C" + + + diff --git a/.pymol/recent.db b/.pymol/recent.db new file mode 100644 index 0000000..965dc68 Binary files /dev/null and b/.pymol/recent.db differ diff --git a/.pymol/startup/__pycache__/axes.cpython-36.pyc b/.pymol/startup/__pycache__/axes.cpython-36.pyc new file mode 100644 index 0000000..c3de31b Binary files /dev/null and b/.pymol/startup/__pycache__/axes.cpython-36.pyc differ diff --git a/.pymol/startup/__pycache__/center_of_mass.cpython-36.pyc b/.pymol/startup/__pycache__/center_of_mass.cpython-36.pyc new file mode 100644 index 0000000..ed11f32 Binary files /dev/null and b/.pymol/startup/__pycache__/center_of_mass.cpython-36.pyc differ diff --git a/.pymol/startup/__pycache__/propka.cpython-36.pyc b/.pymol/startup/__pycache__/propka.cpython-36.pyc new file mode 100644 index 0000000..422cc01 Binary files /dev/null and b/.pymol/startup/__pycache__/propka.cpython-36.pyc differ diff --git a/.pymol/startup/__pycache__/show_contact_map.cpython-36.pyc b/.pymol/startup/__pycache__/show_contact_map.cpython-36.pyc new file mode 100644 index 0000000..803342d Binary files /dev/null and b/.pymol/startup/__pycache__/show_contact_map.cpython-36.pyc differ diff --git a/.pymol/startup/__pycache__/spectrum_states.cpython-36.pyc b/.pymol/startup/__pycache__/spectrum_states.cpython-36.pyc new file mode 100644 index 0000000..e3eb76a Binary files /dev/null and b/.pymol/startup/__pycache__/spectrum_states.cpython-36.pyc differ diff --git a/.pymol/startup/__pycache__/visualize_dca_scores.cpython-36.pyc b/.pymol/startup/__pycache__/visualize_dca_scores.cpython-36.pyc new file mode 100644 index 0000000..0fd1645 Binary files /dev/null and b/.pymol/startup/__pycache__/visualize_dca_scores.cpython-36.pyc differ diff --git a/.pymol/startup/anglebetweenhelices.py b/.pymol/startup/anglebetweenhelices.py new file mode 100644 index 0000000..0ec3562 --- /dev/null +++ b/.pymol/startup/anglebetweenhelices.py @@ -0,0 +1,316 @@ +''' +(c) 2010 Thomas Holder +''' + +from pymol import cmd, stored, CmdException +from chempy import cpv +import math + +if cmd.get_version()[1] < 1.2: + def get_unused_name(name): + import random + return name + '%04d' % random.randint(0, 1000) + STATE = 1 +else: + from pymol.cmd import get_unused_name + STATE = -1 + + +def _vec_sum(vec_list): + # this is the same as + # return numpy.array(vec_list).sum(0).tolist() + vec = cpv.get_null() + for x in vec_list: + vec = cpv.add(vec, x) + return vec + + +def _mean_and_std(x): + # this is the same as + # return (numpy.mean(x), numpy.std(x, ddof=1)) + N = len(x) + if N < 2: + return (x[0], 0.0) + mu = sum(x) / float(N) + var = sum([(i - mu) ** 2 for i in x]) / float(N - 1) + return (mu, var ** 0.5) + + +def _common_orientation(selection, vec, visualize=1, quiet=0): + ''' + Common part of different helix orientation functions. Does calculate + the center of mass and does the visual feedback. + ''' + stored.x = [] + cmd.iterate_state(STATE, '(%s) and name CA' % (selection), + 'stored.x.append([x,y,z])') + if len(stored.x) < 2: + print('warning: count(CA) < 2') + raise CmdException + center = cpv.scale(_vec_sum(stored.x), 1. / len(stored.x)) + if visualize: + scale = cpv.distance(stored.x[0], stored.x[-1]) + visualize_orientation(vec, center, scale, True) + cmd.zoom(selection, buffer=2) + if not quiet: + print('Center: (%.2f, %.2f, %.2f) Direction: (%.2f, %.2f, %.2f)' % tuple(center + vec)) + return center, vec + + +def visualize_orientation(direction, center=[0, 0, 0], scale=1.0, symmetric=False, color='green', color2='red'): + ''' + Draw an arrow. Helper function for "helix_orientation" etc. + ''' + from pymol import cgo + color_list = cmd.get_color_tuple(color) + color2_list = cmd.get_color_tuple(color2) + if symmetric: + scale *= 0.5 + end = cpv.add(center, cpv.scale(direction, scale)) + radius = 0.3 + obj = [cgo.SAUSAGE] + obj.extend(center) + obj.extend(end) + obj.extend([ + radius, + 0.8, 0.8, 0.8, + ]) + obj.extend(color_list) + if symmetric: + start = cpv.sub(center, cpv.scale(direction, scale)) + obj.append(cgo.SAUSAGE) + obj.extend(center) + obj.extend(start) + obj.extend([ + radius, + 0.8, 0.8, 0.8, + ]) + obj.extend(color2_list) + coneend = cpv.add(end, cpv.scale(direction, 4.0 * radius)) + if cmd.get_version()[1] >= 1.2: + obj.append(cgo.CONE) + obj.extend(end) + obj.extend(coneend) + obj.extend([ + radius * 1.75, + 0.0, + ]) + obj.extend(color_list * 2) + obj.extend([ + 1.0, 1.0, # Caps + ]) + cmd.load_cgo(obj, get_unused_name('oriVec'), zoom=0) + + +def cafit_orientation(selection, visualize=1, quiet=0): + ''' +DESCRIPTION + + Get the center and direction of a peptide by least squares + linear fit on CA atoms. + +USAGE + + cafit_orientation selection [, visualize] + +NOTES + + Requires python module "numpy". + +SEE ALSO + + helix_orientation + ''' + visualize, quiet = int(visualize), int(quiet) + import numpy + stored.x = list() + cmd.iterate_state(STATE, '(%s) and name CA' % (selection), + 'stored.x.append([x,y,z])') + x = numpy.array(stored.x) + U, s, Vh = numpy.linalg.svd(x - x.mean(0)) + vec = cpv.normalize(Vh[0]) + if cpv.dot_product(vec, x[-1] - x[0]) < 0: + vec = cpv.negate(vec) + return _common_orientation(selection, vec, visualize, quiet) + + +def loop_orientation(selection, visualize=1, quiet=0): + ''' +DESCRIPTION + + Get the center and approximate direction of a peptide. Works for any + secondary structure. + Averages direction of N(i)->C(i) pseudo bonds. + +USAGE + + loop_orientation selection [, visualize] + +SEE ALSO + + helix_orientation + ''' + visualize, quiet = int(visualize), int(quiet) + stored.x = dict() + cmd.iterate_state(STATE, '(%s) and name N+C' % (selection), + 'stored.x.setdefault(chain + resi, dict())[name] = x,y,z') + vec = cpv.get_null() + count = 0 + for x in stored.x.values(): + if 'C' in x and 'N' in x: + vec = cpv.add(vec, cpv.sub(x['C'], x['N'])) + count += 1 + if count == 0: + print('warning: count == 0') + raise CmdException + vec = cpv.normalize(vec) + return _common_orientation(selection, vec, visualize, quiet) + + +def helix_orientation(selection, visualize=1, sigma_cutoff=1.5, quiet=0): + ''' +DESCRIPTION + + Get the center and direction of a helix as vectors. Will only work + for helices and gives slightly different results than loop_orientation. + Averages direction of C(i)->O(i) bonds. + +USAGE + + helix_orientation selection [, visualize [, sigma_cutoff]] + +ARGUMENTS + + selection = string: atom selection of helix + + visualize = 0 or 1: show fitted vector as arrow {default: 1} + + sigma_cutoff = float: drop outliers outside + (standard_deviation * sigma_cutoff) {default: 1.5} + +SEE ALSO + + angle_between_helices, helix_orientation_hbond, loop_orientation, cafit_orientation + ''' + visualize, quiet, sigma_cutoff = int(visualize), int(quiet), float(sigma_cutoff) + stored.x = dict() + cmd.iterate_state(STATE, '(%s) and name C+O' % (selection), + 'stored.x.setdefault(chain + resi, dict())[name] = x,y,z') + vec_list = [] + count = 0 + for x in stored.x.values(): + if 'C' in x and 'O' in x: + vec_list.append(cpv.sub(x['O'], x['C'])) + count += 1 + if count == 0: + print('warning: count == 0') + raise CmdException + vec = _vec_sum(vec_list) + if count > 2 and sigma_cutoff > 0: + angle_list = [cpv.get_angle(vec, x) for x in vec_list] + angle_mu, angle_sigma = _mean_and_std(angle_list) + vec_list = [vec_list[i] for i in range(len(vec_list)) + if abs(angle_list[i] - angle_mu) < angle_sigma * sigma_cutoff] + if not quiet: + print('Dropping %d outlier(s)' % (len(angle_list) - len(vec_list))) + vec = _vec_sum(vec_list) + vec = cpv.normalize(vec) + return _common_orientation(selection, vec, visualize, quiet) + + +def helix_orientation_hbond(selection, visualize=1, cutoff=3.5, quiet=0): + ''' +DESCRIPTION + + Get the center and direction of a helix as vectors. Will only work + for alpha helices and gives slightly different results than + helix_orientation. Averages direction of O(i)->N(i+4) hydrogen bonds. + +USAGE + + helix_orientation selection [, visualize [, cutoff]] + +ARGUMENTS + + cutoff = float: maximal hydrogen bond distance {default: 3.5} + +SEE ALSO + + helix_orientation + ''' + visualize, quiet, cutoff = int(visualize), int(quiet), float(cutoff) + stored.x = dict() + cmd.iterate_state(STATE, '(%s) and name N+O' % (selection), + 'stored.x.setdefault(resv, dict())[name] = x,y,z') + vec_list = [] + for resi in stored.x: + resi_other = resi + 4 + if 'O' in stored.x[resi] and resi_other in stored.x: + if 'N' in stored.x[resi_other]: + vec = cpv.sub(stored.x[resi_other]['N'], stored.x[resi]['O']) + if cpv.length(vec) < cutoff: + vec_list.append(vec) + if len(vec_list) == 0: + print('warning: count == 0') + raise CmdException + vec = _vec_sum(vec_list) + vec = cpv.normalize(vec) + return _common_orientation(selection, vec, visualize, quiet) + + +def angle_between_helices(selection1, selection2, method='helix_orientation', visualize=1, quiet=0): + ''' +DESCRIPTION + + Calculates the angle between two helices + +USAGE + + angle_between_helices selection1, selection2 [, method [, visualize]] + +ARGUMENTS + + selection1 = string: atom selection of first helix + + selection2 = string: atom selection of second helix + + method = string: function to calculate orientation {default: helix_orientation} + or int: 0: helix_orientation, 1: helix_orientation_hbond, + 2: loop_orientation, 3: cafit_orientation + + visualize = 0 or 1: show fitted vector as arrow {default: 1} + +SEE ALSO + + helix_orientation, helix_orientation_hbond, loop_orientation, cafit_orientation + ''' + visualize, quiet = int(visualize), int(quiet) + methods = { + '0': helix_orientation, + '1': helix_orientation_hbond, + '2': loop_orientation, + '3': cafit_orientation, + } + methods.update([(x.__name__, x) for x in list(methods.values())]) + try: + orientation = methods[str(method)] + except KeyError: + print('no such method: ' + str(method)) + raise CmdException + if not quiet: + print('Using method: ' + orientation.__name__) + cen1, dir1 = orientation(selection1, visualize, quiet=1) + cen2, dir2 = orientation(selection2, visualize, quiet=1) + angle = cpv.get_angle(dir1, dir2) + angle_deg = math.degrees(angle) + if not quiet: + print('Angle: %.2f deg' % (angle_deg)) + if visualize: + cmd.zoom('(%s) or (%s)' % (selection1, selection2), buffer=2) + return angle_deg + +cmd.extend('helix_orientation', helix_orientation) +cmd.extend('helix_orientation_hbond', helix_orientation_hbond) +cmd.extend('loop_orientation', loop_orientation) +cmd.extend('cafit_orientation', cafit_orientation) +cmd.extend('angle_between_helices', angle_between_helices) diff --git a/.pymol/startup/anglebetweenhelices.pyc b/.pymol/startup/anglebetweenhelices.pyc new file mode 100644 index 0000000..eb91ea9 Binary files /dev/null and b/.pymol/startup/anglebetweenhelices.pyc differ diff --git a/.pymol/startup/axes.py b/.pymol/startup/axes.py index bc2e0a4..b4d7dfb 100644 --- a/.pymol/startup/axes.py +++ b/.pymol/startup/axes.py @@ -37,8 +37,8 @@ class PutCenterCallback(object): t = cpv.add(t, off_m) z = -v[11] / 30.0 - m = [z, 0, 0, t[0] / z, 0, z, 0, t[1] / z, 0, 0, z, t[2] / z, 0, 0, 0, 1] - cmd.set_object_ttt(self.name, m, homogenous=1) + m = [z, 0, 0, 0, 0, z, 0, 0, 0, 0, z, 0, t[0] / z, t[1] / z, t[2] / z, 1] + cmd.set_object_ttt(self.name, m) def axes(name='axes'): ''' diff --git a/.pymol/startup/axes.pyc b/.pymol/startup/axes.pyc index 79df320..5979d2d 100644 Binary files a/.pymol/startup/axes.pyc and b/.pymol/startup/axes.pyc differ diff --git a/.pymol/startup/tmalign.py b/.pymol/startup/tmalign.py deleted file mode 100644 index 46d5257..0000000 --- a/.pymol/startup/tmalign.py +++ /dev/null @@ -1,257 +0,0 @@ -''' -(c) 2011-2012 Thomas Holder, MPI for Developmental Biology -''' - -from __future__ import print_function - -__author__ = 'Thomas Holder' -__version__ = '1.1' -__license__ = 'BSD-2-Clause' - -from pymol import cmd, CmdException - - -def save_pdb_without_ter(filename, selection, **kwargs): - ''' -DESCRIPTION - -Save PDB file without TER records. External applications like TMalign and -DynDom stop reading PDB files at TER records, which might be undesired in -case of missing loops. - ''' - v = cmd.get_setting_boolean('pdb_use_ter_records') - if v: - cmd.unset('pdb_use_ter_records') - cmd.save(filename, selection, **kwargs) - if v: - cmd.set('pdb_use_ter_records') - - -def alignwithanymethod(mobile, target, methods='align super cealign tmalign', - async=1, quiet=1): - ''' -DESCRIPTION - -Align copies of mobile to target with several alignment methods - -ARGUMENTS - -mobile = string: atom selection - -target = string: atom selection - -methods = string: space separated list of PyMOL commands which take -arguments "mobile" and "target" (in any order) {default: align super -cealign tmalign} - ''' - import threading - import time - methods = methods.split() - async, quiet = int(async), int(quiet) - mobile_obj = cmd.get_object_list('first (' + mobile + ')')[0] - - def myalign(method): - newmobile = cmd.get_unused_name(mobile_obj + '_' + method) - cmd.create(newmobile, mobile_obj) - start = time.time() - cmd.do('%s mobile=%s in %s, target=%s' % (method, newmobile, mobile, target)) - if not quiet: - print('Finished: %s (%.2f sec)' % (method, time.time() - start)) - - for method in methods: - if async: - t = threading.Thread(target=myalign, args=(method,)) - t.setDaemon(1) - t.start() - else: - myalign(method) - - -def tmalign(mobile, target, args='', exe='TMalign', ter=0, transform=1, object=None, quiet=0): - ''' -DESCRIPTION - -TMalign wrapper - -Reference: Y. Zhang and J. Skolnick, Nucl. Acids Res. 2005 33, 2302-9 -http://zhanglab.ccmb.med.umich.edu/TM-align/ - -USAGE - -tmalign mobile, target [, args [, exe ]] - -ARGUMENTS - -mobile, target = string: atom selections - -args = string: Extra arguments like -d0 5 -L 100 - -exe = string: Path to TMalign executable {default: TMalign} - -ter = 0/1: If ter=0, then ignore chain breaks because TMalign will stop -at first TER record {default: 0} - -SEE ALSO - -tmscore, mmalign - ''' - import subprocess - import tempfile - import os - import re - - ter, quiet = int(ter), int(quiet) - - mobile_filename = tempfile.mktemp('.pdb', 'mobile') - target_filename = tempfile.mktemp('.pdb', 'target') - matrix_filename = tempfile.mktemp('.txt', 'matrix') - mobile_ca_sele = '(%s) and (not hetatm) and name CA and alt +A' % (mobile) - target_ca_sele = '(%s) and (not hetatm) and name CA and alt +A' % (target) - - if ter: - save = cmd.save - else: - save = save_pdb_without_ter - save(mobile_filename, mobile_ca_sele) - save(target_filename, target_ca_sele) - - exe = cmd.exp_path(exe) - args = [exe, mobile_filename, target_filename, '-m', matrix_filename] + args.split() - - try: - process = subprocess.Popen(args, stdout=subprocess.PIPE) - lines = process.stdout.readlines() - except OSError: - print('Cannot execute "%s", please provide full path to TMscore or TMalign executable' % (exe)) - raise CmdException - finally: - os.remove(mobile_filename) - os.remove(target_filename) - - # TMalign >= 2012/04/17 - if os.path.exists(matrix_filename): - lines += open(matrix_filename).readlines() - os.remove(matrix_filename) - - r = None - re_score = re.compile(r'TM-score\s*=\s*(\d*\.\d*)') - rowcount = 0 - matrix = [] - line_it = iter(lines) - alignment = [] - for line in line_it: - if 4 >= rowcount > 0: - if rowcount >= 2: - a = list(map(float, line.split())) - matrix.extend(a[2:5]) - matrix.append(a[1]) - rowcount += 1 - elif line.lower().startswith(' -------- rotation matrix'): - rowcount = 1 - elif line.startswith('(":" denotes'): - alignment = [line_it.next().rstrip() for i in range(3)] - else: - match = re_score.search(line) - if match is not None: - r = float(match.group(1)) - if not quiet: - print(line.rstrip()) - - if not quiet: - for i in range(0, len(alignment[0]) - 1, 78): - for line in alignment: - print(line[i:i + 78]) - print('') - - assert len(matrix) == 3 * 4 - matrix.extend([0, 0, 0, 1]) - - if int(transform): - cmd.transform_selection('byobject (%s)' % (mobile), matrix, homogenous=1) - - # alignment object - if object is not None: - mobile_idx, target_idx = [], [] - space = {'mobile_idx': mobile_idx, 'target_idx': target_idx} - cmd.iterate(mobile_ca_sele, 'mobile_idx.append("%s`%d" % (model, index))', space=space) - cmd.iterate(target_ca_sele, 'target_idx.append("%s`%d" % (model, index))', space=space) - for i, aa in enumerate(alignment[0]): - if aa == '-': - mobile_idx.insert(i, None) - for i, aa in enumerate(alignment[2]): - if aa == '-': - target_idx.insert(i, None) - if (len(mobile_idx) == len(target_idx) == len(alignment[2])): - cmd.rms_cur( - ' '.join(idx for (idx, m) in zip(mobile_idx, alignment[1]) if m in ':.'), - ' '.join(idx for (idx, m) in zip(target_idx, alignment[1]) if m in ':.'), - cycles=0, matchmaker=4, object=object) - else: - print('Could not load alignment object') - - if not quiet and r is not None: - print('Found in output TM-score = %.4f' % (r)) - - return r - - -def tmscore(mobile, target, args='', exe='TMscore', quiet=0, **kwargs): - ''' -DESCRIPTION - -TMscore wrapper - -Reference: Yang Zhang and Jeffrey Skolnick, Proteins 2004 57: 702-710 -http://zhanglab.ccmb.med.umich.edu/TM-score/ - -ARGUMENTS - -mobile, target = string: atom selections - -args = string: Extra arguments like -d 5 - -exe = string: Path to TMscore executable {default: TMscore} - -ter = 0/1: If ter=0, then ignore chain breaks because TMscore will stop -at first TER record {default: 0} - -SEE ALSO - -tmalign, mmalign - ''' - kwargs.pop('_self', None) - return tmalign(mobile, target, args, exe, quiet=quiet, **kwargs) - - -def mmalign(mobile, target, args='', exe='MMalign', ter=0, transform=1, quiet=0): - ''' -DESCRIPTION - -MMalign wrapper - -Reference: S. Mukherjee and Y. Zhang, Nucleic Acids Research 2009; 37: e83 -http://zhanglab.ccmb.med.umich.edu/MM-align/ - -SEE ALSO - -tmalign, tmscore - ''' - return tmalign(mobile, target, args, exe, ter, transform, quiet=quiet) - -# pymol commands -cmd.extend('alignwithanymethod', alignwithanymethod) -cmd.extend('tmalign', tmalign) -cmd.extend('tmscore', tmscore) -cmd.extend('mmalign', tmalign) - -# autocompletion -cmd.auto_arg[0].update({ - 'tmalign': cmd.auto_arg[0]['align'], - 'tmscore': cmd.auto_arg[0]['align'], - 'mmalign': cmd.auto_arg[0]['align'], -}) -cmd.auto_arg[1].update({ - 'tmalign': cmd.auto_arg[1]['align'], - 'tmscore': cmd.auto_arg[1]['align'], - 'mmalign': cmd.auto_arg[1]['align'], -}) diff --git a/matplotlibrc b/matplotlibrc index 51d911c..0431805 100644 --- a/matplotlibrc +++ b/matplotlibrc @@ -1,594 +1,33 @@ -#### CONFIGURATION BEGINS HERE - -# The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo -# MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG -# Template. -# You can also deploy your own backend outside of matplotlib by -# referring to the module name (which must be in the PYTHONPATH) as -# 'module://my_backend'. backend : Qt5Agg - -# If you are using the Qt4Agg backend, you can choose here -# to use the PyQt4 bindings or the newer PySide bindings to -# the underlying Qt4 toolkit. -# backend.qt4 : PyQt4 # PyQt4 | PySide - -# Note that this can be overridden by the environment variable -# QT_API used by Enthought Tool Suite (ETS); valid values are -# "pyqt" and "pyside". The "pyqt" setting has the side effect of -# forcing the use of Version 2 API for QString and QVariant. - -# The port to use for the web server in the WebAgg backend. -# webagg.port : 8888 - -# If webagg.port is unavailable, a number of other random ports will -# be tried until one that is available is found. -# webagg.port_retries : 50 - -# When True, open the webbrowser to the plot that is shown -# webagg.open_in_browser : True - -# When True, the figures rendered in the nbagg backend are created with -# a transparent background. -# nbagg.transparent : False - -# if you are running pyplot inside a GUI and your backend choice -# conflicts, we will automatically try to find a compatible one for -# you if backend_fallback is True -#backend_fallback: True - -#interactive : False -#toolbar : toolbar2 # None | toolbar2 ("classic" is deprecated) -#timezone : UTC # a pytz timezone string, e.g., US/Central or Europe/Paris - -# Where your matplotlib data lives if you installed to a non-default -# location. This is where the matplotlib fonts, bitmaps, etc reside -#datapath : /home/jdhunter/mpldata - - -### LINES -# See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more -# information on line properties. -lines.linewidth : 1 # line width in points -#lines.linestyle : - # solid line -#lines.color : C0 # has no affect on plot(); see axes.prop_cycle -#lines.marker : None # the default marker -#lines.markeredgewidth : 1.0 # the line width around the marker symbol -#lines.markersize : 6 # markersize, in points -#lines.dash_joinstyle : miter # miter|round|bevel -#lines.dash_capstyle : butt # butt|round|projecting -#lines.solid_joinstyle : miter # miter|round|bevel -#lines.solid_capstyle : projecting # butt|round|projecting -#lines.antialiased : True # render lines in antialiased (no jaggies) - -# The three standard dash patterns. These are scaled by the linewidth. -#lines.dashed_pattern : 2.8, 1.2 -#lines.dashdot_pattern : 4.8, 1.2, 0.8, 1.2 -#lines.dotted_pattern : 1.1, 1.1 -#lines.scale_dashes : True - -#markers.fillstyle: full # full|left|right|bottom|top|none - -### PATCHES -# Patches are graphical objects that fill 2D space, like polygons or -# circles. See -# http://matplotlib.org/api/artist_api.html#module-matplotlib.patches -# information on patch properties -#patch.linewidth : 1 # edge width in points. -#patch.facecolor : C0 -#patch.edgecolor : black # if forced, or patch is not filled -#patch.force_edgecolor : False # True to always use edgecolor -#patch.antialiased : True # render patches in antialiased (no jaggies) - -### HATCHES -#hatch.color : k -#hatch.linewidth : 1.0 - -### Boxplot -#boxplot.notch : False -#boxplot.vertical : True -#boxplot.whiskers : 1.5 -#boxplot.bootstrap : None -#boxplot.patchartist : False -#boxplot.showmeans : False -#boxplot.showcaps : True -#boxplot.showbox : True -#boxplot.showfliers : True -#boxplot.meanline : False - -#boxplot.flierprops.color : 'k' -#boxplot.flierprops.marker : 'o' -#boxplot.flierprops.markerfacecolor : 'none' -#boxplot.flierprops.markeredgecolor : 'k' -#boxplot.flierprops.markersize : 6 -#boxplot.flierprops.linestyle : 'none' -#boxplot.flierprops.linewidth : 1.0 - -#boxplot.boxprops.color : 'k' -#boxplot.boxprops.linewidth : 1.0 -#boxplot.boxprops.linestyle : '-' - -#boxplot.whiskerprops.color : 'k' -#boxplot.whiskerprops.linewidth : 1.0 -#boxplot.whiskerprops.linestyle : '-' - -#boxplot.capprops.color : 'k' -#boxplot.capprops.linewidth : 1.0 -#boxplot.capprops.linestyle : '-' - -#boxplot.medianprops.color : 'C1' -#boxplot.medianprops.linewidth : 1.0 -#boxplot.medianprops.linestyle : '-' - -#boxplot.meanprops.color : 'C2' -#boxplot.meanprops.marker : '^' -#boxplot.meanprops.markerfacecolor : 'C2' -#boxplot.meanprops.markeredgecolor : 'C2' -#boxplot.meanprops.markersize : 6 -#boxplot.meanprops.linestyle : 'none' -#boxplot.meanprops.linewidth : 1.0 - -### FONT -# -# font properties used by text.Text. See -# http://matplotlib.org/api/font_manager_api.html for more -# information on font properties. The 6 font properties used for font -# matching are given below with their default values. -# -# The font.family property has five values: 'serif' (e.g., Times), -# 'sans-serif' (e.g., Helvetica), 'cursive' (e.g., Zapf-Chancery), -# 'fantasy' (e.g., Western), and 'monospace' (e.g., Courier). Each of -# these font families has a default list of font names in decreasing -# order of priority associated with them. When text.usetex is False, -# font.family may also be one or more concrete font names. -# -# The font.style property has three values: normal (or roman), italic -# or oblique. The oblique style will be used for italic, if it is not -# present. -# -# The font.variant property has two values: normal or small-caps. For -# TrueType fonts, which are scalable fonts, small-caps is equivalent -# to using a font size of 'smaller', or about 83%% of the current font -# size. -# -# The font.weight property has effectively 13 values: normal, bold, -# bolder, lighter, 100, 200, 300, ..., 900. Normal is the same as -# 400, and bold is 700. bolder and lighter are relative values with -# respect to the current weight. -# -# The font.stretch property has 11 values: ultra-condensed, -# extra-condensed, condensed, semi-condensed, normal, semi-expanded, -# expanded, extra-expanded, ultra-expanded, wider, and narrower. This -# property is not currently implemented. -# -# The font.size property is the default font size for text, given in pts. -# 10 pt is the standard value. -# -#font.family : sans-serif -#font.style : normal -#font.variant : normal -#font.weight : medium -#font.stretch : normal -# note that font.size controls default text sizes. To configure -# special text sizes tick labels, axes, labels, title, etc, see the rc -# settings for axes and ticks. Special text sizes can be defined -# relative to font.size, using the following values: xx-small, x-small, -# small, medium, large, x-large, xx-large, larger, or smaller -#font.size : 10.0 -#font.serif : DejaVu Serif, Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif -#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif -#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive -#font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, Humor Sans, xkcd, fantasy -#font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace - -### TEXT -# text properties used by text.Text. See -# http://matplotlib.org/api/artist_api.html#module-matplotlib.text for more -# information on text properties - -#text.color : black - -### LaTeX customizations. See http://wiki.scipy.org/Cookbook/Matplotlib/UsingTex -#text.usetex : False # use latex for all text handling. The following fonts - # are supported through the usual rc parameter settings: - # new century schoolbook, bookman, times, palatino, - # zapf chancery, charter, serif, sans-serif, helvetica, - # avant garde, courier, monospace, computer modern roman, - # computer modern sans serif, computer modern typewriter - # If another font is desired which can loaded using the - # LaTeX \usepackage command, please inquire at the - # matplotlib mailing list -#text.latex.unicode : False # use "ucs" and "inputenc" LaTeX packages for handling - # unicode strings. -#text.latex.preamble : # IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES - # AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP - # IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO. - # preamble is a comma separated list of LaTeX statements - # that are included in the LaTeX document preamble. - # An example: - # text.latex.preamble : \usepackage{bm},\usepackage{euler} - # The following packages are always loaded with usetex, so - # beware of package collisions: color, geometry, graphicx, - # type1cm, textcomp. Adobe Postscript (PSSNFS) font packages - # may also be loaded, depending on your font settings - -#text.dvipnghack : None # some versions of dvipng don't handle alpha - # channel properly. Use True to correct - # and flush ~/.matplotlib/tex.cache - # before testing and False to force - # correction off. None will try and - # guess based on your dvipng version - -#text.hinting : auto # May be one of the following: - # 'none': Perform no hinting - # 'auto': Use FreeType's autohinter - # 'native': Use the hinting information in the - # font file, if available, and if your - # FreeType library supports it - # 'either': Use the native hinting information, - # or the autohinter if none is available. - # For backward compatibility, this value may also be - # True === 'auto' or False === 'none'. -#text.hinting_factor : 8 # Specifies the amount of softness for hinting in the - # horizontal direction. A value of 1 will hint to full - # pixels. A value of 2 will hint to half pixels etc. - -#text.antialiased : True # If True (default), the text will be antialiased. - # This only affects the Agg backend. - -# The following settings allow you to select the fonts in math mode. -# They map from a TeX font name to a fontconfig font pattern. -# These settings are only used if mathtext.fontset is 'custom'. -# Note that this "custom" mode is unsupported and may go away in the -# future. -#mathtext.cal : cursive -#mathtext.rm : serif -#mathtext.tt : monospace -#mathtext.it : serif:italic -#mathtext.bf : serif:bold -#mathtext.sf : sans -#mathtext.fontset : dejavusans # Should be 'dejavusans' (default), - # 'dejavuserif', 'cm' (Computer Modern), 'stix', - # 'stixsans' or 'custom' -#mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern - # fonts when a symbol can not be found in one of - # the custom math fonts. - -#mathtext.default : it # The default font to use for math. - # Can be any of the LaTeX font names, including - # the special name "regular" for the same font - # used in regular text. - -### AXES -# default face and edge color, default tick sizes, -# default fontsizes for ticklabels, and so on. See -# http://matplotlib.org/api/axes_api.html#module-matplotlib.axes -#axes.facecolor : white # axes background color -#axes.edgecolor : black # axes edge color -#axes.linewidth : 0.8 # edge linewidth -#axes.grid : False # display grid or not -#axes.titlesize : large # fontsize of the axes title -#axes.titlepad : 6.0 # pad between axes and title in points -#axes.labelsize : medium # fontsize of the x any y labels -#axes.labelpad : 4.0 # space between label and axis -#axes.labelweight : normal # weight of the x and y labels -#axes.labelcolor : black -#axes.axisbelow : 'line' # draw axis gridlines and ticks below - # patches (True); above patches but below - # lines ('line'); or above all (False) - -#axes.formatter.limits : -7, 7 # use scientific notation if log10 - # of the axis range is smaller than the - # first or larger than the second -#axes.formatter.use_locale : False # When True, format tick labels - # according to the user's locale. - # For example, use ',' as a decimal - # separator in the fr_FR locale. -#axes.formatter.use_mathtext : False # When True, use mathtext for scientific - # notation. -#axes.formatter.useoffset : True # If True, the tick label formatter - # will default to labeling ticks relative - # to an offset when the data range is - # small compared to the minimum absolute - # value of the data. -#axes.formatter.offset_threshold : 4 # When useoffset is True, the offset - # will be used when it can remove - # at least this number of significant - # digits from tick labels. - -# axes.spines.left : True # display axis spines -# axes.spines.bottom : True -# axes.spines.top : True -# axes.spines.right : True - - -#axes.unicode_minus : True # use unicode for the minus symbol - # rather than hyphen. See - # http://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes -#axes.prop_cycle: cycler('color', ['0072B2', '009E73', 'D55E00', 'CC79A7', 'F0E442', '56B4E9']) +lines.linewidth : 1 # line width in points +font.size : 12 +text.usetex : False # use latex for all text handling. The following fonts +axes.edgecolor : black # axes edge color +axes.grid : True # display grid or not +axes.titlesize : 12 # fontsize of the axes title +axes.labelsize : 12 # fontsize of the x any y labels +axes.spines.top : False +axes.spines.right : False +axes.prop_cycle: cycler('color', ['348ABD', 'A60628', '7A68A6', '467821', 'D55E00', 'CC79A7', '56B4E9', '009E73', 'F0E442', '0072B2']) patch.facecolor: 0072B2 -#axes.autolimit_mode : data # How to scale axes limits to the data. - # Use "data" to use data limits, plus some margin - # Use "round_number" move to the nearest "round" number -#axes.xmargin : .05 # x margin. See `axes.Axes.margins` -#axes.ymargin : .05 # y margin See `axes.Axes.margins` - -#polaraxes.grid : True # display grid on polar axes -#axes3d.grid : True # display grid on 3d axes - -### DATES -# These control the default format strings used in AutoDateFormatter. -# Any valid format datetime format string can be used (see the python -# `datetime` for details). For example using '%%x' will use the locale date representation -# '%%X' will use the locale time representation and '%%c' will use the full locale datetime -# representation. -# These values map to the scales: -# {'year': 365, 'month': 30, 'day': 1, 'hour': 1/24, 'minute': 1 / (24 * 60)} - -# date.autoformatter.year : %Y -# date.autoformatter.month : %Y-%m -# date.autoformatter.day : %Y-%m-%d -# date.autoformatter.hour : %m-%d %H -# date.autoformatter.minute : %d %H:%M -# date.autoformatter.second : %H:%M:%S -# date.autoformatter.microsecond : %M:%S.%f - -### TICKS -# see http://matplotlib.org/api/axis_api.html#matplotlib.axis.Tick -#xtick.top : False # draw ticks on the top side -#xtick.bottom : True # draw ticks on the bottom side -#xtick.major.size : 3.5 # major tick size in points -#xtick.minor.size : 2 # minor tick size in points -#xtick.major.width : 0.8 # major tick width in points -#xtick.minor.width : 0.6 # minor tick width in points -#xtick.major.pad : 3.5 # distance to major tick label in points -#xtick.minor.pad : 3.4 # distance to the minor tick label in points -#xtick.color : k # color of the tick labels -#xtick.labelsize : medium # fontsize of the tick labels -#xtick.direction : out # direction: in, out, or inout -#xtick.minor.visible : False # visibility of minor ticks on x-axis -#xtick.major.top : True # draw x axis top major ticks -#xtick.major.bottom : True # draw x axis bottom major ticks -#xtick.minor.top : True # draw x axis top minor ticks -#xtick.minor.bottom : True # draw x axis bottom minor ticks - -#ytick.left : True # draw ticks on the left side -#ytick.right : False # draw ticks on the right side -#ytick.major.size : 3.5 # major tick size in points -#ytick.minor.size : 2 # minor tick size in points -#ytick.major.width : 0.8 # major tick width in points -#ytick.minor.width : 0.6 # minor tick width in points -#ytick.major.pad : 3.5 # distance to major tick label in points -#ytick.minor.pad : 3.4 # distance to the minor tick label in points -#ytick.color : k # color of the tick labels -#ytick.labelsize : medium # fontsize of the tick labels -#ytick.direction : out # direction: in, out, or inout -#ytick.minor.visible : False # visibility of minor ticks on y-axis -#ytick.major.left : True # draw y axis left major ticks -#ytick.major.right : True # draw y axis right major ticks -#ytick.minor.left : True # draw y axis left minor ticks -#ytick.minor.right : True # draw y axis right minor ticks - - -### GRIDS -#grid.color : b0b0b0 # grid color -#grid.linestyle : - # solid -#grid.linewidth : 0.8 # in points -#grid.alpha : 1.0 # transparency, between 0.0 and 1.0 - -### Legend -#legend.loc : best -#legend.frameon : True # if True, draw the legend on a background patch -#legend.framealpha : 0.8 # legend patch transparency -#legend.facecolor : inherit # inherit from axes.facecolor; or color spec -#legend.edgecolor : 0.8 # background patch boundary color -#legend.fancybox : True # if True, use a rounded box for the - # legend background, else a rectangle -#legend.shadow : False # if True, give background a shadow effect -#legend.numpoints : 1 # the number of marker points in the legend line -#legend.scatterpoints : 1 # number of scatter points -#legend.markerscale : 1.0 # the relative size of legend markers vs. original -#legend.fontsize : medium -# Dimensions as fraction of fontsize: -#legend.borderpad : 0.4 # border whitespace -#legend.labelspacing : 0.5 # the vertical space between the legend entries -#legend.handlelength : 2.0 # the length of the legend lines -#legend.handleheight : 0.7 # the height of the legend handle -#legend.handletextpad : 0.8 # the space between the legend line and legend text -#legend.borderaxespad : 0.5 # the border between the axes and legend edge -#legend.columnspacing : 2.0 # column separation - -### FIGURE -# See http://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure -#figure.titlesize : large # size of the figure title (Figure.suptitle()) -#figure.titleweight : normal # weight of the figure title -figure.figsize : 11.69,8.27 # figure size in inches +axes.autolimit_mode : data # How to scale axes limits to the data. +axes.xmargin : .00 # x margin. See `axes.Axes.margins` +axes.ymargin : .00 # y margin See `axes.Axes.margins` +xtick.top : False # draw ticks on the top side +xtick.bottom : False # draw ticks on the bottom side +xtick.labelsize : 12 # fontsize of the tick labels +ytick.left : True # draw ticks on the left side +ytick.right : True # draw ticks on the right side +ytick.labelsize : 12 # fontsize of the tick labels +grid.linestyle : : # solid +grid.linewidth : 0.8 # in points +grid.alpha : 0.7 # transparency, between 0.0 and 1.0 +legend.loc : best +legend.frameon : True # if True, draw the legend on a background patch +legend.framealpha : 1 # legend patch transparency +legend.edgecolor : 1 # background patch boundary color +legend.fontsize : 10 +figure.figsize : 4.5,4.5 # figure size in inches figure.dpi : 100 # figure dots per inch -#figure.facecolor : white # figure facecolor; 0.75 is scalar gray -#figure.edgecolor : white # figure edgecolor figure.autolayout : True # When True, automatically adjust subplot - # parameters to make the plot fit the figure -#figure.max_open_warning : 20 # The maximum number of figures to open through - # the pyplot interface before emitting a warning. - # If less than one this feature is disabled. - -# The figure subplot parameters. All dimensions are a fraction of the -#figure.subplot.left : 0.125 # the left side of the subplots of the figure -#figure.subplot.right : 0.9 # the right side of the subplots of the figure -#figure.subplot.bottom : 0.11 # the bottom of the subplots of the figure -#figure.subplot.top : 0.88 # the top of the subplots of the figure -#figure.subplot.wspace : 0.2 # the amount of width reserved for blank space between subplots, - # expressed as a fraction of the average axis width -#figure.subplot.hspace : 0.2 # the amount of height reserved for white space between subplots, - # expressed as a fraction of the average axis height - - -### IMAGES -#image.aspect : equal # equal | auto | a number -#image.interpolation : nearest # see help(imshow) for options -#image.cmap : viridis # A colormap name, gray etc... -#image.lut : 256 # the size of the colormap lookup table -#image.origin : upper # lower | upper -#image.resample : True -#image.composite_image : True # When True, all the images on a set of axes are - # combined into a single composite image before - # saving a figure as a vector graphics file, - # such as a PDF. - -### CONTOUR PLOTS -#contour.negative_linestyle : dashed # dashed | solid -#contour.corner_mask : True # True | False | legacy - -### ERRORBAR PLOTS -#errorbar.capsize : 0 # length of end cap on error bars in pixels - -### HISTOGRAM PLOTS -#hist.bins : 10 # The default number of histogram bins. - # If Numpy 1.11 or later is - # installed, may also be `auto` - -### SCATTER PLOTS -#scatter.marker : o # The default marker type for scatter plots. - -### Agg rendering -### Warning: experimental, 2008/10/10 -#agg.path.chunksize : 0 # 0 to disable; values in the range - # 10000 to 100000 can improve speed slightly - # and prevent an Agg rendering failure - # when plotting very large data sets, - # especially if they are very gappy. - # It may cause minor artifacts, though. - # A value of 20000 is probably a good - # starting point. -### SAVING FIGURES -#path.simplify : True # When True, simplify paths by removing "invisible" - # points to reduce file size and increase rendering - # speed -#path.simplify_threshold : 0.1 # The threshold of similarity below which - # vertices will be removed in the simplification - # process -#path.snap : True # When True, rectilinear axis-aligned paths will be snapped to - # the nearest pixel when certain criteria are met. When False, - # paths will never be snapped. -#path.sketch : None # May be none, or a 3-tuple of the form (scale, length, - # randomness). - # *scale* is the amplitude of the wiggle - # perpendicular to the line (in pixels). *length* - # is the length of the wiggle along the line (in - # pixels). *randomness* is the factor by which - # the length is randomly scaled. - -# the default savefig params can be different from the display params -# e.g., you may want a higher resolution, or to make the figure -# background white -#savefig.dpi : figure # figure dots per inch or 'figure' -#savefig.facecolor : white # figure facecolor when saving -#savefig.edgecolor : white # figure edgecolor when saving -#savefig.format : png # png, ps, pdf, svg -#savefig.bbox : standard # 'tight' or 'standard'. - # 'tight' is incompatible with pipe-based animation - # backends but will workd with temporary file based ones: - # e.g. setting animation.writer to ffmpeg will not work, - # use ffmpeg_file instead -#savefig.pad_inches : 0.1 # Padding to be used when bbox is set to 'tight' -#savefig.jpeg_quality: 95 # when a jpeg is saved, the default quality parameter. -#savefig.directory : ~ # default directory in savefig dialog box, - # leave empty to always use current working directory -#savefig.transparent : False # setting that controls whether figures are saved with a - # transparent background by default - -# tk backend params -#tk.window_focus : False # Maintain shell focus for TkAgg - -# ps backend params -#ps.papersize : letter # auto, letter, legal, ledger, A0-A10, B0-B10 -#ps.useafm : False # use of afm fonts, results in small files -#ps.usedistiller : False # can be: None, ghostscript or xpdf - # Experimental: may produce smaller files. - # xpdf intended for production of publication quality files, - # but requires ghostscript, xpdf and ps2eps -#ps.distiller.res : 6000 # dpi -#ps.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) - -# pdf backend params -#pdf.compression : 6 # integer from 0 to 9 - # 0 disables compression (good for debugging) -#pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) - -# svg backend params -#svg.image_inline : True # write raster image data directly into the svg file -#svg.fonttype : 'path' # How to handle SVG fonts: -# 'none': Assume fonts are installed on the machine where the SVG will be viewed. -# 'path': Embed characters as paths -- supported by most SVG renderers -# 'svgfont': Embed characters as SVG fonts -- supported only by Chrome, -# Opera and Safari -#svg.hashsalt : None # if not None, use this string as hash salt - # instead of uuid4 - -# docstring params -#docstring.hardcopy = False # set this when you want to generate hardcopy docstring - -# Set the verbose flags. This controls how much information -# matplotlib gives you at runtime and where it goes. The verbosity -# levels are: silent, helpful, debug, debug-annoying. Any level is -# inclusive of all the levels below it. If your setting is "debug", -# you'll get all the debug and helpful messages. When submitting -# problems to the mailing-list, please set verbose to "helpful" or "debug" -# and paste the output into your report. -# -# The "fileo" gives the destination for any calls to verbose.report. -# These objects can a filename, or a filehandle like sys.stdout. -# -# You can override the rc default verbosity from the command line by -# giving the flags --verbose-LEVEL where LEVEL is one of the legal -# levels, e.g., --verbose-helpful. -# -# You can access the verbose instance in your code -# from matplotlib import verbose. -#verbose.level : silent # one of silent, helpful, debug, debug-annoying -#verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr - -# Event keys to interact with figures/plots via keyboard. -# Customize these settings according to your needs. -# Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') - -#keymap.fullscreen : f, ctrl+f # toggling -#keymap.home : h, r, home # home or reset mnemonic -#keymap.back : left, c, backspace # forward / backward keys to enable -#keymap.forward : right, v # left handed quick navigation -#keymap.pan : p # pan mnemonic -#keymap.zoom : o # zoom mnemonic -#keymap.save : s # saving current figure -#keymap.quit : ctrl+w, cmd+w # close the current figure -#keymap.grid : g # switching on/off a grid in current axes -#keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') -#keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear') -#keymap.all_axes : a # enable all axes - -# Control location of examples data files -#examples.directory : '' # directory to look in for custom installation - -###ANIMATION settings -#animation.html : 'none' # How to display the animation as HTML in - # the IPython notebook. 'html5' uses - # HTML5 video tag. -#animation.writer : ffmpeg # MovieWriter 'backend' to use -#animation.codec : h264 # Codec to use for writing movie -#animation.bitrate: -1 # Controls size/quality tradeoff for movie. - # -1 implies let utility auto-determine -#animation.frame_format: 'png' # Controls frame format used by temp files -#animation.ffmpeg_path: 'ffmpeg' # Path to ffmpeg binary. Without full path - # $PATH is searched -#animation.ffmpeg_args: '' # Additional arguments to pass to ffmpeg -#animation.avconv_path: 'avconv' # Path to avconv binary. Without full path - # $PATH is searched -#animation.avconv_args: '' # Additional arguments to pass to avconv -#animation.mencoder_path: 'mencoder' - # Path to mencoder binary. Without full path - # $PATH is searched -#animation.mencoder_args: '' # Additional arguments to pass to mencoder -#animation.convert_path: 'convert' # Path to ImageMagick's convert binary. - # On Windows use the full path since convert - # is also the name of a system tool. -