From 1875eff53810713cd7f7efedca74e836eca19b0c Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Thu, 20 Apr 2023 09:33:27 +0200 Subject: [PATCH 01/51] Initial commit TBS parser --- electronicparsers/tbs/__init__.py | 19 +++++ electronicparsers/tbs/__main__.py | 31 +++++++ electronicparsers/tbs/metainfo/__init__.py | 25 ++++++ electronicparsers/tbs/metainfo/tbs.py | 27 ++++++ electronicparsers/tbs/nomad_plugin.yaml | 24 ++++++ electronicparsers/tbs/parser.py | 96 ++++++++++++++++++++++ 6 files changed, 222 insertions(+) create mode 100644 electronicparsers/tbs/__init__.py create mode 100644 electronicparsers/tbs/__main__.py create mode 100644 electronicparsers/tbs/metainfo/__init__.py create mode 100644 electronicparsers/tbs/metainfo/tbs.py create mode 100644 electronicparsers/tbs/nomad_plugin.yaml create mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py new file mode 100644 index 00000000..3a7c6077 --- /dev/null +++ b/electronicparsers/tbs/__init__.py @@ -0,0 +1,19 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py new file mode 100644 index 00000000..eb9d749d --- /dev/null +++ b/electronicparsers/tbs/__main__.py @@ -0,0 +1,31 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import sys +import json +import logging + +from nomad.utils import configure_logging +from nomad.datamodel import EntryArchive +from electronicparsers.tbs import TBSParser + +if __name__ == "__main__": + configure_logging(console_log_level=logging.DEBUG) + archive = EntryArchive() + TBSParser().parse(sys.argv[1], archive, logging) + json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py new file mode 100644 index 00000000..00c810c5 --- /dev/null +++ b/electronicparsers/tbs/metainfo/__init__.py @@ -0,0 +1,25 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from nomad.metainfo import Environment + +from . import tbs + + +m_env = Environment() +m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py new file mode 100644 index 00000000..4f1d8c64 --- /dev/null +++ b/electronicparsers/tbs/metainfo/tbs.py @@ -0,0 +1,27 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) + + +m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml new file mode 100644 index 00000000..e0e1a739 --- /dev/null +++ b/electronicparsers/tbs/nomad_plugin.yaml @@ -0,0 +1,24 @@ +code_category: Atomistic code +code_homepage: https://tight-binding.com/ +code_name: TBS +metadata: + codeCategory: Atomistic code + codeLabel: TBS + codeLabelStyle: All in capitals + codeName: tbs + codeUrl: https://tight-binding.com/ + parserDirName: dependencies/electronic/electronicparsers/tbs/ + parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git + parserSpecific: '' + preamble: '' + status: production + tableOfFiles: '| Input Filename | Description | + + | --- | --- | + + | `*.tbm` | **Mainfile**: output binary file | + + ' +name: parsers/tbs +parser_class_name: electronicparsers.tbs.parser.TBSParser +python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py new file mode 100644 index 00000000..36531e22 --- /dev/null +++ b/electronicparsers/tbs/parser.py @@ -0,0 +1,96 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import logging +import numpy as np + +from nomad.units import ureg +from nomad.parsing.file_parser import TextParser, Quantity +from nomad.datamodel.metainfo.simulation.run import Run, Program +from nomad.datamodel.metainfo.simulation.system import ( + System, Atoms, AtomsGroup +) +from nomad.datamodel.metainfo.simulation.method import ( + Method, AtomParameters, KMesh, Projection +) +from nomad.datamodel.metainfo.simulation.calculation import ( + Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix +) +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint + + +class TBSParser: + level = 1 + + def __init__(self): + self._calculation_type = 'projection' + + def parse_system(self): + """Populates run.system with the input structural parameters. + """ + sec_run = self.archive.run[-1] + sec_system = sec_run.m_create(System) + # Here the key is to populate: + # 1- `Atoms` with the main quantities I wrote + # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + sec_atoms = sec_system.m_create(Atoms) + # sec_atoms.lattice_vectors = ... + # sec_atoms.lattice_vectors_reciprocal = ... + # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] + # sec_atoms.periodic = pbc + # sec_atoms.labels = ... + # sec_atoms.positions = ... + + def parse_method(self): + """Populates run.method with the input methodological parameters. + """ + sec_run = self.archive.run[-1] + sec_method = sec_run.m_create(Method) + + # Here it will be useful to populate `AtomParameters` within Method to account, for + # example, for the orbitals used in the projeciton + + def parse_scc(self): + """Populates run.calculation with the output of the calculation. + """ + sec_run = self.archive.run[-1] + + # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, + # dos, hopping matrices, and everything you think is valuable. + + def init_parser(self): + """Initialize the parsers. + """ + pass + + def parse(self, filepath, archive, logger): + self.filepath = os.path.abspath(filepath) + self.archive = archive + self.maindir = os.path.dirname(self.filepath) + self.logger = logger if logger is not None else logging + + self.init_parser() + + self.parse_system() + self.parse_method() + self.parse_scc() + + workflow = SinglePoint() + self.archive.workflow2 = workflow From 8506d0462c57ecd0329c7859e4e40c877602adca Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Tue, 25 Apr 2023 13:24:29 +0200 Subject: [PATCH 02/51] Changed name from TBS to TBStudio --- electronicparsers/{tbs => tbstudio}/__init__.py | 2 +- electronicparsers/{tbs => tbstudio}/__main__.py | 4 ++-- .../{tbs => tbstudio}/metainfo/__init__.py | 4 ++-- .../tbs.py => tbstudio/metainfo/tbstudio.py} | 0 .../{tbs => tbstudio}/nomad_plugin.yaml | 14 +++++++------- electronicparsers/{tbs => tbstudio}/parser.py | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) rename electronicparsers/{tbs => tbstudio}/__init__.py (94%) rename electronicparsers/{tbs => tbstudio}/__main__.py (89%) rename electronicparsers/{tbs => tbstudio}/metainfo/__init__.py (89%) rename electronicparsers/{tbs/metainfo/tbs.py => tbstudio/metainfo/tbstudio.py} (100%) rename electronicparsers/{tbs => tbstudio}/nomad_plugin.yaml (62%) rename electronicparsers/{tbs => tbstudio}/parser.py (99%) diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbstudio/__init__.py similarity index 94% rename from electronicparsers/tbs/__init__.py rename to electronicparsers/tbstudio/__init__.py index 3a7c6077..df7a64a8 100644 --- a/electronicparsers/tbs/__init__.py +++ b/electronicparsers/tbstudio/__init__.py @@ -16,4 +16,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from .parser import TBSParser +from .parser import TBStudioParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbstudio/__main__.py similarity index 89% rename from electronicparsers/tbs/__main__.py rename to electronicparsers/tbstudio/__main__.py index eb9d749d..810c2833 100644 --- a/electronicparsers/tbs/__main__.py +++ b/electronicparsers/tbstudio/__main__.py @@ -22,10 +22,10 @@ from nomad.utils import configure_logging from nomad.datamodel import EntryArchive -from electronicparsers.tbs import TBSParser +from electronicparsers.tbstudio import TBStudioParser if __name__ == "__main__": configure_logging(console_log_level=logging.DEBUG) archive = EntryArchive() - TBSParser().parse(sys.argv[1], archive, logging) + TBStudioParser().parse(sys.argv[1], archive, logging) json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbstudio/metainfo/__init__.py similarity index 89% rename from electronicparsers/tbs/metainfo/__init__.py rename to electronicparsers/tbstudio/metainfo/__init__.py index 00c810c5..5e96663d 100644 --- a/electronicparsers/tbs/metainfo/__init__.py +++ b/electronicparsers/tbstudio/metainfo/__init__.py @@ -18,8 +18,8 @@ # from nomad.metainfo import Environment -from . import tbs +from . import tbstudio m_env = Environment() -m_env.m_add_sub_section(Environment.packages, tbs.m_package) +m_env.m_add_sub_section(Environment.packages, tbstudio.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbstudio/metainfo/tbstudio.py similarity index 100% rename from electronicparsers/tbs/metainfo/tbs.py rename to electronicparsers/tbstudio/metainfo/tbstudio.py diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbstudio/nomad_plugin.yaml similarity index 62% rename from electronicparsers/tbs/nomad_plugin.yaml rename to electronicparsers/tbstudio/nomad_plugin.yaml index e0e1a739..e45bb825 100644 --- a/electronicparsers/tbs/nomad_plugin.yaml +++ b/electronicparsers/tbstudio/nomad_plugin.yaml @@ -1,13 +1,13 @@ code_category: Atomistic code code_homepage: https://tight-binding.com/ -code_name: TBS +code_name: TBStudio metadata: codeCategory: Atomistic code - codeLabel: TBS + codeLabel: TBStudio codeLabelStyle: All in capitals - codeName: tbs + codeName: tbstudio codeUrl: https://tight-binding.com/ - parserDirName: dependencies/electronic/electronicparsers/tbs/ + parserDirName: dependencies/electronic/electronicparsers/tbstudio/ parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git parserSpecific: '' preamble: '' @@ -19,6 +19,6 @@ metadata: | `*.tbm` | **Mainfile**: output binary file | ' -name: parsers/tbs -parser_class_name: electronicparsers.tbs.parser.TBSParser -python_package: electronicparsers.tbs +name: parsers/tbstudio +parser_class_name: electronicparsers.tbstudio.parser.TBStudioParser +python_package: electronicparsers.tbstudio diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbstudio/parser.py similarity index 99% rename from electronicparsers/tbs/parser.py rename to electronicparsers/tbstudio/parser.py index 36531e22..9e34990a 100644 --- a/electronicparsers/tbs/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -36,7 +36,7 @@ from nomad.datamodel.metainfo.simulation.workflow import SinglePoint -class TBSParser: +class TBStudioParser: level = 1 def __init__(self): From a7e2b33722cad3c80fc248ae6e76a925fc3e4337 Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 15 May 2023 16:59:32 +0200 Subject: [PATCH 03/51] Added tight binding studio parser --- electronicparsers/tbstudio/parser.py | 344 ++++++++++++++++++++++++++- 1 file changed, 335 insertions(+), 9 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 9e34990a..73330173 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -21,6 +21,7 @@ import logging import numpy as np +from matid.data.element_data import get_symbols from nomad.units import ureg from nomad.parsing.file_parser import TextParser, Quantity from nomad.datamodel.metainfo.simulation.run import Run, Program @@ -28,12 +29,302 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Projection + Method, AtomParameters, KMesh, TightBinding ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.workflow import SinglePoint +import json +import re + + +def load_tbm(file): + f = open(file) + tbm = json.load(f) + f.close() + + # validation + application_full_name = None + release_version = None + if 'ApplicationFullName' in tbm and 'ReleaseVersion' in tbm: + application_full_name = tbm['ApplicationFullName'] + release_version = tbm['ReleaseVersion'] + + if application_full_name != 'Tight Binding Studio' or not release_version: + raise Exception('The file is not a valid TBStudio tight binding model.') + + model = {} + + # Load workflow + model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] + + # Load lattice vectors + model['a'] = [tbm['vars']['a[0]'], tbm['vars']['a[1]'], tbm['vars']['a[2]']] + model['b'] = [tbm['vars']['b[0]'], tbm['vars']['b[1]'], tbm['vars']['b[2]']] + model['c'] = [tbm['vars']['c[0]'], tbm['vars']['c[1]'], tbm['vars']['c[2]']] + + # SOC + model['isSOC'] = tbm['checks']['SOC[0]'] + + # Load coordinates + _xyz_coords = tbm['grids']['XYZ_Coords']['value'] + xyz_coords = [] + for r in _xyz_coords: + try: + x = np.float64(r[0]) + y = np.float64(r[1]) + z = np.float64(r[2]) + xyz_coords.append([x, y, z]) + except: + break + model['xyz_coords'] = xyz_coords + + tb_l = 0 + tb_m = 0 + tb_n = 0 + + try: + tb_l = np.int64(tbm['vars']['TBl[0]']) + except: + pass + try: + tb_m = np.int64(tbm['vars']['TBm[0]']) + except: + pass + try: + tb_n = np.int64(tbm['vars']['TBn[0]']) + except: + pass + + model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] + + dim = 0 + for i in model['neighbor_unit_cells']: + if i != 0: + dim = dim + 1 + + if dim == 0: + model['dimension'] = '0D' + elif dim == 1: + model['dimension'] = '1D' + elif dim == 2: + model['dimension'] = '2D' + elif dim == 3: + model['dimension'] = '3D' + + # Load fractional coordinates and kinds + _kabc_coords = tbm['grids']['KABC_Coords']['value'] + kinds = [] + abc_coords = [] + for r in _kabc_coords: + try: + k = np.int64(r[0]) + a = np.float64(r[1]) + b = np.float64(r[2]) + c = np.float64(r[3]) + kinds.append(k) + abc_coords.append([a, b, c]) + except: + break + model['kinds'] = kinds + model['abc_coords'] = abc_coords + + # Load SK model + _os = tbm['grids']['OS']['value'] + _osr = tbm['grids']['OS']['isReadOnly'] + + model['initial_os'] = {} + model['final_os'] = {} + tbAtom = '' + shell = '' + for state, row in zip(_osr, _os): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + os_name = row[0] + orbital_info = re.search("^(.*) \((.*)\)$", os_name) + tbAtom = orbital_info[1] + shell = orbital_info[2] + if tbAtom not in model['initial_os']: + model['initial_os'][tbAtom] = {shell: {}} + else: + if shell not in model['initial_os'][tbAtom]: + model['initial_os'][tbAtom][shell] = {} + if tbAtom not in model['final_os']: + model['final_os'][tbAtom] = {shell: {}} + else: + if shell not in model['final_os'][tbAtom]: + model['final_os'][tbAtom][shell] = {} + else: + orbital = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_os'][tbAtom][shell][orbital] = initial + model['final_os'][tbAtom][shell][orbital] = final + + _sk = tbm['grids']['SK']['value'] + _skr = tbm['grids']['SK']['isReadOnly'] + model['initial_sk'] = {} + model['final_sk'] = {} + tbBond = '' + for state, row in zip(_skr, _sk): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tbBond = row[0] + model['initial_sk'][tbBond] = {} + model['final_sk'][tbBond] = {} + else: + skIntegral = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_sk'][tbBond][skIntegral] = initial + model['final_sk'][tbBond][skIntegral] = final + + _ol = tbm['grids']['OL']['value'] + _olr = tbm['grids']['OL']['isReadOnly'] + model['initial_overlap'] = {} + model['final_overlap'] = {} + tbBond = '' + for state, row in zip(_olr, _ol): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tbBond = row[0] + model['initial_overlap'][tbBond] = {} + model['final_overlap'][tbBond] = {} + else: + skIntegral = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_overlap'][tbBond][skIntegral] = initial + model['final_overlap'][tbBond][skIntegral] = final + + orbitals = [] + lastInd = 0 + for i in range(1, 100): + varName = 'AtomInd{}'.format(i) + orbital = tbm['combos'][varName] + if orbital['selected'] != 0: + lastInd = i + for i in range(1, lastInd + 1): + varName = 'AtomInd{}'.format(i) + orbital = tbm['combos'][varName] + items = orbital["items"] + selected = orbital['selected'] + if selected == 0: + orbitals.append(None) + else: + orbitals.append(items[selected]) + + model['orbitals'] = orbitals + + _k_points = tbm['variables']['KPoints'] + frac_k_points = [] + k_points = [] + k_length = [] + for row in _k_points: + frac_k_points.append([row[0], row[1], row[2]]) + k_points.append([row[3], row[4], row[5]]) + k_length.append(row[6]) + model['frac_k_points'] = frac_k_points + model['k_points'] = k_points + model['k_length'] = k_length + + model['bandSections'] = tbm['variables']['bandSections'] + model['dft_bands'] = tbm['variables']['DFTEigVal'] + model['initial_tb_bands'] = tbm['variables']['iTBEigVal'] + model['final_tb_bands'] = tbm['variables']['fTBEigVal'] + model['fermi_level'] = tbm['variables']['ChemP'] + + tb_unit_cells = tbm['lists']['EssentialUnitcellList'] + model['initial_hamiltonian_matrix'] = {} + model['final_hamiltonian_matrix'] = {} + model['initial_overlap_matrix'] = {} + model['final_overlap_matrix'] = {} + for index, unit_cell in enumerate(tb_unit_cells): + if len(tbm['variables']['Hi']) > index: + model['initial_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hi'][index] + if len(tbm['variables']['Hi']) > index: + model['final_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hf'][index] + if len(tbm['variables']['Si']) > index: + model['initial_overlap_matrix'][unit_cell] = tbm['variables']['Si'][index] + if len(tbm['variables']['Sf']) > index: + model['final_overlap_matrix'][unit_cell] = tbm['variables']['Sf'][index] + + model['initial_soc_matrix'] = {} + model['final_soc_matrix'] = {} + + if len(tbm['variables']['SOCi']) > 0: + model['initial_soc_matrix']['real'] = tbm['variables']['SOCi'][0] + if len(tbm['variables']['SOCi']) > 1: + model['initial_soc_matrix']['image'] = tbm['variables']['SOCi'][1] + if len(tbm['variables']['SOCf']) > 0: + model['final_soc_matrix']['real'] = tbm['variables']['SOCf'][0] + if len(tbm['variables']['SOCf']) > 1: + model['final_soc_matrix']['image'] = tbm['variables']['SOCf'][1] + + model['bonds'] = [] + if 'TB Model' in tbm['trees']['Bonds']: + if 'children' in tbm['trees']['Bonds']['TB Model']: + allBonds = tbm['trees']['Bonds']['TB Model']['children'] + allCells = allBonds.keys() + for cells in allCells: + bonds = allBonds[cells] + cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) + cell1 = cells_info[1] + cell2 = cells_info[2] + is_active = bonds['state'] == 4 + if is_active: + allAtoms = bonds['children'] + for atoms in allAtoms.keys(): + is_bond_active = allAtoms[atoms]['state'] == 4 + if is_bond_active: + atoms_info = re.search("^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) + index1 = atoms_info[1] + shell1 = atoms_info[2] + index2 = atoms_info[3] + shell2 = atoms_info[4] + bond_type = atoms_info[5] + bond = { + "atom1": {"index": index1, "shell": shell1, "cell": cell1}, + "atom2": {"index": index2, "shell": shell2, "cell": cell2}, + "type": bond_type + } + model['bonds'].append(bond) + + return model class TBStudioParser: @@ -51,18 +342,38 @@ def parse_system(self): # 1- `Atoms` with the main quantities I wrote # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model sec_atoms = sec_system.m_create(Atoms) - # sec_atoms.lattice_vectors = ... - # sec_atoms.lattice_vectors_reciprocal = ... - # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] - # sec_atoms.periodic = pbc - # sec_atoms.labels = ... - # sec_atoms.positions = ... + + a = self.tb_model['a'] + b = self.tb_model['b'] + c = self.tb_model['c'] + sec_atoms.lattice_vectors = [a, b, c] + + pi = np.arccos(-1.0) + vol = np.dot(a, np.cross(b, c)) + astar = 2 * pi * np.cross(b, c) / vol + bstar = 2 * pi * np.cross(c, a) / vol + cstar = 2 * pi * np.cross(a, b) / vol + sec_atoms.lattice_vectors_reciprocal = [astar, bstar, cstar] + + sec_atoms.positions = self.tb_model['xyz_coords'] + sec_atoms.species = self.tb_model['kinds'] + + atoms = get_symbols(self.tb_model['kinds']) + sec_atoms.labels = atoms + + atoms = list(set(atoms)) + atoms.sort() + + pbc = [dim != 0 for dim in self.tb_model['neighbor_unit_cells']] + sec_atoms.periodic = pbc + sec_system.pbc = pbc def parse_method(self): """Populates run.method with the input methodological parameters. """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) + sec_dft = sec_method.m_create(SK) # Here it will be useful to populate `AtomParameters` within Method to account, for # example, for the orbitals used in the projeciton @@ -72,8 +383,21 @@ def parse_scc(self): """ sec_run = self.archive.run[-1] - # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, - # dos, hopping matrices, and everything you think is valuable. + tb_bands = self.tb_model['final_tb_bands'] + frac_k_points = self.tb_model['frac_k_points'] + band_segments_points = self.tb_model['bandSections']['index'] + if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: + return + + sec_scc = sec_run.calculation[-1] + + sec_k_band = sec_scc.m_create(BandStructure, Calculation.band_structure_electronic) + sec_k_band.energy_fermi = self.tb_model['fermi_level'] + + for n1, n2 in band_segments_points: + sec_k_band_segment = sec_k_band.m_create(BandEnergies) + sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] + sec_k_band_segment.energies = tb_bands[n1: n2 + 1] def init_parser(self): """Initialize the parsers. @@ -86,6 +410,8 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging + self.tb_model = load_tbm(filepath) + self.init_parser() self.parse_system() From 689733dcd9885c5e3884a0b0042201ff2a106eb9 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 16 May 2023 15:17:13 +0200 Subject: [PATCH 04/51] parse SK method --- electronicparsers/tbstudio/parser.py | 38 ++++++++++++++++++++++----- electronicparsers/wannier90/parser.py | 4 +-- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 73330173..39f74cc9 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -29,7 +29,7 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TightBinding + Method, AtomParameters, KMesh, TightBinding, SlaterKoster, TightBindingOrbital, SlaterKosterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix @@ -331,7 +331,7 @@ class TBStudioParser: level = 1 def __init__(self): - self._calculation_type = 'projection' + self._calculation_type = 'tight binding' def parse_system(self): """Populates run.system with the input structural parameters. @@ -340,7 +340,7 @@ def parse_system(self): sec_system = sec_run.m_create(System) # Here the key is to populate: # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + # 2- `AtomsGroup` (optional) with the info of the atoms used for the tight binding in the tight-binding model sec_atoms = sec_system.m_create(Atoms) a = self.tb_model['a'] @@ -373,10 +373,36 @@ def parse_method(self): """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_dft = sec_method.m_create(SK) + sec_tb = sec_method.m_create(TightBinding) + sec_sk = sec_tb.m_create(SlaterKoster) + + n_orbitals = len(self.tb_model['orbitals']) + orbitals = self.tb_model['orbitals'] + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.bonds) + + for bond in self.tb_model['bonds']: + atom1 = bond['atom1'] + atom2 = bond['atom2'] + type = bond['type'] + h_sk = None + s_sk = None + if self.tb_model['final_sk'] != {}: + h_sk = self.tb_model['final_sk'][type] + if self.tb_model['final_overlap'] != {}: + s_sk = self.tb_model['final_overlap'][type] + + if h_sk is not None: + sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) + sec_bonds.bond_label = type + sec_bonds.index1 = atom1.index + sec_bonds.index2 = atom2.index + if s_sk is not None: + sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) + sec_overlaps.bond_label = type + sec_overlaps.index1 = atom1.index + sec_overlaps.index2 = atom2.index + - # Here it will be useful to populate `AtomParameters` within Method to account, for - # example, for the orbitals used in the projeciton def parse_scc(self): """Populates run.calculation with the output of the calculation. diff --git a/electronicparsers/wannier90/parser.py b/electronicparsers/wannier90/parser.py index c15a1592..686230ae 100644 --- a/electronicparsers/wannier90/parser.py +++ b/electronicparsers/wannier90/parser.py @@ -29,7 +29,7 @@ Calculation, Dos, DosValues, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Wannier, Projection + Method, AtomParameters, KMesh, Wannier, TightBinding ) from nomad.datamodel.metainfo.simulation.system import System, Atoms, AtomsGroup from ..utils import get_files @@ -229,7 +229,7 @@ def parse_system(self): def parse_method(self): sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_proj = sec_method.m_create(Projection) + sec_proj = sec_method.m_create(TightBinding) sec_wann = sec_proj.m_create(Wannier) # k_mesh section From a2848e71e334f1aacb9c46f0be36209958f00f56 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 16 May 2023 17:04:05 +0200 Subject: [PATCH 05/51] fix bugs --- electronicparsers/tbstudio/parser.py | 83 ++++++++++++---------------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 39f74cc9..c20bba02 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -39,6 +39,24 @@ import re +def parse_int(string, default=0): + val = default + try: + val = np.int64(string) + except: + pass + return val + + +def parse_float(string, default=0.0): + val = default + try: + val = np.intfloat64(string) + except: + pass + return val + + def load_tbm(file): f = open(file) tbm = json.load(f) @@ -60,9 +78,9 @@ def load_tbm(file): model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] # Load lattice vectors - model['a'] = [tbm['vars']['a[0]'], tbm['vars']['a[1]'], tbm['vars']['a[2]']] - model['b'] = [tbm['vars']['b[0]'], tbm['vars']['b[1]'], tbm['vars']['b[2]']] - model['c'] = [tbm['vars']['c[0]'], tbm['vars']['c[1]'], tbm['vars']['c[2]']] + model['a'] = [parse_float(tbm['vars']['a[0]']), parse_float(tbm['vars']['a[1]']), parse_float(tbm['vars']['a[2]'])] + model['b'] = [parse_float(tbm['vars']['b[0]']), parse_float(tbm['vars']['b[1]']), parse_float(tbm['vars']['b[2]'])] + model['c'] = [parse_float(tbm['vars']['c[0]']), parse_float(tbm['vars']['c[1]']), parse_float(tbm['vars']['c[2]'])] # SOC model['isSOC'] = tbm['checks']['SOC[0]'] @@ -80,22 +98,9 @@ def load_tbm(file): break model['xyz_coords'] = xyz_coords - tb_l = 0 - tb_m = 0 - tb_n = 0 - - try: - tb_l = np.int64(tbm['vars']['TBl[0]']) - except: - pass - try: - tb_m = np.int64(tbm['vars']['TBm[0]']) - except: - pass - try: - tb_n = np.int64(tbm['vars']['TBn[0]']) - except: - pass + tb_l = parse_int(tbm['vars']['TBl[0]']) + tb_m = parse_int(tbm['vars']['TBm[0]']) + tb_n = parse_int(tbm['vars']['TBn[0]']) model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] @@ -188,17 +193,8 @@ def load_tbm(file): model['final_sk'][tbBond] = {} else: skIntegral = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - + initial = parse_float(row[1]) + final = parse_float(row[2]) model['initial_sk'][tbBond][skIntegral] = initial model['final_sk'][tbBond][skIntegral] = final @@ -217,17 +213,8 @@ def load_tbm(file): model['final_overlap'][tbBond] = {} else: skIntegral = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - + initial = parse_float(row[1]) + final = parse_float(row[2]) model['initial_overlap'][tbBond][skIntegral] = initial model['final_overlap'][tbBond][skIntegral] = final @@ -378,7 +365,7 @@ def parse_method(self): n_orbitals = len(self.tb_model['orbitals']) orbitals = self.tb_model['orbitals'] - sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.bonds) + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) for bond in self.tb_model['bonds']: atom1 = bond['atom1'] @@ -394,20 +381,19 @@ def parse_method(self): if h_sk is not None: sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) sec_bonds.bond_label = type - sec_bonds.index1 = atom1.index - sec_bonds.index2 = atom2.index + sec_bonds.index1 = atom1['index'] + sec_bonds.index2 = atom2['index'] if s_sk is not None: sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) sec_overlaps.bond_label = type - sec_overlaps.index1 = atom1.index - sec_overlaps.index2 = atom2.index - - + sec_overlaps.index1 = atom1['index'] + sec_overlaps.index2 = atom2['index'] def parse_scc(self): """Populates run.calculation with the output of the calculation. """ sec_run = self.archive.run[-1] + self.archive.run[-1].m_create(Calculation) tb_bands = self.tb_model['final_tb_bands'] frac_k_points = self.tb_model['frac_k_points'] @@ -436,6 +422,7 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging + self.archive.m_create(Run) self.tb_model = load_tbm(filepath) self.init_parser() From 189079c4a38380b24cf2544b5aa7ef56d8b3bf34 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 11:07:09 +0200 Subject: [PATCH 06/51] fix bugs --- electronicparsers/tbstudio/parser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index c20bba02..7ef8d7f7 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -351,9 +351,8 @@ def parse_system(self): atoms = list(set(atoms)) atoms.sort() - pbc = [dim != 0 for dim in self.tb_model['neighbor_unit_cells']] + pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] sec_atoms.periodic = pbc - sec_system.pbc = pbc def parse_method(self): """Populates run.method with the input methodological parameters. @@ -409,7 +408,8 @@ def parse_scc(self): for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = tb_bands[n1: n2 + 1] + sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) + print(sec_k_band_segment.energies.shape) def init_parser(self): """Initialize the parsers. From 650564c3d755f39e311220a029c35344c28b4ed4 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 12:57:45 +0200 Subject: [PATCH 07/51] added program name --- electronicparsers/tbstudio/parser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 7ef8d7f7..44dbfff3 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -422,7 +422,8 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging - self.archive.m_create(Run) + sec_run = self.archive.m_create(Run) + sec_run.program = Program(name="TBStudio") self.tb_model = load_tbm(filepath) self.init_parser() From 3a7ac44f372dd6b0de90550a96a069a045db1a55 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Thu, 20 Apr 2023 09:33:27 +0200 Subject: [PATCH 08/51] Initial commit TBS parser --- electronicparsers/tbs/__init__.py | 19 +++++ electronicparsers/tbs/__main__.py | 31 +++++++ electronicparsers/tbs/metainfo/__init__.py | 25 ++++++ electronicparsers/tbs/metainfo/tbs.py | 27 ++++++ electronicparsers/tbs/nomad_plugin.yaml | 24 ++++++ electronicparsers/tbs/parser.py | 96 ++++++++++++++++++++++ 6 files changed, 222 insertions(+) create mode 100644 electronicparsers/tbs/__init__.py create mode 100644 electronicparsers/tbs/__main__.py create mode 100644 electronicparsers/tbs/metainfo/__init__.py create mode 100644 electronicparsers/tbs/metainfo/tbs.py create mode 100644 electronicparsers/tbs/nomad_plugin.yaml create mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py new file mode 100644 index 00000000..3a7c6077 --- /dev/null +++ b/electronicparsers/tbs/__init__.py @@ -0,0 +1,19 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py new file mode 100644 index 00000000..eb9d749d --- /dev/null +++ b/electronicparsers/tbs/__main__.py @@ -0,0 +1,31 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import sys +import json +import logging + +from nomad.utils import configure_logging +from nomad.datamodel import EntryArchive +from electronicparsers.tbs import TBSParser + +if __name__ == "__main__": + configure_logging(console_log_level=logging.DEBUG) + archive = EntryArchive() + TBSParser().parse(sys.argv[1], archive, logging) + json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py new file mode 100644 index 00000000..00c810c5 --- /dev/null +++ b/electronicparsers/tbs/metainfo/__init__.py @@ -0,0 +1,25 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from nomad.metainfo import Environment + +from . import tbs + + +m_env = Environment() +m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py new file mode 100644 index 00000000..4f1d8c64 --- /dev/null +++ b/electronicparsers/tbs/metainfo/tbs.py @@ -0,0 +1,27 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) + + +m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml new file mode 100644 index 00000000..e0e1a739 --- /dev/null +++ b/electronicparsers/tbs/nomad_plugin.yaml @@ -0,0 +1,24 @@ +code_category: Atomistic code +code_homepage: https://tight-binding.com/ +code_name: TBS +metadata: + codeCategory: Atomistic code + codeLabel: TBS + codeLabelStyle: All in capitals + codeName: tbs + codeUrl: https://tight-binding.com/ + parserDirName: dependencies/electronic/electronicparsers/tbs/ + parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git + parserSpecific: '' + preamble: '' + status: production + tableOfFiles: '| Input Filename | Description | + + | --- | --- | + + | `*.tbm` | **Mainfile**: output binary file | + + ' +name: parsers/tbs +parser_class_name: electronicparsers.tbs.parser.TBSParser +python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py new file mode 100644 index 00000000..36531e22 --- /dev/null +++ b/electronicparsers/tbs/parser.py @@ -0,0 +1,96 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import logging +import numpy as np + +from nomad.units import ureg +from nomad.parsing.file_parser import TextParser, Quantity +from nomad.datamodel.metainfo.simulation.run import Run, Program +from nomad.datamodel.metainfo.simulation.system import ( + System, Atoms, AtomsGroup +) +from nomad.datamodel.metainfo.simulation.method import ( + Method, AtomParameters, KMesh, Projection +) +from nomad.datamodel.metainfo.simulation.calculation import ( + Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix +) +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint + + +class TBSParser: + level = 1 + + def __init__(self): + self._calculation_type = 'projection' + + def parse_system(self): + """Populates run.system with the input structural parameters. + """ + sec_run = self.archive.run[-1] + sec_system = sec_run.m_create(System) + # Here the key is to populate: + # 1- `Atoms` with the main quantities I wrote + # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + sec_atoms = sec_system.m_create(Atoms) + # sec_atoms.lattice_vectors = ... + # sec_atoms.lattice_vectors_reciprocal = ... + # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] + # sec_atoms.periodic = pbc + # sec_atoms.labels = ... + # sec_atoms.positions = ... + + def parse_method(self): + """Populates run.method with the input methodological parameters. + """ + sec_run = self.archive.run[-1] + sec_method = sec_run.m_create(Method) + + # Here it will be useful to populate `AtomParameters` within Method to account, for + # example, for the orbitals used in the projeciton + + def parse_scc(self): + """Populates run.calculation with the output of the calculation. + """ + sec_run = self.archive.run[-1] + + # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, + # dos, hopping matrices, and everything you think is valuable. + + def init_parser(self): + """Initialize the parsers. + """ + pass + + def parse(self, filepath, archive, logger): + self.filepath = os.path.abspath(filepath) + self.archive = archive + self.maindir = os.path.dirname(self.filepath) + self.logger = logger if logger is not None else logging + + self.init_parser() + + self.parse_system() + self.parse_method() + self.parse_scc() + + workflow = SinglePoint() + self.archive.workflow2 = workflow From 70d2f65a4324ed4d75829a6c3cea81d52854f49d Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Tue, 25 Apr 2023 13:24:29 +0200 Subject: [PATCH 09/51] Changed name from TBS to TBStudio --- electronicparsers/tbs/__init__.py | 19 -- electronicparsers/tbs/__main__.py | 31 -- electronicparsers/tbs/metainfo/__init__.py | 25 -- electronicparsers/tbs/metainfo/tbs.py | 27 -- electronicparsers/tbs/nomad_plugin.yaml | 24 -- electronicparsers/tbs/parser.py | 96 ------ electronicparsers/tbstudio/parser.py | 366 +-------------------- 7 files changed, 13 insertions(+), 575 deletions(-) delete mode 100644 electronicparsers/tbs/__init__.py delete mode 100644 electronicparsers/tbs/__main__.py delete mode 100644 electronicparsers/tbs/metainfo/__init__.py delete mode 100644 electronicparsers/tbs/metainfo/tbs.py delete mode 100644 electronicparsers/tbs/nomad_plugin.yaml delete mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py deleted file mode 100644 index 3a7c6077..00000000 --- a/electronicparsers/tbs/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py deleted file mode 100644 index eb9d749d..00000000 --- a/electronicparsers/tbs/__main__.py +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import sys -import json -import logging - -from nomad.utils import configure_logging -from nomad.datamodel import EntryArchive -from electronicparsers.tbs import TBSParser - -if __name__ == "__main__": - configure_logging(console_log_level=logging.DEBUG) - archive = EntryArchive() - TBSParser().parse(sys.argv[1], archive, logging) - json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py deleted file mode 100644 index 00c810c5..00000000 --- a/electronicparsers/tbs/metainfo/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from nomad.metainfo import Environment - -from . import tbs - - -m_env = Environment() -m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py deleted file mode 100644 index 4f1d8c64..00000000 --- a/electronicparsers/tbs/metainfo/tbs.py +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import numpy as np # pylint: disable=unused-import -import typing # pylint: disable=unused-import -from nomad.metainfo import ( # pylint: disable=unused-import - MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, - Reference -) - - -m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml deleted file mode 100644 index e0e1a739..00000000 --- a/electronicparsers/tbs/nomad_plugin.yaml +++ /dev/null @@ -1,24 +0,0 @@ -code_category: Atomistic code -code_homepage: https://tight-binding.com/ -code_name: TBS -metadata: - codeCategory: Atomistic code - codeLabel: TBS - codeLabelStyle: All in capitals - codeName: tbs - codeUrl: https://tight-binding.com/ - parserDirName: dependencies/electronic/electronicparsers/tbs/ - parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git - parserSpecific: '' - preamble: '' - status: production - tableOfFiles: '| Input Filename | Description | - - | --- | --- | - - | `*.tbm` | **Mainfile**: output binary file | - - ' -name: parsers/tbs -parser_class_name: electronicparsers.tbs.parser.TBSParser -python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py deleted file mode 100644 index 36531e22..00000000 --- a/electronicparsers/tbs/parser.py +++ /dev/null @@ -1,96 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import os -import logging -import numpy as np - -from nomad.units import ureg -from nomad.parsing.file_parser import TextParser, Quantity -from nomad.datamodel.metainfo.simulation.run import Run, Program -from nomad.datamodel.metainfo.simulation.system import ( - System, Atoms, AtomsGroup -) -from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Projection -) -from nomad.datamodel.metainfo.simulation.calculation import ( - Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix -) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint - - -class TBSParser: - level = 1 - - def __init__(self): - self._calculation_type = 'projection' - - def parse_system(self): - """Populates run.system with the input structural parameters. - """ - sec_run = self.archive.run[-1] - sec_system = sec_run.m_create(System) - # Here the key is to populate: - # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model - sec_atoms = sec_system.m_create(Atoms) - # sec_atoms.lattice_vectors = ... - # sec_atoms.lattice_vectors_reciprocal = ... - # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] - # sec_atoms.periodic = pbc - # sec_atoms.labels = ... - # sec_atoms.positions = ... - - def parse_method(self): - """Populates run.method with the input methodological parameters. - """ - sec_run = self.archive.run[-1] - sec_method = sec_run.m_create(Method) - - # Here it will be useful to populate `AtomParameters` within Method to account, for - # example, for the orbitals used in the projeciton - - def parse_scc(self): - """Populates run.calculation with the output of the calculation. - """ - sec_run = self.archive.run[-1] - - # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, - # dos, hopping matrices, and everything you think is valuable. - - def init_parser(self): - """Initialize the parsers. - """ - pass - - def parse(self, filepath, archive, logger): - self.filepath = os.path.abspath(filepath) - self.archive = archive - self.maindir = os.path.dirname(self.filepath) - self.logger = logger if logger is not None else logging - - self.init_parser() - - self.parse_system() - self.parse_method() - self.parse_scc() - - workflow = SinglePoint() - self.archive.workflow2 = workflow diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 44dbfff3..9e34990a 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -21,7 +21,6 @@ import logging import numpy as np -from matid.data.element_data import get_symbols from nomad.units import ureg from nomad.parsing.file_parser import TextParser, Quantity from nomad.datamodel.metainfo.simulation.run import Run, Program @@ -29,296 +28,19 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TightBinding, SlaterKoster, TightBindingOrbital, SlaterKosterBond + Method, AtomParameters, KMesh, Projection ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.workflow import SinglePoint -import json -import re - - -def parse_int(string, default=0): - val = default - try: - val = np.int64(string) - except: - pass - return val - - -def parse_float(string, default=0.0): - val = default - try: - val = np.intfloat64(string) - except: - pass - return val - - -def load_tbm(file): - f = open(file) - tbm = json.load(f) - f.close() - - # validation - application_full_name = None - release_version = None - if 'ApplicationFullName' in tbm and 'ReleaseVersion' in tbm: - application_full_name = tbm['ApplicationFullName'] - release_version = tbm['ReleaseVersion'] - - if application_full_name != 'Tight Binding Studio' or not release_version: - raise Exception('The file is not a valid TBStudio tight binding model.') - - model = {} - - # Load workflow - model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] - - # Load lattice vectors - model['a'] = [parse_float(tbm['vars']['a[0]']), parse_float(tbm['vars']['a[1]']), parse_float(tbm['vars']['a[2]'])] - model['b'] = [parse_float(tbm['vars']['b[0]']), parse_float(tbm['vars']['b[1]']), parse_float(tbm['vars']['b[2]'])] - model['c'] = [parse_float(tbm['vars']['c[0]']), parse_float(tbm['vars']['c[1]']), parse_float(tbm['vars']['c[2]'])] - - # SOC - model['isSOC'] = tbm['checks']['SOC[0]'] - - # Load coordinates - _xyz_coords = tbm['grids']['XYZ_Coords']['value'] - xyz_coords = [] - for r in _xyz_coords: - try: - x = np.float64(r[0]) - y = np.float64(r[1]) - z = np.float64(r[2]) - xyz_coords.append([x, y, z]) - except: - break - model['xyz_coords'] = xyz_coords - - tb_l = parse_int(tbm['vars']['TBl[0]']) - tb_m = parse_int(tbm['vars']['TBm[0]']) - tb_n = parse_int(tbm['vars']['TBn[0]']) - - model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] - - dim = 0 - for i in model['neighbor_unit_cells']: - if i != 0: - dim = dim + 1 - - if dim == 0: - model['dimension'] = '0D' - elif dim == 1: - model['dimension'] = '1D' - elif dim == 2: - model['dimension'] = '2D' - elif dim == 3: - model['dimension'] = '3D' - - # Load fractional coordinates and kinds - _kabc_coords = tbm['grids']['KABC_Coords']['value'] - kinds = [] - abc_coords = [] - for r in _kabc_coords: - try: - k = np.int64(r[0]) - a = np.float64(r[1]) - b = np.float64(r[2]) - c = np.float64(r[3]) - kinds.append(k) - abc_coords.append([a, b, c]) - except: - break - model['kinds'] = kinds - model['abc_coords'] = abc_coords - - # Load SK model - _os = tbm['grids']['OS']['value'] - _osr = tbm['grids']['OS']['isReadOnly'] - - model['initial_os'] = {} - model['final_os'] = {} - tbAtom = '' - shell = '' - for state, row in zip(_osr, _os): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - os_name = row[0] - orbital_info = re.search("^(.*) \((.*)\)$", os_name) - tbAtom = orbital_info[1] - shell = orbital_info[2] - if tbAtom not in model['initial_os']: - model['initial_os'][tbAtom] = {shell: {}} - else: - if shell not in model['initial_os'][tbAtom]: - model['initial_os'][tbAtom][shell] = {} - if tbAtom not in model['final_os']: - model['final_os'][tbAtom] = {shell: {}} - else: - if shell not in model['final_os'][tbAtom]: - model['final_os'][tbAtom][shell] = {} - else: - orbital = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - - model['initial_os'][tbAtom][shell][orbital] = initial - model['final_os'][tbAtom][shell][orbital] = final - - _sk = tbm['grids']['SK']['value'] - _skr = tbm['grids']['SK']['isReadOnly'] - model['initial_sk'] = {} - model['final_sk'] = {} - tbBond = '' - for state, row in zip(_skr, _sk): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - tbBond = row[0] - model['initial_sk'][tbBond] = {} - model['final_sk'][tbBond] = {} - else: - skIntegral = row[0] - initial = parse_float(row[1]) - final = parse_float(row[2]) - model['initial_sk'][tbBond][skIntegral] = initial - model['final_sk'][tbBond][skIntegral] = final - - _ol = tbm['grids']['OL']['value'] - _olr = tbm['grids']['OL']['isReadOnly'] - model['initial_overlap'] = {} - model['final_overlap'] = {} - tbBond = '' - for state, row in zip(_olr, _ol): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - tbBond = row[0] - model['initial_overlap'][tbBond] = {} - model['final_overlap'][tbBond] = {} - else: - skIntegral = row[0] - initial = parse_float(row[1]) - final = parse_float(row[2]) - model['initial_overlap'][tbBond][skIntegral] = initial - model['final_overlap'][tbBond][skIntegral] = final - - orbitals = [] - lastInd = 0 - for i in range(1, 100): - varName = 'AtomInd{}'.format(i) - orbital = tbm['combos'][varName] - if orbital['selected'] != 0: - lastInd = i - for i in range(1, lastInd + 1): - varName = 'AtomInd{}'.format(i) - orbital = tbm['combos'][varName] - items = orbital["items"] - selected = orbital['selected'] - if selected == 0: - orbitals.append(None) - else: - orbitals.append(items[selected]) - - model['orbitals'] = orbitals - - _k_points = tbm['variables']['KPoints'] - frac_k_points = [] - k_points = [] - k_length = [] - for row in _k_points: - frac_k_points.append([row[0], row[1], row[2]]) - k_points.append([row[3], row[4], row[5]]) - k_length.append(row[6]) - model['frac_k_points'] = frac_k_points - model['k_points'] = k_points - model['k_length'] = k_length - - model['bandSections'] = tbm['variables']['bandSections'] - model['dft_bands'] = tbm['variables']['DFTEigVal'] - model['initial_tb_bands'] = tbm['variables']['iTBEigVal'] - model['final_tb_bands'] = tbm['variables']['fTBEigVal'] - model['fermi_level'] = tbm['variables']['ChemP'] - - tb_unit_cells = tbm['lists']['EssentialUnitcellList'] - model['initial_hamiltonian_matrix'] = {} - model['final_hamiltonian_matrix'] = {} - model['initial_overlap_matrix'] = {} - model['final_overlap_matrix'] = {} - for index, unit_cell in enumerate(tb_unit_cells): - if len(tbm['variables']['Hi']) > index: - model['initial_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hi'][index] - if len(tbm['variables']['Hi']) > index: - model['final_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hf'][index] - if len(tbm['variables']['Si']) > index: - model['initial_overlap_matrix'][unit_cell] = tbm['variables']['Si'][index] - if len(tbm['variables']['Sf']) > index: - model['final_overlap_matrix'][unit_cell] = tbm['variables']['Sf'][index] - - model['initial_soc_matrix'] = {} - model['final_soc_matrix'] = {} - - if len(tbm['variables']['SOCi']) > 0: - model['initial_soc_matrix']['real'] = tbm['variables']['SOCi'][0] - if len(tbm['variables']['SOCi']) > 1: - model['initial_soc_matrix']['image'] = tbm['variables']['SOCi'][1] - if len(tbm['variables']['SOCf']) > 0: - model['final_soc_matrix']['real'] = tbm['variables']['SOCf'][0] - if len(tbm['variables']['SOCf']) > 1: - model['final_soc_matrix']['image'] = tbm['variables']['SOCf'][1] - - model['bonds'] = [] - if 'TB Model' in tbm['trees']['Bonds']: - if 'children' in tbm['trees']['Bonds']['TB Model']: - allBonds = tbm['trees']['Bonds']['TB Model']['children'] - allCells = allBonds.keys() - for cells in allCells: - bonds = allBonds[cells] - cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) - cell1 = cells_info[1] - cell2 = cells_info[2] - is_active = bonds['state'] == 4 - if is_active: - allAtoms = bonds['children'] - for atoms in allAtoms.keys(): - is_bond_active = allAtoms[atoms]['state'] == 4 - if is_bond_active: - atoms_info = re.search("^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) - index1 = atoms_info[1] - shell1 = atoms_info[2] - index2 = atoms_info[3] - shell2 = atoms_info[4] - bond_type = atoms_info[5] - bond = { - "atom1": {"index": index1, "shell": shell1, "cell": cell1}, - "atom2": {"index": index2, "shell": shell2, "cell": cell2}, - "type": bond_type - } - model['bonds'].append(bond) - - return model class TBStudioParser: level = 1 def __init__(self): - self._calculation_type = 'tight binding' + self._calculation_type = 'projection' def parse_system(self): """Populates run.system with the input structural parameters. @@ -327,89 +49,31 @@ def parse_system(self): sec_system = sec_run.m_create(System) # Here the key is to populate: # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the tight binding in the tight-binding model + # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model sec_atoms = sec_system.m_create(Atoms) - - a = self.tb_model['a'] - b = self.tb_model['b'] - c = self.tb_model['c'] - sec_atoms.lattice_vectors = [a, b, c] - - pi = np.arccos(-1.0) - vol = np.dot(a, np.cross(b, c)) - astar = 2 * pi * np.cross(b, c) / vol - bstar = 2 * pi * np.cross(c, a) / vol - cstar = 2 * pi * np.cross(a, b) / vol - sec_atoms.lattice_vectors_reciprocal = [astar, bstar, cstar] - - sec_atoms.positions = self.tb_model['xyz_coords'] - sec_atoms.species = self.tb_model['kinds'] - - atoms = get_symbols(self.tb_model['kinds']) - sec_atoms.labels = atoms - - atoms = list(set(atoms)) - atoms.sort() - - pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] - sec_atoms.periodic = pbc + # sec_atoms.lattice_vectors = ... + # sec_atoms.lattice_vectors_reciprocal = ... + # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] + # sec_atoms.periodic = pbc + # sec_atoms.labels = ... + # sec_atoms.positions = ... def parse_method(self): """Populates run.method with the input methodological parameters. """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_tb = sec_method.m_create(TightBinding) - sec_sk = sec_tb.m_create(SlaterKoster) - - n_orbitals = len(self.tb_model['orbitals']) - orbitals = self.tb_model['orbitals'] - sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) - for bond in self.tb_model['bonds']: - atom1 = bond['atom1'] - atom2 = bond['atom2'] - type = bond['type'] - h_sk = None - s_sk = None - if self.tb_model['final_sk'] != {}: - h_sk = self.tb_model['final_sk'][type] - if self.tb_model['final_overlap'] != {}: - s_sk = self.tb_model['final_overlap'][type] - - if h_sk is not None: - sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) - sec_bonds.bond_label = type - sec_bonds.index1 = atom1['index'] - sec_bonds.index2 = atom2['index'] - if s_sk is not None: - sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) - sec_overlaps.bond_label = type - sec_overlaps.index1 = atom1['index'] - sec_overlaps.index2 = atom2['index'] + # Here it will be useful to populate `AtomParameters` within Method to account, for + # example, for the orbitals used in the projeciton def parse_scc(self): """Populates run.calculation with the output of the calculation. """ sec_run = self.archive.run[-1] - self.archive.run[-1].m_create(Calculation) - - tb_bands = self.tb_model['final_tb_bands'] - frac_k_points = self.tb_model['frac_k_points'] - band_segments_points = self.tb_model['bandSections']['index'] - if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: - return - - sec_scc = sec_run.calculation[-1] - sec_k_band = sec_scc.m_create(BandStructure, Calculation.band_structure_electronic) - sec_k_band.energy_fermi = self.tb_model['fermi_level'] - - for n1, n2 in band_segments_points: - sec_k_band_segment = sec_k_band.m_create(BandEnergies) - sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) - print(sec_k_band_segment.energies.shape) + # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, + # dos, hopping matrices, and everything you think is valuable. def init_parser(self): """Initialize the parsers. @@ -422,10 +86,6 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging - sec_run = self.archive.m_create(Run) - sec_run.program = Program(name="TBStudio") - self.tb_model = load_tbm(filepath) - self.init_parser() self.parse_system() From 92ba6fdd2dcd8e6ac79201e416114c389e1d251e Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 15 May 2023 16:59:32 +0200 Subject: [PATCH 10/51] Added tight binding studio parser --- electronicparsers/tbstudio/parser.py | 344 ++++++++++++++++++++++++++- 1 file changed, 335 insertions(+), 9 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 9e34990a..73330173 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -21,6 +21,7 @@ import logging import numpy as np +from matid.data.element_data import get_symbols from nomad.units import ureg from nomad.parsing.file_parser import TextParser, Quantity from nomad.datamodel.metainfo.simulation.run import Run, Program @@ -28,12 +29,302 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Projection + Method, AtomParameters, KMesh, TightBinding ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.workflow import SinglePoint +import json +import re + + +def load_tbm(file): + f = open(file) + tbm = json.load(f) + f.close() + + # validation + application_full_name = None + release_version = None + if 'ApplicationFullName' in tbm and 'ReleaseVersion' in tbm: + application_full_name = tbm['ApplicationFullName'] + release_version = tbm['ReleaseVersion'] + + if application_full_name != 'Tight Binding Studio' or not release_version: + raise Exception('The file is not a valid TBStudio tight binding model.') + + model = {} + + # Load workflow + model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] + + # Load lattice vectors + model['a'] = [tbm['vars']['a[0]'], tbm['vars']['a[1]'], tbm['vars']['a[2]']] + model['b'] = [tbm['vars']['b[0]'], tbm['vars']['b[1]'], tbm['vars']['b[2]']] + model['c'] = [tbm['vars']['c[0]'], tbm['vars']['c[1]'], tbm['vars']['c[2]']] + + # SOC + model['isSOC'] = tbm['checks']['SOC[0]'] + + # Load coordinates + _xyz_coords = tbm['grids']['XYZ_Coords']['value'] + xyz_coords = [] + for r in _xyz_coords: + try: + x = np.float64(r[0]) + y = np.float64(r[1]) + z = np.float64(r[2]) + xyz_coords.append([x, y, z]) + except: + break + model['xyz_coords'] = xyz_coords + + tb_l = 0 + tb_m = 0 + tb_n = 0 + + try: + tb_l = np.int64(tbm['vars']['TBl[0]']) + except: + pass + try: + tb_m = np.int64(tbm['vars']['TBm[0]']) + except: + pass + try: + tb_n = np.int64(tbm['vars']['TBn[0]']) + except: + pass + + model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] + + dim = 0 + for i in model['neighbor_unit_cells']: + if i != 0: + dim = dim + 1 + + if dim == 0: + model['dimension'] = '0D' + elif dim == 1: + model['dimension'] = '1D' + elif dim == 2: + model['dimension'] = '2D' + elif dim == 3: + model['dimension'] = '3D' + + # Load fractional coordinates and kinds + _kabc_coords = tbm['grids']['KABC_Coords']['value'] + kinds = [] + abc_coords = [] + for r in _kabc_coords: + try: + k = np.int64(r[0]) + a = np.float64(r[1]) + b = np.float64(r[2]) + c = np.float64(r[3]) + kinds.append(k) + abc_coords.append([a, b, c]) + except: + break + model['kinds'] = kinds + model['abc_coords'] = abc_coords + + # Load SK model + _os = tbm['grids']['OS']['value'] + _osr = tbm['grids']['OS']['isReadOnly'] + + model['initial_os'] = {} + model['final_os'] = {} + tbAtom = '' + shell = '' + for state, row in zip(_osr, _os): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + os_name = row[0] + orbital_info = re.search("^(.*) \((.*)\)$", os_name) + tbAtom = orbital_info[1] + shell = orbital_info[2] + if tbAtom not in model['initial_os']: + model['initial_os'][tbAtom] = {shell: {}} + else: + if shell not in model['initial_os'][tbAtom]: + model['initial_os'][tbAtom][shell] = {} + if tbAtom not in model['final_os']: + model['final_os'][tbAtom] = {shell: {}} + else: + if shell not in model['final_os'][tbAtom]: + model['final_os'][tbAtom][shell] = {} + else: + orbital = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_os'][tbAtom][shell][orbital] = initial + model['final_os'][tbAtom][shell][orbital] = final + + _sk = tbm['grids']['SK']['value'] + _skr = tbm['grids']['SK']['isReadOnly'] + model['initial_sk'] = {} + model['final_sk'] = {} + tbBond = '' + for state, row in zip(_skr, _sk): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tbBond = row[0] + model['initial_sk'][tbBond] = {} + model['final_sk'][tbBond] = {} + else: + skIntegral = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_sk'][tbBond][skIntegral] = initial + model['final_sk'][tbBond][skIntegral] = final + + _ol = tbm['grids']['OL']['value'] + _olr = tbm['grids']['OL']['isReadOnly'] + model['initial_overlap'] = {} + model['final_overlap'] = {} + tbBond = '' + for state, row in zip(_olr, _ol): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tbBond = row[0] + model['initial_overlap'][tbBond] = {} + model['final_overlap'][tbBond] = {} + else: + skIntegral = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_overlap'][tbBond][skIntegral] = initial + model['final_overlap'][tbBond][skIntegral] = final + + orbitals = [] + lastInd = 0 + for i in range(1, 100): + varName = 'AtomInd{}'.format(i) + orbital = tbm['combos'][varName] + if orbital['selected'] != 0: + lastInd = i + for i in range(1, lastInd + 1): + varName = 'AtomInd{}'.format(i) + orbital = tbm['combos'][varName] + items = orbital["items"] + selected = orbital['selected'] + if selected == 0: + orbitals.append(None) + else: + orbitals.append(items[selected]) + + model['orbitals'] = orbitals + + _k_points = tbm['variables']['KPoints'] + frac_k_points = [] + k_points = [] + k_length = [] + for row in _k_points: + frac_k_points.append([row[0], row[1], row[2]]) + k_points.append([row[3], row[4], row[5]]) + k_length.append(row[6]) + model['frac_k_points'] = frac_k_points + model['k_points'] = k_points + model['k_length'] = k_length + + model['bandSections'] = tbm['variables']['bandSections'] + model['dft_bands'] = tbm['variables']['DFTEigVal'] + model['initial_tb_bands'] = tbm['variables']['iTBEigVal'] + model['final_tb_bands'] = tbm['variables']['fTBEigVal'] + model['fermi_level'] = tbm['variables']['ChemP'] + + tb_unit_cells = tbm['lists']['EssentialUnitcellList'] + model['initial_hamiltonian_matrix'] = {} + model['final_hamiltonian_matrix'] = {} + model['initial_overlap_matrix'] = {} + model['final_overlap_matrix'] = {} + for index, unit_cell in enumerate(tb_unit_cells): + if len(tbm['variables']['Hi']) > index: + model['initial_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hi'][index] + if len(tbm['variables']['Hi']) > index: + model['final_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hf'][index] + if len(tbm['variables']['Si']) > index: + model['initial_overlap_matrix'][unit_cell] = tbm['variables']['Si'][index] + if len(tbm['variables']['Sf']) > index: + model['final_overlap_matrix'][unit_cell] = tbm['variables']['Sf'][index] + + model['initial_soc_matrix'] = {} + model['final_soc_matrix'] = {} + + if len(tbm['variables']['SOCi']) > 0: + model['initial_soc_matrix']['real'] = tbm['variables']['SOCi'][0] + if len(tbm['variables']['SOCi']) > 1: + model['initial_soc_matrix']['image'] = tbm['variables']['SOCi'][1] + if len(tbm['variables']['SOCf']) > 0: + model['final_soc_matrix']['real'] = tbm['variables']['SOCf'][0] + if len(tbm['variables']['SOCf']) > 1: + model['final_soc_matrix']['image'] = tbm['variables']['SOCf'][1] + + model['bonds'] = [] + if 'TB Model' in tbm['trees']['Bonds']: + if 'children' in tbm['trees']['Bonds']['TB Model']: + allBonds = tbm['trees']['Bonds']['TB Model']['children'] + allCells = allBonds.keys() + for cells in allCells: + bonds = allBonds[cells] + cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) + cell1 = cells_info[1] + cell2 = cells_info[2] + is_active = bonds['state'] == 4 + if is_active: + allAtoms = bonds['children'] + for atoms in allAtoms.keys(): + is_bond_active = allAtoms[atoms]['state'] == 4 + if is_bond_active: + atoms_info = re.search("^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) + index1 = atoms_info[1] + shell1 = atoms_info[2] + index2 = atoms_info[3] + shell2 = atoms_info[4] + bond_type = atoms_info[5] + bond = { + "atom1": {"index": index1, "shell": shell1, "cell": cell1}, + "atom2": {"index": index2, "shell": shell2, "cell": cell2}, + "type": bond_type + } + model['bonds'].append(bond) + + return model class TBStudioParser: @@ -51,18 +342,38 @@ def parse_system(self): # 1- `Atoms` with the main quantities I wrote # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model sec_atoms = sec_system.m_create(Atoms) - # sec_atoms.lattice_vectors = ... - # sec_atoms.lattice_vectors_reciprocal = ... - # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] - # sec_atoms.periodic = pbc - # sec_atoms.labels = ... - # sec_atoms.positions = ... + + a = self.tb_model['a'] + b = self.tb_model['b'] + c = self.tb_model['c'] + sec_atoms.lattice_vectors = [a, b, c] + + pi = np.arccos(-1.0) + vol = np.dot(a, np.cross(b, c)) + astar = 2 * pi * np.cross(b, c) / vol + bstar = 2 * pi * np.cross(c, a) / vol + cstar = 2 * pi * np.cross(a, b) / vol + sec_atoms.lattice_vectors_reciprocal = [astar, bstar, cstar] + + sec_atoms.positions = self.tb_model['xyz_coords'] + sec_atoms.species = self.tb_model['kinds'] + + atoms = get_symbols(self.tb_model['kinds']) + sec_atoms.labels = atoms + + atoms = list(set(atoms)) + atoms.sort() + + pbc = [dim != 0 for dim in self.tb_model['neighbor_unit_cells']] + sec_atoms.periodic = pbc + sec_system.pbc = pbc def parse_method(self): """Populates run.method with the input methodological parameters. """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) + sec_dft = sec_method.m_create(SK) # Here it will be useful to populate `AtomParameters` within Method to account, for # example, for the orbitals used in the projeciton @@ -72,8 +383,21 @@ def parse_scc(self): """ sec_run = self.archive.run[-1] - # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, - # dos, hopping matrices, and everything you think is valuable. + tb_bands = self.tb_model['final_tb_bands'] + frac_k_points = self.tb_model['frac_k_points'] + band_segments_points = self.tb_model['bandSections']['index'] + if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: + return + + sec_scc = sec_run.calculation[-1] + + sec_k_band = sec_scc.m_create(BandStructure, Calculation.band_structure_electronic) + sec_k_band.energy_fermi = self.tb_model['fermi_level'] + + for n1, n2 in band_segments_points: + sec_k_band_segment = sec_k_band.m_create(BandEnergies) + sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] + sec_k_band_segment.energies = tb_bands[n1: n2 + 1] def init_parser(self): """Initialize the parsers. @@ -86,6 +410,8 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging + self.tb_model = load_tbm(filepath) + self.init_parser() self.parse_system() From 212e7d4b2033cc578d45791939e4a293a1ffa704 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 16 May 2023 15:17:13 +0200 Subject: [PATCH 11/51] parse SK method --- electronicparsers/tbstudio/parser.py | 38 +++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 73330173..39f74cc9 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -29,7 +29,7 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TightBinding + Method, AtomParameters, KMesh, TightBinding, SlaterKoster, TightBindingOrbital, SlaterKosterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix @@ -331,7 +331,7 @@ class TBStudioParser: level = 1 def __init__(self): - self._calculation_type = 'projection' + self._calculation_type = 'tight binding' def parse_system(self): """Populates run.system with the input structural parameters. @@ -340,7 +340,7 @@ def parse_system(self): sec_system = sec_run.m_create(System) # Here the key is to populate: # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + # 2- `AtomsGroup` (optional) with the info of the atoms used for the tight binding in the tight-binding model sec_atoms = sec_system.m_create(Atoms) a = self.tb_model['a'] @@ -373,10 +373,36 @@ def parse_method(self): """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_dft = sec_method.m_create(SK) + sec_tb = sec_method.m_create(TightBinding) + sec_sk = sec_tb.m_create(SlaterKoster) + + n_orbitals = len(self.tb_model['orbitals']) + orbitals = self.tb_model['orbitals'] + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.bonds) + + for bond in self.tb_model['bonds']: + atom1 = bond['atom1'] + atom2 = bond['atom2'] + type = bond['type'] + h_sk = None + s_sk = None + if self.tb_model['final_sk'] != {}: + h_sk = self.tb_model['final_sk'][type] + if self.tb_model['final_overlap'] != {}: + s_sk = self.tb_model['final_overlap'][type] + + if h_sk is not None: + sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) + sec_bonds.bond_label = type + sec_bonds.index1 = atom1.index + sec_bonds.index2 = atom2.index + if s_sk is not None: + sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) + sec_overlaps.bond_label = type + sec_overlaps.index1 = atom1.index + sec_overlaps.index2 = atom2.index + - # Here it will be useful to populate `AtomParameters` within Method to account, for - # example, for the orbitals used in the projeciton def parse_scc(self): """Populates run.calculation with the output of the calculation. From 2f853e4402bf173e1bbff74bd84f05695a91bef6 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 16 May 2023 17:04:05 +0200 Subject: [PATCH 12/51] fix bugs --- electronicparsers/tbstudio/parser.py | 83 ++++++++++++---------------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 39f74cc9..c20bba02 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -39,6 +39,24 @@ import re +def parse_int(string, default=0): + val = default + try: + val = np.int64(string) + except: + pass + return val + + +def parse_float(string, default=0.0): + val = default + try: + val = np.intfloat64(string) + except: + pass + return val + + def load_tbm(file): f = open(file) tbm = json.load(f) @@ -60,9 +78,9 @@ def load_tbm(file): model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] # Load lattice vectors - model['a'] = [tbm['vars']['a[0]'], tbm['vars']['a[1]'], tbm['vars']['a[2]']] - model['b'] = [tbm['vars']['b[0]'], tbm['vars']['b[1]'], tbm['vars']['b[2]']] - model['c'] = [tbm['vars']['c[0]'], tbm['vars']['c[1]'], tbm['vars']['c[2]']] + model['a'] = [parse_float(tbm['vars']['a[0]']), parse_float(tbm['vars']['a[1]']), parse_float(tbm['vars']['a[2]'])] + model['b'] = [parse_float(tbm['vars']['b[0]']), parse_float(tbm['vars']['b[1]']), parse_float(tbm['vars']['b[2]'])] + model['c'] = [parse_float(tbm['vars']['c[0]']), parse_float(tbm['vars']['c[1]']), parse_float(tbm['vars']['c[2]'])] # SOC model['isSOC'] = tbm['checks']['SOC[0]'] @@ -80,22 +98,9 @@ def load_tbm(file): break model['xyz_coords'] = xyz_coords - tb_l = 0 - tb_m = 0 - tb_n = 0 - - try: - tb_l = np.int64(tbm['vars']['TBl[0]']) - except: - pass - try: - tb_m = np.int64(tbm['vars']['TBm[0]']) - except: - pass - try: - tb_n = np.int64(tbm['vars']['TBn[0]']) - except: - pass + tb_l = parse_int(tbm['vars']['TBl[0]']) + tb_m = parse_int(tbm['vars']['TBm[0]']) + tb_n = parse_int(tbm['vars']['TBn[0]']) model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] @@ -188,17 +193,8 @@ def load_tbm(file): model['final_sk'][tbBond] = {} else: skIntegral = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - + initial = parse_float(row[1]) + final = parse_float(row[2]) model['initial_sk'][tbBond][skIntegral] = initial model['final_sk'][tbBond][skIntegral] = final @@ -217,17 +213,8 @@ def load_tbm(file): model['final_overlap'][tbBond] = {} else: skIntegral = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - + initial = parse_float(row[1]) + final = parse_float(row[2]) model['initial_overlap'][tbBond][skIntegral] = initial model['final_overlap'][tbBond][skIntegral] = final @@ -378,7 +365,7 @@ def parse_method(self): n_orbitals = len(self.tb_model['orbitals']) orbitals = self.tb_model['orbitals'] - sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.bonds) + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) for bond in self.tb_model['bonds']: atom1 = bond['atom1'] @@ -394,20 +381,19 @@ def parse_method(self): if h_sk is not None: sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) sec_bonds.bond_label = type - sec_bonds.index1 = atom1.index - sec_bonds.index2 = atom2.index + sec_bonds.index1 = atom1['index'] + sec_bonds.index2 = atom2['index'] if s_sk is not None: sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) sec_overlaps.bond_label = type - sec_overlaps.index1 = atom1.index - sec_overlaps.index2 = atom2.index - - + sec_overlaps.index1 = atom1['index'] + sec_overlaps.index2 = atom2['index'] def parse_scc(self): """Populates run.calculation with the output of the calculation. """ sec_run = self.archive.run[-1] + self.archive.run[-1].m_create(Calculation) tb_bands = self.tb_model['final_tb_bands'] frac_k_points = self.tb_model['frac_k_points'] @@ -436,6 +422,7 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging + self.archive.m_create(Run) self.tb_model = load_tbm(filepath) self.init_parser() From bc002dfb70b727dd2aa2bc9a19a061266881f7e3 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 11:07:09 +0200 Subject: [PATCH 13/51] fix bugs --- electronicparsers/tbstudio/parser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index c20bba02..7ef8d7f7 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -351,9 +351,8 @@ def parse_system(self): atoms = list(set(atoms)) atoms.sort() - pbc = [dim != 0 for dim in self.tb_model['neighbor_unit_cells']] + pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] sec_atoms.periodic = pbc - sec_system.pbc = pbc def parse_method(self): """Populates run.method with the input methodological parameters. @@ -409,7 +408,8 @@ def parse_scc(self): for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = tb_bands[n1: n2 + 1] + sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) + print(sec_k_band_segment.energies.shape) def init_parser(self): """Initialize the parsers. From 8247e82e1cc3649389222a3a8c14e90cde70c292 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 16:54:21 +0200 Subject: [PATCH 14/51] Added dft-to-tb workflow --- electronicparsers/tbstudio/parser.py | 90 ++++++++++++++++------------ 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 7ef8d7f7..bcaf127b 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -34,12 +34,13 @@ from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint, SimulationWorkflow +from nomad.datamodel.metainfo.workflow2 import TaskReference, Link import json import re -def parse_int(string, default=0): +def parse_int(string, default): val = default try: val = np.int64(string) @@ -48,10 +49,10 @@ def parse_int(string, default=0): return val -def parse_float(string, default=0.0): +def parse_float(string, default): val = default try: - val = np.intfloat64(string) + val = np.float64(string) except: pass return val @@ -78,9 +79,9 @@ def load_tbm(file): model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] # Load lattice vectors - model['a'] = [parse_float(tbm['vars']['a[0]']), parse_float(tbm['vars']['a[1]']), parse_float(tbm['vars']['a[2]'])] - model['b'] = [parse_float(tbm['vars']['b[0]']), parse_float(tbm['vars']['b[1]']), parse_float(tbm['vars']['b[2]'])] - model['c'] = [parse_float(tbm['vars']['c[0]']), parse_float(tbm['vars']['c[1]']), parse_float(tbm['vars']['c[2]'])] + model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] + model['b'] = [parse_float(tbm['vars']['b[0]'], 0), parse_float(tbm['vars']['b[1]'], 0), parse_float(tbm['vars']['b[2]'], 0)] + model['c'] = [parse_float(tbm['vars']['c[0]'], 0), parse_float(tbm['vars']['c[1]'], 0), parse_float(tbm['vars']['c[2]'], 0)] # SOC model['isSOC'] = tbm['checks']['SOC[0]'] @@ -98,9 +99,9 @@ def load_tbm(file): break model['xyz_coords'] = xyz_coords - tb_l = parse_int(tbm['vars']['TBl[0]']) - tb_m = parse_int(tbm['vars']['TBm[0]']) - tb_n = parse_int(tbm['vars']['TBn[0]']) + tb_l = parse_int(tbm['vars']['TBl[0]'], 0) + tb_m = parse_int(tbm['vars']['TBm[0]'], 0) + tb_n = parse_int(tbm['vars']['TBn[0]'], 0) model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] @@ -193,8 +194,8 @@ def load_tbm(file): model['final_sk'][tbBond] = {} else: skIntegral = row[0] - initial = parse_float(row[1]) - final = parse_float(row[2]) + initial = parse_float(row[1], 0) + final = parse_float(row[2], 0) model['initial_sk'][tbBond][skIntegral] = initial model['final_sk'][tbBond][skIntegral] = final @@ -213,8 +214,8 @@ def load_tbm(file): model['final_overlap'][tbBond] = {} else: skIntegral = row[0] - initial = parse_float(row[1]) - final = parse_float(row[2]) + initial = parse_float(row[1], 0) + final = parse_float(row[2], 0) model['initial_overlap'][tbBond][skIntegral] = initial model['final_overlap'][tbBond][skIntegral] = final @@ -333,24 +334,11 @@ def parse_system(self): a = self.tb_model['a'] b = self.tb_model['b'] c = self.tb_model['c'] - sec_atoms.lattice_vectors = [a, b, c] + sec_atoms.lattice_vectors = [a, b, c] * ureg.angstrom - pi = np.arccos(-1.0) - vol = np.dot(a, np.cross(b, c)) - astar = 2 * pi * np.cross(b, c) / vol - bstar = 2 * pi * np.cross(c, a) / vol - cstar = 2 * pi * np.cross(a, b) / vol - sec_atoms.lattice_vectors_reciprocal = [astar, bstar, cstar] - - sec_atoms.positions = self.tb_model['xyz_coords'] + sec_atoms.positions = self.tb_model['xyz_coords'] * ureg.angstrom sec_atoms.species = self.tb_model['kinds'] - atoms = get_symbols(self.tb_model['kinds']) - sec_atoms.labels = atoms - - atoms = list(set(atoms)) - atoms.sort() - pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] sec_atoms.periodic = pbc @@ -402,19 +390,23 @@ def parse_scc(self): sec_scc = sec_run.calculation[-1] - sec_k_band = sec_scc.m_create(BandStructure, Calculation.band_structure_electronic) - sec_k_band.energy_fermi = self.tb_model['fermi_level'] + sec_k_band = BandStructure() + sec_k_band.energy_fermi = self.tb_model['fermi_level'] * ureg.eV for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) - print(sec_k_band_segment.energies.shape) + sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) * ureg.eV - def init_parser(self): - """Initialize the parsers. - """ - pass + sec_scc.band_structure_electronic.append(sec_k_band) + + def get_mainfile_keys(self, filepath): + tb_model = load_tbm(filepath) + dft_nomad_entry_id = tb_model['DFTNomadEntryID'] + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': + return ['TB_workflow'] + else: + return True def parse(self, filepath, archive, logger): self.filepath = os.path.abspath(filepath) @@ -424,12 +416,32 @@ def parse(self, filepath, archive, logger): self.archive.m_create(Run) self.tb_model = load_tbm(filepath) - - self.init_parser() + dft_nomad_entry_id = self.tb_model['DFTNomadEntryID'] self.parse_system() self.parse_method() self.parse_scc() workflow = SinglePoint() + workflow.name = "Tight Binding Calculation" self.archive.workflow2 = workflow + + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': + dft_archive = None + try: + dft_archive = archive.m_context.resolve_archive('/entries/{}/archive'.format(dft_nomad_entry_id)) + except: + pass + if dft_archive: + if self._child_archives: + tb_workflow = SimulationWorkflow() + tb_workflow.name = "Tight Binding" + self._child_archives['TB_workflow'].workflow2 = tb_workflow + tb_workflow.tasks.append(TaskReference(task=dft_archive.workflow2)) + tb_workflow.tasks.append(TaskReference(task=self.archive.workflow2)) + + workflow.inputs.append(Link(name='Atomic structure', section=dft_archive.run[0].system[0])) + workflow.inputs.append( + Link(name='DFT band structure', section=dft_archive.run[0].calculation[0])) + workflow.outputs.append( + Link(name='TB band structure', section=archive.run[0].calculation[0])) From c0e822027ecee21fe1b42ea3935a9a6c7e234d08 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 14 Jul 2023 11:08:33 +0200 Subject: [PATCH 15/51] compatiblity with the newest version --- electronicparsers/tbstudio/parser.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index bcaf127b..e10bae03 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -75,8 +75,10 @@ def load_tbm(file): model = {} - # Load workflow - model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] + # Load workflow if does exist + model['DFTNomadEntryID'] = None + if 'type' in tbm['DFTSource'] and tbm['DFTSource']['type'].lower() == 'nomad': + model['DFTNomadEntryID'] = tbm['DFTSource']['source'] # Load lattice vectors model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] From e004ae73e4130245ab4902943412e70c11b4de26 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Thu, 20 Apr 2023 09:33:27 +0200 Subject: [PATCH 16/51] Initial commit TBS parser --- electronicparsers/tbs/__init__.py | 19 +++++ electronicparsers/tbs/__main__.py | 31 +++++++ electronicparsers/tbs/metainfo/__init__.py | 25 ++++++ electronicparsers/tbs/metainfo/tbs.py | 27 ++++++ electronicparsers/tbs/nomad_plugin.yaml | 24 ++++++ electronicparsers/tbs/parser.py | 96 ++++++++++++++++++++++ 6 files changed, 222 insertions(+) create mode 100644 electronicparsers/tbs/__init__.py create mode 100644 electronicparsers/tbs/__main__.py create mode 100644 electronicparsers/tbs/metainfo/__init__.py create mode 100644 electronicparsers/tbs/metainfo/tbs.py create mode 100644 electronicparsers/tbs/nomad_plugin.yaml create mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py new file mode 100644 index 00000000..3a7c6077 --- /dev/null +++ b/electronicparsers/tbs/__init__.py @@ -0,0 +1,19 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py new file mode 100644 index 00000000..eb9d749d --- /dev/null +++ b/electronicparsers/tbs/__main__.py @@ -0,0 +1,31 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import sys +import json +import logging + +from nomad.utils import configure_logging +from nomad.datamodel import EntryArchive +from electronicparsers.tbs import TBSParser + +if __name__ == "__main__": + configure_logging(console_log_level=logging.DEBUG) + archive = EntryArchive() + TBSParser().parse(sys.argv[1], archive, logging) + json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py new file mode 100644 index 00000000..00c810c5 --- /dev/null +++ b/electronicparsers/tbs/metainfo/__init__.py @@ -0,0 +1,25 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from nomad.metainfo import Environment + +from . import tbs + + +m_env = Environment() +m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py new file mode 100644 index 00000000..4f1d8c64 --- /dev/null +++ b/electronicparsers/tbs/metainfo/tbs.py @@ -0,0 +1,27 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) + + +m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml new file mode 100644 index 00000000..e0e1a739 --- /dev/null +++ b/electronicparsers/tbs/nomad_plugin.yaml @@ -0,0 +1,24 @@ +code_category: Atomistic code +code_homepage: https://tight-binding.com/ +code_name: TBS +metadata: + codeCategory: Atomistic code + codeLabel: TBS + codeLabelStyle: All in capitals + codeName: tbs + codeUrl: https://tight-binding.com/ + parserDirName: dependencies/electronic/electronicparsers/tbs/ + parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git + parserSpecific: '' + preamble: '' + status: production + tableOfFiles: '| Input Filename | Description | + + | --- | --- | + + | `*.tbm` | **Mainfile**: output binary file | + + ' +name: parsers/tbs +parser_class_name: electronicparsers.tbs.parser.TBSParser +python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py new file mode 100644 index 00000000..36531e22 --- /dev/null +++ b/electronicparsers/tbs/parser.py @@ -0,0 +1,96 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import logging +import numpy as np + +from nomad.units import ureg +from nomad.parsing.file_parser import TextParser, Quantity +from nomad.datamodel.metainfo.simulation.run import Run, Program +from nomad.datamodel.metainfo.simulation.system import ( + System, Atoms, AtomsGroup +) +from nomad.datamodel.metainfo.simulation.method import ( + Method, AtomParameters, KMesh, Projection +) +from nomad.datamodel.metainfo.simulation.calculation import ( + Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix +) +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint + + +class TBSParser: + level = 1 + + def __init__(self): + self._calculation_type = 'projection' + + def parse_system(self): + """Populates run.system with the input structural parameters. + """ + sec_run = self.archive.run[-1] + sec_system = sec_run.m_create(System) + # Here the key is to populate: + # 1- `Atoms` with the main quantities I wrote + # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + sec_atoms = sec_system.m_create(Atoms) + # sec_atoms.lattice_vectors = ... + # sec_atoms.lattice_vectors_reciprocal = ... + # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] + # sec_atoms.periodic = pbc + # sec_atoms.labels = ... + # sec_atoms.positions = ... + + def parse_method(self): + """Populates run.method with the input methodological parameters. + """ + sec_run = self.archive.run[-1] + sec_method = sec_run.m_create(Method) + + # Here it will be useful to populate `AtomParameters` within Method to account, for + # example, for the orbitals used in the projeciton + + def parse_scc(self): + """Populates run.calculation with the output of the calculation. + """ + sec_run = self.archive.run[-1] + + # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, + # dos, hopping matrices, and everything you think is valuable. + + def init_parser(self): + """Initialize the parsers. + """ + pass + + def parse(self, filepath, archive, logger): + self.filepath = os.path.abspath(filepath) + self.archive = archive + self.maindir = os.path.dirname(self.filepath) + self.logger = logger if logger is not None else logging + + self.init_parser() + + self.parse_system() + self.parse_method() + self.parse_scc() + + workflow = SinglePoint() + self.archive.workflow2 = workflow From a89f3d3111acc501db209b416be5c72dfd6ecea2 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Tue, 25 Apr 2023 13:24:29 +0200 Subject: [PATCH 17/51] Changed name from TBS to TBStudio --- electronicparsers/tbs/__init__.py | 19 - electronicparsers/tbs/__main__.py | 31 -- electronicparsers/tbs/metainfo/__init__.py | 25 -- electronicparsers/tbs/metainfo/tbs.py | 27 -- electronicparsers/tbs/nomad_plugin.yaml | 24 -- electronicparsers/tbs/parser.py | 96 ----- electronicparsers/tbstudio/parser.py | 391 +-------------------- 7 files changed, 19 insertions(+), 594 deletions(-) delete mode 100644 electronicparsers/tbs/__init__.py delete mode 100644 electronicparsers/tbs/__main__.py delete mode 100644 electronicparsers/tbs/metainfo/__init__.py delete mode 100644 electronicparsers/tbs/metainfo/tbs.py delete mode 100644 electronicparsers/tbs/nomad_plugin.yaml delete mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py deleted file mode 100644 index 3a7c6077..00000000 --- a/electronicparsers/tbs/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py deleted file mode 100644 index eb9d749d..00000000 --- a/electronicparsers/tbs/__main__.py +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import sys -import json -import logging - -from nomad.utils import configure_logging -from nomad.datamodel import EntryArchive -from electronicparsers.tbs import TBSParser - -if __name__ == "__main__": - configure_logging(console_log_level=logging.DEBUG) - archive = EntryArchive() - TBSParser().parse(sys.argv[1], archive, logging) - json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py deleted file mode 100644 index 00c810c5..00000000 --- a/electronicparsers/tbs/metainfo/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from nomad.metainfo import Environment - -from . import tbs - - -m_env = Environment() -m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py deleted file mode 100644 index 4f1d8c64..00000000 --- a/electronicparsers/tbs/metainfo/tbs.py +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import numpy as np # pylint: disable=unused-import -import typing # pylint: disable=unused-import -from nomad.metainfo import ( # pylint: disable=unused-import - MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, - Reference -) - - -m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml deleted file mode 100644 index e0e1a739..00000000 --- a/electronicparsers/tbs/nomad_plugin.yaml +++ /dev/null @@ -1,24 +0,0 @@ -code_category: Atomistic code -code_homepage: https://tight-binding.com/ -code_name: TBS -metadata: - codeCategory: Atomistic code - codeLabel: TBS - codeLabelStyle: All in capitals - codeName: tbs - codeUrl: https://tight-binding.com/ - parserDirName: dependencies/electronic/electronicparsers/tbs/ - parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git - parserSpecific: '' - preamble: '' - status: production - tableOfFiles: '| Input Filename | Description | - - | --- | --- | - - | `*.tbm` | **Mainfile**: output binary file | - - ' -name: parsers/tbs -parser_class_name: electronicparsers.tbs.parser.TBSParser -python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py deleted file mode 100644 index 36531e22..00000000 --- a/electronicparsers/tbs/parser.py +++ /dev/null @@ -1,96 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import os -import logging -import numpy as np - -from nomad.units import ureg -from nomad.parsing.file_parser import TextParser, Quantity -from nomad.datamodel.metainfo.simulation.run import Run, Program -from nomad.datamodel.metainfo.simulation.system import ( - System, Atoms, AtomsGroup -) -from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Projection -) -from nomad.datamodel.metainfo.simulation.calculation import ( - Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix -) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint - - -class TBSParser: - level = 1 - - def __init__(self): - self._calculation_type = 'projection' - - def parse_system(self): - """Populates run.system with the input structural parameters. - """ - sec_run = self.archive.run[-1] - sec_system = sec_run.m_create(System) - # Here the key is to populate: - # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model - sec_atoms = sec_system.m_create(Atoms) - # sec_atoms.lattice_vectors = ... - # sec_atoms.lattice_vectors_reciprocal = ... - # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] - # sec_atoms.periodic = pbc - # sec_atoms.labels = ... - # sec_atoms.positions = ... - - def parse_method(self): - """Populates run.method with the input methodological parameters. - """ - sec_run = self.archive.run[-1] - sec_method = sec_run.m_create(Method) - - # Here it will be useful to populate `AtomParameters` within Method to account, for - # example, for the orbitals used in the projeciton - - def parse_scc(self): - """Populates run.calculation with the output of the calculation. - """ - sec_run = self.archive.run[-1] - - # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, - # dos, hopping matrices, and everything you think is valuable. - - def init_parser(self): - """Initialize the parsers. - """ - pass - - def parse(self, filepath, archive, logger): - self.filepath = os.path.abspath(filepath) - self.archive = archive - self.maindir = os.path.dirname(self.filepath) - self.logger = logger if logger is not None else logging - - self.init_parser() - - self.parse_system() - self.parse_method() - self.parse_scc() - - workflow = SinglePoint() - self.archive.workflow2 = workflow diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index e10bae03..9e34990a 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -21,7 +21,6 @@ import logging import numpy as np -from matid.data.element_data import get_symbols from nomad.units import ureg from nomad.parsing.file_parser import TextParser, Quantity from nomad.datamodel.metainfo.simulation.run import Run, Program @@ -29,299 +28,19 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TightBinding, SlaterKoster, TightBindingOrbital, SlaterKosterBond + Method, AtomParameters, KMesh, Projection ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint, SimulationWorkflow -from nomad.datamodel.metainfo.workflow2 import TaskReference, Link -import json -import re - - -def parse_int(string, default): - val = default - try: - val = np.int64(string) - except: - pass - return val - - -def parse_float(string, default): - val = default - try: - val = np.float64(string) - except: - pass - return val - - -def load_tbm(file): - f = open(file) - tbm = json.load(f) - f.close() - - # validation - application_full_name = None - release_version = None - if 'ApplicationFullName' in tbm and 'ReleaseVersion' in tbm: - application_full_name = tbm['ApplicationFullName'] - release_version = tbm['ReleaseVersion'] - - if application_full_name != 'Tight Binding Studio' or not release_version: - raise Exception('The file is not a valid TBStudio tight binding model.') - - model = {} - - # Load workflow if does exist - model['DFTNomadEntryID'] = None - if 'type' in tbm['DFTSource'] and tbm['DFTSource']['type'].lower() == 'nomad': - model['DFTNomadEntryID'] = tbm['DFTSource']['source'] - - # Load lattice vectors - model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] - model['b'] = [parse_float(tbm['vars']['b[0]'], 0), parse_float(tbm['vars']['b[1]'], 0), parse_float(tbm['vars']['b[2]'], 0)] - model['c'] = [parse_float(tbm['vars']['c[0]'], 0), parse_float(tbm['vars']['c[1]'], 0), parse_float(tbm['vars']['c[2]'], 0)] - - # SOC - model['isSOC'] = tbm['checks']['SOC[0]'] - - # Load coordinates - _xyz_coords = tbm['grids']['XYZ_Coords']['value'] - xyz_coords = [] - for r in _xyz_coords: - try: - x = np.float64(r[0]) - y = np.float64(r[1]) - z = np.float64(r[2]) - xyz_coords.append([x, y, z]) - except: - break - model['xyz_coords'] = xyz_coords - - tb_l = parse_int(tbm['vars']['TBl[0]'], 0) - tb_m = parse_int(tbm['vars']['TBm[0]'], 0) - tb_n = parse_int(tbm['vars']['TBn[0]'], 0) - - model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] - - dim = 0 - for i in model['neighbor_unit_cells']: - if i != 0: - dim = dim + 1 - - if dim == 0: - model['dimension'] = '0D' - elif dim == 1: - model['dimension'] = '1D' - elif dim == 2: - model['dimension'] = '2D' - elif dim == 3: - model['dimension'] = '3D' - - # Load fractional coordinates and kinds - _kabc_coords = tbm['grids']['KABC_Coords']['value'] - kinds = [] - abc_coords = [] - for r in _kabc_coords: - try: - k = np.int64(r[0]) - a = np.float64(r[1]) - b = np.float64(r[2]) - c = np.float64(r[3]) - kinds.append(k) - abc_coords.append([a, b, c]) - except: - break - model['kinds'] = kinds - model['abc_coords'] = abc_coords - - # Load SK model - _os = tbm['grids']['OS']['value'] - _osr = tbm['grids']['OS']['isReadOnly'] - - model['initial_os'] = {} - model['final_os'] = {} - tbAtom = '' - shell = '' - for state, row in zip(_osr, _os): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - os_name = row[0] - orbital_info = re.search("^(.*) \((.*)\)$", os_name) - tbAtom = orbital_info[1] - shell = orbital_info[2] - if tbAtom not in model['initial_os']: - model['initial_os'][tbAtom] = {shell: {}} - else: - if shell not in model['initial_os'][tbAtom]: - model['initial_os'][tbAtom][shell] = {} - if tbAtom not in model['final_os']: - model['final_os'][tbAtom] = {shell: {}} - else: - if shell not in model['final_os'][tbAtom]: - model['final_os'][tbAtom][shell] = {} - else: - orbital = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - - model['initial_os'][tbAtom][shell][orbital] = initial - model['final_os'][tbAtom][shell][orbital] = final - - _sk = tbm['grids']['SK']['value'] - _skr = tbm['grids']['SK']['isReadOnly'] - model['initial_sk'] = {} - model['final_sk'] = {} - tbBond = '' - for state, row in zip(_skr, _sk): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - tbBond = row[0] - model['initial_sk'][tbBond] = {} - model['final_sk'][tbBond] = {} - else: - skIntegral = row[0] - initial = parse_float(row[1], 0) - final = parse_float(row[2], 0) - model['initial_sk'][tbBond][skIntegral] = initial - model['final_sk'][tbBond][skIntegral] = final - - _ol = tbm['grids']['OL']['value'] - _olr = tbm['grids']['OL']['isReadOnly'] - model['initial_overlap'] = {} - model['final_overlap'] = {} - tbBond = '' - for state, row in zip(_olr, _ol): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - tbBond = row[0] - model['initial_overlap'][tbBond] = {} - model['final_overlap'][tbBond] = {} - else: - skIntegral = row[0] - initial = parse_float(row[1], 0) - final = parse_float(row[2], 0) - model['initial_overlap'][tbBond][skIntegral] = initial - model['final_overlap'][tbBond][skIntegral] = final - - orbitals = [] - lastInd = 0 - for i in range(1, 100): - varName = 'AtomInd{}'.format(i) - orbital = tbm['combos'][varName] - if orbital['selected'] != 0: - lastInd = i - for i in range(1, lastInd + 1): - varName = 'AtomInd{}'.format(i) - orbital = tbm['combos'][varName] - items = orbital["items"] - selected = orbital['selected'] - if selected == 0: - orbitals.append(None) - else: - orbitals.append(items[selected]) - - model['orbitals'] = orbitals - - _k_points = tbm['variables']['KPoints'] - frac_k_points = [] - k_points = [] - k_length = [] - for row in _k_points: - frac_k_points.append([row[0], row[1], row[2]]) - k_points.append([row[3], row[4], row[5]]) - k_length.append(row[6]) - model['frac_k_points'] = frac_k_points - model['k_points'] = k_points - model['k_length'] = k_length - - model['bandSections'] = tbm['variables']['bandSections'] - model['dft_bands'] = tbm['variables']['DFTEigVal'] - model['initial_tb_bands'] = tbm['variables']['iTBEigVal'] - model['final_tb_bands'] = tbm['variables']['fTBEigVal'] - model['fermi_level'] = tbm['variables']['ChemP'] - - tb_unit_cells = tbm['lists']['EssentialUnitcellList'] - model['initial_hamiltonian_matrix'] = {} - model['final_hamiltonian_matrix'] = {} - model['initial_overlap_matrix'] = {} - model['final_overlap_matrix'] = {} - for index, unit_cell in enumerate(tb_unit_cells): - if len(tbm['variables']['Hi']) > index: - model['initial_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hi'][index] - if len(tbm['variables']['Hi']) > index: - model['final_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hf'][index] - if len(tbm['variables']['Si']) > index: - model['initial_overlap_matrix'][unit_cell] = tbm['variables']['Si'][index] - if len(tbm['variables']['Sf']) > index: - model['final_overlap_matrix'][unit_cell] = tbm['variables']['Sf'][index] - - model['initial_soc_matrix'] = {} - model['final_soc_matrix'] = {} - - if len(tbm['variables']['SOCi']) > 0: - model['initial_soc_matrix']['real'] = tbm['variables']['SOCi'][0] - if len(tbm['variables']['SOCi']) > 1: - model['initial_soc_matrix']['image'] = tbm['variables']['SOCi'][1] - if len(tbm['variables']['SOCf']) > 0: - model['final_soc_matrix']['real'] = tbm['variables']['SOCf'][0] - if len(tbm['variables']['SOCf']) > 1: - model['final_soc_matrix']['image'] = tbm['variables']['SOCf'][1] - - model['bonds'] = [] - if 'TB Model' in tbm['trees']['Bonds']: - if 'children' in tbm['trees']['Bonds']['TB Model']: - allBonds = tbm['trees']['Bonds']['TB Model']['children'] - allCells = allBonds.keys() - for cells in allCells: - bonds = allBonds[cells] - cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) - cell1 = cells_info[1] - cell2 = cells_info[2] - is_active = bonds['state'] == 4 - if is_active: - allAtoms = bonds['children'] - for atoms in allAtoms.keys(): - is_bond_active = allAtoms[atoms]['state'] == 4 - if is_bond_active: - atoms_info = re.search("^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) - index1 = atoms_info[1] - shell1 = atoms_info[2] - index2 = atoms_info[3] - shell2 = atoms_info[4] - bond_type = atoms_info[5] - bond = { - "atom1": {"index": index1, "shell": shell1, "cell": cell1}, - "atom2": {"index": index2, "shell": shell2, "cell": cell2}, - "type": bond_type - } - model['bonds'].append(bond) - - return model +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint class TBStudioParser: level = 1 def __init__(self): - self._calculation_type = 'tight binding' + self._calculation_type = 'projection' def parse_system(self): """Populates run.system with the input structural parameters. @@ -330,85 +49,36 @@ def parse_system(self): sec_system = sec_run.m_create(System) # Here the key is to populate: # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the tight binding in the tight-binding model + # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model sec_atoms = sec_system.m_create(Atoms) - - a = self.tb_model['a'] - b = self.tb_model['b'] - c = self.tb_model['c'] - sec_atoms.lattice_vectors = [a, b, c] * ureg.angstrom - - sec_atoms.positions = self.tb_model['xyz_coords'] * ureg.angstrom - sec_atoms.species = self.tb_model['kinds'] - - pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] - sec_atoms.periodic = pbc + # sec_atoms.lattice_vectors = ... + # sec_atoms.lattice_vectors_reciprocal = ... + # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] + # sec_atoms.periodic = pbc + # sec_atoms.labels = ... + # sec_atoms.positions = ... def parse_method(self): """Populates run.method with the input methodological parameters. """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_tb = sec_method.m_create(TightBinding) - sec_sk = sec_tb.m_create(SlaterKoster) - - n_orbitals = len(self.tb_model['orbitals']) - orbitals = self.tb_model['orbitals'] - sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) - - for bond in self.tb_model['bonds']: - atom1 = bond['atom1'] - atom2 = bond['atom2'] - type = bond['type'] - h_sk = None - s_sk = None - if self.tb_model['final_sk'] != {}: - h_sk = self.tb_model['final_sk'][type] - if self.tb_model['final_overlap'] != {}: - s_sk = self.tb_model['final_overlap'][type] - if h_sk is not None: - sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) - sec_bonds.bond_label = type - sec_bonds.index1 = atom1['index'] - sec_bonds.index2 = atom2['index'] - if s_sk is not None: - sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) - sec_overlaps.bond_label = type - sec_overlaps.index1 = atom1['index'] - sec_overlaps.index2 = atom2['index'] + # Here it will be useful to populate `AtomParameters` within Method to account, for + # example, for the orbitals used in the projeciton def parse_scc(self): """Populates run.calculation with the output of the calculation. """ sec_run = self.archive.run[-1] - self.archive.run[-1].m_create(Calculation) - - tb_bands = self.tb_model['final_tb_bands'] - frac_k_points = self.tb_model['frac_k_points'] - band_segments_points = self.tb_model['bandSections']['index'] - if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: - return - - sec_scc = sec_run.calculation[-1] - - sec_k_band = BandStructure() - sec_k_band.energy_fermi = self.tb_model['fermi_level'] * ureg.eV - for n1, n2 in band_segments_points: - sec_k_band_segment = sec_k_band.m_create(BandEnergies) - sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) * ureg.eV + # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, + # dos, hopping matrices, and everything you think is valuable. - sec_scc.band_structure_electronic.append(sec_k_band) - - def get_mainfile_keys(self, filepath): - tb_model = load_tbm(filepath) - dft_nomad_entry_id = tb_model['DFTNomadEntryID'] - if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': - return ['TB_workflow'] - else: - return True + def init_parser(self): + """Initialize the parsers. + """ + pass def parse(self, filepath, archive, logger): self.filepath = os.path.abspath(filepath) @@ -416,34 +86,11 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging - self.archive.m_create(Run) - self.tb_model = load_tbm(filepath) - dft_nomad_entry_id = self.tb_model['DFTNomadEntryID'] + self.init_parser() self.parse_system() self.parse_method() self.parse_scc() workflow = SinglePoint() - workflow.name = "Tight Binding Calculation" self.archive.workflow2 = workflow - - if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': - dft_archive = None - try: - dft_archive = archive.m_context.resolve_archive('/entries/{}/archive'.format(dft_nomad_entry_id)) - except: - pass - if dft_archive: - if self._child_archives: - tb_workflow = SimulationWorkflow() - tb_workflow.name = "Tight Binding" - self._child_archives['TB_workflow'].workflow2 = tb_workflow - tb_workflow.tasks.append(TaskReference(task=dft_archive.workflow2)) - tb_workflow.tasks.append(TaskReference(task=self.archive.workflow2)) - - workflow.inputs.append(Link(name='Atomic structure', section=dft_archive.run[0].system[0])) - workflow.inputs.append( - Link(name='DFT band structure', section=dft_archive.run[0].calculation[0])) - workflow.outputs.append( - Link(name='TB band structure', section=archive.run[0].calculation[0])) From f5bc640ad2c0b85bae43d42466df005a6d03515f Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 15 May 2023 16:59:32 +0200 Subject: [PATCH 18/51] Added tight binding studio parser --- electronicparsers/tbstudio/parser.py | 344 ++++++++++++++++++++++++++- 1 file changed, 335 insertions(+), 9 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 9e34990a..73330173 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -21,6 +21,7 @@ import logging import numpy as np +from matid.data.element_data import get_symbols from nomad.units import ureg from nomad.parsing.file_parser import TextParser, Quantity from nomad.datamodel.metainfo.simulation.run import Run, Program @@ -28,12 +29,302 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Projection + Method, AtomParameters, KMesh, TightBinding ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.workflow import SinglePoint +import json +import re + + +def load_tbm(file): + f = open(file) + tbm = json.load(f) + f.close() + + # validation + application_full_name = None + release_version = None + if 'ApplicationFullName' in tbm and 'ReleaseVersion' in tbm: + application_full_name = tbm['ApplicationFullName'] + release_version = tbm['ReleaseVersion'] + + if application_full_name != 'Tight Binding Studio' or not release_version: + raise Exception('The file is not a valid TBStudio tight binding model.') + + model = {} + + # Load workflow + model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] + + # Load lattice vectors + model['a'] = [tbm['vars']['a[0]'], tbm['vars']['a[1]'], tbm['vars']['a[2]']] + model['b'] = [tbm['vars']['b[0]'], tbm['vars']['b[1]'], tbm['vars']['b[2]']] + model['c'] = [tbm['vars']['c[0]'], tbm['vars']['c[1]'], tbm['vars']['c[2]']] + + # SOC + model['isSOC'] = tbm['checks']['SOC[0]'] + + # Load coordinates + _xyz_coords = tbm['grids']['XYZ_Coords']['value'] + xyz_coords = [] + for r in _xyz_coords: + try: + x = np.float64(r[0]) + y = np.float64(r[1]) + z = np.float64(r[2]) + xyz_coords.append([x, y, z]) + except: + break + model['xyz_coords'] = xyz_coords + + tb_l = 0 + tb_m = 0 + tb_n = 0 + + try: + tb_l = np.int64(tbm['vars']['TBl[0]']) + except: + pass + try: + tb_m = np.int64(tbm['vars']['TBm[0]']) + except: + pass + try: + tb_n = np.int64(tbm['vars']['TBn[0]']) + except: + pass + + model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] + + dim = 0 + for i in model['neighbor_unit_cells']: + if i != 0: + dim = dim + 1 + + if dim == 0: + model['dimension'] = '0D' + elif dim == 1: + model['dimension'] = '1D' + elif dim == 2: + model['dimension'] = '2D' + elif dim == 3: + model['dimension'] = '3D' + + # Load fractional coordinates and kinds + _kabc_coords = tbm['grids']['KABC_Coords']['value'] + kinds = [] + abc_coords = [] + for r in _kabc_coords: + try: + k = np.int64(r[0]) + a = np.float64(r[1]) + b = np.float64(r[2]) + c = np.float64(r[3]) + kinds.append(k) + abc_coords.append([a, b, c]) + except: + break + model['kinds'] = kinds + model['abc_coords'] = abc_coords + + # Load SK model + _os = tbm['grids']['OS']['value'] + _osr = tbm['grids']['OS']['isReadOnly'] + + model['initial_os'] = {} + model['final_os'] = {} + tbAtom = '' + shell = '' + for state, row in zip(_osr, _os): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + os_name = row[0] + orbital_info = re.search("^(.*) \((.*)\)$", os_name) + tbAtom = orbital_info[1] + shell = orbital_info[2] + if tbAtom not in model['initial_os']: + model['initial_os'][tbAtom] = {shell: {}} + else: + if shell not in model['initial_os'][tbAtom]: + model['initial_os'][tbAtom][shell] = {} + if tbAtom not in model['final_os']: + model['final_os'][tbAtom] = {shell: {}} + else: + if shell not in model['final_os'][tbAtom]: + model['final_os'][tbAtom][shell] = {} + else: + orbital = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_os'][tbAtom][shell][orbital] = initial + model['final_os'][tbAtom][shell][orbital] = final + + _sk = tbm['grids']['SK']['value'] + _skr = tbm['grids']['SK']['isReadOnly'] + model['initial_sk'] = {} + model['final_sk'] = {} + tbBond = '' + for state, row in zip(_skr, _sk): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tbBond = row[0] + model['initial_sk'][tbBond] = {} + model['final_sk'][tbBond] = {} + else: + skIntegral = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_sk'][tbBond][skIntegral] = initial + model['final_sk'][tbBond][skIntegral] = final + + _ol = tbm['grids']['OL']['value'] + _olr = tbm['grids']['OL']['isReadOnly'] + model['initial_overlap'] = {} + model['final_overlap'] = {} + tbBond = '' + for state, row in zip(_olr, _ol): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tbBond = row[0] + model['initial_overlap'][tbBond] = {} + model['final_overlap'][tbBond] = {} + else: + skIntegral = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + model['initial_overlap'][tbBond][skIntegral] = initial + model['final_overlap'][tbBond][skIntegral] = final + + orbitals = [] + lastInd = 0 + for i in range(1, 100): + varName = 'AtomInd{}'.format(i) + orbital = tbm['combos'][varName] + if orbital['selected'] != 0: + lastInd = i + for i in range(1, lastInd + 1): + varName = 'AtomInd{}'.format(i) + orbital = tbm['combos'][varName] + items = orbital["items"] + selected = orbital['selected'] + if selected == 0: + orbitals.append(None) + else: + orbitals.append(items[selected]) + + model['orbitals'] = orbitals + + _k_points = tbm['variables']['KPoints'] + frac_k_points = [] + k_points = [] + k_length = [] + for row in _k_points: + frac_k_points.append([row[0], row[1], row[2]]) + k_points.append([row[3], row[4], row[5]]) + k_length.append(row[6]) + model['frac_k_points'] = frac_k_points + model['k_points'] = k_points + model['k_length'] = k_length + + model['bandSections'] = tbm['variables']['bandSections'] + model['dft_bands'] = tbm['variables']['DFTEigVal'] + model['initial_tb_bands'] = tbm['variables']['iTBEigVal'] + model['final_tb_bands'] = tbm['variables']['fTBEigVal'] + model['fermi_level'] = tbm['variables']['ChemP'] + + tb_unit_cells = tbm['lists']['EssentialUnitcellList'] + model['initial_hamiltonian_matrix'] = {} + model['final_hamiltonian_matrix'] = {} + model['initial_overlap_matrix'] = {} + model['final_overlap_matrix'] = {} + for index, unit_cell in enumerate(tb_unit_cells): + if len(tbm['variables']['Hi']) > index: + model['initial_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hi'][index] + if len(tbm['variables']['Hi']) > index: + model['final_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hf'][index] + if len(tbm['variables']['Si']) > index: + model['initial_overlap_matrix'][unit_cell] = tbm['variables']['Si'][index] + if len(tbm['variables']['Sf']) > index: + model['final_overlap_matrix'][unit_cell] = tbm['variables']['Sf'][index] + + model['initial_soc_matrix'] = {} + model['final_soc_matrix'] = {} + + if len(tbm['variables']['SOCi']) > 0: + model['initial_soc_matrix']['real'] = tbm['variables']['SOCi'][0] + if len(tbm['variables']['SOCi']) > 1: + model['initial_soc_matrix']['image'] = tbm['variables']['SOCi'][1] + if len(tbm['variables']['SOCf']) > 0: + model['final_soc_matrix']['real'] = tbm['variables']['SOCf'][0] + if len(tbm['variables']['SOCf']) > 1: + model['final_soc_matrix']['image'] = tbm['variables']['SOCf'][1] + + model['bonds'] = [] + if 'TB Model' in tbm['trees']['Bonds']: + if 'children' in tbm['trees']['Bonds']['TB Model']: + allBonds = tbm['trees']['Bonds']['TB Model']['children'] + allCells = allBonds.keys() + for cells in allCells: + bonds = allBonds[cells] + cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) + cell1 = cells_info[1] + cell2 = cells_info[2] + is_active = bonds['state'] == 4 + if is_active: + allAtoms = bonds['children'] + for atoms in allAtoms.keys(): + is_bond_active = allAtoms[atoms]['state'] == 4 + if is_bond_active: + atoms_info = re.search("^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) + index1 = atoms_info[1] + shell1 = atoms_info[2] + index2 = atoms_info[3] + shell2 = atoms_info[4] + bond_type = atoms_info[5] + bond = { + "atom1": {"index": index1, "shell": shell1, "cell": cell1}, + "atom2": {"index": index2, "shell": shell2, "cell": cell2}, + "type": bond_type + } + model['bonds'].append(bond) + + return model class TBStudioParser: @@ -51,18 +342,38 @@ def parse_system(self): # 1- `Atoms` with the main quantities I wrote # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model sec_atoms = sec_system.m_create(Atoms) - # sec_atoms.lattice_vectors = ... - # sec_atoms.lattice_vectors_reciprocal = ... - # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] - # sec_atoms.periodic = pbc - # sec_atoms.labels = ... - # sec_atoms.positions = ... + + a = self.tb_model['a'] + b = self.tb_model['b'] + c = self.tb_model['c'] + sec_atoms.lattice_vectors = [a, b, c] + + pi = np.arccos(-1.0) + vol = np.dot(a, np.cross(b, c)) + astar = 2 * pi * np.cross(b, c) / vol + bstar = 2 * pi * np.cross(c, a) / vol + cstar = 2 * pi * np.cross(a, b) / vol + sec_atoms.lattice_vectors_reciprocal = [astar, bstar, cstar] + + sec_atoms.positions = self.tb_model['xyz_coords'] + sec_atoms.species = self.tb_model['kinds'] + + atoms = get_symbols(self.tb_model['kinds']) + sec_atoms.labels = atoms + + atoms = list(set(atoms)) + atoms.sort() + + pbc = [dim != 0 for dim in self.tb_model['neighbor_unit_cells']] + sec_atoms.periodic = pbc + sec_system.pbc = pbc def parse_method(self): """Populates run.method with the input methodological parameters. """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) + sec_dft = sec_method.m_create(SK) # Here it will be useful to populate `AtomParameters` within Method to account, for # example, for the orbitals used in the projeciton @@ -72,8 +383,21 @@ def parse_scc(self): """ sec_run = self.archive.run[-1] - # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, - # dos, hopping matrices, and everything you think is valuable. + tb_bands = self.tb_model['final_tb_bands'] + frac_k_points = self.tb_model['frac_k_points'] + band_segments_points = self.tb_model['bandSections']['index'] + if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: + return + + sec_scc = sec_run.calculation[-1] + + sec_k_band = sec_scc.m_create(BandStructure, Calculation.band_structure_electronic) + sec_k_band.energy_fermi = self.tb_model['fermi_level'] + + for n1, n2 in band_segments_points: + sec_k_band_segment = sec_k_band.m_create(BandEnergies) + sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] + sec_k_band_segment.energies = tb_bands[n1: n2 + 1] def init_parser(self): """Initialize the parsers. @@ -86,6 +410,8 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging + self.tb_model = load_tbm(filepath) + self.init_parser() self.parse_system() From 4541ec51377988c02ad90459693d1f0edd3bc898 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 16 May 2023 15:17:13 +0200 Subject: [PATCH 19/51] parse SK method --- electronicparsers/tbstudio/parser.py | 38 +++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 73330173..39f74cc9 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -29,7 +29,7 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TightBinding + Method, AtomParameters, KMesh, TightBinding, SlaterKoster, TightBindingOrbital, SlaterKosterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix @@ -331,7 +331,7 @@ class TBStudioParser: level = 1 def __init__(self): - self._calculation_type = 'projection' + self._calculation_type = 'tight binding' def parse_system(self): """Populates run.system with the input structural parameters. @@ -340,7 +340,7 @@ def parse_system(self): sec_system = sec_run.m_create(System) # Here the key is to populate: # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + # 2- `AtomsGroup` (optional) with the info of the atoms used for the tight binding in the tight-binding model sec_atoms = sec_system.m_create(Atoms) a = self.tb_model['a'] @@ -373,10 +373,36 @@ def parse_method(self): """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_dft = sec_method.m_create(SK) + sec_tb = sec_method.m_create(TightBinding) + sec_sk = sec_tb.m_create(SlaterKoster) + + n_orbitals = len(self.tb_model['orbitals']) + orbitals = self.tb_model['orbitals'] + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.bonds) + + for bond in self.tb_model['bonds']: + atom1 = bond['atom1'] + atom2 = bond['atom2'] + type = bond['type'] + h_sk = None + s_sk = None + if self.tb_model['final_sk'] != {}: + h_sk = self.tb_model['final_sk'][type] + if self.tb_model['final_overlap'] != {}: + s_sk = self.tb_model['final_overlap'][type] + + if h_sk is not None: + sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) + sec_bonds.bond_label = type + sec_bonds.index1 = atom1.index + sec_bonds.index2 = atom2.index + if s_sk is not None: + sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) + sec_overlaps.bond_label = type + sec_overlaps.index1 = atom1.index + sec_overlaps.index2 = atom2.index + - # Here it will be useful to populate `AtomParameters` within Method to account, for - # example, for the orbitals used in the projeciton def parse_scc(self): """Populates run.calculation with the output of the calculation. From 202ae4de53199a827b8de0217a8f92ec50105ff8 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 16 May 2023 17:04:05 +0200 Subject: [PATCH 20/51] fix bugs --- electronicparsers/tbstudio/parser.py | 83 ++++++++++++---------------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 39f74cc9..c20bba02 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -39,6 +39,24 @@ import re +def parse_int(string, default=0): + val = default + try: + val = np.int64(string) + except: + pass + return val + + +def parse_float(string, default=0.0): + val = default + try: + val = np.intfloat64(string) + except: + pass + return val + + def load_tbm(file): f = open(file) tbm = json.load(f) @@ -60,9 +78,9 @@ def load_tbm(file): model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] # Load lattice vectors - model['a'] = [tbm['vars']['a[0]'], tbm['vars']['a[1]'], tbm['vars']['a[2]']] - model['b'] = [tbm['vars']['b[0]'], tbm['vars']['b[1]'], tbm['vars']['b[2]']] - model['c'] = [tbm['vars']['c[0]'], tbm['vars']['c[1]'], tbm['vars']['c[2]']] + model['a'] = [parse_float(tbm['vars']['a[0]']), parse_float(tbm['vars']['a[1]']), parse_float(tbm['vars']['a[2]'])] + model['b'] = [parse_float(tbm['vars']['b[0]']), parse_float(tbm['vars']['b[1]']), parse_float(tbm['vars']['b[2]'])] + model['c'] = [parse_float(tbm['vars']['c[0]']), parse_float(tbm['vars']['c[1]']), parse_float(tbm['vars']['c[2]'])] # SOC model['isSOC'] = tbm['checks']['SOC[0]'] @@ -80,22 +98,9 @@ def load_tbm(file): break model['xyz_coords'] = xyz_coords - tb_l = 0 - tb_m = 0 - tb_n = 0 - - try: - tb_l = np.int64(tbm['vars']['TBl[0]']) - except: - pass - try: - tb_m = np.int64(tbm['vars']['TBm[0]']) - except: - pass - try: - tb_n = np.int64(tbm['vars']['TBn[0]']) - except: - pass + tb_l = parse_int(tbm['vars']['TBl[0]']) + tb_m = parse_int(tbm['vars']['TBm[0]']) + tb_n = parse_int(tbm['vars']['TBn[0]']) model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] @@ -188,17 +193,8 @@ def load_tbm(file): model['final_sk'][tbBond] = {} else: skIntegral = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - + initial = parse_float(row[1]) + final = parse_float(row[2]) model['initial_sk'][tbBond][skIntegral] = initial model['final_sk'][tbBond][skIntegral] = final @@ -217,17 +213,8 @@ def load_tbm(file): model['final_overlap'][tbBond] = {} else: skIntegral = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - + initial = parse_float(row[1]) + final = parse_float(row[2]) model['initial_overlap'][tbBond][skIntegral] = initial model['final_overlap'][tbBond][skIntegral] = final @@ -378,7 +365,7 @@ def parse_method(self): n_orbitals = len(self.tb_model['orbitals']) orbitals = self.tb_model['orbitals'] - sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.bonds) + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) for bond in self.tb_model['bonds']: atom1 = bond['atom1'] @@ -394,20 +381,19 @@ def parse_method(self): if h_sk is not None: sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) sec_bonds.bond_label = type - sec_bonds.index1 = atom1.index - sec_bonds.index2 = atom2.index + sec_bonds.index1 = atom1['index'] + sec_bonds.index2 = atom2['index'] if s_sk is not None: sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) sec_overlaps.bond_label = type - sec_overlaps.index1 = atom1.index - sec_overlaps.index2 = atom2.index - - + sec_overlaps.index1 = atom1['index'] + sec_overlaps.index2 = atom2['index'] def parse_scc(self): """Populates run.calculation with the output of the calculation. """ sec_run = self.archive.run[-1] + self.archive.run[-1].m_create(Calculation) tb_bands = self.tb_model['final_tb_bands'] frac_k_points = self.tb_model['frac_k_points'] @@ -436,6 +422,7 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging + self.archive.m_create(Run) self.tb_model = load_tbm(filepath) self.init_parser() From eb2c8a964f5de8041874f503ecb704df7633cb1d Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 11:07:09 +0200 Subject: [PATCH 21/51] fix bugs --- electronicparsers/tbstudio/parser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index c20bba02..7ef8d7f7 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -351,9 +351,8 @@ def parse_system(self): atoms = list(set(atoms)) atoms.sort() - pbc = [dim != 0 for dim in self.tb_model['neighbor_unit_cells']] + pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] sec_atoms.periodic = pbc - sec_system.pbc = pbc def parse_method(self): """Populates run.method with the input methodological parameters. @@ -409,7 +408,8 @@ def parse_scc(self): for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = tb_bands[n1: n2 + 1] + sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) + print(sec_k_band_segment.energies.shape) def init_parser(self): """Initialize the parsers. From c434c46f4331c96abb452276255b451180b767ff Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 12:57:45 +0200 Subject: [PATCH 22/51] added program name --- electronicparsers/tbstudio/parser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 7ef8d7f7..44dbfff3 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -422,7 +422,8 @@ def parse(self, filepath, archive, logger): self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging - self.archive.m_create(Run) + sec_run = self.archive.m_create(Run) + sec_run.program = Program(name="TBStudio") self.tb_model = load_tbm(filepath) self.init_parser() From f1254b20ab60b94f31cf88a26362e0ababc1aac0 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Thu, 20 Apr 2023 09:33:27 +0200 Subject: [PATCH 23/51] Initial commit TBS parser --- electronicparsers/tbs/__init__.py | 19 +++++ electronicparsers/tbs/__main__.py | 31 +++++++ electronicparsers/tbs/metainfo/__init__.py | 25 ++++++ electronicparsers/tbs/metainfo/tbs.py | 27 ++++++ electronicparsers/tbs/nomad_plugin.yaml | 24 ++++++ electronicparsers/tbs/parser.py | 96 ++++++++++++++++++++++ 6 files changed, 222 insertions(+) create mode 100644 electronicparsers/tbs/__init__.py create mode 100644 electronicparsers/tbs/__main__.py create mode 100644 electronicparsers/tbs/metainfo/__init__.py create mode 100644 electronicparsers/tbs/metainfo/tbs.py create mode 100644 electronicparsers/tbs/nomad_plugin.yaml create mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py new file mode 100644 index 00000000..3a7c6077 --- /dev/null +++ b/electronicparsers/tbs/__init__.py @@ -0,0 +1,19 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py new file mode 100644 index 00000000..eb9d749d --- /dev/null +++ b/electronicparsers/tbs/__main__.py @@ -0,0 +1,31 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import sys +import json +import logging + +from nomad.utils import configure_logging +from nomad.datamodel import EntryArchive +from electronicparsers.tbs import TBSParser + +if __name__ == "__main__": + configure_logging(console_log_level=logging.DEBUG) + archive = EntryArchive() + TBSParser().parse(sys.argv[1], archive, logging) + json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py new file mode 100644 index 00000000..00c810c5 --- /dev/null +++ b/electronicparsers/tbs/metainfo/__init__.py @@ -0,0 +1,25 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from nomad.metainfo import Environment + +from . import tbs + + +m_env = Environment() +m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py new file mode 100644 index 00000000..4f1d8c64 --- /dev/null +++ b/electronicparsers/tbs/metainfo/tbs.py @@ -0,0 +1,27 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import numpy as np # pylint: disable=unused-import +import typing # pylint: disable=unused-import +from nomad.metainfo import ( # pylint: disable=unused-import + MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, + Reference +) + + +m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml new file mode 100644 index 00000000..e0e1a739 --- /dev/null +++ b/electronicparsers/tbs/nomad_plugin.yaml @@ -0,0 +1,24 @@ +code_category: Atomistic code +code_homepage: https://tight-binding.com/ +code_name: TBS +metadata: + codeCategory: Atomistic code + codeLabel: TBS + codeLabelStyle: All in capitals + codeName: tbs + codeUrl: https://tight-binding.com/ + parserDirName: dependencies/electronic/electronicparsers/tbs/ + parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git + parserSpecific: '' + preamble: '' + status: production + tableOfFiles: '| Input Filename | Description | + + | --- | --- | + + | `*.tbm` | **Mainfile**: output binary file | + + ' +name: parsers/tbs +parser_class_name: electronicparsers.tbs.parser.TBSParser +python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py new file mode 100644 index 00000000..36531e22 --- /dev/null +++ b/electronicparsers/tbs/parser.py @@ -0,0 +1,96 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. +# See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import logging +import numpy as np + +from nomad.units import ureg +from nomad.parsing.file_parser import TextParser, Quantity +from nomad.datamodel.metainfo.simulation.run import Run, Program +from nomad.datamodel.metainfo.simulation.system import ( + System, Atoms, AtomsGroup +) +from nomad.datamodel.metainfo.simulation.method import ( + Method, AtomParameters, KMesh, Projection +) +from nomad.datamodel.metainfo.simulation.calculation import ( + Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix +) +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint + + +class TBSParser: + level = 1 + + def __init__(self): + self._calculation_type = 'projection' + + def parse_system(self): + """Populates run.system with the input structural parameters. + """ + sec_run = self.archive.run[-1] + sec_system = sec_run.m_create(System) + # Here the key is to populate: + # 1- `Atoms` with the main quantities I wrote + # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model + sec_atoms = sec_system.m_create(Atoms) + # sec_atoms.lattice_vectors = ... + # sec_atoms.lattice_vectors_reciprocal = ... + # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] + # sec_atoms.periodic = pbc + # sec_atoms.labels = ... + # sec_atoms.positions = ... + + def parse_method(self): + """Populates run.method with the input methodological parameters. + """ + sec_run = self.archive.run[-1] + sec_method = sec_run.m_create(Method) + + # Here it will be useful to populate `AtomParameters` within Method to account, for + # example, for the orbitals used in the projeciton + + def parse_scc(self): + """Populates run.calculation with the output of the calculation. + """ + sec_run = self.archive.run[-1] + + # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, + # dos, hopping matrices, and everything you think is valuable. + + def init_parser(self): + """Initialize the parsers. + """ + pass + + def parse(self, filepath, archive, logger): + self.filepath = os.path.abspath(filepath) + self.archive = archive + self.maindir = os.path.dirname(self.filepath) + self.logger = logger if logger is not None else logging + + self.init_parser() + + self.parse_system() + self.parse_method() + self.parse_scc() + + workflow = SinglePoint() + self.archive.workflow2 = workflow From 9deafac331459c8d09a50eaa6e8292c6a444aed0 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Tue, 25 Apr 2023 13:24:29 +0200 Subject: [PATCH 24/51] Changed name from TBS to TBStudio --- electronicparsers/tbs/__init__.py | 19 ----- electronicparsers/tbs/__main__.py | 31 ------- electronicparsers/tbs/metainfo/__init__.py | 25 ------ electronicparsers/tbs/metainfo/tbs.py | 27 ------ electronicparsers/tbs/nomad_plugin.yaml | 24 ------ electronicparsers/tbs/parser.py | 96 ---------------------- 6 files changed, 222 deletions(-) delete mode 100644 electronicparsers/tbs/__init__.py delete mode 100644 electronicparsers/tbs/__main__.py delete mode 100644 electronicparsers/tbs/metainfo/__init__.py delete mode 100644 electronicparsers/tbs/metainfo/tbs.py delete mode 100644 electronicparsers/tbs/nomad_plugin.yaml delete mode 100644 electronicparsers/tbs/parser.py diff --git a/electronicparsers/tbs/__init__.py b/electronicparsers/tbs/__init__.py deleted file mode 100644 index 3a7c6077..00000000 --- a/electronicparsers/tbs/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from .parser import TBSParser diff --git a/electronicparsers/tbs/__main__.py b/electronicparsers/tbs/__main__.py deleted file mode 100644 index eb9d749d..00000000 --- a/electronicparsers/tbs/__main__.py +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import sys -import json -import logging - -from nomad.utils import configure_logging -from nomad.datamodel import EntryArchive -from electronicparsers.tbs import TBSParser - -if __name__ == "__main__": - configure_logging(console_log_level=logging.DEBUG) - archive = EntryArchive() - TBSParser().parse(sys.argv[1], archive, logging) - json.dump(archive.m_to_dict(), sys.stdout, indent=2) diff --git a/electronicparsers/tbs/metainfo/__init__.py b/electronicparsers/tbs/metainfo/__init__.py deleted file mode 100644 index 00c810c5..00000000 --- a/electronicparsers/tbs/metainfo/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from nomad.metainfo import Environment - -from . import tbs - - -m_env = Environment() -m_env.m_add_sub_section(Environment.packages, tbs.m_package) diff --git a/electronicparsers/tbs/metainfo/tbs.py b/electronicparsers/tbs/metainfo/tbs.py deleted file mode 100644 index 4f1d8c64..00000000 --- a/electronicparsers/tbs/metainfo/tbs.py +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import numpy as np # pylint: disable=unused-import -import typing # pylint: disable=unused-import -from nomad.metainfo import ( # pylint: disable=unused-import - MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy, - Reference -) - - -m_package = Package() diff --git a/electronicparsers/tbs/nomad_plugin.yaml b/electronicparsers/tbs/nomad_plugin.yaml deleted file mode 100644 index e0e1a739..00000000 --- a/electronicparsers/tbs/nomad_plugin.yaml +++ /dev/null @@ -1,24 +0,0 @@ -code_category: Atomistic code -code_homepage: https://tight-binding.com/ -code_name: TBS -metadata: - codeCategory: Atomistic code - codeLabel: TBS - codeLabelStyle: All in capitals - codeName: tbs - codeUrl: https://tight-binding.com/ - parserDirName: dependencies/electronic/electronicparsers/tbs/ - parserGitUrl: https://github.com/nomad-coe/electronic-parsers.git - parserSpecific: '' - preamble: '' - status: production - tableOfFiles: '| Input Filename | Description | - - | --- | --- | - - | `*.tbm` | **Mainfile**: output binary file | - - ' -name: parsers/tbs -parser_class_name: electronicparsers.tbs.parser.TBSParser -python_package: electronicparsers.tbs diff --git a/electronicparsers/tbs/parser.py b/electronicparsers/tbs/parser.py deleted file mode 100644 index 36531e22..00000000 --- a/electronicparsers/tbs/parser.py +++ /dev/null @@ -1,96 +0,0 @@ -# -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. -# See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import os -import logging -import numpy as np - -from nomad.units import ureg -from nomad.parsing.file_parser import TextParser, Quantity -from nomad.datamodel.metainfo.simulation.run import Run, Program -from nomad.datamodel.metainfo.simulation.system import ( - System, Atoms, AtomsGroup -) -from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Projection -) -from nomad.datamodel.metainfo.simulation.calculation import ( - Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix -) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint - - -class TBSParser: - level = 1 - - def __init__(self): - self._calculation_type = 'projection' - - def parse_system(self): - """Populates run.system with the input structural parameters. - """ - sec_run = self.archive.run[-1] - sec_system = sec_run.m_create(System) - # Here the key is to populate: - # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the projection in the tight-binding model - sec_atoms = sec_system.m_create(Atoms) - # sec_atoms.lattice_vectors = ... - # sec_atoms.lattice_vectors_reciprocal = ... - # pbc = [True, True, True] if lattice_vectors is not None else [False, False, False] - # sec_atoms.periodic = pbc - # sec_atoms.labels = ... - # sec_atoms.positions = ... - - def parse_method(self): - """Populates run.method with the input methodological parameters. - """ - sec_run = self.archive.run[-1] - sec_method = sec_run.m_create(Method) - - # Here it will be useful to populate `AtomParameters` within Method to account, for - # example, for the orbitals used in the projeciton - - def parse_scc(self): - """Populates run.calculation with the output of the calculation. - """ - sec_run = self.archive.run[-1] - - # The objective here is to populate outputed metainfo, mainly, band structures, eigenvalues, - # dos, hopping matrices, and everything you think is valuable. - - def init_parser(self): - """Initialize the parsers. - """ - pass - - def parse(self, filepath, archive, logger): - self.filepath = os.path.abspath(filepath) - self.archive = archive - self.maindir = os.path.dirname(self.filepath) - self.logger = logger if logger is not None else logging - - self.init_parser() - - self.parse_system() - self.parse_method() - self.parse_scc() - - workflow = SinglePoint() - self.archive.workflow2 = workflow From 90f9eba2fd89d1966ed5f35f1986d994ed988472 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 17 May 2023 16:54:21 +0200 Subject: [PATCH 25/51] Added dft-to-tb workflow --- electronicparsers/tbstudio/parser.py | 90 ++++++++++++++++------------ 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 44dbfff3..7ff39c39 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -34,12 +34,13 @@ from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint, SimulationWorkflow +from nomad.datamodel.metainfo.workflow2 import TaskReference, Link import json import re -def parse_int(string, default=0): +def parse_int(string, default): val = default try: val = np.int64(string) @@ -48,10 +49,10 @@ def parse_int(string, default=0): return val -def parse_float(string, default=0.0): +def parse_float(string, default): val = default try: - val = np.intfloat64(string) + val = np.float64(string) except: pass return val @@ -78,9 +79,9 @@ def load_tbm(file): model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] # Load lattice vectors - model['a'] = [parse_float(tbm['vars']['a[0]']), parse_float(tbm['vars']['a[1]']), parse_float(tbm['vars']['a[2]'])] - model['b'] = [parse_float(tbm['vars']['b[0]']), parse_float(tbm['vars']['b[1]']), parse_float(tbm['vars']['b[2]'])] - model['c'] = [parse_float(tbm['vars']['c[0]']), parse_float(tbm['vars']['c[1]']), parse_float(tbm['vars']['c[2]'])] + model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] + model['b'] = [parse_float(tbm['vars']['b[0]'], 0), parse_float(tbm['vars']['b[1]'], 0), parse_float(tbm['vars']['b[2]'], 0)] + model['c'] = [parse_float(tbm['vars']['c[0]'], 0), parse_float(tbm['vars']['c[1]'], 0), parse_float(tbm['vars']['c[2]'], 0)] # SOC model['isSOC'] = tbm['checks']['SOC[0]'] @@ -98,9 +99,9 @@ def load_tbm(file): break model['xyz_coords'] = xyz_coords - tb_l = parse_int(tbm['vars']['TBl[0]']) - tb_m = parse_int(tbm['vars']['TBm[0]']) - tb_n = parse_int(tbm['vars']['TBn[0]']) + tb_l = parse_int(tbm['vars']['TBl[0]'], 0) + tb_m = parse_int(tbm['vars']['TBm[0]'], 0) + tb_n = parse_int(tbm['vars']['TBn[0]'], 0) model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] @@ -193,8 +194,8 @@ def load_tbm(file): model['final_sk'][tbBond] = {} else: skIntegral = row[0] - initial = parse_float(row[1]) - final = parse_float(row[2]) + initial = parse_float(row[1], 0) + final = parse_float(row[2], 0) model['initial_sk'][tbBond][skIntegral] = initial model['final_sk'][tbBond][skIntegral] = final @@ -213,8 +214,8 @@ def load_tbm(file): model['final_overlap'][tbBond] = {} else: skIntegral = row[0] - initial = parse_float(row[1]) - final = parse_float(row[2]) + initial = parse_float(row[1], 0) + final = parse_float(row[2], 0) model['initial_overlap'][tbBond][skIntegral] = initial model['final_overlap'][tbBond][skIntegral] = final @@ -333,24 +334,11 @@ def parse_system(self): a = self.tb_model['a'] b = self.tb_model['b'] c = self.tb_model['c'] - sec_atoms.lattice_vectors = [a, b, c] + sec_atoms.lattice_vectors = [a, b, c] * ureg.angstrom - pi = np.arccos(-1.0) - vol = np.dot(a, np.cross(b, c)) - astar = 2 * pi * np.cross(b, c) / vol - bstar = 2 * pi * np.cross(c, a) / vol - cstar = 2 * pi * np.cross(a, b) / vol - sec_atoms.lattice_vectors_reciprocal = [astar, bstar, cstar] - - sec_atoms.positions = self.tb_model['xyz_coords'] + sec_atoms.positions = self.tb_model['xyz_coords'] * ureg.angstrom sec_atoms.species = self.tb_model['kinds'] - atoms = get_symbols(self.tb_model['kinds']) - sec_atoms.labels = atoms - - atoms = list(set(atoms)) - atoms.sort() - pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] sec_atoms.periodic = pbc @@ -402,19 +390,23 @@ def parse_scc(self): sec_scc = sec_run.calculation[-1] - sec_k_band = sec_scc.m_create(BandStructure, Calculation.band_structure_electronic) - sec_k_band.energy_fermi = self.tb_model['fermi_level'] + sec_k_band = BandStructure() + sec_k_band.energy_fermi = self.tb_model['fermi_level'] * ureg.eV for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) - print(sec_k_band_segment.energies.shape) + sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) * ureg.eV - def init_parser(self): - """Initialize the parsers. - """ - pass + sec_scc.band_structure_electronic.append(sec_k_band) + + def get_mainfile_keys(self, filepath): + tb_model = load_tbm(filepath) + dft_nomad_entry_id = tb_model['DFTNomadEntryID'] + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': + return ['TB_workflow'] + else: + return True def parse(self, filepath, archive, logger): self.filepath = os.path.abspath(filepath) @@ -425,12 +417,32 @@ def parse(self, filepath, archive, logger): sec_run = self.archive.m_create(Run) sec_run.program = Program(name="TBStudio") self.tb_model = load_tbm(filepath) - - self.init_parser() + dft_nomad_entry_id = self.tb_model['DFTNomadEntryID'] self.parse_system() self.parse_method() self.parse_scc() workflow = SinglePoint() + workflow.name = "Tight Binding Calculation" self.archive.workflow2 = workflow + + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': + dft_archive = None + try: + dft_archive = archive.m_context.resolve_archive('/entries/{}/archive'.format(dft_nomad_entry_id)) + except: + pass + if dft_archive: + if self._child_archives: + tb_workflow = SimulationWorkflow() + tb_workflow.name = "Tight Binding" + self._child_archives['TB_workflow'].workflow2 = tb_workflow + tb_workflow.tasks.append(TaskReference(task=dft_archive.workflow2)) + tb_workflow.tasks.append(TaskReference(task=self.archive.workflow2)) + + workflow.inputs.append(Link(name='Atomic structure', section=dft_archive.run[0].system[0])) + workflow.inputs.append( + Link(name='DFT band structure', section=dft_archive.run[0].calculation[0])) + workflow.outputs.append( + Link(name='TB band structure', section=archive.run[0].calculation[0])) From 140834a2644def220fa76982e35d27c06b87b068 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 14 Jul 2023 11:08:33 +0200 Subject: [PATCH 26/51] compatiblity with the newest version --- electronicparsers/tbstudio/parser.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 7ff39c39..2e450cd5 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -75,8 +75,10 @@ def load_tbm(file): model = {} - # Load workflow - model['DFTNomadEntryID'] = tbm['DFTSource']['DFTNomadEntryID'] + # Load workflow if does exist + model['DFTNomadEntryID'] = None + if 'type' in tbm['DFTSource'] and tbm['DFTSource']['type'].lower() == 'nomad': + model['DFTNomadEntryID'] = tbm['DFTSource']['source'] # Load lattice vectors model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] From aa5e93d3460c3b9fe9c5593d4c46e8306fff57d9 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Mon, 17 Jul 2023 13:09:49 +0200 Subject: [PATCH 27/51] Fixed workflow import after rebasing --- electronicparsers/tbstudio/parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 2e450cd5..a5d980b6 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -35,7 +35,7 @@ Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.workflow import SinglePoint, SimulationWorkflow -from nomad.datamodel.metainfo.workflow2 import TaskReference, Link +from nomad.datamodel.metainfo.workflow import TaskReference, Link import json import re From 49bde2d1e6f104d99593d26f892694f307d668d1 Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 17 Jul 2023 22:04:34 +0200 Subject: [PATCH 28/51] fix bug --- electronicparsers/tbstudio/parser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index a5d980b6..9db73bf8 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -402,7 +402,8 @@ def parse_scc(self): sec_scc.band_structure_electronic.append(sec_k_band) - def get_mainfile_keys(self, filepath): + def get_mainfile_keys(self, **kwargs): + filepath = kwargs.get('filename') tb_model = load_tbm(filepath) dft_nomad_entry_id = tb_model['DFTNomadEntryID'] if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': From 6ad7d0f8df3900fb1420db0b41ac6b5b94fedd45 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 17 Aug 2023 14:38:38 +0200 Subject: [PATCH 29/51] refactor TightBinding to TB in tbstudio and wannier90 --- electronicparsers/tbstudio/parser.py | 4 ++-- electronicparsers/wannier90/parser.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 9db73bf8..0cd5ef06 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -29,7 +29,7 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TightBinding, SlaterKoster, TightBindingOrbital, SlaterKosterBond + Method, AtomParameters, KMesh, TB, SlaterKoster, TightBindingOrbital, SlaterKosterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix @@ -349,7 +349,7 @@ def parse_method(self): """ sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_tb = sec_method.m_create(TightBinding) + sec_tb = sec_method.m_create(TB) sec_sk = sec_tb.m_create(SlaterKoster) n_orbitals = len(self.tb_model['orbitals']) diff --git a/electronicparsers/wannier90/parser.py b/electronicparsers/wannier90/parser.py index 686230ae..86f4e1e4 100644 --- a/electronicparsers/wannier90/parser.py +++ b/electronicparsers/wannier90/parser.py @@ -29,7 +29,7 @@ Calculation, Dos, DosValues, BandStructure, BandEnergies, Energy, HoppingMatrix ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, Wannier, TightBinding + Method, AtomParameters, KMesh, Wannier, TB ) from nomad.datamodel.metainfo.simulation.system import System, Atoms, AtomsGroup from ..utils import get_files @@ -229,7 +229,7 @@ def parse_system(self): def parse_method(self): sec_run = self.archive.run[-1] sec_method = sec_run.m_create(Method) - sec_proj = sec_method.m_create(TightBinding) + sec_proj = sec_method.m_create(TB) sec_wann = sec_proj.m_create(Wannier) # k_mesh section From c09f42f2a66b5e02d15269948fa1ee01579064f0 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 18 Aug 2023 15:12:54 +0200 Subject: [PATCH 30/51] parse sk integrals and orbitals --- electronicparsers/tbstudio/parser.py | 57 ++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 0cd5ef06..361c721b 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -29,7 +29,7 @@ System, Atoms, AtomsGroup ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TB, SlaterKoster, TightBindingOrbital, SlaterKosterBond + Method, AtomParameters, KMesh, TB, SlaterKoster, TightBindingOrbital, SlaterKosterBond, TwoCenterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix @@ -352,31 +352,64 @@ def parse_method(self): sec_tb = sec_method.m_create(TB) sec_sk = sec_tb.m_create(SlaterKoster) - n_orbitals = len(self.tb_model['orbitals']) orbitals = self.tb_model['orbitals'] - sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) + + for atom_index, orbital in enumerate(orbitals): + shells = self.tb_model['final_os'][orbital] + for iShell, shellOrbitals in enumerate(shells.values()): + for orbital_name, onSite in shellOrbitals.items(): + sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) + sec_orbitals.orbital_name = orbital_name + sec_orbitals.atom_index = atom_index + sec_orbitals.shell = iShell + sec_orbitals.onsite_energy = onSite for bond in self.tb_model['bonds']: atom1 = bond['atom1'] atom2 = bond['atom2'] - type = bond['type'] + bond_type = bond['type'] h_sk = None s_sk = None if self.tb_model['final_sk'] != {}: - h_sk = self.tb_model['final_sk'][type] + h_sk = self.tb_model['final_sk'][bond_type] if self.tb_model['final_overlap'] != {}: - s_sk = self.tb_model['final_overlap'][type] + s_sk = self.tb_model['final_overlap'][bond_type] if h_sk is not None: sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) - sec_bonds.bond_label = type - sec_bonds.index1 = atom1['index'] - sec_bonds.index2 = atom2['index'] + sec_bonds.bond_label = bond_type + + center1 = sec_bonds.m_create(TightBindingOrbital, TwoCenterBond.center1) + center1.atom_index = atom1['index'] + center1.shell = atom1['shell'] + indices = re.findall(r'-?\d+', atom1['cell']) + center1.cell = [int(index) for index in indices] + + center2 = sec_bonds.m_create(TightBindingOrbital, TwoCenterBond.center2) + center2.atom_index = atom2['index'] + center2.shell = atom2['shell'] + indices = re.findall(r'-?\d+', atom2['cell']) + center2.cell = [int(index) for index in indices] + for sk_label, sk_integral in h_sk.items(): + setattr(sec_bonds, sk_label, sk_integral) + if s_sk is not None: sec_overlaps = sec_sk.m_create(SlaterKosterBond, SlaterKoster.overlaps) - sec_overlaps.bond_label = type - sec_overlaps.index1 = atom1['index'] - sec_overlaps.index2 = atom2['index'] + sec_overlaps.bond_label = bond_type + + center1 = sec_overlaps.m_create(TightBindingOrbital, TwoCenterBond.center1) + center1.atom_index = atom1['index'] + center1.shell = atom1['shell'] + indices = re.findall(r'-?\d+', atom1['cell']) + center1.cell = [int(index) for index in indices] + + center2 = sec_overlaps.m_create(TightBindingOrbital, TwoCenterBond.center2) + center2.atom_index = atom2['index'] + center2.shell = atom2['shell'] + indices = re.findall(r'-?\d+', atom2['cell']) + center2.cell = [int(index) for index in indices] + for sk_label, sk_integral in s_sk.items(): + setattr(sec_overlaps, sk_label, sk_integral) def parse_scc(self): """Populates run.calculation with the output of the calculation. From 7977c27c2ea4dc938ddf611aeccda7d56141d56b Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 18 Aug 2023 15:18:43 +0200 Subject: [PATCH 31/51] fix parser and the model --- electronicparsers/tbstudio/parser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 361c721b..3b9f5cc9 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -383,13 +383,13 @@ def parse_method(self): center1.atom_index = atom1['index'] center1.shell = atom1['shell'] indices = re.findall(r'-?\d+', atom1['cell']) - center1.cell = [int(index) for index in indices] + center1.cell_index = [int(index) for index in indices] center2 = sec_bonds.m_create(TightBindingOrbital, TwoCenterBond.center2) center2.atom_index = atom2['index'] center2.shell = atom2['shell'] indices = re.findall(r'-?\d+', atom2['cell']) - center2.cell = [int(index) for index in indices] + center2.cell_index = [int(index) for index in indices] for sk_label, sk_integral in h_sk.items(): setattr(sec_bonds, sk_label, sk_integral) @@ -401,13 +401,13 @@ def parse_method(self): center1.atom_index = atom1['index'] center1.shell = atom1['shell'] indices = re.findall(r'-?\d+', atom1['cell']) - center1.cell = [int(index) for index in indices] + center1.cell_index = [int(index) for index in indices] center2 = sec_overlaps.m_create(TightBindingOrbital, TwoCenterBond.center2) center2.atom_index = atom2['index'] center2.shell = atom2['shell'] indices = re.findall(r'-?\d+', atom2['cell']) - center2.cell = [int(index) for index in indices] + center2.cell_index = [int(index) for index in indices] for sk_label, sk_integral in s_sk.items(): setattr(sec_overlaps, sk_label, sk_integral) From 514c503fbb1e6a9a449d17cf8a6db07a78533051 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 18 Aug 2023 16:43:03 +0200 Subject: [PATCH 32/51] show the tight-binding band-structure and the dft band-structure in workflow --- electronicparsers/tbstudio/parser.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 3b9f5cc9..3600b48b 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -77,8 +77,10 @@ def load_tbm(file): # Load workflow if does exist model['DFTNomadEntryID'] = None + model['DFTNomadUploadID'] = None if 'type' in tbm['DFTSource'] and tbm['DFTSource']['type'].lower() == 'nomad': - model['DFTNomadEntryID'] = tbm['DFTSource']['source'] + model['DFTNomadUploadID'] = tbm['DFTSource']['source']['upload_id'] + model['DFTNomadEntryID'] = tbm['DFTSource']['source']['entry_id'] # Load lattice vectors model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] @@ -439,7 +441,8 @@ def get_mainfile_keys(self, **kwargs): filepath = kwargs.get('filename') tb_model = load_tbm(filepath) dft_nomad_entry_id = tb_model['DFTNomadEntryID'] - if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': + dft_nomad_upload_id = tb_model['DFTNomadUploadID'] + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '' and dft_nomad_upload_id is not None and dft_nomad_upload_id != '': return ['TB_workflow'] else: return True @@ -454,6 +457,7 @@ def parse(self, filepath, archive, logger): sec_run.program = Program(name="TBStudio") self.tb_model = load_tbm(filepath) dft_nomad_entry_id = self.tb_model['DFTNomadEntryID'] + dft_nomad_upload_id = self.tb_model['DFTNomadUploadID'] self.parse_system() self.parse_method() @@ -463,10 +467,10 @@ def parse(self, filepath, archive, logger): workflow.name = "Tight Binding Calculation" self.archive.workflow2 = workflow - if dft_nomad_entry_id is not None and dft_nomad_entry_id != '': + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '' and dft_nomad_upload_id is not None and dft_nomad_upload_id != '': dft_archive = None try: - dft_archive = archive.m_context.resolve_archive('/entries/{}/archive'.format(dft_nomad_entry_id)) + dft_archive = archive.m_context.load_archive(dft_nomad_entry_id, dft_nomad_upload_id, None) except: pass if dft_archive: @@ -482,3 +486,10 @@ def parse(self, filepath, archive, logger): Link(name='DFT band structure', section=dft_archive.run[0].calculation[0])) workflow.outputs.append( Link(name='TB band structure', section=archive.run[0].calculation[0])) + + tb_wofkflow_archive = self._child_archives['TB_workflow'] + tb_wofkflow_archive.run.append(Run( + program=Program(name="TB Workflow"), + calculation=[Calculation(band_structure_electronic=[dft_archive.run[-1].calculation[-1].band_structure_electronic[0], self.archive.run[-1].calculation[-1].band_structure_electronic[0]])], + system=[dft_archive.run[-1].system[-1].m_copy()] + )) \ No newline at end of file From bc8f4a9bea166b9129f8e98255efa3342f95ddc4 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 18 Aug 2023 17:07:24 +0200 Subject: [PATCH 33/51] fix the band-structures in workflow and SinglePoint --- electronicparsers/tbstudio/parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 3600b48b..c37e914c 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -490,6 +490,6 @@ def parse(self, filepath, archive, logger): tb_wofkflow_archive = self._child_archives['TB_workflow'] tb_wofkflow_archive.run.append(Run( program=Program(name="TB Workflow"), - calculation=[Calculation(band_structure_electronic=[dft_archive.run[-1].calculation[-1].band_structure_electronic[0], self.archive.run[-1].calculation[-1].band_structure_electronic[0]])], + calculation=[Calculation(band_structure_electronic=[dft_archive.run[-1].calculation[-1].band_structure_electronic[0], self.archive.run[-1].calculation[-1].band_structure_electronic[0].m_copy(deep=True)])], system=[dft_archive.run[-1].system[-1].m_copy()] )) \ No newline at end of file From e103ff13d73fbb97b2127ce2c190d8654e583262 Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 21 Aug 2023 16:31:21 +0200 Subject: [PATCH 34/51] added firstPrinciples-TB workflow --- electronicparsers/tbstudio/parser.py | 57 ++++++++++---------------- electronicparsers/utils/utils.py | 61 ++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 38 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index c37e914c..e9877e01 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -21,23 +21,22 @@ import logging import numpy as np -from matid.data.element_data import get_symbols from nomad.units import ureg -from nomad.parsing.file_parser import TextParser, Quantity from nomad.datamodel.metainfo.simulation.run import Run, Program from nomad.datamodel.metainfo.simulation.system import ( - System, Atoms, AtomsGroup + System, Atoms ) from nomad.datamodel.metainfo.simulation.method import ( - Method, AtomParameters, KMesh, TB, SlaterKoster, TightBindingOrbital, SlaterKosterBond, TwoCenterBond + Method, TB, SlaterKoster, TightBindingOrbital, SlaterKosterBond, TwoCenterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( - Calculation, Dos, BandStructure, BandEnergies, Energy, HoppingMatrix + Calculation, BandStructure, BandEnergies ) -from nomad.datamodel.metainfo.simulation.workflow import SinglePoint, SimulationWorkflow -from nomad.datamodel.metainfo.workflow import TaskReference, Link +from nomad.datamodel.metainfo.simulation.workflow import SinglePoint import json import re +from nomad.datamodel.metainfo.workflow import Workflow +from ..utils import BeyondDFTWorkflowsParser def parse_int(string, default): @@ -319,7 +318,7 @@ def load_tbm(file): return model -class TBStudioParser: +class TBStudioParser(BeyondDFTWorkflowsParser): level = 1 def __init__(self): @@ -437,6 +436,13 @@ def parse_scc(self): sec_scc.band_structure_electronic.append(sec_k_band) + def parse_workflow(self): + sec_workflow = self.archive.m_create(Workflow) + workflow = SinglePoint() + sec_workflow.type = 'single_point' + workflow.name = "Tight Binding Calculation" + self.archive.workflow2 = workflow + def get_mainfile_keys(self, **kwargs): filepath = kwargs.get('filename') tb_model = load_tbm(filepath) @@ -448,8 +454,9 @@ def get_mainfile_keys(self, **kwargs): return True def parse(self, filepath, archive, logger): + tb_archive = archive self.filepath = os.path.abspath(filepath) - self.archive = archive + self.archive = tb_archive self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging @@ -463,33 +470,13 @@ def parse(self, filepath, archive, logger): self.parse_method() self.parse_scc() - workflow = SinglePoint() - workflow.name = "Tight Binding Calculation" - self.archive.workflow2 = workflow - + self.parse_workflow() if dft_nomad_entry_id is not None and dft_nomad_entry_id != '' and dft_nomad_upload_id is not None and dft_nomad_upload_id != '': - dft_archive = None + first_principles_calculation_archive = None try: - dft_archive = archive.m_context.load_archive(dft_nomad_entry_id, dft_nomad_upload_id, None) + first_principles_calculation_archive = archive.m_context.load_archive(dft_nomad_entry_id, dft_nomad_upload_id, None) except: pass - if dft_archive: - if self._child_archives: - tb_workflow = SimulationWorkflow() - tb_workflow.name = "Tight Binding" - self._child_archives['TB_workflow'].workflow2 = tb_workflow - tb_workflow.tasks.append(TaskReference(task=dft_archive.workflow2)) - tb_workflow.tasks.append(TaskReference(task=self.archive.workflow2)) - - workflow.inputs.append(Link(name='Atomic structure', section=dft_archive.run[0].system[0])) - workflow.inputs.append( - Link(name='DFT band structure', section=dft_archive.run[0].calculation[0])) - workflow.outputs.append( - Link(name='TB band structure', section=archive.run[0].calculation[0])) - - tb_wofkflow_archive = self._child_archives['TB_workflow'] - tb_wofkflow_archive.run.append(Run( - program=Program(name="TB Workflow"), - calculation=[Calculation(band_structure_electronic=[dft_archive.run[-1].calculation[-1].band_structure_electronic[0], self.archive.run[-1].calculation[-1].band_structure_electronic[0].m_copy(deep=True)])], - system=[dft_archive.run[-1].system[-1].m_copy()] - )) \ No newline at end of file + if first_principles_calculation_archive and self._child_archives: + tb_workflow_archive = self._child_archives.get('TB_workflow') + self.parse_tb_workflow(tb_archive, first_principles_calculation_archive, tb_workflow_archive) diff --git a/electronicparsers/utils/utils.py b/electronicparsers/utils/utils.py index 5b7fce02..df35d993 100644 --- a/electronicparsers/utils/utils.py +++ b/electronicparsers/utils/utils.py @@ -24,13 +24,13 @@ from typing import Union from nomad.utils import extract_section from nomad.datamodel import EntryArchive -from nomad.datamodel.metainfo.simulation.run import Run +from nomad.datamodel.metainfo.simulation.run import Run, Program from nomad.datamodel.metainfo.workflow import Link, TaskReference from nomad.datamodel.metainfo.simulation.workflow import ( - GW, GWMethod, DMFT, DMFTMethod, XS, XSMethod, MaxEnt, MaxEntMethod, + GW, GWMethod, DMFT, DMFTMethod, XS, XSMethod, TB, TBMethod, MaxEnt, MaxEntMethod, PhotonPolarization, PhotonPolarizationMethod, PhotonPolarizationResults ) - +from nomad.datamodel.metainfo.simulation.calculation import Calculation def get_files(pattern: str, filepath: str, stripname: str = '', deep: bool = True): """Get files following the `pattern` with respect to the file `stripname` (usually this @@ -158,6 +158,61 @@ def parse_gw_workflow(self, gw_archive: EntryArchive, gw_workflow_archive: Entry gw_workflow_archive.workflow2 = workflow + def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculation_archive: EntryArchive, tb_workflow_archive: EntryArchive): + """Automatically parses the TB workflow. Here, `self.archive` is the DFT archive. + + Args: + tb_archive (EntryArchive): the Tight-Binding archive + first_principles_calculation_archive (EntryArchive): the first-principles-calculation archive + tb_workflow_archive (EntryArchive): the Tight-Binding workflow archive + """ + self.run_workflow_archive(tb_workflow_archive) + + workflow = TB(method=TBMethod()) + workflow.name = 'TB' + + # Method + method_tb = extract_section(tb_archive, 'run/method/tb') + workflow.method.tb_method_ref = method_tb + + # Inputs and Outputs + input_structure = extract_section(first_principles_calculation_archive, 'run/system') + first_principles_calculation = extract_section(first_principles_calculation_archive, 'run/calculation') + tb_calculation = extract_section(tb_archive, 'run/calculation') + if input_structure: + workflow.m_add_sub_section( + TB.inputs, Link(name='Input structure', section=input_structure)) + if tb_calculation: + workflow.m_add_sub_section( + TB.outputs, Link(name='Output TB Calculation', section=tb_calculation)) + + # First Principles Calculation task + if self.archive.workflow2: + task = TaskReference(task=first_principles_calculation_archive.workflow2) + task.name = 'First Principles Calculation' + if input_structure: + task.inputs = [Link(name='Input structure', section=input_structure)] + if first_principles_calculation: + task.outputs = [Link(name='Output First Principles Calculation', section=first_principles_calculation)] + workflow.m_add_sub_section(TB.tasks, task) + + # TB task + if tb_archive.workflow2: + task = TaskReference(task=tb_archive.workflow2) + task.name = 'TB Workflow' + if first_principles_calculation: + task.inputs = [Link(name='Input First Principles Calculation', section=first_principles_calculation)] + if tb_calculation: + task.outputs = [Link(name='Output TB calculation', section=tb_calculation)] + workflow.m_add_sub_section(TB.tasks, task) + + tb_workflow_archive.workflow2 = workflow + + tb_workflow_archive.run[-1].calculation.append(Calculation( + band_structure_electronic=[ + first_principles_calculation_archive.run[-1].calculation[-1].band_structure_electronic[0], + tb_archive.run[-1].calculation[-1].band_structure_electronic[0].m_copy(deep=True)])) + def parse_photon_workflow(self): """Automatically parses the PhotonPolarization workflow. Here, `self.archive` is the photon_workflow archive, and `self._child_archives` the archives for SinglePoint From c0be7ba2018f65cea8c78174ba9fa43bb8d566ec Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 23 Aug 2023 14:04:17 +0200 Subject: [PATCH 35/51] added fermi level --- electronicparsers/tbstudio/parser.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index e9877e01..aa497a34 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -30,7 +30,7 @@ Method, TB, SlaterKoster, TightBindingOrbital, SlaterKosterBond, TwoCenterBond ) from nomad.datamodel.metainfo.simulation.calculation import ( - Calculation, BandStructure, BandEnergies + Calculation, BandStructure, BandEnergies, Energy ) from nomad.datamodel.metainfo.simulation.workflow import SinglePoint import json @@ -424,15 +424,18 @@ def parse_scc(self): if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: return + fermi_level_joules = self.tb_model['fermi_level'] * ureg.eV sec_scc = sec_run.calculation[-1] + sec_energy = sec_scc.m_create(Energy, Calculation.energy) + sec_energy.fermi = fermi_level_joules sec_k_band = BandStructure() - sec_k_band.energy_fermi = self.tb_model['fermi_level'] * ureg.eV + sec_k_band.energy_fermi = fermi_level_joules for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = np.array([tb_bands[n1: n2 + 1]]) * ureg.eV + sec_k_band_segment.energies = (np.array([tb_bands[n1: n2 + 1]]) + self.tb_model['fermi_level']) * ureg.eV sec_scc.band_structure_electronic.append(sec_k_band) @@ -440,7 +443,7 @@ def parse_workflow(self): sec_workflow = self.archive.m_create(Workflow) workflow = SinglePoint() sec_workflow.type = 'single_point' - workflow.name = "Tight Binding Calculation" + workflow.name = "Tight Binding Model" self.archive.workflow2 = workflow def get_mainfile_keys(self, **kwargs): From 3e96a784f2d824b21eae9b5b6bc43d6895fb7196 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 24 Aug 2023 14:40:50 +0200 Subject: [PATCH 36/51] fixed Tight-Binding BZ --- electronicparsers/tbstudio/parser.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index aa497a34..f452f9ba 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -432,6 +432,16 @@ def parse_scc(self): sec_k_band = BandStructure() sec_k_band.energy_fermi = fermi_level_joules + a = self.tb_model['a'] + b = self.tb_model['b'] + c = self.tb_model['c'] + pi = np.arccos(-1.0) + vol = np.dot(a, np.cross(b, c)) + astar = 2 * pi * np.cross(b, c) / vol * 10**9 + bstar = 2 * pi * np.cross(c, a) / vol * 10**9 + cstar = 2 * pi * np.cross(a, b) / vol * 10**9 + sec_k_band.reciprocal_cell = [astar, bstar, cstar] + for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] From c96aa289d8ac781f06c4260e8a010935c62d339e Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 24 Aug 2023 14:41:46 +0200 Subject: [PATCH 37/51] Added the new workflow implementation --- electronicparsers/utils/utils.py | 36 +++++++++++++------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/electronicparsers/utils/utils.py b/electronicparsers/utils/utils.py index df35d993..d263e081 100644 --- a/electronicparsers/utils/utils.py +++ b/electronicparsers/utils/utils.py @@ -24,13 +24,12 @@ from typing import Union from nomad.utils import extract_section from nomad.datamodel import EntryArchive -from nomad.datamodel.metainfo.simulation.run import Run, Program +from nomad.datamodel.metainfo.simulation.run import Run from nomad.datamodel.metainfo.workflow import Link, TaskReference from nomad.datamodel.metainfo.simulation.workflow import ( GW, GWMethod, DMFT, DMFTMethod, XS, XSMethod, TB, TBMethod, MaxEnt, MaxEntMethod, PhotonPolarization, PhotonPolarizationMethod, PhotonPolarizationResults ) -from nomad.datamodel.metainfo.simulation.calculation import Calculation def get_files(pattern: str, filepath: str, stripname: str = '', deep: bool = True): """Get files following the `pattern` with respect to the file `stripname` (usually this @@ -167,9 +166,9 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati tb_workflow_archive (EntryArchive): the Tight-Binding workflow archive """ self.run_workflow_archive(tb_workflow_archive) - + tb_workflow_archive.run[-1].m_add_sub_section(Run.system, first_principles_calculation_archive.run[-1].system[-1]) workflow = TB(method=TBMethod()) - workflow.name = 'TB' + workflow.name = 'TB Fitting' # Method method_tb = extract_section(tb_archive, 'run/method/tb') @@ -181,38 +180,33 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati tb_calculation = extract_section(tb_archive, 'run/calculation') if input_structure: workflow.m_add_sub_section( - TB.inputs, Link(name='Input structure', section=input_structure)) + TB.inputs, Link(name='Structure', section=input_structure)) if tb_calculation: workflow.m_add_sub_section( - TB.outputs, Link(name='Output TB Calculation', section=tb_calculation)) + TB.outputs, Link(name='TB Model', section=tb_calculation)) # First Principles Calculation task if self.archive.workflow2: - task = TaskReference(task=first_principles_calculation_archive.workflow2) - task.name = 'First Principles Calculation' + first_principles_task = TaskReference(task=first_principles_calculation_archive.workflow2) + first_principles_task.name = 'First-Principles Calculation' if input_structure: - task.inputs = [Link(name='Input structure', section=input_structure)] + first_principles_task.inputs = [Link(name='Structure', section=input_structure)] if first_principles_calculation: - task.outputs = [Link(name='Output First Principles Calculation', section=first_principles_calculation)] - workflow.m_add_sub_section(TB.tasks, task) + first_principles_task.outputs = [Link(name='First Principles Calculation', section=first_principles_calculation)] + workflow.m_add_sub_section(TB.tasks, first_principles_task) # TB task if tb_archive.workflow2: - task = TaskReference(task=tb_archive.workflow2) - task.name = 'TB Workflow' + tb_task = TaskReference(task=tb_archive.workflow2) + tb_task.name = 'Tight-Binding' if first_principles_calculation: - task.inputs = [Link(name='Input First Principles Calculation', section=first_principles_calculation)] + tb_task.inputs = [Link(name='First-Principles Calculation', section=first_principles_calculation)] if tb_calculation: - task.outputs = [Link(name='Output TB calculation', section=tb_calculation)] - workflow.m_add_sub_section(TB.tasks, task) + tb_task.outputs = [Link(name='TB Model', section=tb_calculation)] + workflow.m_add_sub_section(TB.tasks, tb_task) tb_workflow_archive.workflow2 = workflow - tb_workflow_archive.run[-1].calculation.append(Calculation( - band_structure_electronic=[ - first_principles_calculation_archive.run[-1].calculation[-1].band_structure_electronic[0], - tb_archive.run[-1].calculation[-1].band_structure_electronic[0].m_copy(deep=True)])) - def parse_photon_workflow(self): """Automatically parses the PhotonPolarization workflow. Here, `self.archive` is the photon_workflow archive, and `self._child_archives` the archives for SinglePoint From 719110dc010332161f07f4c0525082e76f435aee Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 25 Aug 2023 12:15:17 +0200 Subject: [PATCH 38/51] Added a test for parser --- electronicparsers/tbstudio/parser.py | 5 +- tests/test_tbstudioparser.py | 98 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 tests/test_tbstudioparser.py diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index f452f9ba..96b0cc69 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -72,7 +72,7 @@ def load_tbm(file): if application_full_name != 'Tight Binding Studio' or not release_version: raise Exception('The file is not a valid TBStudio tight binding model.') - model = {} + model = dict({'version': release_version}) # Load workflow if does exist model['DFTNomadEntryID'] = None @@ -349,6 +349,9 @@ def parse_method(self): """Populates run.method with the input methodological parameters. """ sec_run = self.archive.run[-1] + + sec_run.program = Program(name='TBStudio', version=self.tb_model['version']) + sec_method = sec_run.m_create(Method) sec_tb = sec_method.m_create(TB) sec_sk = sec_tb.m_create(SlaterKoster) diff --git a/tests/test_tbstudioparser.py b/tests/test_tbstudioparser.py new file mode 100644 index 00000000..eb8d5c81 --- /dev/null +++ b/tests/test_tbstudioparser.py @@ -0,0 +1,98 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import pytest +import numpy as np + +from nomad.datamodel import EntryArchive +from electronicparsers.tbstudio import TBStudioParser + + +def approx(value, abs=0, rel=1e-6): + return pytest.approx(value, abs=abs, rel=rel) + + +@pytest.fixture(scope='module') +def parser(): + return TBStudioParser() + + +def test_parser(parser): + archive = EntryArchive() + parser.parse('tests/data/tbstudio/graphenePz.tbm', archive, None) + + sec_run = archive.run[-1] + sec_program = sec_run.program + assert sec_program.name == 'TBStudio' + assert sec_program.version == '2.0' + + assert len(sec_run.system) == 1 + sec_system = sec_run.system[-1] + assert (sec_system.atoms.species == [6, 6]).all() + + a = [1.23435, 2.14452, 0.0] + b = [1.23435, -2.14452, 0.0] + c = [0.0, 0.0, 20.0] + positions = [[0.00414, -0.004863, 10.0], [1.238611, -0.72006, 10.0]] + assert sec_system.atoms.lattice_vectors.magnitude * 10 ** 10 == approx(np.array([a, b, c])) + assert sec_system.atoms.positions.magnitude * 10 ** 10 == approx(np.array(positions)) + assert sec_system.atoms.periodic == [True, True, False] + + assert len(sec_run.method) == 1 + sec_method = sec_run.method[-1] + + assert sec_method.tb.slater_koster is not None + sk = sec_method.tb.slater_koster + assert len(sk.orbitals) == 2 + assert len(sk.bonds) == 3 + + assert sk.orbitals[0].orbital_name == 'p_z' + assert sk.orbitals[1].orbital_name == 'p_z' + assert sk.orbitals[0].shell == 0 + assert sk.orbitals[1].shell == 0 + assert sk.orbitals[0].onsite_energy == -0.15789243 + assert sk.orbitals[1].onsite_energy == -0.15789243 + assert sk.orbitals[0].atom_index == 0 + assert sk.orbitals[1].atom_index == 1 + + for i in [0, 1, 2]: + assert sk.bonds[i].bond_label == 'Bond 1' + assert sk.bonds[i].center1.shell == 1 + assert sk.bonds[i].pps == 0.0 + assert sk.bonds[i].ppp == -2.34157934 + assert (sk.bonds[i].center1.cell_index == [0, 0, 0]).all() + + assert sk.bonds[0].center1.atom_index == 1 + assert sk.bonds[1].center1.atom_index == 2 + assert sk.bonds[2].center1.atom_index == 2 + assert sk.bonds[0].center2.atom_index == 2 + assert sk.bonds[1].center2.atom_index == 1 + assert sk.bonds[2].center2.atom_index == 1 + assert (sk.bonds[0].center2.cell_index == [0, 0, 0]).all() + assert (sk.bonds[1].center2.cell_index == [0, 1, 0]).all() + assert (sk.bonds[2].center2.cell_index == [1, 1, 0]).all() + + # Band tests + assert len(sec_run.calculation) == 1 + sec_scc = sec_run.calculation[-1] + assert len(sec_scc.band_structure_electronic[0].segment) == 3 + assert len(sec_scc.band_structure_electronic[0].segment[0].kpoints) == 100 + assert len(sec_scc.band_structure_electronic[0].segment[0].kpoints) == \ + len(sec_scc.band_structure_electronic[0].segment[0].energies[0]) + assert sec_scc.energy.fermi == sec_scc.band_structure_electronic[0].energy_fermi + assert sec_scc.band_structure_electronic[0].energy_fermi.to('eV').magnitude == approx(-4.25178) From 93ca31650b47a909a1302b4f76ec8894f49e581d Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 28 Aug 2023 15:17:34 +0200 Subject: [PATCH 39/51] remove the middle parsed dictionary --- electronicparsers/tbstudio/parser.py | 508 ++++++++++----------------- electronicparsers/utils/utils.py | 6 +- 2 files changed, 196 insertions(+), 318 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 96b0cc69..1f08a809 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -39,285 +39,6 @@ from ..utils import BeyondDFTWorkflowsParser -def parse_int(string, default): - val = default - try: - val = np.int64(string) - except: - pass - return val - - -def parse_float(string, default): - val = default - try: - val = np.float64(string) - except: - pass - return val - - -def load_tbm(file): - f = open(file) - tbm = json.load(f) - f.close() - - # validation - application_full_name = None - release_version = None - if 'ApplicationFullName' in tbm and 'ReleaseVersion' in tbm: - application_full_name = tbm['ApplicationFullName'] - release_version = tbm['ReleaseVersion'] - - if application_full_name != 'Tight Binding Studio' or not release_version: - raise Exception('The file is not a valid TBStudio tight binding model.') - - model = dict({'version': release_version}) - - # Load workflow if does exist - model['DFTNomadEntryID'] = None - model['DFTNomadUploadID'] = None - if 'type' in tbm['DFTSource'] and tbm['DFTSource']['type'].lower() == 'nomad': - model['DFTNomadUploadID'] = tbm['DFTSource']['source']['upload_id'] - model['DFTNomadEntryID'] = tbm['DFTSource']['source']['entry_id'] - - # Load lattice vectors - model['a'] = [parse_float(tbm['vars']['a[0]'], 0), parse_float(tbm['vars']['a[1]'], 0), parse_float(tbm['vars']['a[2]'], 0)] - model['b'] = [parse_float(tbm['vars']['b[0]'], 0), parse_float(tbm['vars']['b[1]'], 0), parse_float(tbm['vars']['b[2]'], 0)] - model['c'] = [parse_float(tbm['vars']['c[0]'], 0), parse_float(tbm['vars']['c[1]'], 0), parse_float(tbm['vars']['c[2]'], 0)] - - # SOC - model['isSOC'] = tbm['checks']['SOC[0]'] - - # Load coordinates - _xyz_coords = tbm['grids']['XYZ_Coords']['value'] - xyz_coords = [] - for r in _xyz_coords: - try: - x = np.float64(r[0]) - y = np.float64(r[1]) - z = np.float64(r[2]) - xyz_coords.append([x, y, z]) - except: - break - model['xyz_coords'] = xyz_coords - - tb_l = parse_int(tbm['vars']['TBl[0]'], 0) - tb_m = parse_int(tbm['vars']['TBm[0]'], 0) - tb_n = parse_int(tbm['vars']['TBn[0]'], 0) - - model['neighbor_unit_cells'] = [tb_l, tb_m, tb_n] - - dim = 0 - for i in model['neighbor_unit_cells']: - if i != 0: - dim = dim + 1 - - if dim == 0: - model['dimension'] = '0D' - elif dim == 1: - model['dimension'] = '1D' - elif dim == 2: - model['dimension'] = '2D' - elif dim == 3: - model['dimension'] = '3D' - - # Load fractional coordinates and kinds - _kabc_coords = tbm['grids']['KABC_Coords']['value'] - kinds = [] - abc_coords = [] - for r in _kabc_coords: - try: - k = np.int64(r[0]) - a = np.float64(r[1]) - b = np.float64(r[2]) - c = np.float64(r[3]) - kinds.append(k) - abc_coords.append([a, b, c]) - except: - break - model['kinds'] = kinds - model['abc_coords'] = abc_coords - - # Load SK model - _os = tbm['grids']['OS']['value'] - _osr = tbm['grids']['OS']['isReadOnly'] - - model['initial_os'] = {} - model['final_os'] = {} - tbAtom = '' - shell = '' - for state, row in zip(_osr, _os): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - os_name = row[0] - orbital_info = re.search("^(.*) \((.*)\)$", os_name) - tbAtom = orbital_info[1] - shell = orbital_info[2] - if tbAtom not in model['initial_os']: - model['initial_os'][tbAtom] = {shell: {}} - else: - if shell not in model['initial_os'][tbAtom]: - model['initial_os'][tbAtom][shell] = {} - if tbAtom not in model['final_os']: - model['final_os'][tbAtom] = {shell: {}} - else: - if shell not in model['final_os'][tbAtom]: - model['final_os'][tbAtom][shell] = {} - else: - orbital = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass - final = 0 - try: - final = np.float64(row[2]) - except: - pass - - model['initial_os'][tbAtom][shell][orbital] = initial - model['final_os'][tbAtom][shell][orbital] = final - - _sk = tbm['grids']['SK']['value'] - _skr = tbm['grids']['SK']['isReadOnly'] - model['initial_sk'] = {} - model['final_sk'] = {} - tbBond = '' - for state, row in zip(_skr, _sk): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - tbBond = row[0] - model['initial_sk'][tbBond] = {} - model['final_sk'][tbBond] = {} - else: - skIntegral = row[0] - initial = parse_float(row[1], 0) - final = parse_float(row[2], 0) - model['initial_sk'][tbBond][skIntegral] = initial - model['final_sk'][tbBond][skIntegral] = final - - _ol = tbm['grids']['OL']['value'] - _olr = tbm['grids']['OL']['isReadOnly'] - model['initial_overlap'] = {} - model['final_overlap'] = {} - tbBond = '' - for state, row in zip(_olr, _ol): - if state[0] and state[1] and state[2]: - if row[0] == '' and row[1] == '' and row[2] == '': - break - else: - tbBond = row[0] - model['initial_overlap'][tbBond] = {} - model['final_overlap'][tbBond] = {} - else: - skIntegral = row[0] - initial = parse_float(row[1], 0) - final = parse_float(row[2], 0) - model['initial_overlap'][tbBond][skIntegral] = initial - model['final_overlap'][tbBond][skIntegral] = final - - orbitals = [] - lastInd = 0 - for i in range(1, 100): - varName = 'AtomInd{}'.format(i) - orbital = tbm['combos'][varName] - if orbital['selected'] != 0: - lastInd = i - for i in range(1, lastInd + 1): - varName = 'AtomInd{}'.format(i) - orbital = tbm['combos'][varName] - items = orbital["items"] - selected = orbital['selected'] - if selected == 0: - orbitals.append(None) - else: - orbitals.append(items[selected]) - - model['orbitals'] = orbitals - - _k_points = tbm['variables']['KPoints'] - frac_k_points = [] - k_points = [] - k_length = [] - for row in _k_points: - frac_k_points.append([row[0], row[1], row[2]]) - k_points.append([row[3], row[4], row[5]]) - k_length.append(row[6]) - model['frac_k_points'] = frac_k_points - model['k_points'] = k_points - model['k_length'] = k_length - - model['bandSections'] = tbm['variables']['bandSections'] - model['dft_bands'] = tbm['variables']['DFTEigVal'] - model['initial_tb_bands'] = tbm['variables']['iTBEigVal'] - model['final_tb_bands'] = tbm['variables']['fTBEigVal'] - model['fermi_level'] = tbm['variables']['ChemP'] - - tb_unit_cells = tbm['lists']['EssentialUnitcellList'] - model['initial_hamiltonian_matrix'] = {} - model['final_hamiltonian_matrix'] = {} - model['initial_overlap_matrix'] = {} - model['final_overlap_matrix'] = {} - for index, unit_cell in enumerate(tb_unit_cells): - if len(tbm['variables']['Hi']) > index: - model['initial_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hi'][index] - if len(tbm['variables']['Hi']) > index: - model['final_hamiltonian_matrix'][unit_cell] = tbm['variables']['Hf'][index] - if len(tbm['variables']['Si']) > index: - model['initial_overlap_matrix'][unit_cell] = tbm['variables']['Si'][index] - if len(tbm['variables']['Sf']) > index: - model['final_overlap_matrix'][unit_cell] = tbm['variables']['Sf'][index] - - model['initial_soc_matrix'] = {} - model['final_soc_matrix'] = {} - - if len(tbm['variables']['SOCi']) > 0: - model['initial_soc_matrix']['real'] = tbm['variables']['SOCi'][0] - if len(tbm['variables']['SOCi']) > 1: - model['initial_soc_matrix']['image'] = tbm['variables']['SOCi'][1] - if len(tbm['variables']['SOCf']) > 0: - model['final_soc_matrix']['real'] = tbm['variables']['SOCf'][0] - if len(tbm['variables']['SOCf']) > 1: - model['final_soc_matrix']['image'] = tbm['variables']['SOCf'][1] - - model['bonds'] = [] - if 'TB Model' in tbm['trees']['Bonds']: - if 'children' in tbm['trees']['Bonds']['TB Model']: - allBonds = tbm['trees']['Bonds']['TB Model']['children'] - allCells = allBonds.keys() - for cells in allCells: - bonds = allBonds[cells] - cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) - cell1 = cells_info[1] - cell2 = cells_info[2] - is_active = bonds['state'] == 4 - if is_active: - allAtoms = bonds['children'] - for atoms in allAtoms.keys(): - is_bond_active = allAtoms[atoms]['state'] == 4 - if is_bond_active: - atoms_info = re.search("^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) - index1 = atoms_info[1] - shell1 = atoms_info[2] - index2 = atoms_info[3] - shell2 = atoms_info[4] - bond_type = atoms_info[5] - bond = { - "atom1": {"index": index1, "shell": shell1, "cell": cell1}, - "atom2": {"index": index2, "shell": shell2, "cell": cell2}, - "type": bond_type - } - model['bonds'].append(bond) - - return model - - class TBStudioParser(BeyondDFTWorkflowsParser): level = 1 @@ -329,20 +50,46 @@ def parse_system(self): """ sec_run = self.archive.run[-1] sec_system = sec_run.m_create(System) - # Here the key is to populate: - # 1- `Atoms` with the main quantities I wrote - # 2- `AtomsGroup` (optional) with the info of the atoms used for the tight binding in the tight-binding model sec_atoms = sec_system.m_create(Atoms) - a = self.tb_model['a'] - b = self.tb_model['b'] - c = self.tb_model['c'] - sec_atoms.lattice_vectors = [a, b, c] * ureg.angstrom + # Load lattice vectors + if self.tbm.get('vars') is None: + self.logger.warning('Could not find the .tbm file vars parameters.') + return + + self.a = [np.float64(self.tbm['vars'].get(f'a[{i}]', '0')) for i in range(3)] + self.b = [np.float64(self.tbm['vars'].get(f'b[{i}]', '0')) for i in range(3)] + self.c = [np.float64(self.tbm['vars'].get(f'c[{i}]', '0')) for i in range(3)] + + sec_atoms.lattice_vectors = [self.a, self.b, self.c] * ureg.angstrom - sec_atoms.positions = self.tb_model['xyz_coords'] * ureg.angstrom - sec_atoms.species = self.tb_model['kinds'] + xyz_coords = [] + for r in self.tbm['grids']['XYZ_Coords']['value']: + try: + x = np.float64(r[0]) + y = np.float64(r[1]) + z = np.float64(r[2]) + xyz_coords.append([x, y, z]) + except: + break + + sec_atoms.positions = xyz_coords * ureg.angstrom + + kinds = [] + for r in self.tbm['grids']['KABC_Coords']['value']: + try: + k = np.int64(r[0]) + kinds.append(k) + except: + break + + sec_atoms.species = kinds - pbc = [bool(dim != 0) for dim in self.tb_model['neighbor_unit_cells']] + tb_l = np.int64(self.tbm['vars'].get('TBl[0]', '0')) + tb_m = np.int64(self.tbm['vars'].get('TBm[0]', '0')) + tb_n = np.int64(self.tbm['vars'].get('TBn[0]', '0')) + + pbc = [bool(dim != 0) for dim in [tb_l, tb_m, tb_n]] sec_atoms.periodic = pbc def parse_method(self): @@ -350,16 +97,65 @@ def parse_method(self): """ sec_run = self.archive.run[-1] - sec_run.program = Program(name='TBStudio', version=self.tb_model['version']) + sec_run.program = Program(name='TBStudio', version=self.tbm['ReleaseVersion']) sec_method = sec_run.m_create(Method) sec_tb = sec_method.m_create(TB) sec_sk = sec_tb.m_create(SlaterKoster) - orbitals = self.tb_model['orbitals'] + orbitals = [] + lastInd = 0 + for i in range(1, 100): + varName = 'AtomInd{}'.format(i) + orbital = self.tbm['combos'][varName] + if orbital['selected'] != 0: + lastInd = i + for i in range(1, lastInd + 1): + varName = 'AtomInd{}'.format(i) + orbital = self.tbm['combos'][varName] + items = orbital["items"] + selected = orbital['selected'] + if selected == 0: + orbitals.append(None) + else: + orbitals.append(items[selected]) + + orbitals = orbitals + + final_os = {} + tbAtom = '' + shell = '' + for state, row in zip(self.tbm['grids']['OS']['isReadOnly'], self.tbm['grids']['OS']['value']): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + os_name = row[0] + orbital_info = re.search("^(.*) \((.*)\)$", os_name) + tbAtom = orbital_info[1] + shell = orbital_info[2] + if tbAtom not in final_os: + final_os[tbAtom] = {shell: {}} + else: + if shell not in final_os[tbAtom]: + final_os[tbAtom][shell] = {} + else: + orbital = row[0] + initial = 0 + try: + initial = np.float64(row[1]) + except: + pass + final = 0 + try: + final = np.float64(row[2]) + except: + pass + + final_os[tbAtom][shell][orbital] = final for atom_index, orbital in enumerate(orbitals): - shells = self.tb_model['final_os'][orbital] + shells = final_os[orbital] for iShell, shellOrbitals in enumerate(shells.values()): for orbital_name, onSite in shellOrbitals.items(): sec_orbitals = sec_sk.m_create(TightBindingOrbital, SlaterKoster.orbitals) @@ -368,16 +164,78 @@ def parse_method(self): sec_orbitals.shell = iShell sec_orbitals.onsite_energy = onSite - for bond in self.tb_model['bonds']: + final_sk = {} + tb_bond = '' + for state, row in zip(self.tbm['grids']['SK']['isReadOnly'], self.tbm['grids']['SK']['value']): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tb_bond = row[0] + final_sk[tb_bond] = {} + else: + sk_integral = row[0] + try: + final_sk[tb_bond][sk_integral] = np.float64(row[2]) + except: + final_sk[tb_bond][sk_integral] = 0 + + final_overlap = {} + tb_bond = '' + for state, row in zip(self.tbm['grids']['OL']['isReadOnly'], self.tbm['grids']['OL']['value']): + if state[0] and state[1] and state[2]: + if row[0] == '' and row[1] == '' and row[2] == '': + break + else: + tb_bond = row[0] + final_overlap[tb_bond] = {} + else: + sk_integral = row[0] + try: + final_overlap[tb_bond][sk_integral] = np.float64(row[2]) + except: + final_overlap[tb_bond][sk_integral] = 0 + + bonds = [] + if 'TB Model' in self.tbm['trees']['Bonds']: + if 'children' in self.tbm['trees']['Bonds']['TB Model']: + allBonds = self.tbm['trees']['Bonds']['TB Model']['children'] + allCells = allBonds.keys() + for cells in allCells: + cellBonds = allBonds[cells] + cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) + cell1 = cells_info[1] + cell2 = cells_info[2] + is_active = cellBonds['state'] == 4 + if is_active: + allAtoms = cellBonds['children'] + for atoms in allAtoms.keys(): + is_bond_active = allAtoms[atoms]['state'] == 4 + if is_bond_active: + atoms_info = re.search( + "^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) + index1 = atoms_info[1] + shell1 = atoms_info[2] + index2 = atoms_info[3] + shell2 = atoms_info[4] + bond_type = atoms_info[5] + bond = { + "atom1": {"index": index1, "shell": shell1, "cell": cell1}, + "atom2": {"index": index2, "shell": shell2, "cell": cell2}, + "type": bond_type + } + bonds.append(bond) + + for bond in bonds: atom1 = bond['atom1'] atom2 = bond['atom2'] bond_type = bond['type'] h_sk = None s_sk = None - if self.tb_model['final_sk'] != {}: - h_sk = self.tb_model['final_sk'][bond_type] - if self.tb_model['final_overlap'] != {}: - s_sk = self.tb_model['final_overlap'][bond_type] + if final_sk != {}: + h_sk = final_sk[bond_type] + if final_overlap != {}: + s_sk = final_overlap[bond_type] if h_sk is not None: sec_bonds = sec_sk.m_create(SlaterKosterBond, SlaterKoster.bonds) @@ -421,13 +279,21 @@ def parse_scc(self): sec_run = self.archive.run[-1] self.archive.run[-1].m_create(Calculation) - tb_bands = self.tb_model['final_tb_bands'] - frac_k_points = self.tb_model['frac_k_points'] - band_segments_points = self.tb_model['bandSections']['index'] + _k_points = self.tbm['variables']['KPoints'] + frac_k_points = [] + k_points = [] + k_length = [] + for row in _k_points: + frac_k_points.append([row[0], row[1], row[2]]) + k_points.append([row[3], row[4], row[5]]) + k_length.append(row[6]) + + tb_bands = self.tbm['variables']['fTBEigVal'] + band_segments_points = self.tbm['variables']['bandSections']['index'] if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: return - fermi_level_joules = self.tb_model['fermi_level'] * ureg.eV + fermi_level_joules = self.tbm['variables']['ChemP'] * ureg.eV sec_scc = sec_run.calculation[-1] sec_energy = sec_scc.m_create(Energy, Calculation.energy) sec_energy.fermi = fermi_level_joules @@ -435,20 +301,17 @@ def parse_scc(self): sec_k_band = BandStructure() sec_k_band.energy_fermi = fermi_level_joules - a = self.tb_model['a'] - b = self.tb_model['b'] - c = self.tb_model['c'] pi = np.arccos(-1.0) - vol = np.dot(a, np.cross(b, c)) - astar = 2 * pi * np.cross(b, c) / vol * 10**9 - bstar = 2 * pi * np.cross(c, a) / vol * 10**9 - cstar = 2 * pi * np.cross(a, b) / vol * 10**9 + vol = np.dot(self.a, np.cross(self.b, self.c)) + astar = 2 * pi * np.cross(self.b, self.c) / vol * 10**9 + bstar = 2 * pi * np.cross(self.c, self.a) / vol * 10**9 + cstar = 2 * pi * np.cross(self.a, self.b) / vol * 10**9 sec_k_band.reciprocal_cell = [astar, bstar, cstar] for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = (np.array([tb_bands[n1: n2 + 1]]) + self.tb_model['fermi_level']) * ureg.eV + sec_k_band_segment.energies = (np.array([tb_bands[n1: n2 + 1]]) + self.tbm['variables']['ChemP']) * ureg.eV sec_scc.band_structure_electronic.append(sec_k_band) @@ -461,9 +324,17 @@ def parse_workflow(self): def get_mainfile_keys(self, **kwargs): filepath = kwargs.get('filename') - tb_model = load_tbm(filepath) - dft_nomad_entry_id = tb_model['DFTNomadEntryID'] - dft_nomad_upload_id = tb_model['DFTNomadUploadID'] + + f = open(filepath) + tbm = json.load(f) + f.close() + + dft_nomad_entry_id = None + dft_nomad_upload_id = None + if 'type' in tbm['DFTSource'] and tbm['DFTSource']['type'].lower() == 'nomad': + dft_nomad_entry_id = tbm['DFTSource']['source']['entry_id'] + dft_nomad_upload_id = tbm['DFTSource']['source']['upload_id'] + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '' and dft_nomad_upload_id is not None and dft_nomad_upload_id != '': return ['TB_workflow'] else: @@ -478,9 +349,16 @@ def parse(self, filepath, archive, logger): sec_run = self.archive.m_create(Run) sec_run.program = Program(name="TBStudio") - self.tb_model = load_tbm(filepath) - dft_nomad_entry_id = self.tb_model['DFTNomadEntryID'] - dft_nomad_upload_id = self.tb_model['DFTNomadUploadID'] + + f = open(filepath) + self.tbm = json.load(f) + f.close() + + dft_nomad_entry_id = None + dft_nomad_upload_id = None + if 'type' in self.tbm['DFTSource'] and self.tbm['DFTSource']['type'].lower() == 'nomad': + dft_nomad_entry_id = self.tbm['DFTSource']['source']['entry_id'] + dft_nomad_upload_id = self.tbm['DFTSource']['source']['upload_id'] self.parse_system() self.parse_method() diff --git a/electronicparsers/utils/utils.py b/electronicparsers/utils/utils.py index d263e081..8d810571 100644 --- a/electronicparsers/utils/utils.py +++ b/electronicparsers/utils/utils.py @@ -180,7 +180,7 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati tb_calculation = extract_section(tb_archive, 'run/calculation') if input_structure: workflow.m_add_sub_section( - TB.inputs, Link(name='Structure', section=input_structure)) + TB.inputs, Link(name='Input Structure', section=input_structure)) if tb_calculation: workflow.m_add_sub_section( TB.outputs, Link(name='TB Model', section=tb_calculation)) @@ -198,11 +198,11 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati # TB task if tb_archive.workflow2: tb_task = TaskReference(task=tb_archive.workflow2) - tb_task.name = 'Tight-Binding' + tb_task.name = 'TB' if first_principles_calculation: tb_task.inputs = [Link(name='First-Principles Calculation', section=first_principles_calculation)] if tb_calculation: - tb_task.outputs = [Link(name='TB Model', section=tb_calculation)] + tb_task.outputs = [Link(name='Output TB calculation', section=tb_calculation)] workflow.m_add_sub_section(TB.tasks, tb_task) tb_workflow_archive.workflow2 = workflow From d0b72c97a42eaaadc92668685f2c3646c9863ba8 Mon Sep 17 00:00:00 2001 From: mohammad Date: Mon, 28 Aug 2023 15:28:25 +0200 Subject: [PATCH 40/51] Harmonized the workflow name with the method name --- electronicparsers/utils/utils.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/electronicparsers/utils/utils.py b/electronicparsers/utils/utils.py index 8d810571..c45977e4 100644 --- a/electronicparsers/utils/utils.py +++ b/electronicparsers/utils/utils.py @@ -168,7 +168,7 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati self.run_workflow_archive(tb_workflow_archive) tb_workflow_archive.run[-1].m_add_sub_section(Run.system, first_principles_calculation_archive.run[-1].system[-1]) workflow = TB(method=TBMethod()) - workflow.name = 'TB Fitting' + workflow.name = 'TB' # Method method_tb = extract_section(tb_archive, 'run/method/tb') @@ -183,16 +183,16 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati TB.inputs, Link(name='Input Structure', section=input_structure)) if tb_calculation: workflow.m_add_sub_section( - TB.outputs, Link(name='TB Model', section=tb_calculation)) + TB.outputs, Link(name='Output TB Model', section=tb_calculation)) # First Principles Calculation task if self.archive.workflow2: first_principles_task = TaskReference(task=first_principles_calculation_archive.workflow2) first_principles_task.name = 'First-Principles Calculation' if input_structure: - first_principles_task.inputs = [Link(name='Structure', section=input_structure)] + first_principles_task.inputs = [Link(name='Input Structure', section=input_structure)] if first_principles_calculation: - first_principles_task.outputs = [Link(name='First Principles Calculation', section=first_principles_calculation)] + first_principles_task.outputs = [Link(name='Output First Principles Calculation', section=first_principles_calculation)] workflow.m_add_sub_section(TB.tasks, first_principles_task) # TB task @@ -200,7 +200,7 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati tb_task = TaskReference(task=tb_archive.workflow2) tb_task.name = 'TB' if first_principles_calculation: - tb_task.inputs = [Link(name='First-Principles Calculation', section=first_principles_calculation)] + tb_task.inputs = [Link(name='Input First-Principles Calculation', section=first_principles_calculation)] if tb_calculation: tb_task.outputs = [Link(name='Output TB calculation', section=tb_calculation)] workflow.m_add_sub_section(TB.tasks, tb_task) From a1b81362f62ca61d47dfe840306e23ddbb65e643 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 13 Oct 2023 15:53:47 +0200 Subject: [PATCH 41/51] sec_atoms.labels is the correct atomic types get the labels from atomic numbers using ase library --- electronicparsers/tbstudio/parser.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 1f08a809..87c18dd0 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -37,6 +37,7 @@ import re from nomad.datamodel.metainfo.workflow import Workflow from ..utils import BeyondDFTWorkflowsParser +from ase.data import chemical_symbols class TBStudioParser(BeyondDFTWorkflowsParser): @@ -64,26 +65,22 @@ def parse_system(self): sec_atoms.lattice_vectors = [self.a, self.b, self.c] * ureg.angstrom xyz_coords = [] - for r in self.tbm['grids']['XYZ_Coords']['value']: + atomic_labels = [] + for r, atomic_number in zip(self.tbm['grids']['XYZ_Coords']['value'], self.tbm['grids']['KABC_Coords']['value']): + # Check if x, y, and z are provided then accept it otherwise it is taken as the end of table + # This is the same behaviour that tbstudio does to accept or ignore a row try: x = np.float64(r[0]) y = np.float64(r[1]) z = np.float64(r[2]) + atom_num = np.int64(atomic_number[0]) xyz_coords.append([x, y, z]) + atomic_labels.append(chemical_symbols[atom_num]) except: break sec_atoms.positions = xyz_coords * ureg.angstrom - - kinds = [] - for r in self.tbm['grids']['KABC_Coords']['value']: - try: - k = np.int64(r[0]) - kinds.append(k) - except: - break - - sec_atoms.species = kinds + sec_atoms.labels = atomic_labels tb_l = np.int64(self.tbm['vars'].get('TBl[0]', '0')) tb_m = np.int64(self.tbm['vars'].get('TBm[0]', '0')) From ed2a852482aaac3a9c7ee4db61f3a1223d2cb975 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 13 Oct 2023 15:55:38 +0200 Subject: [PATCH 42/51] correct the name of the tasks to be consistent --- electronicparsers/utils/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/electronicparsers/utils/utils.py b/electronicparsers/utils/utils.py index c45977e4..7bb4d02b 100644 --- a/electronicparsers/utils/utils.py +++ b/electronicparsers/utils/utils.py @@ -188,7 +188,7 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati # First Principles Calculation task if self.archive.workflow2: first_principles_task = TaskReference(task=first_principles_calculation_archive.workflow2) - first_principles_task.name = 'First-Principles Calculation' + first_principles_task.name = 'First Principles' if input_structure: first_principles_task.inputs = [Link(name='Input Structure', section=input_structure)] if first_principles_calculation: @@ -200,9 +200,9 @@ def parse_tb_workflow(self, tb_archive: EntryArchive, first_principles_calculati tb_task = TaskReference(task=tb_archive.workflow2) tb_task.name = 'TB' if first_principles_calculation: - tb_task.inputs = [Link(name='Input First-Principles Calculation', section=first_principles_calculation)] + tb_task.inputs = [Link(name='Input First Principles Calculation', section=first_principles_calculation)] if tb_calculation: - tb_task.outputs = [Link(name='Output TB calculation', section=tb_calculation)] + tb_task.outputs = [Link(name='Output TB Model', section=tb_calculation)] workflow.m_add_sub_section(TB.tasks, tb_task) tb_workflow_archive.workflow2 = workflow From 6309bac58cfa70b02e42a30f4b9040b9600103e0 Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 13 Oct 2023 15:58:03 +0200 Subject: [PATCH 43/51] test the labels instead of species use units converter instead of multiplying by numbers --- tests/test_tbstudioparser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_tbstudioparser.py b/tests/test_tbstudioparser.py index eb8d5c81..2356b9bf 100644 --- a/tests/test_tbstudioparser.py +++ b/tests/test_tbstudioparser.py @@ -43,14 +43,14 @@ def test_parser(parser): assert len(sec_run.system) == 1 sec_system = sec_run.system[-1] - assert (sec_system.atoms.species == [6, 6]).all() + assert sec_system.atoms.labels == ['C', 'C'] a = [1.23435, 2.14452, 0.0] b = [1.23435, -2.14452, 0.0] c = [0.0, 0.0, 20.0] positions = [[0.00414, -0.004863, 10.0], [1.238611, -0.72006, 10.0]] - assert sec_system.atoms.lattice_vectors.magnitude * 10 ** 10 == approx(np.array([a, b, c])) - assert sec_system.atoms.positions.magnitude * 10 ** 10 == approx(np.array(positions)) + assert sec_system.atoms.lattice_vectors.to('angstrom').magnitude == approx(np.array([a, b, c])) + assert sec_system.atoms.positions.to('angstrom').magnitude == approx(np.array(positions)) assert sec_system.atoms.periodic == [True, True, False] assert len(sec_run.method) == 1 From da24d6ddce6793fbe8970f604e3a78056f6ad3a6 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 17 Oct 2023 12:56:02 +0200 Subject: [PATCH 44/51] add a default empty array for protection --- electronicparsers/tbstudio/parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 87c18dd0..ce55beaf 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -66,7 +66,7 @@ def parse_system(self): xyz_coords = [] atomic_labels = [] - for r, atomic_number in zip(self.tbm['grids']['XYZ_Coords']['value'], self.tbm['grids']['KABC_Coords']['value']): + for r, atomic_number in zip(self.tbm['grids']['XYZ_Coords'].get('value', []), self.tbm['grids']['KABC_Coords'].get('value', [])): # Check if x, y, and z are provided then accept it otherwise it is taken as the end of table # This is the same behaviour that tbstudio does to accept or ignore a row try: From b9d936765d152248a972974874d84afdc6493df8 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 24 Oct 2023 13:49:58 +0200 Subject: [PATCH 45/51] fix lint --- electronicparsers/tbstudio/parser.py | 21 ++++++++------------- electronicparsers/utils/utils.py | 1 + 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index ce55beaf..7ccc2028 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -76,7 +76,7 @@ def parse_system(self): atom_num = np.int64(atomic_number[0]) xyz_coords.append([x, y, z]) atomic_labels.append(chemical_symbols[atom_num]) - except: + except Exception as e: break sec_atoms.positions = xyz_coords * ureg.angstrom @@ -128,7 +128,7 @@ def parse_method(self): break else: os_name = row[0] - orbital_info = re.search("^(.*) \((.*)\)$", os_name) + orbital_info = re.search(r'^(.*) \((.*)\)$', os_name) tbAtom = orbital_info[1] shell = orbital_info[2] if tbAtom not in final_os: @@ -138,15 +138,10 @@ def parse_method(self): final_os[tbAtom][shell] = {} else: orbital = row[0] - initial = 0 - try: - initial = np.float64(row[1]) - except: - pass final = 0 try: final = np.float64(row[2]) - except: + except Exception as e: pass final_os[tbAtom][shell][orbital] = final @@ -174,7 +169,7 @@ def parse_method(self): sk_integral = row[0] try: final_sk[tb_bond][sk_integral] = np.float64(row[2]) - except: + except Exception as e: final_sk[tb_bond][sk_integral] = 0 final_overlap = {} @@ -190,7 +185,7 @@ def parse_method(self): sk_integral = row[0] try: final_overlap[tb_bond][sk_integral] = np.float64(row[2]) - except: + except Exception as e: final_overlap[tb_bond][sk_integral] = 0 bonds = [] @@ -200,7 +195,7 @@ def parse_method(self): allCells = allBonds.keys() for cells in allCells: cellBonds = allBonds[cells] - cells_info = re.search("^(\(.*\))-\((.*)\)$", cells) + cells_info = re.search(r'^(\(.*\))-(\(.*\))$', cells) cell1 = cells_info[1] cell2 = cells_info[2] is_active = cellBonds['state'] == 4 @@ -210,7 +205,7 @@ def parse_method(self): is_bond_active = allAtoms[atoms]['state'] == 4 if is_bond_active: atoms_info = re.search( - "^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$", atoms) + r'^\[ \(i,n\)=\((\d+),(\d+)\) , \(j,m\)=\((\d+),(\d+)\) , (.*) ]$', atoms) index1 = atoms_info[1] shell1 = atoms_info[2] index2 = atoms_info[3] @@ -366,7 +361,7 @@ def parse(self, filepath, archive, logger): first_principles_calculation_archive = None try: first_principles_calculation_archive = archive.m_context.load_archive(dft_nomad_entry_id, dft_nomad_upload_id, None) - except: + except Exception as e: pass if first_principles_calculation_archive and self._child_archives: tb_workflow_archive = self._child_archives.get('TB_workflow') diff --git a/electronicparsers/utils/utils.py b/electronicparsers/utils/utils.py index 7bb4d02b..f397c0c9 100644 --- a/electronicparsers/utils/utils.py +++ b/electronicparsers/utils/utils.py @@ -31,6 +31,7 @@ PhotonPolarization, PhotonPolarizationMethod, PhotonPolarizationResults ) + def get_files(pattern: str, filepath: str, stripname: str = '', deep: bool = True): """Get files following the `pattern` with respect to the file `stripname` (usually this being the mainfile of the given parser) up to / down from the `filepath` (`deep=True` going From 0b0d9518427a1d94c9c1548828dcab9494c7354f Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 25 Oct 2023 14:24:04 +0200 Subject: [PATCH 46/51] fix pylint --- electronicparsers/tbstudio/parser.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 7ccc2028..1bc94664 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -73,10 +73,10 @@ def parse_system(self): x = np.float64(r[0]) y = np.float64(r[1]) z = np.float64(r[2]) - atom_num = np.int64(atomic_number[0]) + atom_num = int(atomic_number[0]) xyz_coords.append([x, y, z]) atomic_labels.append(chemical_symbols[atom_num]) - except Exception as e: + except Exception: break sec_atoms.positions = xyz_coords * ureg.angstrom @@ -141,7 +141,7 @@ def parse_method(self): final = 0 try: final = np.float64(row[2]) - except Exception as e: + except Exception: pass final_os[tbAtom][shell][orbital] = final @@ -169,7 +169,7 @@ def parse_method(self): sk_integral = row[0] try: final_sk[tb_bond][sk_integral] = np.float64(row[2]) - except Exception as e: + except Exception: final_sk[tb_bond][sk_integral] = 0 final_overlap = {} @@ -185,7 +185,7 @@ def parse_method(self): sk_integral = row[0] try: final_overlap[tb_bond][sk_integral] = np.float64(row[2]) - except Exception as e: + except Exception: final_overlap[tb_bond][sk_integral] = 0 bonds = [] @@ -224,9 +224,9 @@ def parse_method(self): bond_type = bond['type'] h_sk = None s_sk = None - if final_sk != {}: + if final_sk: h_sk = final_sk[bond_type] - if final_overlap != {}: + if final_overlap: s_sk = final_overlap[bond_type] if h_sk is not None: @@ -361,8 +361,8 @@ def parse(self, filepath, archive, logger): first_principles_calculation_archive = None try: first_principles_calculation_archive = archive.m_context.load_archive(dft_nomad_entry_id, dft_nomad_upload_id, None) - except Exception as e: - pass + except Exception: + self.logger.warning('TBStudio Workflow was not found.') if first_principles_calculation_archive and self._child_archives: tb_workflow_archive = self._child_archives.get('TB_workflow') self.parse_tb_workflow(tb_archive, first_principles_calculation_archive, tb_workflow_archive) From 94c566e728a76725481122e889abbee83aae51b0 Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 8 Nov 2023 22:22:03 +0100 Subject: [PATCH 47/51] Added test tbstudio file --- tests/data/tbstudio/graphenePz.tbm | 30605 +++++++++++++++++++++++++++ 1 file changed, 30605 insertions(+) create mode 100644 tests/data/tbstudio/graphenePz.tbm diff --git a/tests/data/tbstudio/graphenePz.tbm b/tests/data/tbstudio/graphenePz.tbm new file mode 100644 index 00000000..f5fab612 --- /dev/null +++ b/tests/data/tbstudio/graphenePz.tbm @@ -0,0 +1,30605 @@ +{ + "ApplicationFullName": "Tight Binding Studio", + "ReleaseVersion": 2.0, + "DFTSource": { + "type": "NOMAD", + "source": { + "upload_id": "52K7v-fESmCxlLgYygsgvw", + "entry_id": "2P7uZTQdIhleXzlbQPOfWjT4WrvU" + } + }, + "vars": { + "AllSK[0]": "sss,sps,sds,pps,ppp,pds,pdp,dds,ddp,ddd,sfs,pfs,pfp,dfs,dfp,dfd,ffs,ffp,ffd,fff", + "nAtoms[0]": "2", + "nShells[0]": "0", + "nShowingBonds[0]": "0", + "isDFTBand[0]": "0", + "a0[0]": "1.23435", + "a0[1]": "2.14452", + "a0[2]": "0.000000", + "b0[0]": "1.23435", + "b0[1]": "-2.14452", + "b0[2]": "0.000000", + "c0[0]": "0.000000", + "c0[1]": "0.000000", + "c0[2]": "20", + "astrain[0]": "1.000000", + "bstrain[0]": "1.000000", + "cstrain[0]": "1.000000", + "a[0]": "1.234350", + "a[1]": "2.144520", + "a[2]": "0.000000", + "b[0]": "1.234350", + "b[1]": "-2.144520", + "b[2]": "0.000000", + "c[0]": "0.000000", + "c[1]": "0.000000", + "c[2]": "20.000000", + "ma[0]": "0", + "ma[1]": "0", + "mb[0]": "0", + "mb[1]": "0", + "mc[0]": "0", + "mc[1]": "0", + "TBl[0]": "1", + "TBm[0]": "1", + "TBn[0]": "0", + "NewType[0]": "", + "AtomIndex1[0]": "2", + "AtomIndex1[1]": "1", + "AtomIndex2[0]": "1", + "AtomIndex2[1]": "1", + "nParameters[0]": "3", + "SKName[0]": "", + "DFTPath[0]": "C:\\Examples\\Graphene-2Band", + "DFTFile[0]": "sys.Band", + "DFTPathU[0]": "", + "DFTFileU[0]": "", + "DFTBandRange[0]": "1", + "DFTBandRange[1]": "8", + "nDFTBandRange[0]": "8", + "TBBandRange[0]": "1", + "TBBandRange[1]": "2", + "DFTFirst[0]": "4", + "OPrnt[0]": "3", + "OMaxIter[0]": "50", + "Oeps1[0]": "0.000100", + "Oeps2[0]": "0.000100", + "Oeps3[0]": "0.001000", + "Oeps4[0]": "0.001000", + "OLam0[0]": "0.000100", + "OLamUp[0]": "0.001000", + "OLamDn[0]": "0.000100", + "OMaxP[0]": "1000.000000", + "OMinP[0]": "-1000.000000", + "OMixing[0]": "1.000000", + "OReScale[0]": "1.000000" + }, + "grids": { + "XYZ_Coords": { + "value": [ + [ "0.004140", "-0.004863", "10.000000" ], + [ "1.238611", "-0.720060", "10.000000" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ], + [ "", "", "" ] + ], + "isReadOnly": [ + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ], + [ false, false, false ] + ] + }, + "KABC_Coords": { + "value": [ + [ + "6", + "0.00054327400572", + "0.00281093288700", + "0.50000000000217" + ], + [ + "6", + "0.33384235377586", + "0.66960970939406", + "0.49999999999782" + ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ], + [ "", "", "", "" ] + ], + "isReadOnly": [ + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ], + [ false, false, false, false ] + ] + }, + "OS": { + "value": [ + [ "C_pz (Shell 1)", "", "" ], + [ "p_z", "0", "-0.15789243" ], + [ "", "", "" ] + ], + "isReadOnly": [ + [ true, true, true ], + [ true, false, false ], + [ true, true, true ] + ] + }, + "SK": { + "value": [ + [ "Bond 1", "", "" ], + [ "pps", "0.00000000", "0.00000000" ], + [ "ppp", "-4.00000000", "-2.34157934" ], + [ "", "", "" ] + ], + "isReadOnly": [ + [ true, true, true ], + [ true, false, false ], + [ true, false, false ], + [ true, true, true ] + ] + }, + "OL": { + "value": [ ], + "isReadOnly": [ ] + } + }, + "radios": { + "CustomViewmode[0]": false, + "TBViewmode[0]": true, + "TBEssentialViewmode[0]": false + }, + "checks": { + "xyzShow[0]": true, + "abcShow[0]": false, + "WorkingViewmode[0]": false, + "SOC[0]": false, + "Overlap[0]": false + }, + "trees": { + "Orbitals": { + "TB-Model Atom Species": { + "state": -1, + "children": { + "C_pz": { + "state": 4, + "children": { + "Shell 1": { + "state": 4, + "children": { + "s": { + "state": 0, + "children": { } + }, + "p_y": { + "state": 0, + "children": { } + }, + "p_z": { + "state": 4, + "children": { } + }, + "p_x": { + "state": 0, + "children": { } + }, + "d_{xy}": { + "state": 0, + "children": { } + }, + "d_{yz}": { + "state": 0, + "children": { } + }, + "d_{3z^2-r^2}": { + "state": 0, + "children": { } + }, + "d_{xz}": { + "state": 0, + "children": { } + }, + "d_{x^2-y^2}": { + "state": 0, + "children": { } + } + } + } + } + } + } + } + }, + "Bonds": { + "TB Model": { + "state": -1, + "children": { + "(0,0,0)-(0,0,0)": { + "state": 4, + "children": { + "[ (i,n)=(1,1) , (j,m)=(2,1) , Bond 1 ]": { + "state": 4, + "children": { } + } + } + }, + "(0,0,0)-(0,1,0)": { + "state": 4, + "children": { + "[ (i,n)=(2,1) , (j,m)=(1,1) , Bond 1 ]": { + "state": 4, + "children": { } + } + } + }, + "(0,0,0)-(1,1,0)": { + "state": 4, + "children": { + "[ (i,n)=(2,1) , (j,m)=(1,1) , Bond 1 ]": { + "state": 4, + "children": { } + } + } + } + } + } + } + }, + "checklists": { }, + "lists": { + "AtomSpeciesList": [ "C_pz" ], + "EssentialUnitcellList": [ + "(1,1,0)", + "(1,0,0)", + "(1,-1,0)", + "(0,1,0)", + "(0,0,0)" + ] + }, + "choices": { }, + "combos": { + "ShowUnitCellMode": { + "label": "Unit-Cell:", + "items": [ "Do not show", "Primitive cell", "All cells" ], + "selected": 1 + }, + "TransferTo": { + "label": "Transfer:", + "items": [ "Original", "Adjust", "Center", "Origin" ], + "selected": 1 + }, + "AtomInd1": { + "label": "Atom 1 [C]", + "items": [ "Not set", "C_pz" ], + "selected": 1 + }, + "AtomInd2": { + "label": "Atom 2 [C]", + "items": [ "Not set", "C_pz" ], + "selected": 1 + }, + "AtomInd3": { + "label": "Atom 3", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd4": { + "label": "Atom 4", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd5": { + "label": "Atom 5", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd6": { + "label": "Atom 6", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd7": { + "label": "Atom 7", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd8": { + "label": "Atom 8", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd9": { + "label": "Atom 9", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd10": { + "label": "Atom 10", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd11": { + "label": "Atom 11", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd12": { + "label": "Atom 12", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd13": { + "label": "Atom 13", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd14": { + "label": "Atom 14", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd15": { + "label": "Atom 15", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd16": { + "label": "Atom 16", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd17": { + "label": "Atom 17", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd18": { + "label": "Atom 18", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd19": { + "label": "Atom 19", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd20": { + "label": "Atom 20", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd21": { + "label": "Atom 21", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd22": { + "label": "Atom 22", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd23": { + "label": "Atom 23", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd24": { + "label": "Atom 24", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd25": { + "label": "Atom 25", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd26": { + "label": "Atom 26", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd27": { + "label": "Atom 27", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd28": { + "label": "Atom 28", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd29": { + "label": "Atom 29", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd30": { + "label": "Atom 30", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd31": { + "label": "Atom 31", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd32": { + "label": "Atom 32", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd33": { + "label": "Atom 33", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd34": { + "label": "Atom 34", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd35": { + "label": "Atom 35", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd36": { + "label": "Atom 36", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd37": { + "label": "Atom 37", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd38": { + "label": "Atom 38", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd39": { + "label": "Atom 39", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd40": { + "label": "Atom 40", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd41": { + "label": "Atom 41", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd42": { + "label": "Atom 42", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd43": { + "label": "Atom 43", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd44": { + "label": "Atom 44", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd45": { + "label": "Atom 45", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd46": { + "label": "Atom 46", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd47": { + "label": "Atom 47", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd48": { + "label": "Atom 48", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd49": { + "label": "Atom 49", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd50": { + "label": "Atom 50", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd51": { + "label": "Atom 51", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd52": { + "label": "Atom 52", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd53": { + "label": "Atom 53", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd54": { + "label": "Atom 54", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd55": { + "label": "Atom 55", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd56": { + "label": "Atom 56", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd57": { + "label": "Atom 57", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd58": { + "label": "Atom 58", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd59": { + "label": "Atom 59", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd60": { + "label": "Atom 60", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd61": { + "label": "Atom 61", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd62": { + "label": "Atom 62", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd63": { + "label": "Atom 63", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd64": { + "label": "Atom 64", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd65": { + "label": "Atom 65", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd66": { + "label": "Atom 66", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd67": { + "label": "Atom 67", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd68": { + "label": "Atom 68", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd69": { + "label": "Atom 69", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd70": { + "label": "Atom 70", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd71": { + "label": "Atom 71", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd72": { + "label": "Atom 72", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd73": { + "label": "Atom 73", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd74": { + "label": "Atom 74", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd75": { + "label": "Atom 75", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd76": { + "label": "Atom 76", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd77": { + "label": "Atom 77", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd78": { + "label": "Atom 78", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd79": { + "label": "Atom 79", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd80": { + "label": "Atom 80", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd81": { + "label": "Atom 81", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd82": { + "label": "Atom 82", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd83": { + "label": "Atom 83", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd84": { + "label": "Atom 84", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd85": { + "label": "Atom 85", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd86": { + "label": "Atom 86", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd87": { + "label": "Atom 87", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd88": { + "label": "Atom 88", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd89": { + "label": "Atom 89", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd90": { + "label": "Atom 90", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd91": { + "label": "Atom 91", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd92": { + "label": "Atom 92", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd93": { + "label": "Atom 93", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd94": { + "label": "Atom 94", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd95": { + "label": "Atom 95", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd96": { + "label": "Atom 96", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd97": { + "label": "Atom 97", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd98": { + "label": "Atom 98", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "AtomInd99": { + "label": "Atom 99", + "items": [ "Not set", "C_pz" ], + "selected": 0 + }, + "BondLabel": { + "label": "Bond Label:", + "items": [ + "Bond 1", + "Bond 2", + "Bond 3", + "Bond 4", + "Bond 5", + "Bond 6", + "Bond 7", + "Bond 8", + "Bond 9", + "Bond 10", + "Bond 11", + "Bond 12", + "Bond 13", + "Bond 14", + "Bond 15", + "Bond 16", + "Bond 17", + "Bond 18", + "Bond 19", + "Bond 20", + "Bond 21", + "Bond 22", + "Bond 23", + "Bond 24", + "Bond 25", + "Bond 26", + "Bond 27", + "Bond 28", + "Bond 29", + "Bond 30", + "Bond 31", + "Bond 32", + "Bond 33", + "Bond 34", + "Bond 35", + "Bond 36", + "Bond 37", + "Bond 38", + "Bond 39", + "Bond 40", + "Bond 41", + "Bond 42", + "Bond 43", + "Bond 44", + "Bond 45", + "Bond 46", + "Bond 47", + "Bond 48", + "Bond 49", + "Bond 50" + ], + "selected": 0 + }, + "BandFileFormat": { + "label": "Format:", + "items": [ "OpenMX Band-Structure", "Vasp XML Output" ], + "selected": 0 + }, + "BandFileFormatU": { + "label": "Format:", + "items": [ "OpenMX Unfolded Band-Structure", "Vasp XML Output" ], + "selected": -1 + }, + "OMethod": { + "label": "Method:", + "items": [ "Nielsen's lambda", "Levenberg-Marquardt", "Quadratic" ], + "selected": 0 + } + }, + "colors": { + "AColor1": [ 200, 200, 200, 255 ], + "AColor2": [ 100, 0, 0, 255 ], + "AColor3": [ 100, 50, 0, 255 ], + "AColor4": [ 100, 0, 50, 255 ], + "AColor5": [ 100, 50, 50, 255 ], + "AColor6": [ 0, 100, 0, 255 ], + "AColor7": [ 50, 100, 0, 255 ], + "AColor8": [ 0, 100, 50, 255 ], + "AColor9": [ 50, 100, 50, 255 ], + "AColor10": [ 0, 0, 100, 255 ], + "AColor11": [ 50, 0, 100, 255 ], + "AColor12": [ 0, 50, 100, 255 ], + "AColor13": [ 50, 50, 100, 255 ], + "AColor14": [ 150, 0, 0, 255 ], + "AColor15": [ 150, 50, 0, 255 ], + "AColor16": [ 150, 0, 50, 255 ], + "AColor17": [ 150, 50, 50, 255 ], + "AColor18": [ 0, 150, 0, 255 ], + "AColor19": [ 50, 150, 0, 255 ], + "AColor20": [ 0, 150, 50, 255 ], + "AColor21": [ 50, 150, 50, 255 ], + "AColor22": [ 0, 0, 150, 255 ], + "AColor23": [ 50, 0, 150, 255 ], + "AColor24": [ 0, 50, 150, 255 ], + "AColor25": [ 50, 50, 150, 255 ], + "AColor26": [ 170, 0, 0, 255 ], + "AColor27": [ 170, 80, 0, 255 ], + "AColor28": [ 170, 0, 80, 255 ], + "AColor29": [ 170, 80, 80, 255 ], + "AColor30": [ 0, 170, 0, 255 ], + "AColor31": [ 80, 170, 0, 255 ], + "AColor32": [ 0, 170, 80, 255 ], + "AColor33": [ 80, 170, 80, 255 ], + "AColor34": [ 0, 0, 170, 255 ], + "AColor35": [ 80, 0, 170, 255 ], + "AColor36": [ 0, 80, 170, 255 ], + "AColor37": [ 80, 80, 170, 255 ], + "AColor38": [ 20, 250, 250, 255 ], + "AColor39": [ 20, 170, 170, 255 ], + "AColor40": [ 20, 250, 170, 255 ], + "AColor41": [ 20, 170, 250, 255 ], + "AColor42": [ 250, 20, 250, 255 ], + "AColor43": [ 170, 20, 170, 255 ], + "AColor44": [ 250, 20, 170, 255 ], + "AColor45": [ 170, 20, 250, 255 ], + "AColor46": [ 250, 250, 20, 255 ], + "AColor47": [ 170, 170, 20, 255 ], + "AColor48": [ 170, 250, 20, 255 ], + "AColor49": [ 250, 170, 20, 255 ], + "AColor50": [ 120, 0, 0, 255 ], + "AColor51": [ 120, 30, 0, 255 ], + "AColor52": [ 120, 0, 30, 255 ], + "AColor53": [ 120, 30, 30, 255 ], + "AColor54": [ 0, 120, 0, 255 ], + "AColor55": [ 30, 120, 0, 255 ], + "AColor56": [ 0, 120, 30, 255 ], + "AColor57": [ 30, 120, 30, 255 ], + "AColor58": [ 0, 0, 120, 255 ], + "AColor59": [ 30, 0, 120, 255 ], + "AColor60": [ 0, 30, 120, 255 ], + "AColor61": [ 30, 30, 120, 255 ], + "AColor62": [ 210, 0, 0, 255 ], + "AColor63": [ 210, 60, 0, 255 ], + "AColor64": [ 210, 0, 60, 255 ], + "AColor65": [ 210, 60, 60, 255 ], + "AColor66": [ 0, 210, 0, 255 ], + "AColor67": [ 60, 210, 0, 255 ], + "AColor68": [ 0, 210, 60, 255 ], + "AColor69": [ 60, 210, 60, 255 ], + "AColor70": [ 0, 0, 210, 255 ], + "AColor71": [ 60, 0, 210, 255 ], + "AColor72": [ 0, 60, 210, 255 ], + "AColor73": [ 60, 60, 210, 255 ], + "AColor74": [ 120, 0, 0, 255 ], + "AColor75": [ 120, 70, 0, 255 ], + "AColor76": [ 120, 0, 70, 255 ], + "AColor77": [ 120, 70, 70, 255 ], + "AColor78": [ 0, 120, 0, 255 ], + "AColor79": [ 70, 120, 0, 255 ], + "AColor80": [ 0, 120, 70, 255 ], + "AColor81": [ 70, 120, 70, 255 ], + "AColor82": [ 0, 0, 120, 255 ], + "AColor83": [ 70, 0, 120, 255 ], + "AColor84": [ 0, 70, 120, 255 ], + "AColor85": [ 70, 70, 120, 255 ], + "AColor86": [ 250, 0, 0, 255 ], + "AColor87": [ 250, 100, 0, 255 ], + "AColor88": [ 250, 0, 100, 255 ], + "AColor89": [ 250, 100, 100, 255 ], + "AColor90": [ 0, 250, 0, 255 ], + "AColor91": [ 100, 250, 0, 255 ], + "AColor92": [ 0, 250, 100, 255 ], + "AColor93": [ 100, 250, 100, 255 ], + "AColor94": [ 0, 0, 250, 255 ], + "AColor95": [ 100, 0, 250, 255 ], + "AColor96": [ 0, 100, 250, 255 ], + "AColor97": [ 100, 100, 250, 255 ], + "AColor98": [ 50, 100, 100, 255 ], + "AColor99": [ 50, 100, 200, 255 ], + "AColor100": [ 50, 200, 100, 255 ], + "AColor101": [ 50, 200, 200, 255 ], + "AColor102": [ 100, 50, 100, 255 ], + "AColor103": [ 100, 50, 200, 255 ], + "AColor104": [ 200, 50, 100, 255 ], + "AColor105": [ 200, 50, 200, 255 ], + "AColor106": [ 100, 100, 50, 255 ], + "AColor107": [ 100, 200, 50, 255 ], + "AColor108": [ 200, 100, 50, 255 ], + "AColor109": [ 200, 200, 50, 255 ], + "AColor110": [ 100, 100, 100, 255 ], + "AColor111": [ 150, 150, 150, 255 ], + "AColor112": [ 200, 200, 200, 255 ], + "AColor113": [ 70, 80, 110, 255 ], + "AColor114": [ 110, 80, 70, 255 ], + "AColor115": [ 80, 110, 70, 255 ], + "AColor116": [ 70, 110, 80, 255 ], + "AColor117": [ 110, 70, 80, 255 ], + "AColor118": [ 80, 70, 110, 255 ], + "BColor1": [ 210, 0, 60, 255 ], + "BColor2": [ 0, 220, 0, 255 ], + "BColor3": [ 150, 170, 0, 255 ], + "BColor4": [ 150, 170, 150, 255 ], + "BColor5": [ 0, 170, 0, 255 ], + "BColor6": [ 140, 90, 0, 255 ], + "BColor7": [ 0, 170, 150, 255 ], + "BColor8": [ 110, 0, 90, 255 ], + "BColor9": [ 200, 90, 90, 255 ], + "BColor10": [ 0, 0, 170, 255 ], + "BColor11": [ 150, 0, 170, 255 ], + "BColor12": [ 0, 150, 170, 255 ], + "BColor13": [ 150, 150, 170, 255 ], + "BColor14": [ 220, 0, 0, 255 ], + "BColor15": [ 220, 150, 0, 255 ], + "BColor16": [ 220, 0, 150, 255 ], + "BColor17": [ 220, 150, 150, 255 ], + "BColor18": [ 140, 0, 0, 255 ], + "BColor19": [ 150, 220, 0, 255 ], + "BColor20": [ 0, 220, 150, 255 ], + "BColor21": [ 150, 220, 150, 255 ], + "BColor22": [ 0, 0, 220, 255 ], + "BColor23": [ 50, 0, 220, 255 ], + "BColor24": [ 0, 50, 220, 255 ], + "BColor25": [ 50, 50, 220, 255 ], + "BColor26": [ 170, 0, 0, 255 ], + "BColor27": [ 170, 80, 0, 255 ], + "BColor28": [ 170, 0, 80, 255 ], + "BColor29": [ 170, 80, 80, 255 ], + "BColor30": [ 0, 170, 0, 255 ], + "BColor31": [ 80, 170, 0, 255 ], + "BColor32": [ 0, 170, 80, 255 ], + "BColor33": [ 80, 170, 80, 255 ], + "BColor34": [ 0, 0, 170, 255 ], + "BColor35": [ 80, 0, 170, 255 ], + "BColor36": [ 0, 80, 170, 255 ], + "BColor37": [ 80, 80, 170, 255 ], + "BColor38": [ 20, 250, 250, 255 ], + "BColor39": [ 20, 170, 170, 255 ], + "BColor40": [ 20, 250, 170, 255 ], + "BColor41": [ 20, 170, 250, 255 ], + "BColor42": [ 250, 20, 250, 255 ], + "BColor43": [ 170, 20, 170, 255 ], + "BColor44": [ 250, 20, 170, 255 ], + "BColor45": [ 170, 20, 250, 255 ], + "BColor46": [ 250, 250, 20, 255 ], + "BColor47": [ 170, 170, 20, 255 ], + "BColor48": [ 170, 250, 20, 255 ], + "BColor49": [ 250, 170, 20, 255 ], + "BColor50": [ 120, 0, 0, 255 ] + }, + "variables": { + "isBandLoaded": true, + "nKPoint": 300, + "maxneig": 44, + "mspin": 0, + "DFTnBandMin": 1, + "DFTnBandMax": 8, + "isSelectMode": false, + "isTBBand_i": false, + "isTBBand_f": false, + "notUsed": true, + "ChemP": -4.25178064559375, + "DFTyMin2d0": -14.482156140596324, + "DFTyMax2d0": 16.57632495662505, + "DFTyMin2d": -15.379312315712806, + "DFTyMax2d": 14.546941122283105, + "DFTxMin2d0": 0.0, + "DFTxMax2d0": 4.011506599639072, + "DFTxMin2d": 0.0, + "DFTxMax2d": 4.011506599639072, + "HamiltonianDimMap": [ + [ 0 ], + [ 1 ] + ], + "SKListInfo": [ + [ 1, 1 ], + [ 2, 1 ], + [ 2, 2 ] + ], + "FitPoints": [ + [ 1, 4, 0 ], + [ 1, 4, 1 ], + [ 1, 4, 2 ], + [ 1, 4, 3 ], + [ 1, 4, 4 ], + [ 1, 4, 5 ], + [ 1, 4, 6 ], + [ 1, 4, 7 ], + [ 1, 4, 8 ], + [ 1, 4, 9 ], + [ 1, 4, 10 ], + [ 1, 4, 11 ], + [ 1, 4, 12 ], + [ 1, 4, 13 ], + [ 1, 4, 14 ], + [ 1, 4, 15 ], + [ 1, 4, 16 ], + [ 1, 4, 17 ], + [ 1, 4, 18 ], + [ 1, 4, 19 ], + [ 1, 4, 20 ], + [ 1, 4, 21 ], + [ 1, 4, 22 ], + [ 1, 4, 23 ], + [ 1, 4, 24 ], + [ 1, 4, 25 ], + [ 1, 4, 26 ], + [ 1, 4, 27 ], + [ 1, 4, 28 ], + [ 1, 4, 29 ], + [ 1, 4, 30 ], + [ 1, 4, 31 ], + [ 1, 4, 32 ], + [ 1, 4, 33 ], + [ 1, 4, 34 ], + [ 1, 4, 35 ], + [ 1, 4, 36 ], + [ 1, 4, 37 ], + [ 1, 4, 38 ], + [ 1, 4, 39 ], + [ 1, 4, 40 ], + [ 1, 4, 41 ], + [ 1, 4, 42 ], + [ 1, 4, 43 ], + [ 1, 4, 44 ], + [ 1, 4, 45 ], + [ 1, 4, 46 ], + [ 1, 4, 47 ], + [ 1, 4, 48 ], + [ 1, 4, 49 ], + [ 1, 4, 50 ], + [ 1, 4, 51 ], + [ 1, 4, 52 ], + [ 1, 4, 53 ], + [ 1, 4, 54 ], + [ 1, 4, 55 ], + [ 1, 4, 56 ], + [ 1, 4, 57 ], + [ 1, 4, 58 ], + [ 1, 4, 59 ], + [ 1, 4, 60 ], + [ 1, 4, 61 ], + [ 1, 4, 62 ], + [ 1, 4, 63 ], + [ 1, 4, 64 ], + [ 1, 4, 65 ], + [ 1, 4, 66 ], + [ 1, 4, 67 ], + [ 1, 4, 68 ], + [ 1, 4, 69 ], + [ 1, 4, 70 ], + [ 1, 4, 71 ], + [ 1, 4, 72 ], + [ 1, 4, 73 ], + [ 1, 4, 74 ], + [ 1, 4, 75 ], + [ 1, 4, 76 ], + [ 1, 4, 77 ], + [ 1, 4, 78 ], + [ 1, 4, 79 ], + [ 1, 4, 80 ], + [ 1, 4, 81 ], + [ 1, 4, 82 ], + [ 1, 4, 83 ], + [ 1, 4, 84 ], + [ 1, 4, 85 ], + [ 1, 4, 86 ], + [ 1, 4, 87 ], + [ 1, 4, 88 ], + [ 1, 4, 89 ], + [ 1, 4, 90 ], + [ 1, 4, 91 ], + [ 1, 4, 92 ], + [ 1, 4, 93 ], + [ 1, 4, 94 ], + [ 1, 4, 95 ], + [ 1, 4, 96 ], + [ 1, 4, 97 ], + [ 1, 4, 98 ], + [ 1, 4, 99 ], + [ 1, 4, 100 ], + [ 1, 4, 101 ], + [ 1, 4, 102 ], + [ 1, 4, 103 ], + [ 1, 4, 104 ], + [ 1, 4, 105 ], + [ 1, 4, 106 ], + [ 1, 4, 107 ], + [ 1, 4, 108 ], + [ 1, 4, 109 ], + [ 1, 4, 110 ], + [ 1, 4, 111 ], + [ 1, 4, 112 ], + [ 1, 4, 113 ], + [ 1, 4, 114 ], + [ 1, 4, 115 ], + [ 1, 4, 116 ], + [ 1, 4, 117 ], + [ 1, 4, 118 ], + [ 1, 4, 119 ], + [ 1, 4, 120 ], + [ 1, 4, 121 ], + [ 1, 4, 122 ], + [ 1, 4, 123 ], + [ 1, 4, 124 ], + [ 1, 4, 125 ], + [ 1, 4, 126 ], + [ 1, 4, 127 ], + [ 1, 4, 128 ], + [ 1, 4, 129 ], + [ 1, 4, 130 ], + [ 1, 4, 131 ], + [ 1, 4, 132 ], + [ 1, 4, 133 ], + [ 1, 4, 134 ], + [ 1, 4, 135 ], + [ 1, 4, 136 ], + [ 1, 4, 137 ], + [ 1, 4, 138 ], + [ 1, 4, 139 ], + [ 1, 4, 140 ], + [ 1, 4, 141 ], + [ 1, 4, 142 ], + [ 1, 4, 143 ], + [ 1, 4, 144 ], + [ 1, 4, 145 ], + [ 1, 4, 146 ], + [ 1, 4, 147 ], + [ 1, 4, 148 ], + [ 1, 4, 149 ], + [ 1, 4, 150 ], + [ 1, 4, 151 ], + [ 1, 4, 152 ], + [ 1, 4, 153 ], + [ 1, 4, 154 ], + [ 1, 4, 155 ], + [ 1, 4, 156 ], + [ 1, 4, 157 ], + [ 1, 4, 158 ], + [ 1, 4, 159 ], + [ 1, 4, 160 ], + [ 1, 4, 161 ], + [ 1, 4, 162 ], + [ 1, 4, 163 ], + [ 1, 4, 164 ], + [ 1, 4, 165 ], + [ 1, 4, 166 ], + [ 1, 4, 167 ], + [ 1, 4, 168 ], + [ 1, 4, 169 ], + [ 1, 4, 170 ], + [ 1, 4, 171 ], + [ 1, 4, 172 ], + [ 1, 4, 173 ], + [ 1, 4, 174 ], + [ 1, 4, 175 ], + [ 1, 4, 176 ], + [ 1, 4, 177 ], + [ 1, 4, 178 ], + [ 1, 4, 179 ], + [ 1, 4, 180 ], + [ 1, 4, 181 ], + [ 1, 4, 182 ], + [ 1, 4, 183 ], + [ 1, 4, 184 ], + [ 1, 4, 185 ], + [ 1, 4, 186 ], + [ 1, 4, 187 ], + [ 1, 4, 188 ], + [ 1, 4, 189 ], + [ 1, 4, 190 ], + [ 1, 4, 191 ], + [ 1, 4, 192 ], + [ 1, 4, 193 ], + [ 1, 4, 194 ], + [ 1, 4, 195 ], + [ 1, 4, 196 ], + [ 1, 4, 197 ], + [ 1, 4, 198 ], + [ 1, 4, 199 ], + [ 1, 4, 200 ], + [ 1, 4, 201 ], + [ 1, 4, 202 ], + [ 1, 4, 203 ], + [ 1, 4, 204 ], + [ 1, 4, 205 ], + [ 1, 4, 206 ], + [ 1, 4, 207 ], + [ 1, 4, 208 ], + [ 1, 4, 209 ], + [ 1, 4, 210 ], + [ 1, 4, 211 ], + [ 1, 4, 212 ], + [ 1, 4, 213 ], + [ 1, 4, 214 ], + [ 1, 4, 215 ], + [ 1, 4, 216 ], + [ 1, 4, 217 ], + [ 1, 4, 218 ], + [ 1, 4, 219 ], + [ 1, 4, 220 ], + [ 1, 4, 221 ], + [ 1, 4, 222 ], + [ 1, 4, 223 ], + [ 1, 4, 224 ], + [ 1, 4, 225 ], + [ 1, 4, 226 ], + [ 1, 4, 227 ], + [ 1, 4, 228 ], + [ 1, 4, 229 ], + [ 1, 4, 230 ], + [ 1, 4, 231 ], + [ 1, 4, 232 ], + [ 1, 4, 233 ], + [ 1, 4, 234 ], + [ 1, 4, 235 ], + [ 1, 4, 236 ], + [ 1, 4, 237 ], + [ 1, 4, 238 ], + [ 1, 4, 239 ], + [ 1, 4, 240 ], + [ 1, 4, 241 ], + [ 1, 4, 242 ], + [ 1, 4, 243 ], + [ 1, 4, 244 ], + [ 1, 4, 245 ], + [ 1, 4, 246 ], + [ 1, 4, 247 ], + [ 1, 4, 248 ], + [ 1, 4, 249 ], + [ 1, 4, 250 ], + [ 1, 4, 251 ], + [ 1, 4, 252 ], + [ 1, 4, 253 ], + [ 1, 4, 254 ], + [ 1, 4, 255 ], + [ 1, 4, 256 ], + [ 1, 4, 257 ], + [ 1, 4, 258 ], + [ 1, 4, 259 ], + [ 1, 4, 260 ], + [ 1, 4, 261 ], + [ 1, 4, 262 ], + [ 1, 4, 263 ], + [ 1, 4, 264 ], + [ 1, 4, 265 ], + [ 1, 4, 266 ], + [ 1, 4, 267 ], + [ 1, 4, 268 ], + [ 1, 4, 269 ], + [ 1, 4, 270 ], + [ 1, 4, 271 ], + [ 1, 4, 272 ], + [ 1, 4, 273 ], + [ 1, 4, 274 ], + [ 1, 4, 275 ], + [ 1, 4, 276 ], + [ 1, 4, 277 ], + [ 1, 4, 278 ], + [ 1, 4, 279 ], + [ 1, 4, 280 ], + [ 1, 4, 281 ], + [ 1, 4, 282 ], + [ 1, 4, 283 ], + [ 1, 4, 284 ], + [ 1, 4, 285 ], + [ 1, 4, 286 ], + [ 1, 4, 287 ], + [ 1, 4, 288 ], + [ 1, 4, 289 ], + [ 1, 4, 290 ], + [ 1, 4, 291 ], + [ 1, 4, 292 ], + [ 1, 4, 293 ], + [ 1, 4, 294 ], + [ 1, 4, 295 ], + [ 1, 4, 296 ], + [ 1, 4, 297 ], + [ 1, 4, 298 ], + [ 1, 4, 299 ], + [ 2, 5, 0 ], + [ 2, 5, 1 ], + [ 2, 5, 2 ], + [ 2, 5, 3 ], + [ 2, 5, 4 ], + [ 2, 5, 5 ], + [ 2, 5, 6 ], + [ 2, 5, 7 ], + [ 2, 5, 8 ], + [ 2, 5, 9 ], + [ 2, 5, 10 ], + [ 2, 5, 11 ], + [ 2, 5, 12 ], + [ 2, 5, 13 ], + [ 2, 5, 14 ], + [ 2, 5, 15 ], + [ 2, 5, 16 ], + [ 2, 5, 17 ], + [ 2, 5, 18 ], + [ 2, 5, 19 ], + [ 2, 5, 20 ], + [ 2, 5, 21 ], + [ 2, 5, 22 ], + [ 2, 5, 23 ], + [ 2, 5, 24 ], + [ 2, 5, 25 ], + [ 2, 5, 26 ], + [ 2, 5, 27 ], + [ 2, 5, 28 ], + [ 2, 5, 29 ], + [ 2, 5, 30 ], + [ 2, 5, 31 ], + [ 2, 5, 32 ], + [ 2, 5, 33 ], + [ 2, 5, 34 ], + [ 2, 5, 35 ], + [ 2, 5, 36 ], + [ 2, 5, 37 ], + [ 2, 5, 38 ], + [ 2, 5, 39 ], + [ 2, 5, 40 ], + [ 2, 5, 41 ], + [ 2, 5, 42 ], + [ 2, 5, 43 ], + [ 2, 5, 44 ], + [ 2, 5, 45 ], + [ 2, 5, 46 ], + [ 2, 5, 47 ], + [ 2, 5, 48 ], + [ 2, 5, 49 ], + [ 2, 5, 50 ], + [ 2, 5, 51 ], + [ 2, 5, 52 ], + [ 2, 5, 53 ], + [ 2, 5, 54 ], + [ 2, 5, 55 ], + [ 2, 5, 56 ], + [ 2, 5, 57 ], + [ 2, 5, 58 ], + [ 2, 5, 59 ], + [ 2, 5, 60 ], + [ 2, 5, 61 ], + [ 2, 5, 62 ], + [ 2, 5, 63 ], + [ 2, 5, 64 ], + [ 2, 5, 65 ], + [ 2, 5, 66 ], + [ 2, 5, 67 ], + [ 2, 5, 68 ], + [ 2, 5, 69 ], + [ 2, 5, 70 ], + [ 2, 5, 71 ], + [ 2, 5, 72 ], + [ 2, 5, 73 ], + [ 2, 5, 74 ], + [ 2, 5, 75 ], + [ 2, 5, 76 ], + [ 2, 5, 77 ], + [ 2, 5, 78 ], + [ 2, 5, 79 ], + [ 2, 5, 80 ], + [ 2, 5, 81 ], + [ 2, 5, 82 ], + [ 2, 5, 83 ], + [ 2, 5, 84 ], + [ 2, 5, 85 ], + [ 2, 5, 86 ], + [ 2, 5, 87 ], + [ 2, 5, 88 ], + [ 2, 5, 89 ], + [ 2, 5, 90 ], + [ 2, 5, 91 ], + [ 2, 5, 92 ], + [ 2, 5, 93 ], + [ 2, 5, 94 ], + [ 2, 5, 95 ], + [ 2, 5, 96 ], + [ 2, 5, 97 ], + [ 2, 5, 98 ], + [ 2, 5, 99 ], + [ 2, 5, 100 ], + [ 2, 5, 101 ], + [ 2, 5, 102 ], + [ 2, 5, 103 ], + [ 2, 5, 104 ], + [ 2, 5, 105 ], + [ 2, 5, 106 ], + [ 2, 5, 107 ], + [ 2, 5, 108 ], + [ 2, 5, 109 ], + [ 2, 5, 110 ], + [ 2, 5, 111 ], + [ 2, 5, 112 ], + [ 2, 5, 113 ], + [ 2, 5, 114 ], + [ 2, 5, 115 ], + [ 2, 5, 116 ], + [ 2, 5, 117 ], + [ 2, 5, 118 ], + [ 2, 5, 119 ], + [ 2, 5, 120 ], + [ 2, 5, 121 ], + [ 2, 5, 122 ], + [ 2, 5, 123 ], + [ 2, 5, 124 ], + [ 2, 5, 125 ], + [ 2, 5, 126 ], + [ 2, 5, 127 ], + [ 2, 5, 128 ], + [ 2, 5, 129 ], + [ 2, 5, 130 ], + [ 2, 5, 131 ], + [ 2, 5, 132 ], + [ 2, 5, 133 ], + [ 2, 5, 134 ], + [ 2, 5, 135 ], + [ 2, 5, 136 ], + [ 2, 5, 137 ], + [ 2, 5, 138 ], + [ 2, 5, 139 ], + [ 2, 5, 140 ], + [ 2, 5, 141 ], + [ 2, 5, 142 ], + [ 2, 5, 143 ], + [ 2, 5, 144 ], + [ 2, 5, 145 ], + [ 2, 5, 146 ], + [ 2, 5, 147 ], + [ 2, 5, 148 ], + [ 2, 5, 149 ], + [ 2, 5, 150 ], + [ 2, 5, 151 ], + [ 2, 5, 152 ], + [ 2, 5, 153 ], + [ 2, 5, 154 ], + [ 2, 5, 155 ], + [ 2, 5, 156 ], + [ 2, 5, 157 ], + [ 2, 5, 158 ], + [ 2, 5, 159 ], + [ 2, 5, 160 ], + [ 2, 5, 161 ], + [ 2, 5, 162 ], + [ 2, 5, 163 ], + [ 2, 5, 164 ], + [ 2, 5, 165 ], + [ 2, 5, 166 ], + [ 2, 5, 167 ], + [ 2, 5, 168 ], + [ 2, 5, 169 ], + [ 2, 5, 170 ], + [ 2, 5, 171 ], + [ 2, 5, 172 ], + [ 2, 5, 173 ], + [ 2, 5, 174 ], + [ 2, 5, 175 ], + [ 2, 5, 176 ], + [ 2, 5, 177 ], + [ 2, 5, 178 ], + [ 2, 5, 179 ], + [ 2, 5, 180 ], + [ 2, 5, 181 ], + [ 2, 5, 182 ], + [ 2, 5, 183 ], + [ 2, 5, 184 ], + [ 2, 5, 185 ], + [ 2, 5, 186 ], + [ 2, 5, 187 ], + [ 2, 5, 188 ], + [ 2, 5, 189 ], + [ 2, 5, 190 ], + [ 2, 5, 191 ], + [ 2, 5, 192 ], + [ 2, 5, 193 ], + [ 2, 5, 194 ], + [ 2, 5, 195 ], + [ 2, 5, 196 ], + [ 2, 5, 197 ], + [ 2, 5, 198 ], + [ 2, 5, 199 ], + [ 2, 5, 200 ], + [ 2, 5, 201 ], + [ 2, 5, 202 ], + [ 2, 5, 203 ], + [ 2, 5, 204 ], + [ 2, 5, 205 ], + [ 2, 5, 206 ], + [ 2, 5, 207 ], + [ 2, 5, 208 ], + [ 2, 5, 209 ], + [ 2, 5, 210 ], + [ 2, 5, 211 ], + [ 2, 5, 212 ], + [ 2, 5, 213 ], + [ 2, 5, 214 ], + [ 2, 5, 215 ], + [ 2, 5, 216 ], + [ 2, 5, 217 ], + [ 2, 5, 218 ], + [ 2, 5, 219 ], + [ 2, 5, 220 ], + [ 2, 5, 221 ], + [ 2, 5, 222 ], + [ 2, 5, 223 ], + [ 2, 5, 224 ], + [ 2, 5, 225 ], + [ 2, 5, 226 ], + [ 2, 5, 227 ], + [ 2, 5, 228 ], + [ 2, 5, 229 ], + [ 2, 5, 230 ], + [ 2, 5, 231 ], + [ 2, 5, 232 ], + [ 2, 5, 233 ], + [ 2, 5, 234 ], + [ 2, 5, 235 ], + [ 2, 5, 236 ], + [ 2, 5, 237 ], + [ 2, 5, 238 ], + [ 2, 5, 239 ], + [ 2, 5, 240 ], + [ 2, 5, 241 ], + [ 2, 5, 242 ], + [ 2, 5, 243 ], + [ 2, 5, 244 ], + [ 2, 5, 245 ], + [ 2, 5, 246 ], + [ 2, 5, 247 ], + [ 2, 5, 248 ], + [ 2, 5, 249 ], + [ 2, 5, 250 ], + [ 2, 5, 251 ], + [ 2, 5, 252 ], + [ 2, 5, 253 ], + [ 2, 5, 254 ], + [ 2, 5, 255 ], + [ 2, 5, 256 ], + [ 2, 5, 257 ], + [ 2, 5, 258 ], + [ 2, 5, 259 ], + [ 2, 5, 260 ], + [ 2, 5, 261 ], + [ 2, 5, 262 ], + [ 2, 5, 263 ], + [ 2, 5, 264 ], + [ 2, 5, 265 ], + [ 2, 5, 266 ], + [ 2, 5, 267 ], + [ 2, 5, 268 ], + [ 2, 5, 269 ], + [ 2, 5, 270 ], + [ 2, 5, 271 ], + [ 2, 5, 272 ], + [ 2, 5, 273 ], + [ 2, 5, 274 ], + [ 2, 5, 275 ], + [ 2, 5, 276 ], + [ 2, 5, 277 ], + [ 2, 5, 278 ], + [ 2, 5, 279 ], + [ 2, 5, 280 ], + [ 2, 5, 281 ], + [ 2, 5, 282 ], + [ 2, 5, 283 ], + [ 2, 5, 284 ], + [ 2, 5, 285 ], + [ 2, 5, 286 ], + [ 2, 5, 287 ], + [ 2, 5, 288 ], + [ 2, 5, 289 ], + [ 2, 5, 290 ], + [ 2, 5, 291 ], + [ 2, 5, 292 ], + [ 2, 5, 293 ], + [ 2, 5, 294 ], + [ 2, 5, 295 ], + [ 2, 5, 296 ], + [ 2, 5, 297 ], + [ 2, 5, 298 ], + [ 2, 5, 299 ] + ], + "dkLabel": [ 0.0, 1.4683138682450172, 2.314747086305909, 4.011506599639072 ], + "akDFT": [ 2.5451392699999995, 1.4649397800000017, -0.0 ], + "bkDFT": [ 2.5451392699999995, -1.4649397800000017, -0.0 ], + "ckDFT": [ -0.0, -0.0, 0.31415926999999916 ], + "KPoints": [ + [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], + [ 0.005050505050505, 0.0, 0.0, 0.012854238737373605, 0.007398685757575692, 0.0, 0.014831453214595985 ], + [ 0.01010101010101, 0.0, 0.0, 0.02570847747474721, 0.014797371515151383, 0.0, 0.02966290642919197 ], + [ 0.015151515151515, 0.0, 0.0, 0.03856271621212082, 0.022196057272727075, 0.0, 0.04449435964378796 ], + [ 0.02020202020202, 0.0, 0.0, 0.05141695494949442, 0.029594743030302767, 0.0, 0.05932581285838394 ], + [ 0.025252525252525, 0.0, 0.0, 0.06427119368686803, 0.03699342878787846, 0.0, 0.07415726607297993 ], + [ 0.03030303030303, 0.0, 0.0, 0.07712543242424164, 0.04439211454545415, 0.0, 0.08898871928757592 ], + [ 0.035353535353535, 0.0, 0.0, 0.08997967116161525, 0.05179080030302984, 0.0, 0.1038201725021719 ], + [ 0.04040404040404, 0.0, 0.0, 0.10283390989898884, 0.059189486060605534, 0.0, 0.11865162571676788 ], + [ 0.045454545454545, 0.0, 0.0, 0.11568814863636245, 0.06658817181818123, 0.0, 0.13348307893136388 ], + [ 0.050505050505051, 0.0, 0.0, 0.1285423873737386, 0.07398685757575837, 0.0, 0.1483145321459628 ], + [ 0.055555555555556, 0.0, 0.0, 0.1413966261111122, 0.08138554333333407, 0.0, 0.16314598536055877 ], + [ 0.060606060606061, 0.0, 0.0, 0.15425086484848582, 0.08878422909090977, 0.0, 0.17797743857515477 ], + [ 0.065656565656566, 0.0, 0.0, 0.16710510358585942, 0.09618291484848546, 0.0, 0.19280889178975075 ], + [ 0.070707070707071, 0.0, 0.0, 0.17995934232323302, 0.10358160060606116, 0.0, 0.20764034500434672 ], + [ 0.075757575757576, 0.0, 0.0, 0.19281358106060664, 0.11098028636363684, 0.0, 0.22247179821894272 ], + [ 0.080808080808081, 0.0, 0.0, 0.20566781979798024, 0.11837897212121254, 0.0, 0.2373032514335387 ], + [ 0.085858585858586, 0.0, 0.0, 0.21852205853535384, 0.12577765787878822, 0.0, 0.25213470464813464 ], + [ 0.09090909090909099, 0.0, 0.0, 0.23137629727272746, 0.1331763436363639, 0.0, 0.26696615786273065 ], + [ 0.09595959595959599, 0.0, 0.0, 0.24423053601010106, 0.14057502939393962, 0.0, 0.28179761107732665 ], + [ 0.101010101010101, 0.0, 0.0, 0.25708477474747465, 0.1479737151515153, 0.0, 0.2966290642919226 ], + [ 0.106060606060606, 0.0, 0.0, 0.2699390134848483, 0.155372400909091, 0.0, 0.3114605175065186 ], + [ 0.111111111111111, 0.0, 0.0, 0.28279325222222185, 0.16277108666666668, 0.0, 0.32629197072111454 ], + [ 0.116161616161616, 0.0, 0.0, 0.29564749095959547, 0.1701697724242424, 0.0, 0.34112342393571055 ], + [ 0.121212121212121, 0.0, 0.0, 0.3085017296969691, 0.17756845818181807, 0.0, 0.35595487715030655 ], + [ 0.126262626262626, 0.0, 0.0, 0.32135596843434266, 0.18496714393939376, 0.0, 0.3707863303649025 ], + [ 0.131313131313131, 0.0, 0.0, 0.3342102071717163, 0.19236582969696944, 0.0, 0.3856177835794985 ], + [ 0.136363636363636, 0.0, 0.0, 0.3470644459090899, 0.19976451545454516, 0.0, 0.4004492367940945 ], + [ 0.141414141414141, 0.0, 0.0, 0.3599186846464635, 0.20716320121212084, 0.0, 0.41528069000869045 ], + [ 0.146464646464646, 0.0, 0.0, 0.3727729233838371, 0.21456188696969652, 0.0, 0.43011214322328645 ], + [ 0.151515151515152, 0.0, 0.0, 0.3856271621212133, 0.22196057272727368, 0.0, 0.4449435964378854 ], + [ 0.156565656565657, 0.0, 0.0, 0.39848140085858685, 0.22935925848484937, 0.0, 0.45977504965248134 ], + [ 0.161616161616162, 0.0, 0.0, 0.4113356395959605, 0.23675794424242508, 0.0, 0.47460650286707734 ], + [ 0.166666666666667, 0.0, 0.0, 0.4241898783333341, 0.24415663000000076, 0.0, 0.48943795608167334 ], + [ 0.171717171717172, 0.0, 0.0, 0.43704411707070767, 0.25155531575757645, 0.0, 0.5042694092962693 ], + [ 0.176767676767677, 0.0, 0.0, 0.4498983558080813, 0.25895400151515213, 0.0, 0.5191008625108653 ], + [ 0.181818181818182, 0.0, 0.0, 0.4627525945454549, 0.2663526872727278, 0.0, 0.5339323157254613 ], + [ 0.186868686868687, 0.0, 0.0, 0.4756068332828285, 0.2737513730303035, 0.0, 0.5487637689400573 ], + [ 0.191919191919192, 0.0, 0.0, 0.4884610720202021, 0.28115005878787924, 0.0, 0.5635952221546533 ], + [ 0.196969696969697, 0.0, 0.0, 0.5013153107575757, 0.2885487445454549, 0.0, 0.5784266753692493 ], + [ 0.202020202020202, 0.0, 0.0, 0.5141695494949493, 0.2959474303030306, 0.0, 0.5932581285838453 ], + [ 0.207070707070707, 0.0, 0.0, 0.5270237882323229, 0.3033461160606063, 0.0, 0.6080895817984413 ], + [ 0.212121212121212, 0.0, 0.0, 0.5398780269696966, 0.310744801818182, 0.0, 0.6229210350130373 ], + [ 0.217171717171717, 0.0, 0.0, 0.5527322657070701, 0.31814348757575767, 0.0, 0.6377524882276333 ], + [ 0.222222222222222, 0.0, 0.0, 0.5655865044444437, 0.32554217333333335, 0.0, 0.6525839414422293 ], + [ 0.227272727272727, 0.0, 0.0, 0.5784407431818174, 0.33294085909090904, 0.0, 0.6674153946568253 ], + [ 0.232323232323232, 0.0, 0.0, 0.5912949819191909, 0.3403395448484848, 0.0, 0.6822468478714213 ], + [ 0.237373737373737, 0.0, 0.0, 0.6041492206565645, 0.34773823060606046, 0.0, 0.6970783010860173 ], + [ 0.242424242424242, 0.0, 0.0, 0.6170034593939382, 0.35513691636363615, 0.0, 0.7119097543006133 ], + [ 0.247474747474747, 0.0, 0.0, 0.6298576981313118, 0.36253560212121183, 0.0, 0.7267412075152093 ], + [ 0.252525252525253, 0.0, 0.0, 0.6427119368686879, 0.36993428787878896, 0.0, 0.7415726607298082 ], + [ 0.257575757575758, 0.0, 0.0, 0.6555661756060616, 0.3773329736363647, 0.0, 0.7564041139444043 ], + [ 0.262626262626263, 0.0, 0.0, 0.6684204143434351, 0.3847316593939404, 0.0, 0.7712355671590003 ], + [ 0.267676767676768, 0.0, 0.0, 0.6812746530808088, 0.39213034515151607, 0.0, 0.7860670203735963 ], + [ 0.272727272727273, 0.0, 0.0, 0.6941288918181824, 0.39952903090909175, 0.0, 0.8008984735881923 ], + [ 0.277777777777778, 0.0, 0.0, 0.7069831305555561, 0.4069277166666675, 0.0, 0.8157299268027884 ], + [ 0.282828282828283, 0.0, 0.0, 0.7198373692929295, 0.4143264024242431, 0.0, 0.8305613800173842 ], + [ 0.287878787878788, 0.0, 0.0, 0.7326916080303032, 0.42172508818181886, 0.0, 0.8453928332319803 ], + [ 0.292929292929293, 0.0, 0.0, 0.7455458467676768, 0.4291237739393945, 0.0, 0.8602242864465762 ], + [ 0.297979797979798, 0.0, 0.0, 0.7584000855050504, 0.43652245969697023, 0.0, 0.8750557396611723 ], + [ 0.303030303030303, 0.0, 0.0, 0.771254324242424, 0.4439211454545459, 0.0, 0.8898871928757683 ], + [ 0.308080808080808, 0.0, 0.0, 0.7841085629797977, 0.4513198312121216, 0.0, 0.9047186460903643 ], + [ 0.313131313131313, 0.0, 0.0, 0.7969628017171712, 0.4587185169696973, 0.0, 0.9195500993049602 ], + [ 0.318181818181818, 0.0, 0.0, 0.8098170404545448, 0.46611720272727303, 0.0, 0.9343815525195563 ], + [ 0.323232323232323, 0.0, 0.0, 0.8226712791919184, 0.47351588848484866, 0.0, 0.9492130057341522 ], + [ 0.328282828282828, 0.0, 0.0, 0.8355255179292921, 0.4809145742424244, 0.0, 0.9640444589487484 ], + [ 0.333333333333333, 0.0, 0.0, 0.8483797566666657, 0.48831326, 0.0, 0.9788759121633442 ], + [ 0.338383838383838, 0.0, 0.0, 0.8612339954040393, 0.49571194575757577, 0.0, 0.9937073653779404 ], + [ 0.343434343434343, 0.0, 0.0, 0.8740882341414128, 0.5031106315151515, 0.0, 1.0085388185925361 ], + [ 0.348484848484849, 0.0, 0.0, 0.886942472878789, 0.5105093172727286, 0.0, 1.0233702718071351 ], + [ 0.353535353535354, 0.0, 0.0, 0.8997967116161626, 0.5179080030303043, 0.0, 1.038201725021731 ], + [ 0.358585858585859, 0.0, 0.0, 0.9126509503535363, 0.52530668878788, 0.0, 1.0530331782363271 ], + [ 0.363636363636364, 0.0, 0.0, 0.9255051890909098, 0.5327053745454556, 0.0, 1.067864631450923 ], + [ 0.368686868686869, 0.0, 0.0, 0.9383594278282834, 0.5401040603030314, 0.0, 1.082696084665519 ], + [ 0.373737373737374, 0.0, 0.0, 0.951213666565657, 0.547502746060607, 0.0, 1.0975275378801148 ], + [ 0.378787878787879, 0.0, 0.0, 0.9640679053030307, 0.5549014318181827, 0.0, 1.112358991094711 ], + [ 0.383838383838384, 0.0, 0.0, 0.9769221440404042, 0.5623001175757585, 0.0, 1.1271904443093068 ], + [ 0.388888888888889, 0.0, 0.0, 0.9897763827777779, 0.5696988033333341, 0.0, 1.142021897523903 ], + [ 0.393939393939394, 0.0, 0.0, 1.0026306215151515, 0.5770974890909099, 0.0, 1.1568533507384988 ], + [ 0.398989898989899, 0.0, 0.0, 1.015484860252525, 0.5844961748484856, 0.0, 1.1716848039530947 ], + [ 0.404040404040404, 0.0, 0.0, 1.0283390989898986, 0.5918948606060612, 0.0, 1.1865162571676906 ], + [ 0.409090909090909, 0.0, 0.0, 1.0411933377272724, 0.599293546363637, 0.0, 1.2013477103822867 ], + [ 0.414141414141414, 0.0, 0.0, 1.0540475764646458, 0.6066922321212126, 0.0, 1.2161791635968824 ], + [ 0.419191919191919, 0.0, 0.0, 1.0669018152020195, 0.6140909178787883, 0.0, 1.2310106168114785 ], + [ 0.424242424242424, 0.0, 0.0, 1.0797560539393931, 0.621489603636364, 0.0, 1.2458420700260744 ], + [ 0.429292929292929, 0.0, 0.0, 1.0926102926767667, 0.6288882893939397, 0.0, 1.2606735232406703 ], + [ 0.434343434343434, 0.0, 0.0, 1.1054645314141403, 0.6362869751515153, 0.0, 1.2755049764552662 ], + [ 0.439393939393939, 0.0, 0.0, 1.118318770151514, 0.6436856609090911, 0.0, 1.2903364296698623 ], + [ 0.444444444444444, 0.0, 0.0, 1.1311730088888874, 0.6510843466666667, 0.0, 1.305167882884458 ], + [ 0.44949494949495, 0.0, 0.0, 1.1440272476262636, 0.6584830324242439, 0.0, 1.319999336099057 ], + [ 0.454545454545455, 0.0, 0.0, 1.1568814863636372, 0.6658817181818196, 0.0, 1.3348307893136528 ], + [ 0.45959595959596, 0.0, 0.0, 1.169735725101011, 0.6732804039393953, 0.0, 1.349662242528249 ], + [ 0.464646464646465, 0.0, 0.0, 1.1825899638383846, 0.680679089696971, 0.0, 1.3644936957428448 ], + [ 0.46969696969697, 0.0, 0.0, 1.1954442025757581, 0.6880777754545467, 0.0, 1.3793251489574407 ], + [ 0.474747474747475, 0.0, 0.0, 1.2082984413131317, 0.6954764612121224, 0.0, 1.3941566021720366 ], + [ 0.47979797979798, 0.0, 0.0, 1.2211526800505053, 0.7028751469696981, 0.0, 1.4089880553866325 ], + [ 0.484848484848485, 0.0, 0.0, 1.2340069187878788, 0.7102738327272737, 0.0, 1.4238195086012284 ], + [ 0.48989898989899, 0.0, 0.0, 1.2468611575252526, 0.7176725184848495, 0.0, 1.4386509618158245 ], + [ 0.494949494949495, 0.0, 0.0, 1.2597153962626262, 0.7250712042424251, 0.0, 1.4534824150304204 ], + [ 0.5, 0.0, 0.0, 1.2725696349999998, 0.7324698900000008, 0.0, 1.4683138682450163 ], + [ 0.5, 0.0, 0.0, 1.2725696349999998, 0.7324698900000008, 0.0, 1.4683148682450162 ], + [ 0.498316498316498, 0.003367003367003, 0.0, 1.2768543812457893, 0.7250712042424251, 0.0, 1.4768646987304799 ], + [ 0.496632996632996, 0.006734006734006, 0.0, 1.2811391274915787, 0.7176725184848495, 0.0, 1.4854145292159433 ], + [ 0.494949494949494, 0.010101010101009, 0.0, 1.2854238737373682, 0.7102738327272737, 0.0, 1.493964359701407 ], + [ 0.493265993265992, 0.013468013468012, 0.0, 1.2897086199831578, 0.7028751469696981, 0.0, 1.5025141901868704 ], + [ 0.49158249158249, 0.016835016835015, 0.0, 1.2939933662289473, 0.6954764612121224, 0.0, 1.511064020672334 ], + [ 0.489898989898988, 0.020202020202018, 0.0, 1.298278112474737, 0.6880777754545467, 0.0, 1.5196138511577975 ], + [ 0.488215488215486, 0.023569023569021, 0.0, 1.3025628587205262, 0.680679089696971, 0.0, 1.5281636816432609 ], + [ 0.486531986531984, 0.026936026936024, 0.0, 1.3068476049663158, 0.6732804039393953, 0.0, 1.5367135121287245 ], + [ 0.484848484848482, 0.030303030303027, 0.0, 1.3111323512121054, 0.6658817181818195, 0.0, 1.5452633426141882 ], + [ 0.48316498316498, 0.03367003367003, 0.0, 1.315417097457895, 0.6584830324242439, 0.0, 1.5538131730996516 ], + [ 0.481481481481478, 0.037037037037033, 0.0, 1.3197018437036845, 0.6510843466666683, 0.0, 1.562363003585115 ], + [ 0.479797979797976, 0.040404040404036, 0.0, 1.3239865899494738, 0.6436856609090925, 0.0, 1.5709128340705785 ], + [ 0.478114478114474, 0.043771043771039, 0.0, 1.3282713361952632, 0.6362869751515168, 0.0, 1.579462664556042 ], + [ 0.476430976430972, 0.047138047138042, 0.0, 1.3325560824410527, 0.6288882893939411, 0.0, 1.5880124950415053 ], + [ 0.47474747474747, 0.050505050505045, 0.0, 1.3368408286868423, 0.6214896036363654, 0.0, 1.596562325526969 ], + [ 0.473063973063968, 0.053872053872048, 0.0, 1.3411255749326318, 0.6140909178787898, 0.0, 1.6051121560124324 ], + [ 0.471380471380466, 0.057239057239052, 0.0, 1.345410321178424, 0.6066922321212126, 0.0, 1.6136619864978985 ], + [ 0.469696969696964, 0.060606060606055, 0.0, 1.3496950674242134, 0.599293546363637, 0.0, 1.622211816983362 ], + [ 0.468013468013462, 0.06397306397305801, 0.0, 1.353979813670003, 0.5918948606060612, 0.0, 1.6307616474688256 ], + [ 0.46632996632996, 0.067340067340061, 0.0, 1.3582645599157925, 0.5844961748484855, 0.0, 1.6393114779542892 ], + [ 0.464646464646458, 0.070707070707064, 0.0, 1.3625493061615819, 0.5770974890909097, 0.0, 1.6478613084397526 ], + [ 0.462962962962956, 0.07407407407406701, 0.0, 1.3668340524073717, 0.5696988033333341, 0.0, 1.6564111389252163 ], + [ 0.461279461279454, 0.07744107744107, 0.0, 1.371118798653161, 0.5623001175757585, 0.0, 1.6649609694106797 ], + [ 0.459595959595952, 0.080808080808073, 0.0, 1.3754035448989503, 0.5549014318181827, 0.0, 1.6735107998961432 ], + [ 0.457912457912449, 0.08417508417507601, 0.0, 1.3796882911447375, 0.5475027460606056, 0.0, 1.6820606303816068 ], + [ 0.456228956228947, 0.087542087542079, 0.0, 1.3839730373905268, 0.5401040603030298, 0.0, 1.6906104608670702 ], + [ 0.454545454545445, 0.090909090909082, 0.0, 1.3882577836363164, 0.5327053745454542, 0.0, 1.6991602913525337 ], + [ 0.452861952861943, 0.09427609427608501, 0.0, 1.3925425298821057, 0.5253066887878785, 0.0, 1.707710121837997 ], + [ 0.451178451178441, 0.097643097643088, 0.0, 1.3968272761278955, 0.5179080030303029, 0.0, 1.7162599523234605 ], + [ 0.449494949494939, 0.101010101010091, 0.0, 1.4011120223736848, 0.5105093172727271, 0.0, 1.724809782808924 ], + [ 0.447811447811437, 0.104377104377094, 0.0, 1.4053967686194744, 0.5031106315151515, 0.0, 1.7333596132943874 ], + [ 0.446127946127935, 0.107744107744097, 0.0, 1.409681514865264, 0.49571194575757577, 0.0, 1.7419094437798508 ], + [ 0.444444444444433, 0.1111111111111, 0.0, 1.4139662611110533, 0.48831326, 0.0, 1.7504592742653142 ], + [ 0.442760942760931, 0.114478114478103, 0.0, 1.4182510073568428, 0.4809145742424244, 0.0, 1.7590091047507777 ], + [ 0.441077441077429, 0.117845117845106, 0.0, 1.4225357536026324, 0.47351588848484877, 0.0, 1.767558935236241 ], + [ 0.439393939393927, 0.121212121212109, 0.0, 1.426820499848422, 0.46611720272727303, 0.0, 1.7761087657217047 ], + [ 0.437710437710425, 0.124579124579112, 0.0, 1.4311052460942115, 0.45871851696969734, 0.0, 1.7846585962071682 ], + [ 0.436026936026923, 0.127946127946115, 0.0, 1.4353899923400009, 0.45131983121212155, 0.0, 1.7932084266926316 ], + [ 0.434343434343421, 0.131313131313118, 0.0, 1.4396747385857904, 0.4439211454545459, 0.0, 1.801758257178095 ], + [ 0.432659932659919, 0.134680134680121, 0.0, 1.44395948483158, 0.43652245969697023, 0.0, 1.8103080876635584 ], + [ 0.430976430976417, 0.138047138047124, 0.0, 1.4482442310773695, 0.42912377393939455, 0.0, 1.8188579181490219 ], + [ 0.429292929292915, 0.141414141414127, 0.0, 1.452528977323159, 0.42172508818181886, 0.0, 1.8274077486344853 ], + [ 0.427609427609413, 0.14478114478113, 0.0, 1.4568137235689487, 0.41432640242424323, 0.0, 1.8359575791199487 ], + [ 0.425925925925911, 0.148148148148133, 0.0, 1.461098469814738, 0.40692771666666744, 0.0, 1.8445074096054122 ], + [ 0.424242424242409, 0.151515151515136, 0.0, 1.4653832160605276, 0.39952903090909175, 0.0, 1.8530572400908756 ], + [ 0.422558922558907, 0.154882154882139, 0.0, 1.4696679623063171, 0.3921303451515161, 0.0, 1.861607070576339 ], + [ 0.420875420875405, 0.158249158249142, 0.0, 1.4739527085521067, 0.38473165939394044, 0.0, 1.8701569010618024 ], + [ 0.419191919191903, 0.161616161616145, 0.0, 1.4782374547978963, 0.37733297363636475, 0.0, 1.8787067315472659 ], + [ 0.417508417508401, 0.164983164983148, 0.0, 1.4825222010436854, 0.369934287878789, 0.0, 1.8872565620327293 ], + [ 0.415824915824899, 0.168350168350152, 0.0, 1.4868069472894776, 0.3625356021212118, 0.0, 1.8958063925181954 ], + [ 0.414141414141397, 0.171717171717155, 0.0, 1.4910916935352672, 0.35513691636363615, 0.0, 1.9043562230036588 ], + [ 0.412457912457895, 0.175084175084158, 0.0, 1.4953764397810565, 0.34773823060606046, 0.0, 1.9129060534891222 ], + [ 0.410774410774393, 0.178451178451161, 0.0, 1.499661186026846, 0.34033954484848467, 0.0, 1.9214558839745859 ], + [ 0.409090909090891, 0.181818181818164, 0.0, 1.5039459322726356, 0.33294085909090904, 0.0, 1.9300057144600493 ], + [ 0.407407407407389, 0.185185185185167, 0.0, 1.5082306785184252, 0.32554217333333346, 0.0, 1.9385555449455127 ], + [ 0.405723905723887, 0.18855218855217, 0.0, 1.5125154247642147, 0.31814348757575767, 0.0, 1.9471053754309764 ], + [ 0.404040404040385, 0.191919191919173, 0.0, 1.5168001710100039, 0.310744801818182, 0.0, 1.9556552059164396 ], + [ 0.402356902356883, 0.195286195286176, 0.0, 1.5210849172557936, 0.30334611606060635, 0.0, 1.9642050364019032 ], + [ 0.400673400673381, 0.198653198653179, 0.0, 1.525369663501583, 0.2959474303030306, 0.0, 1.9727548668873667 ], + [ 0.398989898989879, 0.202020202020182, 0.0, 1.5296544097473728, 0.288548744545455, 0.0, 1.9813046973728303 ], + [ 0.397306397306377, 0.205387205387185, 0.0, 1.533939155993162, 0.28115005878787924, 0.0, 1.9898545278582938 ], + [ 0.395622895622875, 0.208754208754188, 0.0, 1.5382239022389517, 0.2737513730303035, 0.0, 1.9984043583437574 ], + [ 0.393939393939373, 0.212121212121191, 0.0, 1.5425086484847412, 0.2663526872727279, 0.0, 2.006954188829221 ], + [ 0.392255892255871, 0.215488215488194, 0.0, 1.5467933947305306, 0.25895400151515213, 0.0, 2.0155040193146845 ], + [ 0.390572390572369, 0.218855218855197, 0.0, 1.55107814097632, 0.2515553157575764, 0.0, 2.024053849800148 ], + [ 0.388888888888867, 0.2222222222222, 0.0, 1.5553628872221097, 0.24415663000000076, 0.0, 2.0326036802856113 ], + [ 0.387205387205365, 0.225589225589203, 0.0, 1.559647633467899, 0.23675794424242513, 0.0, 2.0411535107710748 ], + [ 0.385521885521863, 0.228956228956206, 0.0, 1.5639323797136888, 0.2293592584848494, 0.0, 2.0497033412565386 ], + [ 0.383838383838361, 0.232323232323209, 0.0, 1.5682171259594782, 0.22196057272727365, 0.0, 2.058253171742002 ], + [ 0.382154882154859, 0.235690235690212, 0.0, 1.5725018722052675, 0.21456188696969802, 0.0, 2.0668030022274655 ], + [ 0.380471380471357, 0.239057239057215, 0.0, 1.5767866184510573, 0.20716320121212234, 0.0, 2.075352832712929 ], + [ 0.378787878787855, 0.242424242424218, 0.0, 1.5810713646968466, 0.19976451545454665, 0.0, 2.0839026631983923 ], + [ 0.377104377104353, 0.245791245791221, 0.0, 1.5853561109426364, 0.1923658296969709, 0.0, 2.092452493683856 ], + [ 0.375420875420851, 0.249158249158224, 0.0, 1.5896408571884257, 0.18496714393939523, 0.0, 2.1010023241693196 ], + [ 0.373737373737348, 0.252525252525227, 0.0, 1.5939256034342129, 0.1775684581818181, 0.0, 2.109552154654783 ], + [ 0.372053872053846, 0.25589225589223, 0.0, 1.5982103496800022, 0.17016977242424236, 0.0, 2.1181019851402465 ], + [ 0.370370370370344, 0.259259259259233, 0.0, 1.6024950959257915, 0.16277108666666668, 0.0, 2.12665181562571 ], + [ 0.368686868686842, 0.262626262626236, 0.0, 1.606779842171581, 0.15537240090909088, 0.0, 2.1352016461111734 ], + [ 0.36700336700334, 0.265993265993239, 0.0, 1.6110645884173707, 0.14797371515151525, 0.0, 2.143751476596637 ], + [ 0.365319865319838, 0.269360269360242, 0.0, 1.6153493346631602, 0.14057502939393968, 0.0, 2.1523013070821 ], + [ 0.363636363636336, 0.272727272727245, 0.0, 1.6196340809089498, 0.13317634363636388, 0.0, 2.1608511375675636 ], + [ 0.361952861952834, 0.276094276094249, 0.0, 1.6239188271547418, 0.1257776578787867, 0.0, 2.1694009680530297 ], + [ 0.360269360269332, 0.279461279461252, 0.0, 1.6282035734005311, 0.11837897212121112, 0.0, 2.177950798538493 ], + [ 0.35858585858583, 0.282828282828255, 0.0, 1.6324883196463207, 0.11098028636363533, 0.0, 2.1865006290239566 ], + [ 0.356902356902328, 0.286195286195258, 0.0, 1.6367730658921102, 0.1035816006060597, 0.0, 2.19505045950942 ], + [ 0.355218855218826, 0.289562289562261, 0.0, 1.6410578121378996, 0.09618291484848401, 0.0, 2.2036002899948834 ], + [ 0.353535353535324, 0.292929292929264, 0.0, 1.6453425583836894, 0.08878422909090833, 0.0, 2.212150120480347 ], + [ 0.351851851851822, 0.296296296296267, 0.0, 1.6496273046294787, 0.08138554333333259, 0.0, 2.2206999509658103 ], + [ 0.35016835016832, 0.29966329966327, 0.0, 1.653912050875268, 0.0739868575757569, 0.0, 2.2292497814512737 ], + [ 0.348484848484818, 0.303030303030273, 0.0, 1.6581967971210578, 0.06658817181818111, 0.0, 2.2377996119367376 ], + [ 0.346801346801316, 0.306397306397276, 0.0, 1.6624815433668474, 0.05918948606060559, 0.0, 2.246349442422201 ], + [ 0.345117845117814, 0.309764309764279, 0.0, 1.666766289612637, 0.051790800303029905, 0.0, 2.2548992729076645 ], + [ 0.343434343434312, 0.313131313131282, 0.0, 1.6710510358584263, 0.044392114545454164, 0.0, 2.263449103393128 ], + [ 0.34175084175081, 0.316498316498285, 0.0, 1.675335782104216, 0.03699342878787837, 0.0, 2.2719989338785918 ], + [ 0.340067340067308, 0.319865319865288, 0.0, 1.6796205283500054, 0.02959474303030274, 0.0, 2.280548764364055 ], + [ 0.338383838383806, 0.323232323232291, 0.0, 1.6839052745957948, 0.022196057272727054, 0.0, 2.2890985948495186 ], + [ 0.336700336700304, 0.326599326599294, 0.0, 1.6881900208415845, 0.01479737151515137, 0.0, 2.297648425334982 ], + [ 0.335016835016802, 0.329966329966297, 0.0, 1.6924747670873739, 0.00739868575757574, 0.0, 2.3061982558204455 ], + [ 0.3333333333333, 0.3333333333333, 0.0, 1.6967595133331634, 0.0, 0.0, 2.314748086305909 ], + [ 0.3333333333333, 0.3333333333333, 0.0, 1.6967595133331634, 0.0, 0.0, 2.314749086305909 ], + [ 0.329966329966297, 0.329966329966297, 0.0, 1.67962052835, 0.0, 0.0, 2.3318880712890726 ], + [ 0.326599326599294, 0.326599326599294, 0.0, 1.6624815433668372, 0.0, 0.0, 2.3490270562722353 ], + [ 0.323232323232291, 0.323232323232291, 0.0, 1.645342558383674, 0.0, 0.0, 2.3661660412553984 ], + [ 0.319865319865288, 0.319865319865288, 0.0, 1.628203573400511, 0.0, 0.0, 2.3833050262385616 ], + [ 0.316498316498285, 0.316498316498285, 0.0, 1.611064588417348, 0.0, 0.0, 2.4004440112217242 ], + [ 0.313131313131282, 0.313131313131282, 0.0, 1.5939256034341847, 0.0, 0.0, 2.417582996204888 ], + [ 0.309764309764279, 0.309764309764279, 0.0, 1.5767866184510215, 0.0, 0.0, 2.434721981188051 ], + [ 0.306397306397276, 0.306397306397276, 0.0, 1.5596476334678586, 0.0, 0.0, 2.451860966171214 ], + [ 0.303030303030273, 0.303030303030273, 0.0, 1.5425086484846953, 0.0, 0.0, 2.4689999511543776 ], + [ 0.29966329966327, 0.29966329966327, 0.0, 1.5253696635015321, 0.0, 0.0, 2.486138936137541 ], + [ 0.296296296296267, 0.296296296296267, 0.0, 1.5082306785183692, 0.0, 0.0, 2.503277921120704 ], + [ 0.292929292929264, 0.292929292929264, 0.0, 1.491091693535206, 0.0, 0.0, 2.520416906103867 ], + [ 0.289562289562261, 0.289562289562261, 0.0, 1.4739527085520427, 0.0, 0.0, 2.53755589108703 ], + [ 0.286195286195258, 0.286195286195258, 0.0, 1.4568137235688798, 0.0, 0.0, 2.554694876070193 ], + [ 0.282828282828255, 0.282828282828255, 0.0, 1.4396747385857167, 0.0, 0.0, 2.571833861053356 ], + [ 0.279461279461252, 0.279461279461252, 0.0, 1.4225357536025536, 0.0, 0.0, 2.588972846036519 ], + [ 0.276094276094248, 0.276094276094248, 0.0, 1.4053967686193856, 0.0, 0.0, 2.606111831019687 ], + [ 0.272727272727245, 0.272727272727245, 0.0, 1.3882577836362222, 0.0, 0.0, 2.6232508160028507 ], + [ 0.269360269360242, 0.269360269360242, 0.0, 1.371118798653059, 0.0, 0.0, 2.640389800986014 ], + [ 0.265993265993239, 0.265993265993239, 0.0, 1.3539798136698962, 0.0, 0.0, 2.657528785969177 ], + [ 0.262626262626236, 0.262626262626236, 0.0, 1.3368408286867328, 0.0, 0.0, 2.6746677709523405 ], + [ 0.259259259259233, 0.259259259259233, 0.0, 1.3197018437035697, 0.0, 0.0, 2.6918067559355037 ], + [ 0.25589225589223, 0.25589225589223, 0.0, 1.3025628587204068, 0.0, 0.0, 2.708945740918667 ], + [ 0.252525252525227, 0.252525252525227, 0.0, 1.2854238737372436, 0.0, 0.0, 2.72608472590183 ], + [ 0.249158249158224, 0.249158249158224, 0.0, 1.2682848887540803, 0.0, 0.0, 2.743223710884993 ], + [ 0.245791245791221, 0.245791245791221, 0.0, 1.2511459037709174, 0.0, 0.0, 2.7603626958681557 ], + [ 0.242424242424218, 0.242424242424218, 0.0, 1.2340069187877543, 0.0, 0.0, 2.777501680851319 ], + [ 0.239057239057215, 0.239057239057215, 0.0, 1.2168679338045911, 0.0, 0.0, 2.794640665834482 ], + [ 0.235690235690212, 0.235690235690212, 0.0, 1.199728948821428, 0.0, 0.0, 2.811779650817645 ], + [ 0.232323232323209, 0.232323232323209, 0.0, 1.1825899638382649, 0.0, 0.0, 2.8289186358008083 ], + [ 0.228956228956206, 0.228956228956206, 0.0, 1.1654509788551017, 0.0, 0.0, 2.8460576207839714 ], + [ 0.225589225589203, 0.225589225589203, 0.0, 1.1483119938719386, 0.0, 0.0, 2.8631966057671345 ], + [ 0.2222222222222, 0.2222222222222, 0.0, 1.1311730088887755, 0.0, 0.0, 2.8803355907502977 ], + [ 0.218855218855197, 0.218855218855197, 0.0, 1.1140340239056123, 0.0, 0.0, 2.897474575733461 ], + [ 0.215488215488194, 0.215488215488194, 0.0, 1.0968950389224492, 0.0, 0.0, 2.914613560716624 ], + [ 0.212121212121191, 0.212121212121191, 0.0, 1.0797560539392863, 0.0, 0.0, 2.931752545699787 ], + [ 0.208754208754188, 0.208754208754188, 0.0, 1.062617068956123, 0.0, 0.0, 2.9488915306829506 ], + [ 0.205387205387185, 0.205387205387185, 0.0, 1.04547808397296, 0.0, 0.0, 2.9660305156661133 ], + [ 0.202020202020182, 0.202020202020182, 0.0, 1.028339098989797, 0.0, 0.0, 2.9831695006492764 ], + [ 0.198653198653179, 0.198653198653179, 0.0, 1.0112001140066338, 0.0, 0.0, 3.0003084856324396 ], + [ 0.195286195286176, 0.195286195286176, 0.0, 0.9940611290234707, 0.0, 0.0, 3.0174474706156027 ], + [ 0.191919191919173, 0.191919191919173, 0.0, 0.9769221440403075, 0.0, 0.0, 3.034586455598766 ], + [ 0.18855218855217, 0.18855218855217, 0.0, 0.9597831590571445, 0.0, 0.0, 3.051725440581929 ], + [ 0.185185185185167, 0.185185185185167, 0.0, 0.9426441740739813, 0.0, 0.0, 3.068864425565092 ], + [ 0.181818181818164, 0.181818181818164, 0.0, 0.9255051890908182, 0.0, 0.0, 3.086003410548255 ], + [ 0.178451178451161, 0.178451178451161, 0.0, 0.9083662041076551, 0.0, 0.0, 3.1031423955314184 ], + [ 0.175084175084158, 0.175084175084158, 0.0, 0.891227219124492, 0.0, 0.0, 3.1202813805145815 ], + [ 0.171717171717155, 0.171717171717155, 0.0, 0.8740882341413289, 0.0, 0.0, 3.1374203654977446 ], + [ 0.168350168350152, 0.168350168350152, 0.0, 0.8569492491581658, 0.0, 0.0, 3.1545593504809077 ], + [ 0.164983164983148, 0.164983164983148, 0.0, 0.8398102641749975, 0.0, 0.0, 3.171698335464076 ], + [ 0.161616161616145, 0.161616161616145, 0.0, 0.8226712791918345, 0.0, 0.0, 3.1888373204472393 ], + [ 0.158249158249142, 0.158249158249142, 0.0, 0.8055322942086715, 0.0, 0.0, 3.2059763054304025 ], + [ 0.154882154882139, 0.154882154882139, 0.0, 0.7883933092255082, 0.0, 0.0, 3.2231152904135656 ], + [ 0.151515151515136, 0.151515151515136, 0.0, 0.7712543242423452, 0.0, 0.0, 3.2402542753967287 ], + [ 0.148148148148133, 0.148148148148133, 0.0, 0.7541153392591821, 0.0, 0.0, 3.257393260379892 ], + [ 0.14478114478113, 0.14478114478113, 0.0, 0.7369763542760188, 0.0, 0.0, 3.274532245363055 ], + [ 0.141414141414127, 0.141414141414127, 0.0, 0.7198373692928558, 0.0, 0.0, 3.291671230346218 ], + [ 0.138047138047124, 0.138047138047124, 0.0, 0.7026983843096928, 0.0, 0.0, 3.3088102153293812 ], + [ 0.134680134680121, 0.134680134680121, 0.0, 0.6855593993265295, 0.0, 0.0, 3.3259492003125444 ], + [ 0.131313131313118, 0.131313131313118, 0.0, 0.6684204143433664, 0.0, 0.0, 3.3430881852957075 ], + [ 0.127946127946115, 0.127946127946115, 0.0, 0.6512814293602034, 0.0, 0.0, 3.3602271702788706 ], + [ 0.124579124579112, 0.124579124579112, 0.0, 0.6341424443770401, 0.0, 0.0, 3.3773661552620338 ], + [ 0.121212121212109, 0.121212121212109, 0.0, 0.6170034593938771, 0.0, 0.0, 3.394505140245197 ], + [ 0.117845117845106, 0.117845117845106, 0.0, 0.599864474410714, 0.0, 0.0, 3.41164412522836 ], + [ 0.114478114478103, 0.114478114478103, 0.0, 0.5827254894275509, 0.0, 0.0, 3.428783110211523 ], + [ 0.1111111111111, 0.1111111111111, 0.0, 0.5655865044443877, 0.0, 0.0, 3.4459220951946863 ], + [ 0.107744107744097, 0.107744107744097, 0.0, 0.5484475194612246, 0.0, 0.0, 3.4630610801778494 ], + [ 0.104377104377094, 0.104377104377094, 0.0, 0.5313085344780615, 0.0, 0.0, 3.4802000651610125 ], + [ 0.101010101010091, 0.101010101010091, 0.0, 0.5141695494948985, 0.0, 0.0, 3.4973390501441757 ], + [ 0.097643097643088, 0.097643097643088, 0.0, 0.49703056451173533, 0.0, 0.0, 3.514478035127339 ], + [ 0.09427609427608501, 0.09427609427608501, 0.0, 0.47989157952857225, 0.0, 0.0, 3.531617020110502 ], + [ 0.090909090909082, 0.090909090909082, 0.0, 0.4627525945454091, 0.0, 0.0, 3.548756005093665 ], + [ 0.087542087542079, 0.087542087542079, 0.0, 0.445613609562246, 0.0, 0.0, 3.565894990076828 ], + [ 0.08417508417507601, 0.08417508417507601, 0.0, 0.4284746245790829, 0.0, 0.0, 3.5830339750599913 ], + [ 0.080808080808073, 0.080808080808073, 0.0, 0.4113356395959198, 0.0, 0.0, 3.6001729600431545 ], + [ 0.07744107744107, 0.07744107744107, 0.0, 0.39419665461275666, 0.0, 0.0, 3.6173119450263176 ], + [ 0.07407407407406701, 0.07407407407406701, 0.0, 0.3770576696295936, 0.0, 0.0, 3.6344509300094807 ], + [ 0.070707070707064, 0.070707070707064, 0.0, 0.35991868464643045, 0.0, 0.0, 3.651589914992644 ], + [ 0.067340067340061, 0.067340067340061, 0.0, 0.3427796996632673, 0.0, 0.0, 3.668728899975807 ], + [ 0.06397306397305801, 0.06397306397305801, 0.0, 0.32564071468010425, 0.0, 0.0, 3.68586788495897 ], + [ 0.060606060606055, 0.060606060606055, 0.0, 0.3085017296969411, 0.0, 0.0, 3.7030068699421332 ], + [ 0.057239057239051, 0.057239057239051, 0.0, 0.2913627447137729, 0.0, 0.0, 3.7201458549253017 ], + [ 0.053872053872048, 0.053872053872048, 0.0, 0.2742237597306098, 0.0, 0.0, 3.737284839908465 ], + [ 0.050505050505045, 0.050505050505045, 0.0, 0.2570847747474467, 0.0, 0.0, 3.754423824891628 ], + [ 0.047138047138042, 0.047138047138042, 0.0, 0.23994578976428355, 0.0, 0.0, 3.771562809874791 ], + [ 0.043771043771039, 0.043771043771039, 0.0, 0.22280680478112044, 0.0, 0.0, 3.788701794857954 ], + [ 0.040404040404036, 0.040404040404036, 0.0, 0.20566781979795734, 0.0, 0.0, 3.8058407798411173 ], + [ 0.037037037037033, 0.037037037037033, 0.0, 0.1885288348147942, 0.0, 0.0, 3.8229797648242805 ], + [ 0.03367003367003, 0.03367003367003, 0.0, 0.1713898498316311, 0.0, 0.0, 3.8401187498074436 ], + [ 0.030303030303027, 0.030303030303027, 0.0, 0.154250864848468, 0.0, 0.0, 3.8572577347906067 ], + [ 0.026936026936024, 0.026936026936024, 0.0, 0.1371118798653049, 0.0, 0.0, 3.87439671977377 ], + [ 0.023569023569021, 0.023569023569021, 0.0, 0.11997289488214177, 0.0, 0.0, 3.891535704756933 ], + [ 0.020202020202018, 0.020202020202018, 0.0, 0.10283390989897867, 0.0, 0.0, 3.908674689740096 ], + [ 0.016835016835015, 0.016835016835015, 0.0, 0.08569492491581555, 0.0, 0.0, 3.9258136747232593 ], + [ 0.013468013468012, 0.013468013468012, 0.0, 0.06855593993265245, 0.0, 0.0, 3.9429526597064224 ], + [ 0.010101010101009, 0.010101010101009, 0.0, 0.051416954949489335, 0.0, 0.0, 3.9600916446895855 ], + [ 0.006734006734006, 0.006734006734006, 0.0, 0.034277969966326226, 0.0, 0.0, 3.9772306296727487 ], + [ 0.003367003367003, 0.003367003367003, 0.0, 0.017138984983163113, 0.0, 0.0, 3.994369614655912 ], + [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0115085996390745 ] + ], + "DFTEigVal": [ + [ + -23.77456658199945, + -11.862113904920832, + -7.360692879264436, + -7.336720043909155, + 1.0361858661247307, + 3.864292613251589, + 3.9218302821339, + 6.288422418520035, + 7.212486178779185, + 8.075645887535552, + 12.585766258827853, + 25.54054028339041, + 25.652274801965195, + 32.47564656561916, + 32.64745948266619, + 34.46628718265394, + 36.91720758252209, + 37.01804816055488, + 42.02106072897834, + 42.117180175924574, + 42.201903436622835, + 44.2774264097718, + 45.37243853928308, + 45.44447379866917, + 51.15718193629563, + 55.651216153545114, + 55.789027499388325, + 60.85447012028972, + 60.92392299964691, + 68.48207981286465, + 68.70771667584796, + 72.54644932889197, + 83.71800955615699, + 83.91392496616092, + 94.93597604257334, + 113.74227182535878, + 113.77983528615853, + 152.03884036792965, + 219.6496242925334, + 273.710307575912, + 306.48688099280054, + 307.356041458302, + 332.4079827969989, + 333.75060193678587 + ], + [ + -23.773960087521957, + -11.861411101105142, + -7.3623818115155695, + -7.33885702115655, + 1.0361445766339477, + 3.8664977125194815, + 3.9226262312683042, + 6.28546225827564, + 7.210328238174937, + 8.076742776948283, + 12.586402082412329, + 25.53253594709794, + 25.644854859225962, + 32.47265360595057, + 32.61506872350622, + 34.372996242519726, + 36.926287913670585, + 37.08811553184616, + 42.02193312956358, + 42.1620400379672, + 42.183883513752995, + 44.310893915023165, + 45.371751703265254, + 45.43742582429215, + 51.17797356465882, + 55.6493311829902, + 55.78957954041894, + 60.858418610694024, + 60.91413925986956, + 68.48580020088474, + 68.70876600544761, + 72.54106221965019, + 83.72133303142267, + 83.93107131327626, + 94.88634729460239, + 113.74944078857044, + 113.83095827327871, + 152.02981423149328, + 219.62516271781286, + 273.69847181052324, + 306.0216398371637, + 307.25093029087, + 332.35746663590055, + 333.67097660879006 + ], + [ + -23.772140626395004, + -11.859302415879455, + -7.3675978568032825, + -7.345108168707829, + 1.036029832298752, + 3.8729073942918473, + 3.9252077283451996, + 6.276623981207738, + 7.203857730180216, + 8.080037113811741, + 12.58830871879608, + 25.508543715159682, + 25.62264030538847, + 32.38753521770905, + 32.598423870492574, + 34.123255533931, + 36.9269002304757, + 37.294821095722284, + 42.00635397951427, + 42.15251131268173, + 42.291658113979686, + 44.40679292244545, + 45.36295073971717, + 45.424242085999644, + 51.23984989439743, + 55.64343765005698, + 55.79154732899619, + 60.84317496515839, + 60.91251427562355, + 68.49668591611712, + 68.71211632691559, + 72.5250323909993, + 83.72704598953496, + 83.9865652241734, + 94.74095286943637, + 113.77089184280835, + 113.98161877603057, + 152.00278653358774, + 219.55176834143245, + 273.6628230781958, + 304.4591389052305, + 307.1271144546556, + 332.2011826948277, + 333.4363913034767 + ], + [ + -23.769108265829818, + -11.855787041465936, + -7.376849749520978, + -7.3549332561342595, + 1.0358687677828933, + 3.882750119344554, + 3.9303105998649692, + 6.262033765510241, + 7.193084612682033, + 8.085539819946607, + 12.591483682243052, + 25.46870731753075, + 25.58566267670371, + 32.16981887776353, + 32.65990582743339, + 33.77279701639481, + 36.918620978360735, + 37.58284465063551, + 41.930751767211845, + 42.16200971442791, + 42.49221217258422, + 44.55446543598561, + 45.330384388950726, + 45.42436416676128, + 51.34138545354529, + 55.63293875080099, + 55.79574337289857, + 60.778492743246844, + 60.951171684107436, + 68.51384839454207, + 68.71843488948188, + 72.49875059324999, + 83.72881373520623, + 84.08611586803472, + 94.50978720803197, + 113.80659813733814, + 114.22402722060978, + 151.95790828857858, + 219.4294100410787, + 273.60293449809296, + 301.8385892472521, + 307.01677027069815, + 331.9215911622554, + 333.0631577794157 + ], + [ + -23.764863118808226, + -11.850863675997218, + -7.391015045497197, + -7.367402601221383, + 1.0357058272251116, + 3.894260331251102, + 3.939641497859685, + 6.241900404418703, + 7.1780255291980914, + 8.093268819618316, + 12.595922887446665, + 25.41346705499403, + 25.533705348089235, + 31.87356192078665, + 32.761904436784846, + 33.36398247679547, + 36.90534431759115, + 37.90579100661156, + 41.80776062439664, + 42.21150982000049, + 42.743310648138305, + 44.742247831446235, + 45.27971347840723, + 45.43901783185583, + 51.48041053196556, + 55.61717147444317, + 55.8031787097279, + 60.68361007468796, + 61.01389235029276, + 68.5356115790656, + 68.7290221094749, + 72.46285675849768, + 83.72487906047041, + 84.23037511316636, + 94.20809223734925, + 113.85651630513647, + 114.54660399214917, + 151.89542748633826, + 219.25802854530477, + 273.51808601075163, + 298.3048265798699, + 306.88521231896544, + 331.4794995326555, + 332.5887012308885 + ], + [ + -23.759405345455953, + -11.8445305875281, + -7.4108404500665594, + -7.381697282844327, + 1.035601635488547, + 3.9048286869913467, + 3.9557285793982335, + 6.21651284892953, + 7.158703854530433, + 8.103248626359171, + 12.60162073477728, + 25.34367486487904, + 25.466111695921054, + 31.52668894886606, + 32.8943409485776, + 32.92192920327942, + 36.88840872092167, + 38.23671341402919, + 41.664265646136315, + 42.28422081663865, + 43.01960174684506, + 44.960470965698356, + 45.22782024634394, + 45.46261544579571, + 51.65423968861396, + 55.5956873242824, + 55.81476482295744, + 60.56620331233118, + 61.097010148295205, + 68.55934508532839, + 68.7459674186604, + 72.41822690122511, + 83.71620679785177, + 84.41668605460697, + 93.85477379534568, + 113.92058023573149, + 114.93556697962627, + 151.81568365075765, + 219.0375245417728, + 273.40725152960016, + 294.0091284704347, + 306.7187217129804, + 330.8174362365926, + 332.06844478511476 + ], + [ + -23.752735154838465, + -11.83678569855731, + -7.436379041013201, + -7.397672656658615, + 1.0356314979029186, + 3.913087351350733, + 3.979837456560528, + 6.186236406656776, + 7.135149715961679, + 8.115509774579397, + 12.608570227424337, + 25.26055821794017, + 25.381760413332504, + 31.149592922362086, + 32.461258383040935, + 33.05383032806044, + 36.86860940654177, + 38.55893013741844, + 41.51417458796091, + 42.37455897745548, + 43.29026428482378, + 45.19457466025089, + 45.201972104533844, + 45.493503228796264, + 51.85987749305183, + 55.5683540128727, + 55.83118746542537, + 60.431145720829406, + 61.200467848721146, + 68.58174612034817, + 68.77185030575815, + 72.36596181586621, + 83.70404400483828, + 84.64134880115859, + 93.47094683511705, + 113.9987041659459, + 115.37640810243846, + 151.71910043453724, + 218.76774016971223, + 273.2690809835122, + 289.1114091772166, + 306.50951649207406, + 329.9012800306454, + 331.5344128632427 + ], + [ + -23.744852807063833, + -11.827626686352122, + -7.467291310320483, + -7.415558231988657, + 1.0358836009356909, + 3.919636300449061, + 4.0112464427087176, + 6.15150732935708, + 7.107399961642236, + 8.13008810624661, + 12.616763118351288, + 25.16556417395316, + 25.279213265884945, + 30.759604693603382, + 31.991063375932338, + 33.23803998358086, + 36.8466201173386, + 38.85986478471933, + 41.36773562271339, + 42.48013087481695, + 43.5175696347634, + 45.207741854960396, + 45.461554914335196, + 45.531429504380355, + 52.09416026032559, + 55.535290589925445, + 55.85294002849084, + 60.28322355186628, + 61.3249009104088, + 68.60006667042408, + 68.80848832634487, + 72.307383157724, + 83.68939337166495, + 84.89988610652716, + 93.07889720761723, + 114.09078356092996, + 115.85500660648167, + 151.60617644528014, + 218.4484312207852, + 273.1018772767368, + 283.77279026487605, + 306.2507636600607, + 328.73751812665716, + 330.9782181345471 + ], + [ + -23.73575861557507, + -11.817051093568804, + -7.503256110751941, + -7.435547802496807, + 1.0364569970486486, + 3.9253357397790865, + 4.048955953942161, + 6.112825564860986, + 7.0754980554405735, + 8.147023926088041, + 12.626190084557894, + 25.06014732771943, + 25.157005829711505, + 30.371353424748694, + 31.51750753112563, + 33.44487986447815, + 36.82307223039417, + 39.12706067206353, + 41.23591334933186, + 42.59932233326165, + 43.66299043266481, + 45.29802315666126, + 45.5765876430914, + 45.735328260135006, + 52.35382724070263, + 55.49675842990312, + 55.88039453796526, + 60.127320659808056, + 61.47125785614924, + 68.61340801992699, + 68.85560787540189, + 72.24404244577023, + 83.67307516644186, + 85.18662176284158, + 92.70154075232374, + 114.19669555918955, + 116.35831406640901, + 151.47747453050704, + 218.07922521123356, + 272.90356815217933, + 278.146383626738, + 305.9352567197743, + 327.3406857532695, + 330.3839265283717 + ], + [ + -23.725452949514704, + -11.80505644325298, + -7.544043633003563, + -7.457727680679607, + 1.037459461891911, + 3.930643989223948, + 4.092352671549844, + 6.070745557551632, + 7.039493890476549, + 8.166361042001457, + 12.636840925829349, + 24.94537691440143, + 25.01422640099654, + 29.99680027021365, + 31.045109287923616, + 33.67234499048608, + 36.79856171071769, + 39.345159973104266, + 41.13315777284634, + 42.73074800377177, + 43.70934009924548, + 45.476916783915605, + 45.629428245610505, + 46.02021727193294, + 52.6355394830845, + 55.453085502834014, + 55.91383403942724, + 59.9683148579129, + 61.6407309445312, + 68.62246711521625, + 68.91105097207659, + 72.17774762369643, + 83.6558230557319, + 85.49415253292958, + 92.36229397723979, + 114.31629931905668, + 116.87467703602465, + 151.33360976329186, + 217.65955665939703, + 272.3698829569322, + 272.6716729066953, + 305.55500995539427, + 325.71802061227254, + 329.7437923394595 + ], + [ + -23.71393623605524, + -11.79164035231208, + -7.589481381179132, + -7.482112042364217, + 1.0390053110358752, + 3.935739626162864, + 4.141089627752568, + 6.025865143675401, + 6.999443528782183, + 8.188145710536581, + 12.64870478494703, + 24.818952961277702, + 24.85378201883636, + 29.64522971499958, + 30.577387604846326, + 33.91847741010727, + 36.773640439450915, + 39.49506041232731, + 41.07805908310444, + 42.873104797488025, + 43.67258558924981, + 45.6887396447826, + 45.72649486497331, + 46.313669522207526, + 52.935874042766315, + 55.40463199628556, + 55.95344043307628, + 59.810945527547325, + 61.83474985070451, + 68.62838868671385, + 68.97186277765421, + 72.11060970963436, + 83.63833970242204, + 85.81292140678768, + 92.08511737466567, + 114.44943632324681, + 117.39390936113756, + 151.17523636979038, + 217.1885641754596, + 266.5608337569223, + 272.40326389601614, + 305.10113672130916, + 323.8712606396938, + 329.0569420207853 + ], + [ + -23.701208962614682, + -11.776800637995553, + -7.639424524946917, + -7.508673975856357, + 1.0412132572052835, + 3.9406621074296453, + 4.194947943691023, + 5.97881278061834, + 6.955408889089359, + 8.212425510274398, + 12.661770386245651, + 24.65170371054321, + 24.706218866772435, + 29.32322246403951, + 30.11719661855859, + 34.181348802318716, + 36.74880629448579, + 39.56036328382696, + 41.08677641725877, + 43.025130194250345, + 43.58136923884872, + 45.759187541998, + 46.01198541571035, + 46.61350999048853, + 53.251318381818, + 55.35178094917683, + 55.9992573527633, + 59.65970319005284, + 62.05499439049555, + 68.63210830983199, + 69.03487636685398, + 72.04510774677709, + 83.62132305285031, + 86.13124471774373, + 91.89426895486199, + 114.59593064480205, + 117.90721903533917, + 151.00303382223888, + 216.66492175470324, + 260.8145099465331, + 272.09492271967775, + 304.5638567623791, + 321.7999766931949, + 328.32661278805364 + ], + [ + -23.68727167889227, + -11.760535412743438, + -7.693740085074975, + -7.537362752076745, + 1.044204378479134, + 3.945383164739251, + 4.2537678724251515, + 5.930233541575893, + 6.907457416687177, + 8.239248168464428, + 12.676026289401175, + 24.44557311971974, + 24.5719800551907, + 29.034684143475804, + 29.666905133854904, + 34.459042260684505, + 36.72449588538747, + 39.540861901578225, + 41.15945550116537, + 43.18559158069469, + 43.458328202681166, + 45.83802156946824, + 46.313406215937114, + 46.91789345991492, + 53.57828051791867, + 55.29493994123121, + 56.05114642837933, + 59.51875327544463, + 62.30341536618534, + 68.63424655598915, + 69.09674363762977, + 71.98416181401049, + 83.60547668138915, + 86.43646026943033, + 91.81301392173299, + 114.75558915948078, + 118.40706713507109, + 150.8176923024821, + 216.08655438844514, + 255.20394832795483, + 271.7426910169764, + 303.9326009629962, + 319.5037911160136, + 327.55858860448603 + ], + [ + -23.672124998690162, + -11.74284316388609, + -7.752299284672653, + -7.568112957247462, + 1.0481002543875428, + 3.9498405904731655, + 4.317417476520399, + 5.8807744649856115, + 6.855661778101254, + 8.268660368178022, + 12.69146115540769, + 24.218983534506236, + 24.436100063632665, + 28.781033513376215, + 29.228496476204196, + 34.749630125030905, + 36.701080665775976, + 39.454585321632976, + 41.27810529397973, + 43.31771194070765, + 43.35328493988517, + 45.92685682267022, + 46.61585422421251, + 47.22531144420003, + 53.91312006267355, + 55.23454657917014, + 56.108749409928954, + 59.391894094565124, + 62.582259986630234, + 68.63518404496787, + 69.15380570544603, + 71.93118883986021, + 83.59151210375983, + 86.71787274447294, + 91.86055810214827, + 114.9282016973604, + 118.8870082452282, + 150.61989774150462, + 215.4501460095411, + 249.78160914300787, + 271.34201581925413, + 303.1962183573936, + 316.9839557402392, + 326.76035144147727 + ], + [ + -23.655769601504534, + -11.723722815979713, + -7.81497399326546, + -7.600849536460127, + 1.0530213116241955, + 3.9539551823530052, + 4.3857781187299025, + 5.831069942208192, + 6.8000996300915455, + 8.300706564231376, + 12.708064021803239, + 23.97699015626352, + 24.297863454779268, + 28.561605659692717, + 28.80362690031355, + 35.0511497498738, + 36.67886607971082, + 39.323727046141386, + 41.42060211167821, + 43.168238403106365, + 43.527035818714616, + 46.02652486604818, + 46.91151809139914, + 47.53462003949655, + 54.25219759022619, + 55.17107481308217, + 56.17146452674734, + 59.28254295998286, + 62.894100236339234, + 68.63514523842287, + 69.20201950587045, + 71.89009395267077, + 83.58014731816452, + 86.9710359997877, + 92.04763134875044, + 115.11354111935633, + 119.34153999153965, + 150.41031671072878, + 214.7502667528612, + 244.58224954891915, + 270.8876895335595, + 302.3432966571159, + 314.2447262084813, + 325.9405023596138 + ], + [ + -23.63820623388788, + -11.703173774907096, + -7.881635193095414, + -7.635490796353751, + 1.0590854055053283, + 3.9576400621132417, + 4.458737499819149, + 5.781727837987607, + 6.740853519628511, + 8.335427836033929, + 12.72582458430254, + 23.723960099358976, + 24.157742045654352, + 28.374226649289582, + 28.393662625550963, + 35.361580494121114, + 36.65809307469717, + 39.16471363915395, + 41.570569257345454, + 43.01547449726869, + 43.70570016864785, + 46.13787272843651, + 47.1962508139429, + 47.84506362413907, + 54.59193683695034, + 55.10504110886483, + 56.23844268297532, + 59.19374032685671, + 63.241862988371146, + 68.6342566306961, + 69.23704023591928, + 71.86512914270129, + 83.57210383025173, + 87.20078826337611, + 92.37328347721611, + 115.31136330769024, + 119.76597449801604, + 150.189581655347, + 213.9777865939067, + 239.62688258997372, + 270.3737847798361, + 301.36259529100573, + 311.2947416142686, + 325.10823758052624 + ], + [ + -23.61943571059582, + -11.681195954132976, + -7.952152463534634, + -7.67195035120872, + 1.0664066484534633, + 3.960806321515749, + 4.5361862429705715, + 5.733316960388488, + 6.678010983034764, + 8.372860804174048, + 12.74473348203098, + 23.464216186037632, + 24.016295419406138, + 27.999706309605248, + 28.215838252415253, + 35.678825540085235, + 36.63894128403554, + 38.9875339299058, + 41.71801456759277, + 42.86318895367298, + 43.88816426816852, + 46.26176583717485, + 47.467999116874694, + 48.1562775087496, + 54.9288963628561, + 55.0370102743474, + 56.308606428707535, + 59.128158346535876, + 63.62886054260342, + 68.63258285698376, + 69.25451664106839, + 71.86055598824852, + 83.56810325054771, + 87.42019115971605, + 92.82572653640864, + 115.52140706434666, + 120.15633488196738, + 149.95827747317796, + 213.11692699742284, + 234.92817303804404, + 269.7935845588852, + 300.2435582319215, + 308.1484876617151, + 324.2728021105504 + ], + [ + -23.599458915535536, + -11.657789784568617, + -8.026393987233817, + -7.710138491891192, + 1.075094483566025, + 3.9633667482759023, + 4.618016230052562, + 5.686356337036466, + 6.611664934236283, + 8.413036634863516, + 12.764782583481479, + 23.201771372524547, + 23.87403926302883, + 27.622618784201702, + 28.08304504898349, + 36.0007021252806, + 36.621533267291255, + 38.79789019729216, + 41.85716559951448, + 42.71407008163773, + 44.073343524932596, + 46.39906309889912, + 47.725928106077845, + 48.468260678312774, + 54.96760097939336, + 55.259853285969534, + 56.380691563589906, + 59.08809682684766, + 64.05881990557336, + 68.63014847957494, + 69.25058580431306, + 71.88011601089065, + 83.56886379419257, + 87.64582209841362, + 93.38676060975205, + 115.74339390103749, + 120.50927311171347, + 149.71693146792822, + 212.13971524163534, + 230.49837931127044, + 269.139508588139, + 298.9768076472296, + 304.82786171989665, + 323.44292501833525 + ], + [ + -23.578276802533647, + -11.632956210301106, + -8.10422682308174, + -7.749963218610311, + 1.0852529903196169, + 3.965238445439351, + 4.704119840432584, + 5.641306527009611, + 6.54191447318685, + 8.45598015240261, + 12.785965270090426, + 22.9400869940227, + 23.7314245552423, + 27.263039066115084, + 27.97250944288848, + 36.32494352574353, + 36.60593931970204, + 38.59897921233971, + 41.98469311551364, + 42.57011218718352, + 44.26018020288888, + 46.550579925072284, + 47.969918857956515, + 48.781317379468966, + 54.89749104749589, + 55.58190889447185, + 56.4533078998332, + 59.07544687699766, + 64.53590861531566, + 68.62695084995855, + 69.22242690458994, + 71.92644288450083, + 83.57509658657051, + 87.89267283430033, + 94.03651680457351, + 115.97702771609534, + 120.82199978760828, + 149.4660106363913, + 210.99579779007829, + 226.36192393664803, + 268.4030371052648, + 297.5542938751416, + 301.3639661689926, + 322.6262906629538 + ], + [ + -23.555890395929012, + -11.606696672943299, + -8.185517309473649, + -7.791331063029179, + 1.0969804009838084, + 3.9663447399853218, + 4.7943896682014335, + 5.598562915698742, + 6.468866321848684, + 8.501709074720747, + 12.808276713900517, + 22.68195461824788, + 23.588838593827326, + 26.921404028809018, + 27.881184914732884, + 36.59218248169477, + 36.64921556503227, + 38.39255188952609, + 42.098670287958086, + 42.432832924929855, + 44.44764025978841, + 46.717040937869726, + 48.2002706135028, + 49.095972862404736, + 54.827422558756446, + 55.89262991428494, + 56.52501273301924, + 59.091603206176465, + 65.06475432172705, + 68.62296663278934, + 69.16863231293684, + 72.00065589479659, + 83.58750161341402, + 88.17089969167901, + 94.75625749533876, + 116.22199433972592, + 121.09221017826239, + 149.2059336640233, + 209.5961735836097, + 222.57422203665357, + 267.5746340680146, + 295.966748008983, + 297.8011755099934, + 321.8291212165318 + ], + [ + -23.53230079098419, + -11.579013087577307, + -8.27013152199449, + -7.834147767550177, + 1.110368800430078, + 3.966616583004483, + 4.888718495292701, + 5.5584506017714554, + 6.392637236207223, + 8.550233381069068, + 12.83171414514551, + 22.42948725726651, + 23.44661125440892, + 26.597968177675202, + 27.806419207204808, + 36.58024348117054, + 36.971149368465724, + 38.17949925922487, + 42.19801443013584, + 42.303402626662695, + 44.63470958715317, + 46.89902370550547, + 48.41752051891847, + 49.41287336793479, + 54.75820673956384, + 56.19023335970149, + 56.59438863184, + 59.13731570080542, + 65.65045473867113, + 68.61815118477736, + 69.08920991183621, + 72.10232293321383, + 83.60676338336404, + 88.48437605585001, + 95.52926931488143, + 116.47796093430775, + 121.3179831564601, + 148.93711082213053, + 207.79985639912158, + 219.23807347675782, + 266.64367247690734, + 294.0218706603786, + 294.37964872683574, + 321.05593526678393 + ], + [ + -23.507509154087813, + -11.549907813219665, + -8.357935742043907, + -7.878318859883102, + 1.1255039785906935, + 3.9659935517598357, + 4.98699939860852, + 5.521220054117462, + 6.313358007901323, + 8.601554814522995, + 12.856277104730948, + 22.184180953654753, + 23.305022227866946, + 26.29282344884966, + 27.74597149824169, + 36.570065413537954, + 37.288390409808265, + 37.960177215194406, + 42.182726220887766, + 42.282192634908036, + 44.82039003530985, + 47.096896390797, + 48.62233388119009, + 49.73268290399674, + 54.69072853914877, + 56.47380058492636, + 56.66011673394244, + 59.212495777721145, + 66.29857409666934, + 68.61242080156683, + 68.9852431607448, + 72.22977814830868, + 83.6335466685541, + 88.83005674853771, + 96.34083043203832, + 116.7445752208746, + 121.49762019990847, + 148.66003455376853, + 205.4455705459903, + 216.47589315297083, + 265.59836553656453, + 290.5203578404492, + 292.3587575782236, + 320.3095107219648 + ], + [ + -23.48151672269458, + -11.519383620498665, + -8.448796911106021, + -7.923750145283136, + 1.1424654035730126, + 3.964424519803399, + 5.089125921981114, + 5.487042081209187, + 6.231180183071391, + 8.655666515464484, + 12.881967675564605, + 21.947010540520886, + 23.164307953638065, + 26.0059186930565, + 27.697981984302544, + 36.56155799147353, + 37.59866163242779, + 37.734591647269035, + 42.071498587300994, + 42.35106391103252, + 45.003695685476714, + 47.310754346922536, + 48.815437857070926, + 50.05598930526053, + 54.625950713006105, + 56.72103789027592, + 56.743468728513484, + 59.3160318207212, + 67.01512198429198, + 68.60555547579247, + 68.85846299145081, + 72.38060337953993, + 83.66849281386203, + 89.19734433420756, + 97.17806736509273, + 117.02146450642431, + 121.62938162124053, + 148.37545871162393, + 202.4626701421508, + 214.32391005165482, + 264.4257085966624, + 286.9782691826034, + 290.29256245527137, + 319.5910338542571 + ], + [ + -23.45432480492392, + -11.487443658864514, + -8.542583056012433, + -7.970348130365019, + 1.16132628402909, + 3.961868040657273, + 5.194992272656431, + 5.4559995431028145, + 6.146287666336565, + 8.712552776281838, + 12.908790685565306, + 21.71853428064804, + 23.024667857105626, + 25.737078414062317, + 27.66092066241578, + 36.55460111445494, + 37.50250795325841, + 37.899835838390466, + 41.970244343763696, + 42.40478937475745, + 45.183649904655226, + 47.54036284644384, + 48.997582031714494, + 50.38322980229636, + 54.56491715720973, + 56.77619637661976, + 57.00051545005676, + 59.44570077411602, + 67.80651062502366, + 68.59627690762591, + 68.71167874698709, + 72.55207013539112, + 83.71221700744694, + 89.56705022291477, + 98.03014365749944, + 117.30823445544758, + 121.71107155135637, + 148.08472707548248, + 198.9353240233145, + 212.67435753064842, + 263.111438268704, + 283.57403420632187, + 288.07889470043614, + 318.9003796390704 + ], + [ + -23.425934778716883, + -11.454091425209015, + -8.639163677045067, + -8.018020387753362, + 1.182153691453189, + 3.9582924815174905, + 5.304493518455191, + 5.428070994542062, + 6.058917594419785, + 8.77218890251639, + 12.93675387407801, + 21.498992728684364, + 22.88626980729835, + 25.48602034037045, + 27.633531294555688, + 36.549047000502036, + 37.26351883129607, + 38.19001016351382, + 41.87934802056034, + 42.44377448959126, + 45.359283792795345, + 47.78511457660078, + 49.16951536506303, + 50.71464252178572, + 54.50875518339361, + 56.824863856199315, + 57.24726115106243, + 59.59825454371347, + 68.53164094428456, + 68.59902466756445, + 68.6794873220565, + 72.74144160728608, + 83.76530667955363, + 89.9098628640095, + 98.88895884545811, + 117.60446748233578, + 121.73943442046286, + 147.79034201058926, + 195.01861435793484, + 211.36656940864626, + 261.6400168008557, + 280.3811567149783, + 285.7212336727935, + 318.2364535373286 + ], + [ + -23.396348090433897, + -11.419330735311581, + -8.738410094824525, + -8.066675868265747, + 1.2050087162900218, + 3.9536759400456205, + 5.4030964568928255, + 5.417525771501239, + 5.969399868187696, + 8.834541162137448, + 12.9658680125277, + 21.28839486925685, + 22.74925482517416, + 25.25237147325368, + 27.614778801805215, + 36.54471696636107, + 37.01709176700028, + 38.46757399401603, + 41.79907792235559, + 42.46862497862346, + 45.52963670502072, + 48.04401051570191, + 49.33197271116938, + 51.05024586258524, + 54.458676432527334, + 56.866544147031625, + 57.486778603382334, + 59.76969364987037, + 68.34787234831445, + 68.5848848932669, + 69.64104006473012, + 72.94613393218597, + 83.82832099392462, + 90.18455460389663, + 99.7503121418911, + 117.90972036389132, + 121.70937914265043, + 147.496894843105, + 190.8566357336251, + 210.27576440622192, + 259.99465169026115, + 277.46330402603536, + 283.2274366475481, + 317.5975316073796 + ], + [ + -23.365566252779242, + -11.383165699095143, + -8.840195754584586, + -8.116225165885949, + 1.2299466357915418, + 3.9480059764012787, + 5.380703552051935, + 5.53398635035564, + 5.878236737996874, + 8.899566802789714, + 12.99614696963039, + 21.086589332698807, + 22.613741113720035, + 25.03568234270729, + 27.603803568164427, + 36.54135213876497, + 36.76264639237129, + 38.731261754093374, + 41.729605549823845, + 42.4801078128333, + 45.69375959230538, + 48.31567077582573, + 49.48566658831873, + 51.38984333631804, + 54.41597628287382, + 56.900961587887345, + 57.72248715167553, + 59.95565270748572, + 68.13984042955984, + 68.57423833765708, + 70.69827604191602, + 73.16377974095381, + 83.901791274131, + 90.33663186493693, + 100.61516488166016, + 118.22351979148881, + 121.61318342867578, + 147.2124837797847, + 186.57504087609274, + 209.32525256255786, + 258.157362526729, + 274.87120450567653, + 280.60703746305524, + 316.98155555817806 + ], + [ + -23.33359084196377, + -11.345600700287152, + -8.944396488172114, + -8.166580739979601, + 1.2570170762197748, + 3.9412791925538624, + 5.3601418985571305, + 5.653773916113444, + 5.786274228709043, + 8.967214116913265, + 13.02760771159448, + 20.893321063085544, + 22.479827492155913, + 24.835439294317823, + 27.599883511974035, + 36.497598654967334, + 36.54058641669286, + 38.980183853707466, + 41.67102167277124, + 42.47911409288398, + 45.85072192422739, + 48.59837792533961, + 49.631281635658006, + 51.73304769395024, + 54.38203209995103, + 56.928037132259405, + 57.95775254496149, + 60.15177777181032, + 67.91032487354391, + 68.56320243136115, + 71.85827480187834, + 73.39223795251584, + 83.98622215020788, + 90.29878145178304, + 101.49021081241322, + 118.54535134376161, + 121.44008736543736, + 146.95065496339927, + 182.29726137698785, + 208.47061990241974, + 256.1091090668947, + 272.63893515048716, + 277.8707141546676, + 316.38636172506426 + ], + [ + -23.300423494079794, + -11.306640380767432, + -9.050890735249892, + -8.217657098718384, + 1.2862641570598439, + 3.9335006906860532, + 5.339895936782008, + 5.695094989912837, + 5.7767885803914, + 9.037422536539806, + 13.060270228673163, + 20.708275013066476, + 22.347596314950916, + 24.65107471086773, + 27.602403499489526, + 36.22562855220934, + 36.53768797427396, + 39.213832416168295, + 41.623349717703356, + 42.46662345534913, + 45.99962289443063, + 48.890149774535836, + 49.76947063182208, + 52.07931488057342, + 54.358301936920846, + 56.947856716539604, + 58.195587308994746, + 60.3540011481924, + 67.65731947873854, + 68.55145403861823, + 73.12791965188711, + 73.62957894464263, + 84.08209311951478, + 89.99495410119037, + 102.38674636229183, + 118.87462402191098, + 121.17702898598237, + 146.7325958723813, + 178.15246118618322, + 207.6858176506042, + 253.82999632537167, + 270.7818492387907, + 275.03044584927693, + 315.8098408915748 + ], + [ + -23.266065900750775, + -11.266289629637127, + -9.159559725898525, + -8.269370947383896, + 1.3177266101953558, + 3.924683441734508, + 5.316781207492568, + 5.607927364952419, + 5.902931984647034, + 9.110122743044016, + 13.094157381341716, + 20.531108856468915, + 22.217115949626, + 24.48197513457658, + 27.610831147933663, + 35.941954227774964, + 36.536288418761686, + 39.43206237569226, + 41.58655689754962, + 42.44367084532946, + 46.13960741130214, + 49.18883236486268, + 49.900852762412086, + 52.427974449035084, + 54.346328440538606, + 56.960636120990976, + 58.43848345747944, + 60.558681900969894, + 67.37687188364811, + 68.53894099226862, + 73.87405919641276, + 74.51371217963501, + 84.18985981899054, + 89.34954164401249, + 103.31740228072005, + 119.21051510816866, + 120.81149416673084, + 146.58868034759794, + 174.27042217328477, + 206.95506858443386, + 251.29957369086327, + 269.2946551234172, + 272.1019260875422, + 315.2500369323313 + ], + [ + -23.230519804255938, + -11.224553576867006, + -9.270287627249557, + -8.321641305000105, + 1.3514378723055918, + 3.9148475936502405, + 5.284287505197086, + 5.531307135072748, + 6.032107351233589, + 9.185236781711847, + 13.129294662343518, + 20.361476717532344, + 22.088442878830232, + 24.327487294502916, + 27.624697930801965, + 35.646595395476346, + 36.53511805694736, + 39.63505210831997, + 41.560563383575534, + 42.41131675487042, + 46.269886995087596, + 49.49219566523917, + 50.02601978726766, + 52.77823489985675, + 54.34776105934491, + 56.96668572835209, + 58.688356873150205, + 60.7626324159644, + 67.06253246507856, + 68.52568152407098, + 74.1240878961971, + 76.02157518139869, + 84.3099521041725, + 88.30141935628335, + 104.2917247667868, + 119.55071263853192, + 120.33773582724551, + 146.55768320658493, + 170.766908087286, + 206.26859987662715, + 248.49724534036164, + 268.1167359635447, + 269.141595240354, + 314.70519709531766 + ], + [ + -23.19378699246874, + -11.18143759126961, + -9.382961657007739, + -8.37438959256095, + 1.3874261538035135, + 3.904019746820478, + 5.232735930590155, + 5.474924843290955, + 6.164219507184039, + 9.262678176006634, + 13.165709874812627, + 20.19904573311085, + 21.9616234835415, + 24.186922055871793, + 27.643584548558614, + 35.33848586798701, + 36.53388886041783, + 39.823250096769215, + 41.54524975154077, + 42.370621782355755, + 46.389765116373525, + 49.79798609061322, + 50.14558307340169, + 53.12911791989837, + 54.364434617020514, + 56.96637753268705, + 58.946560648796485, + 60.96307318790466, + 66.70412314343363, + 68.51172863288073, + 74.37817624703899, + 77.65664872382408, + 84.44274633845508, + 86.8203513338832, + 105.31266315200136, + 119.72085382375172, + 119.93310428860687, + 146.68185242685237, + 167.72644104723366, + 205.62040600974512, + 245.40280794412988, + 265.8934456427892, + 267.4887127970227, + 314.1737873322473 + ], + [ + -23.155869294102974, + -11.136947282480916, + -9.497472166805338, + -8.427539695953611, + 1.4257144920868594, + 3.8922322214039915, + 5.157735064525184, + 5.443173445731737, + 6.2991748820477556, + 9.342352041099831, + 13.203432731426313, + 20.04350701037397, + 21.83669555615663, + 24.05955629147175, + 27.667109652401702, + 35.01642685233618, + 36.53233516189394, + 39.99731487785975, + 41.54046289891938, + 42.322625928046584, + 46.49866574961747, + 50.10356210464066, + 50.26062367328601, + 53.47918605168134, + 54.39863129362075, + 56.9601156249494, + 59.21392542266847, + 61.157557147945006, + 66.28561318626332, + 68.49716114091916, + 74.63483473020273, + 79.42308278576573, + 84.58726688870168, + 84.92288852946712, + 106.37537676872127, + 119.07019855423691, + 120.26564220762718, + 146.9975975795705, + 165.1913294795192, + 205.00702032849514, + 241.9971282284804, + 262.7721525073088, + 266.97291028473444, + 313.6544844508321 + ], + [ + -23.11676857486179, + -11.091088506615934, + -9.613712698316821, + -8.481018006498587, + 1.4663208003031158, + 3.87952233828419, + 5.065105276775683, + 5.430227278684598, + 6.436881481262062, + 9.424155199809437, + 13.242494384698263, + 19.894582278522474, + 21.713689585003937, + 23.944632626308444, + 27.694921152124632, + 34.679105427384485, + 36.53019008498379, + 40.15805484923624, + 41.546020612398266, + 42.26833259022513, + 46.59616308321832, + 50.36120235318587, + 50.417447671126766, + 53.825525024736166, + 54.454052316701066, + 56.9483101978854, + 59.49079286085391, + 61.343896710759196, + 65.78160226535724, + 68.48208146822188, + 74.89228525016327, + 81.32382843236861, + 82.67323260497292, + 84.74905145928426, + 107.46795612182174, + 118.34024947790655, + 120.62355117330941, + 147.52433309160565, + 163.1636819528977, + 204.42677548796453, + 238.26296671922557, + 259.572863189352, + 266.7468582955133, + 313.1461543675476 + ], + [ + -23.076486735131617, + -11.043867375282126, + -9.731580014988348, + -8.534753441853887, + 1.5092579247394944, + 3.8659317321603623, + 4.961998060563346, + 5.4289254742656325, + 6.577248836561043, + 9.507976305837991, + 13.282926903558767, + 19.75202728765589, + 21.592629845490706, + 23.84135691970336, + 27.7266894759011, + 34.32509686365852, + 36.52718266095778, + 40.30637292957642, + 41.561714956674656, + 42.208696855009826, + 46.682009603868714, + 50.47052297589943, + 50.71520586925036, + 54.15907648758826, + 54.54037661817238, + 56.93135360365731, + 59.77701209211492, + 61.520123133786846, + 65.15196947653287, + 68.46661564542948, + 75.14728298967354, + 80.2021538874269, + 83.36042838975591, + 84.92256010849304, + 108.57230141510192, + 117.58721641823739, + 120.98702819991531, + 148.25510931562332, + 161.62065088488717, + 203.87930208652475, + 234.18594435294312, + 256.3287756150314, + 266.74843829262204, + 312.64782325311415 + ], + [ + -23.03502570980316, + -10.995290267670624, + -9.850974112125693, + -8.588677449844253, + 1.5545337239097536, + 3.851505712227165, + 4.8525297634936555, + 5.435140492526417, + 6.720187934858449, + 9.59369597870228, + 13.324762715665544, + 19.615632792805773, + 21.47353532767221, + 23.74889321429743, + 27.762102269865885, + 33.952873952587545, + 36.52303785022309, + 40.4432191627103, + 41.58731465262422, + 42.14461740339311, + 46.75615937867455, + 50.5709179251839, + 51.01346349188488, + 54.44196546514546, + 54.69568822487269, + 56.90959413597996, + 60.07185882581844, + 61.68451801225686, + 64.33579822623661, + 68.45091429070582, + 75.38586401825997, + 77.68920729700011, + 85.11058947299118, + 85.5328077628901, + 109.66270621420436, + 116.85196475243463, + 121.35452290153917, + 149.15016660709452, + 160.53731560702036, + 203.36515133583438, + 229.75563532553252, + 253.05345676354, + 266.9356606595682, + 312.15864624579694 + ], + [ + -22.9923874706451, + -10.94536384550669, + -9.971798207959605, + -8.642723997585597, + 1.6021511800894923, + 3.836292683184302, + 4.738744545378088, + 5.44681698643906, + 6.865611126904811, + 9.681186951831496, + 13.36803403782318, + 19.485223779200513, + 21.35642052540445, + 23.666355683206646, + 27.800860125883105, + 33.56083334870743, + 36.51747726386335, + 40.56955259862099, + 41.62256661339905, + 42.07693117002953, + 46.81878348657354, + 50.666564346997156, + 51.30718009701928, + 54.62525586124922, + 54.96810177825653, + 56.88329520792757, + 60.37379737489121, + 61.835796520260814, + 63.25214006849628, + 68.43515413228808, + 75.08764784326389, + 75.85188854640889, + 85.31346151275629, + 87.83906678167003, + 110.69766404227674, + 116.1834024649431, + 121.72516318793542, + 150.13159075114794, + 159.91045687165422, + 202.88549381942178, + 224.96675272052434, + 249.75780247861834, + 267.2712140939572, + 311.6778767593587 + ], + [ + -22.948574031405073, + -10.894095070709751, + -10.093958718166645, + -8.696829548086104, + 1.6521085493629462, + 3.820343637242591, + 4.621704370353577, + 5.46288324289914, + 7.013432016831674, + 9.770314230222716, + 13.412772317884354, + 19.36065743468618, + 21.241296108334616, + 23.59279681996066, + 27.842673007220114, + 33.14735013708234, + 36.51022015036544, + 40.686312434537705, + 41.667196809868365, + 42.0064097283644, + 46.87027527891957, + 50.7576757334209, + 51.595420564999166, + 54.773819625743194, + 55.288972439286766, + 56.85253797506922, + 60.679894492171506, + 61.82761140141749, + 61.97363378948847, + 68.41953986960118, + 73.1417828160144, + 75.98673238036947, + 85.53158413503482, + 90.27527987378737, + 111.59335258952835, + 115.66639921700123, + 122.09818371797257, + 151.08164976052996, + 159.77434058191494, + 202.44187585969277, + 219.82037399698967, + 246.45170628754244, + 267.7218015458498, + 311.2048382355559 + ], + [ + -22.903587455522132, + -10.841491225692419, + -10.217365216190364, + -8.750933026315773, + 1.7043995493364759, + 3.8037117266286575, + 4.502015620762149, + 5.482725663034753, + 7.163565333474732, + 9.860935247391385, + 13.459007710195811, + 19.241820253815465, + 21.128169494688223, + 23.527190702548936, + 27.887257105526135, + 32.710874598137345, + 36.50098455312407, + 40.794397529189126, + 41.72091064025001, + 41.93375616240261, + 46.91124438085833, + 50.84411444982838, + 51.87768908024779, + 54.93047942161653, + 55.60055952999663, + 56.81688364457431, + 60.06452793664393, + 60.98439604142612, + 62.10002449469566, + 68.40430595956234, + 71.51442455064401, + 76.23292837184611, + 85.76539135427487, + 92.8353087577506, + 112.17116450874808, + 115.47677155098606, + 122.47283283780115, + 151.86576769789815, + 160.18582501250657, + 202.03602618654972, + 214.32513316884484, + 243.14438811120624, + 268.2583996818487, + 310.7388993574935 + ], + [ + -22.857429866042086, + -10.787559936314498, + -10.341930381547803, + -8.804975776550158, + 1.7590135749433617, + 3.7864519261670253, + 4.380060985726724, + 5.505957677485597, + 7.315926784111396, + 9.952900003976177, + 13.506768602874972, + 19.128624561700708, + 21.01704534003511, + 23.468409565890376, + 27.934331910119365, + 32.250087157326895, + 36.48948863069239, + 40.89465296134199, + 41.78339297908145, + 41.85960077318737, + 46.94249981352776, + 50.9255140011808, + 52.15373801693527, + 55.104721944602225, + 55.806915263218116, + 56.77380655853037, + 58.14021824946344, + 61.275295642433974, + 62.22264892097136, + 68.38971646005341, + 70.29333117269572, + 76.48649193566185, + 86.01533925124662, + 95.5106411196687, + 112.24109333303475, + 115.80032682567067, + 122.84834824687933, + 152.40088165102108, + 161.1592685960797, + 201.66970852488166, + 208.49828819742177, + 239.8444731818533, + 268.85643277181236, + 310.279453213244 + ], + [ + -22.810103457109303, + -10.732309197594839, + -10.467569938152499, + -8.858901512617978, + 1.8159359226738159, + 3.7686207972391323, + 4.256105386636498, + 5.532314379449303, + 7.470432890979281, + 10.04605116324489, + 13.556081209112472, + 19.02100467064382, + 20.907925954883062, + 23.415191055285817, + 27.98361730342843, + 31.764126459154618, + 36.47545215600377, + 40.987862183780365, + 41.78449306901854, + 41.854308073178466, + 46.96502396070701, + 51.00125811659175, + 52.42350471629142, + 55.13107170931448, + 55.31232926554588, + 56.72908523792495, + 56.955991819566286, + 61.52756821684203, + 62.361577214145925, + 68.37605105849511, + 69.39134144405546, + 76.74064128881278, + 86.28190755054024, + 98.29027014499822, + 111.91116934045654, + 116.52509053593461, + 123.22394877492756, + 152.70574986543832, + 162.61661840941662, + 201.3446155768338, + 202.3665593246562, + 236.56000779537584, + 269.49574673272485, + 309.825900552103 + ], + [ + -22.761610506283166, + -10.675747402376437, + -10.59420258449888, + -8.912656262510792, + 1.875147992459895, + 3.7502763683661176, + 4.130347483007789, + 5.561601372705765, + 7.627000810647354, + 10.140224072805372, + 13.606969226676677, + 18.918912825385398, + 20.800811661980923, + 23.366092302069752, + 28.034830515071747, + 31.252898250814674, + 36.45859821548331, + 41.07474341150074, + 41.7088854334331, + 41.93329943447245, + 46.97993995361531, + 51.07042114243369, + 52.68706863211962, + 53.20594420882149, + 55.52085848301444, + 56.71136131937565, + 57.01714872098691, + 61.70120266824535, + 62.551185864915105, + 68.36341239171038, + 68.70996936966999, + 76.99360942699853, + 86.56560181921562, + 101.16063303152241, + 111.40499525149791, + 117.42463011210133, + 123.59883107486384, + 152.85780183851656, + 164.42961899409232, + 195.96663051231695, + 201.06229917984243, + 233.29845817412917, + 270.1604014934127, + 309.3776370901442 + ], + [ + -22.711953386933637, + -10.721749917360112, + -10.617883373227347, + -8.966188308652605, + 1.9366274241560817, + 3.7314781547293525, + 4.002946324587868, + 5.593668304890882, + 7.785548136007055, + 10.235246677742902, + 13.659453560472727, + 18.822315050536073, + 20.69570110254765, + 23.31942525568851, + 28.087682771287874, + 30.71745627086164, + 36.438655125443084, + 41.15594907848685, + 41.633098913377204, + 42.01998985504651, + 46.988474877028175, + 51.13167540154098, + 51.139179978849576, + 52.94461597500534, + 55.7616068033365, + 56.66511926276484, + 57.33399767319924, + 61.769163809717824, + 62.812170569529464, + 68.17252232278707, + 68.35479043052146, + 77.24465497180053, + 86.8669551834584, + 104.10562793305652, + 110.83616156693596, + 118.38392178828644, + 123.97216815772704, + 152.92879458556547, + 166.4827828691984, + 189.34521495812632, + 200.82413102736072, + 230.06670677224494, + 270.83832453051855, + 308.934044715262 + ], + [ + -22.661134580073263, + -10.85013635044557, + -10.558726397948124, + -9.01944812497911, + 2.0003481110866126, + 3.7122873505978173, + 3.8740359286714674, + 5.628394338810265, + 7.94599268032196, + 10.330939288536795, + 13.713552093075611, + 18.731186983685326, + 20.592591499241518, + 23.27316551023947, + 28.14187546491423, + 30.160420471986185, + 36.415358574869906, + 41.232067425223704, + 41.557248658604216, + 42.11398164631, + 46.99191641555308, + 49.17755088742507, + 51.18315465248392, + 53.19640969903583, + 56.026178396379066, + 56.61567591221089, + 57.69856013679763, + 61.739004993704455, + 63.129957869847374, + 67.73555474312008, + 68.34573048524099, + 77.493390536135, + 87.18652910450028, + 107.10672797749395, + 110.2492884299806, + 119.35825744190272, + 124.34310888756946, + 152.96480833570672, + 168.69203048023496, + 182.55860812275057, + 200.6312884950844, + 226.87105116977833, + 271.52087032014776, + 308.4944864100298 + ], + [ + -22.60915668516576, + -10.979289029252662, + -10.49828626913663, + -9.07238831183253, + 2.0662800140158586, + 3.692767247395877, + 3.743733642862771, + 5.665679729384668, + 8.108252242433666, + 10.427114167431936, + 13.769279478338161, + 18.64550975750836, + 20.49147888248504, + 23.224824552016063, + 28.197095641022266, + 29.586369316688593, + 36.388453991936196, + 41.30362549177467, + 41.481068918082975, + 42.21485718807738, + 46.99137274679682, + 47.37553564092589, + 51.22225267480715, + 53.44276431221946, + 56.31435422234029, + 56.56447560955619, + 58.08383975011662, + 61.62542201088725, + 63.4822639983387, + 67.36527759525896, + 68.34020483786091, + 77.73960228384857, + 87.52491288651646, + 109.66316251704447, + 110.14320762772104, + 120.32989969103348, + 124.71077838831509, + 152.99160651210292, + 170.99814870403554, + 175.67168632956097, + 200.48476061620764, + 223.7172077078856, + 272.20232567998414, + 308.0583047071743 + ], + [ + -22.556022429668875, + -11.109137743146048, + -10.436573328329812, + -9.124963529552707, + 2.1343886704319117, + 3.61214514326384, + 3.6729839604453085, + 5.705440680713748, + 8.272244351841774, + 10.523574899121183, + 13.826646924040853, + 18.565265981823703, + 20.39235828574505, + 23.171274506323126, + 28.253010539722247, + 29.002126278117654, + 36.3576991169035, + 41.37109296913731, + 41.403449922615984, + 42.322179862750964, + 45.749278014493534, + 46.989136558182395, + 51.245323119849, + 53.684025143850825, + 56.506206757162424, + 56.631639154439455, + 58.48345498063691, + 61.4341807870677, + 63.85543056717747, + 67.04317645511041, + 68.33825307015903, + 77.98318844759088, + 87.88272160858016, + 109.08669878049521, + 113.19249053345669, + 121.29186119626281, + 125.07427997561273, + 153.0228673332171, + 168.75635094857694, + 173.3576038609104, + 200.38536984634027, + 220.6103213260525, + 272.87939388381716, + 307.6248235280545 + ], + [ + -22.501734677274992, + -11.239614835508132, + -10.373598515297527, + -9.177130431520373, + 2.2046342477391163, + 3.479367531748971, + 3.6530075971651463, + 5.747606041388412, + 8.437885991958421, + 10.620115515093177, + 13.885661921512904, + 18.490435870161352, + 20.29522391449768, + 23.108519886010235, + 28.309260852556896, + 28.416870908576346, + 36.32286674722356, + 41.32096579490899, + 41.434886504389056, + 42.43549543742506, + 44.302937437410385, + 46.98533585596938, + 51.247227809725445, + 53.9205516175426, + 56.45113526086854, + 56.96799788336203, + 58.89548441777299, + 61.16474326892951, + 64.24230873069553, + 66.75700302521307, + 68.34062882703842, + 78.22413649976451, + 88.26059215762089, + 108.5245963582572, + 116.2306193395823, + 122.24199261315381, + 125.43270043449327, + 153.06566429911643, + 161.88945976537627, + 175.73631974493688, + 200.3338053566974, + 217.5549839474211, + 273.5506827614917, + 307.1933532880118 + ], + [ + -22.44629643499183, + -11.37065511264032, + -10.309373423096782, + -9.228847597297033, + 2.2769699095490883, + 3.3454913225921015, + 3.6329140833184637, + 5.792115067557949, + 8.605093299347761, + 10.716519345221826, + 13.946327873342094, + 18.42099355323131, + 20.20006929286446, + 23.03143482254258, + 27.84203723107465, + 28.365452219534294, + 36.283747602446496, + 41.22167162959003, + 41.495374169374536, + 42.55433393619746, + 43.03859270185748, + 46.98177898050156, + 51.22065412765885, + 54.152704004393, + 56.391606260271494, + 57.331319141659314, + 59.31938779612961, + 60.81448855485246, + 64.63893599232074, + 66.49868670455182, + 68.34829657332205, + 78.46251607701568, + 88.65917701771509, + 107.97953504917292, + 119.232837266042, + 123.18055212251333, + 125.78512390525273, + 153.12353359613303, + 155.15031985095777, + 178.10605057540783, + 200.33066159913164, + 214.55526756144346, + 274.21621479883873, + 306.76319920617533 + ], + [ + -22.389710859331323, + -11.502195751950929, + -10.243910359508709, + -9.280075466400854, + 2.3513391234287164, + 3.2106017654617616, + 3.6127880093800617, + 5.838915825108086, + 8.773781236155779, + 10.812557574703696, + 14.008643564634387, + 18.356903622171295, + 20.106887391270565, + 22.933552312381792, + 27.290972787401937, + 28.421144300101613, + 36.24015323819722, + 41.046216338217434, + 41.55287989356576, + 42.00151356001653, + 42.678212015601765, + 46.97965572215096, + 51.155092583271525, + 54.380833103880306, + 56.328988826656136, + 57.72041535152956, + 59.755097822264744, + 60.38186399813286, + 65.04286070305918, + 66.26281513138458, + 68.36245234601475, + 78.69847978347515, + 89.0791354530098, + 107.45312024245705, + 122.1742596001028, + 124.1090387218463, + 126.13067189903887, + 148.61783443645893, + 153.19811705639967, + 180.44232247985033, + 200.37646590572604, + 211.61479108588046, + 274.87697125978644, + 306.333672804518 + ], + [ + -22.331981261953032, + -11.634176209847405, + -10.177222415465588, + -9.330776273155413, + 2.4276712815239225, + 3.0747797690318035, + 3.592727120399272, + 5.887963984136706, + 8.943863232147914, + 10.907987489112687, + 14.07260241846892, + 18.298117946020177, + 20.015670737930332, + 22.807137883119445, + 26.77824761779098, + 28.47583646128149, + 36.19191892138081, + 40.54021972298831, + 41.429847789322686, + 41.60768773145913, + 42.806635821695146, + 46.980109899491126, + 51.03536028352176, + 54.605272306211646, + 56.263217956674396, + 58.13541596634188, + 59.869391822184205, + 60.202659484824856, + 65.45239443259452, + 66.04572186589334, + 68.3845902637585, + 78.9322687421389, + 89.52112171104685, + 106.94633146281213, + 125.0294583101447, + 125.03060111688669, + 126.46864446499717, + 142.36740244676696, + 153.29003973230633, + 182.72324367343245, + 200.47163199276366, + 208.73689232607657, + 275.53447787811183, + 305.9041066169891 + ], + [ + -22.273111115146538, + -11.766538129654796, + -10.10932354103958, + -9.380913982949709, + 2.505874521845978, + 2.9381025880728004, + 3.5728495600497245, + 5.939221859643622, + 9.115250791668242, + 11.002550395503922, + 14.13819147180442, + 18.24457280908258, + 19.926411516505052, + 22.643982948622156, + 26.318311961959555, + 28.528948688720302, + 36.138906364299, + 39.75678397760813, + 41.253914679132016, + 41.66004588463355, + 42.93910427282397, + 46.98420558809792, + 50.83966978297788, + 54.82633149583836, + 56.194109629014314, + 58.576364315395196, + 59.28713092404828, + 60.662035329096554, + 65.84494692788391, + 65.86627050681376, + 68.41660166377906, + 79.16422146093353, + 89.98576988634935, + 106.45975806906102, + 125.94324432015212, + 126.79925291430781, + 127.77890482873747, + 136.46768630298655, + 153.39938325163288, + 184.9287719033021, + 200.61598971539078, + 205.9252755913135, + 276.19043683364083, + 305.4738721723318 + ], + [ + -22.21310405754318, + -11.89922524979888, + -10.040228629515497, + -9.430454230154034, + 2.5858236936371117, + 2.8006443782407136, + 3.5533059267473384, + 5.992657610389244, + 9.287853059198913, + 11.095969214115097, + 14.205390003658444, + 18.196186413335383, + 19.839101651880483, + 22.437359386011934, + 25.923156529116998, + 28.579795658851932, + 36.081006204042346, + 38.985827945696165, + 41.168018691796995, + 41.71017042933496, + 43.075112680839375, + 46.99291605661864, + 50.53772004659242, + 55.044292193951854, + 56.12142769249701, + 58.65636278644193, + 59.04302528768299, + 61.13294959594649, + 65.65893841976954, + 66.28347954372683, + 68.46091563310547, + 79.39478522475625, + 90.47367512439835, + 105.99373786285537, + 126.84111115737875, + 127.13354482320409, + 130.3967585202303, + 130.9788469580383, + 153.5259438746717, + 187.0401616913957, + 200.80409756376835, + 203.18899020260565, + 276.8464083346122, + 305.0424013137356 + ], + [ + -22.151963900436524, + -12.032183312425976, + -9.969953610013713, + -9.479364257834845, + 2.66247668715176, + 2.667339486471938, + 3.534300125408275, + 6.048244542667559, + 9.46157633463821, + 11.187945745110614, + 14.274167742511318, + 18.15285678753802, + 19.753732885688734, + 22.184848417172123, + 25.59929501831152, + 28.62755087751186, + 36.01814010302867, + 38.278029431540915, + 41.10716055874315, + 41.75824871111811, + 43.21415659646843, + 47.00711653100657, + 50.09050186102952, + 55.25940299799506, + 56.044896258655456, + 58.011796458857106, + 59.53469419503873, + 61.61469709094746, + 65.48694367944736, + 66.70318553123403, + 68.5206966855079, + 79.62452945311475, + 90.9853709323461, + 105.54844906246849, + 125.94123913962237, + 127.39634380777076, + 127.79996254609202, + 132.87116927634918, + 153.66937393814493, + 189.03922407731633, + 200.4116579109167, + 201.15666344230746, + 277.5035447961718, + 304.6092109096254 + ], + [ + -22.089694635076164, + -12.165359972568016, + -9.898515549093279, + -9.527612859318502, + 2.523668927287684, + 2.7501506382597456, + 3.516127104038433, + 6.10596048745101, + 9.636323525206425, + 11.278157630946401, + 14.3444825744548, + 18.11446013721346, + 19.670296842912105, + 21.89037214810382, + 25.345718918821586, + 28.671196168560087, + 35.95026232212681, + 37.63358861869537, + 41.05856168559806, + 41.80444234895388, + 43.355735738280906, + 47.02757876175763, + 49.45519975199143, + 55.471872825998446, + 55.96420451608084, + 57.398664395670906, + 60.04994006707178, + 62.105815150809285, + 65.32912440981205, + 67.12468025605288, + 68.60012082445404, + 79.85416049695581, + 91.52130250721871, + 105.12397866296745, + 121.39028687247807, + 127.69995099173902, + 128.70908076196287, + 135.18166953298552, + 153.82925898911566, + 190.90587459753337, + 197.86947099182026, + 201.4050001282758, + 278.1623807980759, + 304.173930951117 + ], + [ + -22.02630044128359, + -12.29870470790283, + -9.825932761765321, + -9.575170321548272, + 2.3842888601675107, + 2.833821968764784, + 3.4992447333691037, + 6.1657872334351564, + 9.811993513697203, + 11.36625506187732, + 14.416277667974935, + 18.080849657294465, + 19.588785090684677, + 21.563562021548922, + 25.154639662298653, + 28.70944921359389, + 35.87736050119694, + 37.045471685175684, + 41.01846076365966, + 41.84888970113259, + 43.49935782062826, + 47.054966818282445, + 48.597820953429625, + 55.6818507585827, + 55.8790105063961, + 56.861648034721846, + 60.586253979696544, + 62.60336950577465, + 65.18710707963075, + 67.54735661063495, + 68.70475423930054, + 80.08453726743818, + 92.08179621530064, + 104.72037793207421, + 117.33661709270588, + 127.98163029815676, + 129.63256084882616, + 137.31899786344022, + 154.00515888675864, + 192.5951598327671, + 195.37720989640016, + 201.7680255725029, + 278.8226821724869, + 303.73633592336535 + ], + [ + -21.96178569773599, + -12.432168729105246, + -9.752224932410662, + -9.622008370081719, + 2.2444031089665932, + 2.9176097962893017, + 3.4844182767168057, + 6.227710007893943, + 9.988480409968426, + 11.451857316868432, + 14.48947792671699, + 18.051854811415176, + 19.509189190219484, + 21.21677887874674, + 25.014648272952662, + 28.740657684024704, + 35.799454603902944, + 36.50594603186538, + 40.98547111314671, + 41.89170731176734, + 43.64454192984485, + 47.089833865978925, + 47.50892627955878, + 55.78894532751573, + 55.88929588634136, + 56.42985986675245, + 61.139581127196465, + 63.10105071947519, + 65.06575285282175, + 67.97069134319224, + 68.84205234037682, + 80.31668691579121, + 92.66702567378637, + 104.33771003807996, + 113.77561036048778, + 128.24684859903272, + 130.56601184546017, + 139.27563157649567, + 154.19662848646465, + 192.67728065694584, + 194.4033994805046, + 202.19713509428325, + 279.48335716212534, + 303.2963791571878 + ], + [ + -21.89615499426374, + -12.565704890719056, + -9.677413246245159, + -9.668100115472381, + 2.1040777067824417, + 3.0001579828342773, + 3.473024209246888, + 6.291717003541304, + 10.165672628830276, + 11.534549305661885, + 14.563985681031058, + 18.027281058142545, + 19.43150074263411, + 20.861993536607663, + 24.914038690481295, + 28.76264176665172, + 35.716582833158505, + 36.00796194137236, + 40.95902914935557, + 41.93298839643197, + 43.790819927846364, + 46.2104467169016, + 47.1326198275143, + 55.693618212346465, + 56.08099724857621, + 56.12232584024193, + 61.70373605600905, + 63.58296135600502, + 64.97927002902811, + 68.39423252533381, + 69.02196347413124, + 80.5518195142111, + 93.2769753145614, + 103.97609200904192, + 110.68685318785322, + 128.49535704061066, + 131.51043556156228, + 141.04792792613733, + 154.40322670945903, + 190.362562259674, + 195.73011870885463, + 202.69145481795644, + 280.14243121688315, + 302.85422960659014 + ], + [ + -21.829413146530253, + -12.699267602420806, + -9.713420000682808, + -9.60152053223131, + 1.9633786793556087, + 3.0788585502520385, + 3.467689448083489, + 6.3577989536595, + 10.343451691547063, + 11.613878397980377, + 14.639675538240075, + 18.006909974551938, + 19.3557114293272, + 20.509061751153222, + 24.84273093494344, + 28.77245602702581, + 35.545081720382306, + 35.62914794754761, + 40.938908918593626, + 41.97278725333897, + 43.937711021651864, + 44.748444917983896, + 47.183649918521944, + 55.59262264633692, + 55.883676225718, + 56.30029010041969, + 62.26975136469817, + 64.00105504267879, + 64.97375779133185, + 68.81758934844267, + 69.25752920980564, + 80.79134031067505, + 93.91140286066536, + 103.63573184616938, + 108.03725853268891, + 128.72626001652176, + 132.4671355437834, + 142.63596292462472, + 154.62451907262607, + 188.03212342061, + 196.9704754370194, + 203.24969506776583, + 280.7970845579228, + 302.4103101389471 + ], + [ + -21.76156521349095, + -12.832812740467766, + -9.757943749095574, + -9.524571418689673, + 1.8223726541200334, + 3.1487262917006915, + 3.473416572276592, + 6.425948760073862, + 10.521690554690455, + 11.689352025503364, + 14.716388340859119, + 17.99049969085686, + 19.281813047451145, + 20.165363203924763, + 24.79280802040254, + 28.766024606482986, + 35.11280176252407, + 35.53657298992788, + 40.925037655275936, + 42.01095259486685, + 43.1797410002218, + 44.08502408017721, + 47.24313410613592, + 55.485543567607465, + 55.74039195882778, + 56.50149410174164, + 62.8252719583165, + 64.24287572532587, + 65.15971106827847, + 69.24042307211772, + 69.56518633509498, + 81.0368576344536, + 94.56980281457841, + 103.31696096691807, + 105.78512474373022, + 128.9385439856562, + 133.43718455139074, + 144.0432482324618, + 154.86007667341443, + 185.75581261286365, + 198.05455676907093, + 203.8662164793056, + 281.44374828995774, + 301.96533595655063 + ], + [ + -21.69261651807443, + -12.966297559046145, + -9.801648312621149, + -9.446592503335314, + 1.6811274821876614, + 3.2019398846428584, + 3.4980425290130253, + 6.4961611794289595, + 10.700251068248642, + 11.760436888392729, + 14.793924249518666, + 17.977785505062638, + 19.209797540941214, + 19.836145320036252, + 24.758319024492348, + 28.737579681857657, + 34.70618017998644, + 35.439565851425904, + 40.91741546384611, + 41.55944613748552, + 42.050405066883485, + 44.23197795528941, + 47.311167575117096, + 55.371965612581015, + 55.65730373097613, + 56.7010059145423, + 63.35382117307795, + 64.28877234893721, + 65.5560223555851, + 69.66243859250696, + 69.96423048209424, + 81.29018392216169, + 95.2513738252145, + 103.02026186699777, + 103.88436779429368, + 129.13122027004297, + 134.42129780948167, + 145.2763356992785, + 155.1094734533342, + 183.53839486015136, + 198.98451246588454, + 204.5296662853296, + 282.07825104936626, + 301.52035121498346 + ], + [ + -21.622572671592188, + -13.09968060113366, + -9.844511819372473, + -9.367612540009457, + 1.5397128565748759, + 3.2324809128963, + 3.5475994204798025, + 6.568432572886777, + 10.878979696267363, + 11.826561251328087, + 14.872035103134127, + 17.9684804910423, + 19.139657027463084, + 19.52505855293545, + 24.73486065807547, + 28.67880831159138, + 34.321654909351025, + 35.338176338286196, + 39.947004344552084, + 40.91607667804305, + 42.08522611533872, + 44.37841908775586, + 47.387732304623285, + 55.25148229553102, + 55.619262178176356, + 56.89860043439053, + 63.82842745161979, + 64.26618404005245, + 66.04397368575545, + 70.08337643876551, + 70.4748629212919, + 81.5533266673755, + 95.95499360781554, + 102.2882249194028, + 102.74629085000032, + 129.30340395777932, + 135.41979182113403, + 146.3443421922397, + 155.37228289428342, + 181.379092775576, + 199.77340211166555, + 205.22445718420397, + 282.6960045825473, + 301.0767612742274 + ], + [ + -21.551439602461162, + -13.232921608382913, + -9.886513520386444, + -9.28766264499566, + 1.3982009089707013, + 3.2430602124835133, + 3.6193879578385126, + 6.642760723082208, + 11.057699442745003, + 11.887123221926004, + 14.950416459568466, + 17.96227584151269, + 19.07138382153009, + 19.234647747041937, + 24.719174401300133, + 28.577624432101587, + 33.95611813328854, + 35.232603876652234, + 38.38706796279201, + 40.92106985029979, + 42.11990171774037, + 44.52396678454953, + 47.47269986119486, + 55.123705935577846, + 55.61466039653146, + 57.094197858517106, + 64.09604452816768, + 64.37390238078915, + 66.56180366663298, + 70.50300517554895, + 71.11489490866802, + 81.82846550539153, + 96.67920582039882, + 100.95201655329704, + 102.49589582074377, + 129.4543855065456, + 136.4325742633266, + 147.2584300040794, + 155.6480749196477, + 179.2755906333746, + 200.4371377930852, + 205.93466167518739, + 283.2922139089627, + 300.63635739204506 + ], + [ + -21.47922358992677, + -13.36598142939085, + -9.927633734942111, + -9.206776526459972, + 1.2566667687379554, + 3.24119378327642, + 3.70590134079409, + 6.719144720185328, + 11.236192533955338, + 11.941511520803482, + 15.028700152002482, + 17.958840588674438, + 18.966732350113265, + 19.004970453862846, + 24.708828712491396, + 28.416667341390212, + 33.606934916875844, + 35.12307578816009, + 36.92640936253985, + 40.93244682447361, + 42.15352018024032, + 44.668293256186175, + 47.56583550138934, + 54.98827807094647, + 55.63492605129868, + 57.28771914149441, + 64.07068354162733, + 64.7075708357274, + 67.08929161849879, + 70.92111426106013, + 71.89648723444698, + 82.11791140405525, + 97.42222366752782, + 99.83487833241711, + 102.27012964191822, + 129.58371068257975, + 137.45915140155648, + 148.03127601365858, + 155.9364135470953, + 177.22484939822917, + 200.98949969586891, + 206.6480156506646, + 283.86209634726475, + 300.20133013657846 + ], + [ + -21.40593130360183, + -13.498821925559877, + -9.967853794159, + -9.124990741219211, + 1.1151890715340265, + 3.2325957743579985, + 3.8014320545945104, + 6.797584916572368, + 11.414157178343238, + 11.989156661701914, + 15.10644888920129, + 17.957820200594604, + 18.72267597029698, + 18.940409686766476, + 24.701987381154282, + 28.172347720134088, + 33.27186376492676, + 35.00983994518788, + 35.609382904027036, + 40.95025655770604, + 42.18604917880268, + 44.811099229664464, + 47.6668036514065, + 54.844880033300754, + 55.67376337833537, + 57.47906724129532, + 64.01097780713043, + 65.01327186761456, + 67.61784360940116, + 71.33750742609963, + 72.82486466478099, + 82.42404454647529, + 98.1819541539912, + 98.90060431071649, + 102.07026115147235, + 129.69127512406192, + 138.49864852749883, + 148.67655794142715, + 156.23685569969385, + 175.2234194495453, + 201.439631621927, + 207.35796060483506, + 284.40109390989255, + 299.77426748883147 + ], + [ + -21.33156984980091, + -13.631405873551715, + -10.00715598276714, + -9.042344983706489, + 0.9738504105385434, + 3.2203977516493874, + 3.902852374941551, + 6.878082947179982, + 11.591075973012762, + 12.029676255784112, + 15.183155443034186, + 17.958833326043287, + 18.503563509835168, + 18.877694524735862, + 24.69724591317294, + 27.816971401727002, + 32.94898874287189, + 34.477768235066144, + 34.893161215018324, + 40.974541568787394, + 42.21750080165747, + 44.952111359290086, + 47.7751747917467, + 54.69324330170605, + 55.72651383044841, + 57.66812396691819, + 63.95065738996979, + 65.26451104653864, + 68.14171034603787, + 71.75199662580137, + 73.89957939686602, + 82.7492298534072, + 98.11784134611584, + 98.95604138119704, + 101.89779199077951, + 129.77743705083125, + 139.5498412811377, + 149.20847971647842, + 156.5489514813586, + 173.2676625952294, + 201.79195988064896, + 208.06339477857378, + 284.9050653128508, + 299.35813373407007 + ], + [ + -21.256146825859258, + -13.763696863090308, + -10.045523479211717, + -8.958882412665815, + 0.8327377301571068, + 3.206230059575015, + 4.008532767340221, + 6.960641810423501, + 11.765680205143445, + 12.06343125727695, + 15.258250259490074, + 17.96146559082754, + 18.31030336438476, + 18.816818218444173, + 24.693516901860768, + 27.327890118523865, + 32.63666437275387, + 33.56288799656479, + 34.773318691692346, + 41.00533590319948, + 42.24789320693036, + 45.09108077659657, + 47.890433723646225, + 54.53315922355395, + 55.789682973400886, + 57.8547503852994, + 63.89472088643839, + 65.465750894729, + 68.65568760510875, + 72.16439658846716, + 75.11701308746376, + 83.09571489785394, + 97.45987479965476, + 99.74189697956238, + 101.75451799065527, + 129.84315058386198, + 140.61119626000252, + 149.64135115815614, + 156.87224611403792, + 171.3539892106346, + 202.04759801112175, + 208.76699096979948, + 285.3704467728188, + 298.9562259434876 + ], + [ + -21.1796703838922, + -13.895659188559533, + -10.082940294582869, + -8.874650021773782, + 0.6919426694613537, + 3.190976780742692, + 4.117586674488358, + 7.045266002821534, + 11.93240639875442, + 12.095097248152712, + 15.331122573243027, + 17.965258716003955, + 18.14366694634431, + 18.757774258196573, + 24.68994930693537, + 26.702638570574454, + 32.33347167560925, + 32.87165799947106, + 34.65060340716723, + 41.042663999195895, + 42.27724440797207, + 45.22778158679424, + 48.01198913312871, + 54.364487684642064, + 55.860606661958194, + 58.03878838669331, + 63.844812708024435, + 65.62512982897906, + 69.15477056350957, + 72.57451995511272, + 76.4724632543777, + 83.46552822605896, + 96.90419694450958, + 100.53643573760147, + 101.64292399873933, + 129.890121715718, + 141.68091926509032, + 149.98923067493783, + 157.20628356771022, + 169.47915299474838, + 202.20620703345395, + 209.47309452533543, + 285.7943743606981, + 298.57210632455286 + ], + [ + -21.10214930579898, + -14.027257732458638, + -10.11939121121309, + -8.789699061086873, + 0.5515618697340069, + 3.175148464441616, + 4.229497517785627, + 7.131961699340149, + 12.048675120410863, + 12.166420085262484, + 15.401160436721453, + 17.96969210435466, + 18.004273725166293, + 18.700556348871864, + 24.685870826526504, + 25.96656936125173, + 32.03818356583221, + 32.38001107012033, + 34.525316513534754, + 41.086540093787505, + 42.30557098510875, + 45.36200918890804, + 48.13918430162724, + 54.18716433607998, + 55.93721915340028, + 58.22006274319245, + 63.801647258949835, + 65.75065472365704, + 69.63431018249837, + 72.98217297462671, + 77.96105430968011, + 83.86042959982434, + 96.43198963789055, + 101.32695731454761, + 101.57547829044326, + 129.92098879212392, + 142.75700928292247, + 150.26563405010168, + 157.55061153812545, + 167.6406299719463, + 202.2676007163799, + 210.18591069941758, + 286.17476442741076, + 298.20951101267104 + ], + [ + -21.023593091763, + -14.158457838287521, + -10.154861722126734, + -8.704085516958216, + 0.41169726660898165, + 3.1590591998095725, + 4.343941333308167, + 7.220736971017782, + 12.07319043337559, + 12.317955295319937, + 15.467812941848232, + 17.89252981257347, + 17.97415197155425, + 18.645158350363165, + 24.680745910516244, + 25.162140656433362, + 31.74973799874382, + 32.04451736867931, + 34.397767962085595, + 41.13696794497039, + 42.332887943823685, + 45.493578449856315, + 48.271308744172444, + 54.00120604209921, + 56.01789215981548, + 58.398383423901485, + 63.7655512893863, + 65.84911476949596, + 70.09020849161091, + 73.38715169566507, + 79.57741574946117, + 84.28207125917965, + 96.02760129335576, + 101.50719157964387, + 102.15881627257974, + 129.9395290053658, + 143.837316007742, + 150.48330791248176, + 157.90478633153097, + 165.83710674147127, + 202.23275353780198, + 210.90832587825912, + 286.51035205792357, + 297.87223890203063 + ], + [ + -20.944012065084376, + -14.28922516982335, + -10.189337972800594, + -8.617870658897523, + 0.27245639195241034, + 3.1429137177324655, + 4.460699353741894, + 7.31160203162525, + 12.06864311743561, + 12.486404135403745, + 15.530671542769335, + 17.80853343389863, + 17.97787914209422, + 18.59157415179405, + 24.331214568752323, + 24.67414435340343, + 31.467217529967552, + 31.820850391416997, + 34.26827568905042, + 41.19394072401635, + 42.3592088839988, + 45.622321791872515, + 48.40761049305296, + 53.806714296801836, + 56.10132238481918, + 58.57354805919298, + 63.73664462836007, + 65.92589856235772, + 70.51906323355581, + 73.78923857844441, + 81.31381259020094, + 84.73301364481058, + 95.67806091493891, + 101.50150029838463, + 102.96982821254358, + 129.95089083266362, + 144.91959845409013, + 150.65406327150703, + 158.2683718459387, + 164.06911226114016, + 202.1041759824045, + 211.64140000578806, + 286.80069033956585, + 297.5640275733237 + ], + [ + -20.863417496948973, + -14.419525552942712, + -10.222806706874438, + -8.531121662768694, + 0.13395271356715394, + 3.1268525155819216, + 4.579612537068174, + 7.4045695058627645, + 12.049782618884157, + 12.656575997830094, + 15.589556511735767, + 17.75197094442366, + 17.979878764885427, + 18.539797417796485, + 23.50551430844629, + 24.665717029787498, + 31.18983419336248, + 31.673980913200126, + 34.137165290188804, + 41.25744097705234, + 42.38454624270385, + 45.748087255006226, + 48.547308692942124, + 53.60387646287333, + 56.186452094747565, + 58.745344490135125, + 63.71491518347712, + 65.98514640409581, + 70.91826423463246, + 74.18819943720895, + 83.15284181550936, + 85.22271362843219, + 95.3726479405199, + 101.53224589060291, + 103.78864644236054, + 129.96184684079319, + 146.00158204629156, + 150.78866245316647, + 158.6409012759258, + 162.3398676939696, + 201.88581783217666, + 212.38437048413462, + 287.0461152953295, + 297.2884267621478 + ], + [ + -20.781821755741348, + -14.549324795129301, + -10.255255217467024, + -8.443912320739164, + -0.0036939579503762424, + 3.110976492113988, + 4.7005565489057295, + 7.499654712743147, + 12.018803454637387, + 12.826025684170368, + 15.644583044252764, + 17.72203761931948, + 17.978758924010506, + 18.4898210926115, + 22.706018026142143, + 24.655176419104986, + 30.916918822351054, + 31.579374606392285, + 34.00477013725232, + 41.32744058254502, + 42.4089115329557, + 45.87073659074215, + 48.689606138554595, + 53.392964802579876, + 56.272412294705084, + 58.913553354817466, + 63.70025488296109, + 66.0299917252765, + 71.28604500079079, + 74.58378061649233, + 84.99293605103608, + 85.84032602418308, + 95.10252260207497, + 101.60327999074582, + 104.61557755643437, + 129.98104536269662, + 147.08101151517667, + 150.89675174289366, + 159.02146143897, + 160.6567684832172, + 201.58272201600067, + 213.1349444640884, + 287.2476826381165, + 297.0486824257241 + ], + [ + -20.699238486839334, + -14.678588476450548, + -10.286671305603154, + -8.356323849497697, + -0.14035696611694676, + 3.095361059630518, + 4.823427224816143, + 7.59687595919291, + 11.97649324446549, + 12.993913700320636, + 15.696177948981209, + 17.717419029214906, + 17.97243017139118, + 18.44163647740076, + 21.94594911704642, + 24.642280283154538, + 30.6479141247982, + 31.520624076070415, + 33.87143186294994, + 41.403900647941, + 42.43231555225097, + 45.99014343422675, + 48.833701372553264, + 53.17433339145489, + 56.358481498205, + 59.07795066898991, + 63.69247903998653, + 66.06279388986822, + 71.6214859846379, + 74.97570630033402, + 86.04208181168937, + 87.35890195193984, + 94.86041411326045, + 101.71660301925374, + 105.45489775271251, + 130.0191990076525, + 148.15569699768778, + 150.9868318051329, + 159.02003298292624, + 159.4214977778366, + 201.20061294110164, + 213.88969374239588, + 287.4070831582732, + 296.847645661935 + ], + [ + -20.615682830596644, + -14.807281704022152, + -10.317043246925637, + -8.26844580938916, + -0.2759021815293488, + 3.0800645823056034, + 4.9481316560154625, + 7.696254840343291, + 11.923470125885531, + 13.159759663461582, + 15.74502999215575, + 17.736353525608465, + 17.95752157626405, + 18.395231698206555, + 21.234210498946375, + 24.626817332975637, + 30.382370976563802, + 31.486833650018973, + 33.73750111959262, + 41.4867712983315, + 42.45476855344187, + 46.10619159311249, + 48.97879997178056, + 52.94841311924799, + 56.44405536172652, + 59.23831036055143, + 63.691338074077436, + 66.08533237540912, + 71.92446791257262, + 75.36367585226157, + 86.61946006580023, + 89.43128833750481, + 94.64036065285325, + 101.87362567702635, + 106.31396528025235, + 130.0890531367944, + 149.22355064852584, + 151.06625828951138, + 157.4761293024501, + 159.81346266134108, + 200.7455272788289, + 214.64444122312233, + 287.5265437048865, + 296.6877199682135 + ], + [ + -20.53117168858355, + -14.935368819612593, + -10.34635976738456, + -8.180377148202838, + -0.4101872253470727, + 3.06513361630508, + 5.074582413653356, + 7.7978165443212655, + 11.8604062490904, + 13.323193271936983, + 15.791982314631381, + 17.776767268742812, + 17.928208980234334, + 18.350589876373448, + 20.578661471166264, + 24.608594034038976, + 30.119947527175736, + 31.47068109749964, + 33.6033385016286, + 41.57599131432051, + 42.47628037796851, + 46.218773481532146, + 49.12412468327908, + 52.71570508451566, + 56.528623972566926, + 59.39440671861344, + 63.69652554379517, + 66.09895951334059, + 72.19558095099536, + 75.74736108432809, + 87.16501777628045, + 91.57795905500737, + 94.43749406379101, + 102.07517655230447, + 107.2031812774232, + 130.20477320822235, + 150.28260955311725, + 151.14126575208638, + 156.03190484420003, + 160.2197800489468, + 200.22352930360415, + 215.39459250924813, + 287.60872051870325, + 296.57085753220537 + ], + [ + -20.44572405134871, + -15.062813046859402, + -10.374610028009815, + -8.092227384234661, + -0.5430605203794135, + 3.0506062741046054, + 5.202693577700035, + 7.901590160455022, + 11.788061350575742, + 13.483883022751606, + 15.837899012078541, + 17.83644621487467, + 17.873907243160186, + 18.30768941861506, + 19.9898092840152, + 24.587421907340662, + 29.86041081628569, + 31.467145775808923, + 33.46931551440239, + 41.67148757593254, + 42.496860554516694, + 46.32778871887232, + 49.26892412284614, + 52.47677277617258, + 56.611754589598014, + 59.546016719303395, + 63.70768436438288, + 66.10471786136635, + 72.43600258782335, + 76.12640335522342, + 87.70719819665297, + 93.71739154120795, + 94.2478623289569, + 102.32138226704443, + 108.13492077020553, + 130.37999725801157, + 151.2170089389428, + 151.3310271521982, + 154.73729053839307, + 160.63487834935168, + 199.64051357387052, + 216.1354045522324, + 287.65659120602777, + 296.4986107873251 + ], + [ + -20.359361405309613, + -15.189576060249061, + -10.401783618253765, + -8.004117943731886, + -0.6743601498087143, + 3.0365144490670883, + 5.332377819219672, + 8.007608990554258, + 11.70726412152618, + 13.641510964642297, + 15.883544660207043, + 17.775601179578377, + 17.913200750114164, + 18.266512831141473, + 19.48534489144922, + 24.563104829429108, + 29.603640681068935, + 31.472705547105775, + 33.335815470874046, + 41.77317426416428, + 42.51651836736447, + 46.43314290497995, + 49.412479806808705, + 52.232233511587665, + 56.69307831505123, + 59.69292219261873, + 63.724412133708384, + 66.10342983953861, + 72.64736059512768, + 76.50041040030356, + 88.24722835956079, + 94.06828356921191, + 95.78251439895938, + 102.61153336326268, + 109.1199681768967, + 130.62320035903548, + 151.29761649134596, + 152.36680600704307, + 153.65912995196925, + 161.058699700185, + 199.0020809483539, + 216.8621991739936, + 287.67335091765307, + 296.472240216056 + ], + [ + -20.272108242347567, + -15.315617452061636, + -10.42787055681541, + -7.916183667578723, + -0.8039125068749016, + 3.0228853254446126, + 5.463544090188835, + 8.115910863213452, + 11.618878484167393, + 13.795762581643567, + 15.929503449838364, + 17.605244718429468, + 18.00499041647724, + 18.227066933509303, + 19.091271307899873, + 24.535425949708547, + 29.34963578789945, + 31.484831931410284, + 33.2032342041135, + 41.880951760873096, + 42.535262899020125, + 46.53474657650209, + 49.55411132789022, + 51.9827496844799, + 56.77227963478515, + 59.83491179778735, + 63.74626603038734, + 66.09576632730908, + 72.83159674234922, + 76.86895280055528, + 88.78260958152896, + 93.89622617934921, + 97.70349476719859, + 102.94397049407391, + 110.16002097096622, + 130.9286376191089, + 151.38625311442908, + 152.89051020618516, + 153.39320724767188, + 161.49155740974848, + 198.31347037248597, + 217.5705321863244, + 287.6623173176271, + 296.49287438216084 + ], + [ + -20.183992703977864, + -15.440894065227651, + -10.452861298388394, + -7.828574500649301, + -0.9315307227846125, + 3.0097424277060356, + 5.5960956379075215, + 8.226538450792283, + 11.523769065711624, + 13.94632255822697, + 15.976144825970392, + 17.343265896117273, + 18.109997004567425, + 18.1893909731516, + 18.82473264804629, + 24.50413396074878, + 29.098521633831847, + 31.50166935896885, + 33.07198049518356, + 41.994705169635985, + 42.5531030516835, + 46.63251434327812, + 49.69317944643298, + 51.72902052448616, + 56.84908807835525, + 59.971782778708196, + 63.7727675196501, + 66.08229941521195, + 72.99084325296445, + 77.23156000388121, + 89.3102780048098, + 93.72971058984307, + 99.41804925810071, + 103.31600301529028, + 111.237308778781, + 131.2628044905063, + 151.4851871717915, + 152.57964636903202, + 154.3994502693103, + 161.93400600051146, + 197.5795311141172, + 218.2563264060961, + 287.626847721437, + 296.5617143951728 + ], + [ + -20.095047403613766, + -15.56535914842832, + -10.476746744470143, + -7.741457373976587, + -1.057012865269967, + 2.9971063654113537, + 5.729928146117615, + 8.339539587700733, + 11.422772305848788, + 14.092873142410031, + 16.023627255896614, + 17.00527194736063, + 18.15352512023568, + 18.226651368376665, + 18.667553963975735, + 24.468928614860047, + 28.850560310279306, + 31.521827866241185, + 32.94247613201011, + 42.1143023526256, + 42.5700475517702, + 46.7263641989647, + 49.82908654584656, + 51.47177548424395, + 56.92327146670539, + 60.103342476152505, + 63.803406988891794, + 66.06354310717489, + 73.12731913604233, + 77.58771582203315, + 89.82743063389223, + 93.56722893120663, + 100.88716238459261, + 103.72383484624847, + 112.30833605387504, + 131.55362109047667, + 151.59586147293712, + 152.8975305323106, + 155.39225586432408, + 162.38688183542618, + 196.80472373705916, + 218.91597329276397, + 287.5702704293019, + 296.68027294651245 + ], + [ + -20.00531048700508, + -15.688961273242716, + -10.499518256255106, + -7.6550182838594685, + -1.1801399075251175, + 2.9849953723873894, + 5.864927843552561, + 8.4549675866017, + 11.316675753643933, + 14.235093782774447, + 16.07192565546017, + 16.628110826002995, + 18.11947774517897, + 18.3536272830712, + 18.58034463240365, + 24.42944562849588, + 28.60616166306254, + 31.544246462347605, + 32.81515553351079, + 42.23959133800003, + 42.586104941367594, + 46.81621699642044, + 49.96127243288409, + 51.2117719132631, + 56.99463036603378, + 60.229409579288074, + 63.83764838008092, + 66.03998465762149, + 73.24324899763214, + 77.93685334242147, + 90.33179891485288, + 93.40767955105109, + 102.10420359935893, + 104.16240079136794, + 113.31169509151356, + 131.70058561634056, + 151.7189656965346, + 154.03229502901388, + 156.372467672949, + 162.85146232071125, + 195.9931415872593, + 219.54640520305395, + 287.4958309482657, + 296.8506376338608 + ], + [ + -19.914827014780588, + -15.811642929340971, + -10.521167667700398, + -7.569464562024218, + -1.3006734779810973, + 2.9734257041500998, + 6.000969427268268, + 8.572881545738483, + 11.206205885867877, + 14.37266145180864, + 16.120869041740946, + 16.240356507067155, + 18.087232459370735, + 18.489816083105772, + 18.532086411559106, + 24.385241523531757, + 28.365895159462927, + 31.568101253320236, + 32.69046489286656, + 42.37039689338634, + 42.60128356004092, + 46.901996075672436, + 50.08919579083204, + 50.94980741373911, + 57.06299347217977, + 60.34981510555031, + 63.874933861189405, + 66.01210840456588, + 73.34080356466906, + 78.27834921917206, + 90.82170280240119, + 93.25031388541198, + 103.09063615822558, + 104.6249827772904, + 114.18964310757498, + 131.6167653881125, + 151.85450943585204, + 156.0958634456266, + 157.36695152020656, + 163.33001920538547, + 195.14854713171138, + 220.14513876055014, + 287.4066526080755, + 297.07574876596124 + ], + [ + -19.823650785829752, + -15.933338678949562, + -10.541687297086224, + -7.4850273153590345, + -1.4183534172587842, + 2.96241193589739, + 6.137913627559004, + 8.693346635092082, + 11.092023589029944, + 14.50525137748738, + 15.857179255884782, + 16.170179100084866, + 18.056768771807363, + 18.505289629995673, + 18.6342925631169, + 24.335779607983074, + 28.130501205406947, + 31.592742449246682, + 32.56886081309476, + 42.50651597580029, + 42.61559151996119, + 46.98362703036745, + 50.21222809425712, + 50.68682083451283, + 57.12821372470932, + 60.464403104728774, + 63.914688568252444, + 65.98041337738476, + 73.42205913987802, + 78.61151734691884, + 91.29598540464515, + 93.0946936203929, + 103.88319436976434, + 105.1028512265701, + 114.90816596685039, + 131.27290373964766, + 152.00189527216156, + 158.1225878763887, + 159.37373765909064, + 163.8288929196192, + 194.27441942819786, + 220.71028959818148, + 287.3057101397417, + 297.35968187177167 + ], + [ + -19.731846771757457, + -16.053972700350716, + -10.561069955737707, + -7.401963990506635, + -1.5328951917999865, + 2.951967189634501, + 6.275604191511074, + 8.81643434026585, + 10.974725985980593, + 14.63253804874837, + 15.485571033662781, + 16.21950459710881, + 18.02807140243227, + 18.490784106716685, + 18.78627869589268, + 24.28041928936957, + 27.900899761982974, + 31.617650372640732, + 32.45080842588426, + 42.6290366768826, + 42.64771164434977, + 47.06103759740711, + 50.32710723821256, + 50.42643549111628, + 57.19016500311176, + 60.57303109002381, + 63.95632544466987, + 65.94542556171533, + 73.48897234264791, + 78.93560198019784, + 91.75387922753465, + 92.94065640569791, + 104.52115395109941, + 105.58613995857868, + 115.46213274090444, + 130.70048940731022, + 152.1599915756856, + 159.08848002747263, + 163.27410706909075, + 164.42846908155286, + 193.3740105988641, + 221.24055939795068, + 287.19581413029647, + 297.7079226984641 + ], + [ + -19.639494409970734, + -16.17345547288554, + -10.5793089529999, + -7.320560985304272, + -1.6439872466655188, + 2.9421033100375356, + 6.413863974580129, + 8.942222628765968, + 10.854853314857818, + 14.754196433618525, + 15.128446817399267, + 16.268449683704066, + 18.001130667011328, + 18.483629275791372, + 18.94510851907392, + 24.218412291609123, + 27.678192852438237, + 31.642404206109283, + 32.33677900042983, + 42.64162659905587, + 42.79370484039799, + 47.13415765389107, + 50.157083315432374, + 50.44581313401879, + 57.24873929563882, + 60.67557020557366, + 63.99925020144307, + 65.90770544731981, + 73.54336642633353, + 79.24977044900446, + 92.19484124073725, + 92.78828860490636, + 105.03762208476482, + 106.06647091520976, + 115.86740152009702, + 129.96107219997603, + 152.32720493146627, + 159.97383470273692, + 164.78674948056317, + 168.30855477136242, + 192.4504113241836, + 221.7351974269574, + 287.07960389658246, + 298.1276146513655 + ], + [ + -19.546692120764508, + -16.291679238153566, + -10.596398096978959, + -7.241136183033607, + -1.7512884255465426, + 2.9328310027239475, + 6.552489686636751, + 9.070795979892354, + 10.732899896262738, + 14.78674885311509, + 14.869903388546687, + 16.316595972937584, + 17.97594058935763, + 18.481014904203647, + 19.110195353636286, + 24.148911019449244, + 27.46365603886932, + 31.66665943769159, + 32.227247062595026, + 42.653368535768905, + 42.944163171029174, + 47.20291930533042, + 49.895444674485674, + 50.55213167721025, + 57.30384425866352, + 60.77190514623637, + 64.04286641828683, + 65.86785133166396, + 73.58692585119576, + 79.55310574678782, + 92.61838593174635, + 92.6379036922738, + 105.45665563652504, + 106.5384048554929, + 116.14958047511149, + 129.11766369113914, + 152.50155218221687, + 160.81951767659595, + 165.34900991169118, + 173.84949626022382, + 191.50663189320926, + 222.1939402906719, + 286.95954621171967, + 298.62774124729174 + ], + [ + -19.453563595945436, + -16.408511689948497, + -10.612331690983583, + -7.1640412242679, + -1.8544256466771571, + 2.924159944577095, + 6.691244609998859, + 9.202245179783571, + 10.609328737318515, + 14.46045637120692, + 14.979339259388047, + 16.3635191559221, + 17.952497309862267, + 18.481250720459688, + 19.281001132953698, + 24.070995885012923, + 27.25871261191024, + 31.690131347697285, + 32.12268705644148, + 42.66426938682043, + 43.0986854301639, + 47.267257049338134, + 49.635176537463984, + 50.65293586980166, + 57.35540110416134, + 60.861933851061536, + 64.08658080008522, + 65.82649877413174, + 73.6211963782747, + 79.84459944136711, + 92.49002493369966, + 93.02393742650084, + 105.79563782244333, + 106.9978482820324, + 116.33579347320443, + 128.22218972275954, + 152.6807321086383, + 161.62574397868468, + 165.91876977613921, + 179.94888705466548, + 190.54574794355966, + 222.61693524348038, + 286.83793746353774, + 299.2191734097501 + ], + [ + -19.360266692279744, + -16.523787059750788, + -10.62710452593365, + -7.0896632533837645, + -1.9529921004899682, + 2.9160988730106134, + 6.829848239173381, + 9.336666713953315, + 10.484589981101763, + 14.149079755166897, + 15.082189685000891, + 16.408801203726586, + 17.930798128402042, + 18.483268006186513, + 19.457006696834146, + 23.983729002861697, + 27.064884010757154, + 31.712582760717613, + 32.02356959048407, + 42.674335673904984, + 43.25677998756158, + 47.327107999561036, + 49.37763811323452, + 50.74747695451882, + 57.40334276715992, + 60.94556699672966, + 64.12980859564381, + 65.78431657205344, + 73.6475885616676, + 80.1231455912398, + 92.34537092075134, + 93.41071369873151, + 106.06842569439952, + 107.44028949994788, + 116.45050065783198, + 127.31371723210023, + 152.8621967222669, + 162.38831738525232, + 166.51219926867455, + 186.44875776396273, + 189.57211940497422, + 223.0046539567287, + 286.7169071741981, + 299.9144562665071 + ], + [ + -19.267006217008486, + -16.637293310652932, + -10.640711869280317, + -7.0184257837194854, + -2.046546327403209, + 2.9086556591323487, + 6.9679611944773, + 9.474161464520179, + 10.359144261955535, + 13.851912625058384, + 15.178147616431225, + 16.45203917974112, + 17.910840991130275, + 18.48636165544003, + 19.637681089208026, + 23.88623995073782, + 26.88371230567758, + 31.733814855073785, + 31.93035732071386, + 42.68357351457641, + 43.41783426426829, + 47.3824121553929, + 49.12387943223289, + 50.835422898466334, + 57.44761231531137, + 61.02272732110451, + 64.17197917486446, + 65.74199964331581, + 73.66738307474748, + 80.38753664346213, + 92.20484236516084, + 93.77764899605883, + 106.28669649985419, + 107.8607377903735, + 116.51409013392976, + 126.42060529795324, + 153.04322206117624, + 163.10182353253867, + 167.13489407312198, + 188.58113810133713, + 193.20804223649608, + 223.35780574616177, + 286.5984213400991, + 300.727126924093 + ], + [ + -19.17405262072749, + -16.7487534245588, + -10.653149451153073, + -6.950788222801544, + -2.1346126361912474, + 2.901837368399428, + 7.105162778027381, + 9.614832183534302, + 10.233493211520901, + 13.568166578918202, + 15.266915559661749, + 16.492851533759108, + 17.89262422749247, + 18.490049673353603, + 19.82244681335849, + 23.777844142473484, + 26.716656783289114, + 31.753660195621006, + 31.84350053206376, + 42.691988599204585, + 43.581071144355214, + 47.43311270386157, + 48.87502367617377, + 50.916517531164274, + 57.48816157021549, + 61.09334880990423, + 64.21254174450934, + 65.70025923867796, + 73.68173676718023, + 80.63646263641868, + 92.0695083217043, + 94.12335559006111, + 106.46026115007582, + 108.25439829277416, + 116.54284887175065, + 125.56324210882285, + 153.220978251842, + 163.76083384213337, + 167.79015887198543, + 187.58795318488708, + 200.0605855618921, + 223.6772640364434, + 286.48428465917993, + 301.6702481377367 + ], + [ + -19.081769783812273, + -16.85779759662096, + -10.664413448547474, + -6.887243500618835, + -2.216683421400414, + 2.8956503113842524, + 7.240916903945626, + 9.758778747621706, + 10.108221144187922, + 13.297047606035534, + 15.348208038960472, + 16.530882564142406, + 17.876146417966616, + 18.493992875421352, + 20.010636112894463, + 23.658186321445022, + 26.564976655194876, + 31.763432490076926, + 31.771977405458426, + 42.699586171109935, + 43.74548616093863, + 47.47915634121628, + 48.632369436069055, + 50.99054021647084, + 57.524949915614755, + 61.15737578130864, + 64.25097116019606, + 65.65981096058518, + 73.69168871538042, + 80.86851540024067, + 91.94058972599096, + 94.44612286407336, + 106.5972636443605, + 108.61716149185433, + 116.54944482228555, + 124.75634247447732, + 153.39259845446904, + 164.36082053921132, + 168.4791810146116, + 186.59007952611375, + 206.84999306179017, + 223.96403891564697, + 286.376141337667, + 302.753747442855 + ], + [ + -18.990656945446087, + -16.963921288016618, + -10.674500468381147, + -6.8283131739237986, + -2.2922240078968246, + 2.8901000865661555, + 7.374519404253278, + 9.906089223987639, + 9.984054782745568, + 13.037804461783308, + 15.421754262179181, + 16.565805563694788, + 17.861406328197138, + 18.497946967433855, + 20.20142968767086, + 23.52739487158449, + 26.429622466056834, + 31.69056464517292, + 31.788647061453055, + 42.70637100988821, + 43.90975649321093, + 47.520493602744615, + 48.397492027219236, + 51.05729574290274, + 57.55794327160706, + 61.214761904077356, + 64.28677375898222, + 65.62136112777144, + 73.69816580556612, + 81.08219977220793, + 91.81943788146577, + 94.74395011705913, + 106.70443928690295, + 108.9457884218349, + 116.54349874509701, + 124.0106757228527, + 153.5552461574151, + 164.89874132567112, + 169.20054144121397, + 185.59278803385757, + 213.40618452794394, + 224.21944001181302, + 286.2754746942181, + 303.9801634016022 + ], + [ + -18.901412671552137, + -17.06642124091681, + -10.683407530207889, + -6.774539375003005, + -2.3606806548726724, + 2.885191616547951, + 7.505015227470035, + 9.861952435846284, + 10.056822596362522, + 12.789767635022958, + 15.487300950347368, + 16.597325024935977, + 17.848402876535665, + 18.501732841238926, + 20.39376176361052, + 23.386235219718657, + 26.311163777315734, + 31.625281782846848, + 31.803568515147195, + 42.7123474177806, + 44.07210941616491, + 47.5570791905296, + 48.17237979239994, + 51.116610674003375, + 57.58711321708211, + 61.26546918458188, + 64.31949309159137, + 65.58559209113059, + 73.70198759271999, + 81.27595400855387, + 91.70750542580099, + 95.0146086719116, + 106.7873664715002, + 109.23791551776392, + 116.53207945781071, + 123.33433407699452, + 153.7061801393916, + 165.37310360811037, + 169.94989276364342, + 184.6018238991371, + 219.55759183060601, + 224.4468088162991, + 286.1836061473997, + 305.3387005541798 + ], + [ + -18.815032638801274, + -17.16429767864257, + -10.691132049293262, + -6.726473082061883, + -2.4214922426876297, + 2.880929178728535, + 7.631067103348305, + 9.743241023187485, + 10.210973707543271, + 12.552396084190192, + 15.544615273357266, + 16.625178173670243, + 17.837135118337855, + 18.505217547580468, + 20.586159428351333, + 23.236272678558315, + 26.209774710198857, + 31.567937223687224, + 31.816657422177496, + 42.71751920884884, + 44.23013534033409, + 47.58887228999244, + 47.95962438467166, + 51.16833182134485, + 57.61243624497126, + 61.30946695703352, + 64.34871537766904, + 65.55314716960694, + 73.7038703260292, + 81.44818141031496, + 91.60630752052053, + 95.25572837026453, + 106.85066850757715, + 109.49197200751851, + 116.52008007860815, + 122.73367059940355, + 153.84281628674057, + 165.783567569131, + 170.71972768500171, + 183.62469019045034, + 224.55899200763702, + 225.23309469563446, + 286.1016943255203, + 306.7982899544361 + ], + [ + -18.732956548632092, + -17.256107377224442, + -10.69767182064815, + -6.684658459901689, + -2.474105894203548, + 2.8773164311807875, + 7.750748331341862, + 9.629828283204562, + 10.36839679249203, + 12.325359661194044, + 15.593487813504082, + 16.64913602195233, + 17.82760223862671, + 18.508301768314784, + 20.7764485828091, + 23.080107140493595, + 26.125282493701324, + 31.51884818622154, + 31.82784382117467, + 42.72188970063355, + 44.380534313479195, + 47.615836867159665, + 47.76267710554685, + 51.21232567192327, + 57.63389313684628, + 61.3467309093568, + 64.37407445142846, + 65.5246159226641, + 73.7044301341945, + 81.59729449096042, + 91.51737173954608, + 95.46490290975035, + 106.89816061063475, + 109.70705366474475, + 116.51049212048379, + 122.2139952949444, + 153.96278535528336, + 166.13037803207317, + 171.4986599754067, + 182.67206170170962, + 224.7834071889216, + 230.0685701947727, + 286.03073497692657, + 308.3016410782644 + ], + [ + -18.65727596425592, + -17.339755815546884, + -10.70302500449768, + -6.64961348631343, + -2.5179963153856715, + 2.8743564342868937, + 7.861228381442808, + 9.524521478612575, + 10.528620898148192, + 12.10872639137825, + 15.633735461259976, + 16.669004076844764, + 17.819803548892523, + 18.510911388126477, + 20.961178197364237, + 22.921841723691966, + 26.057265179145276, + 31.478291431962464, + 31.83707064479272, + 42.72546170793542, + 44.518809817924364, + 47.58615767699717, + 47.637941939722445, + 51.248478335488585, + 57.65146844508649, + 61.37724217459845, + 64.39525593145724, + 65.50052048496805, + 73.70418543237051, + 81.72177162817292, + 91.44217655314743, + 95.63980756968645, + 106.93295227401751, + 109.88277364468918, + 116.50462993923807, + 121.78006539287512, + 154.06398570590437, + 166.4139041533155, + 172.2692554607637, + 181.76048998868487, + 224.91870449481587, + 234.16011053846117, + 285.9715621106847, + 309.7634803569705 + ], + [ + -18.590982144431113, + -17.41224933043476, + -10.707190113549851, + -6.621807728807538, + -2.552687990650392, + 2.8720516685313817, + 7.958351539357703, + 9.431452376387231, + 10.690336876712319, + 11.903476377086335, + 15.665204135191615, + 16.684622803671527, + 17.81373848588576, + 18.51299174371179, + 21.13444021733468, + 22.768133614841318, + 26.005172916468354, + 31.44649931435052, + 31.84429257600083, + 42.7282375383446, + 44.63900256621787, + 47.43612275309592, + 47.65516181598855, + 51.27669578925478, + 57.66515007238678, + 61.40098651469546, + 64.41200037196361, + 65.4813036266341, + 73.70355865484468, + 81.82022402753191, + 91.3820804487776, + 95.77832175386472, + 106.95751711169784, + 110.01910392176453, + 116.50238651602028, + 121.4363549350694, + 154.1446300259205, + 166.63439898744753, + 173.0028522859427, + 180.91788288906147, + 225.02217316316734, + 237.380964775054, + 285.92485044645315, + 311.0761391002001 + ], + [ + -18.538120018910295, + -17.469541131902695, + -10.71016600232361, + -6.601638882029638, + -2.577778622641112, + 2.8704040487412588, + 8.036267170930179, + 9.356449936497857, + 10.849662900706447, + 11.713236253066276, + 15.687771212301335, + 16.69586791659348, + 17.809406611320714, + 18.514503686500753, + 21.285501696306742, + 22.63043643224806, + 25.968446894756507, + 31.423656350219375, + 31.84947518554182, + 42.73021898915682, + 44.73373081590998, + 47.32002760128509, + 47.66747629683376, + 51.296904271170426, + 57.67492893987686, + 61.41795361990641, + 64.42410526447171, + 65.46731903974785, + 73.70287743720964, + 81.89146821127606, + 91.33824637104529, + 95.87864770678632, + 106.97373991833265, + 110.11621976165854, + 116.5026149965432, + 121.18705598306826, + 154.20328508594037, + 166.79194756423848, + 173.64899887962284, + 180.1941667148606, + 225.09566749791912, + 239.69245061075242, + 285.8911188734751, + 312.12351981443976 + ], + [ + -18.503480895095375, + -17.506838589144422, + -10.711951858714897, + -6.589410349378124, + -2.59296153291417, + 2.8694149349779674, + 8.087692490466949, + 9.306779832705486, + 10.992633889532206, + 11.551789339023122, + 15.701347557801284, + 16.70265055100956, + 17.806807611947733, + 18.51542092541803, + 21.395192253424394, + 22.528508917891337, + 25.946618058312463, + 31.409896423249414, + 31.852594303785178, + 42.73140734534937, + 44.795023076087354, + 47.2458950209698, + 47.67487083675809, + 51.30905070774896, + 57.68079873662693, + 61.428136543354434, + 64.43142595908922, + 65.45882409182147, + 73.70237537484506, + 81.93459670310394, + 91.31156872834127, + 95.93941612045543, + 106.98294779627511, + 110.1743600529864, + 116.5036963794317, + 121.0357829082325, + 154.2389036678489, + 166.88651978693562, + 174.12031028679118, + 179.6764148163948, + 225.13965406488649, + 241.0805187312354, + 285.8707343213548, + 312.80093198051065 + ], + [ + -18.491341566158457, + -17.51986411709244, + -10.712547197910318, + -6.585312529670163, + -2.598044362660051, + 2.8690851402273014, + 8.105808498808438, + 9.289250145615664, + 11.063775486977722, + 11.474501175957467, + 15.705879055146015, + 16.704917358249755, + 17.805941299722928, + 18.515728319885987, + 21.436770720291914, + 22.48947412631196, + 25.939377584569137, + 31.40530071323246, + 31.853635593832472, + 42.73180337834407, + 44.81631999291211, + 47.220314659133685, + 47.67733666102197, + 51.31310308667495, + 57.68275574484004, + 61.43153128603408, + 64.4338758052404, + 65.45597499104305, + 73.70219247246349, + 81.94903795599141, + 91.30261185810261, + 95.95976957892118, + 106.98592980168796, + 110.19371613420344, + 116.50423926402738, + 120.98505464657539, + 154.2508479318096, + 166.91805345713695, + 174.29897206189713, + 179.4822878853131, + 225.15430126089515, + 241.5430558596176, + 285.86391529111376, + 313.0354496613744 + ], + [ + -18.491341566158457, + -17.51986411709244, + -10.712547197910318, + -6.585312529670163, + -2.598044362660051, + 2.8690851402273014, + 8.105808498808438, + 9.289250145615664, + 11.063775486977722, + 11.474501175957467, + 15.705879055146015, + 16.704917358249755, + 17.805941299722928, + 18.515728319885987, + 21.436770720291914, + 22.48947412631196, + 25.939377584569137, + 31.40530071323246, + 31.853635593832472, + 42.73180337834407, + 44.81631999291211, + 47.220314659133685, + 47.67733666102197, + 51.31310308667495, + 57.68275574484004, + 61.43153128603408, + 64.4338758052404, + 65.45597499104305, + 73.70219247246349, + 81.94903795599141, + 91.30261185810261, + 95.95976957892118, + 106.98592980168796, + 110.19371613420344, + 116.50423926402738, + 120.98505464657539, + 154.2508479318096, + 166.91805345713695, + 174.29897206189713, + 179.4822878853131, + 225.15430126089515, + 241.5430558596176, + 285.86391529111376, + 313.0354496613744 + ], + [ + -18.491170384132506, + -17.519691890110042, + -10.713460051840984, + -6.585069247785906, + -2.598096827239268, + 2.8703490632025743, + 8.106060094184642, + 9.289268673933769, + 11.064026330217088, + 11.47391929102777, + 15.703454986195581, + 16.707502849611785, + 17.78338189471127, + 18.539607946946212, + 21.436952217017605, + 22.488238984429387, + 25.937302728112936, + 31.407514316094954, + 31.853448781059424, + 42.73137092984995, + 44.816714565140465, + 47.220595018222966, + 47.677012329933866, + 51.30349644453628, + 57.677173586087335, + 61.43719505513395, + 64.43109536636017, + 65.44044715556161, + 73.7174728064418, + 81.9529908266182, + 91.30361040133728, + 95.93032530495188, + 106.95487505949005, + 110.07321096934166, + 116.52549684041962, + 121.1239929813211, + 154.25737578974162, + 166.93866924052017, + 174.30581259272978, + 179.5446183305077, + 225.15725335648708, + 241.54079466453706, + 285.8630128983656, + 313.0235974373732 + ], + [ + -18.49065683508795, + -17.51917523780881, + -10.716197486039729, + -6.584339405022307, + -2.59825439892285, + 2.8741396349199455, + 8.10681487284133, + 9.289324417019762, + 11.064778887938264, + 11.472172116592864, + 15.696257320381497, + 16.71518492131766, + 17.72304148717882, + 18.60391044886548, + 21.43749669786415, + 22.48453516790791, + 25.931084862982715, + 31.414143209500832, + 31.852888242197317, + 42.73007694501272, + 44.81789679344133, + 47.22143608783074, + 47.67603778092026, + 51.2746777435917, + 57.66052933477811, + 61.454084440203445, + 64.42276004508383, + 65.39424457986622, + 73.76292852614981, + 81.9648426925494, + 91.30660586213857, + 95.84210951812696, + 106.86120353482741, + 109.72920211574159, + 116.59146772823566, + 121.52266972730183, + 154.2769396913906, + 166.9990325160799, + 174.3263314011162, + 179.73171316431404, + 225.16615000896024, + 241.5339788840743, + 285.86036399328543, + 312.98811540713154 + ], + [ + -18.48980091015393, + -17.51831424620285, + -10.72075612301883, + -6.5831230100571885, + -2.5985176115578725, + 2.8804532690816513, + 8.108072811922375, + 9.289417852866551, + 11.066033243880844, + 11.469255117125902, + 15.684499113613509, + 16.727750933166462, + 17.638720016634903, + 18.6948401508402, + 21.43840413529883, + 22.478367494188852, + 25.920743887161176, + 31.425151835051135, + 31.851953676494084, + 42.727931482504516, + 44.819862150102715, + 47.22283784362758, + 47.67440834965665, + 51.226651367065585, + 57.633120800310415, + 61.48190253672393, + 64.40888503927992, + 65.31847210365322, + 73.8374440294026, + 81.98457334220136, + 91.31159773291505, + 95.69543500654829, + 106.70379932510748, + 109.20448406629683, + 116.70771245597743, + 122.13696717559775, + 154.30948063862817, + 167.0949179068209, + 174.36051953717865, + 180.04374937460062, + 225.18111127422634, + 241.52251276262356, + 285.85614341842887, + 312.9292264743115 + ], + [ + -18.488602594645332, + -17.51710905890378, + -10.727130351215344, + -6.581420077388402, + -2.5988873549162794, + 2.889284006219583, + 8.109833871863412, + 9.289549790019169, + 11.067789536648764, + 11.46516081187008, + 15.66850355256706, + 16.744878390456794, + 17.541070203791495, + 18.801751372915962, + 21.439674484966073, + 22.46974395936649, + 25.906312259661537, + 31.44048154085395, + 31.85064458560069, + 42.724951229447285, + 44.82260287550501, + 47.224800240520075, + 47.67211627195436, + 51.15942698241398, + 57.59541652363951, + 61.52018230095315, + 64.3894846431666, + 65.21485629315677, + 73.93928419922022, + 82.0121491770699, + 91.31858516472599, + 95.49071028700097, + 106.48196343818945, + 108.54842078435058, + 116.88108490341197, + 122.91638097852888, + 154.3549003618842, + 167.21998783117579, + 174.40836014167806, + 180.48061364716332, + 225.20233376933794, + 241.50623952333942, + 285.85064263471907, + 312.84729876174885 + ], + [ + -18.487061868210446, + -17.515559877505364, + -10.735312351147995, + -6.579230627387595, + -2.5993648747349156, + 2.900623540018798, + 8.112097994194222, + 9.289721385060835, + 11.070047958025281, + 11.459878893983932, + 15.648665955736883, + 16.766172941632025, + 17.43636016226421, + 18.91838571643697, + 21.44130768799972, + 22.458675689223593, + 25.88783398307349, + 31.46005145982191, + 31.84896027790233, + 42.72115938614328, + 44.82610764013083, + 47.227323205644, + 47.66915069793402, + 51.073023105777374, + 57.548019576246794, + 61.56832273461964, + 64.36454744127353, + 65.08561205300859, + 74.06625014069475, + 82.04752334265528, + 91.32756696286538, + 95.22831792271134, + 106.1965216687746, + 107.80438247468878, + 117.11793798560872, + 123.81698826750306, + 154.41306141375276, + 167.36668204896654, + 174.46982559189073, + 181.04140992108984, + 225.23008539300577, + 241.48494562664493, + 285.8442697301417, + 312.7428406063359 + ], + [ + -18.485178705034425, + -17.51366696212506, + -10.74529213161494, + -6.576554686373004, + -2.5999517727666, + 2.914461253738371, + 8.114865098472807, + 9.289934166401141, + 11.07280875008308, + 11.453396400241775, + 15.625415335206528, + 16.791206814707746, + 17.32808690016453, + 19.041258417480954, + 21.443303674280436, + 22.445176871681888, + 25.865363253480645, + 31.483759663130552, + 31.846899874539012, + 42.7165855061197, + 44.830361033249716, + 47.23040662811957, + 47.66549771112055, + 50.967472132493405, + 57.49162607176743, + 61.62563035051025, + 64.33397280279303, + 64.93333347833726, + 74.2158484247763, + 82.09063591121323, + 91.33854158070157, + 94.90852429567344, + 105.85014564858567, + 107.00664010239026, + 117.42289617620888, + 124.80506788268912, + 154.48378730581234, + 167.52717274278848, + 174.54487360008935, + 181.7239781167087, + 225.2646978040327, + 241.45836687473545, + 285.8375492820333, + 312.6164936946837 + ], + [ + -18.48295307409666, + -17.51143063210985, + -10.757057575511505, + -6.573392286704094, + -2.600650006841079, + 2.9307842663073607, + 8.118135078364514, + 9.290190063696484, + 11.076072200422267, + 11.445697934171239, + 15.599182259628359, + 16.819550951998963, + 17.218260578525157, + 19.168373898122795, + 21.44566236666329, + 22.429264671617236, + 25.838962844129362, + 31.511484520596138, + 31.8444623170602, + 42.71126529285848, + 44.835342833920365, + 47.234050345011156, + 47.66114035185468, + 50.84282687046767, + 57.426984206072184, + 61.691360103244826, + 64.29737882877799, + 64.76102596454761, + 74.38544669510883, + 82.14141411579836, + 91.35150711180314, + 94.53147194524442, + 105.44481714858573, + 106.18424951979925, + 117.79820606570654, + 125.85590623626344, + 154.56686269409116, + 167.6941924656191, + 174.63344228696673, + 182.52455945754343, + 225.30655653261698, + 241.42619642367242, + 285.83112192564033, + 312.46902447552213 + ], + [ + -18.480384939478395, + -17.508851266908504, + -10.770594494753752, + -6.569743466895634, + -2.601461890929656, + 2.949577487565279, + 8.121907796881702, + 9.290491442067783, + 11.079838634438484, + 11.436765946316, + 15.570376038899273, + 16.850797822689703, + 17.1081037000517, + 19.298526339420775, + 21.448383686206217, + 22.410959129241075, + 25.808702298089777, + 31.543086190223704, + 31.841646376654257, + 42.70524035486707, + 44.84102699702297, + 47.23825412252751, + 47.65605864416655, + 50.69916861960068, + 57.354858184492585, + 61.76475142664566, + 64.25333867019964, + 64.57273970573418, + 74.57239861735535, + 82.19977263492054, + 91.36646128036655, + 94.09728919950086, + 104.96437819507042, + 105.38034287225146, + 118.24366521206234, + 126.95144292373475, + 154.6620336197632, + 167.86160012992892, + 174.73544423989313, + 183.43769460038115, + 225.3560885477431, + 241.38809490475546, + 285.8257434463261, + 312.3013140263648 + ], + [ + -18.477474260714608, + -17.50592930711949, + -10.785886693690554, + -6.565608271752136, + -2.6023900952091616, + 2.970823682026663, + 8.126183080799999, + 9.290841140138495, + 11.08410840280279, + 11.426581076250962, + 15.53937115008145, + 16.884574993714, + 16.998407474698652, + 19.430943026801447, + 21.45146755843262, + 22.390283043430763, + 25.774656008335928, + 31.578408155269777, + 31.83845066488618, + 42.69855792100408, + 44.84738025356938, + 47.24301763080964, + 47.65022962526408, + 50.53661684815989, + 57.2759994643144, + 61.84505694974285, + 64.19472658361235, + 64.37812947049311, + 74.77413194266369, + 82.26561392702664, + 91.38340143000717, + 93.60632342714707, + 104.3134705594328, + 104.71424876026154, + 118.7569891854561, + 128.07819945216704, + 154.76900781355948, + 168.02463976965333, + 174.85075956623584, + 184.4563660607368, + 225.41374707276697, + 241.34370281474338, + 285.8222831800254, + 312.11434658077985 + ], + [ + -18.474220993189714, + -17.50266525572018, + -10.802916040310146, + -6.560986752520606, + -2.6034376461180666, + 2.99450354045445, + 8.130960714270939, + 9.291242510794154, + 11.088881861062797, + 11.41512256220853, + 15.506501112958805, + 16.889716085301654, + 16.92055125058174, + 19.56509974181964, + 21.454913920669114, + 22.367261841572805, + 25.736901261597897, + 31.617278728418412, + 31.834873645841494, + 42.69127051813093, + 44.85436017407799, + 47.24834040938051, + 47.64362737672406, + 50.35534053102787, + 57.19112597668941, + 61.93156322740319, + 64.07790829069997, + 64.22320427395785, + 74.98820152333778, + 82.33882861388066, + 91.40232451093419, + 93.05946788752632, + 103.50935885040218, + 104.18994362097506, + 119.33438089762042, + 129.2257789978306, + 154.88745507368202, + 168.17993068630093, + 174.97922797843177, + 185.57232860979047, + 225.479993386936, + 241.29265540537793, + 285.82172148115706, + 311.90919695612297 + ], + [ + -18.470625088566628, + -17.499059679488752, + -10.821662544477023, + -6.555878967062757, + -2.6046079263970805, + 3.0205957584656455, + 8.136240431651483, + 9.291699463475117, + 11.094159335944594, + 11.40236872619052, + 15.472057541867619, + 16.782425568664046, + 16.958437541544292, + 19.700621482405044, + 21.45872273050689, + 22.34192343759727, + 25.695516315966078, + 31.659512448119365, + 31.830913649590386, + 42.68343561326147, + 44.86191246558189, + 47.254221817899456, + 47.636223056500825, + 50.15557124630021, + 57.100908741408475, + 62.023604072347894, + 63.87084120867854, + 64.14219519807602, + 75.21231347901909, + 82.41929591183396, + 91.42322706557043, + 92.45851602670785, + 102.67569729564454, + 103.70213171636979, + 119.9710972245816, + 130.38585587939642, + 155.01700772725582, + 168.32527672126406, + 175.12063999854314, + 186.77653594530753, + 225.55527531500928, + 241.2346003762516, + 285.82514600040156, + 311.6870171450439 + ], + [ + -18.466686495249615, + -17.495113210625114, + -10.842104442375609, + -6.5502849800438625, + -2.6059046751057235, + 3.049077121327393, + 8.142021909571142, + 9.292216506745715, + 11.09994106842768, + 11.388297546294293, + 15.43629233992257, + 16.676839098931662, + 16.997984778997488, + 19.837226722923734, + 21.462893975441208, + 22.314298079971163, + 25.65057857270349, + 31.70491130057594, + 31.826568886850097, + 42.67511522238982, + 44.86996714838905, + 47.26066096196703, + 47.62798493096296, + 49.93761819642191, + 57.00596461191181, + 62.120567751410576, + 63.63262206560853, + 64.07799636514333, + 75.44432800534625, + 82.50688410986633, + 91.44610521266429, + 91.80645456224664, + 101.84570551098794, + 103.23282472196783, + 120.66190133446885, + 131.55151405020118, + 155.15726118717487, + 168.45939021760506, + 175.27472745496092, + 188.05957381067745, + 225.64000207729083, + 241.16921864699475, + 285.83374650728626, + 311.44902235614455 + ], + [ + -18.462405158870602, + -17.490826548586266, + -10.864218286301995, + -6.54420486313939, + -2.6073319876042564, + 3.0799225940623174, + 8.148304758258096, + 9.292798789848129, + 11.106227114484891, + 11.372887336138376, + 15.399421511166532, + 16.57319909566696, + 17.038980022623228, + 19.974694790817527, + 21.46742768374031, + 22.28441819145988, + 25.602162891418242, + 31.753265710955205, + 31.821837464727597, + 42.666375488102496, + 44.87843305548332, + 47.26765657315332, + 47.61887840633198, + 49.701885466269864, + 56.906853675173494, + 62.22189952163502, + 63.3813777556928, + 64.01427630553901, + 75.68224773476274, + 82.60145109321093, + 91.10761167140186, + 91.47095462995769, + 101.02890965552058, + 102.78448172980745, + 121.40137262054334, + 132.71681902873442, + 155.3077746163549, + 168.58160564819238, + 175.4411534816848, + 189.41203585513173, + 225.734515104006, + 241.09624858911704, + 285.8488079959148, + 311.1964768034001 + ], + [ + -18.45778102279685, + -17.48620046214277, + -10.887979038913647, + -6.5376386952568115, + -2.6088943154901165, + 3.1131054159502187, + 8.155088512144921, + 9.293452141947036, + 11.113017164375462, + 11.356117569835234, + 15.36162957906168, + 16.47170648559198, + 17.081242055877855, + 20.112846031447916, + 21.472323936613858, + 22.252318202478737, + 25.550340085859254, + 31.804355257909076, + 31.816717403400556, + 42.65728622791965, + 44.88718975625766, + 47.27520679796658, + 47.60886605907792, + 49.44889212507193, + 56.80407991423056, + 62.327100898738635, + 63.121403556549915, + 63.94835009176615, + 75.92419716304961, + 82.70284491129509, + 90.36761295250444, + 91.49777053547098, + 100.22992588805447, + 102.36132941723065, + 122.18409287771716, + 133.87654296507273, + 155.4680717122773, + 168.6916275835845, + 175.619502381965, + 190.82481097564533, + 225.83905445211303, + 241.01551412007169, + 285.8717018337049, + 310.93067955421134 + ], + [ + -18.45281402865311, + -17.481235791674244, + -10.913360171036544, + -6.5305865627724184, + -2.6105964664748145, + 3.1485971985008536, + 8.162372619772022, + 9.294183107790612, + 11.120310194320762, + 11.33796993617498, + 15.323074007080965, + 16.37253255262571, + 17.124616960078548, + 20.251529328956554, + 21.477582881737632, + 22.218034379799363, + 25.49517562615932, + 31.811206653596777, + 31.85794907533355, + 42.64792045506255, + 44.89607541616646, + 47.28330878812164, + 47.5979076651816, + 49.17929636239367, + 56.69809397009253, + 62.43572682151308, + 62.854745224042645, + 63.87961175260809, + 76.16839712901, + 82.81090438866755, + 89.59315254473486, + 91.52654766746392, + 99.45171905145816, + 101.96642837579783, + 123.00474284976089, + 135.02599012136278, + 155.637641624461, + 168.7893312045104, + 175.8092697505422, + 192.2892772155822, + 225.9537203996317, + 240.92695703028514, + 285.9038747411027, + 310.65295074610395 + ], + [ + -18.44750411685217, + -17.475933451714184, + -10.940333762129379, + -6.523048559781857, + -2.6124436041893966, + 3.1863680259696237, + 8.170156433005683, + 9.294998978571339, + 11.128103742375037, + 11.318429825436477, + 15.283889300784493, + 16.275826351052718, + 17.16897400673112, + 20.390614012978865, + 21.483204748204056, + 22.181604652330382, + 25.43672856315582, + 31.805303114713976, + 31.913805913850897, + 42.63835387301325, + 44.90486804960141, + 47.29195780568794, + 47.58596022847125, + 48.89392602332886, + 56.58929711007853, + 62.54738160545701, + 62.582794241025105, + 63.80795505456775, + 76.41313702890265, + 82.92545977751429, + 88.79163558872148, + 91.55728026315367, + 98.69648658476821, + 101.60126995084825, + 123.85814171922672, + 136.1608886663534, + 155.81594001833395, + 168.87461628363195, + 176.00985340701504, + 193.79741318742273, + 226.07842989144146, + 240.83067400895217, + 285.9468354433862, + 310.364618481693 + ], + [ + -18.44185122713066, + -17.47029443376121, + -10.968870602518113, + -6.515024788362121, + -2.6144412478995434, + 3.2263865575003914, + 8.178439195585344, + 9.295907816847299, + 11.136392242508267, + 11.297488807424928, + 15.244190650651497, + 16.1817193733947, + 17.21420200882796, + 20.52998446690888, + 21.489189862955133, + 22.143068435560576, + 25.37505068180433, + 31.799004653413828, + 31.97167384117929, + 42.62866434481536, + 44.9132556719554, + 47.30114495641998, + 47.57297800869887, + 48.593820420000405, + 56.47804576204779, + 62.306641033133275, + 62.661714326564315, + 63.73343622212754, + 76.65674647466564, + 83.04633345031222, + 87.97077121748805, + 91.58996203625723, + 97.96600429543012, + 101.26597576337491, + 124.73925445373489, + 137.27732654921797, + 156.002390298085, + 168.94730698117777, + 176.2205457216242, + 195.3418446274364, + 226.2128675376304, + 240.72695867392827, + 286.00213889185517, + 310.06700669704446 + ], + [ + -18.43585529908377, + -17.464319809372082, + -10.998940296540518, + -6.506515358845466, + -2.6165952721161756, + 3.268620130004425, + 8.187220031007907, + 9.29691847449164, + 11.14516261454171, + 11.27514989283026, + 15.204077080186183, + 16.090328470755146, + 17.260206166607645, + 20.66953645007447, + 21.495538668745866, + 22.102466456147933, + 25.31018588407951, + 31.792309122522305, + 32.03128956538948, + 42.61893133756299, + 44.92078710455986, + 47.310850147403706, + 47.55891255054081, + 48.28029455521261, + 56.36465618266315, + 62.02719092397041, + 62.7784140675034, + 63.65617292853396, + 76.89756746884545, + 83.17334063108983, + 87.13818884733547, + 91.62458615342365, + 97.26180153385516, + 100.95964991807023, + 125.6431838487537, + 138.3717166691388, + 156.19638499941448, + 169.00708727365827, + 176.44052803640818, + 196.91584430925303, + 226.3564311176255, + 240.61634887320832, + 286.07136803015965, + 309.7614242879415 + ], + [ + -18.42951627269476, + -17.45801073355597, + -11.03051136577322, + -6.4975203901011165, + -2.6189119060792523, + 3.3130348609154985, + 8.196497929756262, + 9.298040602764056, + 11.154379914954092, + 11.251442759595761, + 15.163634120071265, + 16.001757635818187, + 17.306905386993947, + 20.809174536764132, + 21.502251743648024, + 22.059840577977315, + 25.242169796890657, + 31.785214380054214, + 32.09237736807061, + 42.60923534194334, + 44.926787673932786, + 47.3210118966911, + 47.54371271528122, + 47.955059399814154, + 56.24940898722523, + 61.745215649254455, + 62.89720529912119, + 63.57630631397953, + 77.13392781371098, + 83.3062901636937, + 86.30112560158557, + 91.6611452096512, + 96.58526675658007, + 100.68072855412326, + 126.56515765793262, + 139.44078118691957, + 156.39728736567642, + 169.05346248856304, + 176.66886787162056, + 198.51330114979922, + 226.50817183004918, + 240.49967917878067, + 286.1561131579322, + 309.4491557562682 + ], + [ + -18.422834088856035, + -17.451368448486637, + -11.063551351560747, + -6.488040009825246, + -2.621397733096126, + 3.359595750008679, + 8.206271735871606, + 9.299284653742623, + 11.163921888407316, + 11.226490088170808, + 15.122936055443313, + 15.916099035629674, + 17.354230029629754, + 20.948810301052813, + 21.509329822029265, + 22.015233630906106, + 25.17102959740305, + 31.777718308182994, + 32.154647636100364, + 42.59965726603281, + 44.930208391483376, + 47.331276853865795, + 47.52732471759995, + 47.62062635558794, + 56.132553383356694, + 61.46138222225102, + 63.01784355542907, + 63.49398410764592, + 77.36411632986506, + 83.44498531536696, + 85.46620433651906, + 91.69963120274726, + 95.93771851276281, + 100.42726832778712, + 127.50051666186282, + 140.4815477593061, + 156.60443311496937, + 169.08573939706196, + 176.90451960596553, + 200.1286709777641, + 226.6667301491391, + 240.3781380250626, + 286.2579490310105, + 309.1314536210657 + ], + [ + -18.41580868987669, + -17.44439428755642, + -11.098026916114028, + -6.47807435483659, + -2.624059689709828, + 3.4082667795167114, + 8.216540132863795, + 9.300661872516379, + 11.172983729489854, + 11.201103677139459, + 15.082047802424329, + 15.833433549391566, + 17.402120023347294, + 21.088361010967272, + 21.516773816757073, + 21.968689243355605, + 25.09678404645566, + 31.76981883197128, + 32.217794981642115, + 42.59027780178599, + 44.929343462029884, + 47.27302231935596, + 47.34856745244832, + 47.509692170700845, + 56.01431102943748, + 61.17627194557052, + 63.14011148166757, + 63.40935209493112, + 77.58636043000918, + 83.58922461382843, + 84.63930020733069, + 91.74003550692488, + 95.32045602559334, + 100.19715956797549, + 128.44470654145317, + 141.49135236727804, + 156.8171324076173, + 169.10301949601978, + 177.14632922182327, + 201.75691818430795, + 226.83026907589587, + 240.2533280394648, + 286.3784099129005, + 308.80953281893414 + ], + [ + -18.408440019975536, + -17.437089679793313, + -11.133903941505517, + -6.467623571375586, + -2.6269050646724335, + 3.45901101183722, + 8.227301628948169, + 9.302184279706751, + 11.167430524695359, + 11.189432847942605, + 15.041026469893309, + 15.75383098640039, + 17.450523297061256, + 21.227748677829048, + 21.5245848419222, + 21.92025168012997, + 25.019443720113134, + 31.761513937665445, + 32.28149594113632, + 42.581176761806596, + 44.92127759908785, + 46.932774688121526, + 47.35664670667288, + 47.49075614386694, + 55.89487949004396, + 60.890394269421556, + 63.263815283723154, + 63.322549353512024, + 77.79880649311266, + 83.73880271590291, + 83.82548224782551, + 91.78234884560624, + 94.73479536267672, + 99.98827065538097, + 129.39327453076586, + 142.467844707792, + 157.0346720208757, + 169.10420202232305, + 177.39304356394874, + 203.3934547736282, + 226.9964081105994, + 240.12732672725716, + 286.51896286343583, + 308.48456730591374 + ], + [ + -18.40072802575495, + -17.429456154668234, + -11.171147625946226, + -6.4566878154056555, + -2.6299414976960085, + 3.5117906841826207, + 8.238554541589986, + 9.303864644064417, + 11.140018949840359, + 11.198743540721175, + 14.999922657855766, + 15.677350109179551, + 17.499394473680194, + 21.366899358157536, + 21.532764234103436, + 21.869965687817114, + 24.939011429556512, + 31.75280169038308, + 32.345406246472464, + 42.57243238303402, + 44.90077647575585, + 46.593313888377644, + 47.368819242550856, + 47.47045523755279, + 55.774435292444814, + 60.60419751806448, + 63.233705396903225, + 63.3887815753564, + 77.99950282638333, + 83.02901380309881, + 83.89351130558353, + 91.82656126351372, + 94.18209323129108, + 99.79853796612701, + 130.34187064679972, + 143.40899306265098, + 157.25631773316402, + 169.08799473150876, + 177.64332429705075, + 205.03408125409265, + 227.16216348544907, + 240.0027424217417, + 286.68097958935624, + 308.1576890684502 + ], + [ + -18.392672656655392, + -17.421495347318437, + -11.209722576795055, + -6.445267252913649, + -2.6331769779508627, + 3.5665672995910596, + 8.250296981329628, + 9.305716445067247, + 11.109528213349622, + 11.210288087524416, + 14.958781537413468, + 15.604038554346392, + 17.548693781981715, + 21.505742638508245, + 21.541313566212843, + 21.817876353842454, + 24.855482820095972, + 31.743680250995354, + 32.409157667054714, + 42.56412059289351, + 44.85814833864307, + 46.26927728720692, + 47.3817568632709, + 47.44872568231336, + 55.65313660657803, + 60.31807749175148, + 63.142938386828355, + 63.514854601395406, + 78.18638227680768, + 82.25340007986534, + 84.0531400191857, + 91.87266209813444, + 93.66375814745422, + 99.62601653242636, + 131.28625256439196, + 144.31308634005228, + 157.48131692129917, + 169.05293157478587, + 177.89576649730202, + 206.67493227632366, + 227.32390341815585, + 239.8827573778079, + 286.86570720241804, + 307.8299897633163 + ], + [ + -18.38427386538762, + -17.41320900422107, + -11.249592899812596, + -6.433362060209008, + -2.636619842278145, + 3.6233017137769687, + 8.262526834856487, + 9.30775382562129, + 11.07744780374681, + 11.222618081804985, + 14.917643750668374, + 15.533932721543895, + 17.598386148051397, + 21.550234632657396, + 21.64421125517827, + 21.764029000198718, + 24.768847140830893, + 31.73414789203291, + 32.47235443202968, + 42.55631423224632, + 44.77617540229175, + 45.979770853894024, + 47.39529402218051, + 47.425501469175686, + 55.53112558036548, + 60.03238451735321, + 63.05035400112755, + 63.6418938056004, + 78.35723107989733, + 81.50148532020812, + 84.21747739500771, + 91.92063995062824, + 93.18124723519782, + 99.46890429360653, + 132.2222927489388, + 145.17873165786966, + 157.70890136813162, + 168.99739714907625, + 178.14892144687008, + 208.31242878674874, + 227.47733116347217, + 239.7711458189209, + 287.0742381986749, + 307.5025252378069 + ], + [ + -18.375531608342648, + -17.404598989348898, + -11.290722284238006, + -6.4209724242175845, + -2.640278773081449, + 3.6819542173690802, + 8.275241747287312, + 9.309991535138336, + 11.043998825205744, + 11.235563539438862, + 14.87654616264903, + 15.467057684519736, + 17.648440434114008, + 21.55952930634598, + 21.7084692107433, + 21.782240815042055, + 24.679088177120292, + 31.72420301244073, + 32.53456926059572, + 42.54908222807488, + 44.63097651959312, + 45.75053161907287, + 47.400714520672764, + 47.409389165838974, + 55.4085303659717, + 59.7474293130898, + 62.95604473607447, + 63.76977170817465, + 78.50958551631383, + 80.77565102662453, + 84.38631184459014, + 91.97048265627022, + 92.7360460511142, + 99.32554968089755, + 133.14598618080828, + 146.00484647533602, + 157.938290275953, + 168.91965829804252, + 178.40132288587586, + 209.94323758446112, + 227.6175130929458, + 239.67225040521367, + 287.30747990010576, + 307.17632324564886 + ], + [ + -18.3664458459778, + -17.395667290848657, + -11.33307408332689, + -6.40809854276925, + -2.6441627958584677, + 3.742484613142188, + 8.28843910360054, + 9.31244486342565, + 11.009286106602856, + 11.249081147987937, + 14.835522491830687, + 15.403427165567134, + 17.698828798098752, + 21.569198497122454, + 21.65124376151953, + 21.919769593484872, + 24.586185338345263, + 31.713844151017227, + 32.59533905876026, + 42.542488707261235, + 44.40801817991602, + 45.598002294947904, + 47.37429491350894, + 47.42402413339419, + 55.285466872882445, + 59.463487920973726, + 62.860089514865656, + 63.89837205763591, + 78.640238987394, + 80.07842852362674, + 84.5594326423072, + 92.02217725449464, + 92.32962870507468, + 99.19444937129767, + 134.05345683833332, + 146.79064486893597, + 158.16869347829353, + 168.81790351886323, + 178.651515664295, + 211.56423839315744, + 227.73897242021326, + 239.59089728792097, + 287.5661234627682, + 306.8523947755845 + ], + [ + -18.35701654317998, + -17.386416028283765, + -11.37661139004983, + -6.394740624876997, + -2.6482812763313874, + 3.8048522879133846, + 8.302116009168587, + 9.31512956597539, + 10.973396170395624, + 11.263156504261788, + 14.794603841085685, + 15.343043603557561, + 17.74952615198992, + 21.57920671683962, + 21.592435947482475, + 22.056738392063163, + 24.490114893334344, + 31.70306999838472, + 32.65416038804753, + 42.536592040974114, + 44.11919761292794, + 45.51224909399235, + 47.346171166026835, + 47.43918742946423, + 55.16204028194679, + 59.180805893802265, + 62.762553522272746, + 64.02758822349828, + 78.74131105459936, + 79.41657148110136, + 84.73663092959397, + 91.96339647002316, + 92.0757099586304, + 99.07424074020514, + 134.9409610297597, + 147.5356180798792, + 158.39931483769828, + 168.69029099770194, + 178.89808549299843, + 213.17249772948134, + 227.83586902476384, + 239.53223027265585, + 287.8506123439552, + 306.53174956412533 + ], + [ + -18.347243669604815, + -17.37684746048969, + -11.421297107705131, + -6.380898891005298, + -2.652643917129574, + 3.8690162788265483, + 8.316269269320074, + 9.318061781370538, + 10.936416560178712, + 11.277784832825617, + 14.753819146954763, + 15.28589833590679, + 17.80050970095695, + 21.53193872637137, + 21.589708828461763, + 22.193090443160706, + 24.390851345029546, + 31.69187940735458, + 32.71048488157907, + 42.531443807062956, + 43.78963143836711, + 45.470161560953784, + 47.31627060604109, + 47.454869702162654, + 55.03834635176175, + 58.89960187995653, + 62.66348821159601, + 64.15732179898207, + 78.67505581835626, + 78.92640749976857, + 84.91770072960385, + 91.63859535939741, + 92.13106612540508, + 98.96369186904914, + 135.80488564834036, + 148.23950992596392, + 158.62935581482103, + 168.5350060913504, + 179.1396883762936, + 214.7652476790656, + 227.90227869349107, + 239.50145242080913, + 288.1611098322001, + 306.2154165877925 + ], + [ + -18.33712719999419, + -17.36696399409618, + -11.467094015254661, + -6.366573573325323, + -2.6572607539765505, + 3.9349353338027013, + 8.330895367857853, + 9.32125794164708, + 10.898441312159425, + 11.292965397447103, + 14.713195561858008, + 15.231971905676389, + 17.85175854850768, + 21.46997855067691, + 21.60052610580395, + 22.32877135218998, + 24.2883689346505, + 31.68027140155969, + 32.76371488239323, + 42.52708765537994, + 43.43943437562357, + 45.45365966379803, + 47.284519837584796, + 47.471062124658346, + 54.914472545561885, + 58.62007071846071, + 62.56293144579565, + 64.28748138616164, + 78.11829249755898, + 78.92957975587711, + 85.10243996752475, + 91.3562168873727, + 92.1882302242884, + 98.86169082284819, + 136.64173947497574, + 148.90228802439788, + 158.8580191899625, + 168.3503290348991, + 179.37507825673737, + 216.33986560615656, + 227.9325686977745, + 239.5034812387213, + 288.4974648423628, + 305.9044706422384 + ], + [ + -18.326667114471025, + -17.356768192774343, + -11.513964827233039, + -6.351764915955784, + -2.6621421513291508, + 4.00256796598128, + 8.34599044445109, + 9.324734676546051, + 10.859572711193954, + 11.308699468005749, + 14.672758781187715, + 15.181234496588942, + 17.903253355571252, + 21.406521175612113, + 21.611740312922958, + 22.46372907022168, + 24.182643263521552, + 31.66824518224741, + 32.8131997147453, + 42.52355805806485, + 43.08108219537098, + 45.452316208431526, + 47.25084532846936, + 47.48775567942134, + 54.790499003518086, + 58.342386134216014, + 62.46090774428605, + 64.41798153922643, + 77.53743059163081, + 78.95819618180357, + 85.29065149112373, + 91.11689099167278, + 92.24718580677103, + 98.76723516581279, + 137.44813574981734, + 149.5241120201357, + 159.08451291312625, + 168.13471348703413, + 179.60313153581254, + 217.89384620818652, + 227.92184352612355, + 239.54255088983004, + 288.8591746636233, + 305.60006654037727 + ], + [ + -18.315863398813857, + -17.346262787277436, + -11.561872248129307, + -6.336473175187055, + -2.6672987974103797, + 4.071872502016092, + 8.361550270810625, + 9.328508712668999, + 10.81992172383487, + 11.324989459307432, + 14.632533325050767, + 15.133646491152188, + 17.954976043583635, + 21.341612411231083, + 21.62335283116027, + 22.597913891618745, + 24.073653018204723, + 31.655800133147462, + 32.85823317608827, + 42.520878923446574, + 42.722269331734594, + 45.46048468894397, + 47.215174144586406, + 47.50494077360226, + 54.66649938219437, + 58.06670310594575, + 62.35742861373988, + 64.54874184465167, + 76.97961540265835, + 78.96384618143394, + 85.48214408535929, + 90.9207847166886, + 92.30791547564159, + 98.67942221587609, + 138.22076439716338, + 150.10530013531695, + 159.30805405837722, + 167.88687634007692, + 179.82286733168473, + 219.42474522208659, + 227.86641769683558, + 239.62182335961631, + 289.2453426822684, + 305.3034830271438 + ], + [ + -18.304716044712542, + -17.335450686348114, + -11.610779021169288, + -6.3206986196877235, + -2.672741698577906, + 4.142807124126881, + 8.377570225549816, + 9.332596768606091, + 10.77960784002973, + 11.341838524183208, + 14.592542782648582, + 15.08915914055328, + 18.006909533398986, + 21.275293784461624, + 21.63536886326544, + 22.73127847247282, + 23.9613817815136, + 31.642935823344974, + 32.89805305425955, + 42.36815891050095, + 42.5190620482703, + 45.47503462519992, + 47.17743486148969, + 47.522606987837804, + 54.54254158004279, + 57.79315996585128, + 62.25249294602318, + 64.67968611994155, + 76.4475268387729, + 78.94293540747788, + 85.67673347406509, + 90.76752295155144, + 92.37040085436148, + 98.59744025445728, + 138.95635251312294, + 150.64629536016443, + 159.5278728505748, + 167.60589891271397, + 180.0334626202312, + 220.93003629307157, + 227.7642943853288, + 239.7430860509901, + 289.65462826854053, + 305.0161792335167 + ], + [ + -18.29322505000579, + -17.32433498857673, + -11.660647971462632, + -6.3044415306907275, + -2.6784821729615484, + 4.2153299058330065, + 8.394045267629991, + 9.337015447145145, + 10.73875859770041, + 11.35925034482763, + 14.552810025854752, + 15.047715329710707, + 18.059037513274326, + 21.207605044446627, + 21.647794775217733, + 22.863777866547554, + 23.845819908870943, + 31.62965200810877, + 32.93184371784174, + 42.02257240165662, + 42.51810537836849, + 45.494146485478204, + 47.13755868924058, + 47.54074287925639, + 54.418688365199564, + 57.521880279517184, + 62.14608747029625, + 64.81074171516738, + 75.9411392278119, + 78.89501556402908, + 85.87424330082074, + 90.65614654800638, + 92.43462255660637, + 98.5205607443914, + 139.6516120654834, + 151.14763252052694, + 159.74321673367038, + 167.2913392569761, + 180.23426175696366, + 222.40667758990273, + 227.61578354415067, + 239.9066030686766, + 290.08518503885244, + 304.73986737647726 + ], + [ + -18.28139041890323, + -17.312918995303317, + -11.711442043500991, + -6.287702202158764, + -2.684531843301914, + 4.289398841318757, + 8.41096990827989, + 9.341781125683189, + 10.697508914901064, + 11.377229018837879, + 14.513357397377186, + 15.009250417011529, + 18.111344230321688, + 21.138584247618006, + 21.66063783179757, + 22.995369576100487, + 23.7269664465172, + 31.615948627662338, + 32.95874306347823, + 41.68857458874009, + 42.51799104260512, + 45.51670939429222, + 47.095480852645686, + 47.559335802518916, + 54.29499791957322, + 57.252974546104596, + 62.0381872495949, + 64.9418389037905, + 75.45982319301486, + 78.82071842753977, + 86.07450608010917, + 90.58511778300247, + 92.50056015607076, + 98.44813151950353, + 140.30317427544463, + 151.60990728364288, + 159.95335444432126, + 166.94335474637475, + 180.42478021655063, + 223.84944106766804, + 227.42517387856424, + 240.11115029074554, + 290.53458262637133, + 304.47660637883104 + ], + [ + -18.269212162192787, + -17.301206224666302, + -11.763124333010612, + -6.270480940928162, + -2.6909026289177604, + 4.364971868392451, + 8.428338181279006, + 9.346909845961489, + 10.65600029847362, + 11.395778993835393, + 14.474206877949152, + 14.97369312588846, + 18.163814300751408, + 21.068267557558926, + 21.673906181252395, + 23.126013615449608, + 23.60483106587448, + 31.60182580388309, + 32.97785526666585, + 41.36875981054181, + 42.518683118900704, + 45.54201426216236, + 47.05114227610964, + 47.57837172992223, + 54.17152431120689, + 56.986541752393656, + 61.92875621485119, + 65.07291035121197, + 75.00272470243104, + 78.72135804014859, + 86.27736410880182, + 90.55237444962182, + 92.56819215661828, + 98.37957086464209, + 140.90751098885445, + 152.03374795831743, + 160.15758005305506, + 166.56283322090937, + 180.6047027094805, + 225.24082724800397, + 227.21065199413906, + 240.35421545131737, + 290.9997061888225, + 304.2289218996818 + ], + [ + -18.256690297437412, + -17.289200426916363, + -11.815658113179452, + -6.252778066829372, + -2.697606736723704, + 4.442006885007994, + 8.44614361148817, + 9.352417204225592, + 10.614379974477183, + 11.4149050284786, + 14.435380236218023, + 14.940966464469835, + 18.216432534977216, + 20.996688947622467, + 21.687608888582115, + 23.25567258552908, + 23.479435987619947, + 31.587283834964364, + 32.98827076817656, + 41.06538953590277, + 42.52012508445044, + 45.56959077662542, + 47.00449163008489, + 47.597835058862564, + 54.048317905168815, + 56.72267080902798, + 61.817747731960374, + 65.20389065119157, + 74.5688859628688, + 78.59874491566275, + 86.4826703268414, + 90.55542451242745, + 92.63749596287114, + 98.31436238829819, + 141.46084472833593, + 152.4197907034657, + 160.35521693474604, + 166.15152959672065, + 180.77387609869575, + 226.39148862278378, + 227.1636002971894, + 240.63230613676137, + 291.4766277220274, + 303.9999583277096 + ], + [ + -18.243824849159985, + -17.2769056011231, + -11.869006855282022, + -6.234593912784384, + -2.7046566512200427, + 4.520461759318789, + 8.464379181512898, + 9.358318242872608, + 10.572799973887703, + 11.434612168501799, + 14.396899164373107, + 14.910988649941844, + 18.269183774259808, + 20.92387983101009, + 21.701755975849263, + 23.35081787073819, + 23.384311757956777, + 31.572323188085733, + 32.98909459717415, + 40.7804515032149, + 42.52223689502482, + 45.59911677444256, + 46.95548780457671, + 47.61770839795245, + 53.92542572173689, + 56.46144189352635, + 61.70510519960747, + 65.33471592170152, + 74.15730118254564, + 78.45503474764011, + 86.69028911478107, + 90.59146631924335, + 92.7084478513363, + 98.25205058680355, + 141.95905137453082, + 152.76865853174002, + 160.54562162690962, + 165.7122026009667, + 180.93229774851116, + 226.42019800794426, + 228.16830565890206, + 240.94129532124404, + 291.9604451774599, + 303.7936662806057 + ], + [ + -18.230615849022296, + -17.26432601342047, + -11.923134243727642, + -6.21592882488047, + -2.7120651233677604, + 4.600294333222425, + 8.483037296385071, + 9.364627344603274, + 10.531416199799684, + 11.454905731646605, + 14.358785402034487, + 14.883674015787415, + 18.32205273605067, + 20.8498686135028, + 21.71635845033484, + 23.219029647729872, + 23.51189916735528, + 31.55694449015829, + 32.979483337197415, + 40.51567429041589, + 42.524911630903325, + 45.630365621700925, + 46.90410288381071, + 47.63797232407619, + 53.802891749372066, + 56.20292772180154, + 61.59076267760297, + 65.46532345302333, + 73.76694910918664, + 78.29258784061454, + 86.90009701455151, + 90.65751677780094, + 92.78102294217429, + 98.19223700449119, + 142.39756299371558, + 153.08094428292569, + 160.72818753615093, + 165.2487428002661, + 181.08010007031092, + 226.0956716709251, + 229.4598269465176, + 241.2767450034335, + 292.44509201698463, + 303.6150224549809 + ], + [ + -18.21706333599599, + -17.251466216953062, + -11.97800418555488, + -6.196783162420194, + -2.719845158264865, + 4.681462419343148, + 8.502109746151065, + 9.371358130030904, + 10.490387496826997, + 11.475791298035276, + 14.321060850500892, + 14.858933882442791, + 18.375023865565144, + 20.77468015457498, + 21.73142829811884, + 23.084142300502403, + 23.638405710836572, + 31.54114851674126, + 32.95868969041325, + 40.272515294127665, + 42.528011640228954, + 45.6631744342223, + 46.850325704273274, + 47.65860510256293, + 53.680757218871456, + 55.947194767949526, + 61.474645547282805, + 65.59565140192784, + 73.39681464257491, + 78.11384325576402, + 87.11198335851545, + 90.75053174825021, + 92.85519517171088, + 98.13457690345675, + 142.77128367853635, + 153.35719756826362, + 160.90234845199095, + 164.76627786857256, + 181.21753207930635, + 225.71154308232025, + 230.74876065292315, + 241.6341717470759, + 292.923135690608, + 303.4702627437904 + ], + [ + -18.203167356531335, + -17.23833107370523, + -12.03358081438167, + -6.177157297948306, + -2.7280100015315214, + 4.763923791372748, + 8.521587666264518, + 9.378523359633091, + 10.449874738564088, + 11.497274703974176, + 14.283747679093171, + 14.836677374869588, + 18.42808119141003, + 20.698335117046117, + 21.7469784008722, + 22.946246599625606, + 23.763805253693334, + 31.524936179247636, + 32.92611174994992, + 40.05213370163367, + 42.531364105680005, + 45.697424197358536, + 46.794166084739224, + 47.67958236185113, + 53.55906084417897, + 55.694304451026916, + 61.35667120703321, + 65.72563852666001, + 73.04590406966084, + 77.92121463733113, + 87.32585079054442, + 90.86750766206663, + 92.93093726581053, + 98.07877636594611, + 143.07453862161015, + 153.59791556438117, + 161.0675818293894, + 164.2712338446632, + 181.3449388076994, + 225.29388173537427, + 232.01352238059584, + 242.00924160297862, + 293.3856149486884, + 303.36707808817465 + ], + [ + -18.18892796472409, + -17.224925778414498, + -12.089828488808818, + -6.15705161725568, + -2.736573124315292, + 4.847636167662653, + 8.541461495687541, + 9.386134840856014, + 10.410039944472496, + 11.519362037984292, + 14.246868425044497, + 14.816812173785005, + 18.481208183257028, + 20.62084918037363, + 21.76302228123305, + 22.805454892240405, + 23.888074740446154, + 31.508308510569808, + 32.88134206083761, + 39.855357977630106, + 42.53475595939574, + 45.73302693495013, + 46.73565981928578, + 47.70087671265139, + 53.43783903451826, + 55.44431430742233, + 61.236749807314546, + 65.85522395817036, + 72.71325599234302, + 77.71701151765743, + 87.5416156615407, + 91.00555899980132, + 93.00822071424341, + 98.02458976283405, + 143.30108548995264, + 153.80353748801215, + 161.22341180161416, + 163.77132249198752, + 181.46273937074858, + 224.8515812940416, + 233.2498162509125, + 242.39789817329643, + 293.8220172454936, + 303.31467115051447 + ], + [ + -18.174345222481787, + -17.211255884797268, + -12.146711785250695, + -6.13646651936166, + -2.745548206823617, + 4.932557187918103, + 8.561720932620752, + 9.394203341101232, + 10.3710454333852, + 11.54205963832605, + 14.210446088123735, + 14.799245190582608, + 18.534387609610103, + 20.54223208728034, + 21.779573437806704, + 22.66190318110257, + 24.01119431049182, + 31.491266649281137, + 32.824209923841735, + 39.682656906001526, + 42.53792807742767, + 45.76991719463897, + 46.6748745194362, + 47.72245729972717, + 53.317126081843874, + 55.19727916771331, + 61.114785030548376, + 65.9843470036857, + 72.39794908501418, + 77.50338595151456, + 87.75920828057384, + 91.16197109738798, + 93.08701574617065, + 97.97181753028175, + 143.44422532464563, + 153.9744426034806, + 161.36941188971448, + 163.27541692941202, + 181.5714044318991, + 224.39037516377198, + 234.45652271188786, + 242.79643590326, + 294.22055935327955, + 303.32351002830865 + ], + [ + -18.159419199693584, + -17.197327334340578, + -12.204195485143698, + -6.115402416475628, + -2.7549491202930256, + 5.018644382804712, + 8.582354887802554, + 9.402738507248486, + 10.333053017000845, + 11.565374091569403, + 14.174504220971539, + 14.783883159102034, + 18.58760139359415, + 20.46248648740411, + 21.796643578271542, + 22.515754205456734, + 24.133147417676224, + 31.473811822586487, + 32.754809901622394, + 39.53412259806348, + 42.54056870365177, + 45.80804625553378, + 46.61191637440815, + 47.74428927194964, + 53.196954327027214, + 54.95325235840153, + 60.990674921874685, + 66.1129469792166, + 72.09910741219109, + 77.28230144446285, + 87.97857300168258, + 91.33423100073088, + 93.16729130690739, + 97.92030420435665, + 143.49705283457246, + 154.1109517146333, + 161.505207376785, + 162.7932752777582, + 181.6714337416634, + 223.91491557558757, + 235.63355556247114, + 243.20153279455013, + 294.5689613161597, + 303.4045882311784 + ], + [ + -18.144149974403494, + -17.183146487944274, + -12.262244556447852, + -6.093859733939653, + -2.764789907306127, + 5.105855136214717, + 8.603351435337739, + 9.411748792289087, + 10.296223233368488, + 11.589312231934036, + 14.139067015932758, + 14.770633140202628, + 18.640830464253455, + 20.381606535252722, + 21.814237342484752, + 22.36720396897084, + 24.253920953184284, + 31.455945328201484, + 32.67351068469701, + 39.40947206437846, + 42.542306091524466, + 45.8473780988618, + 46.54693786125848, + 47.76633315315583, + 53.07735430768532, + 54.71228695109055, + 60.86431277708779, + 66.24096306802053, + 71.81590382851024, + 77.05551969214662, + 88.19966812537969, + 91.52004069628259, + 93.24901503611915, + 97.86993667009745, + 143.45287547007698, + 154.21333222098303, + 161.63047731865012, + 162.33508279736395, + 181.76333434756037, + 223.42928970445956, + 236.78130323584404, + 243.61025532592987, + 294.85580429596075, + 303.5680997489609 + ], + [ + -18.12853763299038, + -17.168720160732097, + -12.320824129324102, + -6.071838910153598, + -2.7750847603707167, + 5.1941466398848535, + 8.624697761049008, + 9.421241389574538, + 10.260714617502568, + 11.613881141239943, + 14.104159389006664, + 14.759402937477208, + 18.6940545998846, + 20.299576193524906, + 21.832332448865426, + 22.21650283784348, + 24.373505371217657, + 31.437668515360237, + 32.58094139569733, + 39.30807068009608, + 42.54270042073648, + 45.887886547597894, + 46.480146369299696, + 47.788544092412735, + 52.95835489015237, + 54.474437084777016, + 60.735588093922, + 66.36833420245198, + 71.54756186178548, + 76.82460038099578, + 88.42246559319906, + 91.71731738557619, + 93.33215324763914, + 97.8206425864535, + 143.30579918104587, + 154.2818068437551, + 161.7449561681732, + 161.91081484570154, + 181.84760000352992, + 222.93719480347593, + 237.90042375133902, + 244.0200457705625, + 295.07226361947926, + 303.8217373237909 + ], + [ + -18.112582270356206, + -17.15405566039028, + -12.379899465823497, + -6.049340396484241, + -2.7858479986830975, + 5.283475839978694, + 8.646380108382449, + 9.431222175120416, + 10.226683003947816, + 11.639088149377612, + 14.069807061376412, + 14.750101424331582, + 18.74725225787164, + 20.21636718828819, + 21.85076220171457, + 22.06407434676644, + 24.49189481698575, + 31.418982765156642, + 32.47795637769703, + 39.2289767085157, + 42.54123515839637, + 45.92955319772884, + 46.41181359154113, + 47.81087096739036, + 52.839983387715705, + 54.239759391423156, + 60.6043875922516, + 66.49499896689446, + 71.29335639544851, + 76.5909097752469, + 88.64695045316306, + 91.92418503718277, + 93.41667091111496, + 97.77238895274984, + 143.05142497602594, + 154.31656587780293, + 161.52947741567544, + 161.84843499464725, + 181.92469223472622, + 222.44201441373906, + 238.99174548377107, + 244.4286992519808, + 295.21362314320595, + 304.1692072758139 + ], + [ + -18.096283990124206, + -17.139160829430676, + -12.4394359233767, + -6.026364657162758, + -2.797094043003412, + 5.373799375164284, + 8.668383721939216, + 9.44169565835036, + 10.19428085435859, + 11.664940835258502, + 14.036036638839121, + 14.742638784058977, + 18.80040038122265, + 20.131936562542112, + 21.866334007483164, + 21.91339815605546, + 24.609087256607854, + 31.399889470429386, + 32.36558334437788, + 39.171002101353174, + 42.537308207300086, + 45.97236589581504, + 46.34228536363352, + 47.83325530844656, + 52.722265666926354, + 54.00831456033012, + 60.47059630768033, + 66.62089551975782, + 71.05261340551114, + 76.35563462118918, + 88.87312007405528, + 92.13896065897018, + 93.50253163570672, + 97.72518078508789, + 142.68753827927816, + 154.31778212771093, + 161.19834518547992, + 161.94076228541434, + 181.9950234601429, + 221.94685907256587, + 240.0562067543496, + 244.8343357522459, + 295.27986769748367, + 304.6096636646721 + ], + [ + -18.079642904848388, + -17.12404409183141, + -12.499398911818925, + -6.002912169168953, + -2.808837388582646, + 5.465073505625164, + 8.690692788765391, + 9.452664941625521, + 10.163656601936129, + 11.691447028238711, + 14.002875689320327, + 14.73692666546175, + 18.85347416277048, + 20.046223785497205, + 21.7509860901046, + 21.89285507002461, + 24.72508460858024, + 31.380390015409663, + 32.244962301539786, + 39.13278219660304, + 42.53022343370326, + 46.01631759993567, + 46.271991381215535, + 47.8556300034902, + 52.605226243539434, + 53.78016908434051, + 60.33409876138788, + 66.74596153273392, + 70.82470895902333, + 76.11979877358948, + 89.1009830868424, + 92.36013787400375, + 93.58969765612343, + 97.67905987310048, + 142.21463372197482, + 154.28562669506076, + 160.92235766962162, + 162.02184432064718, + 182.05894250720937, + 221.45459136024985, + 241.0948123735892, + 245.2353704506713, + 295.2750706946608, + 305.1383442855406 + ], + [ + -18.062659136237922, + -17.108714504555046, + -12.559753843621547, + -5.978983422109719, + -2.821092576096125, + 5.557254032330334, + 8.713290377590349, + 9.464131688874962, + 10.13495400386493, + 11.718614810029692, + 13.970352818518625, + 14.732878257067638, + 18.906446726903933, + 19.95914740926448, + 21.594634156740646, + 21.9128824605301, + 24.83989287651545, + 31.360485755341745, + 32.117283261523326, + 39.112846285519524, + 42.519183504394476, + 46.06140551373638, + 46.20145388893607, + 47.87791773441657, + 52.48888836938413, + 53.55539723960037, + 60.19478020694353, + 66.87013414568592, + 70.60906763978664, + 75.88428072653265, + 89.3305580327071, + 92.58636960780335, + 93.67812982129308, + 97.63410358845474, + 141.63613429142475, + 154.22028304254204, + 160.7038187196251, + 162.09164512126128, + 182.11672279980948, + 220.9678423871578, + 242.1085988194975, + 245.63048486888957, + 295.20594969816176, + 305.7480353586244 + ], + [ + -18.04533281539544, + -17.093181814508977, + -12.620466076933992, + -5.954578918089493, + -2.8338741605514417, + 5.6502962057733805, + 8.736158376283868, + 9.476096103634292, + 10.108311492661135, + 11.746452517127413, + 13.938497743590474, + 14.730408283105598, + 18.959288636583096, + 19.870601351639937, + 21.436925661797513, + 21.934222514092358, + 24.953522282913188, + 31.340177996297264, + 31.9837295987058, + 39.10968217426288, + 42.50328538073963, + 46.10763041759954, + 46.131294015699304, + 47.9000290846348, + 52.37327411129108, + 53.334083361793134, + 60.05252795217116, + 66.99334993571662, + 70.40516053634116, + 75.64983086115501, + 89.56187169895752, + 92.81645106816488, + 93.76778758605582, + 97.59042371659989, + 140.9582426222181, + 154.1219570530209, + 160.54246560270184, + 162.1501859713727, + 182.16855343334518, + 220.48902264837113, + 243.0986039213776, + 246.01860102750655, + 295.08028173274585, + 306.430672839358 + ], + [ + -18.02766408307314, + -17.077456521580643, + -12.681500850963202, + -5.9296991715801015, + -2.8471966781629114, + 5.74415462324858, + 8.759277427887252, + 9.488556916804599, + 10.083861517542257, + 11.774968743797297, + 13.9073413646496, + 14.729432924215477, + 19.01196699034777, + 19.780451098686033, + 21.2787143996858, + 21.956450569419946, + 25.065987403743677, + 31.319467975387987, + 31.84543162706959, + 39.12179012445509, + 42.481520272424355, + 46.06223397403512, + 46.15499614373779, + 47.92186024370868, + 52.258404423014625, + 53.11632449521852, + 59.907232751035174, + 67.11554489907455, + 70.21250290133106, + 75.41708769599157, + 89.79495712675224, + 93.04930372832135, + 93.85862900630498, + 97.54816528305707, + 140.18947008783255, + 153.99088234832604, + 160.43586450995065, + 162.19754452504452, + 182.2145332837407, + 220.0203287201877, + 244.06583682863467, + 246.39886215639623, + 294.9056921149981, + 307.17856633151933 + ], + [ + -18.009653089948277, + -17.061549948454257, + -12.742823213134747, + -5.904344709288893, + -2.861074611205385, + 5.8387831135797335, + 8.782626865675514, + 9.501511384474352, + 10.061729867526154, + 11.804172345665213, + 13.87691583370176, + 14.729869665436478, + 19.06444342266114, + 19.688530703986192, + 21.12050927844594, + 21.979529558819788, + 25.177307303646675, + 31.29835684158001, + 31.703432463828943, + 39.14772407243112, + 42.452780243318315, + 45.99509294937744, + 46.2035091573655, + 47.94329021936995, + 52.144299210958074, + 52.90223350654324, + 59.758790257003476, + 67.2366544446992, + 70.03065156624345, + 75.18659275696021, + 90.02985127817904, + 93.28396069061506, + 93.95061073813331, + 97.50750534359098, + 139.33997228436021, + 153.8273220956325, + 160.38000437043107, + 162.23385351185303, + 182.25466821497122, + 219.56374670477962, + 245.01123752983332, + 246.7706303440854, + 294.6889669995107, + 307.98509520283636 + ], + [ + -17.99129999691745, + -17.045474318000053, + -12.804397937385216, + -5.878516070030734, + -2.8755223508881373, + 5.934134608041733, + 8.806184647821775, + 9.514955296195499, + 10.042034968913457, + 11.834072443961949, + 13.847254620490098, + 14.731637073415706, + 19.116668591399407, + 19.594643412210193, + 20.962808516525634, + 22.003478953037714, + 25.287505671520986, + 31.276845637305286, + 31.558666124388846, + 39.18612014949521, + 42.41587380626577, + 45.93077435725237, + 46.25317821663159, + 47.96417744952502, + 52.03097739438402, + 52.69194277286214, + 59.60710252559006, + 67.35661339827811, + 69.85920218327416, + 74.95880390957062, + 90.26659235489953, + 93.51955358385538, + 94.04368804166207, + 97.46865170629134, + 138.42084266792992, + 153.63156963114167, + 160.36993647069735, + 162.25929905909223, + 182.28887136432084, + 219.12105313430013, + 245.93557880076153, + 247.13354792759205, + 294.4357941953088, + 308.84497217828175 + ], + [ + -17.97260497541396, + -17.029242839120226, + -12.866189432837505, + -5.852213804606136, + -2.8905541583214798, + 6.030160996016458, + 8.829927292367119, + 9.528882994177899, + 10.024887151091162, + 11.86467843047481, + 13.818392574558047, + 14.734654504071065, + 19.168561865092514, + 19.498577947034757, + 20.80614114960598, + 22.02833561839355, + 25.396610956226183, + 31.254935281047295, + 31.411946380786855, + 39.23571394468509, + 42.36955249432001, + 45.870242491178054, + 46.30401409124733, + 47.984355688536105, + 51.91845696067998, + 52.485608571956234, + 59.45207954985287, + 67.47535601579641, + 69.697786346892, + 74.7341071375444, + 90.50521676633461, + 93.75530100444917, + 94.13781479038327, + 97.431841550456, + 137.44348411091258, + 153.40394986898545, + 160.40033952581146, + 162.27411865521194, + 182.3169663889656, + 218.69381397632344, + 246.83895322744905, + 247.48801961863467, + 294.15076709800616, + 309.75423943268135 + ], + [ + -17.953568207750568, + -17.012869802036686, + -12.928161641996263, + -5.825438475687884, + -2.9061841236805623, + 6.126812963704496, + 8.853829813340916, + 9.543287403967112, + 10.010387876181937, + 11.895999973259851, + 13.790365982668746, + 14.738841741192854, + 19.219888601480267, + 19.400229298309142, + 20.651076370826964, + 22.054144878140125, + 25.50465650200171, + 31.23262655107461, + 31.263964219772927, + 39.29534865623425, + 42.31254930245292, + 45.81448767197655, + 46.35602932476702, + 48.003629025769676, + 51.80675501618831, + 52.283416319236764, + 59.293640808754375, + 67.59281600563007, + 69.54606864229638, + 74.51282683844587, + 90.74575575233546, + 93.9904984258788, + 94.23294348714597, + 97.39733990445524, + 136.41912159830176, + 153.14482219482974, + 160.46594744896393, + 162.27859878033627, + 182.33869346003272, + 218.2833823444181, + 247.70777431952882, + 247.84818583856898, + 293.83751505177804, + 310.71013372608405 + ], + [ + -17.93418988748487, + -16.996370684115842, + -12.990277927486972, + -5.7981906577201965, + -2.92242612370961, + 6.2240398139583455, + 8.877865659041806, + 9.55816007729165, + 9.998628929950764, + 11.928047023165643, + 13.76321262052978, + 14.744118565744515, + 19.266732174745595, + 19.303128635836785, + 20.49822299183836, + 22.080957739797256, + 25.61168068302687, + 31.115291596924767, + 31.209920070468065, + 39.363976426420884, + 42.24362794697291, + 45.76448094911235, + 46.40923802888758, + 48.02176588564793, + 51.69588783300737, + 52.08558680469023, + 59.131716804650814, + 67.7089265582935, + 69.40374365483552, + 74.2952347500069, + 90.98823167339604, + 94.22450945418404, + 94.32902528818833, + 97.365437940452, + 135.35846804540387, + 152.85458436177407, + 160.5618292095622, + 162.273072235716, + 182.35371769312795, + 217.89089553229294, + 248.15392035732256, + 248.60275816773532, + 293.49887519102884, + 311.7109054390638 + ], + [ + -17.914470219814735, + -16.97976226744339, + -13.052500946230476, + -5.770470936832437, + -2.939293777749857, + 6.321789265022692, + 8.902006653659225, + 9.573491247921821, + 9.989691573541931, + 11.960829821222209, + 13.736971797586012, + 14.750404254979475, + 19.191339396342446, + 19.324605944490617, + 20.34822123197704, + 22.108829867010687, + 25.71772703627267, + 30.966389391853646, + 31.186816293588286, + 39.440654955204984, + 42.16163931136741, + 45.72112197510851, + 46.46365570031778, + 48.03849186744123, + 51.58587089214892, + 51.89238357475906, + 58.966250562996464, + 67.82362038302989, + 69.27053297064136, + 74.08155764325554, + 91.23265399067937, + 94.42601003717459, + 94.45675828561559, + 97.33645104031103, + 134.27152354664156, + 152.53367639405425, + 160.68354210720398, + 162.25791520385673, + 182.36163961186332, + 217.51727198604195, + 248.4796604367243, + 249.45007684570595, + 293.13706232869305, + 312.7556348341502 + ], + [ + -17.894409422003143, + -16.963062769490662, + -13.114792509814565, + -5.7422799107714955, + -2.9568004025137706, + 6.420007225649956, + 8.926222943609574, + 9.589269901557739, + 9.983645658060484, + 11.994358906940587, + 13.711684393434828, + 14.757617010007579, + 19.08341052969371, + 19.374516319365803, + 20.201725863239794, + 22.137821146338275, + 25.822844391406917, + 30.817617843979242, + 31.163315494094736, + 39.52454112238748, + 42.06557890652243, + 45.685186205514725, + 46.519299051892354, + 48.05348132790657, + 51.476718923360515, + 51.70412156009693, + 58.79719906481602, + 67.93682975047508, + 69.14618219482435, + 73.87198392306995, + 91.47901496830741, + 94.52384631182086, + 94.6867232163324, + 97.31071658238088, + 133.16747603406048, + 152.18258360062703, + 160.827191776067, + 162.233544075457, + 182.36200716886762, + 217.1632088322799, + 248.79308354115616, + 250.2826689418491, + 292.75381888038874, + 313.8440634591612 + ], + [ + -17.87400772383474, + -16.946291988339183, + -13.177113429683263, + -5.713618188854599, + -2.97495896587485, + 6.518637543696546, + 8.950482950156301, + 9.605483860972283, + 9.980548706700805, + 12.028645127574418, + 13.687392884208867, + 14.765673310178663, + 18.97092765073193, + 19.424436689168694, + 20.05938057377871, + 22.167995475181634, + 25.927086995997037, + 30.669248161350396, + 31.139417754627058, + 39.61488294243006, + 41.95463766423285, + 45.657279075451, + 46.57618584965821, + 48.06634772084984, + 51.36844594190698, + 51.52117694025892, + 58.62453458086329, + 68.04848654068594, + 69.03045800621854, + 73.66666926894392, + 91.72728514123021, + 94.62248148676156, + 94.91393105585205, + 97.28859139482142, + 132.05467161899332, + 151.8018381623799, + 160.98943132458052, + 162.2004120786618, + 182.35432878348323, + 216.82918057182795, + 249.09596299406581, + 251.0993743011054, + 292.35054000614787, + 314.97644544355006 + ], + [ + -17.85326536810693, + -16.929471464068076, + -13.239423345626475, + -5.684486391947438, + -2.9937820399805926, + 6.617621724919992, + 8.974753330091513, + 9.622119887866571, + 9.980444972047069, + 12.063699648384194, + 13.664141357063992, + 14.774487192697126, + 18.853939991135185, + 19.47390896242788, + 19.921789064168163, + 22.199420627175634, + 26.030514633544403, + 30.52147437448493, + 31.115122958228195, + 39.71101080339201, + 41.82823878674508, + 45.63780438836421, + 46.63433474639664, + 48.076632932721026, + 51.26106528256359, + 51.34399801398804, + 58.44824587577887, + 68.15852229585495, + 68.92314526945422, + 73.46574144301265, + 91.97740860312109, + 94.72186181776338, + 95.13795230137767, + 97.2704488187298, + 130.94062895185627, + 151.3920191442263, + 161.1674253972029, + 162.1590057473717, + 182.33808683037572, + 216.5154395278192, + 249.38871955106484, + 251.9003754861151, + 291.92837501993705, + 316.1534175784233 + ], + [ + -17.832182611160945, + -16.912624658028417, + -13.30168053591737, + -5.6548851524686015, + -3.0132817540420027, + 6.716898618247067, + 8.998998946467704, + 9.639163803147428, + 9.983364479289524, + 12.099533963947492, + 13.6419755106904, + 14.783969456315681, + 18.732270294798084, + 19.522731957606307, + 19.78951654447147, + 22.232168131375403, + 26.133192730993823, + 30.374424820153116, + 31.090430781579286, + 39.81232863315097, + 41.68605589863047, + 45.626951616757175, + 46.69376509881092, + 48.08379626224976, + 51.154589631053646, + 51.173116438529526, + 58.26833925116224, + 68.26686827711858, + 68.82404421832491, + 73.26930437642055, + 92.22929817960784, + 94.82193255468131, + 95.35839693368335, + 97.25667532395202, + 129.8320791950237, + 150.95375102519807, + 161.3587972505228, + 162.1098412665207, + 182.31275100232713, + 216.2220185843015, + 249.6716217566155, + 252.68599260870678, + 291.4883082038088, + 317.37588501321085 + ], + [ + -17.810759723453383, + -16.895777151850314, + -13.363841707322361, + -5.624815114425358, + -3.0334697471907184, + 6.816404063321444, + 9.023182851570665, + 9.65660062760554, + 9.989322069352349, + 12.136159910555492, + 13.620942639574942, + 14.794026788892971, + 18.60582609727598, + 19.57015553718665, + 19.663584325544544, + 22.266313133190895, + 26.235192451186656, + 30.2281728807229, + 31.065340690099276, + 39.91830539930698, + 41.52801164821763, + 45.62470290079327, + 46.75449674908156, + 48.08720437404025, + 51.00915752660285, + 51.049031053148255, + 58.0848393983501, + 68.37345552484892, + 68.73296772693132, + 73.07744163366431, + 92.48283056177814, + 94.92263809400582, + 95.5749106924951, + 97.24766662778288, + 128.7350195225091, + 150.48770097074924, + 161.5615703772475, + 162.0534607288469, + 182.27779100100457, + 215.94873668003174, + 249.94492767833702, + 253.45653851012995, + 291.0312225046991, + 318.64491909741713 + ], + [ + -17.78899699017508, + -16.878956868109473, + -13.425861763114384, + -5.59427693348427, + -3.0543571218273033, + 6.916070495617464, + 9.047266284522308, + 9.674414745236405, + 9.998316459248286, + 12.173589679731226, + 13.60109159954317, + 14.804560820141672, + 18.47466025094131, + 19.539051127295647, + 19.621239005926338, + 22.301934219066517, + 26.336590764277453, + 30.082746778682164, + 31.03985193493694, + 40.028467176918916, + 41.35425979903712, + 45.63085662440068, + 46.8165497388427, + 48.086124596361735, + 50.85284726227523, + 50.94440102161662, + 57.897790034847496, + 68.47821492191183, + 68.64973867879269, + 72.89021934216991, + 92.73784148210007, + 95.02392218729676, + 95.78717167055899, + 97.24382328844266, + 127.65477275030342, + 149.99457511453892, + 161.77411137508446, + 161.99042833887754, + 182.23268806638933, + 215.69520742033347, + 250.20891325904117, + 254.21228864822422, + 290.5579492311917, + 319.9616642962719 + ], + [ + -17.7668947119239, + -16.86219431463401, + -13.487693547162142, + -5.563271277079822, + -3.0759543979190256, + 7.015826503889829, + 9.071208686069534, + 9.692590091711418, + 10.010329340245868, + 12.211835832905177, + 13.5824727519727, + 14.815467103171576, + 18.338984273942557, + 19.424753382594318, + 19.667097912629888, + 22.33911319410547, + 26.43747049030979, + 29.93813834621528, + 31.013963551878334, + 40.142389899248535, + 41.1651564379906, + 45.64506184943728, + 46.879943898864546, + 48.0797253461789, + 50.705012309033044, + 50.84071044121655, + 57.70725430280159, + 68.57418744741886, + 68.58107725938625, + 72.70768866258429, + 92.99412101769025, + 95.12572823056236, + 95.99488701263253, + 97.24554580049909, + 126.59604888992925, + 149.47511410949528, + 161.9213265975152, + 161.995077532154, + 182.17694494196357, + 215.46085105719214, + 250.46387761304942, + 254.9534750693205, + 290.06930633410354, + 321.32725172727805 + ], + [ + -17.744453205439033, + -16.84552285440667, + -13.549287562181325, + -5.531798824565826, + -3.098271468720661, + 7.115596334194316, + 9.09496773325605, + 9.711110370699188, + 10.025324537533004, + 12.250911317281117, + 13.565137883939045, + 14.826634031570856, + 18.19915335482759, + 19.315111508160182, + 19.713113442677308, + 22.3779348062595, + 26.537920302901945, + 29.79431076769214, + 30.987674362172886, + 40.25969282802091, + 40.961226623684745, + 45.666857179773636, + 46.94469820719699, + 48.06708905320567, + 50.566567744945566, + 50.73796967188811, + 57.51331491342932, + 68.50614949508663, + 68.6819733042792, + 72.52988786336408, + 93.25140910124172, + 95.22799967404106, + 96.19778937130046, + 97.25322935544756, + 125.56300641650472, + 148.93008817468765, + 161.8467524974547, + 162.22337058831036, + 182.11009397728134, + 215.24490991884255, + 250.71014198123808, + 255.6802874226228, + 289.56612730580866, + 322.7427174549892 + ], + [ + -17.721672804405248, + -16.82897900290578, + -13.610591660343546, + -5.499860267415013, + -3.1213175584093387, + 7.215299334234898, + 9.118499396764092, + 9.729959300860958, + 10.043247257811881, + 12.290829482923112, + 13.549140101508206, + 14.837941702909893, + 18.055632373627517, + 19.21069009612565, + 19.75840707359061, + 22.418486414095277, + 26.638034681257647, + 29.6512053411309, + 30.960982975267434, + 40.380032730849344, + 40.7431318642023, + 45.6957085507355, + 47.01082969936867, + 48.04724410574826, + 50.438486217926275, + 50.63618855030836, + 57.31607402782253, + 68.44546310096507, + 68.78083386880633, + 72.35684405643674, + 93.50939130274908, + 95.33068061632649, + 96.39563243153587, + 97.26725877300052, + 124.55931224220224, + 148.36029184263597, + 161.7673137584165, + 162.45809697633794, + 182.03170319791147, + 215.046467234251, + 250.94804667270998, + 256.39287648927416, + 289.04928230620067, + 324.20892422903756 + ], + [ + -17.69855386034473, + -16.812602754464837, + -13.671550704685046, + -5.467456309473954, + -3.1451011821238195, + 7.314849331401963, + 9.14175802374198, + 9.749120896294661, + 10.064023453476246, + 12.33160410109321, + 13.534533693402823, + 14.849260744791927, + 17.908953758985753, + 19.111254064935633, + 19.802827619590264, + 22.460857598167742, + 26.737913794390664, + 29.508747330930508, + 30.933887793428273, + 40.50309872501908, + 40.51164200154579, + 45.73104224287609, + 47.07835146015409, + 48.01922188524316, + 50.32174292344577, + 50.53537640994858, + 57.11565287175261, + 68.39196722300328, + 68.87758988085183, + 72.18857464030165, + 93.76769490636929, + 95.43371668967373, + 96.58818388843572, + 97.2880050399577, + 123.58820004202286, + 147.7665385705829, + 161.68362512789707, + 162.6985342220658, + 181.94138029677353, + 214.8644691149979, + 251.17794728227273, + 257.0913586988627, + 288.51969277558567, + 325.7264857818773 + ], + [ + -17.67509674361043, + -16.796437938775675, + -13.73210620020978, + -5.434587667278577, + -3.169630108888369, + 7.414153937677081, + 9.164696448885676, + 9.768579782892727, + 10.08755933348092, + 12.37324938386891, + 13.521373962376716, + 14.860451126038663, + 17.759677155533033, + 19.01647253473791, + 19.846288908090322, + 22.50513971902875, + 26.837663297466126, + 29.36685099658773, + 30.90638701822367, + 40.267613164462226, + 40.62860773250463, + 45.77227132886276, + 47.14726857725128, + 47.982141501479475, + 50.21723491061346, + 50.43554209977665, + 56.9121910897463, + 68.34549950159783, + 68.97217245522918, + 72.02508849134689, + 94.02588522885938, + 95.53705642138783, + 96.77521141610261, + 97.31582774950135, + 122.65252692666645, + 147.14965535609943, + 161.59630477036293, + 162.94410290093035, + 181.83877462855088, + 214.6977493064233, + 251.40021064612358, + 257.7758210323202, + 287.97834055236837, + 327.29569317317134 + ], + [ + -17.651301844507152, + -16.78053260792656, + -13.792195894300301, + -5.401255070442193, + -3.194911327878001, + 7.513113774711571, + 9.18726613640686, + 9.788321552364852, + 10.113741051479387, + 12.415780005064935, + 13.509717021848747, + 14.871360983294426, + 17.60835732259608, + 18.926001976992666, + 19.888720098169088, + 22.55142542789606, + 26.937394015389344, + 29.22542388481157, + 30.8784786588297, + 40.01197193073307, + 40.75630048566111, + 45.81881528067489, + 47.2175690689908, + 47.93531828631657, + 50.12568164401002, + 50.33669400172187, + 56.70584585149823, + 68.30589440880942, + 69.06451296542605, + 71.8663869370173, + 94.283461973423, + 95.64065340435734, + 96.95644679340965, + 97.35109812300395, + 121.75482859894073, + 146.51047747056268, + 161.50597076402468, + 163.19434344707807, + 181.72357739832225, + 214.5450561748576, + 251.6152106717382, + 258.4463260324331, + 287.42627234019204, + 328.91644297404645 + ], + [ + -17.627169574571457, + -16.76493945326276, + -13.85175334714048, + -5.3674592621271335, + -3.2209510184445524, + 7.611621613067659, + 9.209417355275686, + 9.808333154333127, + 10.142434601043508, + 12.45921112248525, + 13.499619555695393, + 14.881825502259016, + 17.455522547995255, + 18.839518723283607, + 19.930056252050576, + 22.599808138964214, + 27.037221483120376, + 29.084370469699916, + 30.850160542122094, + 39.74570488662711, + 40.88593802334277, + 45.870113419768906, + 47.2892005066461, + 47.878387398528, + 50.047524744438164, + 50.23884004703996, + 56.49679073136969, + 68.27298154878315, + 69.15454311551527, + 71.71246454126938, + 94.53985510784591, + 95.74446990532903, + 97.13146482236561, + 97.39430585869016, + 120.89737316812942, + 145.84984340573465, + 161.41323772267543, + 163.44889712148867, + 181.59552033116898, + 214.40508128092128, + 251.82332407740057, + 259.10291678698013, + 286.8646002534278, + 330.5881673426792 + ], + [ + -17.602700368053277, + -16.749716249766635, + -13.910707474431689, + -5.3332009996155065, + -3.2477545242717896, + 7.709561421108006, + 9.23109938977829, + 9.82860332464951, + 10.173485945559777, + 12.503558401524812, + 13.49113853958055, + 14.891665902743675, + 17.30166283051914, + 18.756734746652338, + 19.970235971784017, + 22.650381475064528, + 27.137265305518213, + 28.943595219527037, + 30.82143032451359, + 39.469852331643544, + 41.01729862073282, + 45.92563333949524, + 47.36199664988852, + 47.811452295013055, + 49.98285282952713, + 50.141987731695096, + 56.28521438900816, + 68.24658411300025, + 69.24219501197265, + 71.56330972527579, + 94.79441911714191, + 95.84848316316166, + 97.29907689004961, + 97.44664988905731, + 120.08221375416687, + 145.1685901046488, + 161.3187135562234, + 163.7074904999427, + 181.45437317167134, + 214.27648878938925, + 252.02492600461414, + 259.7456218104312, + 286.29449908224444, + 332.3097662708936 + ], + [ + -17.5778946836573, + -16.734926323422357, + -13.968982066895128, + -5.298481054999628, + -3.2753263319611827, + 7.8068073217858895, + 9.252260786963244, + 9.849123044477281, + 10.20672140655132, + 12.548838040140534, + 13.48433092285045, + 14.900688587537564, + 17.147225626685376, + 18.677404106919166, + 20.009200892971183, + 22.703238700747992, + 27.23764829169457, + 28.803005161062917, + 30.792285505505674, + 39.18550480155336, + 41.150175101549266, + 45.98487551701304, + 47.43536300927627, + 47.73542520941555, + 49.93137539255906, + 50.046144130905944, + 56.07131908584986, + 68.22651749597468, + 69.32740123513477, + 71.41890524748374, + 95.04642305251686, + 95.95269703742449, + 97.45149842515764, + 97.51585381461391, + 119.31123992246044, + 144.46754854501344, + 161.22299637898266, + 163.96992292236666, + 181.29994040336004, + 214.1579449306267, + 252.22038549491234, + 260.37445978813315, + 285.71720088129706, + 334.07954250075966 + ], + [ + -17.55275300662252, + -16.720639033992455, + -14.026495294066649, + -5.263300216019427, + -3.3036700542718354, + 7.903222460172306, + 9.272849641977343, + 9.869886019156038, + 10.241948328567478, + 12.595066795198182, + 13.479253270807579, + 14.908684526148283, + 16.992616708426453, + 18.601323741489313, + 20.046895786807752, + 22.758472158522395, + 27.338495309713135, + 28.66251200406178, + 30.762723442923686, + 38.89380121799802, + 41.28437248731527, + 46.047375215844966, + 47.50583590412539, + 47.654435354642615, + 49.8924554251993, + 49.951315913002446, + 55.85531907831883, + 68.21258807405123, + 69.41009491007853, + 71.27922855711593, + 95.2950303298866, + 96.05716511039418, + 97.55202503077172, + 97.63847138069522, + 118.58622783977694, + 143.74753970777974, + 161.12667157513505, + 164.23605642422945, + 181.13205758565346, + 214.04814671516866, + 252.41006082426125, + 260.9894441585316, + 285.13398744528865, + 335.895139814573 + ], + [ + -17.52727585124711, + -16.706930261597403, + -14.083159203894493, + -5.2276592870820355, + -3.3327884181463814, + 7.99865779177586, + 9.292813921643631, + 9.890889157666448, + 10.278956031411326, + 12.642262010199888, + 13.475961368142093, + 14.915428955210338, + 16.83820406249394, + 18.528331043951102, + 20.083268877922187, + 22.8161727249198, + 27.43993179683408, + 28.52203388065997, + 30.732741369833892, + 38.595927701843884, + 41.419705944732534, + 46.112702577587655, + 47.52414609540286, + 47.618683976258666, + 49.85750935278174, + 49.86519056580964, + 55.63743893391385, + 68.20459215329736, + 69.49020977673614, + 71.14425204145618, + 95.53925293872567, + 96.16204060754458, + 97.62967961726005, + 97.7852200122702, + 117.9088888373484, + 143.00937098239334, + 161.03030902654027, + 164.50580775126494, + 180.95058769552568, + 213.94584910011383, + 252.5942945939034, + 261.590587525955, + 284.5461811983276, + 337.75348557198805 + ], + [ + -17.501463764008093, + -16.693882880256176, + -14.138879234841069, + -5.19155909051413, + -3.362683257553245, + 8.09295081255928, + 9.312101825919608, + 9.912133021638724, + 10.317517051418724, + 12.690441644375205, + 13.47450978537518, + 14.92068148673074, + 16.684323338019006, + 18.458299859514593, + 20.118272225158524, + 22.87642930291372, + 27.54208184816289, + 28.381496746882984, + 30.70233641315703, + 38.29311633762147, + 41.55599899820601, + 46.1804615849377, + 47.43653153885594, + 47.6830262399774, + 49.76473034459334, + 49.84851822890668, + 55.41791182120119, + 68.20231509113583, + 69.5676802590404, + 71.01394317719843, + 95.77783675862354, + 96.2676964303482, + 97.71059408920777, + 97.9295794577819, + 117.28091578266232, + 142.2538330226455, + 160.9344605026659, + 164.77914212708131, + 180.7554178165281, + 213.8498899052976, + 252.77340863660706, + 262.1779058989761, + 283.9551350238322, + 339.65073858936444 + ], + [ + -17.47531732747982, + -16.68158719494261, + -14.193553763729595, + -5.155000468112493, + -3.3933555110631395, + 8.185924267324131, + 9.330662186178975, + 9.933622196120265, + 10.357388663020881, + 12.73962430310532, + 13.474951411372729, + 14.924186722249816, + 16.531283880347274, + 18.391135916439453, + 20.15186209345019, + 22.939328366060497, + 27.64506579228871, + 28.240835486853943, + 30.671505614032803, + 37.98664341119496, + 41.69308198021803, + 46.250288385398235, + 47.32977477939345, + 47.76183088890849, + 49.67298441545498, + 49.84131823849674, + 55.19697782939724, + 68.20553059775665, + 69.64244153298657, + 70.88826459820102, + 96.00893877389665, + 96.37505446500623, + 97.79714559839287, + 98.06863649087761, + 116.70402629235275, + 141.48169707336876, + 160.83965721724292, + 165.05606850528457, + 180.5464564703461, + 213.75921181766697, + 252.94769865240494, + 262.751422755154, + 283.3622215132899, + 341.58224360107306 + ], + [ + -17.44883716534244, + -16.670141310643864, + -14.247073720565075, + -5.117984283086776, + -3.4248052239531077, + 8.277384895238601, + 9.34844489864912, + 9.955365511396849, + 10.398314660302258, + 12.789829269618041, + 13.477336956250921, + 14.925675473970479, + 16.37937479362328, + 18.326772279128228, + 20.183999277477277, + 23.004953567543552, + 27.748997145981985, + 28.099994754260575, + 30.64024595005437, + 37.67782684886993, + 41.830790697269364, + 46.32184930944487, + 47.215974813302935, + 47.84412598146676, + 49.5822767385986, + 49.84249480082133, + 54.97488237816897, + 68.21400021989923, + 69.7144295934187, + 70.76717409201953, + 96.22909117519892, + 96.48662909337762, + 97.889222106587, + 98.20180233669183, + 116.1800013558145, + 140.69371278789671, + 160.74640754542625, + 165.33663608653643, + 180.32363181825528, + 213.67288097006045, + 253.11742860990603, + 263.3111729248913, + 282.7688221101723, + 343.5424937409878 + ], + [ + -17.42202394888963, + -16.65965139239415, + -14.29932231094376, + -5.080511422525417, + -3.457031554506719, + 8.36712230118917, + 9.365401390914448, + 9.977376014787007, + 10.440027366257935, + 12.841076537850169, + 13.481714430254016, + 14.92486669141795, + 16.228870748152236, + 18.26516512280812, + 20.214649353668246, + 23.07338542413022, + 27.853978821015236, + 27.95892958105184, + 30.608554359558536, + 37.368022762942175, + 41.96896529374042, + 46.39483879944899, + 47.097381269599566, + 47.9287095657462, + 49.492612147992034, + 49.85103107327261, + 54.75187478458161, + 68.22747301540237, + 69.78358131948454, + 70.65062453234047, + 96.42984079452856, + 96.60989633656322, + 97.98614369597517, + 98.32887832158627, + 115.71071740384197, + 139.8906065360406, + 160.65519490128762, + 165.62093192964406, + 180.08689089032697, + 213.59010165808732, + 253.2828248382277, + 263.85720630331895, + 282.17631656577413, + 345.5251026013963 + ], + [ + -17.394878405627516, + -16.65023176460431, + -14.350174897138704, + -5.0425828005719495, + -3.4900327840274867, + 8.454908080267352, + 9.38148511932773, + 9.999670552793482, + 10.482249825660933, + 12.893386846314053, + 13.488128605375435, + 14.921470182639288, + 16.080037417770846, + 18.206289954341223, + 20.243782846769893, + 23.144701081227346, + 27.817605778862262, + 27.96009843433085, + 30.57642776829791, + 37.058621161364684, + 42.107449299713664, + 46.46897738120023, + 46.97522347471995, + 48.015290697251196, + 49.40399515460134, + 49.86601831017302, + 54.5282070628896, + 68.24568541856972, + 69.84983453862122, + 70.53856375831704, + 96.59479528280463, + 96.76025706267392, + 98.0869324723225, + 98.44977939033956, + 115.29816929097724, + 139.07308021852273, + 160.56647576928845, + 165.9090795173874, + 179.8361999244405, + 213.51022694844542, + 253.44406988506503, + 264.3895913794699, + 281.5860731179156, + 347.5227875916127 + ], + [ + -17.36740133082944, + -16.642004786863566, + -14.39949909982244, + -5.004199362582602, + -3.523806329923138, + 8.540495369827315, + 9.396652095626226, + 10.02226877793702, + 10.524698126633755, + 12.9467817127222, + 13.496620467500168, + 14.91519020086481, + 15.933136527984454, + 18.15013830354823, + 20.271375304284668, + 23.218974160948783, + 27.676000155662383, + 28.067422547969826, + 30.543863118983385, + 36.751041014238034, + 42.24608885217943, + 46.5440097515277, + 46.85041568344795, + 48.10377328710596, + 49.31642996547082, + 49.88666574934105, + 54.30413304644339, + 68.26836130068941, + 69.9131280890128, + 70.43093440888661, + 96.72331698888894, + 96.93735310849775, + 98.19038244451117, + 98.56446706781057, + 114.94448117427969, + 138.24181059563978, + 160.48067788399914, + 166.20123817100406, + 179.5715458307757, + 213.4327650213623, + 253.60129609190756, + 264.9084185852204, + 280.99943973023977, + 349.52736637530273 + ], + [ + -17.339593603328296, + -16.63510043294227, + -14.447155192411365, + -4.965362090668716, + -3.5583487610222844, + 8.623619056217766, + 9.410861442275417, + 10.045191344442102, + 10.567083787025256, + 13.001283468990342, + 13.507226667543026, + 14.905729939889374, + 15.78843054271465, + 18.096714857113856, + 20.297407277893264, + 23.296274690702752, + 27.534100567384176, + 28.17598963757023, + 30.5108574044651, + 36.446724992787566, + 42.384732081527936, + 46.61970301668931, + 46.723694318618115, + 48.19412006372913, + 49.22992050719333, + 49.91229802175678, + 54.07990794231116, + 68.29521222359031, + 69.97340188044156, + 70.32767371914234, + 96.83459735234655, + 97.1210032851311, + 98.29509716200185, + 98.67292726665825, + 114.65190203475275, + 137.39744913848943, + 160.3981985502403, + 166.49760323219542, + 179.29293872703917, + 213.35738123471472, + 253.75457887806692, + 265.4138034559368, + 280.41773668247816, + 351.529768212491 + ], + [ + -17.31145620749301, + -16.629655491833685, + -14.492996867248678, + -4.926072011226222, + -3.5936558140239803, + 8.703996914138431, + 9.424075978374447, + 10.068457010762696, + 10.609116135305175, + 13.056915296038595, + 13.51997898031568, + 14.892796943700942, + 15.646187033728433, + 18.046034983528074, + 20.321864215901954, + 23.376669105764066, + 27.39190582241748, + 28.285801558843637, + 30.47740770574063, + 36.14713431045208, + 42.52322865720692, + 46.59566538817325, + 46.695845091120155, + 48.28631276790041, + 49.144470456067694, + 49.94234566511991, + 53.85578846364088, + 68.32593788255573, + 70.03059695350541, + 70.22871329325598, + 96.93902632097863, + 97.29984451993104, + 98.39952979857571, + 98.77516117439095, + 114.4227828250109, + 136.54062244181327, + 160.31940309751235, + 166.79840695222106, + 179.0004154346671, + 213.28389606774527, + 253.903929826267, + 265.9058895977094, + 279.84225076616667, + 353.52006203715865 + ], + [ + -17.2829902644023, + -16.625812306869566, + -14.536872454579624, + -4.8863302053883775, + -3.6297224096239638, + 8.78133199142969, + 9.436262841697994, + 10.092078339817393, + 10.650504612609728, + 13.11370125750342, + 13.534903779408, + 14.876109388663988, + 15.50668277325576, + 17.99812259014136, + 20.344736274779184, + 23.460220315577118, + 27.249425455388042, + 28.396813253036456, + 30.44351123663417, + 35.85374420014731, + 42.661429487598035, + 46.46683047822428, + 46.772243250419315, + 48.38033610108379, + 49.060083278451614, + 49.976332631259005, + 53.63203374033759, + 68.36022672723459, + 70.08465553715763, + 70.13397886067969, + 97.04000373866516, + 97.46953094255845, + 98.50203599125649, + 98.87118083583383, + 114.25953319295922, + 135.6719332234317, + 160.24462345878098, + 167.10392004407154, + 178.69404377130832, + 213.21227915702102, + 254.0492895261682, + 266.38485144797477, + 279.2742312343456, + 355.4875029514975 + ], + [ + -17.25419707699921, + -16.62371697434143, + -14.578626668105562, + -4.8461378238744315, + -3.6665426662932776, + 8.855316548343511, + 9.447394158102904, + 10.116055703531176, + 10.690960923320716, + 13.171666330941799, + 13.552021534974587, + 14.855403141500078, + 15.37020757315208, + 17.953008254654524, + 20.36601806097227, + 23.54698782075373, + 27.10667938582507, + 28.508920411213094, + 30.40916539806111, + 35.56804065069524, + 42.799186569798586, + 46.337605437445546, + 46.84872282252198, + 48.47616863679604, + 48.976762286688384, + 50.01386317648687, + 53.408907299599754, + 68.39775674478304, + 70.0433900350701, + 70.13552110454029, + 97.13871386208382, + 97.62796950882183, + 98.60094219700974, + 98.96100667975182, + 114.16455760581293, + 134.7919619918137, + 160.17415686779412, + 167.4144538704459, + 178.37392743742578, + 213.1426397967154, + 254.19052026514936, + 266.85089682024994, + 278.7148876187659, + 357.42059865767965 + ], + [ + -17.225078197043747, + -16.6235169397866, + -14.618102931143934, + -4.8054961086327745, + -3.7041099087675744, + 8.925637787539795, + 9.457447777515256, + 10.140369388775245, + 10.73020096642901, + 13.23083643424877, + 13.571346338402694, + 14.83043943647893, + 15.237067866204683, + 17.910727578706414, + 20.38570831631263, + 23.63702786566755, + 26.963697476666177, + 28.621944816016573, + 30.374367846578455, + 35.291519084489885, + 42.93635298470704, + 46.20833531942351, + 46.925125994043924, + 48.57377540037334, + 48.89451071920822, + 50.05460942309186, + 53.18668055807241, + 68.43819637450727, + 69.95686009636979, + 70.18313842713822, + 97.23561237449944, + 97.77384255530023, + 98.69462789623324, + 99.04466587081946, + 114.14017343223504, + 133.9012694937021, + 160.10826466362892, + 167.7303632475031, + 178.040211262123, + 213.07521433923662, + 254.32739864824003, + 267.304269207239, + 278.1653894311466, + 359.3071970175269 + ], + [ + -17.195635527052893, + -16.625357960290433, + -14.65514630186176, + -4.7644064253029965, + -3.7424166666935377, + 8.991985436784432, + 9.466408106349832, + 10.164969801318168, + 10.76794648897696, + 13.29123844345397, + 13.592885452527339, + 14.801012955181358, + 15.107589988107287, + 17.871319718156997, + 20.40380956144955, + 23.730393610392518, + 26.82051900763633, + 28.735617122669264, + 30.339116585002657, + 35.02568566018105, + 43.072783032110216, + 46.07930669626818, + 47.00131070219214, + 48.673099742133594, + 48.81333185887762, + 50.098300158442505, + 52.965638520514304, + 68.4812055131777, + 69.87429582981123, + 70.227453627231, + 97.33087184972507, + 97.9061711108219, + 98.78161615464201, + 99.12219087846316, + 114.18851675337757, + 133.00040014143863, + 160.0471711975158, + 168.0520498558304, + 177.69308655324264, + 213.01035099887486, + 254.45960822622985, + 267.74524982179895, + 277.6268676953431, + 361.1345954990255 + ], + [ + -17.1658714803332, + -16.62938044411403, + -14.689606963178424, + -4.722870313505211, + -3.7814546559259496, + 9.054060950102627, + 9.474267079098443, + 10.189766095939508, + 10.803926415879848, + 13.352900195248147, + 13.616638876472695, + 14.766960037724898, + 14.982123073277089, + 17.834826051843443, + 20.420327711977546, + 23.82713530526592, + 26.677192078560367, + 28.849556972102203, + 30.303410088366988, + 34.77206177987615, + 43.20833249866848, + 45.95075784459663, + 47.07714957326809, + 48.73322921347361, + 48.77405274752304, + 50.144710994558956, + 52.74608881541544, + 68.52643653827408, + 69.79559747498455, + 70.2684142286647, + 97.42453552676517, + 98.02416890991756, + 98.86066382845169, + 99.19361784466878, + 114.31144454486873, + 132.08988676138782, + 159.99106283270405, + 168.37996625244267, + 177.33279628918868, + 212.9484926255588, + 254.5867323330957, + 268.17415931864815, + 277.10041817688386, + 362.8896727146581 + ], + [ + -17.13578924135954, + -16.635715228265735, + -14.721344174476714, + -4.680889567689328, + -3.8212147292944896, + 9.111587688610168, + 9.48102532449621, + 10.214614014699931, + 10.83787782700652, + 13.41585046217587, + 13.642598896450611, + 14.728166712686226, + 14.861041427160337, + 17.801288957370847, + 20.435271681328725, + 23.927300451331536, + 26.533772958708102, + 28.963250622598007, + 30.267247488781162, + 34.532192089346424, + 43.34285904962448, + 45.82288714508005, + 47.15252885185816, + 48.65420680042737, + 48.87649809252284, + 50.193655734810555, + 52.52837596917432, + 68.57353524052417, + 69.72065887670813, + 70.30596920600983, + 97.5165767666997, + 98.12718957603941, + 98.93084075612822, + 99.25898452832043, + 114.5104433322655, + 131.1702572767596, + 159.940087031486, + 168.71462047919977, + 176.95963989390512, + 212.89015802037355, + 254.7082473219739, + 268.5913591214035, + 276.5871061109625, + 364.5590415592499 + ], + [ + -17.105393207811616, + -16.644478893317935, + -14.750230504530277, + -4.6384663728595195, + -3.8616867721330888, + 9.164321001639422, + 9.486693586214475, + 10.239304227032143, + 10.869546572002218, + 13.48011887750902, + 13.670749559025806, + 14.684576212634362, + 14.744746191250778, + 17.770750668600606, + 20.448652983299713, + 24.030933929601407, + 26.390325399984896, + 29.07602685933915, + 30.2306288628921, + 34.307655655810734, + 43.47622273209951, + 45.695859983044166, + 47.22734723082257, + 48.576269613629, + 48.98022911276295, + 50.244978579024924, + 52.31290422979834, + 68.62214147844755, + 69.64936799934505, + 70.34006903208629, + 97.60692201360833, + 98.21470903084125, + 98.99158738039415, + 99.31832793503288, + 114.78655345266488, + 130.24204445586366, + 159.89435152288357, + 169.0565812595459, + 176.57397734807776, + 212.83592238063522, + 254.82351651219247, + 268.9972522035117, + 276.0879721837014, + 366.12922265619306 + ], + [ + -17.074689780452125, + -16.655768705436895, + -14.776156089510083, + -4.595603544434448, + -3.9028594929848386, + 9.212056796480107, + 9.491294433122789, + 10.263552908368156, + 10.898687535397967, + 13.545735763363082, + 13.701065929852808, + 14.633666099835908, + 14.636195655063336, + 17.743252194863608, + 20.460485345421695, + 24.138078080346865, + 26.246919935452993, + 29.187032958500485, + 30.193555707434317, + 34.10007891179748, + 43.6082865743054, + 45.569814403891854, + 47.301514420376016, + 48.49942442370414, + 49.08493250009254, + 50.29854651530144, + 52.100174924278676, + 68.67188921809615, + 69.58160811325752, + 70.37066572396546, + 97.69545536677283, + 98.28632494275325, + 99.0427427753224, + 99.37168211106703, + 115.14031406087982, + 129.3058009403494, + 159.85392354603292, + 169.40648376284463, + 176.176232424253, + 212.78639743522515, + 254.93178523972037, + 269.39228302149365, + 275.6040395540575, + 367.5868359218346 + ], + [ + -17.043688866314064, + -16.669657134166865, + -14.79903260209088, + -4.552304979472933, + -3.944720002000838, + 9.254637166938702, + 9.494864187731798, + 10.286996505783707, + 10.925064588495012, + 13.612731761357395, + 13.733512831542699, + 14.528257205426534, + 14.58310163559802, + 17.718832286552797, + 20.47078434246855, + 24.248772707275243, + 26.103633193413007, + 29.295214127616322, + 30.15603178118032, + 33.91114715141067, + 43.738917261079536, + 45.444865744727906, + 47.37494913373859, + 48.423681225661575, + 49.19012838067422, + 50.35424065558534, + 51.8908496197199, + 68.72240531277936, + 69.5172602684522, + 70.3977128874631, + 97.78200812370439, + 98.34176981910782, + 99.08453972560544, + 99.4190766981628, + 115.57172684776603, + 128.36212413711982, + 159.8188291658587, + 169.76503589625946, + 175.7668948664105, + 212.74221178774414, + 255.03217750170498, + 269.776935978052, + 275.1363218994969, + 368.91880709836335 + ], + [ + -17.012406975171668, + -16.686185403658396, + -14.818796594015158, + -4.50857657434832, + -3.9872529217669235, + 9.291952181765746, + 9.497454697501736, + 10.309192483779672, + 10.948450289860839, + 13.68113702751947, + 13.768042322177214, + 14.429001806854307, + 14.5254446545438, + 17.697526435737426, + 20.479567057397045, + 24.363054962330477, + 25.96054727856706, + 29.39930219515876, + 30.11806471535487, + 33.742608700438154, + 43.86798586123236, + 45.32111043170915, + 47.44757577963673, + 48.3490560365606, + 49.295067154007505, + 50.41194372882775, + 51.68586131181773, + 68.77330566403289, + 69.45620837826961, + 70.42116576022123, + 97.86632603758261, + 98.38094500463436, + 99.11756918568938, + 99.46053653354382, + 116.08022539198184, + 127.41170123221501, + 159.7890526576948, + 170.13302504028695, + 175.34652139785922, + 212.7039919440711, + 255.12369485197794, + 270.1517309756272, + 274.6858331491217, + 370.1125851512377 + ], + [ + -16.980874288080674, + -16.705354013114437, + -14.835411897591502, + -4.46442828868844, + -4.0304383506332035, + 9.323938246501077, + 9.499133847060964, + 10.329627285909755, + 10.968625422577151, + 13.750979360737198, + 13.804587926684547, + 14.336408031860893, + 14.463452747857817, + 17.679365903820223, + 20.48685177504555, + 24.480959008695407, + 25.817749332337648, + 29.497821997030304, + 30.079669392159758, + 33.596262498109944, + 43.99536857584157, + 45.19862910422818, + 47.51931812520505, + 48.27557677381852, + 49.39854419496389, + 50.47151629990699, + 51.486619821856436, + 68.82418563752213, + 69.39835000894084, + 70.44098125343842, + 97.94798760299773, + 98.40400231845652, + 99.14272141057056, + 99.49608204890689, + 116.66461766761724, + 126.4553995807797, + 159.76453595981724, + 170.51132506830055, + 174.9157355290172, + 212.67234440227205, + 255.20521826322707, + 270.5172124385864, + 274.2536016365963, + 371.1563654872092 + ], + [ + -16.94915319632414, + -16.727102969036594, + -14.848870845237286, + -4.4198794631622675, + -4.074246570921688, + 9.35057572914287, + 9.499982237592734, + 10.347731890118773, + 10.985378483137938, + 13.822279327849575, + 13.843049388599834, + 14.251015820878386, + 14.397436073136621, + 17.664376771136094, + 20.492657712117364, + 24.602515163001826, + 25.675331582909042, + 29.589125153908036, + 30.040875911062205, + 33.473916636522354, + 44.120947464917556, + 45.077489206678536, + 47.59008510346231, + 48.20329703523551, + 49.498553854810396, + 50.53273778816997, + 51.2954137752711, + 68.87459669538381, + 69.34362087714275, + 70.45711799232782, + 98.0261882946856, + 98.41155848626251, + 99.16111379172096, + 99.52572990234067, + 117.3229218790268, + 125.49447267139456, + 159.7451781928988, + 170.90090329516843, + 174.47522632713134, + 212.64783913261473, + 255.27551384700885, + 270.87392138920103, + 273.84069808762456, + 372.0393131622627 + ], + [ + -16.91739763777986, + -16.751252527247775, + -14.859194182112853, + -4.3749754870467, + -4.1186214060979065, + 9.371891594887657, + 9.500081186541061, + 10.362904375776125, + 10.998505263290744, + 13.88324365747932, + 13.89503504346523, + 14.173433286899837, + 14.327799687725642, + 17.652579005788223, + 20.49700478538298, + 24.727747414603225, + 25.533393000417618, + 29.671454924601782, + 30.001751576649145, + 33.377304667609444, + 44.244611074899765, + 44.95774719574706, + 47.65973291164404, + 48.13233363047376, + 49.59162847393827, + 50.5951143931086, + 51.11626125241487, + 68.92398559288397, + 69.29205667464036, + 70.46953635541267, + 98.09908710829174, + 98.40534612950243, + 99.17401549166352, + 99.54949335457918, + 118.05185571296707, + 124.5311118874236, + 159.73083524951747, + 171.3028263867473, + 174.02574690266576, + 212.63099466405035, + 255.3332433386194, + 271.2223147238288, + 273.4483122378316, + 372.75177960037377 + ], + [ + -16.88611262442549, + -16.777245037195062, + -14.866429685663899, + -4.329859368116061, + -4.16340867443308, + 9.387974820945205, + 9.499485697437407, + 10.374538056603315, + 11.007808690712208, + 13.924689383249198, + 13.969157907287794, + 14.10453620979837, + 14.25510319316172, + 17.643985550989054, + 20.499913418711618, + 24.856663697514673, + 25.392048196454358, + 29.743009284157743, + 29.96247731823604, + 33.30795192181316, + 44.366254716566566, + 44.83945066023182, + 47.727937310816415, + 48.06299395017324, + 49.67161240436672, + 50.65698040027468, + 50.95703257545511, + 68.97151359476295, + 69.24397473667618, + 70.47819851272997, + 98.16149861564631, + 98.39051823306316, + 99.18277700360976, + 99.56738219672465, + 118.84501490637457, + 123.57030024473896, + 159.72131945505456, + 171.71826122486073, + 173.5681163452766, + 212.62226492167565, + 255.37698026580497, + 271.5624705826723, + 273.07803816263305, + 373.285505968821 + ], + [ + -16.858108303398776, + -16.802193396615213, + -14.87064964161087, + -4.285349666663728, + -4.2077782774597905, + 9.399007878272801, + 9.498180674907712, + 10.38205307766891, + 11.013099114627368, + 13.964875362155789, + 14.043971986656649, + 14.04718076335371, + 14.180554610331416, + 17.638601431745517, + 20.50140438849133, + 24.989185918991847, + 25.251496579544327, + 29.80173675894211, + 29.92373638261343, + 33.2669991570299, + 44.485778472608544, + 44.72264230012651, + 47.79357439751071, + 47.996394898916854, + 49.72781374981927, + 50.70798331815949, + 50.83881202876951, + 69.01539839645457, + 69.20063284007804, + 70.48306846306625, + 98.19756587835329, + 98.38297089769281, + 99.18876989762508, + 99.57940228670587, + 119.68396001383051, + 122.62874407429535, + 159.71639930482036, + 172.14843830733741, + 173.1032571688205, + 212.62202788126447, + 255.40523261043847, + 271.8924350459853, + 272.73351218701237, + 373.6338062764898 + ], + [ + -16.854760942604358, + -16.804623468323307, + -14.871947433675405, + -4.2641787739409205, + -4.228985943080217, + 9.405300210211118, + 9.496035807274176, + 10.384928939401085, + 11.014195234182896, + 13.974100540658538, + 14.031343054900072, + 14.090053267929363, + 14.13416237828176, + 17.636422882894305, + 20.501498706205208, + 25.106014364458908, + 25.13115716337182, + 29.841477674867598, + 29.890771420055295, + 33.25501436614618, + 44.602385322500304, + 44.60806338563039, + 47.84886567084377, + 47.94031756571771, + 49.74439358838614, + 50.69606099135938, + 50.82953057690979, + 69.04994482139637, + 69.16719903966508, + 70.48411207030931, + 98.18260344431692, + 98.40749531193291, + 99.19333920632705, + 99.58555484815638, + 120.45447770100154, + 121.81861410548147, + 159.71579928449157, + 172.58905290638725, + 172.63779253154996, + 212.6305760274752, + 255.41647246813935, + 272.1813307677902, + 272.44728217152505, + 373.7917235127691 + ], + [ + -16.854760942604358, + -16.804623468323307, + -14.871947433675405, + -4.2641787739409205, + -4.228985943080217, + 9.405300210211118, + 9.496035807274176, + 10.384928939401085, + 11.014195234182896, + 13.974100540658538, + 14.031343054900072, + 14.090053267929363, + 14.13416237828176, + 17.636422882894305, + 20.501498706205208, + 25.106014364458908, + 25.13115716337182, + 29.841477674867598, + 29.890771420055295, + 33.25501436614618, + 44.602385322500304, + 44.60806338563039, + 47.84886567084377, + 47.94031756571771, + 49.74439358838614, + 50.69606099135938, + 50.82953057690979, + 69.04994482139637, + 69.16719903966508, + 70.48411207030931, + 98.18260344431692, + 98.40749531193291, + 99.19333920632705, + 99.58555484815638, + 120.45447770100154, + 121.81861410548147, + 159.71579928449157, + 172.58905290638725, + 172.63779253154996, + 212.6305760274752, + 255.41647246813935, + 272.1813307677902, + 272.44728217152505, + 373.7917235127691 + ], + [ + -16.876369312815015, + -16.786510335971936, + -14.866920714741129, + -4.323559196949791, + -4.169460340507659, + 9.389381538210406, + 9.496881526930625, + 10.371968855777954, + 11.009098518338465, + 13.958321466607886, + 13.974749548896265, + 14.073383294389005, + 14.251330021276658, + 17.645286383747816, + 20.50093523765303, + 24.85879138872372, + 25.392261787755118, + 29.75730350680202, + 29.94755190787851, + 33.30361968280183, + 44.37557660612519, + 44.826994729056025, + 47.71673136071848, + 48.075141159618504, + 49.66968529850251, + 50.77724272724174, + 50.84089682250638, + 68.96179949812561, + 69.25011222899232, + 70.47977013071336, + 98.22799501359715, + 98.32383053219675, + 99.18192766881207, + 99.5612554304758, + 118.44462700286947, + 123.97181712702617, + 159.7181046506653, + 171.68892083612675, + 173.6371109121474, + 212.6023956055635, + 255.37029584984325, + 271.5594614973468, + 273.0679234086267, + 373.18582579001134 + ], + [ + -16.956595005512092, + -16.717105876699858, + -14.851371330251313, + -4.420338399007305, + -4.073133386733488, + 9.369361040659808, + 9.483009606426185, + 10.335396176678778, + 10.985384035080994, + 13.812336014541655, + 13.922200229929247, + 14.178546330549503, + 14.419812129424658, + 17.666998464045925, + 20.4950606472525, + 24.590552914173898, + 25.69365838555741, + 29.671216021267686, + 29.95614705810178, + 33.46025642036566, + 44.151461327149164, + 45.03955865085985, + 47.588687646249085, + 48.206681518724984, + 49.42399653796312, + 50.9144577522831, + 50.992499833371845, + 68.87820726281244, + 69.32363621300242, + 70.45975732895634, + 97.98681062436383, + 98.45289491287504, + 99.18516026993693, + 99.51269831017456, + 116.4301744611744, + 126.3392928466028, + 159.73211690853927, + 170.77163807727055, + 174.73117683338853, + 212.6135751471738, + 255.23906530717255, + 271.034188712704, + 273.68067477447704, + 371.834690880328 + ], + [ + -17.044276770201538, + -16.646389614280604, + -14.82645086941235, + -4.519349256974977, + -3.9750662327556068, + 9.34552325608052, + 9.455200050295735, + 10.275986326396154, + 10.94212269145669, + 13.651826448649707, + 13.921241741717756, + 14.289064815391404, + 14.595992043087179, + 17.701054950907885, + 20.48403680565654, + 24.327119946880696, + 26.010291494891042, + 29.58324105034083, + 29.92902291668403, + 33.706667215266066, + 43.93354948785651, + 45.24198965914858, + 47.46478638356183, + 48.335241555806086, + 49.1038317683316, + 51.140085109140074, + 51.155328322358955, + 68.79671523465537, + 69.3859478307244, + 70.42385397492575, + 97.68449903405438, + 98.57178891703728, + 99.20990144394665, + 99.43937947942602, + 114.4188464627829, + 128.88073468164646, + 159.75405465539305, + 169.84548772415295, + 175.93444160707662, + 212.663342879444, + 255.01403934773168, + 270.6071920439577, + 274.29413152738056, + 369.78259729545437 + ], + [ + -17.13823003288054, + -16.574381228168097, + -14.793296482129817, + -4.620464299240095, + -3.875276639775843, + 9.318158527226005, + 9.41387473204612, + 10.196578869298538, + 10.878889250733657, + 13.497815757431265, + 13.952273708616847, + 14.404188066188034, + 14.780336565684006, + 17.746727417776835, + 20.4680278936169, + 24.069287897186232, + 26.34205992563288, + 29.493409691370097, + 29.880339208723832, + 34.02206204519736, + 43.72190932510619, + 45.43395907563542, + 47.344987603886835, + 48.461357804116425, + 48.760312040710296, + 51.31773371274266, + 51.41446851519481, + 68.71453019428154, + 69.43550875278243, + 70.37187315228475, + 97.32550637559618, + 98.67914071430488, + 99.26147426823754, + 99.34046363920153, + 112.41828989750451, + 131.5479152411691, + 159.77946089538833, + 168.91747982869137, + 177.262569969995, + 212.74905433314794, + 254.69020793548253, + 270.2755291523284, + 274.91783745532456, + 367.09971501999235 + ], + [ + -17.237370754251376, + -16.501086148534373, + -14.752961317069898, + -4.723558302148686, + -3.773777026756799, + 9.287549556326788, + 9.359151968018001, + 10.101397830292827, + 10.795975218110211, + 13.354065074859058, + 14.0111024126386, + 14.523168483940674, + 14.973355007412293, + 17.803043346677992, + 20.447203159794945, + 23.81788840051918, + 26.688755108170405, + 29.401763548021787, + 29.821559359141617, + 34.387876691447076, + 43.51658414155239, + 45.61502776000766, + 47.229239392826884, + 48.412195245775074, + 48.58571521070987, + 51.49286841945258, + 51.705603844498654, + 68.62851514072327, + 69.47103680658434, + 70.30366187162154, + 96.91406994772238, + 98.77412664019531, + 99.21443071868542, + 99.34405304517499, + 110.43749467517941, + 134.28350501549127, + 159.80322981771158, + 167.9943990340612, + 178.72863216291304, + 212.8661844869227, + 254.26741304394636, + 270.03121955443476, + 275.56171752548306, + 363.8766108967634 + ], + [ + -17.340737424204093, + -16.4265080722205, + -14.706379941137426, + -4.82850394314733, + -3.670579477401521, + 9.253896395140357, + 9.2910146040801, + 9.995247815018002, + 10.694546159489002, + 13.223164878310385, + 14.093220947165431, + 14.645263714962264, + 15.175600944180859, + 17.86876852997166, + 20.421741010120122, + 23.573812992958526, + 27.050048466702872, + 29.30835621724343, + 29.760311956545774, + 34.789214950383005, + 43.31760355192151, + 45.78433958164411, + 47.11748224725027, + 48.06768770049111, + 48.709137062370274, + 51.67578370093511, + 52.010536083327466, + 68.53516550295284, + 69.49149240524305, + 70.21910225176926, + 96.45458719254044, + 98.85593807195872, + 99.05898380340392, + 99.46056452261202, + 108.48739732332038, + 137.02271527616836, + 159.81964675561417, + 167.08259455691461, + 180.33902638746144, + 213.00835351524154, + 253.7507448026381, + 269.8612686333755, + 276.2356508947798, + 360.21736110027746 + ], + [ + -17.447499338307203, + -16.350650206533274, + -14.654358785460868, + -4.935171858398417, + -3.5656963625495863, + 9.207454119371574, + 9.219341372748891, + 9.882787347306072, + 10.576655691713762, + 13.106406892643408, + 14.194352338338875, + 14.769746662376626, + 15.387675452896906, + 17.94239053553589, + 20.39183435351599, + 23.338046228540936, + 27.42548170515787, + 29.21325484681097, + 29.701008442857958, + 35.21445978354627, + 43.12498976456319, + 45.93989261376638, + 47.009650040191566, + 47.73233973885006, + 48.83257680731985, + 51.86669953393526, + 52.324922003693416, + 68.43058997277868, + 69.49606195007523, + 70.11811275244838, + 95.95150219965876, + 98.86960165883428, + 98.92375758876361, + 99.61338617528781, + 106.58191490181844, + 139.69728427094432, + 159.8224436507325, + 166.18780534788817, + 182.0878196934317, + 213.1673788586916, + 253.15019832785254, + 269.74843024794336, + 276.94881070057454, + 356.23212342040824 + ], + [ + -17.556950834368827, + -16.273515586445743, + -14.59758159025049, + -5.043431172292699, + -3.4591405078920903, + 9.112833662668983, + 9.179858788561567, + 9.767951135430099, + 10.445076976512539, + 13.003897116864485, + 14.310758372729664, + 14.895913275352868, + 15.61023055773759, + 18.022101715190146, + 20.3576972178535, + 23.111708845066442, + 27.814460324871163, + 29.11654197453045, + 29.645846885073666, + 35.654429525621104, + 42.938761549549994, + 46.07650447750651, + 46.9056705031234, + 47.413383652186646, + 48.95710750433722, + 52.065676444490464, + 52.64605036931211, + 68.31050470130158, + 69.48413898984744, + 70.00064948371961, + 95.40920025661137, + 98.63760810395193, + 98.97675564117061, + 99.80419993225375, + 104.74019751880303, + 142.24157102991583, + 159.8048722969302, + 165.31503031323274, + 183.95023972328008, + 213.33335731375053, + 252.47984897598693, + 269.67242337327366, + 277.7086951175415, + 352.0300018413073 + ], + [ + -17.668498321781588, + -16.195107222031208, + -14.536622253465262, + -5.153150128157849, + -3.3509252699395558, + 9.004213221160811, + 9.139202212427055, + 9.653552167247952, + 10.30299482037484, + 12.914854063092339, + 14.43934877954379, + 15.023086935206685, + 15.843972680964926, + 18.105780546726134, + 20.31957274110901, + 22.89611011333914, + 28.216251044615547, + 29.018317778331625, + 29.59565139784979, + 36.10164267197951, + 42.75893653694113, + 46.179266633644424, + 46.80546564622761, + 47.127115089560235, + 49.08390688600258, + 52.2726932380512, + 52.971918519124685, + 68.17025203132987, + 69.45530488131489, + 69.86670762074262, + 94.83192611255235, + 98.3444411791929, + 99.01409126030299, + 100.03421355690746, + 102.99220200187202, + 144.5995328013871, + 159.75979737566905, + 164.46844480690908, + 185.87709696987383, + 213.4947924583939, + 251.75688240284927, + 269.6112119090591, + 278.51982324220273, + 347.71288753968327 + ], + [ + -17.781644826543687, + -16.11542820144755, + -14.47196022840832, + -5.2641967418131, + -3.241064587482109, + 8.883640220699252, + 9.096762153141345, + 9.541135555438039, + 10.153658612926534, + 12.837978129670276, + 14.57766377813074, + 15.150618942761048, + 16.08966594104214, + 18.19097176072799, + 20.277742735055238, + 22.692806358016018, + 28.62998367201277, + 28.918702893886856, + 29.550451731880628, + 36.5498023521757, + 42.58553222697345, + 46.20492971395869, + 46.708952215672674, + 46.91784796579178, + 49.21423618686954, + 52.48763873586008, + 53.30088413152289, + 68.00485911315246, + 69.40931050000447, + 69.71632295580544, + 94.22372558975758, + 97.94725446303519, + 99.03491473433924, + 100.30416341218482, + 101.39303828991788, + 146.73054862027053, + 159.6798107802804, + 163.65136026789716, + 187.79261457986325, + 213.63879350371388, + 251.00069974532906, + 269.54205051692315, + 279.38217519534135, + 343.37073968982423 + ], + [ + -17.895974721914097, + -16.03448177790127, + -14.403995764580792, + -5.376439447624332, + -3.129573026195136, + 8.752901942457653, + 9.052721863830564, + 9.431136367912911, + 10.000092226131338, + 12.771783615061446, + 14.723794363832203, + 15.277884747680996, + 16.348135090722312, + 18.274869718954562, + 20.23253911204091, + 22.5036584966236, + 28.81784201214352, + 29.054657787897295, + 29.509851095608457, + 36.99346750144108, + 42.418566023028895, + 46.08895631361898, + 46.61604222084026, + 46.85101307948535, + 49.3494109589735, + 52.71029065038856, + 53.63151151040079, + 67.80915596508677, + 69.34606021536293, + 69.54957362378444, + 93.58840751895123, + 97.35273127917807, + 99.03837198582671, + 100.0476303561558, + 100.61567321456526, + 148.61217754909006, + 159.557367918315, + 162.86622104063537, + 189.5976890013907, + 213.7513787992921, + 250.23213711346537, + 269.44216418469165, + 280.2896331204298, + 339.07853488900304 + ], + [ + -18.011139921258398, + -15.952271447459443, + -14.33306370102411, + -5.48974771850863, + -3.0164658222214076, + 8.614013237911049, + 9.007280759694654, + 9.32325730680906, + 9.84490961560077, + 12.71483484045609, + 14.876281925935565, + 15.404275601249903, + 16.620267795122864, + 18.354317049821454, + 20.184357556860537, + 22.33087414793663, + 28.715908552794932, + 29.473248918478934, + 29.489154388679054, + 37.42785678330929, + 42.25805457606157, + 45.859114088827646, + 46.526643547060395, + 46.8996369916334, + 49.49076239888069, + 52.94028806124734, + 53.96249546526267, + 67.57797496648327, + 69.26559902830599, + 69.36658204236589, + 92.9295223403451, + 96.45176935683433, + 99.02361076370914, + 99.0801091792223, + 100.9668904623294, + 150.23918010208837, + 159.38494558101334, + 162.1146307213513, + 191.1788328693878, + 213.81791651006975, + 249.47271220795938, + 269.2890536945328, + 281.2288917530999, + 334.89490955244355 + ], + [ + -18.126847988447402, + -15.868801018887421, + -14.25944534879934, + -5.603992646063756, + -2.9017589270331765, + 8.46892633927216, + 8.960626392839991, + 9.216876671526375, + 9.690235652484285, + 12.665879819782706, + 15.034018909921661, + 15.529185327017293, + 16.907015809149602, + 18.425842151038378, + 20.133673906421546, + 22.177008862904916, + 28.6131108335994, + 29.43997103792953, + 29.93225239730686, + 37.84874232893465, + 42.104012728618784, + 45.58564664583501, + 46.44066066471822, + 46.994207118503155, + 49.63958840632635, + 53.177097232756736, + 54.29261810565484, + 67.30645159338962, + 69.16751711451587, + 69.16810354015301, + 92.25035374918357, + 95.30227313887187, + 98.44380758347833, + 98.9897888845798, + 101.35929305023168, + 151.61969520086012, + 159.15521957097633, + 161.39739962559264, + 192.42088216447013, + 213.82372086340388, + 248.74378072193977, + 269.0604725535137, + 282.1794429914065, + 330.86236692125635 + ], + [ + -18.242852188181992, + -15.784074675285243, + -14.183378434691535, + -5.719047470268258, + -2.7854690546243015, + 8.319323797299262, + 8.912929409428653, + 9.111341592619599, + 9.537704899160413, + 12.623904164009984, + 15.196159259101938, + 15.651991921199933, + 17.209394403140912, + 18.48577257817882, + 20.08106374806199, + 22.0448885680384, + 28.50970034143006, + 29.409342817580058, + 30.38264970733974, + 38.25240371806584, + 41.956452360021714, + 45.29952235705481, + 46.357995445281595, + 47.10444169970018, + 49.797094792308776, + 53.41996863917021, + 54.620719608410454, + 66.99043589817173, + 68.95259674823856, + 69.05387726182232, + 91.55392010853326, + 94.07896003715615, + 97.97623837073439, + 98.93608481973332, + 101.79238760450379, + 152.77030196441146, + 158.86125864901803, + 160.71460495666625, + 193.22028522411938, + 213.75478950261893, + 248.06553423689445, + 268.73412859658185, + 283.1151381549683, + 327.008820102445 + ], + [ + -18.358943299100773, + -15.698097027235752, + -14.105065279260867, + -5.834788051172706, + -2.667613731560657, + 8.166541313314847, + 8.864340120171391, + 9.006118085048181, + 9.38850626972649, + 12.588134591888702, + 15.362039936054948, + 15.772033764272406, + 17.5284790675395, + 18.53046774923216, + 20.027225718394323, + 21.937410185873006, + 28.405982994991742, + 29.38072783282677, + 30.838988172662923, + 38.63562175145411, + 41.81538146181654, + 45.01138636814468, + 46.27854809673808, + 47.22034807200193, + 49.96432876225269, + 53.66788156987187, + 54.945674333317136, + 66.62700321885187, + 68.72209075780778, + 68.92335068568276, + 90.84298283077288, + 92.89375220367162, + 97.57610320643289, + 98.86171097505618, + 102.26570946557396, + 153.71149329197803, + 158.49672958272302, + 160.06565577075634, + 193.49599706979035, + 213.59861591042272, + 247.45586431816218, + 268.28716395744283, + 284.00739770788743, + 323.35018176663436 + ], + [ + -18.474942941619723, + -15.61087315752826, + -14.024679454600218, + -5.951093277852098, + -2.5482113501582253, + 8.011581743106973, + 8.814974913666598, + 8.900848334346934, + 9.243448186063745, + 12.558016130693542, + 15.531110554004917, + 15.888580433908164, + 17.86539803909784, + 18.556696508852422, + 19.973008795586825, + 21.85719700737385, + 28.302334731148168, + 29.353546170966005, + 31.299881701772815, + 38.995696518316635, + 41.68080381901952, + 44.72540608811562, + 46.20221823466502, + 47.33838318860905, + 50.14210885250227, + 53.91947070757607, + 55.26636810937863, + 66.21502234629524, + 68.47632422204704, + 68.7770865000071, + 90.12005944160495, + 91.79768642375207, + 97.20099620384742, + 98.76593006279781, + 102.77858556909163, + 154.46433731509495, + 158.056106289506, + 159.44935569395284, + 193.19624858809271, + 213.34495114541147, + 246.9292159373282, + 267.6954894559607, + 284.8294826835455, + 319.8936699091552 + ], + [ + -18.59069816651537, + -15.522408657963362, + -13.942371174399904, + -6.067845412513416, + -2.427281224888562, + 7.855171068256985, + 8.764751253206018, + 8.795506736979796, + 9.103028032415949, + 12.533178823392966, + 15.702864984901312, + 16.000798610982724, + 18.22131842727226, + 18.56212683099477, + 19.919443387853075, + 21.80614612935111, + 28.199223448312544, + 29.3272809405577, + 31.763946362136807, + 39.33047655021516, + 41.552719747666686, + 44.443495305369474, + 46.12890611079991, + 47.457233380972156, + 50.330957508441614, + 54.17292616451285, + 55.58167450415777, + 65.75570866833183, + 68.2156813889417, + 68.6157903070178, + 89.38743952728635, + 90.81432787785924, + 96.83344861087828, + 98.64807502137576, + 103.33011584755415, + 155.04841347512266, + 157.5348744439477, + 158.86395738389604, + 192.30091007873457, + 212.9863452002808, + 246.49561869562996, + 266.933110612914, + 285.5607012910192, + 316.6414572503118 + ], + [ + -18.706077073398237, + -15.432709659104846, + -13.858271646999354, + -6.184930369956361, + -2.304843651977307, + 7.697823794919414, + 8.68836763045636, + 8.71539221718367, + 8.967497235977861, + 12.513402806215776, + 15.876764915339127, + 16.10771463265422, + 18.545810283007498, + 18.597422499191055, + 19.86777501006319, + 21.784993898633385, + 28.097240477157605, + 29.30147819709931, + 32.229831142635526, + 39.63838705314338, + 41.43112845851324, + 44.16666481840987, + 46.05851402893963, + 47.576466586334796, + 50.53104388107205, + 54.42585423979568, + 55.890428782814766, + 65.25307476339911, + 67.94061023330461, + 68.44032719413048, + 88.64720219597748, + 89.95442849401253, + 96.4658885310882, + 98.50757300088014, + 103.91916206599764, + 155.4807438590973, + 156.9297216590607, + 158.30720380254348, + 190.82019008066456, + 212.5182989277824, + 246.16008159716466, + 265.9716876151855, + 286.18934945153654, + 313.5942348887759 + ], + [ + -18.820965261490446, + -15.341782854113813, + -13.772496589876281, + -6.302237934497852, + -2.180919972029523, + 7.539902300043948, + 8.582191718850163, + 8.664210384959562, + 8.836918240411942, + 12.498585999778417, + 16.052138170661127, + 16.208177475917033, + 18.508499443813736, + 18.994868687984432, + 19.819497512573, + 21.793076874890804, + 27.997146631484238, + 29.275743407960494, + 32.696247745867126, + 39.91844661864867, + 41.3160328059934, + 43.895521815683615, + 45.990947988999224, + 47.696035390825955, + 50.742144570488314, + 54.67508045580961, + 56.191398660011764, + 64.71420806885975, + 67.65162779571835, + 68.25174447705128, + 87.90123404541119, + 89.22141258689406, + 96.09503061670775, + 98.34397399542669, + 104.54433561351073, + 155.7753495873224, + 156.23870265636145, + 157.77635248772444, + 188.79081024391814, + 211.9389177679903, + 245.92244984761513, + 264.78071008567144, + 286.7136549678807, + 310.7541911463142 + ], + [ + -18.935262949215545, + -15.249635517931212, + -13.685149070691278, + -6.419661917959885, + -2.055532635375718, + 7.381664983696345, + 8.475286200302353, + 8.613022407123982, + 8.711212441924181, + 12.488716001676256, + 16.228015852772735, + 16.300834139993693, + 18.452708763007504, + 19.414728555224315, + 19.776379887698948, + 21.828407455273545, + 27.89994107895712, + 29.249736304246113, + 33.16199745285061, + 40.17026424837957, + 41.20744748227464, + 43.63048035112574, + 45.92611961508127, + 47.81606884256417, + 50.963628564702034, + 54.91637008642091, + 56.48325114836831, + 64.14935875025745, + 67.34932645839775, + 68.05130085628181, + 87.1512469206279, + 88.61376801634043, + 95.71965805499541, + 98.15698476449629, + 105.20398343580118, + 155.46136889683606, + 155.94310246324744, + 157.26818077459643, + 186.27074782849257, + 211.24806234276144, + 245.77766070630565, + 263.3288027439077, + 287.14074234511185, + 308.1268614587992 + ], + [ + -19.048882629965117, + -15.156275523111724, + -13.596321809593869, + -6.537100263398396, + -1.928705269686908, + 7.223302931410826, + 8.367992225514344, + 8.56164200199327, + 8.590199545829478, + 12.483846418945667, + 16.38390054099331, + 16.403077204827856, + 18.382609010842334, + 19.740476600615423, + 19.85788523249379, + 21.88803200940986, + 27.806966782448903, + 29.22316519034722, + 33.62599265266891, + 40.39401215859235, + 41.1054121982906, + 43.37186004007278, + 45.86394844386103, + 47.9367760498646, + 51.194469587344855, + 55.14403869675903, + 56.764515003174196, + 63.57189187672106, + 67.03438134843717, + 67.84050204414531, + 86.39879497351006, + 88.12644187788835, + 95.33966769039712, + 97.94650873843683, + 105.8961721886656, + 154.59885306323065, + 155.99159560410996, + 156.77897641749487, + 183.33344326129932, + 210.44609429802856, + 245.71611507466972, + 261.58675073559436, + 287.48425392345933, + 305.72137198785185 + ], + [ + -19.16174715766772, + -15.061711353554527, + -13.506099051364322, + -6.654455099948057, + -1.8004627492430245, + 7.064966594648434, + 8.26044389885554, + 8.473629366974322, + 8.510106621907545, + 12.484077287966239, + 16.45602920397924, + 16.57430024081704, + 18.30402927395412, + 19.71410696456541, + 20.324868900911042, + 21.968512882789806, + 27.720075972078124, + 29.195781311278576, + 34.08726993175299, + 40.59037417664448, + 41.010012177426574, + 43.11993652527345, + 45.80436467754993, + 48.05839805600455, + 51.43328510922714, + 55.35044029770131, + 57.033538629105, + 62.9982036663465, + 66.70755910379432, + 67.62114253080829, + 85.64529070913322, + 87.75189247206275, + 94.95563467341209, + 97.71269264320742, + 106.6186707908073, + 153.65390061729005, + 155.9247172696126, + 156.30456489434567, + 180.06225257908042, + 209.53237349443128, + 245.72353006992978, + 259.53284883463186, + 287.76149916236983, + 303.54889181827394 + ], + [ + -19.273788177357687, + -14.965952117265314, + -13.414558094253183, + -6.771632754530267, + -1.670831265080519, + 6.906784420205096, + 8.152770787105187, + 8.361207230652207, + 8.458464762077433, + 12.489539036557462, + 16.514898778041196, + 16.73749392429953, + 18.224952524073423, + 19.699786692175998, + 20.81558722206703, + 22.0663645317982, + 27.641896414606794, + 29.167373595115627, + 34.54499044407927, + 40.76047367974547, + 40.92140958733521, + 42.87496917496151, + 45.74731254407042, + 48.18118250442325, + 51.67839740172801, + 55.525391144875314, + 57.28844406528103, + 62.44765916659097, + 66.36972829544321, + 67.39535238881463, + 84.89201983251347, + 87.48095495938631, + 94.56861902154296, + 97.45598060206784, + 107.3689314598071, + 152.63084333579454, + 155.74063499396243, + 155.84128846977538, + 176.5459733665365, + 208.5036591283949, + 245.77868235016845, + 257.16159452849166, + 287.9908683849825, + 301.61966088544057 + ], + [ + -19.38494483331358, + -14.869007559135067, + -13.321770544672196, + -6.888543726267401, + -1.5398383950771102, + 6.748875249151557, + 8.045106020597286, + 8.252614061817157, + 8.406760789665805, + 12.500379437518193, + 16.558625262861284, + 16.884339513765948, + 18.156881897107926, + 19.70009870930393, + 21.328877483493997, + 22.17835228554599, + 27.57626995121984, + 29.137763920146277, + 34.998421224341854, + 40.839891738682674, + 40.90578801208971, + 42.63721716885369, + 45.69275446022796, + 48.30536986779714, + 51.92790920837549, + 55.65578993595095, + 57.52707909665622, + 61.94239490782373, + 66.02187187476432, + 67.16564658976489, + 84.14015480252307, + 87.30351976536718, + 94.18010599230185, + 97.1771764777682, + 108.14406906063229, + 151.53551308447527, + 155.3734514088622, + 155.4419180947843, + 172.87657828071232, + 207.35252593785535, + 245.8434274605992, + 254.5001985464184, + 288.1899223577348, + 299.939581776839 + ], + [ + -19.495162701157547, + -14.77088807455733, + -13.227803352614595, + -7.005102629333863, + -1.4075131728875825, + 6.591356034560939, + 7.9375838948715, + 8.147522104515405, + 8.355032535510805, + 12.516753071370125, + 16.585391518475124, + 17.000876507990075, + 18.116750148518445, + 19.717505140328324, + 21.86175454113982, + 22.301647516257457, + 27.52898686807437, + 29.10680295893734, + 35.44688742167701, + 40.76594569552052, + 41.0280575815362, + 42.40694921433526, + 45.64067626795071, + 48.4311858940486, + 52.17978548117483, + 55.72610915289763, + 57.74697204520555, + 61.50637874078923, + 65.66510211384224, + 66.93497184812412, + 83.39076706578241, + 87.20899002127878, + 93.7920425487595, + 96.87751521512672, + 108.94083808562708, + 150.37509786808081, + 154.90949934990076, + 154.9937262577162, + 169.1512104046402, + 206.06587765397785, + 245.81644440702442, + 251.6600833146275, + 288.3742482963288, + 298.50764371028015 + ], + [ + -19.60439290122934, + -14.671604724539735, + -13.132719671265487, + -7.121228109697876, + -1.2738861545181825, + 6.434346138519173, + 7.830336903968799, + 8.045607053527206, + 8.303311072040366, + 12.53881290231653, + 16.59374460415488, + 17.068617883342956, + 18.12567189097114, + 19.754127804508165, + 22.408152737660167, + 22.433878101937395, + 27.50901479586895, + 29.074366596966986, + 35.88967879637522, + 40.7003756658658, + 41.12919737802338, + 42.18444948493409, + 45.591093918690795, + 48.5588375476707, + 52.43193318977866, + 55.72086907094827, + 57.94529779494827, + 61.16263909248087, + 65.30067863479275, + 66.70674208364211, + 82.64483798908836, + 87.18649097511043, + 93.40696910172235, + 96.5587439501966, + 109.75560562094086, + 149.15794606094173, + 154.35047078104415, + 154.44200759199117, + 165.48303916444485, + 204.623686024773, + 245.2759325497455, + 249.09709832511442, + 288.55696342859284, + 297.315083368987 + ], + [ + -19.712591359162012, + -14.571169252816205, + -13.036579575173613, + -7.23684274082441, + -1.1389894812524277, + 6.27796920947997, + 7.723493379955523, + 7.946557234804275, + 8.251621030525355, + 12.566703650206128, + 16.582789425584913, + 17.075686636506116, + 18.197819270904493, + 19.811549912634025, + 22.573120305079332, + 22.956912982703052, + 27.530466813828458, + 29.04035289537499, + 36.32588191984227, + 40.644491455506255, + 41.211216946326886, + 41.97002110200625, + 45.544062131320146, + 48.68851098026631, + 52.682273000496195, + 55.62967884578679, + 58.118869300694755, + 60.92806932465718, + 64.93003029034094, + 66.48484798860186, + 81.90326853976806, + 87.22480995999268, + 93.02827405527312, + 96.22321370298214, + 110.58431688677945, + 147.89332833734966, + 153.43047617487397, + 153.94243386178303, + 162.03040364776277, + 202.99827329592944, + 243.16619603095188, + 247.92514005760162, + 288.7486633116751, + 296.3463583859885 + ], + [ + -19.819718186367375, + -14.469594105327646, + -12.939440664157598, + -7.351872902952018, + -1.0028569376215295, + 6.122353420859689, + 7.617175788164976, + 7.850080350729339, + 8.199981069487091, + 12.60055670363483, + 16.552299253229684, + 17.02845189691749, + 18.3288273590948, + 19.890698063445324, + 22.71786772754675, + 23.489033942015094, + 27.615284344744992, + 29.00467955770605, + 36.75408874937134, + 40.6004169510351, + 41.276152570268614, + 41.76398783644615, + 45.49968576638641, + 48.82037070150096, + 52.92879895952418, + 55.452802438159075, + 58.26417563251018, + 60.807821099912914, + 64.55478186975169, + 66.27361943499722, + 81.16688778345186, + 87.31203343542556, + 92.6606294765259, + 95.87398261885306, + 111.42244670988542, + 146.59116984903045, + 152.01975676313734, + 153.41262590736753, + 159.04091990805475, + 201.1548460777558, + 239.90696894860147, + 247.80432420968492, + 288.95761650945695, + 295.58127638634056 + ], + [ + -19.925737158494886, + -14.366892452328296, + -12.841358574427058, + -7.466248650064566, + -0.8655240031778307, + 5.967630668812844, + 7.511499555337544, + 7.755908211656627, + 8.14840437729255, + 12.640486364210103, + 16.50271009968626, + 16.944046749131868, + 18.503322452829842, + 19.991839410744955, + 22.866999922390963, + 23.97567968268333, + 27.795135284653, + 28.967281876086457, + 37.171899175948425, + 40.57160047142664, + 41.3260132067666, + 41.56669436975635, + 45.4581349784436, + 48.954559464631835, + 53.16962458154668, + 55.202729561303926, + 58.37749323028143, + 60.79377311338722, + 64.17678686768153, + 66.07771387102393, + 80.43646028121726, + 87.43481878197882, + 92.31070028505991, + 95.51493203899744, + 112.2649243128626, + 145.26176738783352, + 149.899283363416, + 152.83495185454845, + 156.77402493203377, + 199.0545359659937, + 236.36488379136216, + 247.96402569490215, + 289.1900536572715, + 294.99739754613904 + ], + [ + -20.030615274155494, + -14.263078213284347, + -12.742387413930212, + -7.579903568174933, + -0.727027896988893, + 5.813935176558013, + 7.406572304516665, + 7.663799803492424, + 8.096899167208914, + 12.686587242039083, + 16.43500821103124, + 16.83750720228998, + 18.707820401731198, + 20.1146849175989, + 23.019763657600937, + 24.381905404887522, + 28.1075561603957, + 28.92811128024359, + 37.575097482173135, + 40.56364617399335, + 41.36273994573537, + 41.3785052841856, + 45.419665680855665, + 49.09119857636764, + 53.40301554390084, + 54.899909716941806, + 58.4550965166563, + 60.868886800993124, + 63.79816786676969, + 65.90190451525999, + 79.71269247505766, + 87.57722600001146, + 91.98822850278249, + 95.15089723974104, + 113.10600742490982, + 143.91550746197495, + 147.14721286304302, + 152.1899876612285, + 155.18126616991995, + 196.66154046415028, + 232.84080056654062, + 248.2062484873844, + 289.450453776108, + 294.572062989868 + ], + [ + -20.134322379560473, + -14.158166084667009, + -12.642580135423353, + -7.692774628042539, + -0.5874076140357878, + 5.661401829797803, + 7.302493397929951, + 7.573542987512538, + 8.045469147829056, + 12.738932641573365, + 16.350555950369177, + 16.718461128962797, + 18.934058061447747, + 20.25855342577968, + 23.175774580789493, + 24.68117830323456, + 28.581245936580153, + 28.88713755703394, + 37.956408353733394, + 40.58555954447559, + 41.199802923558366, + 41.388177616050285, + 45.38464756510845, + 49.230388460722025, + 53.62741036945749, + 54.56627993819465, + 58.49357985195496, + 61.01379476210474, + 63.421366426513366, + 65.75075656068967, + 78.99623815381388, + 87.71916983988368, + 91.70745126803999, + 94.78781554705746, + 113.9390591070582, + 142.56260137765895, + 144.08744500947194, + 151.45306226478823, + 153.96146037854058, + 193.95518854171723, + 229.48859995268776, + 248.47329496586784, + 289.74177702453244, + 294.2837839509516 + ], + [ + -20.236830847398902, + -14.05217157070023, + -12.54198885801525, + -7.8048020349770555, + -0.4467039530791975, + 5.510164468822497, + 7.1993537177417135, + 7.484955088286232, + 7.994113960724443, + 12.797573789015487, + 16.250910279741944, + 16.59260869649463, + 19.17751008961976, + 20.42254236220703, + 23.33504519894027, + 24.871067551753168, + 28.84431001749406, + 29.220166451079372, + 38.30410418300146, + 40.651132949385605, + 41.030984760074205, + 41.4040565722832, + 45.35360298341821, + 49.37220938751406, + 53.841431086008626, + 54.2208339314263, + 58.49026913708552, + 61.21135787978953, + 63.04920467655682, + 65.62821339445422, + 78.28770309211257, + 87.83520233724343, + 91.48815327858181, + 94.43289571156065, + 114.75613332931736, + 140.9603452468038, + 141.21285264781778, + 150.59254231709315, + 152.89197169252913, + 190.94498806157532, + 226.4092433753662, + 248.73791725320348, + 290.0656259861781, + 294.11301424822557 + ], + [ + -20.33811530042118, + -13.945111017106093, + -12.440665145801518, + -7.915929077938068, + -0.30495953603980874, + 5.360354284614246, + 7.097235638304447, + 7.397882594115555, + 7.9428295805309315, + 12.862539760984282, + 16.13767268629725, + 16.463369890687353, + 19.435708670917776, + 20.605666346397186, + 23.498045587210555, + 24.970816300416942, + 28.79966773823423, + 30.005526598779102, + 38.60204043954715, + 40.77887435117975, + 40.87247833659, + 41.411982548452336, + 45.32726161363416, + 49.51672233843549, + 53.87812001168198, + 54.04388601081305, + 58.44365327107594, + 61.448293869727806, + 62.684960927456, + 65.53716285362616, + 77.58764895325281, + 87.89592723000173, + 91.35405442943674, + 94.09481379484251, + 115.54716994849788, + 137.8864753029981, + 139.87547060150578, + 149.5682618159774, + 151.8672313212765, + 187.6829386334654, + 223.66031165696103, + 248.98113667369398, + 290.4223382803822, + 294.0424580767998 + ], + [ + -20.43815237192761, + -13.837001647893038, + -12.338660250547738, + -8.026101979744938, + -0.16221881951074504, + 5.2120984059227435, + 6.996213161617316, + 7.312200168357448, + 7.891608673795796, + 12.933837981646645, + 16.01238608187794, + 16.332884060165497, + 19.70717238958463, + 20.806948403910557, + 23.665805220298857, + 25.005786082577025, + 28.75318574910771, + 30.911048678584272, + 38.83442759319423, + 40.72458999426638, + 40.98735213871572, + 41.41343259765748, + 45.30663823420173, + 49.66397003969659, + 53.54848455868293, + 54.23376668317427, + 58.35372646765626, + 61.715055516658005, + 62.33246120238511, + 65.47909265278361, + 76.89659654389371, + 87.87534409440809, + 91.32522898259822, + 93.78394198816088, + 116.29834930206712, + 134.92773588478155, + 138.55894232102543, + 148.3308387388229, + 150.84055577987996, + 184.26630805217525, + 221.25857049827, + 249.18611194998726, + 290.8110248985709, + 294.0570814564308 + ], + [ + -20.536920496772666, + -13.727861605266297, + -12.236025324099428, + -8.135269749846879, + -0.01852809964084318, + 5.0655187193942774, + 6.896352200483922, + 7.227809146909727, + 7.840440913061808, + 13.01145516374775, + 15.876476360775788, + 16.202551416247445, + 19.99074285345137, + 21.02546649211794, + 23.840066862311588, + 24.99705051172806, + 28.704882376674846, + 31.912686644130417, + 38.99531453362778, + 40.5878608361453, + 41.28530519416574, + 41.40975541534349, + 45.29314443358505, + 49.813978250255175, + 53.23889915879629, + 54.41024069142579, + 58.22213474458388, + 61.99618698433623, + 62.00511863477936, + 65.45394182782162, + 76.21502850421702, + 87.7621412133397, + 91.40652315885778, + 93.51261691870643, + 116.98852294971464, + 132.1251687466302, + 137.27097353610722, + 146.82361608936833, + 149.79106882403119, + 180.8278645213375, + 219.18888311329232, + 249.33597986303386, + 291.2295742211316, + 294.14396164567216 + ], + [ + -20.634399727666363, + -13.617709992788289, + -12.132811605218219, + -8.24338404079103, + 0.12606448773620163, + 4.920730933115881, + 6.797711001775551, + 7.1446356754892575, + 7.789313242380153, + 13.09535857879456, + 15.731227924167648, + 16.07332561554762, + 20.28510708371667, + 21.260366592409166, + 24.02350478153092, + 24.959348216710445, + 28.65478371235615, + 32.98996119730783, + 39.09300696344024, + 40.46261975372318, + 41.4021746720548, + 41.66760248114298, + 45.288749769702136, + 49.96675746815227, + 52.953801251091726, + 54.57264181143593, + 58.0520775358199, + 61.681395374485945, + 62.31425006420015, + 65.46019746561548, + 75.54339151224336, + 87.56381237562692, + 91.58307242939331, + 93.29545147176384, + 117.58097642971228, + 129.5219374620639, + 136.0185086024518, + 144.9898661937994, + 148.70993085574796, + 177.51562086746478, + 217.41746271559336, + 249.4130008353633, + 291.6746433044959, + 294.29206513297515 + ], + [ + -20.73057157253282, + -13.506566922000529, + -12.029070584786185, + -8.350399009246161, + 0.2715089692690875, + 4.777843873226765, + 6.70034070558632, + 7.062628619357505, + 7.73821009000175, + 13.185497553250903, + 15.57778125972886, + 15.945876739902664, + 20.588377458476955, + 21.51085500814529, + 24.220015520166207, + 24.902425677020272, + 28.602926483830757, + 34.123677852639844, + 39.14347734413026, + 40.349244629399, + 41.39179429920104, + 42.12148233888334, + 45.2962128910614, + 50.122305317086855, + 52.6957744523653, + 54.720458552220755, + 57.848001600102435, + 61.39423895153215, + 62.639930702849576, + 65.49519983603101, + 74.88209807542688, + 87.2986989154451, + 91.82778206141083, + 93.14968605379121, + 118.00383386781577, + 127.18946515827773, + 134.80784118001324, + 142.7871381088968, + 147.5945791727381, + 174.46642624312605, + 215.90403887973412, + 249.39826673114308, + 292.1416570520439, + 294.4920086566067 + ], + [ + -20.825418849521032, + -13.39445356282209, + -11.924854152740691, + -8.456271182207741, + 0.4177535356116012, + 4.636958991543773, + 6.604286035210421, + 6.981757357687222, + 7.687113523607835, + 13.281805100736229, + 15.417142885985655, + 15.820685638278595, + 20.897677477410106, + 21.776180429986812, + 24.435071203245485, + 24.83270917779929, + 28.54935821618385, + 35.29313521447802, + 39.16192475099568, + 40.248079732693554, + 41.379604948178944, + 42.634963461942114, + 45.31940392779029, + 50.280610020198836, + 52.46605859779517, + 54.85332192167266, + 57.61518840087108, + 61.141855127613304, + 62.98094522378856, + 65.55555514088768, + 74.23152797681036, + 86.98580314801008, + 92.11087516540218, + 93.09555663267727, + 118.10997080745472, + 125.27070635454722, + 133.64483217889742, + 140.2060120393299, + 146.446141513168, + 171.7795250091378, + 214.60985257992195, + 249.27172862220525, + 292.6248330427053, + 294.7358325958051 + ], + [ + -20.91892555698194, + -13.281392198170266, + -11.820214729639712, + -8.560959328805167, + 0.5647445390449135, + 4.498170057516404, + 6.509586108222227, + 6.90200955499822, + 7.636003343257363, + 13.384199614299384, + 15.250201002214226, + 15.69810061689853, + 21.208758584659975, + 22.055613403400734, + 24.676078164159108, + 24.754523851624032, + 28.494137274485333, + 36.4736820262488, + 39.15952259000882, + 40.15943028971418, + 41.366491068404656, + 43.19996755225803, + 45.36372035487706, + 50.441655586770445, + 52.26492552122185, + 54.97099299291765, + 57.3593462159637, + 60.9323635517318, + 63.337104452827646, + 65.63754516795946, + 73.59202943705625, + 86.64004723262366, + 92.4037684749549, + 93.15662012407712, + 117.66287942345996, + 123.9959757179657, + 132.5352621785583, + 137.2837946236872, + 145.26817060149574, + 169.49970262808253, + 213.50147477866713, + 249.01245651752328, + 293.11724552948726, + 295.0168001153575 + ], + [ + -21.0110767563465, + -13.167406283395202, + -11.715205385375025, + -8.664424337968978, + 0.7124264838334793, + 4.361563008466883, + 6.416275351247718, + 6.823388983386394, + 7.584857107455797, + 13.492586557220713, + 15.077742788662643, + 15.578372684364945, + 21.515776400131777, + 22.348428258708275, + 24.670869978252192, + 24.95259494481634, + 28.437332931025427, + 37.63486925643785, + 39.14371587848321, + 40.08355430564635, + 41.35323822418087, + 43.81187121983611, + 45.43651375165125, + 50.60542967447866, + 52.09196016607275, + 55.073350669227636, + 57.08628355860326, + 60.77466089635403, + 63.70906330950328, + 65.73745804035927, + 72.96392004787032, + 86.27188527485406, + 92.67829154905098, + 93.35991193962118, + 116.55325484500483, + 123.46731685476804, + 131.4853655507165, + 134.10346294298324, + 144.06596450792108, + 167.61842488773658, + 212.55183058631206, + 248.59909524443248, + 293.61093681120497, + 295.32922574164866 + ], + [ + -21.101858466367933, + -13.052520511276077, + -11.609879947210167, + -8.766629102076866, + 0.8607420060890673, + 4.227215936257961, + 6.324384491414046, + 6.7459134520358335, + 7.533650088543515, + 13.606860104821239, + 14.900471144229227, + 15.461678189339441, + 21.811467534073376, + 22.653890581397572, + 24.583899482708095, + 25.276157664204774, + 28.37902546913158, + 38.739700875725134, + 39.11935027284276, + 40.02065520879317, + 41.34054040068004, + 44.46820054524671, + 45.54718667745818, + 50.771935606835804, + 51.946280119205746, + 55.160379906477466, + 56.801692786462304, + 60.67784025945966, + 64.0982049729208, + 65.85181224758962, + 72.34748752687869, + 85.88834950574366, + 92.9041099863087, + 93.73570330492085, + 115.00260926785316, + 123.45542884190677, + 130.50262928087747, + 130.77863971453272, + 142.84616545232907, + 166.09087181012535, + 211.73979565549914, + 248.01049662623834, + 294.09707831779, + 295.6683312728766 + ], + [ + -21.191257567634068, + -12.936760883470575, + -11.504293098989114, + -8.867538406587022, + 1.0096318402966609, + 4.0951991946218795, + 6.233941587475321, + 6.669612885073961, + 7.482355155113511, + 13.726904702912387, + 14.719019805790289, + 15.348133899693797, + 22.08797534812662, + 22.971251635693477, + 24.4952082301429, + 25.659456515971428, + 28.319306318957, + 39.08960769958598, + 39.74622999320141, + 39.97087626617684, + 41.32900714741424, + 45.16748961200877, + 45.70603819581795, + 50.94121075879211, + 51.8267219995036, + 55.232160549084696, + 56.511037165772166, + 60.65002103809937, + 64.50656987203662, + 65.9774820816116, + 71.74299033917902, + 85.49412670765221, + 93.04580731481053, + 94.3164686675478, + 113.27819509025535, + 123.68500393785357, + 127.43525866230594, + 129.5970021355175, + 141.61650760589632, + 164.85726382177444, + 211.0492486964838, + 247.22650873177108, + 294.5661778502516, + 296.03012371042104 + ], + [ + -21.279261716603976, + -12.82015478942114, + -11.398500473024537, + -8.967118825579877, + 1.1590347702805297, + 3.9655756179097805, + 6.1449730550225565, + 6.594527575432655, + 7.430942581487288, + 13.852596520415378, + 14.533966457235175, + 15.237807540960954, + 22.338291391456035, + 23.299749543445127, + 24.406017809937662, + 26.114889557761835, + 28.258278219065367, + 39.05661811251022, + 39.93429765083325, + 40.61350430095381, + 41.31917052379065, + 45.90842255523793, + 45.92024637277122, + 51.11335414487049, + 51.73202670652196, + 55.28885686103224, + 56.219518332133575, + 60.6964420917546, + 64.93681337439797, + 66.11174925781027, + 71.15065822672643, + 85.09233024660897, + 93.06035254031731, + 95.13447262526506, + 111.52318568364288, + 124.00226746449485, + 124.20133799432443, + 128.78276838369155, + 140.38566668399855, + 163.8585207699023, + 210.46802906605072, + 246.22889608372014, + 295.00832410921674, + 296.4112885971559 + ], + [ + -21.365859268678456, + -12.702731093779487, + -11.292558735817376, + -9.065338623061226, + 1.3088875631914494, + 3.8384008476603597, + 6.057504634769723, + 6.5207066311072674, + 7.379379787368557, + 13.98380478412058, + 14.345843786192699, + 15.130725663506723, + 22.557751633222228, + 23.638615874951327, + 24.31729077009428, + 26.65304601206024, + 28.196055398862605, + 39.02183310749047, + 39.910937220803255, + 41.311285264658764, + 41.31287911184194, + 46.186318364313514, + 46.689140431529495, + 51.28856256756397, + 51.66108138851569, + 55.330707782805966, + 55.93209916510492, + 60.81697760428931, + 65.3921779152475, + 66.25230783192634, + 70.57069268366888, + 84.68498423793925, + 92.8961303102415, + 96.21717649225978, + 109.80028519441757, + 121.18841196555373, + 124.34401571423075, + 128.08152377165783, + 139.16320781895845, + 163.04385871422213, + 209.98697959465292, + 245.00235438795454, + 295.4134555635129, + 296.80909244648035 + ], + [ + -21.45103920997085, + -12.584520233393677, + -11.18652566838338, + -9.162167659831107, + 1.4591248860389832, + 3.7137237671576697, + 5.9715622521157306, + 6.44820662103127, + 7.327631014531272, + 14.120392992479072, + 14.155148613206721, + 15.026880014817998, + 22.744781566272962, + 23.987086173215438, + 24.229805173818352, + 27.28191155829695, + 28.13276377865921, + 38.98625199685205, + 39.90075646771152, + 41.30636416586108, + 41.83825105523173, + 46.48345380145189, + 47.506520438082504, + 51.46709350169208, + 51.61342993905086, + 55.35801791281788, + 55.65356182935217, + 61.003819385117865, + 65.87646163868057, + 66.39724685497677, + 70.00326741388817, + 84.27328973836343, + 92.49599018448821, + 97.57951603259006, + 108.1368078975759, + 118.51401871241093, + 124.66576529183176, + 127.52697807075513, + 137.9596558131842, + 162.37267433313104, + 209.59911654571118, + 243.53557417662674, + 295.7716383314082, + 297.22128951870866 + ], + [ + -21.53479109751279, + -12.465554324784202, + -11.080460241585003, + -9.257577305681128, + 1.6096792052799611, + 3.5915870453785734, + 5.887172720792716, + 6.377090420575135, + 7.275656951482585, + 13.962349286302507, + 14.26222001278522, + 14.926233144170368, + 22.90056334489453, + 24.14420381789506, + 24.344412958529205, + 28.007100801170218, + 28.068541185744273, + 38.95056110281735, + 39.90367392512312, + 41.30412909485328, + 42.209307556305404, + 46.77658967018543, + 48.355023489839155, + 51.58808298455095, + 51.65150304774304, + 55.37114919030874, + 55.388586440180084, + 61.2406122114399, + 66.39390253544535, + 66.54508580400665, + 69.44852880644115, + 83.85771202033963, + 91.80763792743164, + 99.21212962704463, + 106.54476795157501, + 116.26557400472886, + 124.94881575198927, + 127.17265041788768, + 136.78673056641566, + 161.8136592024576, + 209.29890328596687, + 241.82230465878092, + 296.0733373617307, + 297.64603057773724 + ], + [ + -21.617105007617656, + -12.345867282840048, + -10.97442268649765, + -9.351540356664684, + 1.7604806709433194, + 3.472027790210094, + 5.804364253304536, + 6.307426251236632, + 7.2234143211116635, + 13.767891553908392, + 14.409141072290081, + 14.82872365706804, + 23.02803686054709, + 24.06102735785, + 24.70987901539097, + 28.00353758614837, + 28.83267062222772, + 38.915222573409714, + 39.91959010541934, + 41.30506832671733, + 42.45826440119277, + 47.0296877200139, + 49.22371355899047, + 51.5939120117918, + 51.83928382823209, + 55.141839809876785, + 55.370513236767124, + 61.50414187539587, + 66.69415516932955, + 66.94966103235161, + 68.90659646546126, + 83.43786508831941, + 90.80188189235369, + 101.06518154728981, + 105.02915409295927, + 114.49932799293354, + 125.17698832734605, + 127.10347868566588, + 135.65779377003307, + 161.3430275552906, + 209.08156937493143, + 239.86237978919303, + 296.30966663396777, + 298.08177386563085 + ], + [ + -21.697971492053057, + -12.225494951184945, + -10.868474559514723, + -9.444030957163143, + 1.9114569876355407, + 3.3550783067010044, + 5.723166754979623, + 6.239286905165778, + 7.170855449961891, + 13.57220312867538, + 14.561008658880255, + 14.734271315577367, + 23.13087633804187, + 23.980737023910407, + 25.082808118866563, + 27.93791533263724, + 29.76181645038134, + 38.880533660507204, + 39.94843195774357, + 41.309417600276255, + 42.6176849406276, + 47.217956835421866, + 50.08459718108335, + 51.6491427336563, + 52.035286975536316, + 54.91806646216792, + 55.356564291345094, + 61.76842872731576, + 66.8441599420056, + 67.5480082304009, + 68.37756383339487, + 83.01204168607244, + 89.49077076786307, + 103.03003054145786, + 103.5915348796971, + 113.22233366272617, + 125.3352922251082, + 127.45014074058584, + 134.58850811789534, + 160.94272740805968, + 208.94238288232634, + 237.66270417690777, + 296.4726069938362, + 298.5272007614539 + ], + [ + -21.777381541563727, + -12.104475244359458, + -10.762678801623895, + -9.535024526468323, + 2.0625332754867713, + 3.2407669499264706, + 5.6436118949616185, + 6.172749142501613, + 7.11792784059471, + 13.375697147311826, + 14.64278202410544, + 14.717673351222667, + 23.212797037152452, + 23.90373049588789, + 25.46257066667257, + 27.87184942987316, + 30.797000997347645, + 38.84666844867761, + 39.990233932302466, + 41.31736931202412, + 42.71355645337313, + 47.3312092528582, + 50.834379110037524, + 51.849370283206326, + 52.242489030777904, + 54.722181914384635, + 55.32979265781062, + 62.00960593148091, + 66.99410538780204, + 67.86149895018258, + 68.19392773404286, + 82.57587640092856, + 87.93223553204757, + 102.23176813149885, + 104.92961135397235, + 112.39169433454744, + 125.40739539215059, + 128.39618305753808, + 133.5975290698142, + 160.5989264165227, + 208.87572202332709, + 235.23827710426485, + 296.5551843380972, + 298.9811397146018 + ], + [ + -21.855326556160254, + -11.982848301659537, + -10.657099791097705, + -9.624497689596685, + 2.2136319246032143, + 3.129119054519136, + 5.565732964118194, + 6.107893247827939, + 7.064573770330408, + 13.178774722123816, + 14.554152636595413, + 14.878984601956919, + 23.27721513513235, + 23.830353222442593, + 25.84858260310178, + 27.805527817561227, + 31.93932500628448, + 38.81370892247024, + 40.04529537049864, + 41.3290772095721, + 42.76447421237613, + 47.370586212763925, + 51.23449805382242, + 52.420037931114976, + 52.47038857694198, + 54.55940635292084, + 55.29071857087307, + 62.20959330566667, + 67.14364832892855, + 67.35844539606964, + 68.89082846137804, + 82.11833418689167, + 86.21917095762822, + 100.94889287914461, + 106.54366895099588, + 111.93203254813528, + 125.37461342852588, + 130.15219337128926, + 132.70657734432675, + 160.30080848660103, + 208.87365341613852, + 232.613502483376, + 296.551605883975, + 299.44250174334496 + ], + [ + -21.93179832147519, + -11.860656652245677, + -10.55180338873257, + -9.712428212056556, + 2.3646724468944917, + 3.0201579148846207, + 5.489564544452675, + 6.04480273112658, + 7.010729940468291, + 12.98182676895566, + 14.468275462998072, + 15.044791500862376, + 23.327143543649996, + 23.76090667586157, + 26.240297053795526, + 27.73915167172867, + 33.18695342956253, + 38.781669366725396, + 40.11451604586751, + 41.34466073481117, + 42.783184502846595, + 47.34362590752415, + 51.374538550177185, + 52.714637773246075, + 53.27466798543893, + 54.435641985784514, + 55.23988638577026, + 62.35754292762266, + 66.86842347191313, + 67.29270875128562, + 69.63897408898676, + 81.60767554128412, + 84.47293542303569, + 99.74165349557326, + 107.68783206514355, + 111.7591717437227, + 125.21737993350244, + 131.93847176077514, + 132.8776891226874, + 160.03962785240404, + 208.92339276815827, + 229.82440192944642, + 296.4573575386496, + 299.9102294688101 + ], + [ + -22.006788990384976, + -11.737945391001507, + -10.446856974736503, + -9.798794938295034, + 2.515571329224381, + 2.913905782371975, + 5.415142025462401, + 5.983564158196533, + 6.956327200140866, + 12.785235282108205, + 14.385042333016225, + 15.214943548147865, + 23.365206949054755, + 23.695654530820075, + 26.637189064398804, + 27.672935723085974, + 34.53211618671045, + 38.750516459252154, + 40.200205357557465, + 41.36420908362181, + 42.7783656274001, + 47.260368186228966, + 51.446642474790366, + 53.002289917127676, + 54.19615993783841, + 54.35904296432558, + 55.177858991432224, + 62.44930816397187, + 66.3914316779388, + 67.44154838496341, + 70.4309413107367, + 80.93936316415657, + 82.8841790394527, + 98.60886267485247, + 108.2955437744487, + 111.79670167985937, + 124.92053481383455, + 131.31159487712554, + 136.60096420801227, + 159.807947750023, + 209.0021977918575, + 226.92321321148222, + 296.2692703060792, + 300.38325999177033 + ], + [ + -22.0802910690284, + -11.614762364622198, + -10.34232947640983, + -9.883577733562383, + 2.666241891719603, + 2.8103848389037447, + 5.342501009086702, + 5.924267095410534, + 6.901290368714717, + 12.589374207839173, + 14.304348085190613, + 15.38929147129818, + 23.393702016300917, + 23.634827430632633, + 27.0387346871966, + 27.607108589649407, + 35.95535976554267, + 38.72018653265754, + 40.308374166777284, + 41.387784995152636, + 42.75599777291225, + 47.1310232986316, + 51.501169769920764, + 53.34071300554673, + 54.3468409145686, + 55.10521234198298, + 55.1291008471963, + 62.48584016448849, + 65.92744855945909, + 67.59088263855504, + 71.24009151225737, + 79.89770985654825, + 81.75676495097453, + 97.54971290887889, + 108.41636178603197, + 111.98239071608265, + 124.48105667873061, + 130.83208052961882, + 141.22270476424495, + 159.59899548474436, + 209.06615115003794, + 223.988982750428, + 295.98556787549614, + 300.86050048775286 + ], + [ + -22.152297406305177, + -11.491158367535009, + -10.23829138584064, + -9.966757428943421, + 2.709618101400875, + 2.816594154802425, + 5.2716766463490154, + 5.867004153703614, + 6.845538180648709, + 12.39461004325471, + 14.226093380186187, + 15.56768812239831, + 23.41466562892849, + 23.57862679008673, + 27.444386316115075, + 27.541913118524256, + 37.41254750451613, + 38.69060151995565, + 40.45676463148485, + 41.41542827539349, + 42.720287826972935, + 46.964849719022254, + 51.55022446937509, + 53.7112834765705, + 54.46185944992153, + 55.022529994720465, + 56.05104387904909, + 62.47136379293241, + 65.47643499573807, + 67.74210120418056, + 71.98774450284785, + 78.61675928549596, + 81.07992659523389, + 96.56411187486903, + 108.1482390689316, + 112.26816197223482, + 123.91205513062877, + 130.48987262701016, + 146.58541919239073, + 159.40607659056545, + 209.02458582929845, + 221.1524905829389, + 295.60591082809987, + 301.34081445539346 + ], + [ + -22.222801185910342, + -11.367187347468006, + -10.134814766952683, + -10.048315769318078, + 2.611630208299597, + 2.9665347181127384, + 5.202702946260751, + 5.811871116690011, + 6.788983377516125, + 12.201302257091328, + 14.150186779537778, + 15.749989496629732, + 23.429936016443783, + 23.527227939757385, + 27.47760672896077, + 27.853546574720948, + 38.66163429084958, + 38.79319660024775, + 40.710650713010054, + 41.44715905523288, + 42.67426273658291, + 46.76976310795207, + 51.597253643377435, + 53.986642836067766, + 54.893955684528635, + 54.93039753668857, + 56.94966732176968, + 62.41182639341257, + 65.03833701540952, + 67.89771633875232, + 72.45781624841869, + 77.61466179098787, + 80.58170148910239, + 95.6531180739489, + 107.58321773209327, + 112.61764626552919, + 123.23816867416463, + 130.2635034937653, + 152.52924060376614, + 159.2220028352518, + 208.68933411667075, + 218.64642691718103, + 295.1314552256631, + 301.8230161882862 + ], + [ + -22.291795919948598, + -11.242906620752525, + -10.128235364029894, + -10.031973251356662, + 2.516448039100168, + 3.1159666540080675, + 5.135612092189101, + 5.758967137613924, + 6.7315329738491485, + 12.009803594631604, + 14.076546077099266, + 15.936055916703044, + 23.44120241736948, + 23.48078281805872, + 27.414461745611796, + 28.26554319598693, + 38.63333649132279, + 39.79807338915372, + 41.301325742490896, + 41.4829807789663, + 42.620141218823726, + 46.55232300527514, + 51.64316827728007, + 54.130900970047996, + 54.82939677757235, + 55.762002490723724, + 57.81665514267053, + 62.31378212773349, + 64.61308922814058, + 68.06232597166094, + 72.2765295265468, + 77.39328574901009, + 80.15221769257714, + 94.81958607896354, + 106.78974790387275, + 113.00347661210454, + 122.4862938880807, + 130.12968324994287, + 158.91107469708174, + 159.03850343548518, + 207.74794352427972, + 216.83176850678933, + 294.5649446004552, + 302.3058711803149 + ], + [ + -22.359275443163252, + -11.118377097706736, + -10.206499640056993, + -9.929842022567273, + 2.424101120807358, + 3.2647894178126844, + 5.070433794105135, + 5.708394989344632, + 6.673088726681872, + 11.820460293250692, + 14.0050989139185, + 16.12575343226864, + 23.439422348841177, + 23.450043464003706, + 27.352765707428773, + 28.679607213616666, + 38.605550783173044, + 40.24643906550318, + 41.52288291468537, + 42.32517480717576, + 42.55956098971028, + 46.31788758218615, + 51.68800278674708, + 54.24076234093687, + 54.7200995844562, + 57.062717924835106, + 58.64640480564553, + 62.183684915466664, + 64.20061896689541, + 68.24487321130799, + 71.41625864179932, + 78.00075566098555, + 79.7794058214978, + 94.0692126935696, + 105.81436973005987, + 113.40508246701229, + 121.67883692325785, + 130.07055298254303, + 158.84561197792362, + 165.60458101978864, + 205.99396439415784, + 215.9673097645259, + 293.9108545214251, + 302.7881006353952 + ], + [ + -22.425233906822765, + -10.993663518663965, + -10.28309279749607, + -9.828497788239057, + 2.33462178188162, + 3.4128987764618453, + 5.00719469815974, + 5.660261350688035, + 6.613547842890511, + 11.633612200746722, + 13.935782744241623, + 16.318955487633016, + 23.40325859429393, + 23.457956003604945, + 27.29282163407021, + 29.09485645162109, + 38.57829588241163, + 40.46811236935801, + 41.56684337297853, + 42.49371008922462, + 43.37368243779306, + 46.070828389076176, + 51.731476463436614, + 54.351511811468036, + 54.603061234494504, + 58.8328097477989, + 59.435840091977234, + 62.02749285984579, + 63.80085123754189, + 68.46464069717014, + 70.24662889939954, + 78.8395933094271, + 79.69128726216135, + 93.4123543990565, + 104.68803844475902, + 113.80709210165087, + 120.83168108495498, + 130.07649131853026, + 158.6310640619511, + 172.49587212395718, + 203.63068281552123, + 215.90597209148842, + 293.1756077999725, + 303.26838887658664 + ], + [ + -22.489665771336675, + -10.868834701340493, + -10.357999767193482, + -9.728018740149977, + 2.2480450253553688, + 3.5601867566922194, + 4.945917868806022, + 5.614677110779773, + 6.552803962999418, + 11.449592758532658, + 13.86854424887691, + 16.515544915014065, + 23.372386738899685, + 23.46637631869497, + 27.234948228310923, + 29.510285798005476, + 38.5516042998787, + 40.62949889298695, + 41.61483061480847, + 42.42339100717223, + 44.237555368942125, + 45.814756918504806, + 51.7732116610503, + 54.469718785030345, + 54.478813165345116, + 60.1802917852071, + 61.06585046342067, + 61.850482647680096, + 63.41371457172831, + 68.76988578264063, + 69.00427155477067, + 78.78000337982994, + 80.77407182278617, + 92.86737856143206, + 103.4317667720407, + 114.19823893780391, + 119.95510267553047, + 130.14639246088862, + 158.3798181193097, + 179.48030968914946, + 201.01614793692553, + 216.34993421132944, + 292.3678757947096, + 303.74539306954364 + ], + [ + -22.552565796749985, + -10.743963800259383, + -10.431206170372377, + -9.628484501721553, + 2.1644081081565782, + 3.706541613480965, + 4.886622353685158, + 5.571757671144164, + 6.4907484640058035, + 11.268728788428996, + 13.803338311676686, + 16.71541631350339, + 23.34688693598573, + 23.47669549280446, + 27.179479990238796, + 29.924765127818933, + 38.52556348540858, + 40.770727821694756, + 41.666805423262005, + 42.34903329438618, + 44.88131084818648, + 45.552746785985676, + 51.8128218902056, + 54.3478550112398, + 54.595150705688965, + 60.883164778671265, + 61.65719303095304, + 63.03914787382076, + 63.58986544199122, + 67.78094801390965, + 69.30674427719039, + 78.44175444347928, + 82.30275467895802, + 92.46718186740758, + 102.06065657966161, + 114.57063312675766, + 119.05575150762095, + 130.28757081174888, + 158.0739384363263, + 186.4612572664405, + 198.40313991119237, + 217.11066983933097, + 291.4989766626815, + 304.21775522854324 + ], + [ + -22.613929030418902, + -10.619128578862675, + -10.502698280135128, + -9.529976062914036, + 2.08374983286926, + 3.8518478190697714, + 4.829322837752028, + 5.53162322200876, + 6.427272125556242, + 11.091340007179335, + 13.74012668584878, + 16.918478874964848, + 23.326826031102055, + 23.49027033774677, + 27.126767217580372, + 30.337045049878284, + 38.500326692882425, + 40.90338400052867, + 41.72272230699796, + 42.270661921387, + 45.28755126675872, + 45.330067527522296, + 51.84994117429661, + 54.21064582623851, + 54.72600331070848, + 61.45144092889839, + 61.54072543082232, + 62.67710834154144, + 65.86034120189412, + 66.6132080490316, + 70.53161849743933, + 78.07830060120924, + 83.96901054831902, + 92.27238114428935, + 100.58659224275979, + 114.91927816126898, + 118.13892248788075, + 130.5165684571085, + 157.69324588742302, + 193.35034263554417, + 195.94833024545514, + 218.09917084857935, + 290.5833741489929, + 304.6841168996065 + ], + [ + -22.673750791414356, + -10.572462984742733, + -10.494411694749775, + -9.432575702385492, + 2.0061095798039625, + 3.9959860726250396, + 4.774029390369646, + 5.49439896555796, + 6.362267201810427, + 10.917738188351299, + 13.678876479944787, + 17.124659716020506, + 23.312259164031797, + 23.508430987069502, + 27.077175867266735, + 30.745769945329293, + 38.476123190026094, + 41.03136566633255, + 41.782530495160124, + 42.18782368095795, + 45.02182285960091, + 45.6253863924289, + 51.88422156340539, + 54.067594417657126, + 54.860267525111276, + 61.236373886522614, + 62.148188486848234, + 62.32758052047247, + 65.5203596027421, + 67.14878182794629, + 73.00124829446504, + 77.71212323628075, + 85.7103729464435, + 92.3977892763029, + 99.02000126484114, + 115.24173473761465, + 117.21121561670124, + 130.86172981339172, + 157.21726722629296, + 193.75968794689433, + 200.0685775110657, + 219.2766680405354, + 289.63926954288644, + 305.1431372234388 + ], + [ + -22.732026651552328, + -10.640487752607502, + -10.369900998184676, + -9.336366896851516, + 1.9315261291489014, + 4.1388333304055775, + 4.720747306881764, + 5.460215253885888, + 6.295629933734978, + 10.748225897957518, + 13.619558589514773, + 17.333907768278703, + 23.30323124222186, + 23.532486005643506, + 27.031087257485712, + 31.149497109038144, + 38.4532681332301, + 41.15588032708608, + 41.84617446954963, + 42.09947306450721, + 44.7583420154732, + 45.80617673577126, + 51.915309624405644, + 53.91904874487791, + 54.99609497857546, + 61.014537011412635, + 61.99058652133597, + 62.6787777923302, + 64.53486881798553, + 67.71222961335091, + 76.16277320286774, + 77.34804999213424, + 87.48444911286846, + 93.05652009561503, + 97.37098607298329, + 115.53783465814797, + 116.2844355245707, + 131.3686074856664, + 156.62889276195156, + 191.91875988198206, + 206.54775756925088, + 220.6286658813732, + 288.6892634713044, + 305.5935152650522 + ], + [ + -22.788752413383015, + -10.706760598969339, + -10.245689843630082, + -9.241434217632937, + 1.8600363422372097, + 4.2802628562142715, + 4.6694770440100095, + 5.4292076033995835, + 6.227263521643814, + 10.583094748485456, + 13.562146190302728, + 17.546198264689096, + 23.299778271766684, + 23.563725667470152, + 26.988897598651583, + 31.546720270543357, + 38.432172038467655, + 41.27697366770353, + 41.91359385186862, + 42.003825796783566, + 44.50025430622506, + 45.90307467103602, + 51.942806127637226, + 53.76528438608956, + 55.13186493191021, + 60.78794192834714, + 61.66619738133645, + 62.911739192034226, + 63.87913494595947, + 68.00599245891235, + 76.98754129186156, + 79.10978534018315, + 89.24967968695677, + 94.57397751854874, + 95.65002237616656, + 115.3827637301496, + 115.80957544317245, + 132.10985581530696, + 155.91951503013019, + 190.48650327612484, + 212.73169764139092, + 222.15365339847395, + 287.7610415532127, + 306.0340175860005 + ], + [ + -22.843924085937733, + -10.771270054271739, + -10.121877413598085, + -9.147863214433292, + 1.791673784501502, + 4.420144291865861, + 4.62021424597801, + 5.401516540343622, + 6.157081554226203, + 10.422623145990197, + 13.50661339315935, + 17.761537835241164, + 23.30192852698892, + 23.603423899984683, + 26.95101735797738, + 31.935895437276667, + 38.41334965007987, + 41.39408877920193, + 41.89820749277962, + 41.98472460475134, + 44.25129251936992, + 45.93864904241551, + 51.9662100356953, + 53.60649214350761, + 55.266160659089465, + 60.55813111375115, + 61.354545480736185, + 62.34417267543065, + 64.05571058477332, + 68.19368120438678, + 76.63168302638242, + 81.24710303309449, + 90.96157765714118, + 93.86834529467741, + 97.17349913295936, + 114.56063593020107, + 116.05999795119432, + 133.20157000921807, + 155.0942711453323, + 189.50217282775762, + 218.57699871595202, + 223.85814425156886, + 286.88800643581254, + 306.46351203875076 + ], + [ + -22.897537859455927, + -10.83400513430428, + -9.998569053541374, + -9.055740286431599, + 1.7264673777701613, + 4.558343747245147, + 4.572949855424427, + 5.377287224127927, + 6.085011857616682, + 10.267073545683461, + 13.452934140396106, + 17.979970186184534, + 23.309703535558516, + 23.652839268393112, + 26.917870488308044, + 32.31546694451817, + 38.39742785704914, + 41.50629586123764, + 41.77898113402414, + 42.05949257487447, + 44.01591362506959, + 45.9292096744073, + 51.98484614375379, + 53.44276495316733, + 55.397723652749235, + 60.32623441176874, + 61.05583782591384, + 61.55133240706957, + 64.48803287361541, + 68.32922639278443, + 76.2808823141518, + 82.47773692990062, + 92.0381010912902, + 92.57242954184568, + 100.53489095795098, + 113.94710131532435, + 116.29348339521523, + 134.82502139690604, + 154.1750655292422, + 188.98110413793756, + 224.0531842305142, + 225.75429536333658, + 286.10973594099937, + 306.88100871325724 + ], + [ + -22.949590080605155, + -10.894955312235973, + -9.875876615856697, + -8.965152540827432, + 1.6644401645549263, + 4.527670300074218, + 4.694723908742967, + 5.356668786900918, + 6.011000687158599, + 10.116689280922142, + 13.401081399178839, + 18.20158227856416, + 23.323118852508774, + 23.713215264741265, + 26.889893590722103, + 32.683891875563646, + 38.38515207026177, + 41.6123932784008, + 41.641673410221856, + 42.137819144561725, + 43.79921444033277, + 45.88660900164401, + 51.99777459685183, + 53.274084395638916, + 55.525408417014816, + 60.09301648140619, + 60.77036987242795, + 60.77259905764111, + 64.93506126353313, + 68.43376071330718, + 75.93561963068588, + 83.07239920857891, + 90.17231964980483, + 94.03325425183708, + 103.7269448787054, + 113.85110892959193, + 116.51382784249662, + 137.23724205099802, + 153.19943395860932, + 188.91476726871198, + 227.85847812965636, + 229.14217296571385, + 285.47209064230617, + 307.2857088892786 + ], + [ + -23.000077229794275, + -10.954110492738286, + -9.75391881029824, + -8.876187639012176, + 1.605608251846865, + 4.484357743131427, + 4.829144161402024, + 5.339813321601502, + 5.935017138070765, + 9.971691085009297, + 13.351026681255561, + 18.42651083806896, + 23.342184593126383, + 23.785780063582198, + 26.86753513586867, + 33.03966167507493, + 38.3773901001885, + 41.48149560597643, + 41.710954730187275, + 42.219613137630084, + 43.60645896081544, + 45.81963427283636, + 52.00368002742885, + 53.10030727527395, + 55.64814475613502, + 59.858914983523135, + 60.03544241232097, + 60.4985393788381, + 65.36773603365891, + 68.51694750545583, + 75.59636380935214, + 83.30817918221331, + 88.28475235311144, + 95.29769281876604, + 105.62438743997353, + 114.73247153769036, + 116.72305586566934, + 140.7194647409263, + 152.21519317514066, + 189.2738801422584, + 230.19000467601245, + 233.83716242600832, + 285.0267241802754, + 307.67706278997406 + ], + [ + -23.048995902020174, + -11.011460988472475, + -9.632821557199987, + -8.788933630589986, + 1.549979978426864, + 4.442990382899026, + 4.961460703857042, + 5.326874457166429, + 5.857057603970334, + 9.83227347927158, + 13.302739891683913, + 18.654948911794587, + 23.366905691194745, + 23.871745802997705, + 26.85125494530734, + 33.381320833631996, + 38.37513200547426, + 41.29427831611686, + 41.80035594754232, + 42.30476918066855, + 43.44217998350374, + 45.73498997670216, + 52.00073897496701, + 52.92115295004692, + 55.76490909264963, + 59.344490173604605, + 59.62406988004357, + 60.24085955018675, + 65.78024042850093, + 68.58376981098857, + 75.26361999563922, + 83.35397715446521, + 86.38961566001014, + 96.32691989129582, + 105.96032594446416, + 116.41271739280724, + 116.91988775095022, + 145.4213692888919, + 151.2727827105216, + 190.01332276232947, + 232.76954493362402, + 238.1410696852192, + 284.8296737751684, + 308.05483697874513 + ], + [ + -23.09634279230556, + -11.06699749930921, + -9.51271833885219, + -8.703478775530334, + 1.4975553211067043, + 4.4035427856568745, + 5.091526532438816, + 5.3180055531135855, + 5.777150070662778, + 9.698601247337921, + 13.256189484334808, + 18.887152030204287, + 23.397281845199995, + 23.97230734355554, + 26.841524235907407, + 33.707483940325254, + 38.37948358251381, + 41.077521834073686, + 41.878800055497514, + 42.39316312712731, + 43.30916409852499, + 45.63795955143002, + 51.98646850382971, + 52.736192346034876, + 55.87470484745837, + 58.700585621968784, + 59.388344543779525, + 59.997970452847014, + 66.17122483404901, + 68.63708233764594, + 74.93795530698758, + 83.30098968218891, + 84.50127842423667, + 97.09450552134371, + 105.41246876449883, + 117.09864863132184, + 118.10129132029338, + 150.41715174146682, + 151.22023071549063, + 191.0771835881723, + 235.61695379096275, + 242.06471198517212, + 284.9386538100479, + 308.419192497744 + ], + [ + -23.142114686249247, + -11.12071109474581, + -9.393750543152803, + -8.619911354814299, + 1.448325525888684, + 4.365986235654207, + 5.2191898216485955, + 5.3133588875285716, + 5.6953580043656284, + 9.570806246495874, + 13.211342880807335, + 19.12344332503484, + 23.433307110614418, + 24.088640348890113, + 26.838826662422154, + 34.016854059457415, + 38.391650176983305, + 40.830976644124014, + 41.94435617005627, + 42.48464668143196, + 43.20790450602032, + 45.53282983798944, + 51.95757033431517, + 52.54483986114485, + 55.97655182635713, + 58.104275890856016, + 59.151339647637286, + 59.77064737833349, + 66.54055791724787, + 68.67871378941672, + 74.62002010708937, + 82.63392835873574, + 83.19883667218153, + 97.58972517287809, + 104.48436119508906, + 117.25030939130336, + 119.4289039621888, + 149.68467993360414, + 157.77427622818294, + 192.4031598813427, + 238.748417289398, + 245.62490974328676, + 285.40870514996436, + 308.7707754641797 + ], + [ + -23.186308455621376, + -11.172593200092106, + -9.276067792243925, + -8.538319470054253, + 1.4022729240809346, + 4.330289087287034, + 5.3130408457607174, + 5.3443355910877, + 5.611783585851859, + 9.448984815031332, + 13.168167093652922, + 19.364216686134412, + 23.474969090913596, + 24.22189842310871, + 26.84366096043835, + 34.30824697816778, + 38.41290654881983, + 40.55641140225362, + 41.995024294772676, + 42.57904103031349, + 43.136865026464605, + 45.42313730955131, + 51.90980929658824, + 52.34634961486475, + 56.069484897291524, + 57.55684226721962, + 58.91240115580164, + 59.55980454410512, + 66.88846489306745, + 68.70999953478608, + 74.31057049804947, + 80.80124875092581, + 83.07573949503275, + 97.81811279853292, + 103.38749947385772, + 117.36394601625693, + 120.38927435007638, + 149.09538905234714, + 164.69604478954963, + 193.92645825418896, + 242.1730843548701, + 248.8426683982438, + 286.28607587166493, + 309.1108231082988 + ], + [ + -23.228921058412357, + -11.222635587097102, + -9.159828247227512, + -8.458790832716263, + 1.3593708745043078, + 4.296417107018773, + 5.317264335041079, + 5.466729332965488, + 5.526570060044257, + 9.333196014482251, + 13.126629485518556, + 19.609936702121175, + 23.522247673231533, + 24.373208937622408, + 26.856545998128098, + 34.58062677053903, + 38.44454816992683, + 40.25682321002042, + 42.02883719527932, + 42.67612944331094, + 43.09330066051294, + 45.31177495883697, + 51.838007813477326, + 52.139817677785125, + 56.15256244907933, + 57.06062538946747, + 58.67062431206435, + 59.36649231137089, + 67.21522355648318, + 68.73206198958773, + 74.01049555154169, + 79.01613026859209, + 82.94857407601994, + 97.79915724654794, + 102.21454933242457, + 117.4301330677377, + 121.0641543549603, + 148.65690468422224, + 171.65457228317015, + 195.58354991114848, + 245.88964893538588, + 251.74155391498408, + 287.60074554508776, + 309.44129043413716 + ], + [ + -23.26994954236675, + -11.27083036978467, + -9.045198878248891, + -8.381412543767674, + 1.3195837633186016, + 4.264333796030646, + 5.326083375561585, + 5.439903015761824, + 5.586277559690877, + 9.22346089665915, + 13.0866985932439, + 19.86113371227207, + 23.575113246074057, + 24.54366709067115, + 26.87802929325656, + 34.833157311480875, + 38.487820554306516, + 39.93562392769229, + 42.04400317899253, + 42.77564880152958, + 43.07410069837199, + 45.20098945730409, + 51.73629226363749, + 51.92419194515825, + 56.22488303600824, + 56.61890971863642, + 58.42485645829497, + 59.191886054993816, + 67.52102238972731, + 68.74596555273729, + 73.72085240918871, + 77.29043477048202, + 82.82791878104972, + 97.56217562049363, + 101.01490823856327, + 117.44333916205517, + 121.52873947952361, + 148.36425859442008, + 178.4074445126003, + 197.3157692479389, + 249.88357021114572, + 254.34633060697195, + 289.3588605397723, + 309.76500637267617 + ], + [ + -23.30939105084606, + -11.317170006335857, + -8.932355687238653, + -8.306270864794721, + 1.2828669933542525, + 4.234000688511972, + 5.339606402804953, + 5.35201047915278, + 5.702808669810025, + 9.11976291102795, + 13.048344949593304, + 20.11839179476061, + 23.633524325782787, + 24.734327675806483, + 26.90870034098176, + 35.06527063426267, + 38.54382720992416, + 39.596123735887815, + 42.03908016208474, + 42.877279909241054, + 43.07633263156489, + 45.09230122173745, + 51.598747661236054, + 51.69829113505158, + 56.235160084081, + 56.28577569248259, + 58.17370298343752, + 59.037265013325026, + 67.80586711031768, + 68.75280066461549, + 73.4429124658491, + 75.63481909087433, + 82.72069138538068, + 97.14179501246215, + 99.82052308285293, + 117.40297605787832, + 121.83631043296674, + 148.20351477350556, + 184.80046534589633, + 199.07232584444444, + 254.12561575872553, + 256.6818876213991, + 291.5372172996733, + 310.0858740993557 + ], + [ + -23.347242829868183, + -11.361647307886965, + -8.821483868448244, + -8.233450981882688, + 1.2491669043899103, + 4.2053776244407715, + 5.263161788621262, + 5.357898994708977, + 5.8161633910989865, + 9.022049477422389, + 13.011541844004519, + 20.38232693272842, + 23.697424504972386, + 24.94619400123787, + 26.94921041953664, + 35.276745734806354, + 38.6134241860872, + 39.241327273898676, + 42.01315238093312, + 42.9806357888772, + 43.09747131080968, + 44.98639240556412, + 51.420527410063386, + 51.460833960707234, + 55.91261257405939, + 56.33415480011617, + 57.915542834025956, + 58.903979920772194, + 68.06949553997671, + 68.75372175262142, + 73.1782216904986, + 74.05861753664257, + 82.63158608412051, + 96.57409855913025, + 98.65516464318259, + 117.31288523788977, + 122.02198043122849, + 148.15555460280214, + 190.75999116255213, + 200.81220723254899, + 258.57211686486534, + 258.77244710860384, + 294.08215343342, + 310.4091390502848 + ], + [ + -23.383502235319767, + -11.404255455075564, + -8.712777889660799, + -8.163036763803531, + 1.218420582784314, + 4.178422999227657, + 5.173665307155537, + 5.38098839334963, + 5.926182463182365, + 8.930234654332708, + 12.976265975920978, + 20.65355195827202, + 23.766738619369193, + 25.18020341150937, + 27.000300868926473, + 35.46778193358731, + 38.69711863945034, + 38.87392446396851, + 41.9659643965242, + 43.08524044425792, + 43.13543744456248, + 44.883020433334345, + 51.19915768465597, + 51.21047889217977, + 55.65170171274413, + 56.36983320426449, + 57.64856277176616, + 58.79340897438859, + 68.31128509300761, + 68.74995122823587, + 72.56977302692873, + 72.92867662973238, + 82.56387829259667, + 95.89386128565175, + 97.53799341211638, + 117.17989900214654, + 122.10844583505411, + 148.19948042269368, + 196.28127654980992, + 202.50472578419772, + 260.6410245500468, + 263.1668369768405, + 296.9141814606913, + 310.7417611577291 + ], + [ + -23.418166739579455, + -11.444988023046312, + -8.606441474672152, + -8.095110516305832, + 1.1905555408835404, + 4.15309399536987, + 5.083865107285632, + 5.408854881665144, + 6.032706614499139, + 8.844202747383832, + 12.942497968204696, + 20.93262424146645, + 23.84136800896033, + 25.437208927897704, + 27.062842108164787, + 35.6390435241999, + 38.496364556985974, + 38.79499606856021, + 41.89796502951092, + 43.187618448534, + 43.191435013984005, + 44.78101414430594, + 50.93544005411782, + 50.94587424092382, + 55.45029474881706, + 56.392423937419835, + 57.37082249686419, + 58.70690261681478, + 68.5301487027683, + 68.74275853300162, + 71.17479926493699, + 72.69661253524582, + 82.51986878967682, + 95.13284502242578, + 96.4849879478556, + 117.01224380019056, + 122.11039430598898, + 148.31511381139964, + 201.41278193500807, + 204.12901620834492, + 262.3090994767148, + 267.8438942517264, + 299.9376221347628, + 311.0929456146479 + ], + [ + -23.451233937059662, + -11.48383901537479, + -8.502687465440079, + -8.029752734521137, + 1.1654892712648117, + 4.12934680308381, + 4.994136823609297, + 5.441422058358006, + 6.135577014201906, + 8.763812637506454, + 12.91022272218817, + 21.219971619855006, + 23.92118472491603, + 25.71795665455943, + 27.137885725755414, + 35.79165312201442, + 38.11094758955257, + 38.906699948426976, + 41.81023420846623, + 43.255044127439824, + 43.29610291842089, + 44.678387520086595, + 50.633406194424, + 50.665717854215636, + 55.30317711090104, + 56.40193167239388, + 57.08036464591388, + 58.64571854877209, + 68.72407652071558, + 68.73377684459132, + 69.87875137486692, + 72.48488710133509, + 82.50109853301896, + 94.31892178758177, + 95.50955331111031, + 116.8182790652428, + 122.03746935587574, + 148.48446772930905, + 205.66543977345162, + 206.24560812401842, + 263.79645090229883, + 272.53093769757055, + 303.0525418546674, + 311.4749076531494 + ], + [ + -23.482701548426558, + -11.520802906966658, + -8.401737540344346, + -7.967041855679053, + 1.1431287059017243, + 4.107136837683661, + 4.904882901082124, + 5.478546733423549, + 6.234635831912697, + 8.688902570911262, + 12.879429608772497, + 21.515792072876337, + 24.006024505731816, + 26.023058800597294, + 27.2267315455122, + 35.92712305961909, + 37.71990398350795, + 39.03147527473609, + 41.704301344844545, + 43.33418982942515, + 43.4007686353805, + 44.57256885765506, + 50.299342452295804, + 50.36882587242562, + 55.203082266644785, + 56.39871803147673, + 56.77538217645243, + 58.61094908263445, + 68.68518228449386, + 68.72301899167496, + 68.89201133367189, + 72.29691616461683, + 82.50839814882123, + 93.47576057947556, + 94.6228619482183, + 116.60572245402014, + 121.89620601943858, + 148.69235749387042, + 207.12261815745683, + 210.8677151787174, + 265.12111376327744, + 277.1518049378779, + 306.16570893323575, + 311.9039623889972 + ], + [ + -23.512567423463803, + -11.55587469540721, + -8.303821763476618, + -7.907054014437218, + 1.1233696338669856, + 4.086418961248164, + 4.816527472373717, + 5.520009000895095, + 6.329726852287587, + 8.619295145366198, + 12.850112500709024, + 21.81992375501165, + 24.095678315792824, + 26.352962443289, + 27.33101004652381, + 36.04723345395461, + 37.32545323903697, + 39.16826793176324, + 41.58189516570427, + 43.424675958650575, + 43.503807717410915, + 44.460710285472224, + 49.94045499147161, + 50.054211199790394, + 55.1419908310855, + 56.38353787410573, + 56.45444744188046, + 58.603443226745824, + 67.59606985514633, + 68.71280149351443, + 69.02994578064606, + 72.13657277420855, + 82.54180682447814, + 92.62288218650008, + 93.8341457345617, + 116.38129557564541, + 121.69129889972209, + 148.92642786938708, + 208.48494345526098, + 215.40085020416953, + 266.2994181428108, + 281.6281341206365, + 309.19822271704527, + 312.4020182516727 + ], + [ + -23.540829542684847, + -11.589049959448234, + -8.209177939057776, + -7.849862803147775, + 1.1060961516635173, + 4.067147714954788, + 4.729511077757045, + 5.565503159529426, + 6.420696128617186, + 8.554802246405494, + 12.82226965931607, + 22.131685317407904, + 24.18988221016767, + 26.707914491129927, + 27.452776837948274, + 36.15388235225435, + 36.92984189585332, + 39.31585467943109, + 41.444675452206624, + 43.5255202984305, + 43.60410763818978, + 44.34002990300278, + 49.56377245964857, + 49.72117499178245, + 55.11219201173352, + 56.11678954700451, + 56.35754875105806, + 58.62372570811811, + 66.6117178550021, + 68.70355886746796, + 69.13540386062884, + 72.00781539576784, + 82.60039046363967, + 91.77598541568476, + 93.15096787821076, + 116.1506502862469, + 121.42644602553125, + 149.17685869910795, + 209.75605084483317, + 219.94583773565805, + 267.3460801405494, + 285.87983965860747, + 312.0886810941187, + 312.99878591896675 + ], + [ + -23.567486017879055, + -11.620324922347429, + -8.118050745243616, + -7.795539039276583, + 1.09118023637455, + 4.049277566415129, + 4.644285403035455, + 5.614630279680712, + 6.507392666248762, + 8.495229726374673, + 12.795903494295452, + 22.449693726108283, + 24.288305266937364, + 27.087923662991837, + 27.594608350204755, + 36.248939045096336, + 36.53536454459926, + 39.472972526056424, + 41.293986277120666, + 43.635771961796664, + 43.700340501845155, + 44.20814702487993, + 49.17552871474157, + 49.36941906119475, + 55.1068687092497, + 55.76258057568878, + 56.3222839402128, + 58.67191466091012, + 65.73066085006523, + 68.6959332775607, + 69.20604364870597, + 71.91393414481402, + 82.6820038204642, + 90.94744319240003, + 92.57946823271612, + 115.91844640380233, + 121.10492321240787, + 149.4359411411262, + 210.9380424535824, + 224.59609922237973, + 268.2743205415766, + 289.8251447458104, + 313.7281962733441, + 314.79829787956834 + ], + [ + -23.592535091805857, + -11.649696516642697, + -8.030690623115735, + -7.744150541902848, + 1.0784815423319083, + 4.032763173418672, + 4.561308163535955, + 5.666893303054194, + 6.589669127687652, + 8.440381670257498, + 12.771020218226697, + 22.771680264455483, + 24.39053532365942, + 27.49272061777707, + 27.75967431047169, + 36.14437277091326, + 36.33412516718514, + 39.638422346307074, + 41.13065060805335, + 43.75447425090542, + 43.79088401738255, + 44.063387704435975, + 48.780958387954385, + 48.999194455933974, + 55.12027590169234, + 55.39316622378506, + 56.27958568541206, + 58.747639261504, + 64.94962952031588, + 68.69029801819578, + 69.24114098850582, + 71.85650591944662, + 82.78307288032541, + 90.14683479843669, + 92.12457805803962, + 115.68849131554632, + 120.72998777543596, + 149.69764138272834, + 212.0337664448388, + 229.43096630650837, + 269.09599412550415, + 293.38231311958384, + 314.64092085872966, + 317.29522940433833 + ], + [ + -23.615975137231363, + -11.677162445729353, + -7.947352399973839, + -7.695761918664616, + 1.0678475257821096, + 4.017559661486557, + 4.481038213894081, + 5.721695576097978, + 6.667382551145618, + 8.390064146825415, + 12.74762941814925, + 23.094346548688115, + 24.496062286275045, + 27.921717543211166, + 27.951741479494128, + 35.7592769341898, + 36.41093545387685, + 39.811133928733064, + 40.95481119362884, + 43.87343342930707, + 43.88088790584888, + 43.9050497512923, + 48.38433666865918, + 48.61151315152482, + 55.011169041147404, + 55.147682946361726, + 56.2315024035691, + 58.8499585698391, + 64.26364185216177, + 68.68676637092946, + 69.24245996493526, + 71.83450614584885, + 82.8985131082641, + 89.38144348638738, + 91.79011040339444, + 115.46389010770814, + 120.30517733175317, + 149.9572109142085, + 213.04635377426766, + 234.51330778256718, + 269.82171805344956, + 296.47711025718024, + 315.77838847881014, + 319.5700095191255 + ], + [ + -23.637804655471168, + -11.70272123644186, + -7.868293631686866, + -7.650434363485718, + 1.0591139980272994, + 4.003622906817252, + 4.403930921937913, + 5.778343627557172, + 6.740395074062166, + 8.344088395066859, + 12.725743565906733, + 23.4133282910978, + 24.604258877351466, + 28.17503739283812, + 28.373968384781197, + 35.38254517396449, + 36.48059809134639, + 39.99019101696157, + 40.76581964930441, + 43.733617474023134, + 43.945876447682025, + 44.01336030574956, + 47.989124764453855, + 48.208468775520814, + 54.62041736884227, + 55.18522022547632, + 56.18016097530326, + 58.97728355563414, + 63.66626251618752, + 68.68522555447008, + 69.21437758837875, + 71.84416946588607, + 83.02192260073637, + 88.65670895584645, + 91.57856440012371, + 115.24718175479862, + 119.83455004851017, + 150.21086553205703, + 213.97888707502653, + 239.88752492341303, + 270.4609922036843, + 299.0594413472933, + 317.16825062935465, + 321.6197135320506 + ], + [ + -23.65802227454042, + -11.726372275895253, + -7.793772657546341, + -7.60822546348193, + 1.052106194921365, + 3.990909806589108, + 4.330433817305722, + 5.836054787110924, + 6.808574652994296, + 8.302273439563253, + 12.705377487141, + 23.723351784961455, + 24.714358903442065, + 28.433885750402297, + 28.84813023364799, + 35.0167031731614, + 36.54406737017223, + 40.17482128864584, + 40.56218542441548, + 43.550906552769916, + 44.003945266365164, + 44.151256316415115, + 47.59814273268498, + 47.793742607818565, + 54.22570703572831, + 55.22971049486346, + 56.12763078218248, + 59.12730587863382, + 63.15002049958554, + 68.68539212817205, + 69.16309727722337, + 71.87976239555461, + 83.14615480370027, + 87.97663253420892, + 91.49052312642644, + 115.04045277003743, + 119.32290113804046, + 150.45553493104336, + 214.83420499315835, + 245.5771666885175, + 271.02230761095774, + 301.12403685887006, + 318.7989637982544, + 323.4489658987316 + ], + [ + -23.67662674696325, + -11.748115825314745, + -7.7240463741309755, + -7.569189009478474, + 1.0466404290448719, + 3.979378499466765, + 4.260982519688544, + 5.8939699053389125, + 6.8717957713381495, + 8.264448162154144, + 12.68654780648627, + 24.01864908964243, + 24.825433518511844, + 28.732043902227865, + 29.342424844968367, + 34.66433702297546, + 36.60203898041769, + 40.3416011814654, + 40.364371507760154, + 43.36010300542825, + 44.04236324334846, + 44.29312482288317, + 47.21373733607878, + 47.37341214364372, + 53.83246044843217, + 55.27852004478098, + 56.07579816636968, + 59.29693935773282, + 62.70691906430919, + 68.68687866962307, + 69.09543325178701, + 71.93478628000844, + 83.26424522001624, + 87.34413004551995, + 91.52367061911856, + 114.84542776251702, + 118.77598289590136, + 150.68867528075705, + 215.6148022993262, + 251.58179543383986, + 271.513241439235, + 302.71791235244297, + 320.61175818131073, + 325.0671465876216 + ], + [ + -23.693616947243605, + -11.76795300371504, + -7.659367755331389, + -7.533374795415139, + 1.0425263607066344, + 3.968988453484841, + 4.195996985447124, + 5.951171002027717, + 6.929940126619797, + 8.230452880489995, + 12.669272384013249, + 24.29361457313881, + 24.93636663685977, + 29.071755230747918, + 29.854596251396263, + 34.32810001319247, + 36.654979045377765, + 40.101187433563105, + 40.55817909077486, + 43.16564586306268, + 44.053019929639966, + 44.437448324541265, + 46.837939048203964, + 46.95719379674086, + 53.44637744560015, + 55.32943990720074, + 56.02626780808571, + 59.48228288257491, + 62.32894352356618, + 68.6892600242753, + 69.01780016095428, + 72.00297738907881, + 83.37046476750633, + 86.76132945622382, + 91.67166269364404, + 114.66353974047286, + 118.20074951439483, + 150.9081339279149, + 216.32279274578514, + 257.873058878399, + 271.94053844064473, + 303.9235144264181, + 322.5166074871383, + 326.4864144103053 + ], + [ + -23.708991868965082, + -11.785885735262722, + -7.599983183700602, + -7.500828367613139, + 1.0395698863766236, + 3.959700208375422, + 4.13587824165632, + 6.006703194213625, + 6.982897289538342, + 8.200140497808095, + 12.653569755602822, + 24.543550416791664, + 25.045831717719476, + 29.45266210438379, + 30.3818549085888, + 34.01072227918806, + 36.70316004092165, + 39.83774533338836, + 40.75560536009739, + 42.97290692879547, + 44.02379758007009, + 44.58245056478576, + 46.472616508333424, + 46.560039373227596, + 53.073161113476736, + 55.38059629490018, + 55.980301858529025, + 59.67861626183361, + 62.00848385670385, + 68.69212876735021, + 68.93568690369783, + 72.07882720421436, + 83.46112876204596, + 86.22981377694758, + 91.9232332656514, + 114.49598393238001, + 117.60564087072022, + 151.1120552579914, + 216.95991122136402, + 264.3902678782659, + 272.31017972387883, + 304.83052306794156, + 324.4195559514319, + 327.7202429762768 + ], + [ + -23.722750621478426, + -11.801916656098744, + -7.546129749743706, + -7.471590608922709, + 1.0375766005085727, + 3.9514741130748363, + 4.081006233221642, + 6.05959981239881, + 7.030565327549318, + 8.173377294150216, + 12.639458587895831, + 24.765248355327913, + 25.15227370471383, + 29.87082216168744, + 30.920788547164438, + 33.71501994415803, + 36.746698899344494, + 39.54847802823725, + 40.955787893114376, + 42.78766318835883, + 43.93815968873389, + 44.726027891869805, + 46.11964632539489, + 46.20293417371126, + 52.718362129496654, + 55.43038566192704, + 55.93880030318715, + 59.880442435109174, + 61.738627778212916, + 68.69513152370885, + 68.853539127164, + 72.15770263169476, + 83.53485750763903, + 85.7508117878624, + 92.26185561602587, + 114.34375867970579, + 117.00090833770848, + 151.29881798282244, + 217.52753936508404, + 271.03617057342075, + 272.6274401192394, + 305.5160744406549, + 326.24168810699604, + 328.782377900089 + ], + [ + -23.73489242614376, + -11.816048979314829, + -7.498032983971261, + -7.445696751052157, + 1.0363557421576317, + 3.9442654516966225, + 4.031741373829677, + 6.108909283615145, + 7.072851386475618, + 8.150043429181697, + 12.62695715683581, + 24.957195599435078, + 25.253901968161664, + 30.318027901136794, + 31.4671998692345, + 33.44389775126388, + 36.78559433088461, + 39.2317245033776, + 41.15751074021098, + 42.61544280113608, + 43.779272970627254, + 44.86568264148682, + 45.781127299106366, + 45.90927669249773, + 52.38734036298303, + 55.47742918211197, + 55.902319041825, + 60.081589691081874, + 61.51332146056877, + 68.69796571441627, + 68.77487962615901, + 72.23575791634487, + 83.59225375655619, + 85.32533995532901, + 92.66602042269794, + 114.2076963020735, + 116.39896554424149, + 151.4669957635944, + 218.02674427739748, + 272.89693559076363, + 277.6740402223187, + 306.0385040671082, + 327.92463738294884, + 329.6861505303926 + ], + [ + -23.745416612135646, + -11.82828632049941, + -7.45590701142256, + -7.42317289991606, + 1.0357244951899505, + 3.9380010035068653, + 3.9884447613622713, + 6.1537222088399615, + 7.109672224409605, + 8.130033222631287, + 12.616082857623631, + 25.11937272720606, + 25.34870244696803, + 30.781456516342157, + 32.01578922791773, + 33.20033646777193, + 36.81976160996119, + 38.88787024945552, + 41.358904564611684, + 42.46091464449265, + 43.541837936736485, + 44.998468932618614, + 45.45968641417704, + 45.69368141181016, + 52.08530832937022, + 55.520542014300474, + 55.871117162500184, + 60.27538501088866, + 61.32742283499362, + 68.69801313242027, + 68.70484629790737, + 72.30978650473435, + 83.63522836913141, + 84.95429911074022, + 93.10995259656465, + 114.08848591387566, + 115.81471105256125, + 151.61533467828266, + 218.45832351356455, + 273.12266211029794, + 284.1275801812339, + 306.43906406674404, + 329.4280286644301, + 330.4442248450951 + ], + [ + -23.754322611875367, + -11.838632490473415, + -7.4199722701257445, + -7.404015022004164, + 1.0355124742811177, + 3.9323549315151034, + 3.951699192832239, + 6.193197120398167, + 7.140954692963051, + 8.113255271739762, + 12.606851753054297, + 25.252793038783334, + 25.434479145549975, + 31.24353126754463, + 32.5595057298384, + 32.9873543564339, + 36.84906384824724, + 38.5203513855154, + 41.55698039950272, + 42.3275089466111, + 43.24285278426758, + 45.12097382643821, + 45.15895465669155, + 45.55195296912082, + 51.81740062534909, + 55.55871357228266, + 55.84522254034069, + 60.454903343434985, + 61.17668297018729, + 68.6375823257376, + 68.7031049237107, + 72.37708970932552, + 83.6662817062475, + 84.63852974107006, + 93.56456231338282, + 113.98668884749917, + 115.26571091449051, + 151.7427424346639, + 218.82285187113607, + 273.3080272845113, + 290.18533789303024, + 306.74599307798286, + 330.72214329717525, + 331.07104096259974 + ], + [ + -23.76160995622772, + -11.847091266026403, + -7.391005383827703, + -7.387635902801773, + 1.0355662020207987, + 3.9186873845317494, + 3.9303676455343988, + 6.2265836571581135, + 7.166636161711561, + 8.099632457196488, + 12.599278166621628, + 25.358989783652618, + 25.508935313269014, + 31.681926654351024, + 32.80793258102548, + 33.08816418221335, + 36.87333923207104, + 38.13707492043501, + 41.74686631729153, + 42.21736640319301, + 42.917347756408276, + 44.88433194315065, + 45.2293696921574, + 45.46605094451089, + 51.58870295924581, + 55.59109581725802, + 55.82450497854924, + 60.61328596033353, + 61.05769084081479, + 68.58307754442181, + 68.70479691965338, + 72.4353898897408, + 83.68794561375326, + 84.37883056013595, + 93.99860305435396, + 113.90274411741548, + 114.77204792186049, + 151.84828537220687, + 219.12072685903226, + 273.45587583260783, + 295.6110898065207, + 306.9783170812104, + 331.5478825320957, + 331.8184415573384 + ], + [ + -23.76727826967689, + -11.853666153068506, + -7.376532123247333, + -7.366669251612753, + 1.0357533681689244, + 3.8954404834147485, + 3.926194622737798, + 6.253242282331801, + 7.186664882433768, + 8.089101880766396, + 12.593374326307307, + 25.439594714569097, + 25.569800849312617, + 32.0699522163576, + 32.66490318781072, + 33.585382305890825, + 36.8924239083451, + 37.75325094239132, + 41.920597282412615, + 42.131594766345124, + 42.60607236987539, + 44.64416456680966, + 45.31958146809762, + 45.41666658046206, + 51.40417310539455, + 55.616997248884104, + 55.80874784314119, + 60.744094363937, + 60.967823085229355, + 68.53951229657577, + 68.70610475021932, + 72.48279048811084, + 83.7024433343221, + 84.17594643018822, + 94.38023315035235, + 113.83694862060317, + 114.35557406352345, + 151.9311902091979, + 219.35221058201904, + 273.5685098231604, + 300.1608052992586, + 307.1487020435217, + 331.93181348770673, + 332.6573279145297 + ], + [ + -23.771327265755065, + -11.858360159054323, + -7.3677098082347126, + -7.350084710216166, + 1.0359666620600934, + 3.8782083058362247, + 3.923733829501978, + 6.2726601023821615, + 7.201000290441559, + 8.081614769710674, + 12.589150064506866, + 25.496055701385014, + 25.615002796592982, + 32.3779574689751, + 32.56088645216061, + 34.02180997389351, + 36.906170010369685, + 37.39780406510403, + 42.06143213580961, + 42.074864299666295, + 42.34807405437304, + 44.451191307385606, + 45.38729490785452, + 45.38998678083686, + 51.26840242581115, + 55.635880722811315, + 55.79771166004841, + 60.841416894989656, + 60.90546762694367, + 68.50779839505974, + 68.70701244530584, + 72.5177737838645, + 83.71153089140799, + 84.03053230140705, + 94.6792724729532, + 113.78932053145846, + 114.03837545585206, + 151.9908482210143, + 219.51746631032162, + 273.64770437577675, + 303.60527504407975, + 307.2654126717686, + 332.1980639829917, + 333.2634871953209 + ], + [ + -23.77375674303568, + -11.86117559232686, + -7.362445926452948, + -7.340067093741074, + 1.0361269835975975, + 3.8677802505627077, + 3.922302880200352, + 6.284462732409693, + 7.209613240923035, + 8.077136375525903, + 12.58661257896433, + 25.529476679890195, + 25.642860901437, + 32.496586227635355, + 32.578504666153705, + 34.34286205390747, + 36.91445656151361, + 37.1252898435039, + 42.0331778879489, + 42.16605839228718, + 42.177114560705625, + 44.322925172231606, + 45.3763923265861, + 45.43005759656174, + 51.185214801045035, + 55.64736330347566, + 55.79118588249597, + 60.86616251792558, + 60.904054478223365, + 68.48853804087069, + 68.70754266680896, + 72.5392224090056, + 83.71646038766846, + 83.94309554763271, + 94.87026771976873, + 113.7585798267736, + 113.84114134392519, + 152.02682011799536, + 219.6165883756363, + 273.69471937474157, + 305.7555734151694, + 307.3335934411448, + 332.3557448558033, + 333.62866717308054 + ], + [ + -23.77456658199945, + -11.862113904920832, + -7.360692879264436, + -7.336720043909155, + 1.0361858661247307, + 3.864292613251589, + 3.9218302821339, + 6.288422418520035, + 7.212486178779185, + 8.075645887535552, + 12.585766258827853, + 25.54054028339041, + 25.652274801965195, + 32.47564656561916, + 32.64745948266619, + 34.46628718265394, + 36.91720758252209, + 37.01804816055488, + 42.02106072897834, + 42.117180175924574, + 42.201903436622835, + 44.2774264097718, + 45.37243853928308, + 45.44447379866917, + 51.15718193629563, + 55.651216153545114, + 55.789027499388325, + 60.85447012028972, + 60.92392299964691, + 68.48207981286465, + 68.70771667584796, + 72.54644932889197, + 83.71800955615699, + 83.91392496616092, + 94.93597604257334, + 113.74227182535878, + 113.77983528615853, + 152.03884036792965, + 219.6496242925334, + 273.710307575912, + 306.48688099280054, + 307.356041458302, + 332.4079827969989, + 333.75060193678587 + ] + ], + "iTBEigVal": [ + [ -12.0, 12.0 ], + [ -11.998657371244663, 11.998657371244663 ], + [ -11.994629935692082, 11.994629935692082 ], + [ -11.987919045634124, 11.987919045634124 ], + [ -11.978526955396928, 11.978526955396928 ], + [ -11.966456822104409, 11.966456822104409 ], + [ -11.951712706755174, 11.951712706755174 ], + [ -11.934299575620928, 11.934299575620928 ], + [ -11.914223301976783, 11.914223301976783 ], + [ -11.89149066817645, 11.89149066817645 ], + [ -11.866109368087756, 11.866109368087756 ], + [ -11.838088009906736, 11.838088009906736 ], + [ -11.807436119371047, 11.807436119371047 ], + [ -11.774164143396835, 11.774164143396835 ], + [ -11.738283454165815, 11.738283454165815 ], + [ -11.699806353692956, 11.699806353692956 ], + [ -11.658746078908536, 11.658746078908536 ], + [ -11.615116807292008, 11.615116807292008 ], + [ -11.56893366309939, 11.56893366309939 ], + [ -11.520212724229872, 11.520212724229872 ], + [ -11.468971029782322, 11.468971029782322 ], + [ -11.415226588357179, 11.415226588357179 ], + [ -11.35899838716481, 11.35899838716481 ], + [ -11.30030640200726, 11.30030640200726 ], + [ -11.239171608206822, 11.239171608206822 ], + [ -11.175615992561763, 11.175615992561763 ], + [ -11.109662566417308, 11.109662566417308 ], + [ -11.04133537994819, 11.04133537994819 ], + [ -10.970659537758277, 10.970659537758277 ], + [ -10.897661215912695, 10.897661215912695 ], + [ -10.822367680528751, 10.822367680528751 ], + [ -10.744807308064091, 10.744807308064091 ], + [ -10.665009607453168, 10.665009607453168 ], + [ -10.583005244258176, 10.583005244258176 ], + [ -10.498826067015663, 10.498826067015663 ], + [ -10.412505135977858, 10.412505135977858 ], + [ -10.324076754466537, 10.324076754466537 ], + [ -10.233576503078268, 10.233576503078268 ], + [ -10.141041277002824, 10.141041277002824 ], + [ -10.046509326741806, 10.046509326741806 ], + [ -9.950020302542327, 9.950020302542327 ], + [ -9.851615302891044, 9.851615302891044 ], + [ -9.751336927447328, 9.751336927447328 ], + [ -9.649229334831185, 9.649229334831185 ], + [ -9.545338305721689, 9.545338305721689 ], + [ -9.439711311766075, 9.439711311766075 ], + [ -9.332397590847632, 9.332397590847632 ], + [ -9.223448229313611, 9.223448229313611 ], + [ -9.112916251821547, 9.112916251821547 ], + [ -9.000856719525167, 9.000856719525167 ], + [ -8.887326837388475, 8.887326837388475 ], + [ -8.7723860714901, 8.7723860714901 ], + [ -8.656096277257923, 8.656096277257923 ], + [ -8.538521839658674, 8.538521839658674 ], + [ -8.41972982645539, 8.41972982645539 ], + [ -8.299790155739428, 8.299790155739428 ], + [ -8.178775779040553, 8.178775779040553 ], + [ -8.056762881417649, 8.056762881417649 ], + [ -7.933831100031703, 7.933831100031703 ], + [ -7.810063762798793, 7.810063762798793 ], + [ -7.685548148810041, 7.685548148810041 ], + [ -7.560375772282263, 7.560375772282263 ], + [ -7.4346426918603274, 7.4346426918603274 ], + [ -7.308449847120227, 7.308449847120227 ], + [ -7.1819034241086035, 7.1819034241086035 ], + [ -7.0551152516837545, 7.0551152516837545 ], + [ -6.928203230274966, 6.928203230274966 ], + [ -6.801291794425554, 6.801291794425554 ], + [ -6.674512410098697, 6.674512410098697 ], + [ -6.548004107163926, 6.548004107163926 ], + [ -6.4219140466983635, 6.4219140466983635 ], + [ -6.296398121671076, 6.296398121671076 ], + [ -6.171621588164197, 6.171621588164197 ], + [ -6.047759722437416, 6.047759722437416 ], + [ -5.924998496775195, 5.924998496775195 ], + [ -5.80353526406694, 5.80353526406694 ], + [ -5.683579437356787, 5.683579437356787 ], + [ -5.565353146061691, 5.565353146061691 ], + [ -5.4490918451109955, 5.4490918451109955 ], + [ -5.335044846859863, 5.335044846859863 ], + [ -5.223475738288124, 5.223475738288124 ], + [ -5.114662637828478, 5.114662637828478 ], + [ -5.008898237432647, 5.008898237432647 ], + [ -4.906489566638086, 4.906489566638086 ], + [ -4.807757407157706, 4.807757407157706 ], + [ -4.7130352799073565, 4.7130352799073565 ], + [ -4.62266792278474, 4.62266792278474 ], + [ -4.537009178629364, 4.537009178629364 ], + [ -4.45641922059605, 4.45641922059605 ], + [ -4.3812610587108045, 4.3812610587108045 ], + [ -4.3118962984595, 4.3118962984595 ], + [ -4.248680161018254, 4.248680161018254 ], + [ -4.191955825069154, 4.191955825069154 ], + [ -4.142048210147293, 4.142048210147293 ], + [ -4.099257386979838, 4.099257386979838 ], + [ -4.063851864774045, 4.063851864774045 ], + [ -4.036062060390221, 4.036062060390221 ], + [ -4.016074290373445, 4.016074290373445 ], + [ -4.004025635217104, 4.004025635217104 ], + [ -4.0, 4.0 ], + [ -4.0, 4.0 ], + [ -3.999552448735321, 3.999552448735321 ], + [ -3.9982098450168144, 3.9982098450168144 ], + [ -3.995972339065482, 3.995972339065482 ], + [ -3.9928401812309744, 3.9928401812309744 ], + [ -3.9888137219635955, 3.9888137219635955 ], + [ -3.983893411775077, 3.983893411775077 ], + [ -3.9780798011881804, 3.9780798011881804 ], + [ -3.971373540675101, 3.971373540675101 ], + [ -3.96377538058468, 3.96377538058468 ], + [ -3.9552861710584577, 3.9552861710584577 ], + [ -3.945906861935548, 3.945906861935548 ], + [ -3.935638502646368, 3.935638502646368 ], + [ -3.9244822420952112, 3.9244822420952112 ], + [ -3.912439328531711, 3.912439328531711 ], + [ -3.8995111094111636, 3.8995111094111636 ], + [ -3.8856990312437727, 3.8856990312437727 ], + [ -3.8710046394328006, 3.8710046394328006 ], + [ -3.8554295781016616, 3.8554295781016616 ], + [ -3.8389755899099516, 3.8389755899099516 ], + [ -3.8216445158584786, 3.8216445158584786 ], + [ -3.8034382950832675, 3.8034382950832675 ], + [ -3.784358964638603, 3.784358964638603 ], + [ -3.7644086592691033, 3.7644086592691033 ], + [ -3.743589611170866, 3.743589611170866 ], + [ -3.721904149741719, 3.721904149741719 ], + [ -3.6993547013205843, 3.6993547013205843 ], + [ -3.6759437889159994, 3.6759437889159994 ], + [ -3.651674031923832, 3.651674031923832 ], + [ -3.6265481458341857, 3.6265481458341857 ], + [ -3.600568941927589, 3.600568941927589 ], + [ -3.573739326960432, 3.573739326960432 ], + [ -3.5460623028397387, 3.5460623028397387 ], + [ -3.5175409662872994, 3.5175409662872994 ], + [ -3.488178508493175, 3.488178508493175 ], + [ -3.4579782147586435, 3.4579782147586435 ], + [ -3.42694346412862, 3.42694346412862 ], + [ -3.395077729013578, 3.395077729013578 ], + [ -3.36238457480103, 3.36238457480103 ], + [ -3.328867659456604, 3.328867659456604 ], + [ -3.294530733114763, 3.294530733114763 ], + [ -3.259377637659209, 3.259377637659209 ], + [ -3.2234123062930244, 3.2234123062930244 ], + [ -3.1866387630985944, 3.1866387630985944 ], + [ -3.1490611225873595, 3.1490611225873595 ], + [ -3.1106835892394513, 3.1106835892394513 ], + [ -3.071510457033269, 3.071510457033269 ], + [ -3.0315461089650255, 3.0315461089650255 ], + [ -2.990795016558352, 2.990795016558352 ], + [ -2.949261739363984, 2.949261739363984 ], + [ -2.906950924449593, 2.906950924449593 ], + [ -2.863867305879886, 2.863867305879886 ], + [ -2.820015704186843, 2.820015704186843 ], + [ -2.775401025830414, 2.775401025830414 ], + [ -2.7300282626495282, 2.7300282626495282 ], + [ -2.683902491303575, 2.683902491303575 ], + [ -2.6370288727043745, 2.6370288727043745 ], + [ -2.589412651438751, 2.589412651438751 ], + [ -2.5410591551817165, 2.5410591551817165 ], + [ -2.4919737941003697, 2.4919737941003697 ], + [ -2.4421620602485676, 2.4421620602485676 ], + [ -2.3916295269524337, 2.3916295269524337 ], + [ -2.3403818481867615, 2.3403818481867615 ], + [ -2.2884247579424106, 2.2884247579424106 ], + [ -2.235764069584745, 2.235764069584745 ], + [ -2.182405675203184, 2.182405675203184 ], + [ -2.128355544951947, 2.128355544951947 ], + [ -2.073619726382072, 2.073619726382072 ], + [ -2.018204343764767, 2.018204343764767 ], + [ -1.9621155974061721, 1.9621155974061721 ], + [ -1.9053597629536307, 1.9053597629536307 ], + [ -1.8479431906935173, 1.8479431906935173 ], + [ -1.7898723048407077, 1.7898723048407077 ], + [ -1.7311536028198093, 1.7311536028198093 ], + [ -1.671793654538156, 1.671793654538156 ], + [ -1.6117991016507296, 1.6117991016507296 ], + [ -1.551176656817035, 1.551176656817035 ], + [ -1.4899331029500358, 1.4899331029500358 ], + [ -1.4280752924572295, 1.4280752924572295 ], + [ -1.365610146473943, 1.365610146473943 ], + [ -1.3025446540889503, 1.3025446540889503 ], + [ -1.2388858715624662, 1.2388858715624662 ], + [ -1.1746409215366311, 1.1746409215366311 ], + [ -1.10981699223864, 1.10981699223864 ], + [ -1.0444213366763584, 1.0444213366763584 ], + [ -0.9784612718268766, 0.9784612718268766 ], + [ -0.9119441778178053, 0.9119441778178053 ], + [ -0.8448774971015265, 0.8448774971015265 ], + [ -0.7772687336224857, 0.7772687336224857 ], + [ -0.709125451977585, 0.709125451977585 ], + [ -0.6404552765697921, 0.6404552765697921 ], + [ -0.571265890755068, 0.571265890755068 ], + [ -0.5015650359826961, 0.5015650359826961 ], + [ -0.43136051092910355, 0.43136051092910355 ], + [ -0.36066017062527916, 0.36066017062527916 ], + [ -0.2894719255779011, 0.2894719255779011 ], + [ -0.2178037408842531, 0.2178037408842531 ], + [ -0.14566363534100138, 0.14566363534100138 ], + [ -0.07305968054701717, 0.07305968054701717 ], + [ -4.938194137562605e-13, 4.938194137562605e-13 ], + [ -4.938194137562605e-13, 4.938194137562605e-13 ], + [ -0.1474537903244454, 0.1474537903244454 ], + [ -0.2966317443471915, 0.2966317443471915 ], + [ -0.44746709915430016, 0.44746709915430016 ], + [ -0.5998923500802509, 0.5998923500802509 ], + [ -0.7538392809194189, 0.7538392809194189 ], + [ -0.9092389944554584, 0.9092389944554584 ], + [ -1.0660219432954752, 1.0660219432954752 ], + [ -1.2241179609951829, 1.2241179609951829 ], + [ -1.3834562934611052, 1.3834562934611052 ], + [ -1.5439656306157747, 1.5439656306157747 ], + [ -1.7055741383117482, 1.7055741383117482 ], + [ -1.8682094904801851, 1.8682094904801851 ], + [ -2.0317989014995574, 2.0317989014995574 ], + [ -2.1962691587700203, 2.1962691587700203 ], + [ -2.3615466554789277, 2.3615466554789277 ], + [ -2.527557423542687, 2.527557423542687 ], + [ -2.694227166710416, 2.694227166710416 ], + [ -2.8614812938142054, 2.8614812938142054 ], + [ -3.0292449521518248, 3.0292449521518248 ], + [ -3.197443060986034, 3.197443060986034 ], + [ -3.3660003451461593, 3.3660003451461593 ], + [ -3.5348413687166547, 3.5348413687166547 ], + [ -3.703890568797588, 3.703890568797588 ], + [ -3.8730722893219833, 3.8730722893219833 ], + [ -4.0423108149148215, 4.0423108149148215 ], + [ -4.211530404778619, 4.211530404778619 ], + [ -4.380655326590364, 4.380655326590364 ], + [ -4.549609890394667, 4.549609890394667 ], + [ -4.718318482477941, 4.718318482477941 ], + [ -4.886705599208489, 4.886705599208489 ], + [ -5.054695880827275, 5.054695880827275 ], + [ -5.2222141451743616, 5.2222141451743616 ], + [ -5.389185421335818, 5.389185421335818 ], + [ -5.555534983196135, 5.555534983196135 ], + [ -5.721188382881027, 5.721188382881027 ], + [ -5.8860714840757655, 5.8860714840757655 ], + [ -6.050110495204043, 6.050110495204043 ], + [ -6.21323200245255, 6.21323200245255 ], + [ -6.375363002626521, 6.375363002626521 ], + [ -6.53643093582149, 6.53643093582149 ], + [ -6.696363717896638, 6.696363717896638 ], + [ -6.85508977273527, 6.85508977273527 ], + [ -7.012538064277876, 7.012538064277876 ], + [ -7.168638128313531, 7.168638128313531 ], + [ -7.323320104015359, 7.323320104015359 ], + [ -7.476514765205955, 7.476514765205955 ], + [ -7.62815355133879, 7.62815355133879 ], + [ -7.778168598181701, 7.778168598181701 ], + [ -7.926492768188775, 7.926492768188775 ], + [ -8.07305968054704, 8.07305968054704 ], + [ -8.217803740884275, 8.217803740884275 ], + [ -8.3606601706253, 8.3606601706253 ], + [ -8.501565035982718, 8.501565035982718 ], + [ -8.640455276569812, 8.640455276569812 ], + [ -8.777268733622506, 8.777268733622506 ], + [ -8.911944177817823, 8.911944177817823 ], + [ -9.044421336676379, 9.044421336676379 ], + [ -9.17464092153665, 9.17464092153665 ], + [ -9.302544654088951, 9.302544654088951 ], + [ -9.42807529245723, 9.42807529245723 ], + [ -9.551176656817034, 9.551176656817034 ], + [ -9.671793654538156, 9.671793654538156 ], + [ -9.789872304840708, 9.789872304840708 ], + [ -9.90535976295363, 9.90535976295363 ], + [ -10.018204343764767, 10.018204343764767 ], + [ -10.128355544951948, 10.128355544951948 ], + [ -10.235764069584746, 10.235764069584746 ], + [ -10.340381848186762, 10.340381848186762 ], + [ -10.442162060248569, 10.442162060248569 ], + [ -10.541059155181717, 10.541059155181717 ], + [ -10.637028872704374, 10.637028872704374 ], + [ -10.730028262649528, 10.730028262649528 ], + [ -10.820015704186844, 10.820015704186844 ], + [ -10.906950924449594, 10.906950924449594 ], + [ -10.99079501655834, 10.99079501655834 ], + [ -11.07151045703326, 11.07151045703326 ], + [ -11.149061122587346, 11.149061122587346 ], + [ -11.223412306293014, 11.223412306293014 ], + [ -11.294530733114755, 11.294530733114755 ], + [ -11.36238457480102, 11.36238457480102 ], + [ -11.42694346412861, 11.42694346412861 ], + [ -11.488178508493181, 11.488178508493181 ], + [ -11.546062302839749, 11.546062302839749 ], + [ -11.600568941927596, 11.600568941927596 ], + [ -11.651674031923838, 11.651674031923838 ], + [ -11.699354701320589, 11.699354701320589 ], + [ -11.743589611170874, 11.743589611170874 ], + [ -11.78435896463861, 11.78435896463861 ], + [ -11.821644515858482, 11.821644515858482 ], + [ -11.855429578101665, 11.855429578101665 ], + [ -11.885699031243776, 11.885699031243776 ], + [ -11.912439328531713, 11.912439328531713 ], + [ -11.935638502646368, 11.935638502646368 ], + [ -11.955286171058457, 11.955286171058457 ], + [ -11.971373540675101, 11.971373540675101 ], + [ -11.983893411775076, 11.983893411775076 ], + [ -11.992840181230974, 11.992840181230974 ], + [ -11.998209845016815, 11.998209845016815 ], + [ -12.0, 12.0 ] + ], + "fTBEigVal": [ + [ -7.18263045, 6.86684559 ], + [ -7.181844482061304, 6.866059622061302 ], + [ -7.179486842090528, 6.863701982090526 ], + [ -7.175558321712347, 6.859773461712346 ], + [ -7.170060240597638, 6.854275380597637 ], + [ -7.162994446910435, 6.847209586910434 ], + [ -7.154363317938348, 6.838578457938347 ], + [ -7.144169760911184, 6.8283849009111846 ], + [ -7.132417214013854, 6.816632354013853 ], + [ -7.119109647601191, 6.803324787601193 ], + [ -7.104251565623687, 6.788466705623685 ], + [ -7.087848007274831, 6.772063147274832 ], + [ -7.0699045488722545, 6.754119688872253 ], + [ -7.050427305986706, 6.734642445986705 ], + [ -7.029422935834627, 6.713638075834626 ], + [ -7.00689863995204, 6.6911137799520395 ], + [ -6.98286216716956, 6.667077307169559 ], + [ -6.957321816910433, 6.641536956910433 ], + [ -6.930286442836013, 6.614501582836014 ], + [ -6.901765456865447, 6.585980596865446 ], + [ -6.871768833599203, 6.5559839735992025 ], + [ -6.840307115178963, 6.524522255178963 ], + [ -6.80739141661961, 6.491606556619609 ], + [ -6.773033431652484, 6.4572485716524834 ], + [ -6.737245439122918, 6.421460579122917 ], + [ -6.700040309989055, 6.3842554499890545 ], + [ -6.661431514973537, 6.345646654973536 ], + [ -6.621433132924432, 6.305648272924433 ], + [ -6.580059859947183, 6.264274999947182 ], + [ -6.537327019375111, 6.22154215937511 ], + [ -6.493250572652462, 6.177465712652461 ], + [ -6.447847131210972, 6.132062271210973 ], + [ -6.401133969428463, 6.085349109428462 ], + [ -6.3531290387666495, 6.037344178766649 ], + [ -6.303850983194334, 5.988066123194333 ], + [ -6.253319156012411, 5.9375342960124105 ], + [ -6.201553638208274, 5.885768778208273 ], + [ -6.148575258479379, 5.8327903984793785 ], + [ -6.094405615079257, 5.778620755079258 ], + [ -6.03906709965398, 5.7232822396539795 ], + [ -5.982582923253417, 5.666798063253417 ], + [ -5.924977144719377, 5.609192284719376 ], + [ -5.866274701672436, 5.5504898416724355 ], + [ -5.80650144434066, 5.490716584340661 ], + [ -5.745684172497128, 5.429899312497128 ], + [ -5.6838506757989355, 5.368065815798935 ], + [ -5.621029777848649, 5.305244917848648 ], + [ -5.5572513843300815, 5.241466524330082 ], + [ -5.492546535603893, 5.176761675603894 ], + [ -5.426947464185076, 5.111162604185077 ], + [ -5.360487657564098, 5.0447027975640975 ], + [ -5.293201926876246, 4.977417066876245 ], + [ -5.225126481969515, 4.9093416219695145 ], + [ -5.1562990134708855, 4.840514153470885 ], + [ -5.086758782502431, 4.770973922502431 ], + [ -5.016546718753706, 4.700761858753707 ], + [ -4.945705527673441, 4.62992066767344 ], + [ -4.87427980760161, 4.558494947601609 ], + [ -4.802316177720928, 4.486531317720927 ], + [ -4.729863417763079, 4.414078557763078 ], + [ -4.65697262045721, 4.341187760457209 ], + [ -4.583697357753173, 4.267912497753172 ], + [ -4.510093861885532, 4.194309001885531 ], + [ -4.436221222360721, 4.12043636236072 ], + [ -4.362141599941991, 4.046356739941991 ], + [ -4.287920458665396, 3.9721355986653952 ], + [ -4.2136268168332816, 3.897841956833281 ], + [ -4.139333517784602, 3.8235486577846003 ], + [ -4.065117521015179, 3.7493326610151785 ], + [ -3.991060213892549, 3.675275353892549 ], + [ -3.9172477437511706, 3.60146288375117 ], + [ -3.8437713695299496, 3.5279865095299496 ], + [ -3.7707278312858183, 3.4549429712858184 ], + [ -3.698219734835897, 3.382434874835897 ], + [ -3.626355947394963, 3.310571087394963 ], + [ -3.555251998325148, 3.239467138325148 ], + [ -3.485030476940869, 3.169245616940869 ], + [ -3.4158214166555143, 3.1000365566555144 ], + [ -3.3477626515685963, 3.0319777915685964 ], + [ -3.28100012784513, 2.9652152678451302 ], + [ -3.215688147941679, 2.899903287941679 ], + [ -3.1519895209522666, 2.8362046609522666 ], + [ -3.0900755872336747, 2.7742907272336748 ], + [ -3.0301260802913244, 2.7143412202913244 ], + [ -2.972328784083114, 2.6565439240831146 ], + [ -2.916878940030546, 2.6010940800305464 ], + [ -2.863978355918366, 2.548193495918366 ], + [ -2.813834169517222, 2.498049309517222 ], + [ -2.766657224331653, 2.450872364331653 ], + [ -2.7226600245559363, 2.406875164555936 ], + [ -2.6820542521738098, 2.36626939217381 ], + [ -2.6450478518270546, 2.3292629918270547 ], + [ -2.6118417185436464, 2.2960568585436465 ], + [ -2.5826260585412197, 2.26684119854122 ], + [ -2.5575765316735932, 2.2417916716735933 ], + [ -2.5368503218438447, 2.221065461843845 ], + [ -2.5205823138918935, 2.2047974538918935 ], + [ -2.508881576560905, 2.193096716560905 ], + [ -2.5018283560636867, 2.1860434960636868 ], + [ -2.49947177, 2.1836869099999996 ], + [ -2.49947177, 2.1836869099999996 ], + [ -2.4992097758012592, 2.1834249158012597 ], + [ -2.498423822518994, 2.182638962518994 ], + [ -2.497113998091802, 2.181329138091802 ], + [ -2.4952804490730767, 2.1794955890730767 ], + [ -2.492923380614615, 2.177138520614615 ], + [ -2.4900430564436578, 2.1742581964436583 ], + [ -2.4866397988333877, 2.1708549388333878 ], + [ -2.4827139885668665, 2.1669291285668666 ], + [ -2.4782660648944312, 2.1624812048944313 ], + [ -2.473296525484548, 2.157511665484548 ], + [ -2.4678059263681282, 2.152021066368128 ], + [ -2.461794881876318, 2.1460100218763176 ], + [ -2.455264064571756, 2.139479204571756 ], + [ -2.4482142051733318, 2.1324293451733323 ], + [ -2.440646092474415, 2.124861232474415 ], + [ -2.4325605732546083, 2.1167757132546083 ], + [ -2.423958552184999, 2.108173692184999 ], + [ -2.4148409917269418, 2.099056131726942 ], + [ -2.405208912024363, 2.089424052024363 ], + [ -2.395063390789629, 2.079278530789629 ], + [ -2.3844055631829506, 2.0686207031829507 ], + [ -2.3732366216853857, 2.057451761685386 ], + [ -2.3615578159654076, 2.0457729559654076 ], + [ -2.3493704527390835, 2.033585592739084 ], + [ -2.336675895623869, 2.0208910356238694 ], + [ -2.3234755649860377, 2.0076907049860377 ], + [ -2.309770937781756, 1.9939860777817562 ], + [ -2.295563547391836, 1.979778687391836 ], + [ -2.2808549834501592, 1.9650701234501593 ], + [ -2.2656468916658254, 1.9498620316658255 ], + [ -2.249940973639013, 1.9341561136390129 ], + [ -2.2337389866705886, 1.9179541266705886 ], + [ -2.2170427435654942, 1.9012578835654943 ], + [ -2.1998541124299082, 1.8840692524299083 ], + [ -2.18217501646223, 1.86639015646223 ], + [ -2.1640074337379023, 1.8482225737379023 ], + [ -2.145353396988078, 1.829568536988078 ], + [ -2.1262149933721943, 1.810430133372194 ], + [ -2.106594364244435, 1.7908095042444345 ], + [ -2.0864937049141457, 1.7707088449141457 ], + [ -2.0659152644002026, 1.7501304044002026 ], + [ -2.044861345179375, 1.7290764851793745 ], + [ -2.023334302928706, 1.707549442928706 ], + [ -2.0013365462619417, 1.6855516862619422 ], + [ -1.978870536460036, 1.6630856764600361 ], + [ -1.9559387871957652, 1.6401539271957652 ], + [ -1.932543864252473, 1.616759004252473 ], + [ -1.9086883852369991, 1.5929035252369992 ], + [ -1.8843750192867925, 1.5685901592867926 ], + [ -1.8596064867712674, 1.5438216267712674 ], + [ -1.83438555898745, 1.5186006989874499 ], + [ -1.8087150578498659, 1.492930197849866 ], + [ -1.7825978555748259, 1.466812995574826 ], + [ -1.7560368743590573, 1.4402520143590574 ], + [ -1.729035086052745, 1.4132502260527449 ], + [ -1.7015955118270134, 1.3858106518270135 ], + [ -1.6737212218359006, 1.3579363618359006 ], + [ -1.6454153348728406, 1.3296304748728407 ], + [ -1.61668101802171, 1.30089615802171 ], + [ -1.5875214863024703, 1.2717366263024703 ], + [ -1.5579400023114478, 1.2421551423114476 ], + [ -1.5279398758562845, 1.2121550158562844 ], + [ -1.497524463585612, 1.181739603585612 ], + [ -1.4666971686134904, 1.1509123086134905 ], + [ -1.4354614401386314, 1.1196765801386315 ], + [ -1.4038207730584804, 1.0880359130584805 ], + [ -1.3717787075781782, 1.0559938475781783 ], + [ -1.3393388288144592, 1.0235539688144593 ], + [ -1.3065047663945124, 0.9907199063945125 ], + [ -1.27328019404988, 0.9574953340498799 ], + [ -1.2396688292054048, 0.9238839692054048 ], + [ -1.2056744325632955, 0.8898895725632956 ], + [ -1.1713008076823577, 0.8555159476823577 ], + [ -1.136551800552411, 0.8207669405524108 ], + [ -1.1014312991639768, 0.785646439163977 ], + [ -1.0659432330732599, 0.7501583730732597 ], + [ -1.0300915729624747, 0.7143067129624745 ], + [ -0.9938803301955768, 0.6780954701955768 ], + [ -0.9573135563694396, 0.6415286963694397 ], + [ -0.920395342860533, 0.6046104828605331 ], + [ -0.8831298203671409, 0.5673449603671409 ], + [ -0.8455211584471841, 0.5297362984471842 ], + [ -0.8075735650517348, 0.49178870505173483 ], + [ -0.7692912860541364, 0.4535064260541365 ], + [ -0.7306786047749846, 0.41489374477498464 ], + [ -0.6917398415028649, 0.375954981502865 ], + [ -0.6524793530109612, 0.336694493010961 ], + [ -0.6129015320695941, 0.29711667206959413 ], + [ -0.5730108069547188, 0.2572259469547188 ], + [ -0.5328116409524528, 0.21702678095245295 ], + [ -0.4923085318596909, 0.17652367185969098 ], + [ -0.45150601148085956, 0.1357211514808595 ], + [ -0.41040864512085795, 0.09462378512085798 ], + [ -0.36902103107425716, 0.05323617107425721 ], + [ -0.3273478001108079, 0.011562940110807801 ], + [ -0.28539361495731974, -0.030391245042680162 ], + [ -0.24316316977594563, -0.07262169022405443 ], + [ -0.20066118963897414, -0.1151236703610258 ], + [ -0.1578924300002893, -0.1578924299997107 ], + [ -0.1578924300002893, -0.1578924299997107 ], + [ -0.24421111725710345, -0.07157374274289661 ], + [ -0.33153912103788624, 0.01575426103788624 ], + [ -0.4198373586773602, 0.10405249867736024 ], + [ -0.5090663132929907, 0.19328145329299082 ], + [ -0.5991860514703418, 0.2834011914703418 ], + [ -0.6901562411348191, 0.37437138113481916 ], + [ -0.7819361696018339, 0.4661513096018339 ], + [ -0.8744847617973115, 0.5586999017973115 ], + [ -0.9677605986403754, 0.6519757386403755 ], + [ -1.0617219355799925, 0.7459370755799928 ], + [ -1.1563267212772732, 0.8405418612772733 ], + [ -1.251532616425082, 0.935747756425082 ], + [ -1.3472970126965145, 1.0315121526965145 ], + [ -1.4435770518137647, 1.1277921918137648 ], + [ -1.5403296447288886, 1.2245447847288886 ], + [ -1.6375114909077961, 1.3217266309077962 ], + [ -1.7350790977089616, 1.4192942377089617 ], + [ -1.832988799847953, 1.517203939847953 ], + [ -1.9311967789395006, 1.6154119189395006 ], + [ -2.0296590831078145, 1.7138742231078143 ], + [ -2.128331646656779, 1.812546786656779 ], + [ -2.22717030979106, 1.91138544979106 ], + [ -2.32613083837932, 2.0103459783793203 ], + [ -2.4251689437507142, 2.1093840837507143 ], + [ -2.5242403025157776, 2.2084554425157776 ], + [ -2.623300576402863, 2.3075157164028632 ], + [ -2.7223054321012365, 2.4065205721012366 ], + [ -2.8212105611019536, 2.5054257011019536 ], + [ -2.919971699527625, 2.6041868395276246 ], + [ -3.0185446479422295, 2.7027597879422296 ], + [ -3.116885291132063, 2.8011004311320633 ], + [ -3.214949617849012, 2.899164757849012 ], + [ -3.3126937405072865, 2.9969088805072865 ], + [ -3.4100739148248285, 3.0942890548248285 ], + [ -3.507046559400556, 3.191261699400556 ], + [ -3.6035682752187377, 3.2877834152187377 ], + [ -3.699595865071739, 3.3838110050717396 ], + [ -3.7950863528924295, 3.4793014928924295 ], + [ -3.8899970029876574, 3.5742121429876574 ], + [ -3.984285339164116, 3.6685004791641163 ], + [ -4.07790916373809, 3.7621243037380894 ], + [ -4.170826576420551, 3.8550417164205504 ], + [ -4.262995993069166, 3.947211133069166 ], + [ -4.354376164298809, 4.038591304298808 ], + [ -4.444926193942254, 4.129141333942253 ], + [ -4.534605557352804, 4.218820697352803 ], + [ -4.623374119540635, 4.307589259540634 ], + [ -4.711192153134759, 4.395407293134759 ], + [ -4.798020356162562, 4.482235496162561 ], + [ -4.883819869638987, 4.568035009638988 ], + [ -4.968552294957332, 4.652767434957333 ], + [ -5.052179711074269, 4.736394851074269 ], + [ -5.1346646914808725, 4.818879831480872 ], + [ -5.215970320952464, 4.900185460952463 ], + [ -5.296060212069605, 4.980275352069606 ], + [ -5.3748985215028755, 5.0591136615028764 ], + [ -5.452449966054148, 5.1366651060541475 ], + [ -5.528679838447196, 5.212894978447195 ], + [ -5.603554022860533, 5.287769162860532 ], + [ -5.6770390101955766, 5.361254150195576 ], + [ -5.74910191307326, 5.433317053073259 ], + [ -5.819710480552411, 5.503925620552411 ], + [ -5.888833112563297, 5.5730482525632965 ], + [ -5.95643887404988, 5.640654014049879 ], + [ -6.022497508814459, 5.706712648814459 ], + [ -6.086979453058481, 5.77119459305848 ], + [ -6.149855848613491, 5.83407098861349 ], + [ -6.211098555856284, 5.895313695856284 ], + [ -6.270680166302471, 5.95489530630247 ], + [ -6.3285740148728395, 6.012789154872839 ], + [ -6.384754191827014, 6.068969331827013 ], + [ -6.439195554359058, 6.123410694359058 ], + [ -6.4918737378498665, 6.176088877849866 ], + [ -6.542765166771268, 6.226980306771267 ], + [ -6.591847065236992, 6.276062205236991 ], + [ -6.639097467195759, 6.323312607195758 ], + [ -6.684495226261935, 6.368710366261934 ], + [ -6.728020025179369, 6.412235165179368 ], + [ -6.7696523849141395, 6.45386752491414 ], + [ -6.809373673372188, 6.493588813372188 ], + [ -6.847166113737897, 6.531381253737896 ], + [ -6.883012792429913, 6.567227932429912 ], + [ -6.916897666670594, 6.601112806670595 ], + [ -6.94880557166583, 6.6330207116658295 ], + [ -6.978722227391841, 6.66293736739184 ], + [ -7.006634244986041, 6.69084938498604 ], + [ -7.0325291327390875, 6.716744272739087 ], + [ -7.056395301685391, 6.74061044168539 ], + [ -7.078222070789631, 6.7624372107896304 ], + [ -7.097999671726944, 6.782214811726944 ], + [ -7.11571925325461, 6.799934393254609 ], + [ -7.131372885173334, 6.815588025173333 ], + [ -7.144953561876318, 6.829168701876317 ], + [ -7.156455205484548, 6.840670345484547 ], + [ -7.165872668566867, 6.850087808566866 ], + [ -7.173201736443659, 6.857416876443658 ], + [ -7.178439129073077, 6.862654269073077 ], + [ -7.181582502518993, 6.865797642518993 ], + [ -7.18263045, 6.86684559 ] + ], + "DFTEigValWeight": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.1, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.7, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 2.7755576e-17, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.3877788e-16, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.3877788e-16, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.3877788e-16, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.10000000000000014, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.40000000000000013, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.6000000000000001, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.8, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.8, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.8999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 0.9999999999999999, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.8999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.8999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.9999999999999999, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.9, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.8, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.8, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.7000000000000001, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.6000000000000001, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.6000000000000001, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.5000000000000001, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.40000000000000013, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.40000000000000013, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000016, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000015, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.20000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.7999999999999999, + 0.20000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.7, + 0.30000000000000004, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.5, + 2.7755576e-17, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.2, + 2.7755576e-17, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.10000000000000003, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "Hi": [ + [ + [ 0.0, 0.0 ], + [ -4.0, 0.0 ] + ], + [ + [ 0.0, 0.0 ], + [ 0.0, 0.0 ] + ], + [ + [ 0.0, 0.0 ], + [ 0.0, 0.0 ] + ], + [ + [ 0.0, 0.0 ], + [ -4.0, 0.0 ] + ], + [ + [ 0.0, -4.0 ], + [ -4.0, 0.0 ] + ] + ], + "Hf": [ + [ + [ 0.0, 0.0 ], + [ -2.34157934, 0.0 ] + ], + [ + [ 0.0, 0.0 ], + [ 0.0, 0.0 ] + ], + [ + [ 0.0, 0.0 ], + [ 0.0, 0.0 ] + ], + [ + [ 0.0, 0.0 ], + [ -2.34157934, 0.0 ] + ], + [ + [ -0.15789243, -2.34157934 ], + [ -2.34157934, -0.15789243 ] + ] + ], + "Si": [ ], + "Sf": [ ], + "SOCi": [ ], + "SOCf": [ ], + "dft_atoms": [ ], + "bandSections": { + "index": [ + [ 0, 99 ], + [ 100, 199 ], + [ 200, 299 ] + ], + "label": [ + [ "\\Gamma", "M" ], + [ "M", "K" ], + [ "K", "\\Gamma" ] + ] + }, + "kLabel": [ "\\Gamma", "M", "K", "\\Gamma" ], + "HamiltonianMap": [ + "TB-Model Atom Species/C_pz/Shell 1/p_z", + "TB-Model Atom Species/C_pz/Shell 1/p_z" + ], + "HamiltonianShellMap": [ + "TB-Model Atom Species/C_pz/Shell 1", + "TB-Model Atom Species/C_pz/Shell 1" + ] + } +} From 4d06783170d030c63727e458ee6af752a2493de0 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 9 Nov 2023 16:45:20 +0100 Subject: [PATCH 48/51] Rafactor and Added error handling --- electronicparsers/tbstudio/parser.py | 55 ++++++++++++---------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 1bc94664..d7348873 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -94,8 +94,6 @@ def parse_method(self): """ sec_run = self.archive.run[-1] - sec_run.program = Program(name='TBStudio', version=self.tbm['ReleaseVersion']) - sec_method = sec_run.m_create(Method) sec_tb = sec_method.m_create(TB) sec_sk = sec_tb.m_create(SlaterKoster) @@ -269,7 +267,7 @@ def parse_scc(self): """Populates run.calculation with the output of the calculation. """ sec_run = self.archive.run[-1] - self.archive.run[-1].m_create(Calculation) + sec_scc = sec_run.m_create(Calculation) _k_points = self.tbm['variables']['KPoints'] frac_k_points = [] @@ -285,35 +283,23 @@ def parse_scc(self): if band_segments_points is None or len(tb_bands) < 1 or len(frac_k_points) < 1: return - fermi_level_joules = self.tbm['variables']['ChemP'] * ureg.eV - sec_scc = sec_run.calculation[-1] - sec_energy = sec_scc.m_create(Energy, Calculation.energy) - sec_energy.fermi = fermi_level_joules + fermi_level = self.tbm['variables'].get('ChemP') + if not fermi_level: + self.logger.warning('Could not extract the Fermi level, so that the BandStructure is not resolved') + return + sec_energy = sec_scc.m_create(Energy, Calculation.energy) + sec_energy.fermi = fermi_level * ureg.eV if fermi_level else None sec_k_band = BandStructure() - sec_k_band.energy_fermi = fermi_level_joules - - pi = np.arccos(-1.0) - vol = np.dot(self.a, np.cross(self.b, self.c)) - astar = 2 * pi * np.cross(self.b, self.c) / vol * 10**9 - bstar = 2 * pi * np.cross(self.c, self.a) / vol * 10**9 - cstar = 2 * pi * np.cross(self.a, self.b) / vol * 10**9 - sec_k_band.reciprocal_cell = [astar, bstar, cstar] + sec_k_band.energy_fermi = sec_energy.fermi for n1, n2 in band_segments_points: sec_k_band_segment = sec_k_band.m_create(BandEnergies) sec_k_band_segment.kpoints = frac_k_points[n1: n2 + 1] - sec_k_band_segment.energies = (np.array([tb_bands[n1: n2 + 1]]) + self.tbm['variables']['ChemP']) * ureg.eV + sec_k_band_segment.energies = (np.array([tb_bands[n1: n2 + 1]]) + fermi_level) * ureg.eV sec_scc.band_structure_electronic.append(sec_k_band) - def parse_workflow(self): - sec_workflow = self.archive.m_create(Workflow) - workflow = SinglePoint() - sec_workflow.type = 'single_point' - workflow.name = "Tight Binding Model" - self.archive.workflow2 = workflow - def get_mainfile_keys(self, **kwargs): filepath = kwargs.get('filename') @@ -333,18 +319,23 @@ def get_mainfile_keys(self, **kwargs): return True def parse(self, filepath, archive, logger): - tb_archive = archive self.filepath = os.path.abspath(filepath) - self.archive = tb_archive + self.archive = archive self.maindir = os.path.dirname(self.filepath) self.logger = logger if logger is not None else logging sec_run = self.archive.m_create(Run) - sec_run.program = Program(name="TBStudio") - f = open(filepath) - self.tbm = json.load(f) - f.close() + try: + f = open(self.filepath) + tbm = json.load(f) + f.close() + except Exception: + self.logger.error('Error opening json output file.') + return + + self.tbm = tbm + sec_run.program = Program(name='TBStudio', version=self.tbm.get('ReleaseVersion', '')) dft_nomad_entry_id = None dft_nomad_upload_id = None @@ -356,7 +347,9 @@ def parse(self, filepath, archive, logger): self.parse_method() self.parse_scc() - self.parse_workflow() + workflow = SinglePoint() + self.archive.workflow2 = workflow + if dft_nomad_entry_id is not None and dft_nomad_entry_id != '' and dft_nomad_upload_id is not None and dft_nomad_upload_id != '': first_principles_calculation_archive = None try: @@ -365,4 +358,4 @@ def parse(self, filepath, archive, logger): self.logger.warning('TBStudio Workflow was not found.') if first_principles_calculation_archive and self._child_archives: tb_workflow_archive = self._child_archives.get('TB_workflow') - self.parse_tb_workflow(tb_archive, first_principles_calculation_archive, tb_workflow_archive) + self.parse_tb_workflow(archive, first_principles_calculation_archive, tb_workflow_archive) From f66e7fcae3ba6652a6e65a6e07531c859b3ee25f Mon Sep 17 00:00:00 2001 From: mohammad Date: Fri, 10 Nov 2023 12:13:24 +0100 Subject: [PATCH 49/51] Remove unused import --- electronicparsers/tbstudio/parser.py | 1 - 1 file changed, 1 deletion(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index d7348873..1456c85c 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -35,7 +35,6 @@ from nomad.datamodel.metainfo.simulation.workflow import SinglePoint import json import re -from nomad.datamodel.metainfo.workflow import Workflow from ..utils import BeyondDFTWorkflowsParser from ase.data import chemical_symbols From a6e25216bbfaff623495d9ec08b4f0c4f5847333 Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Mon, 13 Nov 2023 10:46:57 +0100 Subject: [PATCH 50/51] Fix Wannier90 method.tb --- electronicparsers/wannier90/parser.py | 4 ++-- tests/test_wannier90parser.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electronicparsers/wannier90/parser.py b/electronicparsers/wannier90/parser.py index 86f4e1e4..b9821df3 100644 --- a/electronicparsers/wannier90/parser.py +++ b/electronicparsers/wannier90/parser.py @@ -344,10 +344,10 @@ def parse_hoppings(self): return self.hr_parser.mainfile = hr_files[0] - # Assuming method.projection is parsed before + # Assuming method.tb is parsed before sec_scc = self.archive.run[-1].calculation[-1] sec_hopping_matrix = sec_scc.m_create(HoppingMatrix) - sec_hopping_matrix.n_orbitals = self.archive.run[-1].method[-1].projection.wannier.n_projected_orbitals + sec_hopping_matrix.n_orbitals = self.archive.run[-1].method[-1].tb.wannier.n_projected_orbitals deg_factors = self.hr_parser.get('degeneracy_factors', []) if deg_factors is not None: sec_hopping_matrix.n_wigner_seitz_points = deg_factors[1] diff --git a/tests/test_wannier90parser.py b/tests/test_wannier90parser.py index 3f748927..80464ce4 100644 --- a/tests/test_wannier90parser.py +++ b/tests/test_wannier90parser.py @@ -59,7 +59,7 @@ def test_lco(parser): assert sec_method.k_mesh.n_points == 343 assert (sec_method.k_mesh.points[303] == np.array([0.85714, 0.14286, 0.28571])).all() assert (sec_method.k_mesh.grid == np.array([7, 7, 7])).all() - sec_wannier = sec_method.projection.wannier + sec_wannier = sec_method.tb.wannier assert sec_wannier.n_projected_orbitals == 1 assert sec_wannier.n_bands == 5 assert sec_wannier.is_maximally_localized is True From 24b8c83ea0d945d383720e72d4924ca9e3ec744a Mon Sep 17 00:00:00 2001 From: Jose Pizarro Date: Mon, 20 Nov 2023 11:28:17 +0100 Subject: [PATCH 51/51] fix ruff --- electronicparsers/tbstudio/parser.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/electronicparsers/tbstudio/parser.py b/electronicparsers/tbstudio/parser.py index 1456c85c..3ce77947 100644 --- a/electronicparsers/tbstudio/parser.py +++ b/electronicparsers/tbstudio/parser.py @@ -114,8 +114,6 @@ def parse_method(self): else: orbitals.append(items[selected]) - orbitals = orbitals - final_os = {} tbAtom = '' shell = ''