diff --git a/susyexists/README.md b/susyexists/README.md
new file mode 100644
index 00000000..cbd01009
--- /dev/null
+++ b/susyexists/README.md
@@ -0,0 +1,37 @@
+# K-point convergence tracker (Materials)
+
+> Ideal candidate: scientists skilled in Density Functional Theory and proficient in python.
+
+# Overview
+
+The aim of this task is to create a python package that implements automatic convergence tracking mechanism for a materials simulations engine. The convergence is tracked with respect to the k-point sampling inside a reciprocal cell of a crystalline compound.
+
+# Requirements
+
+1. automatically find the dimensions of a k-point mesh that satisfy a certain criteria for total energy (eg. total energy is converged within dE = 0.01meV)
+1. the code shall be written in a way that can facilitate easy addition of convergence wrt other characteristics extracted from simulations (forces, pressures, phonon frequencies etc)
+1. the code shall support VASP or Quantum ESPRESSO
+
+# Expectations
+
+- correctly find k-point mesh that satisfies total energy convergence parameters for a set of 10 materials, starting from Si2, as simplest, to a 10-20-atom supercell of your choice
+- modular and object-oriented implementation
+- commit early and often - at least once per 24 hours
+
+# Timeline
+
+We leave exact timing to the candidate. Must fit Within 5 days total.
+
+# User story
+
+As a user of this software I can start it passing:
+
+- path to input data (eg. pw.in / POSCAR, INCAR, KPOINTS) and
+- kinetic energy cutoff
+
+as parameters and get the k-point dimensions (eg. 5 5 5).
+
+# Notes
+
+- create an account at exabyte.io and use it for the calculation purposes
+- suggested modeling engine: Quantum ESPRESSO
diff --git a/susyexists/Si_parameter_test.ipynb b/susyexists/Si_parameter_test.ipynb
new file mode 100644
index 00000000..1bee14c4
--- /dev/null
+++ b/susyexists/Si_parameter_test.ipynb
@@ -0,0 +1,110 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from src import model #Import library\n",
+ "num_core = 8 #Define number of cores"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Step 1 - Initialize model\n",
+ "pw = model.pw(project_id=\"Si\") #Define project\n",
+ "pw.from_poscar(directory=\"./Structures/Si.poscar\") #Load structure\n",
+ "pw.get_primitive() #Get primitive cell\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ecutwfc: 50.0 DeltaE :-0.0006273841728230423 Ry Time: 0.1938261985778809 seconds\n",
+ "ecutwfc: 60.0 DeltaE :-0.0003047080408862257 Ry Time: 0.2084970474243164 seconds\n",
+ "ecutwfc: 70.0 DeltaE :-6.351904913692863e-05 Ry Time: 0.2371938228607178 seconds\n",
+ "ecutwfc: 80.0 DeltaE :-6.302970438909483e-06 Ry Time: 0.2995648384094238 seconds\n",
+ "ecutwfc: 90.0 DeltaE :-1.8760475342105565e-06 Ry Time: 0.3129620552062988 seconds\n",
+ "ecutwfc: 100.0 DeltaE :-1.1352211721771255e-06 Ry Time: 0.3260128498077393 seconds\n",
+ "ecutwfc: 110.0 DeltaE :-5.068481669923131e-07 Ry Time: 0.4594228267669678 seconds\n",
+ "ecutwfc: 120.0 DeltaE :-3.066274292251592e-07 Ry Time: 0.4630310535430908 seconds\n",
+ "ecutwfc: 130.0 DeltaE :-2.0733272876327646e-07 Ry Time: 0.4597089290618896 seconds\n",
+ "ecutwfc: 140.0 DeltaE :-1.7449340994346585e-07 Ry Time: 0.5133810043334961 seconds\n",
+ "ecutwfc: 150.0 DeltaE :-1.0422343521554467e-07 Ry Time: 0.5248079299926758 seconds\n",
+ "ecutwfc: 160.0 DeltaE :-2.12823554335273e-07 Ry Time: 0.5203700065612793 seconds\n",
+ "ecutwfc: 170.0 DeltaE :-1.0274962747303107e-07 Ry Time: 0.5212390422821045 seconds\n",
+ "ecutwfc: 180.0 DeltaE :-4.080993676325306e-08 Ry Time: 0.5420069694519043 seconds\n"
+ ]
+ }
+ ],
+ "source": [
+ "res = pw.test('ecutwfc',conv_thr=1e-7,start=40,end=500,step=10,num_core=8,debug=False,out=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "kpoints: 3.0 DeltaE :-0.11467918418520107 Ry Time: 1.894612073898315 seconds\n",
+ "kpoints: 4.0 DeltaE :-0.02549575453173958 Ry Time: 3.407161951065063 seconds\n",
+ "kpoints: 5.0 DeltaE :-0.006562763616971168 Ry Time: 2.148712158203125 seconds\n",
+ "kpoints: 6.0 DeltaE :-0.0016181548250191469 Ry Time: 3.427868127822876 seconds\n",
+ "kpoints: 7.0 DeltaE :-0.00030730358718500383 Ry Time: 3.61491584777832 seconds\n",
+ "kpoints: 8.0 DeltaE :-2.980461402835033e-05 Ry Time: 6.036959886550903 seconds\n",
+ "kpoints: 9.0 DeltaE :7.220643169603136e-06 Ry Time: 7.17269492149353 seconds\n",
+ "kpoints: 10.0 DeltaE :4.551905615102214e-06 Ry Time: 9.542922973632812 seconds\n",
+ "kpoints: 11.0 DeltaE :1.018306175382122e-06 Ry Time: 10.97165894508362 seconds\n",
+ "kpoints: 12.0 DeltaE :-2.4028405931630914e-08 Ry Time: 13.10678911209106 seconds\n"
+ ]
+ }
+ ],
+ "source": [
+ "res = pw.test('kpoints',conv_thr=1e-7,start=2,end=20,step=1,num_core=8,debug=False,out=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/susyexists/Structures/Si.poscar b/susyexists/Structures/Si.poscar
new file mode 100644
index 00000000..cb6a29ed
--- /dev/null
+++ b/susyexists/Structures/Si.poscar
@@ -0,0 +1,16 @@
+Si8
+1.0
+ 5.4437023729394527 0.0000000000000000 0.0000000000000003
+ 0.0000000000000009 5.4437023729394527 0.0000000000000003
+ 0.0000000000000000 0.0000000000000000 5.4437023729394527
+Si
+8
+direct
+ 0.7500000000000000 0.7500000000000000 0.2500000000000000 Si
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000 Si
+ 0.7500000000000000 0.2500000000000000 0.7500000000000000 Si
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000 Si
+ 0.2500000000000000 0.7500000000000000 0.7500000000000000 Si
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000 Si
+ 0.2500000000000000 0.2500000000000000 0.2500000000000000 Si
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000 Si
diff --git a/susyexists/config.json b/susyexists/config.json
new file mode 100644
index 00000000..893e4e8c
--- /dev/null
+++ b/susyexists/config.json
@@ -0,0 +1,38 @@
+{
+ "pw": {
+ "control": {
+ "pseudo_dir": "./pseudos/"
+ },
+ "system": {
+ "degauss": "0.1",
+ "ecutwfc": "20",
+ "occupations": "smearing"
+ },
+ "electrons": {
+ "conv_thr": "1e-6"
+ },
+ "ions": {},
+ "cell": {},
+ "k_points": "1 1 1 0 0 0"
+ },
+ "ph": {
+ "inputph": {
+ "ldisp": "true",
+ "nq1": "1",
+ "nq2": "1",
+ "nq3": "1"
+ }
+ },
+ "q2r": {
+ "input": {
+ "zasr": "simple"
+ }
+ },
+ "matdyn": {
+ "input": {
+ "asr": "simple",
+ "q_in_band_form": "true",
+ "q_in_cryst_coord": "true"
+ }
+ }
+}
diff --git a/susyexists/pseudos/Si.UPF b/susyexists/pseudos/Si.UPF
new file mode 100644
index 00000000..f8355759
--- /dev/null
+++ b/susyexists/pseudos/Si.UPF
@@ -0,0 +1,1231 @@
+
+
+
+ Si_ONCV_PBE-1.2.upf
+
+ This pseudopotential file has been produced using the code
+ ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential)
+ scalar-relativistic version 2.1.1, 03/26/2014 by D. R. Hamann
+ The code is available through a link at URL www.mat-simresearch.com.
+ Documentation with the package provides a full discription of the
+ input data below.
+
+
+ While it is not required under the terms of the GNU GPL, it is
+ suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013)
+ in any publication using these pseudopotentials.
+
+
+ Copyright 2015 The Regents of the University of California
+
+ This work is licensed under the Creative Commons Attribution-ShareAlike
+ 4.0 International License. To view a copy of this license, visit
+ http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+ Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+ This pseudopotential is part of the Schlipf-Gygi norm-conserving
+ pseudopotential library. Its construction parameters were tuned to
+ reproduce materials of a training set with very high accuracy and
+ should be suitable as a general purpose pseudopotential to treat a
+ variety of different compounds. For details of the construction and
+ testing of the pseudopotential please refer to:
+
+ M. Schlipf and F. Gygi, Computer Physics Communications (2015)
+ DOI: 10.1016/j.cpc.2015.05.011
+ http://dx.doi.org/10.1016/j.cpc.2015.05.011
+ http://www.quantum-simulation.org
+
+ We kindly ask that you include this reference in all publications
+ associated to this pseudopotential.
+
+
+
+# ATOM AND REFERENCE CONFIGURATION
+# atsym z nc nv iexc psfile
+ Si 14.00 3 2 4 upf
+#
+# n l f energy (Ha)
+ 1 0 2.00
+ 2 0 2.00
+ 2 1 6.00
+ 3 0 2.00
+ 3 1 2.00
+#
+# PSEUDOPOTENTIAL AND OPTIMIZATION
+# lmax
+ 1
+#
+# l, rc, ep, ncon, nbas, qcut
+ 0 2.40480 -0.39736 5 8 5.11281
+ 1 3.56481 -0.14998 5 8 3.50314
+#
+# LOCAL POTENTIAL
+# lloc, lpopt, rc(5), dvloc0
+ 4 5 1.27795 0.00000
+#
+# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs
+# l, nproj, debl
+ 0 2 0.56800
+ 1 2 1.00881
+#
+# MODEL CORE CHARGE
+# icmod, fcfact
+ 0 0.00000
+#
+# LOG DERIVATIVE ANALYSIS
+# epsh1, epsh2, depsh
+ -5.00 3.00 0.02
+#
+# OUTPUT GRID
+# rlmax, drl
+ 6.00 0.01
+#
+# TEST CONFIGURATIONS
+# ncnf
+ 0
+# nvcnf
+# n l f
+
+
+
+
+
+
+
+
+ 0.0000 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700
+ 0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500
+ 0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300
+ 0.2400 0.2500 0.2600 0.2700 0.2800 0.2900 0.3000 0.3100
+ 0.3200 0.3300 0.3400 0.3500 0.3600 0.3700 0.3800 0.3900
+ 0.4000 0.4100 0.4200 0.4300 0.4400 0.4500 0.4600 0.4700
+ 0.4800 0.4900 0.5000 0.5100 0.5200 0.5300 0.5400 0.5500
+ 0.5600 0.5700 0.5800 0.5900 0.6000 0.6100 0.6200 0.6300
+ 0.6400 0.6500 0.6600 0.6700 0.6800 0.6900 0.7000 0.7100
+ 0.7200 0.7300 0.7400 0.7500 0.7600 0.7700 0.7800 0.7900
+ 0.8000 0.8100 0.8200 0.8300 0.8400 0.8500 0.8600 0.8700
+ 0.8800 0.8900 0.9000 0.9100 0.9200 0.9300 0.9400 0.9500
+ 0.9600 0.9700 0.9800 0.9900 1.0000 1.0100 1.0200 1.0300
+ 1.0400 1.0500 1.0600 1.0700 1.0800 1.0900 1.1000 1.1100
+ 1.1200 1.1300 1.1400 1.1500 1.1600 1.1700 1.1800 1.1900
+ 1.2000 1.2100 1.2200 1.2300 1.2400 1.2500 1.2600 1.2700
+ 1.2800 1.2900 1.3000 1.3100 1.3200 1.3300 1.3400 1.3500
+ 1.3600 1.3700 1.3800 1.3900 1.4000 1.4100 1.4200 1.4300
+ 1.4400 1.4500 1.4600 1.4700 1.4800 1.4900 1.5000 1.5100
+ 1.5200 1.5300 1.5400 1.5500 1.5600 1.5700 1.5800 1.5900
+ 1.6000 1.6100 1.6200 1.6300 1.6400 1.6500 1.6600 1.6700
+ 1.6800 1.6900 1.7000 1.7100 1.7200 1.7300 1.7400 1.7500
+ 1.7600 1.7700 1.7800 1.7900 1.8000 1.8100 1.8200 1.8300
+ 1.8400 1.8500 1.8600 1.8700 1.8800 1.8900 1.9000 1.9100
+ 1.9200 1.9300 1.9400 1.9500 1.9600 1.9700 1.9800 1.9900
+ 2.0000 2.0100 2.0200 2.0300 2.0400 2.0500 2.0600 2.0700
+ 2.0800 2.0900 2.1000 2.1100 2.1200 2.1300 2.1400 2.1500
+ 2.1600 2.1700 2.1800 2.1900 2.2000 2.2100 2.2200 2.2300
+ 2.2400 2.2500 2.2600 2.2700 2.2800 2.2900 2.3000 2.3100
+ 2.3200 2.3300 2.3400 2.3500 2.3600 2.3700 2.3800 2.3900
+ 2.4000 2.4100 2.4200 2.4300 2.4400 2.4500 2.4600 2.4700
+ 2.4800 2.4900 2.5000 2.5100 2.5200 2.5300 2.5400 2.5500
+ 2.5600 2.5700 2.5800 2.5900 2.6000 2.6100 2.6200 2.6300
+ 2.6400 2.6500 2.6600 2.6700 2.6800 2.6900 2.7000 2.7100
+ 2.7200 2.7300 2.7400 2.7500 2.7600 2.7700 2.7800 2.7900
+ 2.8000 2.8100 2.8200 2.8300 2.8400 2.8500 2.8600 2.8700
+ 2.8800 2.8900 2.9000 2.9100 2.9200 2.9300 2.9400 2.9500
+ 2.9600 2.9700 2.9800 2.9900 3.0000 3.0100 3.0200 3.0300
+ 3.0400 3.0500 3.0600 3.0700 3.0800 3.0900 3.1000 3.1100
+ 3.1200 3.1300 3.1400 3.1500 3.1600 3.1700 3.1800 3.1900
+ 3.2000 3.2100 3.2200 3.2300 3.2400 3.2500 3.2600 3.2700
+ 3.2800 3.2900 3.3000 3.3100 3.3200 3.3300 3.3400 3.3500
+ 3.3600 3.3700 3.3800 3.3900 3.4000 3.4100 3.4200 3.4300
+ 3.4400 3.4500 3.4600 3.4700 3.4800 3.4900 3.5000 3.5100
+ 3.5200 3.5300 3.5400 3.5500 3.5600 3.5700 3.5800 3.5900
+ 3.6000 3.6100 3.6200 3.6300 3.6400 3.6500 3.6600 3.6700
+ 3.6800 3.6900 3.7000 3.7100 3.7200 3.7300 3.7400 3.7500
+ 3.7600 3.7700 3.7800 3.7900 3.8000 3.8100 3.8200 3.8300
+ 3.8400 3.8500 3.8600 3.8700 3.8800 3.8900 3.9000 3.9100
+ 3.9200 3.9300 3.9400 3.9500 3.9600 3.9700 3.9800 3.9900
+ 4.0000 4.0100 4.0200 4.0300 4.0400 4.0500 4.0600 4.0700
+ 4.0800 4.0900 4.1000 4.1100 4.1200 4.1300 4.1400 4.1500
+ 4.1600 4.1700 4.1800 4.1900 4.2000 4.2100 4.2200 4.2300
+ 4.2400 4.2500 4.2600 4.2700 4.2800 4.2900 4.3000 4.3100
+ 4.3200 4.3300 4.3400 4.3500 4.3600 4.3700 4.3800 4.3900
+ 4.4000 4.4100 4.4200 4.4300 4.4400 4.4500 4.4600 4.4700
+ 4.4800 4.4900 4.5000 4.5100 4.5200 4.5300 4.5400 4.5500
+ 4.5600 4.5700 4.5800 4.5900 4.6000 4.6100 4.6200 4.6300
+ 4.6400 4.6500 4.6600 4.6700 4.6800 4.6900 4.7000 4.7100
+ 4.7200 4.7300 4.7400 4.7500 4.7600 4.7700 4.7800 4.7900
+ 4.8000 4.8100 4.8200 4.8300 4.8400 4.8500 4.8600 4.8700
+ 4.8800 4.8900 4.9000 4.9100 4.9200 4.9300 4.9400 4.9500
+ 4.9600 4.9700 4.9800 4.9900 5.0000 5.0100 5.0200 5.0300
+ 5.0400 5.0500 5.0600 5.0700 5.0800 5.0900 5.1000 5.1100
+ 5.1200 5.1300 5.1400 5.1500 5.1600 5.1700 5.1800 5.1900
+ 5.2000 5.2100 5.2200 5.2300 5.2400 5.2500 5.2600 5.2700
+ 5.2800 5.2900 5.3000 5.3100 5.3200 5.3300 5.3400 5.3500
+ 5.3600 5.3700 5.3800 5.3900 5.4000 5.4100 5.4200 5.4300
+ 5.4400 5.4500 5.4600 5.4700 5.4800 5.4900 5.5000 5.5100
+ 5.5200 5.5300 5.5400 5.5500 5.5600 5.5700 5.5800 5.5900
+ 5.6000 5.6100 5.6200 5.6300 5.6400 5.6500 5.6600 5.6700
+ 5.6800 5.6900 5.7000 5.7100 5.7200 5.7300 5.7400 5.7500
+ 5.7600 5.7700 5.7800 5.7900 5.8000 5.8100 5.8200 5.8300
+ 5.8400 5.8500 5.8600 5.8700 5.8800 5.8900 5.9000 5.9100
+ 5.9200 5.9300 5.9400 5.9500 5.9600 5.9700 5.9800 5.9900
+ 6.0000 6.0100
+
+
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100
+ 0.0100 0.0100
+
+
+
+ -2.5160304129e+01 -2.5156559663e+01 -2.5145367977e+01 -2.5126854207e+01
+ -2.5101226916e+01 -2.5068778089e+01 -2.5029883139e+01 -2.4985000900e+01
+ -2.4934673633e+01 -2.4879527023e+01 -2.4820270180e+01 -2.4757412248e+01
+ -2.4690707529e+01 -2.4619908619e+01 -2.4544913952e+01 -2.4465690072e+01
+ -2.4382239902e+01 -2.4294588183e+01 -2.4202773826e+01 -2.4106845331e+01
+ -2.4006857712e+01 -2.3902870263e+01 -2.3794944832e+01 -2.3683144453e+01
+ -2.3567532222e+01 -2.3448170370e+01 -2.3325119484e+01 -2.3198437854e+01
+ -2.3068180933e+01 -2.2934400894e+01 -2.2797146278e+01 -2.2656461739e+01
+ -2.2512387873e+01 -2.2364961151e+01 -2.2214213926e+01 -2.2060174574e+01
+ -2.1902867687e+01 -2.1742314424e+01 -2.1578532926e+01 -2.1411538851e+01
+ -2.1241346018e+01 -2.1067967144e+01 -2.0891414679e+01 -2.0711701725e+01
+ -2.0528843042e+01 -2.0342856111e+01 -2.0153762250e+01 -1.9961587770e+01
+ -1.9766365122e+01 -1.9568134059e+01 -1.9366942824e+01 -1.9162849156e+01
+ -1.8955921192e+01 -1.8746238672e+01 -1.8533893323e+01 -1.8318989685e+01
+ -1.8101645532e+01 -1.7881991925e+01 -1.7660173498e+01 -1.7436347980e+01
+ -1.7210685890e+01 -1.6983369961e+01 -1.6754593800e+01 -1.6524561482e+01
+ -1.6293485634e+01 -1.6061586135e+01 -1.5829088782e+01 -1.5596223293e+01
+ -1.5363221713e+01 -1.5130316716e+01 -1.4897739845e+01 -1.4665719939e+01
+ -1.4434481659e+01 -1.4204244184e+01 -1.3975220005e+01 -1.3747613830e+01
+ -1.3521621990e+01 -1.3297431797e+01 -1.3075221158e+01 -1.2855158363e+01
+ -1.2637402040e+01 -1.2422101244e+01 -1.2209395660e+01 -1.1999415900e+01
+ -1.1792283861e+01 -1.1588113126e+01 -1.1387009382e+01 -1.1189070846e+01
+ -1.0994388670e+01 -1.0803047324e+01 -1.0615124949e+01 -1.0430693659e+01
+ -1.0249819810e+01 -1.0072564219e+01 -9.8989823400e+00 -9.7291243995e+00
+ -9.5630354963e+00 -9.4007558350e+00 -9.2423202946e+00 -9.0877588186e+00
+ -8.9370963431e+00 -8.7903527500e+00 -8.6475428366e+00 -8.5086764428e+00
+ -8.3737581319e+00 -8.2427869426e+00 -8.1157568288e+00 -7.9926564372e+00
+ -7.8734693478e+00 -7.7581734943e+00 -7.6467409698e+00 -7.5391386646e+00
+ -7.4353281646e+00 -7.3352657501e+00 -7.2389009776e+00 -7.1461782942e+00
+ -7.0570369231e+00 -6.9714100460e+00 -6.8892240431e+00 -6.8103999310e+00
+ -6.7348539728e+00 -6.6624937797e+00 -6.5932214436e+00 -6.5269339285e+00
+ -6.4635198789e+00 -6.4028605987e+00 -6.3448323139e+00 -6.2893026490e+00
+ -6.2361307039e+00 -6.1851687676e+00 -6.1362460770e+00 -6.0891737898e+00
+ -6.0437542780e+00 -5.9997824464e+00 -5.9570641603e+00 -5.9154057309e+00
+ -5.8746445187e+00 -5.8346266722e+00 -5.7952216703e+00 -5.7563298574e+00
+ -5.7178559554e+00 -5.6797439417e+00 -5.6419425664e+00 -5.6044192537e+00
+ -5.5671584310e+00 -5.5301456719e+00 -5.4933852483e+00 -5.4568791441e+00
+ -5.4206379339e+00 -5.3846728490e+00 -5.3489973601e+00 -5.3136250328e+00
+ -5.2785699936e+00 -5.2438444091e+00 -5.2094608889e+00 -5.1754292076e+00
+ -5.1417589860e+00 -5.1084574587e+00 -5.0755308179e+00 -5.0429838025e+00
+ -5.0108193914e+00 -4.9790400036e+00 -4.9476459113e+00 -4.9166374676e+00
+ -4.8860128224e+00 -4.8557705589e+00 -4.8259072537e+00 -4.7964200311e+00
+ -4.7673043609e+00 -4.7385562137e+00 -4.7101703242e+00 -4.6821417944e+00
+ -4.6544649071e+00 -4.6271341528e+00 -4.6001435689e+00 -4.5734872608e+00
+ -4.5471591643e+00 -4.5211531944e+00 -4.4954632799e+00 -4.4700833106e+00
+ -4.4450072653e+00 -4.4202291453e+00 -4.3957430102e+00 -4.3715430831e+00
+ -4.3476235184e+00 -4.3239788438e+00 -4.3006033168e+00 -4.2774917787e+00
+ -4.2546387370e+00 -4.2320392188e+00 -4.2096880970e+00 -4.1875805275e+00
+ -4.1657118053e+00 -4.1440771838e+00 -4.1226724025e+00 -4.1014928094e+00
+ -4.0805344887e+00 -4.0597931513e+00 -4.0392649393e+00 -4.0189460345e+00
+ -3.9988326022e+00 -3.9789212720e+00 -3.9592082959e+00 -3.9396905671e+00
+ -3.9203647169e+00 -3.9012276089e+00 -3.8822763374e+00 -3.8635077293e+00
+ -3.8449192053e+00 -3.8265078683e+00 -3.8082711123e+00 -3.7902064559e+00
+ -3.7723112189e+00 -3.7545832111e+00 -3.7370199771e+00 -3.7196192801e+00
+ -3.7023790216e+00 -3.6852968792e+00 -3.6683709673e+00 -3.6515992010e+00
+ -3.6349795807e+00 -3.6185102889e+00 -3.6021893394e+00 -3.5860149761e+00
+ -3.5699854184e+00 -3.5540988193e+00 -3.5383535433e+00 -3.5227478466e+00
+ -3.5072800370e+00 -3.4919485039e+00 -3.4767515617e+00 -3.4616876114e+00
+ -3.4467550591e+00 -3.4319522686e+00 -3.4172776837e+00 -3.4027297199e+00
+ -3.3883067879e+00 -3.3740073292e+00 -3.3598297607e+00 -3.3457725134e+00
+ -3.3318340631e+00 -3.3180127986e+00 -3.3043072292e+00 -3.2907159686e+00
+ -3.2772374878e+00 -3.2638704304e+00 -3.2506134911e+00 -3.2374652996e+00
+ -3.2244245247e+00 -3.2114898374e+00 -3.1986598194e+00 -3.1859332481e+00
+ -3.1733088943e+00 -3.1607854555e+00 -3.1483617369e+00 -3.1360365380e+00
+ -3.1238085869e+00 -3.1116767424e+00 -3.0996398630e+00 -3.0876967359e+00
+ -3.0758462566e+00 -3.0640873359e+00 -3.0524188164e+00 -3.0408396230e+00
+ -3.0293487233e+00 -3.0179450177e+00 -3.0066274531e+00 -2.9953950551e+00
+ -2.9842467852e+00 -2.9731816036e+00 -2.9621985961e+00 -2.9512967886e+00
+ -2.9404751469e+00 -2.9297328183e+00 -2.9190688798e+00 -2.9084823458e+00
+ -2.8979723759e+00 -2.8875381094e+00 -2.8771786280e+00 -2.8668930794e+00
+ -2.8566806724e+00 -2.8465405607e+00 -2.8364718714e+00 -2.8264738829e+00
+ -2.8165458092e+00 -2.8066867993e+00 -2.7968961512e+00 -2.7871731387e+00
+ -2.7775169864e+00 -2.7679269534e+00 -2.7584023893e+00 -2.7489425950e+00
+ -2.7395467978e+00 -2.7302144067e+00 -2.7209447682e+00 -2.7117371878e+00
+ -2.7025910190e+00 -2.6935056869e+00 -2.6844805737e+00 -2.6755149928e+00
+ -2.6666084229e+00 -2.6577602896e+00 -2.6489699866e+00 -2.6402369232e+00
+ -2.6315606022e+00 -2.6229404784e+00 -2.6143759566e+00 -2.6058665452e+00
+ -2.5974117510e+00 -2.5890110570e+00 -2.5806638980e+00 -2.5723698487e+00
+ -2.5641284258e+00 -2.5559391247e+00 -2.5478014543e+00 -2.5397149955e+00
+ -2.5316792911e+00 -2.5236938519e+00 -2.5157582451e+00 -2.5078720577e+00
+ -2.5000348554e+00 -2.4922461670e+00 -2.4845056016e+00 -2.4768127538e+00
+ -2.4691672088e+00 -2.4615685147e+00 -2.4540163084e+00 -2.4465101933e+00
+ -2.4390497687e+00 -2.4316346093e+00 -2.4242643615e+00 -2.4169386412e+00
+ -2.4096570597e+00 -2.4024192138e+00 -2.3952247558e+00 -2.3880733133e+00
+ -2.3809645095e+00 -2.3738979555e+00 -2.3668733113e+00 -2.3598902150e+00
+ -2.3529483009e+00 -2.3460471891e+00 -2.3391865497e+00 -2.3323660308e+00
+ -2.3255852786e+00 -2.3188439163e+00 -2.3121416288e+00 -2.3054780742e+00
+ -2.2988529111e+00 -2.2922657665e+00 -2.2857163384e+00 -2.2792043000e+00
+ -2.2727293221e+00 -2.2662910402e+00 -2.2598891597e+00 -2.2535233799e+00
+ -2.2471933879e+00 -2.2408988386e+00 -2.2346394319e+00 -2.2284149055e+00
+ -2.2222249672e+00 -2.2160693127e+00 -2.2099476286e+00 -2.2038596764e+00
+ -2.1978051806e+00 -2.1917838655e+00 -2.1857954228e+00 -2.1798396167e+00
+ -2.1739161867e+00 -2.1680248688e+00 -2.1621653778e+00 -2.1563374587e+00
+ -2.1505408792e+00 -2.1447753880e+00 -2.1390407300e+00 -2.1333366252e+00
+ -2.1276628673e+00 -2.1220192168e+00 -2.1164054341e+00 -2.1108212567e+00
+ -2.1052664597e+00 -2.0997408293e+00 -2.0942441369e+00 -2.0887761515e+00
+ -2.0833366149e+00 -2.0779253420e+00 -2.0725421150e+00 -2.0671867160e+00
+ -2.0618589102e+00 -2.0565584826e+00 -2.0512852441e+00 -2.0460389871e+00
+ -2.0408195037e+00 -2.0356265580e+00 -2.0304599722e+00 -2.0253195543e+00
+ -2.0202051063e+00 -2.0151164259e+00 -2.0100532909e+00 -2.0050155417e+00
+ -2.0000029894e+00 -1.9950154452e+00 -1.9900527083e+00 -1.9851145834e+00
+ -1.9802009118e+00 -1.9753115133e+00 -1.9704462079e+00 -1.9656047982e+00
+ -1.9607871107e+00 -1.9559929888e+00 -1.9512222609e+00 -1.9464747552e+00
+ -1.9417502793e+00 -1.9370486765e+00 -1.9323697940e+00 -1.9277134681e+00
+ -1.9230795352e+00 -1.9184678093e+00 -1.9138781456e+00 -1.9093103968e+00
+ -1.9047644068e+00 -1.9002400194e+00 -1.8957370569e+00 -1.8912553817e+00
+ -1.8867948534e+00 -1.8823553233e+00 -1.8779366424e+00 -1.8735386423e+00
+ -1.8691611886e+00 -1.8648041493e+00 -1.8604673825e+00 -1.8561507463e+00
+ -1.8518540828e+00 -1.8475772568e+00 -1.8433201460e+00 -1.8390826150e+00
+ -1.8348645287e+00 -1.8306657410e+00 -1.8264861122e+00 -1.8223255309e+00
+ -1.8181838679e+00 -1.8140609945e+00 -1.8099567776e+00 -1.8058710698e+00
+ -1.8018037713e+00 -1.7977547591e+00 -1.7937239104e+00 -1.7897111021e+00
+ -1.7857161890e+00 -1.7817390708e+00 -1.7777796345e+00 -1.7738377630e+00
+ -1.7699133391e+00 -1.7660062330e+00 -1.7621163287e+00 -1.7582435281e+00
+ -1.7543877195e+00 -1.7505487911e+00 -1.7467266302e+00 -1.7429211021e+00
+ -1.7391321243e+00 -1.7353595902e+00 -1.7316033932e+00 -1.7278634268e+00
+ -1.7241395708e+00 -1.7204317235e+00 -1.7167397946e+00 -1.7130636826e+00
+ -1.7094032860e+00 -1.7057585031e+00 -1.7021292086e+00 -1.6985153289e+00
+ -1.6949167674e+00 -1.6913334272e+00 -1.6877652116e+00 -1.6842120150e+00
+ -1.6806737355e+00 -1.6771502958e+00 -1.6736416038e+00 -1.6701475670e+00
+ -1.6666680931e+00 -1.6632030745e+00 -1.6597524288e+00 -1.6563160760e+00
+ -1.6528939281e+00 -1.6494858970e+00 -1.6460918947e+00 -1.6427118130e+00
+ -1.6393455852e+00 -1.6359931297e+00 -1.6326543626e+00 -1.6293292000e+00
+ -1.6260175565e+00 -1.6227193292e+00 -1.6194344586e+00 -1.6161628647e+00
+ -1.6129044675e+00 -1.6096591868e+00 -1.6064269393e+00 -1.6032076307e+00
+ -1.6000012029e+00 -1.5968075796e+00 -1.5936266844e+00 -1.5904584411e+00
+ -1.5873027694e+00 -1.5841595804e+00 -1.5810288184e+00 -1.5779104108e+00
+ -1.5748042848e+00 -1.5717103677e+00 -1.5686285837e+00 -1.5655588459e+00
+ -1.5625011024e+00 -1.5594552840e+00 -1.5564213212e+00 -1.5533991448e+00
+ -1.5503886849e+00 -1.5473898532e+00 -1.5444026029e+00 -1.5414268680e+00
+ -1.5384625823e+00 -1.5355096797e+00 -1.5325680940e+00 -1.5296377430e+00
+ -1.5267185758e+00 -1.5238105327e+00 -1.5209135507e+00 -1.5180275668e+00
+ -1.5151525180e+00 -1.5122883302e+00 -1.5094349445e+00 -1.5065923092e+00
+ -1.5037603643e+00 -1.5009390495e+00 -1.4981283049e+00 -1.4953280660e+00
+ -1.4925382630e+00 -1.4897588532e+00 -1.4869897792e+00 -1.4842309837e+00
+ -1.4814824094e+00 -1.4787439991e+00 -1.4760156806e+00 -1.4732974099e+00
+ -1.4705891360e+00 -1.4678908041e+00 -1.4652023597e+00 -1.4625237482e+00
+ -1.4598549093e+00 -1.4571957823e+00 -1.4545463276e+00 -1.4519064929e+00
+ -1.4492762263e+00 -1.4466554756e+00 -1.4440441888e+00 -1.4414423008e+00
+ -1.4388497696e+00 -1.4362665501e+00 -1.4336925927e+00 -1.4311278477e+00
+ -1.4285722654e+00 -1.4260257948e+00 -1.4234883722e+00 -1.4209599659e+00
+ -1.4184405284e+00 -1.4159300124e+00 -1.4134283706e+00 -1.4109355557e+00
+ -1.4084515142e+00 -1.4059761948e+00 -1.4035095631e+00 -1.4010515740e+00
+ -1.3986021823e+00 -1.3961613429e+00 -1.3937290106e+00 -1.3913051314e+00
+ -1.3888896627e+00 -1.3864825689e+00 -1.3840838069e+00 -1.3816933338e+00
+ -1.3793111065e+00 -1.3769370819e+00 -1.3745712066e+00 -1.3722134437e+00
+ -1.3698637576e+00 -1.3675221074e+00 -1.3651884520e+00 -1.3628627504e+00
+ -1.3605449616e+00 -1.3582350340e+00 -1.3559329332e+00 -1.3536386252e+00
+ -1.3513520708e+00 -1.3490732311e+00 -1.3468020667e+00 -1.3445385387e+00
+ -1.3422825986e+00 -1.3400342116e+00 -1.3377933465e+00 -1.3355599660e+00
+ -1.3333340327e+00 -1.3311155093e+00
+
+
+
+ 0.0000000000E+00 -2.8221815062E-02 -5.6445494142E-02 -8.4672798168E-02
+ -1.1290528242E-01 -1.4114419501E-01 -1.6939037698E-01 -1.9764416444E-01
+ -2.2590529334E-01 -2.5417280732E-01 -2.8244496915E-01 -3.1071917621E-01
+ -3.3899188047E-01 -3.6725851339E-01 -3.9551341617E-01 -4.2374977575E-01
+ -4.5195956687E-01 -4.8013350061E-01 -5.0826097965E-01 -5.3633006056E-01
+ -5.6432742342E-01 -5.9223834894E-01 -6.2004670325E-01 -6.4773493059E-01
+ -6.7528405400E-01 -7.0267368405E-01 -7.2988203575E-01 -7.5688595357E-01
+ -7.8366094466E-01 -8.1018122006E-01 -8.3641974404E-01 -8.6234829123E-01
+ -8.8793751146E-01 -9.1315700190E-01 -9.3797538772E-01 -9.6236040671E-01
+ -9.8627900572E-01 -1.0096974376E+00 -1.0325813683E+00 -1.0548959893E+00
+ -1.0766061328E+00 -1.0976763939E+00 -1.1180712564E+00 -1.1377552226E+00
+ -1.1566929460E+00 -1.1748493674E+00 -1.1921898527E+00 -1.2086803323E+00
+ -1.2242874399E+00 -1.2389786543E+00 -1.2527224472E+00 -1.2654884143E+00
+ -1.2772474045E+00 -1.2879716911E+00 -1.2976350646E+00 -1.3062129874E+00
+ -1.3136827195E+00 -1.3200234233E+00 -1.3252163082E+00 -1.3292447140E+00
+ -1.3320942308E+00 -1.3337528104E+00 -1.3342107988E+00 -1.3334611157E+00
+ -1.3314992447E+00 -1.3283233091E+00 -1.3239341926E+00 -1.3183355172E+00
+ -1.3115336917E+00 -1.3035379589E+00 -1.2943604150E+00 -1.2840159881E+00
+ -1.2725224433E+00 -1.2599003611E+00 -1.2461731164E+00 -1.2313668437E+00
+ -1.2155103671E+00 -1.1986351443E+00 -1.1807751919E+00 -1.1619669990E+00
+ -1.1422494296E+00 -1.1216636141E+00 -1.1002528308E+00 -1.0780623759E+00
+ -1.0551394246E+00 -1.0315328824E+00 -1.0072932274E+00 -9.8247234402E-01
+ -9.5712334873E-01 -9.3130040903E-01 -9.0505855525E-01 -8.7845348673E-01
+ -8.5154137294E-01 -8.2437865042E-01 -7.9702181635E-01 -7.6952722003E-01
+ -7.4195085302E-01 -7.1434821609E-01 -6.8677390600E-01 -6.5928155968E-01
+ -6.3192362688E-01 -6.0475115787E-01 -5.7781360791E-01 -5.5115873666E-01
+ -5.2483227904E-01 -4.9887765189E-01 -4.7333605091E-01 -4.4824620147E-01
+ -4.2364436891E-01 -3.9956392409E-01 -3.7603514691E-01 -3.5308549759E-01
+ -3.3073948786E-01 -3.0901860407E-01 -2.8794058194E-01 -2.6752024376E-01
+ -2.4776940468E-01 -2.2869649292E-01 -2.1030639794E-01 -1.9260118193E-01
+ -1.7558023252E-01 -1.5923918508E-01 -1.4357125705E-01 -1.2856728225E-01
+ -1.1421521153E-01 -1.0050086910E-01 -8.7408295800E-02 -7.4919574579E-02
+ -6.3015584453E-02 -5.1675982987E-02 -4.0879118758E-02 -3.0603560471E-02
+ -2.0827219717E-02 -1.1530587296E-02 -2.6960536196E-03 5.6933329069E-03
+ 1.3649262182E-02 2.1183224529E-02 2.8303792615E-02 3.5017205748E-02
+ 4.1329605057E-02 4.7244681143E-02 5.2766576570E-02 5.7898783676E-02
+ 6.2645082956E-02 6.7009455920E-02 7.0996674550E-02 7.4611963115E-02
+ 7.7861475917E-02 8.0752158018E-02 8.3291622422E-02 8.5488566224E-02
+ 8.7352042038E-02 8.8892215701E-02 9.0119548828E-02 9.1045280625E-02
+ 9.1681015941E-02 9.2038858010E-02 9.2131194283E-02 9.1970801067E-02
+ 9.1570514692E-02 9.0943594386E-02 9.0103044884E-02 8.9062419882E-02
+ 8.7834667821E-02 8.6433452357E-02 8.4871490865E-02 8.3162378388E-02
+ 8.1318468468E-02 7.9353115688E-02 7.7278212047E-02 7.5106706083E-02
+ 7.2849960607E-02 7.0520357522E-02 6.8128689522E-02 6.5686615086E-02
+ 6.3204339951E-02 6.0692646067E-02 5.8161156381E-02 5.5619628883E-02
+ 5.3077124086E-02 5.0542239380E-02 4.8023501758E-02 4.5528231064E-02
+ 4.3064447069E-02 4.0638107774E-02 3.8256734615E-02 3.5925087076E-02
+ 3.3649566515E-02 3.1434393662E-02 2.9284476182E-02 2.7203678286E-02
+ 2.5195325304E-02 2.3262974752E-02 2.1408405235E-02 1.9634808063E-02
+ 1.7942846275E-02 1.6334421616E-02 1.4810054472E-02 1.3370091312E-02
+ 1.2014931246E-02 1.0743576870E-02 9.5560333975E-03 8.4505812108E-03
+ 7.4260862543E-03 6.4808452755E-03 5.6125602920E-03 4.8194090931E-03
+ 4.0984157774E-03 3.4470424015E-03 2.8623005910E-03 2.3409480898E-03
+ 1.8798492482E-03 1.4754749275E-03 1.1242993649E-03 8.2275609307E-04
+ 5.6722371900E-04 3.5380455999E-04 1.7906799390E-04 3.9175479243E-05
+ -6.9563899372E-05 -1.5042686328E-04 -2.0738093672E-04 -2.4340600869E-04
+ -2.6168902892E-04 -2.6590392705E-04 -2.5821171217E-04 -2.4176438089E-04
+ -2.1916537887E-04 -1.9209316461E-04 -1.6341344735E-04 -1.3436562271E-04
+ -1.0611056278E-04 -8.1064671060E-05 -5.8949209202E-05 -4.0573918929E-05
+ -2.7062732269E-05 -1.7264995276E-05 -1.1361026416E-05 -9.0187223690E-06
+ -8.2275179000E-06 -6.4979956464E-06 -3.5021442825E-06 -8.1492721747E-07
+ 4.2135375221E-07 4.9654080995E-07 1.3679919748E-07 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00
+
+
+ 0.0000000000E+00 -2.2617493275E-02 -4.5216914859E-02 -6.7780069759E-02
+ -9.0288517322E-02 -1.1272345081E-01 -1.3506557978E-01 -1.5729501634E-01
+ -1.7939116598E-01 -2.0133262408E-01 -2.2309707887E-01 -2.4466122163E-01
+ -2.6600066503E-01 -2.8708987034E-01 -3.0790208419E-01 -3.2840928561E-01
+ -3.4858214399E-01 -3.6838998850E-01 -3.8780078947E-01 -4.0678115231E-01
+ -4.2529632421E-01 -4.4331021412E-01 -4.6078542610E-01 -4.7768330647E-01
+ -4.9396400464E-01 -5.0958654788E-01 -5.2450892987E-01 -5.3868821308E-01
+ -5.5208064453E-01 -5.6464178505E-01 -5.7632665149E-01 -5.8708987150E-01
+ -5.9688585019E-01 -6.0566894784E-01 -6.1339367183E-01 -6.2001487023E-01
+ -6.2548794854E-01 -6.2976907921E-01 -6.3281542910E-01 -6.3458539357E-01
+ -6.3503882872E-01 -6.3413729376E-01 -6.3184429502E-01 -6.2812553181E-01
+ -6.2294914272E-01 -6.1628595127E-01 -6.0810970922E-01 -5.9839733635E-01
+ -5.8712915114E-01 -5.7428910148E-01 -5.5986499706E-01 -5.4384870300E-01
+ -5.2623632473E-01 -5.0702845469E-01 -4.8623027470E-01 -4.6385175651E-01
+ -4.3990779888E-01 -4.1441832542E-01 -3.8740842892E-01 -3.5890841425E-01
+ -3.2895388000E-01 -2.9758577258E-01 -2.6485032981E-01 -2.3079918256E-01
+ -1.9548921930E-01 -1.5898254185E-01 -1.2134642812E-01 -8.2653150320E-02
+ -4.2979845639E-02 -2.4083517635E-03 3.8975005336E-02 8.1079652409E-02
+ 1.2381102588E-01 1.6707085666E-01 2.1075749183E-01 2.5476626062E-01
+ 2.9898982326E-01 3.4331857540E-01 3.8764107005E-01 4.3184446236E-01
+ 4.7581497597E-01 5.1943838895E-01 5.6260053758E-01 6.0518783591E-01
+ 6.4708780888E-01 6.8818963657E-01 7.2838470711E-01 7.6756717557E-01
+ 8.0563452583E-01 8.4248813254E-01 8.7803381974E-01 9.1218241290E-01
+ 9.4485028066E-01 9.7595986251E-01 1.0054401785E+00 1.0332273167E+00
+ 1.0592648945E+00 1.0835042363E+00 1.1059054759E+00 1.1264373575E+00
+ 1.1450776414E+00 1.1618134115E+00 1.1766412913E+00 1.1895673908E+00
+ 1.2006078275E+00 1.2097889728E+00 1.2171467753E+00 1.2227269116E+00
+ 1.2265843699E+00 1.2287838181E+00 1.2293991989E+00 1.2285126948E+00
+ 1.2262144162E+00 1.2226020205E+00 1.2177802161E+00 1.2118592021E+00
+ 1.2049542364E+00 1.1971848138E+00 1.1886726091E+00 1.1795407194E+00
+ 1.1699138629E+00 1.1599131580E+00 1.1496568083E+00 1.1392603853E+00
+ 1.1288306294E+00 1.1184638960E+00 1.1082495945E+00 1.0982616350E+00
+ 1.0885548433E+00 1.0791709080E+00 1.0701102992E+00 1.0613320189E+00
+ 1.0527743198E+00 1.0443322811E+00 1.0358934750E+00 1.0273305821E+00
+ 1.0185170714E+00 1.0093297980E+00 9.9965333877E-01 9.8939641258E-01
+ 9.7846803855E-01 9.6681504516E-01 9.5439015193E-01 9.4116645561E-01
+ 9.2714066624E-01 9.1231056879E-01 8.9670333343E-01 8.8034409702E-01
+ 8.6327401399E-01 8.4553810801E-01 8.2718729446E-01 8.0827659158E-01
+ 7.8886328917E-01 7.6900544989E-01 7.4876295213E-01 7.2819357681E-01
+ 7.0735601617E-01 6.8630639840E-01 6.6509973448E-01 6.4378951592E-01
+ 6.2242582573E-01 6.0105880450E-01 5.7973316575E-01 5.5849519495E-01
+ 5.3738425932E-01 5.1644245618E-01 4.9570406704E-01 4.7520680357E-01
+ 4.5498022397E-01 4.3505755773E-01 4.1546403183E-01 3.9622836724E-01
+ 3.7737184740E-01 3.5891870492E-01 3.4088664870E-01 3.2329547451E-01
+ 3.0615966109E-01 2.8949464442E-01 2.7331198797E-01 2.5762287355E-01
+ 2.4243622725E-01 2.2775912159E-01 2.1359807490E-01 1.9995625095E-01
+ 1.8683792722E-01 1.7424263357E-01 1.6217249646E-01 1.5062410033E-01
+ 1.3959645380E-01 1.2908458786E-01 1.1908411059E-01 1.0958878635E-01
+ 1.0059114418E-01 9.2083683330E-02 8.4056381276E-02 7.6500313885E-02
+ 6.9403752540E-02 6.2755605957E-02 5.6543447984E-02 5.0754258899E-02
+ 4.5374726418E-02 4.0390638638E-02 3.5787502546E-02 3.1550521091E-02
+ 2.7664267876E-02 2.4113275888E-02 2.0881993745E-02 1.7953831480E-02
+ 1.5313579003E-02 1.2944459444E-02 1.0830669709E-02 8.9565811653E-03
+ 7.3050254242E-03 5.8617649047E-03 4.6101871077E-03 3.5353189670E-03
+ 2.6231351342E-03 1.8568031558E-03 1.2244957924E-03 7.1145314742E-04
+ 3.0398749557E-04 -8.9051522939E-06 -2.4166157102E-04 -4.0404358183E-04
+ -5.0662623854E-04 -5.6194581045E-04 -5.7657207476E-04 -5.6075544754E-04
+ -5.2282735721E-04 -4.6789193181E-04 -4.0496846495E-04 -3.3789566867E-04
+ -2.7026100964E-04 -2.0946348948E-04 -1.5484602095E-04 -1.0898232458E-04
+ -7.5354929872E-05 -5.0934286974E-05 -3.6698428998E-05 -3.1955472692E-05
+ -3.0527339774E-05 -2.4594376958E-05 -1.3564940118E-05 -3.2121979946E-06
+ 1.5707686451E-06 1.8510591901E-06 5.0997502442E-07 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00
+
+
+ 0.0000000000E+00 7.8147995169E-04 3.1239584188E-03 7.0215567989E-03
+ 1.2464495942E-02 1.9439123871E-02 2.7927954469E-02 3.7909717009E-02
+ 4.9359416381E-02 6.2248403811E-02 7.6544457872E-02 9.2211875516E-02
+ 1.0921157285E-01 1.2750119535E-01 1.4703523714E-01 1.6776516904E-01
+ 1.8963957485E-01 2.1260429560E-01 2.3660258123E-01 2.6157524925E-01
+ 2.8746084984E-01 3.1419583708E-01 3.4171474542E-01 3.6995037130E-01
+ 3.9883395893E-01 4.2829539003E-01 4.5826337663E-01 4.8866565672E-01
+ 5.1942919167E-01 5.5048036535E-01 5.8174518394E-01 6.1314947612E-01
+ 6.4461909280E-01 6.7608010590E-01 7.0745900601E-01 7.3868289706E-01
+ 7.6967968958E-01 8.0037828945E-01 8.3070878377E-01 8.6060262214E-01
+ 8.8999279297E-01 9.1881399464E-01 9.4700280088E-01 9.7449781978E-01
+ 1.0012398461E+00 1.0271720067E+00 1.0522398977E+00 1.0763917152E+00
+ 1.0995783762E+00 1.1217536327E+00 1.1428741736E+00 1.1628997219E+00
+ 1.1817931236E+00 1.1995204145E+00 1.2160508980E+00 1.2313571957E+00
+ 1.2454152933E+00 1.2582045850E+00 1.2697078886E+00 1.2799114739E+00
+ 1.2888050635E+00 1.2963818210E+00 1.3026383707E+00 1.3075747180E+00
+ 1.3111942652E+00 1.3135037675E+00 1.3145132314E+00 1.3142359035E+00
+ 1.3126881944E+00 1.3098895815E+00 1.3058625122E+00 1.3006323353E+00
+ 1.2942271862E+00 1.2866778825E+00 1.2780177942E+00 1.2682827005E+00
+ 1.2575106905E+00 1.2457420120E+00 1.2330189270E+00 1.2193855624E+00
+ 1.2048877556E+00 1.1895728956E+00 1.1734897605E+00 1.1566883514E+00
+ 1.1392197233E+00 1.1211358133E+00 1.1024892670E+00 1.0833332632E+00
+ 1.0637213375E+00 1.0437072051E+00 1.0233445839E+00 1.0026870176E+00
+ 9.8178770009E-01 9.6069930103E-01 9.3947379334E-01 9.1816228334E-01
+ 8.9681484380E-01 8.7548040777E-01 8.5420644581E-01 8.3303894426E-01
+ 8.1202223184E-01 7.9119882559E-01 7.7060929153E-01 7.5029215612E-01
+ 7.3028369192E-01 7.1061775709E-01 6.9132581669E-01 6.7243678426E-01
+ 6.5397697896E-01 6.3596990791E-01 6.1843618745E-01 6.0139360667E-01
+ 5.8485703184E-01 5.6883832994E-01 5.5334618531E-01 5.3838630201E-01
+ 5.2396132146E-01 5.1007072670E-01 4.9671088877E-01 4.8387515969E-01
+ 4.7155379753E-01 4.5973407522E-01 4.4840037177E-01 4.3753408130E-01
+ 4.2711388404E-01 4.1711588803E-01 4.0751339144E-01 3.9827739875E-01
+ 3.8937692574E-01 3.8077799218E-01 3.7244239955E-01 3.6432904772E-01
+ 3.5639337214E-01 3.4859243713E-01 3.4088570271E-01 3.3323207774E-01
+ 3.2560097591E-01 3.1796212422E-01 3.1029186228E-01 3.0257403690E-01
+ 2.9479279838E-01 2.8694224500E-01 2.7901681947E-01 2.7101545700E-01
+ 2.6294063371E-01 2.5479515002E-01 2.4658566641E-01 2.3831842368E-01
+ 2.3000138169E-01 2.2164261424E-01 2.1325074818E-01 2.0483426554E-01
+ 1.9640202661E-01 1.8796226583E-01 1.7952358496E-01 1.7109391032E-01
+ 1.6268131707E-01 1.5429340790E-01 1.4593769932E-01 1.3762146859E-01
+ 1.2935174509E-01 1.2113549642E-01 1.1297936087E-01 1.0489002086E-01
+ 9.6873806697E-02 8.8937141180E-02 8.1086103072E-02 7.3326875738E-02
+ 6.5665315284E-02 5.8107375885E-02 5.0658697293E-02 4.3325002214E-02
+ 3.6111704509E-02 2.9024279821E-02 2.2067897231E-02 1.5247756997E-02
+ 8.5687605369E-03 2.0357933537E-03 -4.3465338847E-03 -1.0573698191E-02
+ -1.6641400948E-02 -2.2545534158E-02 -2.8282130695E-02 -3.3847550008E-02
+ -3.9238175856E-02 -4.4450881879E-02 -4.9482425447E-02 -5.4330194591E-02
+ -5.8991454332E-02 -6.3464015134E-02 -6.7745741267E-02 -7.1834853213E-02
+ -7.5729850131E-02 -7.9429376272E-02 -8.2932569034E-02 -8.6238533552E-02
+ -8.9346977884E-02 -9.2257631953E-02 -9.4970633059E-02 -9.7486368456E-02
+ -9.9805434405E-02 -1.0192881598E-01 -1.0385763866E-01 -1.0559339191E-01
+ -1.0713778485E-01 -1.0849277544E-01 -1.0966058175E-01 -1.1064371231E-01
+ -1.1144480595E-01 -1.1206687217E-01 -1.1251304004E-01 -1.1278664884E-01
+ -1.1289145238E-01 -1.1283104376E-01 -1.1260956942E-01 -1.1223115511E-01
+ -1.1170000690E-01 -1.1102100352E-01 -1.1019842116E-01 -1.0923725367E-01
+ -1.0814252573E-01 -1.0691899878E-01 -1.0557229773E-01 -1.0410736434E-01
+ -1.0252951690E-01 -1.0084469141E-01 -9.9057801427E-02 -9.7174754141E-02
+ -9.5201248785E-02 -9.3142476764E-02 -9.1004738376E-02 -8.8793322640E-02
+ -8.6513659143E-02 -8.4172328749E-02 -8.1774089860E-02 -7.9324717856E-02
+ -7.6830433429E-02 -7.4295904549E-02 -7.1727011211E-02 -6.9129439674E-02
+ -6.6507774304E-02 -6.3867864338E-02 -6.1214800681E-02 -5.8553009801E-02
+ -5.5888193228E-02 -5.3224825454E-02 -5.0567091627E-02 -4.7920430241E-02
+ -4.5288711188E-02 -4.2675791340E-02 -4.0086736644E-02 -3.7524850345E-02
+ -3.4993576159E-02 -3.2497506890E-02 -3.0039436708E-02 -2.7622318805E-02
+ -2.5250183653E-02 -2.2925386675E-02 -2.0650325918E-02 -1.8428394421E-02
+ -1.6261583887E-02 -1.4151690473E-02 -1.2101412318E-02 -1.0112447259E-02
+ -8.1859657208E-03 -6.3239359323E-03 -4.5278147805E-03 -2.7981507313E-03
+ -1.1361754499E-03 4.5687176818E-04 1.9810293547E-03 3.4357745313E-03
+ 4.8201030841E-03 6.1345722331E-03 7.3791912921E-03 8.5535857656E-03
+ 9.6584028716E-03 1.0694210131E-02 1.1661306453E-02 1.2560372392E-02
+ 1.3392455269E-02 1.4158414511E-02 1.4859082575E-02 1.5495841458E-02
+ 1.6069933377E-02 1.6582577671E-02 1.7035265156E-02 1.7429524025E-02
+ 1.7766946306E-02 1.8049179436E-02 1.8277900336E-02 1.8454879979E-02
+ 1.8582130007E-02 1.8661321340E-02 1.8694336931E-02 1.8683291291E-02
+ 1.8630178487E-02 1.8536767850E-02 1.8405073346E-02 1.8237581457E-02
+ 1.8035883926E-02 1.7801943060E-02 1.7538021480E-02 1.7246332179E-02
+ 1.6928436493E-02 1.6586319284E-02 1.6222498441E-02 1.5838582041E-02
+ 1.5436243384E-02 1.5017439644E-02 1.4584729079E-02 1.4139153224E-02
+ 1.3682447181E-02 1.3216673480E-02 1.2743767861E-02 1.2264769402E-02
+ 1.1781249039E-02 1.1295299373E-02 1.0808215231E-02 1.0321020089E-02
+ 9.8350876254E-03 9.3524541060E-03 8.8738281220E-03 8.4001826460E-03
+ 7.9326716292E-03 7.4731907333E-03 7.0219625404E-03 6.5798633383E-03
+ 6.1478714926E-03 5.7275007326E-03 5.3187767150E-03 4.9223753836E-03
+ 4.5390795888E-03 4.1700175399E-03 3.8150860233E-03 3.4747371118E-03
+ 3.1495242456E-03 2.8402713493E-03 2.5467334801E-03 2.2691486469E-03
+ 2.0078227902E-03 1.7633456519E-03 1.5353230341E-03 1.3237919611E-03
+ 1.1288074571E-03 9.5077794934E-04 7.8915776391E-04 6.4379688060E-04
+ 5.1453645719E-04 4.0155030142E-04 3.0423100338E-04 2.2222425673E-04
+ 1.5519325798E-04 1.0679059079E-04 7.2726930789E-05 4.9315052014E-05
+ 3.4202337633E-05 2.2197575789E-05 1.1904746202E-05 5.2045210825E-06
+ 1.3973414112E-06 -5.2237946623E-07 -1.8013058224E-06 -1.9154271305E-06
+ -1.2270326155E-06 -1.0670564411E-07 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00
+
+
+ 0.0000000000E+00 1.1919956725E-03 4.7619438270E-03 1.0691754666E-02
+ 1.8951367717E-02 2.9498885227E-02 4.2280758114E-02 5.7232023706E-02
+ 7.4276594240E-02 9.3327594922E-02 1.1428775010E-01 1.3704981590E-01
+ 1.6149705757E-01 1.8750376936E-01 2.1493583491E-01 2.4365132561E-01
+ 2.7350113454E-01 3.0432964315E-01 3.3597541795E-01 3.6827193433E-01
+ 4.0104832406E-01 4.3413014392E-01 4.6734016147E-01 5.0049915523E-01
+ 5.3342672540E-01 5.6594211200E-01 5.9786501668E-01 6.2901642493E-01
+ 6.5921942472E-01 6.8830001864E-01 7.1608792571E-01 7.4241736936E-01
+ 7.6712784821E-01 7.9006488649E-01 8.1108076087E-01 8.3003519992E-01
+ 8.4679605373E-01 8.6123993101E-01 8.7325280030E-01 8.8273055135E-01
+ 8.8957951791E-01 8.9371695570E-01 8.9507147505E-01 8.9358342605E-01
+ 8.8920523425E-01 8.8190168531E-01 8.7165015711E-01 8.5844079827E-01
+ 8.4227665627E-01 8.2317374456E-01 8.0116103954E-01 7.7628045475E-01
+ 7.4858676566E-01 7.1814736788E-01 6.8504216454E-01 6.4936323882E-01
+ 6.1121452961E-01 5.7071150784E-01 5.2798066059E-01 4.8315909889E-01
+ 4.3639398052E-01 3.8784187980E-01 3.3766838643E-01 2.8604706248E-01
+ 2.3315906167E-01 1.7919236705E-01 1.2434070143E-01 6.8803027369E-02
+ 1.2782666294E-02 -4.3513685046E-02 -9.9876890441E-02 -1.5609613235E-01
+ -2.1195990527E-01 -2.6725692129E-01 -3.2177712278E-01 -3.7531272368E-01
+ -4.2765899893E-01 -4.7861530805E-01 -5.2798604626E-01 -5.7558158514E-01
+ -6.2121919870E-01 -6.6472397112E-01 -7.0592968210E-01 -7.4467966602E-01
+ -7.8082764100E-01 -8.1423850394E-01 -8.4478908790E-01 -8.7236887767E-01
+ -8.9688068014E-01 -9.1824124540E-01 -9.3638183516E-01 -9.5124873467E-01
+ -9.6280370476E-01 -9.7102437066E-01 -9.7590454432E-01 -9.7745447726E-01
+ -9.7570104150E-01 -9.7068781183E-01 -9.6247522132E-01 -9.5114034814E-01
+ -9.3677681855E-01 -9.1949458922E-01 -8.9941963728E-01 -8.7669368157E-01
+ -8.5147360398E-01 -8.2393055432E-01 -7.9424959799E-01 -7.6262884598E-01
+ -7.2927900977E-01 -6.9442179781E-01 -6.5828828022E-01 -6.2111872047E-01
+ -5.8316138965E-01 -5.4467149112E-01 -5.0590633086E-01 -4.6712720332E-01
+ -4.2859800147E-01 -3.9058156426E-01 -3.5333524637E-01 -3.1711322591E-01
+ -2.8216723051E-01 -2.4873175782E-01 -2.1703197613E-01 -1.8728374122E-01
+ -1.5968018921E-01 -1.3439271966E-01 -1.1157757280E-01 -9.1360103710E-02
+ -7.3832235554E-02 -5.9062109017E-02 -4.7053180661E-02 -3.7747847093E-02
+ -3.1052263078E-02 -2.6809896378E-02 -2.4848801716E-02 -2.4968446757E-02
+ -2.6969758634E-02 -3.0649561731E-02 -3.5812036001E-02 -4.2291258034E-02
+ -4.9914205599E-02 -5.8558933831E-02 -6.8104812818E-02 -7.8455893546E-02
+ -8.9544828073E-02 -1.0130091747E-01 -1.1369124765E-01 -1.2667568440E-01
+ -1.4023325424E-01 -1.5434519919E-01 -1.6899766506E-01 -1.8418081412E-01
+ -1.9988409518E-01 -2.1609813091E-01 -2.3281209895E-01 -2.5001291153E-01
+ -2.6768592506E-01 -2.8581314961E-01 -3.0437411463E-01 -3.2334537119E-01
+ -3.4270018643E-01 -3.6240952754E-01 -3.8244090763E-01 -4.0275994298E-01
+ -4.2332936363E-01 -4.4410996241E-01 -4.6506081035E-01 -4.8613863284E-01
+ -5.0729994140E-01 -5.2849831415E-01 -5.4968868653E-01 -5.7082251806E-01
+ -5.9185399440E-01 -6.1273354952E-01 -6.3341527563E-01 -6.5384970425E-01
+ -6.7399132486E-01 -6.9379189034E-01 -7.1320663028E-01 -7.3218961277E-01
+ -7.5069703358E-01 -7.6868630229E-01 -7.8611473603E-01 -8.0294399575E-01
+ -8.1913266491E-01 -8.3464738867E-01 -8.4944822493E-01 -8.6350645766E-01
+ -8.7678646359E-01 -8.8926168298E-01 -9.0090268147E-01 -9.1168448138E-01
+ -9.2158451857E-01 -9.3057937648E-01 -9.3865349522E-01 -9.4578546610E-01
+ -9.5196513411E-01 -9.5717731759E-01 -9.6141326271E-01 -9.6466543624E-01
+ -9.6692654875E-01 -9.6819608107E-01 -9.6846956057E-01 -9.6775097279E-01
+ -9.6604226107E-01 -9.6334871812E-01 -9.5967916988E-01 -9.5504086596E-01
+ -9.4944758440E-01 -9.4291163046E-01 -9.3544859907E-01 -9.2707630703E-01
+ -9.1781266974E-01 -9.0767931785E-01 -8.9669825468E-01 -8.8489326743E-01
+ -8.7228981028E-01 -8.5891490472E-01 -8.4479611300E-01 -8.2996315975E-01
+ -8.1444661182E-01 -7.9827713315E-01 -7.8148876956E-01 -7.6411359562E-01
+ -7.4618561914E-01 -7.2774179241E-01 -7.0881490569E-01 -6.8944259520E-01
+ -6.6966165345E-01 -6.4950654666E-01 -6.2901763751E-01 -6.0822993819E-01
+ -5.8717930407E-01 -5.6590810628E-01 -5.4444832947E-01 -5.2283781816E-01
+ -5.0111702520E-01 -4.7931710386E-01 -4.5747646104E-01 -4.3563222813E-01
+ -4.1381466526E-01 -3.9206181792E-01 -3.7040683279E-01 -3.4887854867E-01
+ -3.2751380914E-01 -3.0634144044E-01 -2.8538827343E-01 -2.6468911007E-01
+ -2.4426840210E-01 -2.2415036396E-01 -2.0436695439E-01 -1.8493842619E-01
+ -1.6588578836E-01 -1.4723742265E-01 -1.2900973273E-01 -1.1121999501E-01
+ -9.3892373727E-02 -7.7039886778E-02 -6.0675654763E-02 -4.4819103250E-02
+ -2.9480370624E-02 -1.4668143737E-02 -3.9673955145E-04 1.3326117738E-02
+ 2.6496268294E-02 3.9104682534E-02 5.1145721544E-02 6.2619626274E-02
+ 7.3522596691E-02 8.3850983337E-02 9.3609059025E-02 1.0279791726E-01
+ 1.1141611469E-01 1.1947133842E-01 1.2696836363E-01 1.3391021642E-01
+ 1.4030546139E-01 1.4616249536E-01 1.5148876674E-01 1.5629364397E-01
+ 1.6058835540E-01 1.6438373360E-01 1.6769097926E-01 1.7052296146E-01
+ 1.7289267245E-01 1.7481414964E-01 1.7630098986E-01 1.7736754772E-01
+ 1.7802959019E-01 1.7830277758E-01 1.7820144971E-01 1.7774155807E-01
+ 1.7694221813E-01 1.7581683261E-01 1.7438152132E-01 1.7265489426E-01
+ 1.7065386355E-01 1.6839241043E-01 1.6588711980E-01 1.6315930720E-01
+ 1.6022078573E-01 1.5708703438E-01 1.5377630771E-01 1.5030624111E-01
+ 1.4668806047E-01 1.4293691974E-01 1.3907269177E-01 1.3510689039E-01
+ 1.3105150639E-01 1.2692096758E-01 1.2273479110E-01 1.1849932799E-01
+ 1.1422681417E-01 1.0993210232E-01 1.0562892683E-01 1.0132357361E-01
+ 9.7026624063E-02 9.2752683103E-02 8.8510044909E-02 8.4304815236E-02
+ 8.0145778879E-02 7.6046588510E-02 7.2010989413E-02 6.8044637776E-02
+ 6.4154481109E-02 6.0352597694E-02 5.6639357789E-02 5.3019648050E-02
+ 4.9498995595E-02 4.6086351203E-02 4.2781023311E-02 3.9586485517E-02
+ 3.6506809743E-02 3.3548061449E-02 3.0709071800E-02 2.7991893532E-02
+ 2.5399075377E-02 2.2934530265E-02 2.0596657362E-02 1.8386310616E-02
+ 1.6304609933E-02 1.4353867343E-02 1.2532146202E-02 1.0839334166E-02
+ 9.2753477363E-03 7.8412501190E-03 6.5348920543E-03 5.3554112534E-03
+ 4.3018836898E-03 3.3741211461E-03 2.5700680758E-03 1.8882181276E-03
+ 1.3270632494E-03 9.1967724861E-04 6.3039526964E-04 4.2880211273E-04
+ 2.9607577370E-04 1.9119926976E-04 1.0280412506E-04 4.5118178085E-05
+ 1.2193178537E-05 -4.4949767497E-06 -1.5499896750E-05 -1.6481889075E-05
+ -1.0558384152E-05 -9.1818193541E-07 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00
+
+
+ 1.3605849050E+01 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 8.7957345917E-01 0.0000000000E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 5.9060233804E+00 0.0000000000E+00
+ 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.9822026495E-01
+
+
+
+
+
+ 0.0000000000E+00 2.1715094897E-06 8.7564102574E-06 1.9965954979E-05
+ 3.6152682474E-05 5.7811088589E-05 8.5578554165E-05 1.2023651890E-04
+ 1.6271188688E-04 2.1407864653E-04 2.7555968502E-04 3.4852877423E-04
+ 4.3451270306E-04 5.3519352841E-04 6.5241091476E-04 7.8816453067E-04
+ 9.4461646851E-04 1.1240936520E-03 1.3290901956E-03 1.5622696772E-03
+ 1.8264672873E-03 2.1246918142E-03 2.4601274265E-03 2.8361352149E-03
+ 3.2562544526E-03 3.7242035371E-03 4.2438805747E-03 4.8193635718E-03
+ 5.4549101991E-03 6.1549570916E-03 6.9241186534E-03 7.7671853387E-03
+ 8.6891213818E-03 9.6950619569E-03 1.0790309686E-02 1.1980330651E-02
+ 1.3270749561E-02 1.4667344495E-02 1.6176040838E-02 1.7802904518E-02
+ 1.9554134694E-02 2.1436055670E-02 2.3455108141E-02 2.5617839781E-02
+ 2.7930895154E-02 3.0401004973E-02 3.3034974718E-02 3.5839672635E-02
+ 3.8822017219E-02 4.1988963987E-02 4.5347491489E-02 4.8904587415E-02
+ 5.2667234235E-02 5.6642392644E-02 6.0836987615E-02 6.5257891453E-02
+ 6.9911907561E-02 7.4805754571E-02 7.9946048386E-02 8.5339286328E-02
+ 9.0991829396E-02 9.6909884437E-02 1.0309948939E-01 1.0956649185E-01
+ 1.1631653551E-01 1.2335504268E-01 1.3068719452E-01 1.3831791740E-01
+ 1.4625186601E-01 1.5449340633E-01 1.6304659974E-01 1.7191518898E-01
+ 1.8110258286E-01 1.9061184222E-01 2.0044566587E-01 2.1060637725E-01
+ 2.2109591298E-01 2.3191581081E-01 2.4306719874E-01 2.5455078491E-01
+ 2.6636684836E-01 2.7851523059E-01 2.9099532805E-01 3.0380608560E-01
+ 3.1694599083E-01 3.3041306940E-01 3.4420488139E-01 3.5831851864E-01
+ 3.7275060309E-01 3.8749728624E-01 4.0255424955E-01 4.1791670600E-01
+ 4.3357940267E-01 4.4953662431E-01 4.6578219805E-01 4.8230949907E-01
+ 4.9911145737E-01 5.1618056081E-01 5.3350887577E-01 5.5108804818E-01
+ 5.6890931531E-01 5.8696351805E-01 6.0524111331E-01 6.2373218122E-01
+ 6.4242644857E-01 6.6131331266E-01 6.8038183935E-01 6.9962078570E-01
+ 7.1901860499E-01 7.3856348662E-01 7.5824338325E-01 7.7804600062E-01
+ 7.9795881841E-01 8.1796910763E-01 8.3806401676E-01 8.5823051450E-01
+ 8.7845541180E-01 8.9872542015E-01 9.1902720615E-01 9.3934733768E-01
+ 9.5967227284E-01 9.7998856349E-01 1.0002827155E+00 1.0205411900E+00
+ 1.0407505661E+00 1.0608974985E+00 1.0809686367E+00 1.1009507982E+00
+ 1.1208309662E+00 1.1405961513E+00 1.1602336211E+00 1.1797308514E+00
+ 1.1990753747E+00 1.2182551113E+00 1.2372581675E+00 1.2560727701E+00
+ 1.2746876527E+00 1.2930916473E+00 1.3112739288E+00 1.3292240805E+00
+ 1.3469318026E+00 1.3643873694E+00 1.3815812455E+00 1.3985042707E+00
+ 1.4151477579E+00 1.4315031756E+00 1.4475626393E+00 1.4633184333E+00
+ 1.4787633540E+00 1.4938905619E+00 1.5086935679E+00 1.5231663992E+00
+ 1.5373033174E+00 1.5510991786E+00 1.5645490712E+00 1.5776486137E+00
+ 1.5903937343E+00 1.6027808153E+00 1.6148065974E+00 1.6264682312E+00
+ 1.6377632344E+00 1.6486895225E+00 1.6592453510E+00 1.6694293898E+00
+ 1.6792405909E+00 1.6886783588E+00 1.6977423015E+00 1.7064325290E+00
+ 1.7147492655E+00 1.7226932894E+00 1.7302654040E+00 1.7374670092E+00
+ 1.7442994544E+00 1.7507647060E+00 1.7568646312E+00 1.7626016985E+00
+ 1.7679782717E+00 1.7729972480E+00 1.7776614744E+00 1.7819741950E+00
+ 1.7859387338E+00 1.7895585939E+00 1.7928375763E+00 1.7957793520E+00
+ 1.7983882016E+00 1.8006678762E+00 1.8026231340E+00 1.8042578257E+00
+ 1.8055768864E+00 1.8065845304E+00 1.8072856408E+00 1.8076848775E+00
+ 1.8077869473E+00 1.8075969879E+00 1.8071194511E+00 1.8063599331E+00
+ 1.8053227930E+00 1.8040134879E+00 1.8024368484E+00 1.8005979067E+00
+ 1.7985020188E+00 1.7961537721E+00 1.7935588868E+00 1.7907218588E+00
+ 1.7876480501E+00 1.7843425148E+00 1.7808099783E+00 1.7770560691E+00
+ 1.7730851293E+00 1.7689025395E+00 1.7645131169E+00 1.7599215406E+00
+ 1.7551332461E+00 1.7501524539E+00 1.7449843435E+00 1.7396336057E+00
+ 1.7341046645E+00 1.7284028460E+00 1.7225321567E+00 1.7164974461E+00
+ 1.7103033959E+00 1.7039541299E+00 1.6974545973E+00 1.6908088787E+00
+ 1.6840212866E+00 1.6770965847E+00 1.6700385453E+00 1.6628516524E+00
+ 1.6555401646E+00 1.6481078963E+00 1.6405593347E+00 1.6328982877E+00
+ 1.6251285960E+00 1.6172546988E+00 1.6092800182E+00 1.6012084730E+00
+ 1.5930441679E+00 1.5847904442E+00 1.5764511720E+00 1.5680301195E+00
+ 1.5595305660E+00 1.5509562874E+00 1.5423107514E+00 1.5335971532E+00
+ 1.5248191424E+00 1.5159799240E+00 1.5070825885E+00 1.4981306331E+00
+ 1.4891270390E+00 1.4800747730E+00 1.4709771623E+00 1.4618369983E+00
+ 1.4526571051E+00 1.4434406238E+00 1.4341901866E+00 1.4249084611E+00
+ 1.4155983915E+00 1.4062624763E+00 1.3969032155E+00 1.3875233491E+00
+ 1.3781252617E+00 1.3687112799E+00 1.3592839345E+00 1.3498455112E+00
+ 1.3403981608E+00 1.3309442047E+00 1.3214858373E+00 1.3120250364E+00
+ 1.3025639175E+00 1.2931045841E+00 1.2836488484E+00 1.2741986288E+00
+ 1.2647559292E+00 1.2553224088E+00 1.2458998253E+00 1.2364899982E+00
+ 1.2270945182E+00 1.2177149741E+00 1.2083529910E+00 1.1990100960E+00
+ 1.1896877214E+00 1.1803873173E+00 1.1711103190E+00 1.1618580261E+00
+ 1.1526317456E+00 1.1434327681E+00 1.1342623023E+00 1.1251215259E+00
+ 1.1160115815E+00 1.1069335742E+00 1.0978885743E+00 1.0888776093E+00
+ 1.0799016351E+00 1.0709616411E+00 1.0620585497E+00 1.0531932098E+00
+ 1.0443664647E+00 1.0355791717E+00 1.0268321107E+00 1.0181259360E+00
+ 1.0094614527E+00 1.0008393599E+00 9.9226026254E-01 9.8372474481E-01
+ 9.7523349765E-01 9.6678708973E-01 9.5838593794E-01 9.5003063110E-01
+ 9.4172171037E-01 9.3345961893E-01 9.2524462265E-01 9.1707731750E-01
+ 9.0895809901E-01 9.0088724426E-01 8.9286502895E-01 8.8489192614E-01
+ 8.7696823614E-01 8.6909407715E-01 8.6126975769E-01 8.5349562740E-01
+ 8.4577190083E-01 8.3809854977E-01 8.3047592524E-01 8.2290425909E-01
+ 8.1538368960E-01 8.0791405819E-01 8.0049575688E-01 7.9312891078E-01
+ 7.8581356861E-01 7.7854952735E-01 7.7133714192E-01 7.6417646865E-01
+ 7.5706747626E-01 7.5000993485E-01 7.4300414673E-01 7.3605011734E-01
+ 7.2914775745E-01 7.2229679037E-01 7.1549748256E-01 7.0874979619E-01
+ 7.0205360805E-01 6.9540856842E-01 6.8881492655E-01 6.8227260825E-01
+ 6.7578148165E-01 6.6934109343E-01 6.6295169476E-01 6.5661318132E-01
+ 6.5032541029E-01 6.4408787667E-01 6.3790076733E-01 6.3176398132E-01
+ 6.2567735246E-01 6.1964040597E-01 6.1365316655E-01 6.0771557906E-01
+ 6.0182745854E-01 5.9598838960E-01 5.9019818967E-01 5.8445687244E-01
+ 5.7876423828E-01 5.7311996033E-01 5.6752360503E-01 5.6197527611E-01
+ 5.5647476340E-01 5.5102182365E-01 5.4561583669E-01 5.4025690926E-01
+ 5.3494485906E-01 5.2967943792E-01 5.2446015783E-01 5.1928679085E-01
+ 5.1415930019E-01 5.0907743621E-01 5.0404088008E-01 4.9904902244E-01
+ 4.9410198714E-01 4.8919952622E-01 4.8434136294E-01 4.7952694941E-01
+ 4.7475610424E-01 4.7002873886E-01 4.6534458243E-01 4.6070330844E-01
+ 4.5610426374E-01 4.5154756874E-01 4.4703296083E-01 4.4256015140E-01
+ 4.3812863507E-01 4.3373810026E-01 4.2938850323E-01 4.2507956700E-01
+ 4.2081098975E-01 4.1658212024E-01 4.1239294618E-01 4.0824327443E-01
+ 4.0413281782E-01 4.0006121805E-01 3.9602785502E-01 3.9203281933E-01
+ 3.8807583962E-01 3.8415662237E-01 3.8027470990E-01 3.7642968540E-01
+ 3.7262154596E-01 3.6885001608E-01 3.6511479936E-01 3.6141536736E-01
+ 3.5775145919E-01 3.5412299976E-01 3.5052971256E-01 3.4697130130E-01
+ 3.4344719454E-01 3.3995723727E-01 3.3650130636E-01 3.3307912693E-01
+ 3.2969040551E-01 3.2633455395E-01 3.2301147301E-01 3.1972101645E-01
+ 3.1646291342E-01 3.1323687556E-01 3.1004232297E-01 3.0687916303E-01
+ 3.0374725124E-01 3.0064632274E-01 2.9757609626E-01 2.9453602411E-01
+ 2.9152597269E-01 2.8854582305E-01 2.8559531803E-01 2.8267418512E-01
+ 2.7978193216E-01 2.7691833873E-01 2.7408333382E-01 2.7127666938E-01
+ 2.6849808297E-01 2.6574716067E-01 2.6302355208E-01 2.6032725424E-01
+ 2.5765802930E-01 2.5501562603E-01 2.5239973026E-01 2.4980982278E-01
+ 2.4724598545E-01 2.4470799151E-01 2.4219560171E-01 2.3970856424E-01
+ 2.3724632943E-01 2.3480890576E-01 2.3239613486E-01 2.3000779008E-01
+ 2.2764363309E-01 2.2530325492E-01 2.2298640393E-01 2.2069305439E-01
+ 2.1842299263E-01 2.1617599417E-01 2.1395181027E-01 2.1174990097E-01
+ 2.0957038110E-01 2.0741305021E-01 2.0527769779E-01 2.0316410323E-01
+ 2.0107186178E-01 1.9900079192E-01 1.9695085130E-01 1.9492184341E-01
+ 1.9291356241E-01 1.9092579302E-01 1.8895801126E-01 1.8701033219E-01
+ 1.8508257842E-01 1.8317455866E-01 1.8128607296E-01 1.7941680534E-01
+ 1.7756647011E-01 1.7573509008E-01 1.7392248827E-01 1.7212847969E-01
+ 1.7035287127E-01 1.6859527041E-01 1.6685559176E-01 1.6513377150E-01
+ 1.6342963917E-01 1.6174301686E-01 1.6007371919E-01 1.5842130432E-01
+ 1.5678583317E-01 1.5516717894E-01 1.5356517835E-01 1.5197966125E-01
+ 1.5041043357E-01 1.4885707937E-01 1.4731970418E-01 1.4579815874E-01
+ 1.4429228745E-01 1.4280192834E-01 1.4132687120E-01 1.3986677081E-01
+ 1.3842170754E-01 1.3699153964E-01 1.3557611955E-01 1.3417529384E-01
+ 1.3278885628E-01 1.3141649105E-01 1.3005827182E-01 1.2871406463E-01
+ 1.2738373017E-01 1.2606712370E-01 1.2476406116E-01 1.2347421844E-01
+ 1.2219767949E-01 1.2093431829E-01 1.1968400384E-01 1.1844660022E-01
+ 1.1722196165E-01 1.1600972237E-01 1.1480999148E-01 1.1362265090E-01
+ 1.1244757799E-01 1.1128464555E-01 1.1013372180E-01 1.0899448620E-01
+ 1.0786696983E-01 1.0675110095E-01 1.0564676518E-01 1.0455384397E-01
+ 1.0347221453E-01 1.0240162905E-01 1.0134199942E-01 1.0029331681E-01
+ 9.9255474932E-02 9.8228363670E-02 9.7211869050E-02 9.6205827489E-02
+ 9.5210009780E-02 9.4224478660E-02 9.3249135724E-02 9.2283879059E-02
+ 9.1328603222E-02 9.0383199225E-02 8.9447397526E-02 8.8521221200E-02
+ 8.7604618042E-02 8.6697494053E-02 8.5799752009E-02 8.4911291446E-02
+ 8.4031950265E-02 8.3161557834E-02 8.2300158864E-02 8.1447666942E-02
+ 8.0603992714E-02 7.9769043871E-02 7.8942725128E-02 7.8124806665E-02
+ 7.7315288050E-02 7.6514137183E-02 7.5721272206E-02 7.4936608565E-02
+ 7.4160058997E-02 7.3391518706E-02 7.2630756973E-02 7.1877854460E-02
+ 7.1132736410E-02 7.0395325613E-02 6.9665542394E-02 6.8943304597E-02
+ 6.8228469607E-02 6.7520910217E-02 6.6820662299E-02 6.6127655565E-02
+ 6.5441817485E-02 6.4763073276E-02 6.4091345890E-02 6.3426471859E-02
+ 6.2768392543E-02 6.2117114539E-02 6.1472572020E-02 6.0834697111E-02
+ 6.0203419881E-02 5.9578668330E-02 5.8960272941E-02 5.8348212097E-02
+ 5.7742477641E-02 5.7143008149E-02 5.6549740333E-02 5.5962609029E-02
+ 5.5381547189E-02 5.4806391960E-02 5.4237131031E-02 5.3673754498E-02
+ 5.3116205248E-02 5.2564424472E-02 5.2018351651E-02 5.1477924552E-02
+ 5.0942997929E-02 5.0413544741E-02 4.9889564660E-02 4.9371004763E-02
+ 4.8857810578E-02 4.8349926083E-02
+
+
diff --git a/susyexists/src/__init__.py b/susyexists/src/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/__pycache__/__init__.cpython-310.pyc b/susyexists/src/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 00000000..d759392a
Binary files /dev/null and b/susyexists/src/__pycache__/__init__.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/compute.cpython-310.pyc b/susyexists/src/__pycache__/compute.cpython-310.pyc
new file mode 100644
index 00000000..b6ff8ce7
Binary files /dev/null and b/susyexists/src/__pycache__/compute.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/generate.cpython-310.pyc b/susyexists/src/__pycache__/generate.cpython-310.pyc
new file mode 100644
index 00000000..e910714a
Binary files /dev/null and b/susyexists/src/__pycache__/generate.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/kpoints.cpython-310.pyc b/susyexists/src/__pycache__/kpoints.cpython-310.pyc
new file mode 100644
index 00000000..d29db889
Binary files /dev/null and b/susyexists/src/__pycache__/kpoints.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/model.cpython-310.pyc b/susyexists/src/__pycache__/model.cpython-310.pyc
new file mode 100644
index 00000000..4f50d940
Binary files /dev/null and b/susyexists/src/__pycache__/model.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/plots.cpython-310.pyc b/susyexists/src/__pycache__/plots.cpython-310.pyc
new file mode 100644
index 00000000..5b671f54
Binary files /dev/null and b/susyexists/src/__pycache__/plots.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/reads.cpython-310.pyc b/susyexists/src/__pycache__/reads.cpython-310.pyc
new file mode 100644
index 00000000..129db1cf
Binary files /dev/null and b/susyexists/src/__pycache__/reads.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/scaffold.cpython-310.pyc b/susyexists/src/__pycache__/scaffold.cpython-310.pyc
new file mode 100644
index 00000000..361cfe82
Binary files /dev/null and b/susyexists/src/__pycache__/scaffold.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/structure.cpython-310.pyc b/susyexists/src/__pycache__/structure.cpython-310.pyc
new file mode 100644
index 00000000..ff84b709
Binary files /dev/null and b/susyexists/src/__pycache__/structure.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/utils.cpython-310.pyc b/susyexists/src/__pycache__/utils.cpython-310.pyc
new file mode 100644
index 00000000..6d6d5b0d
Binary files /dev/null and b/susyexists/src/__pycache__/utils.cpython-310.pyc differ
diff --git a/susyexists/src/__pycache__/writes.cpython-310.pyc b/susyexists/src/__pycache__/writes.cpython-310.pyc
new file mode 100644
index 00000000..80ea915f
Binary files /dev/null and b/susyexists/src/__pycache__/writes.cpython-310.pyc differ
diff --git a/susyexists/src/adiabatic.sh b/susyexists/src/adiabatic.sh
new file mode 100644
index 00000000..80d7c779
--- /dev/null
+++ b/susyexists/src/adiabatic.sh
@@ -0,0 +1,88 @@
+#!/bin/zsh
+
+#### Local testing variables ####
+#Path to quantum-espresso
+QE=/home/susy/q-e/bin/
+#Number of cores
+SLURM_NTASKS=4
+
+#Initial degauss value (0 for POSCAR initialization)
+initial=0
+#POSCAR file
+POSCAR=C.poscar
+project_name=Graphene
+pw_json=pw.json
+#vc-relax k points
+vc_relax_k=('1 1 1 0 0 0')
+relax_k=('1 1 1 0 0 0')
+scf_k=('1 1 1 0 0 0')
+
+
+echo "Espresso Machine is starting"
+#Smearing parameters
+for sigma in 0.05
+do
+echo "Adiabatic automation for $sigma is started"
+
+#Crystal relaxation
+if [ $initial -eq 0 ]
+then
+ echo "Generating crystal relaxation input from POSCAR for $sigma"
+ python run.py -n $project_name -c vc-relax -j $pw_json -d $sigma -p $POSCAR -k ${vc_relax_k[@]}
+else
+ echo "Generating crystal relaxation input from output for $sigma"
+ python run.py -n $project_name -c vc-relax -j $pw_json -d $sigma -i ./$project_name/$initial/vc-relax.out -k ${vc_relax_k[@]}
+fi
+
+echo "Calculating crystal relaxation for $sigma"
+mpirun -np $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/vc-relax.in > ./$project_name/$sigma/vc-relax.out
+echo "Crystal relaxation for $sigma is finished"
+
+#Atom Relaxation
+echo "Generating relaxation input for $sigma"
+python run.py -n $project_name -c relax -j $pw_json -d $sigma -k ${relax_k[@]} -l mono
+echo "Starting relaxation for $sigma"
+mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/relax.in > ./$project_name/$sigma/relax.out
+echo "Atom relaxation for $sigma is finished"
+
+#Scf calculation
+echo "Scf input for $sigma is generated"
+python run.py -n $project_name -c scf -j $pw_json -d $sigma -k ${scf_k[@]}
+echo "Scf calculation for $sigma is started"
+mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/scf.in > ./$project_name/$sigma/scf.out
+echo "Scf calculation for $sigma is finished"
+
+#Band calculation
+echo "Band calculation input for $sigma is generated"
+python run.py -n $project_name -c bands -j $pw_json -d $sigma
+echo "Band calculation for $sigma is started"
+mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$sigma/bands.in > ./$project_name/$sigma/bands.out
+echo "Band-pp for $sigma is generated"
+python run.py -n $project_name -c bands-pp -j $pw_json -d $sigma
+echo "Band-pp calculation $sigma is started"
+$QE/bands.x -inp ./$project_name/$sigma/bands-pp.in > ./$project_name/$sigma/bands-pp.out
+mkdir ./$project_name/plots/ 2> /dev/null
+python ./src/plot_band.py -n $project_name -d $sigma
+
+echo "Adiabatic automation for $sigma is completed"
+##Memorize the last calculation
+initial=$sigma
+done
+
+echo "Adiabatic automation is completed"
+echo "vc-relax > relax > scf > band"
+
+# # mkdir dyn
+# # mkdir dyn/$sigma/
+# # python run.py -n $project_name -c ph -j $pw_json -d $sigma
+# # mpirun -n 256 $QE/ph.x -npool 256 -inp ./inputs/$sigma-ph.in > ./outputs/$sigma-ph.out
+# # python run.py -n $project_name -c q2r -j $pw_json -d $sigma
+# # $QE/q2r.x < ./inputs/$sigma-q2r.in > ./outputs/$sigma-q2r.out
+# # python run.py -n $project_name -c matdyn -j $pw_json -d $sigma
+# # $QE/matdyn.x < ./inputs/$sigma-matdyn.in > ./outputs/$sigma-matdyn.out
+# # python run.py -n $project_name -c plotband -j $pw_json -d $sigma
+# # cd ./dyn/$sigma/
+# # $QE/plotband.x < $sigma-plotband.in > $sigma-plotband.out
+# # cd ../..
+# # bash ph.sh $QE $sigma
+# python ph_plot.py -j $pw_json -d $sigma
diff --git a/susyexists/src/compute.py b/susyexists/src/compute.py
new file mode 100644
index 00000000..9024bd8d
--- /dev/null
+++ b/susyexists/src/compute.py
@@ -0,0 +1,20 @@
+import subprocess
+
+def run_pw(project_id,job_id,calculation,num_core):
+ if calculation == 'bands-pp':
+ p = subprocess.Popen(f"mpirun -np {num_core} bands.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ p.wait()
+ else:
+ p = subprocess.Popen(f"mpirun -np {num_core} pw.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ p.wait()
+
+def run_ph(project_id,job_id,calculation,num_core):
+ if calculation == 'ph':
+ p = subprocess.Popen(f"mpirun -np {num_core} ph.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ p.wait()
+ if calculation == 'q2r':
+ p = subprocess.Popen(f"mpirun -np {num_core} q2r.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ p.wait()
+ if calculation == 'matdyn':
+ p = subprocess.Popen(f"mpirun -np {num_core} matdyn.x -inp ./Projects/{project_id}/{job_id}/{calculation}.in > ./Projects/{project_id}/{job_id}/{calculation}.out ", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ p.wait()
\ No newline at end of file
diff --git a/susyexists/src/generate.py b/susyexists/src/generate.py
new file mode 100644
index 00000000..0bde9041
--- /dev/null
+++ b/susyexists/src/generate.py
@@ -0,0 +1,176 @@
+from . import scaffold
+from . import reads
+from . import utils
+import os
+import sys
+
+
+def pw_input(project_id, calculation,config=False, degauss=None, job_id=None, initial_guess=None, k_points=None, poscar=None, layer=None, lattice_constant=False,atomic_positions=False,pseudo=False):
+
+ #Check file name, if it is None, uses degauss instead
+ if (not job_id):
+ if (degauss):
+ job_id = degauss
+ else:
+ # sys.stdout.writelines("No file name \n")
+ # print("No file name")
+ raise Exception("Define a job_id")
+
+ #Default config
+ if config==False:
+ config = utils.configure_pw()
+
+ #Create directory for input files
+ try:
+ os.makedirs(f'./Projects/')
+ except:
+ pass
+ try:
+ os.makedirs(f'./Projects/{project_id}')
+ os.makedirs(f'./Projects/{project_id}/{job_id}')
+ except:
+ try:
+ os.makedirs(f'./Projects/{project_id}/{job_id}')
+ except:
+ pass
+
+
+ # Set parameters from input
+ config["file_path"] = f"./Projects/{project_id}/{job_id}/{calculation}.in"
+
+ #If degauss is given explicitly use it instead
+ if(degauss!=None):
+ config["system"]["degauss"] = degauss
+ config["control"]["outdir"] = f"./Projects/{project_id}/{job_id}/"
+ # nat = int(config["system"]['nat'])
+
+
+
+
+ if calculation == 'vc-relax':
+ # Import initial cell and atom parameters
+ if poscar != None:
+ cell, atoms = reads.read_poscar(f'{poscar}')
+ elif initial_guess != None:
+ cell, atoms = reads.read_vc_relax(f"{initial_guess}")
+ else:
+ try:
+ cell, atoms = config['cell_parameters'], config['atomic_positions']
+ except:
+ raise Exception("PLease enter atomic position and lattice constants")
+
+ elif calculation == 'relax':
+ if poscar != None:
+ cell, atoms = reads.read_poscar(f'{poscar}')
+ try:
+ cell, atoms = reads.read_vc_relax(f"./Projects/{project_id}/{job_id}/vc-relax.out")
+ except:
+ try:
+ cell, atoms = config['cell_parameters'], config['atomic_positions']
+ except:
+ raise Exception("PLease enter atomic position and lattice constants")
+
+
+ else:
+ if poscar != None:
+ cell, atoms = reads.read_poscar(f'{poscar}')
+ try:
+ cell, atoms = reads.read_vc_relax(f"./Projects/{project_id}/{job_id}/vc-relax.out")
+ try:
+ atoms = reads.read_relax(f"./Projects/{project_id}/{job_id}/relax.out")
+ except:
+ pass
+ except:
+ try:
+ cell, atoms = config['cell_parameters'], config['atomic_positions']
+ except:
+ raise Exception("PLease enter atomic position and lattice constants")
+
+ if(layer=='mono'):
+ atoms = utils.make_monolayer(atoms)
+
+ if k_points != None:
+ config['k_points'] = k_points
+
+ if(lattice_constant):
+ cell=lattice_constant
+ if(atomic_positions):
+ atoms=atomic_positions
+
+
+
+
+ #Check for pseudopotentials
+ if pseudo==False:
+ config['atomic_species']=utils.default_pseudo(atoms)
+
+ config["control"]['prefix'] = job_id
+ config["system"]['nat'] = len(atoms)
+ #check types of atoms
+ try:
+ config["system"]['ntyp']
+ except:
+ config["system"]['ntyp'] = utils.atom_type(atoms)
+
+ #check ibrav
+ try:
+ config["system"]['ibrav']
+ except:
+ config["system"]['ibrav'] = 0
+ config['atomic_positions'] = atoms
+ config['cell_parameters'] = cell
+ config["control"]['calculation'] = calculation
+
+ if calculation == 'bands-pp':
+ scaffold.bands_pp(config)
+ else:
+ scaffold.pw(config)
+ return
+
+
+def ph_input(project_id,calculation,job_id='default',config=False):
+ #Default config
+ if config==False:
+ config = utils.configure_ph()
+ # Set parameters from input
+ config["file_path"] = f"./Projects/{project_id}/{job_id}/{calculation}.in"
+ if calculation == 'ph':
+ config["inputph"]["outdir"] = f"./Projects/{project_id}/{job_id}/"
+ config["inputph"]['prefix'] = job_id
+ config["inputph"]["fildyn"]= f'./Projects/{project_id}/{job_id}/{job_id}.dyn'
+ scaffold.ph(config)
+ elif calculation == 'q2r':
+ config['input']['fildyn'] = f'./Projects/{project_id}/{job_id}/{job_id}.dyn'
+ config['input']['flfrc'] = f'./Projects/{project_id}/{job_id}/{job_id}.fc'
+ scaffold.q2r(config)
+ elif calculation == 'matdyn':
+ config['input']['flfrq'] = f'./Projects/{project_id}/{job_id}/{job_id}.freq'
+ config['input']['flfrc'] = f'./Projects/{project_id}/{job_id}/{job_id}.fc'
+ scaffold.matdyn(config)
+ elif calculation == 'plotband':
+ scaffold.plotband(config)
+ elif calculation == "ph_plot":
+ scaffold.ph_plot(config)
+
+
+def runner(project_name,iteration,file_names,calculation,qe_path,ncore):
+ pre = f'''QE={qe_path}
+SLURM_NTASKS={ncore}
+project_name={project_name}
+ '''
+ # print(pre)
+ post =f'''
+echo Starting {iteration} calculation
+for file_name in {" ".join(file_names)}
+do
+echo $file_name is started
+mpirun -n $SLURM_NTASKS $QE/pw.x -inp ./$project_name/$file_name/{calculation}.in > ./$project_name/$file_name/{calculation}.out
+echo $file_name is done
+done
+echo All {iteration} calculations are completed
+ '''
+ # print(post)
+ with open(f"./{iteration}.sh", 'w') as file:
+ file.write(pre)
+ file.write(post)
+ return
\ No newline at end of file
diff --git a/susyexists/src/kpoints.py b/susyexists/src/kpoints.py
new file mode 100644
index 00000000..d302d879
--- /dev/null
+++ b/susyexists/src/kpoints.py
@@ -0,0 +1,35 @@
+
+point_coordinate = {'K':[0.33333333333,0.3333333333,0],'M':[0,0.5,0],'G':[0,0,0]}
+
+def band_points (points):
+ point_list =[]
+ for point in points:
+ coordinate = symmetry_coordinate(point)
+ point_list.append(coordinate)
+ return point_list
+
+def symmetry_coordinate(point):
+ point = point.upper()
+ coordinate = point_coordinate[point]
+ return coordinate
+
+# def band_input(points,num_points):
+# coordinates = band_points(points)
+# parameter = []
+# for j,i in enumerate(coordinates):
+# input_line = {'x':str(i[0]),'y':str(i[1]),'z':str(i[2]),'number':str(num_points),'label':f" ! {points[j].upper()}"}
+# parameter.append(input_line)
+# return parameter
+
+
+def band_input(path,points,num_points):
+ parameter = []
+ for k,i in enumerate(path):
+ for j in points:
+ if i.upper() == j[0].upper():
+ if k == len(path)-1:
+ input_line = {'x':str(j[1]),'y':str(j[2]),'z':str(j[3]),'number':str(1),'label':f" ! {j[0].upper()}"}
+ else:
+ input_line = {'x':str(j[1]),'y':str(j[2]),'z':str(j[3]),'number':str(num_points),'label':f" ! {j[0].upper()}"}
+ parameter.append(input_line)
+ return parameter
diff --git a/susyexists/src/model.py b/susyexists/src/model.py
new file mode 100644
index 00000000..0cfc6b05
--- /dev/null
+++ b/susyexists/src/model.py
@@ -0,0 +1,142 @@
+from . import utils
+from . import reads
+from . import generate
+from . import compute
+from . import kpoints
+from . import plots
+from . import structure
+class pw:
+ def __init__(self,project_id):
+ self.project_id = project_id
+ self.config = utils.configure('pw')
+ self.atom = False
+ self.lattice = False
+ self.calculation=False
+ self.job_id = 'results'
+ self.path = False
+ self.poscar= False
+
+ def from_poscar(self,directory):
+ self.poscar=directory
+ lattice, atom = reads.read_poscar(directory)
+ self.config['atomic_positions'] = atom
+ self.config['cell_parameters'] = lattice
+
+ def from_json(self,data=False,path=False):
+ lattice, atom = reads.read_json(data=data,path=path)
+ self.config['atomic_positions'] = atom
+ self.config['cell_parameters'] = lattice
+
+ def set_calculation(self,calculation_type):
+ self.calculation = calculation_type
+ self.config['control']['calculation'] = calculation_type
+
+
+ def create_input(self,layer="False"):
+ generate.pw_input(project_id=self.project_id,calculation=self.calculation,job_id=self.job_id, config=self.config,layer=layer)
+
+ def calculate(self, num_core=1):
+ compute.run_pw(self.project_id,self.job_id,self.calculation,num_core)
+ def band_points(self,path,number):
+ self.path=path
+ points = self.get_points()
+ k_path = kpoints.band_input(path,points,number)
+ self.config['k_points_bands'] = k_path
+
+ def ecutwfc(self,number):
+ self.config['system']['ecutwfc'] = number
+ def conv_thr(self,number):
+ self.config['electrons']['conv_thr']=number
+
+ def k_points(self,number):
+ if type(number) == int :
+ self.config['k_points']=f'{number} {number} {number} 0 0 0'
+ elif len(number) == 3:
+ self.config['k_points']=f'{number[0]} {number[1]} {number[2]} 0 0 0'
+ else:
+ raise Exception("K points can be either a number or an array with 3 enteries")
+
+ def plot_electron(self,ylim=False,show=False,save=False):
+ plots.plot_electron(self,ylim,show,save)
+
+ def nbnd(self,number):
+ self.config['system']['nbnd']=number
+
+ def get_nbnd(self):
+ return int(reads.read_num_bands(self))
+
+ def mixing_mode(self,value):
+ self.config['electrons']['mixing_mode']=value
+ def smearing(self,value):
+ self.config['system']['smearing'] = value
+ def degauss(self,value):
+ self.config['system']['degauss'] = value
+
+ def get_primitive(self,file='vasp-ase'):
+ lattice,atoms,kpoints = structure.primitive(self.poscar,file)
+ self.config['atomic_positions'] = atoms
+ self.config['cell_parameters']=lattice
+
+ def get_points(self,file='vasp-ase'):
+ lattice,atoms,kpoints = structure.primitive(self.poscar,file)
+ self.points=kpoints
+ return kpoints
+
+ def vc_relax(self,num_core=1): #Crystal optimization
+ self.set_calculation(calculation_type='vc-relax') #set calculation
+ self.create_input() #create input
+ self.calculate(num_core) #run calculation
+
+ def relax(self,num_core=1,layer=False): #Atomic optimization
+ self.set_calculation(calculation_type='relax') #set calculation
+ self.create_input(layer=layer) #create mono-layer input
+ self.calculate(num_core) #run calculation
+
+ def scf(self,num_core=1): #Scf calculation
+ self.set_calculation(calculation_type='scf') #set calculation
+ self.create_input() #create input
+ self.calculate(num_core) #run calculation
+ def bands(self,path,num_points,num_core): #Band calculation
+ self.band_points(path,num_points) #define path
+ self.set_calculation(calculation_type='bands') #set calculation
+ self.create_input() #create input
+ self.calculate(num_core) #run calculations
+ self.set_calculation('bands-pp') #set calculaion
+ self.create_input() #create input
+ self.calculate( ) #run calculation
+ def test(self,parameter_name,conv_thr,start,end,step,num_core,debug=False,out=False):
+ result = utils.test_parameter(self=self,parameter_name=parameter_name,conv_thr=conv_thr,start=start,end=end,step=step,num_core=num_core,debug=debug,out=out)
+ # if parameter=='ecutwfc':
+ # result = utils.test_ecutwfc(self=self,start=start,end=end,step=step,num_core=num_core,debug=debug)
+ # elif parameter=='kpoints':
+ # result = utils.test_k(self=self,start=start,end=end,step=step,num_core=num_core,debug=debug)
+ return result
+
+class ph:
+ def __init__(self,project_id):
+ self.project_id = project_id
+ self.config = utils.configure('ph')
+ self.job_id = 'results'
+ self.calculation = False
+ def create_input(self,job_id='results'):
+ # self.set_calculation(self.calculation)
+ generate.ph_input(project_id=self.project_id,calculation=self.calculation,job_id=self.job_id, config=self.config)
+ def set_calculation(self,calculation):
+ self.calculation=calculation
+ self.config = utils.configure(calculation)
+ def calculate(self, num_core=1):
+ compute.run_ph(self.project_id,self.job_id,self.calculation,num_core)
+ def set_q(self,nq1=2,nq2=2,nq3=2):
+ self.config['inputph']['nq1']=nq1
+ self.config['inputph']['nq2']=nq2
+ self.config['inputph']['nq3']=nq3
+ def set_path(self, path,number,poscar=True):
+ model = pw(project_id=self.project_id )
+ if (poscar):
+ model.from_poscar(directory=f"{self.project_id}.poscar")
+ model.band_points(path,number)
+ kpt = model.config['k_points_bands']
+ self.config['k_points_bands']=kpt
+ def plot(self):
+ plots.plot_phonon(self)
+
diff --git a/susyexists/src/ph_plot.py b/susyexists/src/ph_plot.py
new file mode 100644
index 00000000..ca97a254
--- /dev/null
+++ b/susyexists/src/ph_plot.py
@@ -0,0 +1,36 @@
+prefix = "0.0057"
+labels = ['Γ',"M","K",'Γ']
+
+
+import numpy as np
+import matplotlib.pyplot as plt
+
+def Symmetries(fstring):
+ f = open(fstring, 'r')
+ x = np.zeros(0)
+ for i in f:
+ if "high-symmetry" in i:
+ x = np.append(x, float(i.split()[-1]))
+ f.close()
+ return x
+
+freq = np.loadtxt("./{}.freq.gp".format(prefix))
+load_sym = Symmetries("./plotband.out")
+sym = load_sym/max(load_sym)
+ph_path = freq.T[0]/max(freq.T[0])
+cm2mev = 0.124
+
+fig = plt.figure(figsize=(7,6))
+# colors = ["blue","orange","green","red","purple","teal"]
+for i in sym[:-1]:
+ plt.axvline(i,linestyle="--",color="black")
+for i in range(1,len(freq.T)):
+ plt.plot(ph_path,freq.T[i]*cm2mev,linewidth=2,color="blue")
+plt.xticks(sym,labels,fontsize=15)
+# plt.axhline(0,color="black")
+plt.title(f"{prefix}")
+plt.ylim(0,)
+plt.xlim(0,ph_path[-1])
+plt.ylabel("ω (meV)",fontsize=15)
+plt.savefig('phonon_band.png')
+plt.show()
\ No newline at end of file
diff --git a/susyexists/src/plot_band.py b/susyexists/src/plot_band.py
new file mode 100644
index 00000000..4a06770a
--- /dev/null
+++ b/susyexists/src/plot_band.py
@@ -0,0 +1,57 @@
+import argparse
+import numpy as np
+import matplotlib.pyplot as plt
+
+
+ap = argparse.ArgumentParser()
+ap.add_argument("-n", "--name", required=True,
+ help="Project name")
+ap.add_argument("-d", "--degauss", required=True, help="Degauss value")
+args = vars(ap.parse_args())
+
+project_name = args['name']
+degauss = args['degauss']
+
+
+def read_efermi(path):
+ lines = open(path, 'r').readlines()
+ e_fermi = 0
+ for i in lines:
+ if "the Fermi energy is" in i:
+ e_fermi = float(i.split()[-2])
+ return e_fermi
+
+def Symmetries(fstring):
+ f = open(fstring, 'r')
+ x = np.zeros(0)
+ for i in f:
+ if "high-symmetry" in i:
+ x = np.append(x, float(i.split()[-1]))
+ f.close()
+ return x
+
+sym = Symmetries(f'./{project_name}/{degauss}/bands-pp.out')
+
+
+temp_file = open(f'./{project_name}/{degauss}/scf.out', 'r').readlines()
+for i in range(len(temp_file)):
+ if len(temp_file[i].split())>2:
+ if temp_file[i].split()[0]=='the':
+ fermi=temp_file[i].split()[-2]
+
+fig = plt.figure(figsize=(8,6))
+data =np.loadtxt(f'./{project_name}/{degauss}/bands.dat.gnu')
+
+k = np.unique(data[:, 0])
+bands = np.reshape(data[:, 1], (-1, len(k)))
+for band in range(len(bands)):
+ plt.plot(k, bands[band, :]-float(fermi),c='black')
+plt.xticks(sym,['G','M','K','G'])
+plt.axvline(sym[1],c='black')
+plt.axvline(sym[2],c='black')
+plt.axhline(0,c='red')
+plt.ylim(-10,10)
+plt.xlim(sym[0],sym[-1])
+plt.savefig(f'./{project_name}/plots/band_{degauss}.png')
+# plt.show()
+
\ No newline at end of file
diff --git a/susyexists/src/plot_sigma_energy.py b/susyexists/src/plot_sigma_energy.py
new file mode 100644
index 00000000..105f2dd4
--- /dev/null
+++ b/susyexists/src/plot_sigma_energy.py
@@ -0,0 +1,33 @@
+
+import os
+import numpy as np
+import matplotlib.pyplot as plt
+out_files = os.listdir('./results/')
+
+total_energy = []
+e_fermi = []
+for prefix in out_files:
+ temp_file = open(f'./results/{prefix}/scf.out', 'r').readlines()
+ for i in range(len(temp_file)):
+ if len(temp_file[i].split())>2:
+ if temp_file[i].split()[0]=='!':
+ temp_en=temp_file[i].split()[4]
+ # if temp_file[i].split()[0]=='the':
+ # temp_fermi=temp_file[i].split()[-2]
+ total_energy.append([float(temp_en),float(prefix)])
+ # e_fermi.append([float(temp_fermi),float(file[:-13])])
+
+tot_en = np.array(total_energy)
+tot_en = tot_en[tot_en[:, 1].argsort()]
+
+
+# e_f = np.array(e_fermi)
+# e_f = e_f[e_f[:, 1].argsort()]
+
+# fig = plt.figure(figsize=(8,6))
+plt.plot(tot_en.T[1],tot_en.T[0])
+# plt.ylabel('Total Energy [Ry]',fontsize=20)
+# plt.xlabel('Smearing Value [Ry]',fontsize=20)
+# plt.xticks(fontsize=20)
+# plt.yticks(fontsize=20)
+plt.savefig('total_sigma.png')
diff --git a/susyexists/src/plots.py b/susyexists/src/plots.py
new file mode 100644
index 00000000..dc95069c
--- /dev/null
+++ b/susyexists/src/plots.py
@@ -0,0 +1,50 @@
+import numpy as np
+import matplotlib.pyplot as plt
+from . import reads
+
+def plot_electron(self,ylim=False,show=False,save=False):
+ sym = reads.read_symmetries(f'./Projects/{self.project_id}/{self.job_id}/bands-pp.out')
+ fermi = reads.read_efermi(f'./Projects/{self.project_id}/{self.job_id}/scf.out')
+ fig = plt.figure(figsize=(8,6))
+ data = np.loadtxt(f'./Projects/{self.project_id}/{self.job_id}/bands.dat.gnu')
+ k = np.unique(data[:, 0])
+ bands = np.reshape(data[:, 1], (-1, len(k)))
+ for band in range(len(bands)):
+ plt.plot(k, bands[band, :]-float(fermi),c='black')
+ plt.xticks(sym,self.path)
+ for i in range(1,len(sym)-1):
+ plt.axvline(sym[i],c='black')
+ plt.axhline(0,c='red')
+ plt.ylim(ylim[0],ylim[1])
+ plt.xlim(sym[0],sym[-1])
+ if save==True:
+ plt.savefig(f'./Projects/{self.project_id}/{self.job_id}/band.png')
+ if show==True:
+ return fig
+
+
+def plot_phonon(self):
+ sym = []
+ point = [0]
+ for k,i in enumerate(self.config['k_points_bands']):
+ sym.append(i['label'].split()[1])
+ if k!=len(self.config['k_points_bands'])-1:
+ point.append(point[k]+int(i['number']))
+ freq = np.loadtxt(f"./Projects/{self.project_id}/{self.job_id}/{self.job_id}.freq.gp")
+ ph_path = freq.T[0]/max(freq.T[0])
+ cm2mev = 0.124
+ fig = plt.figure(figsize=(7,6))
+
+ for i in range(1,len(freq.T)):
+ plt.plot(ph_path,freq.T[i]*cm2mev,linewidth=2,color="blue")
+ # print(point)
+ tick = [ ph_path[i] for i in point ]
+ for i in tick[1:-1]:
+ plt.axvline(i,linestyle="--",color="black")
+ plt.xticks(tick,sym,fontsize=15)
+ plt.ylim(0,)
+ plt.xlim(0,ph_path[-1])
+ plt.ylabel("ω (meV)",fontsize=15)
+ plt.savefig('phonon_band.png')
+ plt.show()
+
diff --git a/susyexists/src/reads.py b/susyexists/src/reads.py
new file mode 100644
index 00000000..e55c5354
--- /dev/null
+++ b/susyexists/src/reads.py
@@ -0,0 +1,114 @@
+import numpy as np
+import json
+
+def read_pp(paths):
+ elements = []
+ wavefunction = []
+ chargedensity = []
+ for path in paths:
+ pp = {"Element":"","Wavefunction":50,"Chargedensity:":200}
+ with open(path, 'r') as data:
+ data = data.read().split()
+ for i in range(200):
+ if data[i] =="Element:":
+ # print(str(f"Element: {data[i+1]}"))
+ pp["Element"]=data[i+1]
+ if data[i] =="wavefunctions:":
+ # print(f"Wave function cutoff: {float(data[i+1])}")
+ pp["Wavefunction"]=data[i+1]
+ if data[i] =="density:":
+ # print(f"Charge density cutoff: {float(data[i+1])}")
+ pp["Chargedensity"]=data[i+1]
+
+ elements.append(pp['Element'])
+ wavefunction.append(float(pp['Wavefunction']))
+ chargedensity.append(float(pp['Chargedensity']))
+ chargedensity.sort()
+ wavefunction.sort()
+ return(elements,wavefunction[-1]*1.5,chargedensity[-1]*1.5)
+
+
+def read_poscar(path):
+ data = open(path, 'r').readlines()
+ cell =[]
+ for i in data[2:5]:
+ line=i.split()
+ cell.append(line)
+ atoms= []
+ for i in data[8:]:
+ line=(i.split())
+ position=line[:3]
+ atom = [line[-1]]
+ atoms.append(atom+position)
+ return(cell,atoms)
+
+
+def read_vc_relax(path):
+ vc_relax = open(path, 'r').readlines()
+ begin = 0
+ end = 0
+ for i in range(len(vc_relax)):
+ if vc_relax[i] == 'Begin final coordinates\n':
+ begin = i
+ if vc_relax[i] == 'End final coordinates\n':
+ end = i
+ cell = np.array([i.split()
+ for i in vc_relax[begin+5:begin+8]]).astype(float)
+ atoms = np.array([i.split() for i in vc_relax[begin+10:end]])
+ return(cell, atoms)
+
+def read_relax(path):
+ data = open(path, 'r').readlines()
+ begin = 0
+ end = 0
+ for i in range(len(data)):
+ if data[i] == 'Begin final coordinates\n':
+ begin = i
+ if data[i] == 'End final coordinates\n':
+ end = i
+ atoms = np.array([i.split() for i in data[begin+3:end]])
+ return atoms
+
+def read_symmetries(fstring):
+ f = open(fstring, 'r')
+ x = np.zeros(0)
+ for i in f:
+ if "high-symmetry" in i:
+ x = np.append(x, float(i.split()[-1]))
+ f.close()
+ return x
+
+def read_efermi(path):
+ lines = open(path, 'r').readlines()
+ e_fermi = 0
+ for i in lines:
+ if "the Fermi energy is" in i:
+ e_fermi = float(i.split()[-2])
+ return e_fermi
+
+def read_num_bands(self):
+ directory = f"./Projects/{self.project_id}/{self.job_id}/scf.out"
+ lines = open(directory, 'r').readlines()
+ number = 0
+ for i in lines:
+ if " number of Kohn-Sham states" in i:
+ number = float(i.split()[-1])
+ return number
+
+
+def read_json(data=False,path=False):
+ if (path):
+ with open(path) as f:
+ data = f.read()
+ crystal = json.loads(data)
+ atoms = []
+ cell = np.array(crystal['lattice']['matrix'],dtype=str)
+ for i in range(len(crystal['sites'])):
+ element = crystal['sites'][i]['species'][0]['element']
+ coordinate = crystal['sites'][i]['abc']
+ atoms.append([element,str(coordinate[0]),str(coordinate[1]),str(coordinate[2])])
+ # atoms.append(element)
+ # coordinate = crystal['sites'][i]['abc']
+ # positions[i]={element:coordinate}
+ return cell,atoms
+
diff --git a/susyexists/src/run.py b/susyexists/src/run.py
new file mode 100644
index 00000000..84082c30
--- /dev/null
+++ b/susyexists/src/run.py
@@ -0,0 +1,58 @@
+import sys
+import argparse
+import json
+from src import generate
+
+# Construct the argument parser
+ap = argparse.ArgumentParser()
+
+# Add the arguments to the parser
+ap.add_argument("-n", "--name", required=True,
+ help="Project name")
+ap.add_argument("-c", "--calculation", required=True,
+ help="Type of calculation")
+ap.add_argument("-j", "--json", required=True,
+ help="JSON file")
+ap.add_argument("-d", "--degauss", required=False,
+ help="Degauss value")
+ap.add_argument("-k", "--kpoints", nargs='+', required=False,
+ help="K points")
+ap.add_argument("-i", "--initial", required=False,
+ help="Initial guess path")
+ap.add_argument("-p", "--poscar", required=False,
+ help="Poscar path")
+ap.add_argument("-l", "--layer", required=False,
+ help="Layered materials")
+
+
+
+args = vars(ap.parse_args())
+
+project_id = args['name']
+# Type of calculation
+calculation = args['calculation']
+# Degauss parameter
+degauss = args['degauss']
+parameter = args['json']
+# K points
+
+if args['kpoints'] != None:
+ k_points = ' '.join(args['kpoints'])
+else:
+ k_points = None
+
+layer = args["layer"]
+
+
+initial = args['initial']
+poscar = args['poscar']
+# print(f"Initial path: {initial}")
+# print(f"Initial path: {poscar}")
+
+with open(f'{parameter}') as f:
+ data = f.read()
+ config = json.loads(data)
+
+
+generate.pw_input(project_id=project_id,calculation=calculation,config=config,degauss=degauss, k_points=k_points,
+ initial_guess=initial, poscar=poscar,layer=layer)
diff --git a/susyexists/src/scaffold.py b/susyexists/src/scaffold.py
new file mode 100644
index 00000000..98e9d9aa
--- /dev/null
+++ b/susyexists/src/scaffold.py
@@ -0,0 +1,126 @@
+import numpy as np
+import pandas as pd
+from . import reads
+from . import writes
+from . import utils
+import json
+
+def pw(parameters):
+ with open(parameters['file_path'], 'w') as file:
+ for i,j in parameters.items():
+ try:
+ if(type(j)==dict):
+ file.write(f"&{i.upper()} \n")
+ for k,l in j.items():
+ try:
+ float(l)
+ file.write(f"{k} = {l} \n")
+ except:
+ try:
+ json.loads(l)
+ file.write(f"{k} = .{l}. \n")
+ except:
+ if(bool(l)):
+ file.write(f"{k} = '{l}' \n")
+ file.write("/ \n")
+ except:
+ pass
+ writes.write_atom_species(parameters['file_path'], parameters['atomic_species'])
+ writes.write_atom_positions(parameters['file_path'],parameters['atomic_positions'])
+ writes.write_cell_parameters(parameters['file_path'], parameters['cell_parameters'])
+ if parameters["control"]['calculation']=='bands':
+ writes.write_k_points_bands(parameters['file_path'], parameters['k_points_bands'])
+ else:
+ writes.write_k_points(parameters['file_path'], parameters['k_points'])
+ return
+
+
+def bands_pp(parameters):
+ filedata = f"""
+&bands
+outdir = '{parameters["control"]['outdir']}'
+prefix = '{parameters["control"]['prefix']}'
+filband = '{parameters["control"]['outdir']}bands.dat'
+/
+"""
+ with open(parameters['file_path'], 'w') as file:
+ file.write(filedata)
+ return
+
+
+def ph(parameters):
+ with open(parameters['file_path'], 'w') as file:
+ for i,j in parameters.items():
+ try:
+ if(type(j)==dict):
+ file.write(f"&{i.upper()} \n")
+ for k,l in j.items():
+ try:
+ float(l)
+ file.write(f"{k} = {l} \n")
+ except:
+ try:
+ json.loads(l)
+ file.write(f"{k} = .{l}. \n")
+ except:
+ if(bool(l)):
+ file.write(f"{k} = '{l}' \n")
+ file.write("/ \n")
+ except:
+ pass
+ return
+
+def q2r(parameters):
+ with open(parameters['file_path'], 'w') as file:
+ for i,j in parameters.items():
+ try:
+ if(type(j)==dict):
+ file.write(f"&{i.upper()} \n")
+ for k,l in j.items():
+ try:
+ float(l)
+ file.write(f"{k} = {l} \n")
+ except:
+ try:
+ json.loads(l)
+ file.write(f"{k} = .{l}. \n")
+ except:
+ if(bool(l)):
+ file.write(f"{k} = '{l}' \n")
+ file.write("/ \n")
+ except:
+ pass
+ return
+
+def matdyn(parameters):
+ with open(parameters['file_path'], 'w') as file:
+ for i,j in parameters.items():
+ try:
+ if(type(j)==dict):
+ file.write(f"&{i.upper()} \n")
+ for k,l in j.items():
+ try:
+ float(l)
+ file.write(f"{k} = {l} \n")
+ except:
+ try:
+ json.loads(l)
+ file.write(f"{k} = .{l}. \n")
+ except:
+ if(bool(l)):
+ file.write(f"{k} = '{l}' \n")
+ file.write("/ \n")
+ except:
+ pass
+ writes.write_k_points_matdyn(parameters['file_path'], parameters['k_points_bands'])
+ return
+
+def plotband(parameters):
+ filedata = f"""
+{parameters['prefix']}.freq
+0 550
+{parameters['prefix']}.xmgr
+"""
+ with open(f"./dyn/{parameters['prefix']}/{parameters['prefix']}-plotband.in", 'w') as file:
+ file.write(filedata)
+ return
\ No newline at end of file
diff --git a/susyexists/src/seekpath/__init__.py b/susyexists/src/seekpath/__init__.py
new file mode 100644
index 00000000..318ea751
--- /dev/null
+++ b/susyexists/src/seekpath/__init__.py
@@ -0,0 +1,57 @@
+"""
+The seekpath module contains routines to get automatically the
+path in a 3D Brillouin zone to plot band structures.
+
+Author: Giovanni Pizzi, PSI (2016-2023)
+
+Licence: MIT License, see LICENSE.txt file
+"""
+
+__version__ = "2.1.0"
+__author__ = "Giovanni Pizzi, PSI"
+__copyright__ = (
+ "Copyright (c), 2016-2023, Giovanni Pizzi, PAUL SCHERRER INSTITUT "
+ "(Laboratory for Materials Simulations), EPFL "
+ "(Theory and Simulation of Materials (THEOS) and National Centre "
+ "for Computational Design and Discovery of Novel Materials "
+ "(NCCR MARVEL)), Switzerland."
+)
+__credits__ = ["Yoyo Hinuma", "Jae-Mo Lihm"]
+__license__ = "MIT license"
+__paper__ = (
+ "Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, "
+ "Band structure diagram paths based on crystallography, "
+ "Comp. Mat. Sci. 128, 140 (2017). DOI: 10.1016/j.commatsci.2016.10.015"
+)
+
+
+class SupercellWarning(UserWarning):
+ """
+ A warning issued when the cell is an undistorted supercell of a smaller
+ unit cell, and the kpoint path for a non-standardized cell (i.e., for the
+ original cell) is requested.
+ """
+
+ pass
+
+
+from .getpaths import (
+ get_path,
+ get_explicit_k_path,
+ get_path_orig_cell,
+ get_explicit_k_path_orig_cell,
+)
+
+from .hpkot import EdgeCaseWarning, SymmetryDetectionError
+from .brillouinzone import brillouinzone
+
+__all__ = (
+ "get_path",
+ "get_explicit_k_path",
+ "get_path_orig_cell",
+ "get_explicit_k_path_orig_cell",
+ "EdgeCaseWarning",
+ "SymmetryDetectionError",
+ "SupercellWarning",
+ "brillouinzone"
+)
diff --git a/susyexists/src/seekpath/__pycache__/__init__.cpython-310.pyc b/susyexists/src/seekpath/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 00000000..547382e4
Binary files /dev/null and b/susyexists/src/seekpath/__pycache__/__init__.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/__pycache__/getpaths.cpython-310.pyc b/susyexists/src/seekpath/__pycache__/getpaths.cpython-310.pyc
new file mode 100644
index 00000000..949e713a
Binary files /dev/null and b/susyexists/src/seekpath/__pycache__/getpaths.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/brillouinzone/__init__.py b/susyexists/src/seekpath/brillouinzone/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/brillouinzone/__pycache__/__init__.cpython-310.pyc b/susyexists/src/seekpath/brillouinzone/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 00000000..1cb966de
Binary files /dev/null and b/susyexists/src/seekpath/brillouinzone/__pycache__/__init__.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/brillouinzone/__pycache__/brillouinzone.cpython-310.pyc b/susyexists/src/seekpath/brillouinzone/__pycache__/brillouinzone.cpython-310.pyc
new file mode 100644
index 00000000..6a4a9368
Binary files /dev/null and b/susyexists/src/seekpath/brillouinzone/__pycache__/brillouinzone.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/brillouinzone/brillouinzone.py b/susyexists/src/seekpath/brillouinzone/brillouinzone.py
new file mode 100644
index 00000000..d0535985
--- /dev/null
+++ b/susyexists/src/seekpath/brillouinzone/brillouinzone.py
@@ -0,0 +1,343 @@
+"""Module to compute the Brillouin zone of a crystal."""
+from collections import defaultdict
+
+import numpy as np
+from scipy.spatial import Voronoi, ConvexHull, Delaunay
+
+
+def get_missing_point(tr, p1, p2):
+ """
+ tr is a list of 3 indices (the indices of the vertices of a given triangle).
+ p1 and p2 must be in the tr list, the third index is returned.
+
+ ValueError is raised if more than one entry is not among p1 and p2,
+ or if all points are among p1 and p2 (e.g. a point repeated twice)
+ """
+ missing = None
+ for vertex in tr:
+ if vertex not in (p1, p2):
+ if missing is not None:
+ raise ValueError("Two missing points found...")
+ missing = vertex
+
+ if missing is None:
+ raise ValueError("No missing points!")
+
+ return missing
+
+
+def are_coplanar(v1, v2, v3):
+ """
+ v1, v2, v3: 3D vectors.
+ Return True if they are coplanar, False otherwise
+ """
+ return float(abs(np.dot(np.cross(v1, v2), v3))) < 1.0e-6
+
+
+def get_BZ(b1, b2, b3):
+ """
+ Get the faces of the BZ given the three vectors b1,b2,b3.
+ Return both triangular faces (oriented) and flat faces (if your
+ plotting library prefers these - these are not oriented for the
+ time being)
+ """
+ ret_data = {}
+
+ supercell_size = 3 # Is this enough?
+
+ # G-vectors
+ points3d = []
+ central_idx = None
+ for i in range(-supercell_size, supercell_size + 1):
+ for j in range(-supercell_size, supercell_size + 1):
+ for k in range(-supercell_size, supercell_size + 1):
+ if i == 0 and j == 0 and k == 0:
+ central_idx = len(points3d)
+ points3d.append(i * np.array(b1) + j * np.array(b2) + k * np.array(b3))
+
+ # Get Voronois
+ vor3d = Voronoi(np.array(points3d))
+ # Get the vertices of the central" Voronoi( around the origin G=0)
+ central_voronoi_3d = np.array(
+ [vor3d.vertices[idx] for idx in vor3d.regions[vor3d.point_region[central_idx]]]
+ )
+
+ # Get the convex hull of these points (all triangular faces)
+ hull = ConvexHull(central_voronoi_3d)
+
+ ## REORIENT TRIANGLES
+ ## NOTE! TODO: I should do the same for faces
+ ret_data["triangles_vertices"] = hull.points.tolist()
+ ## Naive one
+ # ret_data['triangles'] = hull.simplices.tolist()
+ ## Instead, I orient them all
+ ret_data["triangles"] = []
+ for simplex in hull.simplices:
+ points = np.array([hull.points[i] for i in simplex])
+ center = points.sum(axis=0) / float(len(points))
+
+ # Get normal vector (with direction!)
+ normal = np.cross(center - points[1], center - points[0])
+ # Normalize, then rescale to a small value
+ normal = normal / np.linalg.norm(normal)
+ max_length = np.sqrt((points**2).sum(axis=1).max())
+ normal /= max_length
+ normal *= 1.0e-4
+ point_up = center + normal
+ point_down = center - normal
+ delaunay = Delaunay(hull.points)
+ is_up_inside = delaunay.find_simplex(point_up) >= 0
+ is_down_inside = delaunay.find_simplex(point_down) >= 0
+
+ if is_up_inside and not is_down_inside:
+ correct_orientation = True
+ elif not is_up_inside and is_down_inside:
+ correct_orientation = False
+ else:
+ inside_outside_string = "inside" if is_up_inside else "outside"
+ print(
+ "WARNING! Both vectors are {}..."
+ " not changing orientation".format(inside_outside_string)
+ )
+ correct_orientation = True
+
+ if correct_orientation:
+ ret_data["triangles"].append(simplex.tolist())
+ else:
+ ret_data["triangles"].append(simplex[::-1].tolist())
+
+ # print hull.area, hull.volume
+
+ # Get edge-sharing faces
+ # edges has as key a tuple (sorted) with the indices of the two vertices of
+ # the shared edge; the value are the indices of the triangles
+ edges = defaultdict(list)
+ for simplex_idx, simplex in enumerate(hull.simplices):
+ edges[tuple(sorted([simplex[0], simplex[1]]))].append(simplex_idx)
+ edges[tuple(sorted([simplex[1], simplex[2]]))].append(simplex_idx)
+ edges[tuple(sorted([simplex[2], simplex[0]]))].append(simplex_idx)
+ # convert to dictionary of lists (from defaultdict of sets)
+ edges = dict(edges)
+
+ ### Create now the list of faces, merging the triangles that share an
+ ### edge and are coplanar. Note: this works only if up to two triangles
+ ### must be merged; if three or more, this will not produce the expected
+ ### result
+ # print edges
+
+ # Store merge operations to perform
+ merge_with = defaultdict(set)
+
+ # List of found simplices that have been merged; will be used at the
+ # end to add the triangles that have not been merged, if any
+ merged_simplices = []
+ for (p1, p2), triangles in edges.items():
+ # I do it many times, but it's the easiest way (and anyway it's
+ # a set, so it should be fast: I add a point to be merged with
+ # itself
+ merge_with[triangles[0]].add(triangles[0])
+ merge_with[triangles[1]].add(triangles[1])
+
+ if len(triangles) != 2:
+ # An edge shared by less (or more) than 2 triangles?
+ print("Warning!", p1, p2, triangles)
+ continue
+ else:
+ # Check if two triangles are coplanar: get the other two
+ # vertices that are not on the shared edge
+ otherpoint0 = get_missing_point(hull.simplices[triangles[0]], p1, p2)
+ otherpoint1 = get_missing_point(hull.simplices[triangles[1]], p1, p2)
+ # The actual vector coordinates
+ otherpoint0_p = hull.points[otherpoint0]
+ otherpoint1_p = hull.points[otherpoint1]
+ p1_p = hull.points[p1]
+ p2_p = hull.points[p2]
+
+ # Check if they are coplanar
+ if are_coplanar(p2_p - p1_p, otherpoint0_p - p1_p, otherpoint1_p - p1_p):
+ merge_with[triangles[0]].add(triangles[1])
+ merge_with[triangles[1]].add(triangles[0])
+
+ # PROBLEM TO SOLVE: we have to put together all groups
+ ## E.g. we have now:
+ # 0: [0, 3]
+ # 1: [1, 2, 3]
+ # 2: [1, 2]
+ # 3: [0, 1, 3]
+ ## We should get instead for all [0,1,2,3]
+ # So we have to do a pass to merge them all
+ # The algorithm below is probably wrong (actually, it is only
+ # probably inefficient)
+
+ # for k, v in merge_with.items():
+ # print "{}: {}".format(k, list(v))
+
+ # Iterate untile convergence - not sure this is correct
+ has_changed = True
+ while has_changed:
+ has_changed = False
+ # Add the missing ones
+ for tr in range(len(hull.simplices)):
+ for other1 in merge_with[tr]:
+ for other2 in merge_with[tr]:
+ if other1 not in merge_with[other2]:
+ has_changed = True
+ merge_with[other2].add(other1)
+ if other2 not in merge_with[other1]:
+ has_changed = True
+ merge_with[other1].add(other2)
+
+ # convert to dict, and most importantly convert to list and sort
+ merge_with = {k: sorted(v) for k, v in merge_with.items()}
+
+ # Assign to the smallest integer idx
+ merge_group = {k: v[0] for k, v in merge_with.items()}
+
+ groups = defaultdict(list)
+ # I create a reverse index
+ for k, v in merge_group.items():
+ groups[v].append(k)
+
+ # List of faces (elements are lists of vertex ids)
+ faces = []
+
+ for group in groups.values():
+ if len(group) == 1:
+ faces.append(
+ [hull.points[point_idx] for point_idx in hull.simplices[group[0]]]
+ )
+ else:
+ # Get all points
+ all_points_idx = sorted(
+ set(np.concatenate([hull.simplices[g] for g in group]))
+ )
+
+ all_points_coords = [hull.points[point_idx] for point_idx in all_points_idx]
+ # Find projection in 2D: I first choose a first vector (between
+ # two points v1; I find the orthogonal vector to the plane b;
+ # I find a second vector v2 orthogonal to v1 and on the plane
+ # (<=> orthogonal to v1 and b); I normalize v1 and v2;
+ # I get the components of the vectors w.r.t. v1 and v2
+ # NOTE: there is at least 1 triangle => at least 3 points
+ v1 = all_points_coords[1] - all_points_coords[0]
+ temp_v2 = all_points_coords[2] - all_points_coords[0]
+ b = np.cross(v1, temp_v2)
+ v2 = np.cross(v1, b)
+ # Normalize
+ v1 = v1 / np.linalg.norm(v1)
+ v2 = v2 / np.linalg.norm(v2)
+ # get components
+ x = [np.dot(point, v1) for point in all_points_coords]
+ y = [np.dot(point, v2) for point in all_points_coords]
+ # 2. do convexhull in 2D
+ hull_face2d = ConvexHull(np.array([x, y]).T)
+ # 3. get point indices of convex hull, convert back to original
+ # 3D indices
+ # 2dhull.vertices contains the segments, but with ids in the
+ # smaller subset. We want the indices in the initial set:
+ actual_points_idx = [
+ all_points_idx[subset_idx] for subset_idx in hull_face2d.vertices
+ ]
+ # 4. add to faces list
+ faces.append(
+ [hull.points[point_idx].tolist() for point_idx in actual_points_idx]
+ )
+
+ ret_data["faces"] = faces
+ return ret_data
+
+
+if __name__ == "__main__":
+ from pylab import figure, show
+ from mpl_toolkits.mplot3d.art3d import Poly3DCollection
+
+ # draw a vector
+ from matplotlib.patches import FancyArrowPatch
+ from mpl_toolkits.mplot3d import proj3d
+
+ class Arrow3D(FancyArrowPatch):
+ def __init__(self, xs, ys, zs, *args, **kwargs):
+ FancyArrowPatch.__init__(self, (0, 0), (0, 0), *args, **kwargs)
+ self._verts3d = xs, ys, zs
+
+ def draw(self, renderer):
+ xs3d, ys3d, zs3d = self._verts3d
+ xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)
+ self.set_positions((xs[0], ys[0]), (xs[1], ys[1]))
+ FancyArrowPatch.draw(self, renderer)
+
+ ##SC
+ # faces_data = get_BZ(b1 = [1,0,0], b2 = [0,1,0], b3 = [0,0,1])
+ ##BCC
+ # faces_data = get_BZ(b1 = [1,1,0], b2 = [1,0,1], b3 = [0,1,1])
+ ##FCC
+ faces_data = get_BZ(b1=[1, 1, -1], b2=[1, -1, 1], b3=[-1, 1, 1])
+
+ import json
+
+ print(json.dumps(faces_data))
+
+ faces_coords = faces_data["faces"]
+
+ faces_count = defaultdict(int)
+ for face in faces_coords:
+ faces_count[len(face)] += 1
+
+ for num_sides in sorted(faces_count.keys()):
+ print("{} faces: {}".format(num_sides, faces_count[num_sides]))
+
+ fig = figure()
+ ax = fig.add_subplot(111, projection="3d")
+ ax.add_collection3d(
+ Poly3DCollection(
+ faces_coords, linewidth=1, alpha=0.9, edgecolor="k", facecolor="#ccccff"
+ )
+ )
+
+ # draw origin
+ ax.scatter([0], [0], [0], color="g", s=100)
+
+ axes_length = 2
+ # Add axes
+ ax.add_artist(
+ Arrow3D(
+ (0, axes_length),
+ (0, 0),
+ (0, 0),
+ mutation_scale=20,
+ lw=1,
+ arrowstyle="-|>",
+ color="k",
+ )
+ )
+ ax.add_artist(
+ Arrow3D(
+ (0, 0),
+ (0, axes_length),
+ (0, 0),
+ mutation_scale=20,
+ lw=1,
+ arrowstyle="-|>",
+ color="k",
+ )
+ )
+ ax.add_artist(
+ Arrow3D(
+ (0, 0),
+ (0, 0),
+ (0, axes_length),
+ mutation_scale=20,
+ lw=1,
+ arrowstyle="-|>",
+ color="k",
+ )
+ )
+
+ ## Reset limits
+ ax.set_xlim(-1, 1)
+ ax.set_ylim(-1, 1)
+ ax.set_zlim(-1, 1)
+ ax.axis("off")
+ ax.view_init(elev=0, azim=60)
+
+ show()
diff --git a/susyexists/src/seekpath/getpaths.py b/susyexists/src/seekpath/getpaths.py
new file mode 100644
index 00000000..bd3b21b8
--- /dev/null
+++ b/susyexists/src/seekpath/getpaths.py
@@ -0,0 +1,608 @@
+"""
+This module contains the main functions to get a path and an explicit path.
+"""
+import numpy as np
+import warnings
+from . import SupercellWarning
+
+
+def get_explicit_from_implicit( # pylint: disable=too-many-locals
+ seekpath_output, reference_distance
+):
+ """
+ Given the output of ``get_path`` by seekpath, compute an "explicit" path,
+ i.e. instead of just giving the endpoints and their coordinates, compute
+ a full list of kpoints
+
+ :param seekpath_output: a dictionary, the output of ``seekpath.get_path``
+
+ :param reference_distance: a reference target distance between neighboring
+ k-points in the path, in units of 1/ang. The actual value will be as
+ close as possible to this value, to have an integer number of points in
+ each path.
+ """
+ retdict = {}
+
+ kpoints_rel = []
+ kpoints_labels = []
+ kpoints_linearcoord = []
+ previous_linearcoord = 0.0
+ segments = []
+ for start_label, stop_label in seekpath_output["path"]:
+ start_coord = np.array(seekpath_output["point_coords"][start_label])
+ stop_coord = np.array(seekpath_output["point_coords"][stop_label])
+ start_coord_abs = np.dot(
+ start_coord, seekpath_output["reciprocal_primitive_lattice"]
+ )
+ stop_coord_abs = np.dot(
+ stop_coord, seekpath_output["reciprocal_primitive_lattice"]
+ )
+ segment_length = np.linalg.norm(stop_coord_abs - start_coord_abs)
+ num_points = max(2, int(segment_length / reference_distance))
+ segment_linearcoord = np.linspace(0.0, segment_length, num_points)
+ segment_start = len(kpoints_labels)
+ for i in range(num_points):
+ # Skip the first point if it's the same as the last one of
+ # the previous segment
+ if i == 0:
+ if kpoints_labels:
+ if kpoints_labels[-1] == start_label:
+ segment_start -= 1
+ continue
+
+ kpoints_rel.append(
+ start_coord
+ + (stop_coord - start_coord) * float(i) / float(num_points - 1)
+ )
+ if i == 0:
+ kpoints_labels.append(start_label)
+ elif i == num_points - 1:
+ kpoints_labels.append(stop_label)
+ else:
+ kpoints_labels.append("")
+ kpoints_linearcoord.append(previous_linearcoord + segment_linearcoord[i])
+ previous_linearcoord += segment_length
+ segment_end = len(kpoints_labels)
+ segments.append((segment_start, segment_end))
+
+ retdict["kpoints_rel"] = np.array(kpoints_rel)
+ retdict["kpoints_linearcoord"] = np.array(kpoints_linearcoord)
+ retdict["kpoints_labels"] = kpoints_labels
+ retdict["kpoints_abs"] = np.dot(
+ retdict["kpoints_rel"], seekpath_output["reciprocal_primitive_lattice"]
+ )
+ retdict["segments"] = segments
+
+ return retdict
+
+
+def get_path(
+ structure,
+ with_time_reversal=True,
+ recipe="hpkot",
+ threshold=1.0e-7,
+ symprec=1e-05,
+ angle_tolerance=-1.0,
+):
+ r"""
+ Return the kpoint path information for band structure given a
+ crystal structure, using the paths from the chosen recipe/reference.
+
+ If you use this module, please cite the paper of the corresponding
+ recipe (see parameter below).
+
+ :param structure: The crystal structure for which we want to obtain
+ the suggested path. It should be a tuple in the format
+ accepted by spglib: ``(cell, positions, numbers)``, where
+ (if N is the number of atoms):
+
+ - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice
+ vector, ...)
+ - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates
+ in scaled coordinates (i.e., w.r.t. the cell vectors)
+ - ``numbers`` is a length-:math:`N` list with integers identifying uniquely
+ the atoms in the cell (e.g., the Z number of the atom, but
+ any other positive non-zero integer will work - e.g. if you
+ want to distinguish two Carbon atoms, you can set one number
+ to 6 and the other to 1006)
+
+ :param with_time_reversal: if False, and the group has no inversion
+ symmetry, additional lines are returned as described in the HPKOT
+ paper.
+
+ :param recipe: choose the reference publication that defines the special
+ points and paths.
+ Currently, the following value is implemented:
+
+ - ``hpkot``: HPKOT paper:
+ Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure
+ diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017).
+ DOI: 10.1016/j.commatsci.2016.10.015
+
+ :param threshold: the threshold to use to verify if we are in
+ and edge case (e.g., a tetragonal cell, but ``a==c``). For instance,
+ in the tI lattice, if ``abs(a-c) < threshold``, a
+ :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued.
+ Note that depending on the bravais lattice, the meaning of the
+ threshold is different (angle, length, ...)
+
+ :param symprec: the symmetry precision used internally by SPGLIB
+
+ :param angle_tolerance: the angle_tolerance used internally by SPGLIB
+
+
+ :return: a dictionary with the following
+ keys:
+
+ - ``point_coords``: a dictionary with label -> float coordinates
+ - ``path``: a list of length-2 tuples, with the labels of the starting
+ and ending point of each label section
+ - ``has_inversion_symmetry``: True or False, depending on whether the
+ input crystal structure has inversion symmetry or not.
+ - ``augmented_path``: if True, it means that the path was
+ augmented with the :math:`-k` points (this happens if both
+ has_inversion_symmetry is False, and the user set
+ with_time_reversal=False in the input)
+ - ``bravais_lattice``: the Bravais lattice string (like ``cP``, ``tI``, ...)
+ - ``bravais_lattice_extended``: the specific case used to define labels and
+ coordinates (like ``cP1``, ``tI2``, ...)
+ - ``cont_lattice``: three real-space vectors for the crystallographic
+ conventional cell (``conv_lattice[0,:]`` is the first vector)
+ - ``conv_positions``: fractional coordinates of atoms in the
+ crystallographic conventional cell
+ - ``conv_types``: list of integer types of the atoms in the crystallographic
+ conventional cell (typically, the atomic numbers)
+ - ``primitive_lattice``: three real-space vectors for the crystallographic
+ primitive cell (``primitive_lattice[0,:]`` is the first vector)
+ - ``primitive_positions``: fractional coordinates of atoms in the
+ crystallographic primitive cell
+ - ``primitive_types``: list of integer types of the atoms in the
+ crystallographic primitive cell (typically, the atomic numbers)
+ - ``reciprocal_primitive_lattice``: reciprocal-cell vectors for the
+ primitive cell (vectors are rows: ``reciprocal_primitive_lattice[0,:]``
+ is the first vector)
+ - ``primitive_transformation_matrix``: the transformation matrix :math:`P` between
+ the conventional and the primitive cell
+ - ``inverse_primitive_transformation_matrix``: the inverse of the matrix :math:`P`
+ (the determinant is integer and gives the ratio in volume between
+ the conventional and primitive cells)
+ - ``volume_original_wrt_conv``: volume ratio of the user-provided cell
+ with respect to the the crystallographic conventional cell
+ - ``volume_original_wrt_prim``: volume ratio of the user-provided cell
+ with respect to the the crystalloraphic primitive cell
+
+ :note: An :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued for
+ edge cases (e.g. if ``a==b==c`` for
+ orthorhombic systems). In this case, still one of the valid cases
+ is picked.
+ """
+ if recipe == "hpkot":
+ from . import hpkot
+
+ res = hpkot.get_path(
+ structure=structure,
+ with_time_reversal=with_time_reversal,
+ threshold=threshold,
+ symprec=symprec,
+ angle_tolerance=angle_tolerance,
+ )
+
+ else:
+ raise ValueError(
+ "value for 'recipe' not recognized. The only value "
+ "currently accepted is 'hpkot'."
+ )
+ return res
+
+
+def get_explicit_k_path(
+ structure,
+ with_time_reversal=True,
+ reference_distance=0.025,
+ recipe="hpkot",
+ threshold=1.0e-7,
+ symprec=1e-05,
+ angle_tolerance=-1.0,
+):
+ r"""
+ Return the kpoint path for band structure (in scaled and absolute
+ coordinates), given a crystal structure,
+ using the paths proposed in the various publications (see description
+ of the 'recipe' input parameter).
+ Note that the k-path typically refers to a different unit cell
+ (e.g., the primitive one with some transformation matrix to comply with
+ the conventions in the case of the HPKOT paper). So, one should use the
+ crystal cell provided in output for all calculations, rather than the
+ input 'structure'.
+
+ If you use this module, please cite the paper of the corresponding
+ recipe (see parameter below).
+
+ :param structure: The crystal structure for which we want to obtain
+ the suggested path. It should be a tuple in the format
+ accepted by spglib: (cell, positions, numbers), where
+ (if N is the number of atoms):
+
+ - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice
+ vector, ...)
+ - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates
+ in scaled coordinates (i.e., w.r.t. the cell vectors)
+ - ``numbers`` is a length-:math:`N` list with integers identifying uniquely
+ the atoms in the cell (e.g., the Z number of the atom, but
+ any other positive non-zero integer will work - e.g. if you
+ want to distinguish two Carbon atoms, you can set one number
+ to 6 and the other to 1006)
+
+ :param with_time_reversal: if False, and the group has no inversion
+ symmetry, additional lines are returned.
+
+ :param reference_distance: a reference target distance between neighboring
+ k-points in the path, in units of 1/ang. The actual value will be as
+ close as possible to this value, to have an integer number of points in
+ each path.
+
+ :param recipe: choose the reference publication that defines the special
+ points and paths.
+ Currently, the following value is implemented:
+
+ - ``hpkot``: HPKOT paper:
+ Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure
+ diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017).
+ DOI: 10.1016/j.commatsci.2016.10.015
+
+ :param threshold: the threshold to use to verify if we are in
+ and edge case (e.g., a tetragonal cell, but ``a==c``). For instance,
+ in the tI lattice, if ``abs(a-c) < threshold``, a
+ :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued.
+ Note that depending on the bravais lattice, the meaning of the
+ threshold is different (angle, length, ...)
+
+ :param symprec: the symmetry precision used internally by SPGLIB
+
+ :param angle_tolerance: the angle_tolerance used internally by SPGLIB
+
+ .. versionchanged:: 1.8
+ The key ``segments`` has been renamed ``explicit_segments``
+ for consistency.
+
+ :return: a dictionary with a number of keys. They are the same as
+ ``get_path``, plus a few ones:
+
+ - ``explicit_kpoints_abs``: List of the kpoints along the specific path in
+ absolute (Cartesian) coordinates. The two endpoints are always
+ included, independently of the length.
+ - ``explicit_kpoints_rel``: List of the kpoints along the specific path in
+ relative (fractional) coordinates (same length as
+ explicit_kpoints_abs).
+ - ``explicit_kpoints_labels``: list of strings with kpoints labels. It has
+ the same length as explicit_kpoints_abs and explicit_kpoints_rel.
+ Empty if the point is not a special point.
+ - ``explicit_kpoints_linearcoord``: array of floats, giving the coordinate
+ at which to plot the corresponding point.
+ - ``explicit_segments``: a list of length-2 tuples, with the start and end
+ index of each segment. **Note**! The indices are supposed to be
+ used as follows: the labels for the i-th segment are given by::
+
+ segment_indices = explicit_segments[i]
+ segment_labels = explicit_kpoints_labels[slice(*segment_indices)]
+
+ This means, in particular, that if you want the label of the start
+ and end points, you should do::
+
+ start_label = explicit_kpoints_labels[segment_indices[0]]
+ stop_label = explicit_kpoints_labels[segment_indices[1]-1]
+
+ (note the minus one!)
+
+ Also, note that if
+ ``explicit_segments[i-1][1] == explicit_segments[i][0] + 1`` it means
+ that the point was calculated only once, and it belongs to both
+ paths. Instead, if
+ ``explicit_segments[i-1][1] == explicit_segments[i][0]``, then
+ this is a 'break' point in the path (e.g., ``explicit_segments[i-1][1]``
+ is the X point, and ``explicit_segments[i][0]`` is the R point,
+ and typically in a graphical representation they are shown at the
+ same coordinate, with a label ``R|X``).
+ """
+ if recipe == "hpkot":
+ from . import hpkot
+
+ res = hpkot.get_path(
+ structure=structure,
+ with_time_reversal=with_time_reversal,
+ threshold=threshold,
+ symprec=symprec,
+ angle_tolerance=angle_tolerance,
+ )
+
+ else:
+ raise ValueError(
+ "value for 'recipe' not recognized. The only value "
+ "currently accepted is 'hpkot'."
+ )
+
+ explicit_res = get_explicit_from_implicit(
+ res, reference_distance=reference_distance
+ )
+ for k, v in explicit_res.items():
+ res["explicit_{}".format(k)] = v
+ return res
+
+
+def get_path_orig_cell(
+ structure,
+ with_time_reversal=True,
+ recipe="hpkot",
+ threshold=1.0e-7,
+ symprec=1e-05,
+ angle_tolerance=-1.0,
+):
+ r"""
+ Return the kpoint path information for band structure given a
+ crystal structure, using the paths from the chosen recipe/reference.
+ The original unit cell (i.e., the one provided in input by the user) is used.
+ Standardization or symmetrization of the input unit cell is not performed.
+
+ If the provided unit cell is a supercell of a smaller primitive cell,
+ return the standard k path of the smaller primitive cell in the basis
+ of the supercell reciprocal lattice vectors. In this case, the k-point
+ labels lose their meaning as the corresponding k-points are not at the
+ high-symmetry points of the first BZ of the given supercell. A
+ :py:exc:`~seekpath.SupercellWarning` is issued.
+
+ If you use this module, please cite the paper of the corresponding
+ recipe (see parameter below).
+
+ :param structure: The crystal structure for which we want to obtain
+ the suggested path. It should be a tuple in the format
+ accepted by spglib: ``(cell, positions, numbers)``, where
+ (if N is the number of atoms):
+
+ - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice
+ vector, ...)
+ - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates
+ in scaled coordinates (i.e., w.r.t. the cell vectors)
+ - ``numbers`` is a length-:math:`N` list with integers identifying uniquely
+ the atoms in the cell (e.g., the Z number of the atom, but
+ any other positive non-zero integer will work - e.g. if you
+ want to distinguish two Carbon atoms, you can set one number
+ to 6 and the other to 1006)
+
+ :param with_time_reversal: if False, and the group has no inversion
+ symmetry, additional lines are returned as described in the HPKOT
+ paper.
+
+ :param recipe: choose the reference publication that defines the special
+ points and paths.
+ Currently, the following value is implemented:
+
+ - ``hpkot``: HPKOT paper:
+ Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure
+ diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017).
+ DOI: 10.1016/j.commatsci.2016.10.015
+
+ :param threshold: the threshold to use to verify if we are in
+ and edge case (e.g., a tetragonal cell, but ``a==c``). For instance,
+ in the tI lattice, if ``abs(a-c) < threshold``, a
+ :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued.
+ Note that depending on the bravais lattice, the meaning of the
+ threshold is different (angle, length, ...)
+
+ :param symprec: the symmetry precision used internally by SPGLIB
+
+ :param angle_tolerance: the angle_tolerance used internally by SPGLIB
+
+
+ :return: a dictionary with the following
+ keys:
+
+ - ``point_coords``: a dictionary with label -> float coordinates
+ - ``path``: a list of length-2 tuples, with the labels of the starting
+ and ending point of each label section
+ input crystal structure has inversion symmetry or not.
+ - ``augmented_path``: if True, it means that the path was
+ augmented with the :math:`-k` points (this happens if both
+ has_inversion_symmetry is False, and the user set
+ with_time_reversal=False in the input)
+ - ``is_supercell``: True if the input unit cell is a supercell of
+ a smaller primitive cell.
+
+ :note: An :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued for
+ edge cases (e.g. if ``a==b==c`` for
+ orthorhombic systems). In this case, still one of the valid cases
+ is picked.
+ """
+
+ res = get_path(
+ structure=structure,
+ with_time_reversal=with_time_reversal,
+ threshold=threshold,
+ symprec=symprec,
+ angle_tolerance=angle_tolerance,
+ recipe=recipe,
+ )
+
+ is_supercell = abs(res["volume_original_wrt_prim"] - 1) > 0.1
+
+ if is_supercell:
+ warnings.warn(
+ "The provided cell is a supercell: the returned k-path is the "
+ "standard k-path of the associated primitive cell in the basis of "
+ "the supercell reciprocal lattice.",
+ SupercellWarning,
+ )
+
+ # points in the output of get_path are in scaled coordinates of the
+ # standardized primitive lattice
+ points_scaled_standard = res["point_coords"]
+
+ # Convert points from scaled coordinates of the standardiced primitive
+ # lattice to Cartesian coordinates
+ points_cartesian = {}
+ for pointname, coords in points_scaled_standard.items():
+ points_cartesian[pointname] = coords @ np.array(
+ res["reciprocal_primitive_lattice"]
+ )
+
+ # Rotate points in Cartesian space
+ for pointname, coords in points_cartesian.items():
+ points_cartesian[pointname] = coords @ res["rotation_matrix"]
+
+ # Convert points from Cartesian coordinates to the scaled coordinates
+ # of the original lattice
+ points_scaled_original = {}
+ cell_orig = np.array(structure[0])
+ for pointname, coords in points_cartesian.items():
+ points_scaled_original[pointname] = list(coords @ cell_orig.T / np.pi / 2)
+
+ res_orig = {
+ "point_coords": points_scaled_original,
+ "path": res["path"],
+ "augmented_path": res["augmented_path"],
+ "is_supercell": is_supercell,
+ "has_inversion_symmetry": res["has_inversion_symmetry"],
+ "bravais_lattice": res["bravais_lattice"],
+ "bravais_lattice_extended": res["bravais_lattice_extended"],
+ "spacegroup_number": res["spacegroup_number"],
+ "spacegroup_international": res["spacegroup_international"],
+ }
+
+ return res_orig
+
+
+def get_explicit_k_path_orig_cell(
+ structure,
+ with_time_reversal=True,
+ reference_distance=0.025,
+ recipe="hpkot",
+ threshold=1.0e-7,
+ symprec=1e-05,
+ angle_tolerance=-1.0,
+):
+ r"""
+ Return the kpoint path for band structure (in scaled and absolute
+ coordinates), given a crystal structure,
+ using the paths proposed in the various publications (see description
+ of the 'recipe' input parameter) for the given unit cell.
+ Standardization or symmetrization of the input unit cell is not performed.
+
+ If the provided unit cell is a supercell of a smaller primitive cell,
+ return the standard k path of the smaller primitive cell in the basis
+ of the supercell reciprocal lattice vectors. In this case, the k-point
+ labels lose their meaning as the corresponding k-points are not at the
+ high-symmetry points of the first BZ of the given supercell. A
+ :py:exc:`~seekpath.SupercellWarning` is issued.
+
+ If you use this module, please cite the paper of the corresponding
+ recipe (see parameter below).
+
+ :param structure: The crystal structure for which we want to obtain
+ the suggested path. It should be a tuple in the format
+ accepted by spglib: (cell, positions, numbers), where
+ (if N is the number of atoms):
+
+ - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice
+ vector, ...)
+ - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates
+ in scaled coordinates (i.e., w.r.t. the cell vectors)
+ - ``numbers`` is a length-:math:`N` list with integers identifying uniquely
+ the atoms in the cell (e.g., the Z number of the atom, but
+ any other positive non-zero integer will work - e.g. if you
+ want to distinguish two Carbon atoms, you can set one number
+ to 6 and the other to 1006)
+
+ :param with_time_reversal: if False, and the group has no inversion
+ symmetry, additional lines are returned.
+
+ :param reference_distance: a reference target distance between neighboring
+ k-points in the path, in units of 1/ang. The actual value will be as
+ close as possible to this value, to have an integer number of points in
+ each path.
+
+ :param recipe: choose the reference publication that defines the special
+ points and paths.
+ Currently, the following value is implemented:
+
+ - ``hpkot``: HPKOT paper:
+ Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure
+ diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017).
+ DOI: 10.1016/j.commatsci.2016.10.015
+
+ :param threshold: the threshold to use to verify if we are in
+ and edge case (e.g., a tetragonal cell, but ``a==c``). For instance,
+ in the tI lattice, if ``abs(a-c) < threshold``, a
+ :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued.
+ Note that depending on the bravais lattice, the meaning of the
+ threshold is different (angle, length, ...)
+
+ :param symprec: the symmetry precision used internally by SPGLIB
+
+ :param angle_tolerance: the angle_tolerance used internally by SPGLIB
+
+ .. versionchanged:: 1.8
+ The key ``segments`` has been renamed ``explicit_segments``
+ for consistency.
+
+ :return: a dictionary with a number of keys. They are the same as
+ ``get_path_orig_cell``, plus a few ones:
+
+ - ``explicit_kpoints_abs``: List of the kpoints along the specific path in
+ absolute (Cartesian) coordinates. The two endpoints are always
+ included, independently of the length.
+ - ``explicit_kpoints_rel``: List of the kpoints along the specific path in
+ relative (fractional) coordinates (same length as
+ explicit_kpoints_abs).
+ - ``explicit_kpoints_labels``: list of strings with kpoints labels. It has
+ the same length as explicit_kpoints_abs and explicit_kpoints_rel.
+ Empty if the point is not a special point.
+ - ``explicit_kpoints_linearcoord``: array of floats, giving the coordinate
+ at which to plot the corresponding point.
+ - ``explicit_segments``: a list of length-2 tuples, with the start and end
+ index of each segment. **Note**! The indices are supposed to be
+ used as follows: the labels for the i-th segment are given by::
+
+ segment_indices = explicit_segments[i]
+ segment_labels = explicit_kpoints_labels[slice(*segment_indices)]
+
+ This means, in particular, that if you want the label of the start
+ and end points, you should do::
+
+ start_label = explicit_kpoints_labels[segment_indices[0]]
+ stop_label = explicit_kpoints_labels[segment_indices[1]-1]
+
+ (note the minus one!)
+
+ Also, note that if
+ ``explicit_segments[i-1][1] == explicit_segments[i][0] + 1`` it means
+ that the point was calculated only once, and it belongs to both
+ paths. Instead, if
+ ``explicit_segments[i-1][1] == explicit_segments[i][0]``, then
+ this is a 'break' point in the path (e.g., ``explicit_segments[i-1][1]``
+ is the X point, and ``explicit_segments[i][0]`` is the R point,
+ and typically in a graphical representation they are shown at the
+ same coordinate, with a label ``R|X``).
+ """
+ from .hpkot.tools import get_reciprocal_cell_rows
+
+ res = get_path_orig_cell(
+ structure=structure,
+ with_time_reversal=with_time_reversal,
+ threshold=threshold,
+ symprec=symprec,
+ angle_tolerance=angle_tolerance,
+ recipe=recipe,
+ )
+
+ # Set reciprocal_primitive_lattice as the reciprocal lattice of the original
+ # cell. To be used only in the get_explicit_from_implicit function.
+ res["reciprocal_primitive_lattice"] = get_reciprocal_cell_rows(structure[0])
+
+ explicit_res = get_explicit_from_implicit(
+ res, reference_distance=reference_distance
+ )
+
+ res.pop("reciprocal_primitive_lattice")
+
+ for k, v in explicit_res.items():
+ res["explicit_{}".format(k)] = v
+ return res
diff --git a/susyexists/src/seekpath/hpkot/__init__.py b/susyexists/src/seekpath/hpkot/__init__.py
new file mode 100644
index 00000000..5ac1f765
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/__init__.py
@@ -0,0 +1,521 @@
+"""
+The seekpath.hpkot module contains routines to get automatically the
+path in a 3D Brillouin zone to plot band structures according to the
+HPKOT paper (see references below).
+
+Author: Giovanni Pizzi, PSI
+
+Licence: MIT License, see LICENSE.txt
+
+.. note:: the list of point coordinates and example POSCAR files in
+ the band_path_data subfolder have been provided by Yoyo Hinuma,
+ Kyoto University, Japan. The POSCARs have been retrieved from
+ the Materials Project (http://materialsproject.org).
+"""
+
+
+class EdgeCaseWarning(RuntimeWarning):
+ """
+ A warning issued when the cell is an edge case (e.g. orthorhombic
+ symmetry, but ``a==b==c``.
+ """
+
+ pass
+
+
+class SymmetryDetectionError(Exception):
+ """
+ Error raised if spglib could not detect the symmetry.
+ """
+
+ pass
+
+
+def get_path(
+ structure,
+ with_time_reversal=True,
+ threshold=1.0e-7,
+ symprec=1e-05,
+ angle_tolerance=-1.0,
+):
+ r"""
+ Return the kpoint path information for band structure given a
+ crystal structure, using the paths from the chosen recipe/reference.
+
+ If you use this module, please cite the paper of the corresponding
+ recipe (see parameter below).
+
+ :param structure: The crystal structure for which we want to obtain
+ the suggested path. It should be a tuple in the format
+ accepted by spglib: ``(cell, positions, numbers)``, where
+ (if N is the number of atoms):
+
+ - ``cell`` is a :math:`3 \times 3` list of floats (``cell[0]`` is the first lattice
+ vector, ...)
+ - ``positions`` is a :math:`N \times 3` list of floats with the atomic coordinates
+ in scaled coordinates (i.e., w.r.t. the cell vectors)
+ - ``numbers`` is a length-:math:`N` list with integers identifying uniquely
+ the atoms in the cell (e.g., the Z number of the atom, but
+ any other positive non-zero integer will work - e.g. if you
+ want to distinguish two Carbon atoms, you can set one number
+ to 6 and the other to 1006)
+
+ :param with_time_reversal: if False, and the group has no inversion
+ symmetry, additional lines are returned as described in the HPKOT
+ paper.
+
+ :param recipe: choose the reference publication that defines the special
+ points and paths.
+ Currently, the following value is implemented:
+
+ - ``hpkot``: HPKOT paper:
+ Y. Hinuma, G. Pizzi, Y. Kumagai, F. Oba, I. Tanaka, Band structure
+ diagram paths based on crystallography, Comp. Mat. Sci. 128, 140 (2017).
+ DOI: 10.1016/j.commatsci.2016.10.015
+
+ :param threshold: the threshold to use to verify if we are in
+ and edge case (e.g., a tetragonal cell, but ``a==c``). For instance,
+ in the tI lattice, if ``abs(a-c) < threshold``, a
+ :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued.
+ Note that depending on the bravais lattice, the meaning of the
+ threshold is different (angle, length, ...)
+
+ :param symprec: the symmetry precision used internally by SPGLIB
+
+ :param angle_tolerance: the angle_tolerance used internally by SPGLIB
+
+
+ :return: a dictionary with the following
+ keys:
+
+ - ``point_coords``: a dictionary with label -> float coordinates
+ - ``path``: a list of length-2 tuples, with the labels of the starting
+ and ending point of each label section
+ - ``has_inversion_symmetry``: True or False, depending on whether the
+ input crystal structure has inversion symmetry or not.
+ - ``augmented_path``: if True, it means that the path was
+ augmented with the :math:`-k` points (this happens if both
+ has_inversion_symmetry is False, and the user set
+ with_time_reversal=False in the input)
+ - ``bravais_lattice``: the Bravais lattice string (like ``cP``, ``tI``, ...)
+ - ``bravais_lattice_extended``: the specific case used to define labels and
+ coordinates (like ``cP1``, ``tI2``, ...)
+ - ``cont_lattice``: three real-space vectors for the crystallographic
+ conventional cell (``conv_lattice[0,:]`` is the first vector)
+ - ``conv_positions``: fractional coordinates of atoms in the
+ crystallographic conventional cell
+ - ``conv_types``: list of integer types of the atoms in the crystallographic
+ conventional cell (typically, the atomic numbers)
+ - ``primitive_lattice``: three real-space vectors for the crystallographic
+ primitive cell (``primitive_lattice[0,:]`` is the first vector)
+ - ``primitive_positions``: fractional coordinates of atoms in the
+ crystallographic primitive cell
+ - ``primitive_types``: list of integer types of the atoms in the
+ crystallographic primitive cell (typically, the atomic numbers)
+ - ``reciprocal_primitive_lattice``: reciprocal-cell vectors for the
+ primitive cell (vectors are rows: ``reciprocal_primitive_lattice[0,:]``
+ is the first vector)
+ - ``primitive_transformation_matrix``: the transformation matrix :math:`P` between
+ the conventional and the primitive cell
+ - ``inverse_primitive_transformation_matrix``: the inverse of the matrix :math:`P`
+ (the determinant is integer and gives the ratio in volume between
+ the conventional and primitive cells)
+ - ``rotation_matrix``: rotation matrix in Cartesian space from the input
+ cell to the standardized cell
+ - ``volume_original_wrt_conv``: volume ratio of the user-provided cell
+ with respect to the the crystallographic conventional cell
+ - ``volume_original_wrt_prim``: volume ratio of the user-provided cell
+ with respect to the the crystallographic primitive cell
+
+ :note: An :py:exc:`~seekpath.hpkot.EdgeCaseWarning` is issued for
+ edge cases (e.g. if ``a==b==c`` for
+ orthorhombic systems). In this case, still one of the valid cases
+ is picked.
+ """
+ import copy
+ from math import sqrt
+ import warnings
+
+ import numpy as np
+
+ from .tools import (
+ check_spglib_version,
+ extend_kparam,
+ eval_expr,
+ eval_expr_simple,
+ get_cell_params,
+ get_path_data,
+ get_reciprocal_cell_rows,
+ get_real_cell_from_reciprocal_rows,
+ )
+ from .spg_mapping import get_spgroup_data, get_primitive
+
+ # I check if the SPGlib version is recent enough (raises ValueError)
+ # otherwise
+ spglib = check_spglib_version()
+
+ structure_internal = (
+ np.array(structure[0]),
+ np.array(structure[1]),
+ np.array(structure[2]),
+ )
+
+ # Symmetry analysis by SPGlib, get crystallographic lattice,
+ # and cell parameters for this lattice
+ dataset = spglib.get_symmetry_dataset(
+ structure_internal, symprec=symprec, angle_tolerance=angle_tolerance
+ )
+ if dataset is None:
+ raise SymmetryDetectionError(
+ "Spglib could not detect the symmetry of the system"
+ )
+ conv_lattice = dataset["std_lattice"]
+ conv_positions = dataset["std_positions"]
+ conv_types = dataset["std_types"]
+ a, b, c, cosalpha, cosbeta, cosgamma = get_cell_params(conv_lattice)
+ spgrp_num = dataset["number"]
+ # This is the transformation from the original to the crystallographic
+ # conventional (called std in spglib)
+ # Lattice^{crystallographic_bravais} = L^{original} * transf_matrix
+ transf_matrix = dataset["transformation_matrix"]
+ volume_conv_wrt_original = np.linalg.det(transf_matrix)
+
+ # Get the properties of the spacegroup, needed to get the bravais_lattice
+ properties = get_spgroup_data()[spgrp_num]
+ bravais_lattice = "{}{}".format(properties[0], properties[1])
+ has_inv = properties[2]
+
+ # Implement all different extended Bravais lattices
+ if bravais_lattice == "cP":
+ if spgrp_num >= 195 and spgrp_num <= 206:
+ ext_bravais = "cP1"
+ elif spgrp_num >= 207 and spgrp_num <= 230:
+ ext_bravais = "cP2"
+ else:
+ raise ValueError(
+ "Internal error! should be cP, but the "
+ "spacegroup number is not in the correct range"
+ )
+ elif bravais_lattice == "cF":
+ if spgrp_num >= 195 and spgrp_num <= 206:
+ ext_bravais = "cF1"
+ elif spgrp_num >= 207 and spgrp_num <= 230:
+ ext_bravais = "cF2"
+ else:
+ raise ValueError(
+ "Internal error! should be cF, but the "
+ "spacegroup number is not in the correct range"
+ )
+ elif bravais_lattice == "cI":
+ ext_bravais = "cI1"
+ elif bravais_lattice == "tP":
+ ext_bravais = "tP1"
+ elif bravais_lattice == "tI":
+ if abs(c - a) < threshold:
+ warnings.warn("tI lattice, but a almost equal to c", EdgeCaseWarning)
+ if c <= a:
+ ext_bravais = "tI1"
+ else:
+ ext_bravais = "tI2"
+ elif bravais_lattice == "oP":
+ ext_bravais = "oP1"
+ elif bravais_lattice == "oF":
+ if abs(1.0 / (a**2) - (1.0 / (b**2) + 1.0 / (c**2))) < threshold:
+ warnings.warn(
+ "oF lattice, but 1/a^2 almost equal to 1/b^2 + 1/c^2", EdgeCaseWarning
+ )
+ if abs(1.0 / (c**2) - (1.0 / (a**2) + 1.0 / (b**2))) < threshold:
+ warnings.warn(
+ "oF lattice, but 1/c^2 almost equal to 1/a^2 + 1/b^2", EdgeCaseWarning
+ )
+ if 1.0 / (a**2) > 1.0 / (b**2) + 1.0 / (c**2):
+ ext_bravais = "oF1"
+ elif 1.0 / (c**2) > 1.0 / (a**2) + 1.0 / (b**2):
+ ext_bravais = "oF2"
+ else: # 1/a^2, 1/b^2, 1/c^2 edges of a triangle
+ ext_bravais = "oF3"
+ elif bravais_lattice == "oI":
+ # Sort a,b,c, first is the largest
+ sorted_vectors = sorted([(c, 1, "c"), (b, 3, "b"), (a, 2, "a")])[::-1]
+ if abs(sorted_vectors[0][0] - sorted_vectors[1][0]) < threshold:
+ warnings.warn(
+ "oI lattice, but the two longest vectors {} and {} "
+ "have almost the same length".format(
+ sorted_vectors[0][2], sorted_vectors[1][2]
+ ),
+ EdgeCaseWarning,
+ )
+ ext_bravais = "{}{}".format(bravais_lattice, sorted_vectors[0][1])
+ elif bravais_lattice == "oC":
+ if abs(b - a) < threshold:
+ warnings.warn("oC lattice, but a almost equal to b", EdgeCaseWarning)
+ if a <= b:
+ ext_bravais = "oC1"
+ else:
+ ext_bravais = "oC2"
+ elif bravais_lattice == "oA":
+ if abs(b - c) < threshold:
+ warnings.warn("oA lattice, but b almost equal to c", EdgeCaseWarning)
+ if b <= c:
+ ext_bravais = "oA1"
+ else:
+ ext_bravais = "oA2"
+ elif bravais_lattice == "hP":
+ if spgrp_num in [
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 151,
+ 153,
+ 157,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ ]:
+ ext_bravais = "hP1"
+ else:
+ ext_bravais = "hP2"
+ elif bravais_lattice == "hR":
+ if abs(sqrt(3.0) * a - sqrt(2.0) * c) < threshold:
+ warnings.warn(
+ "hR lattice, but sqrt(3)a almost equal to sqrt(2)c", EdgeCaseWarning
+ )
+ if sqrt(3.0) * a <= sqrt(2.0) * c:
+ ext_bravais = "hR1"
+ else:
+ ext_bravais = "hR2"
+ elif bravais_lattice == "mP":
+ ext_bravais = "mP1"
+ elif bravais_lattice == "mC":
+ if abs(b - a * sqrt(1.0 - cosbeta**2)) < threshold:
+ warnings.warn(
+ "mC lattice, but b almost equal to a*sin(beta)", EdgeCaseWarning
+ )
+ if b < a * sqrt(1.0 - cosbeta**2):
+ ext_bravais = "mC1"
+ else:
+ if (
+ abs(-a * cosbeta / c + a**2 * (1.0 - cosbeta**2) / b**2 - 1.0)
+ < threshold
+ ):
+ warnings.warn(
+ "mC lattice, but -a*cos(beta)/c + "
+ "a^2*sin(beta)^2/b^2 almost equal to 1",
+ EdgeCaseWarning,
+ )
+ if -a * cosbeta / c + a**2 * (1.0 - cosbeta**2) / b**2 <= 1.0:
+ # 12-face
+ ext_bravais = "mC2"
+ else:
+ ext_bravais = "mC3"
+ elif bravais_lattice == "aP":
+ # First step: cell that is Niggli reduced in reciprocal space
+ # I use the default eps here, this could be changed
+ reciprocal_cell_orig = get_reciprocal_cell_rows(conv_lattice)
+ ## This is Niggli-reduced
+ reciprocal_cell2 = spglib.niggli_reduce(reciprocal_cell_orig)
+ real_cell2 = get_real_cell_from_reciprocal_rows(reciprocal_cell2)
+ # TODO: get transformation matrix?
+
+ ka2, kb2, kc2, coskalpha2, coskbeta2, coskgamma2 = get_cell_params(
+ reciprocal_cell2
+ )
+
+ conditions = np.array(
+ [
+ abs(kb2 * kc2 * coskalpha2),
+ abs(kc2 * ka2 * coskbeta2),
+ abs(ka2 * kb2 * coskgamma2),
+ ]
+ )
+ M2_matrices = [
+ np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0]]),
+ np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]),
+ np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
+ ]
+ # TODO: manage edge cases
+ smallest_condition = np.argsort(conditions)[0]
+ M2 = M2_matrices[smallest_condition]
+ # First change of vectors to have |ka3 kb3 cosgamma3| smallest
+ real_cell3 = np.dot(np.array(real_cell2).T, M2).T
+ reciprocal_cell3 = get_reciprocal_cell_rows(real_cell3)
+ ka3, kb3, kc3, coskalpha3, coskbeta3, coskgamma3 = get_cell_params(
+ reciprocal_cell3
+ )
+ if abs(coskalpha3) < threshold:
+ warnings.warn(
+ "aP lattice, but the k_alpha3 angle is almost equal " "to 90 degrees",
+ EdgeCaseWarning,
+ )
+ if abs(coskbeta3) < threshold:
+ warnings.warn(
+ "aP lattice, but the k_beta3 angle is almost equal " "to 90 degrees",
+ EdgeCaseWarning,
+ )
+ if abs(coskgamma3) < threshold:
+ warnings.warn(
+ "aP lattice, but the k_gamma3 angle is almost equal " "to 90 degrees",
+ EdgeCaseWarning,
+ )
+ # Make them all-acute or all-obtuse with the additional conditions
+ # explained in HPKOT
+ # Note: cos > 0 => angle < 90deg
+ if coskalpha3 > 0.0 and coskbeta3 > 0.0 and coskgamma3 > 0.0: # 1a
+ M3 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ elif coskalpha3 <= 0.0 and coskbeta3 <= 0.0 and coskgamma3 <= 0.0: # 1b
+ M3 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ elif coskalpha3 > 0.0 and coskbeta3 <= 0.0 and coskgamma3 <= 0.0: # 2a
+ M3 = np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]])
+ elif coskalpha3 <= 0.0 and coskbeta3 > 0.0 and coskgamma3 > 0.0: # 2b
+ M3 = np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]])
+ elif coskalpha3 <= 0.0 and coskbeta3 > 0.0 and coskgamma3 <= 0.0: # 3a
+ M3 = np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]])
+ elif coskalpha3 > 0.0 and coskbeta3 <= 0.0 and coskgamma3 > 0.0: # 3b
+ M3 = np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]])
+ elif coskalpha3 <= 0.0 and coskbeta3 <= 0.0 and coskgamma3 > 0.0: # 4a
+ M3 = np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]])
+ elif coskalpha3 > 0.0 and coskbeta3 > 0.0 and coskgamma3 <= 0.0: # 4b
+ M3 = np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]])
+ else:
+ raise ValueError(
+ "Problem identifying M3 matrix in aP lattice!"
+ "Sign of cosines: cos(kalpha3){}0, "
+ "cos(kbeta3){}0, cos(kgamma3){}0".format(
+ ">=" if coskalpha3 >= 0 else "<",
+ ">=" if coskbeta3 >= 0 else "<",
+ ">=" if coskgamma3 >= 0 else "<",
+ )
+ )
+
+ real_cell_final = np.dot(real_cell3.T, M3).T
+ reciprocal_cell_final = get_reciprocal_cell_rows(real_cell_final)
+ ka, kb, kc, coskalpha, coskbeta, coskgamma = get_cell_params(
+ reciprocal_cell_final
+ )
+
+ if coskalpha <= 0.0 and coskbeta <= 0.0 and coskgamma <= 0.0:
+ # all-obtuse
+ ext_bravais = "aP2"
+ elif coskalpha >= 0.0 and coskbeta >= 0.0 and coskgamma >= 0.0:
+ # all-acute
+ ext_bravais = "aP3"
+ else:
+ raise ValueError(
+ "Unexpected aP triclinic lattice, it neither "
+ "all-obtuse nor all-acute! Sign of cosines: cos(kalpha){}0, "
+ "cos(kbeta){}0, cos(kgamma){}0".format(
+ ">=" if coskalpha >= 0 else "<",
+ ">=" if coskbeta >= 0 else "<",
+ ">=" if coskgamma >= 0 else "<",
+ )
+ )
+
+ # Get absolute positions
+ conv_pos_abs = np.dot(conv_positions, conv_lattice)
+ # Replace conv_lattice with the new conv_lattice
+ conv_lattice = np.array(real_cell_final)
+ # Store the relative coords with respect to the new vectors
+ # TODO: decide if we want to do %1. for the fractional coordinates
+ conv_positions = np.dot(conv_pos_abs, np.linalg.inv(conv_lattice))
+ # TODO: implement the correct one (probably we need the matrix
+ # out from niggli, and then we can combine it with M2 and M3??)
+ # We set it to None for the time being to avoid confusion
+ transformation_matrix = None
+
+ else:
+ raise ValueError(
+ "Unknown type '{}' for spacegroup {}".format(
+ bravais_lattice, dataset["number"]
+ )
+ )
+
+ # NOTE: we simply use spglib.find_primitive, because the
+ # find_primitive of spglib follows a different convention for mC
+ # and oA as explained in the HPKOT paper
+ (prim_lattice, prim_pos, prim_types), (P, invP), conv_prim_mapping = get_primitive(
+ structure=(conv_lattice, conv_positions, conv_types),
+ bravais_lattice=bravais_lattice,
+ )
+
+ # Get the path data (k-parameters definitions, defition of the points,
+ # suggested path)
+ kparam_def, points_def, path = get_path_data(ext_bravais)
+
+ # Get the actual numerical values of the k-parameters
+ # Note: at each step, I pass kparam and store the new
+ # parameter in the same dictionary. This allows to have
+ # some parameters defined implicitly in terms of previous
+ # parameters, as far as they are returned in the
+ kparam = {}
+ for kparam_name, kparam_expr in kparam_def:
+ kparam[kparam_name] = eval_expr(
+ kparam_expr, a, b, c, cosalpha, cosbeta, cosgamma, kparam
+ )
+
+ # Extend kparam with additional simple expressions (like 1-a, ...)
+ kparam_extended = extend_kparam(kparam)
+
+ # Now I have evaluated all needed kparams; I can compute the actual
+ # coordinates of the relevant kpoints, using eval_expr_simple
+ points = {}
+ for pointname, coords_def in points_def.items():
+ coords = [eval_expr_simple(_, kparam_extended) for _ in coords_def]
+ points[pointname] = coords
+
+ # If there is no inversion symmetry nor time-reversal symmetry, add
+ # additional path
+ if not has_inv and not with_time_reversal:
+ augmented_path = True
+ else:
+ augmented_path = False
+
+ if augmented_path:
+ for pointname, coords in list(points.items()):
+ if pointname == "GAMMA":
+ continue
+ points["{}'".format(pointname)] = [-coords[0], -coords[1], -coords[2]]
+ old_path = copy.deepcopy(path)
+ for start_p, end_p in old_path:
+ if start_p == "GAMMA":
+ new_start_p = start_p
+ else:
+ new_start_p = "{}'".format(start_p)
+ if end_p == "GAMMA":
+ new_end_p = end_p
+ else:
+ new_end_p = "{}'".format(end_p)
+ path.append((new_start_p, new_end_p))
+
+ return {
+ "point_coords": points,
+ "path": path,
+ "has_inversion_symmetry": has_inv,
+ "augmented_path": augmented_path,
+ "bravais_lattice": bravais_lattice,
+ "bravais_lattice_extended": ext_bravais,
+ "conv_lattice": conv_lattice,
+ "conv_positions": conv_positions,
+ "conv_types": conv_types,
+ "primitive_lattice": prim_lattice,
+ "primitive_positions": prim_pos,
+ "primitive_types": prim_types,
+ "reciprocal_primitive_lattice": get_reciprocal_cell_rows(prim_lattice),
+ # The following: between conv and primitive, see docstring of
+ # spg_mapping.get_P_matrix
+ "inverse_primitive_transformation_matrix": invP,
+ "primitive_transformation_matrix": P,
+ # For the time being disabled, not valid for aP lattices
+ # (for which we would need the transformation matrix from niggli)
+ #'transformation_matrix': transf_matrix,
+ "volume_original_wrt_conv": volume_conv_wrt_original,
+ "volume_original_wrt_prim": volume_conv_wrt_original * np.linalg.det(invP),
+ "spacegroup_number": dataset["number"],
+ "spacegroup_international": dataset["international"],
+ "rotation_matrix": dataset["std_rotation_matrix"],
+ }
diff --git a/susyexists/src/seekpath/hpkot/__pycache__/__init__.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 00000000..d1e22b84
Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/__init__.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/hpkot/__pycache__/spg_db.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/spg_db.cpython-310.pyc
new file mode 100644
index 00000000..33dc2830
Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/spg_db.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/hpkot/__pycache__/spg_mapping.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/spg_mapping.cpython-310.pyc
new file mode 100644
index 00000000..80dab1e2
Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/spg_mapping.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/hpkot/__pycache__/tools.cpython-310.pyc b/susyexists/src/seekpath/hpkot/__pycache__/tools.cpython-310.pyc
new file mode 100644
index 00000000..0177e6a2
Binary files /dev/null and b/susyexists/src/seekpath/hpkot/__pycache__/tools.cpython-310.pyc differ
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_inversion
new file mode 100644
index 00000000..f7b8cf83
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_inversion
@@ -0,0 +1,12 @@
+aP2Y BPOSCAR-0675402
+ 1.0
+ -1.2489688500000000 2.4101964100000002 -1.1084066800000001
+ -3.8805945199999998 -0.4578071300000000 0.1425430700000000
+ -1.4313846100000001 2.5585931100000003 3.3956427200000006
+ Cu Ag O
+ 1 1 2
+Direct
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.1691864300000000 0.3370706700000000 0.2835515499999998
+ 0.8308135699999999 0.6629293300000000 0.7164484500000001
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_noinversion
new file mode 100644
index 00000000..a63bde43
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/POSCAR_noinversion
@@ -0,0 +1,12 @@
+aP2N BPOSCAR-0676400
+ 1.0
+ 0.2232003000000002 3.9509284600000001 0.1087184900000000
+ 0.3371022500000000 0.0885412800000000 4.1905891500000001
+ 4.5153270699999997 0.1789567900000000 0.3161373900000000
+ Tl N O
+ 1 1 2
+Direct
+ 0.9926416100000000 0.9866600400000000 0.0201893400000000
+ 0.4692735300000002 0.4346563700000002 0.5762333700000000
+ 0.3840447300000002 0.4084731400000002 0.3183778200000001
+ 0.6540401400000000 0.6702104500000001 0.5851994800000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP2/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP2/path.txt
new file mode 100644
index 00000000..96037614
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/path.txt
@@ -0,0 +1,7 @@
+GAMMA X
+Y GAMMA
+GAMMA Z
+R GAMMA
+GAMMA T
+U GAMMA
+GAMMA V
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP2/points.txt
new file mode 100644
index 00000000..b21ff5e5
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP2/points.txt
@@ -0,0 +1,8 @@
+GAMMA 0 0 0
+Z 0 0 1/2
+Y 0 1/2 0
+X 1/2 0 0
+V 1/2 1/2 0
+U 1/2 0 1/2
+T 0 1/2 1/2
+R 1/2 1/2 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_inversion
new file mode 100644
index 00000000..034e6db2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_inversion
@@ -0,0 +1,14 @@
+aP3Y BPOSCAR-0642822
+ 1.0
+ 2.0626889899999998 2.6083333300000002 -2.0959087400000000
+ 1.9072983399999999 2.9395872999999999 1.8656656300000001
+ 6.5783827900000000 -3.2025691800000007 1.4025826200000000
+ Ca C
+ 2 4
+Direct
+ 0.2293290750000000 0.9643429050000000 0.7541443700000001
+ 0.7706709250000001 0.0356570950000000 0.2458556299999999
+ 0.1294345049999998 0.4304467199999998 0.0623625850000001
+ 0.8705654950000002 0.5695532800000003 0.9376374149999998
+ 0.4456382749999998 0.6359233099999999 0.4306348850000002
+ 0.5543617250000001 0.3640766900000001 0.5693651149999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_noinversion
new file mode 100644
index 00000000..46982b54
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/POSCAR_noinversion
@@ -0,0 +1,12 @@
+aP3N BPOSCAR-0635393
+ 1.0
+ -1.9233544500000015 -3.4958872399999996 1.3364586999999970
+ 1.9624998199999997 -2.5383092100000000 2.8008223899999996
+ -2.9663797300000017 3.7162808800000002 6.3732958999999996
+ Ca P I
+ 2 1 1
+Direct
+ 0.6536658899999999 0.7085705400000003 0.3177989800000001
+ 0.3133405799999996 0.3342418600000008 0.6846297399999999
+ 0.9818335000000000 0.0236059500000002 0.5000213100000001
+ 0.0511600299999996 0.9335816500000002 0.9975499799999996
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP3/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP3/path.txt
new file mode 100644
index 00000000..3923ed87
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/path.txt
@@ -0,0 +1,7 @@
+GAMMA X
+Y GAMMA
+GAMMA Z
+R_2 GAMMA
+GAMMA T_2
+U_2 GAMMA
+GAMMA V_2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/aP3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/aP3/points.txt
new file mode 100644
index 00000000..f572b7dd
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/aP3/points.txt
@@ -0,0 +1,9 @@
+GAMMA 0 0 0
+Z 0 0 1/2
+Y 0 1/2 0
+Y_2 0 -1/2 0
+X 1/2 0 0
+V_2 1/2 -1/2 0
+U_2 -1/2 0 1/2
+T_2 0 -1/2 1/2
+R_2 -1/2 -1/2 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_inversion
new file mode 100644
index 00000000..b96b2f42
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_inversion
@@ -0,0 +1,96 @@
+cF1Y BPOSCAR-0019863
+ 1.0
+ 10.8589940276984667 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 10.8589940276984667 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 10.8589940276984667
+ N O K Cu Pb
+ 24 48 8 4 4
+Direct
+ 0.8008872400000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.1991127600000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.8008872400000000
+ 0.0000000000000000 0.0000000000000000 0.1991127600000000
+ 0.0000000000000000 0.8008872400000000 0.0000000000000000
+ 0.1991127600000000 0.0000000000000000 0.0000000000000000
+ 0.8008872400000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.6991127600000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.3008872400000000
+ 0.0000000000000000 0.5000000000000000 0.6991127600000000
+ 0.0000000000000000 0.3008872400000000 0.5000000000000000
+ 0.1991127600000000 0.5000000000000000 0.5000000000000000
+ 0.3008872400000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.1991127600000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.3008872400000000
+ 0.5000000000000000 0.0000000000000000 0.6991127600000000
+ 0.5000000000000000 0.8008872400000000 0.5000000000000000
+ 0.6991127600000000 0.0000000000000000 0.5000000000000000
+ 0.3008872400000000 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.6991127600000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.8008872400000000
+ 0.5000000000000000 0.5000000000000000 0.1991127600000000
+ 0.5000000000000000 0.3008872400000000 0.0000000000000000
+ 0.6991127600000000 0.5000000000000000 0.0000000000000000
+ 0.0992918700000000 0.2589942300000000 0.0000000000000000
+ 0.2589942300000000 0.0000000000000000 0.9007081299999999
+ 0.7410057700000000 0.0000000000000000 0.0992918700000000
+ 0.7410057700000000 0.0000000000000000 0.9007081299999999
+ 0.2589942300000000 0.0000000000000000 0.0992918700000000
+ 0.0000000000000000 0.9007081299999999 0.2589942300000000
+ 0.0992918700000000 0.7410057700000000 0.0000000000000000
+ 0.9007081299999999 0.7410057700000000 0.0000000000000000
+ 0.0000000000000000 0.0992918700000000 0.7410057700000000
+ 0.0000000000000000 0.9007081299999999 0.7410057700000000
+ 0.9007081299999999 0.2589942300000000 0.0000000000000000
+ 0.0000000000000000 0.0992918700000000 0.2589942300000000
+ 0.0992918700000000 0.7589942300000000 0.5000000000000000
+ 0.2589942300000000 0.5000000000000000 0.4007081300000000
+ 0.7410057700000000 0.5000000000000000 0.5992918700000001
+ 0.7410057700000000 0.5000000000000000 0.4007081300000000
+ 0.2589942300000000 0.5000000000000000 0.5992918700000001
+ 0.0000000000000000 0.4007081300000000 0.7589942300000000
+ 0.0992918700000000 0.2410057700000000 0.5000000000000000
+ 0.9007081299999999 0.2410057700000000 0.5000000000000000
+ 0.0000000000000000 0.5992918700000001 0.2410057700000000
+ 0.0000000000000000 0.4007081300000000 0.2410057700000000
+ 0.9007081299999999 0.7589942300000000 0.5000000000000000
+ 0.0000000000000000 0.5992918700000001 0.7589942300000000
+ 0.5992918700000001 0.2589942300000000 0.5000000000000000
+ 0.7589942300000000 0.0000000000000000 0.4007081300000000
+ 0.2410057700000000 0.0000000000000000 0.5992918700000001
+ 0.2410057700000000 0.0000000000000000 0.4007081300000000
+ 0.7589942300000000 0.0000000000000000 0.5992918700000001
+ 0.5000000000000000 0.9007081299999999 0.7589942300000000
+ 0.5992918700000001 0.7410057700000000 0.5000000000000000
+ 0.4007081300000000 0.7410057700000000 0.5000000000000000
+ 0.5000000000000000 0.0992918700000000 0.2410057700000000
+ 0.5000000000000000 0.9007081299999999 0.2410057700000000
+ 0.4007081300000000 0.2589942300000000 0.5000000000000000
+ 0.5000000000000000 0.0992918700000000 0.7589942300000000
+ 0.5992918700000001 0.7589942300000000 0.0000000000000000
+ 0.7589942300000000 0.5000000000000000 0.9007081299999999
+ 0.2410057700000000 0.5000000000000000 0.0992918700000000
+ 0.2410057700000000 0.5000000000000000 0.9007081299999999
+ 0.7589942300000000 0.5000000000000000 0.0992918700000000
+ 0.5000000000000000 0.4007081300000000 0.2589942300000000
+ 0.5992918700000001 0.2410057700000000 0.0000000000000000
+ 0.4007081300000000 0.2410057700000000 0.0000000000000000
+ 0.5000000000000000 0.5992918700000001 0.7410057700000000
+ 0.5000000000000000 0.4007081300000000 0.7410057700000000
+ 0.4007081300000000 0.7589942300000000 0.0000000000000000
+ 0.5000000000000000 0.5992918700000001 0.2589942300000000
+ 0.7500000000000000 0.2500000000000000 0.2500000000000000
+ 0.2500000000000000 0.7500000000000000 0.7500000000000000
+ 0.7500000000000000 0.7500000000000000 0.7500000000000000
+ 0.2500000000000000 0.2500000000000000 0.2500000000000000
+ 0.2500000000000000 0.2500000000000000 0.7500000000000000
+ 0.7500000000000000 0.7500000000000000 0.2500000000000000
+ 0.2500000000000000 0.7500000000000000 0.2500000000000000
+ 0.7500000000000000 0.2500000000000000 0.7500000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_noinversion
new file mode 100644
index 00000000..e3c6e445
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/POSCAR_noinversion
@@ -0,0 +1,96 @@
+cF1N BPOSCAR-0608162
+ 1.0
+ 10.5257053675443810 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 10.5257053675443810 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 10.5257053675443810
+ K Cu Pb N O
+ 8 4 4 24 48
+Direct
+ 0.7500000000000000 0.2500000000000000 0.2500000000000000
+ 0.2500000000000000 0.7500000000000000 0.7500000000000000
+ 0.7500000000000000 0.7500000000000000 0.7500000000000000
+ 0.2500000000000000 0.2500000000000000 0.2500000000000000
+ 0.2500000000000000 0.2500000000000000 0.7500000000000000
+ 0.7500000000000000 0.7500000000000000 0.2500000000000000
+ 0.2500000000000000 0.7500000000000000 0.2500000000000000
+ 0.7500000000000000 0.2500000000000000 0.7500000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.7997519249999998
+ 0.0000000000000000 0.2002480750000002 0.0000000000000000
+ 0.2002480750000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.7997519249999998 0.0000000000000000
+ 0.7997519249999998 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.2002480750000002
+ 0.0000000000000000 0.5000000000000000 0.2997519249999998
+ 0.0000000000000000 0.7002480750000002 0.5000000000000000
+ 0.2002480750000002 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.2997519249999998 0.5000000000000000
+ 0.7997519249999998 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.7002480750000002
+ 0.5000000000000000 0.0000000000000000 0.2997519249999998
+ 0.5000000000000000 0.2002480750000002 0.5000000000000000
+ 0.7002480750000002 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.7997519249999998 0.5000000000000000
+ 0.2997519249999998 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.7002480750000002
+ 0.5000000000000000 0.5000000000000000 0.7997519249999998
+ 0.5000000000000000 0.7002480750000002 0.0000000000000000
+ 0.7002480750000002 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.2997519249999998 0.0000000000000000
+ 0.2997519249999998 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.2002480750000002
+ 0.1009603100000000 0.7627072449999998 0.4840792550000000
+ 0.9840792550000000 0.8990396900000001 0.7372927550000002
+ 0.7372927550000002 0.0159207450000000 0.1009603100000000
+ 0.9840792550000000 0.1009603100000000 0.2627072449999998
+ 0.0159207450000000 0.8990396900000001 0.2627072449999998
+ 0.2627072449999998 0.0159207450000000 0.8990396900000001
+ 0.8990396900000001 0.2372927550000002 0.4840792550000000
+ 0.1009603100000000 0.2372927550000002 0.5159207450000000
+ 0.7372927550000002 0.9840792550000000 0.8990396900000001
+ 0.2627072449999998 0.9840792550000000 0.1009603100000000
+ 0.8990396900000001 0.7627072449999998 0.5159207450000000
+ 0.0159207450000000 0.1009603100000000 0.7372927550000002
+ 0.1009603100000000 0.2627072449999998 0.9840792550000000
+ 0.9840792550000000 0.3990396900000000 0.2372927550000002
+ 0.7372927550000002 0.5159207450000000 0.6009603099999999
+ 0.9840792550000000 0.6009603099999999 0.7627072449999998
+ 0.0159207450000000 0.3990396900000000 0.7627072449999998
+ 0.2627072449999998 0.5159207450000000 0.3990396900000000
+ 0.8990396900000001 0.7372927550000002 0.9840792550000000
+ 0.1009603100000000 0.7372927550000002 0.0159207450000000
+ 0.7372927550000002 0.4840792550000000 0.3990396900000000
+ 0.2627072449999998 0.4840792550000000 0.6009603099999999
+ 0.8990396900000001 0.2627072449999998 0.0159207450000000
+ 0.0159207450000000 0.6009603099999999 0.2372927550000002
+ 0.6009603099999999 0.7627072449999998 0.9840792550000000
+ 0.4840792550000000 0.8990396900000001 0.2372927550000002
+ 0.2372927550000002 0.0159207450000000 0.6009603099999999
+ 0.4840792550000000 0.1009603100000000 0.7627072449999998
+ 0.5159207450000000 0.8990396900000001 0.7627072449999998
+ 0.7627072449999998 0.0159207450000000 0.3990396900000000
+ 0.3990396900000000 0.2372927550000002 0.9840792550000000
+ 0.6009603099999999 0.2372927550000002 0.0159207450000000
+ 0.2372927550000002 0.9840792550000000 0.3990396900000000
+ 0.7627072449999998 0.9840792550000000 0.6009603099999999
+ 0.3990396900000000 0.7627072449999998 0.0159207450000000
+ 0.5159207450000000 0.1009603100000000 0.2372927550000002
+ 0.6009603099999999 0.2627072449999998 0.4840792550000000
+ 0.4840792550000000 0.3990396900000000 0.7372927550000002
+ 0.2372927550000002 0.5159207450000000 0.1009603100000000
+ 0.4840792550000000 0.6009603099999999 0.2627072449999998
+ 0.5159207450000000 0.3990396900000000 0.2627072449999998
+ 0.7627072449999998 0.5159207450000000 0.8990396900000001
+ 0.3990396900000000 0.7372927550000002 0.4840792550000000
+ 0.6009603099999999 0.7372927550000002 0.5159207450000000
+ 0.2372927550000002 0.4840792550000000 0.8990396900000001
+ 0.7627072449999998 0.4840792550000000 0.1009603100000000
+ 0.3990396900000000 0.2627072449999998 0.5159207450000000
+ 0.5159207450000000 0.6009603099999999 0.7372927550000002
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF1/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF1/path.txt
new file mode 100644
index 00000000..3b22a840
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/path.txt
@@ -0,0 +1,7 @@
+GAMMA X
+X U
+K GAMMA
+GAMMA L
+L W
+W X
+X W_2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF1/points.txt
new file mode 100644
index 00000000..b5b6d65c
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF1/points.txt
@@ -0,0 +1,7 @@
+GAMMA 0 0 0
+X 1/2 0 1/2
+L 1/2 1/2 1/2
+W 1/2 1/4 3/4
+W_2 3/4 1/4 1/2
+K 3/8 3/8 3/4
+U 5/8 1/4 5/8
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_inversion
new file mode 100644
index 00000000..f2b50ba5
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_inversion
@@ -0,0 +1,16 @@
+cF2Y BPOSCAR-0000451
+ 1.0
+ 4.9126411092111697 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.9126411092111697 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.9126411092111697
+ B Zr
+ 4 4
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_noinversion
new file mode 100644
index 00000000..c3401699
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/POSCAR_noinversion
@@ -0,0 +1,16 @@
+cF2N BPOSCAR-0008222
+ 1.0
+ 5.0670397789115720 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.0670397789115720 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.0670397789115720
+ O Ag
+ 4 4
+Direct
+ 0.7500000000000000 0.7500000000000000 0.2500000000000000
+ 0.7500000000000000 0.2500000000000000 0.7500000000000000
+ 0.2500000000000000 0.7500000000000000 0.7500000000000000
+ 0.2500000000000000 0.2500000000000000 0.2500000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF2/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF2/path.txt
new file mode 100644
index 00000000..166303c6
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/path.txt
@@ -0,0 +1,6 @@
+GAMMA X
+X U
+K GAMMA
+GAMMA L
+L W
+W X
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cF2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cF2/points.txt
new file mode 100644
index 00000000..b5b6d65c
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cF2/points.txt
@@ -0,0 +1,7 @@
+GAMMA 0 0 0
+X 1/2 0 1/2
+L 1/2 1/2 1/2
+W 1/2 1/4 3/4
+W_2 3/4 1/4 1/2
+K 3/8 3/8 3/4
+U 5/8 1/4 5/8
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_inversion
new file mode 100644
index 00000000..b9a01c7a
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_inversion
@@ -0,0 +1,16 @@
+cI1Y BPOSCAR-0570334
+ 1.0
+ 5.2123498899999996 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.2123498899999996 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.2123498899999996
+ Si W
+ 2 6
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_noinversion
new file mode 100644
index 00000000..1a32a011
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/POSCAR_noinversion
@@ -0,0 +1,18 @@
+cI1N BPOSCAR-0001818
+ 1.0
+ 5.5951250842907712 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.5951250842907712 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.5951250842907712
+ F Si
+ 8 2
+Direct
+ 0.1632964950000000 0.8367035050000000 0.1632964950000000
+ 0.8367035050000000 0.1632964950000000 0.1632964950000000
+ 0.1632964950000000 0.1632964950000000 0.8367035050000000
+ 0.8367035050000000 0.8367035050000000 0.8367035050000000
+ 0.6632964950000000 0.3367035050000000 0.6632964950000000
+ 0.3367035050000000 0.6632964950000000 0.6632964950000000
+ 0.6632964950000000 0.6632964950000000 0.3367035050000000
+ 0.3367035050000000 0.3367035050000000 0.3367035050000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cI1/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cI1/path.txt
new file mode 100644
index 00000000..8232a4aa
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/path.txt
@@ -0,0 +1,6 @@
+GAMMA H
+H N
+N GAMMA
+GAMMA P
+P H
+P N
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cI1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cI1/points.txt
new file mode 100644
index 00000000..c0e19ba3
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cI1/points.txt
@@ -0,0 +1,4 @@
+GAMMA 0 0 0
+H 1/2 -1/2 1/2
+P 1/4 1/4 1/4
+N 0 0 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_inversion
new file mode 100644
index 00000000..4de47947
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_inversion
@@ -0,0 +1,19 @@
+cP1Y BPOSCAR-0022597
+ 1.0
+ 6.0025823999999988 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.0025823999999988 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 6.0025823999999988
+ N O Rb Cd
+ 3 6 1 1
+Direct
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.7075126700000000
+ 0.0000000000000000 0.7075126700000000 0.5000000000000000
+ 0.0000000000000000 0.2924873300000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.2924873300000000
+ 0.2924873300000000 0.5000000000000000 0.0000000000000000
+ 0.7075126700000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_noinversion
new file mode 100644
index 00000000..871566e6
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/POSCAR_noinversion
@@ -0,0 +1,16 @@
+cP1N BPOSCAR-0008675
+ 1.0
+ 5.3233224500000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.3233224500000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.3233224500000000
+ Pd Hg
+ 4 4
+Direct
+ 0.1525474800000000 0.3474525200000000 0.6525474800000000
+ 0.3474525200000000 0.6525474800000000 0.1525474800000000
+ 0.6525474800000000 0.1525474800000000 0.3474525200000000
+ 0.8474525200000000 0.8474525200000000 0.8474525200000000
+ 0.8435654299999999 0.6564345700000001 0.3435654300000000
+ 0.6564345700000001 0.3435654300000000 0.8435654299999999
+ 0.3435654300000000 0.8435654299999999 0.6564345700000001
+ 0.1564345700000000 0.1564345700000000 0.1564345700000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP1/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP1/path.txt
new file mode 100644
index 00000000..f21622d6
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/path.txt
@@ -0,0 +1,7 @@
+GAMMA X
+X M
+M GAMMA
+GAMMA R
+R X
+R M
+M X_1
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP1/points.txt
new file mode 100644
index 00000000..f6555f79
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP1/points.txt
@@ -0,0 +1,5 @@
+GAMMA 0 0 0
+R 1/2 1/2 1/2
+M 1/2 1/2 0
+X 0 1/2 0
+X_1 1/2 0 0
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_inversion
new file mode 100644
index 00000000..059f8430
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_inversion
@@ -0,0 +1,10 @@
+cP2Y BPOSCAR-0000284
+ 1.0
+ 2.8531242500000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 2.8531242500000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 2.8531242500000000
+ Al Co
+ 1 1
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_noinversion
new file mode 100644
index 00000000..0564edcc
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/POSCAR_noinversion
@@ -0,0 +1,13 @@
+cP2N BPOSCAR-0571436
+ 1.0
+ 6.6864277300000010 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.6864277300000010 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 6.6864277300000010
+ Sn I
+ 1 4
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.2339031900000000 0.7660968100000000 0.7660968100000000
+ 0.7660968100000000 0.2339031900000000 0.7660968100000000
+ 0.7660968100000000 0.7660968100000000 0.2339031900000000
+ 0.2339031900000000 0.2339031900000000 0.2339031900000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP2/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP2/path.txt
new file mode 100644
index 00000000..b3a1d072
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/path.txt
@@ -0,0 +1,6 @@
+GAMMA X
+X M
+M GAMMA
+GAMMA R
+R X
+R M
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/cP2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/cP2/points.txt
new file mode 100644
index 00000000..f6555f79
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/cP2/points.txt
@@ -0,0 +1,5 @@
+GAMMA 0 0 0
+R 1/2 1/2 1/2
+M 1/2 1/2 0
+X 0 1/2 0
+X_1 1/2 0 0
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_inversion
new file mode 100644
index 00000000..8afe117a
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_inversion
@@ -0,0 +1,15 @@
+hP1Y BPOSCAR-0000882
+ 1.0
+ 5.1132522679799095 0.0000000000000000 0.0000000000000000
+ -2.5566261339899548 4.4282063600289971 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.7497088850000004
+ O Ti
+ 1 6
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.6684051500000000 0.6684051500000000 0.7391580200000001
+ 0.6684051500000000 0.0000000000000000 0.2608419799999999
+ 0.0000000000000000 0.6684051500000000 0.2608419799999999
+ 0.3315948500000000 0.3315948500000000 0.2608419799999999
+ 0.3315948500000000 0.0000000000000000 0.7391580200000001
+ 0.0000000000000000 0.3315948500000000 0.7391580200000001
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_noinversion
new file mode 100644
index 00000000..322b2660
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/POSCAR_noinversion
@@ -0,0 +1,13 @@
+hP1N BPOSCAR-0574250
+ 1.0
+ 7.3838276686181779 0.0000000000000000 0.0000000000000000
+ -3.6919138343090889 6.3945823381897675 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.2679669400000000
+ In Si Te
+ 1 1 3
+Direct
+ 0.6666666666666667 0.3333333333333333 0.4633006600000000
+ 0.0000000000000000 0.0000000000000000 0.2766757500000000
+ 0.0544849066666666 0.3550765733333332 0.2667378600000000
+ 0.6449234266666668 0.6994083333333334 0.2667378600000000
+ 0.3005916666666666 0.9455150933333334 0.2667378600000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP1/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP1/path.txt
new file mode 100644
index 00000000..79f24e7c
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/path.txt
@@ -0,0 +1,10 @@
+GAMMA M
+M K
+K GAMMA
+GAMMA A
+A L
+L H
+H A
+L M
+H K
+K H_2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP1/points.txt
new file mode 100644
index 00000000..43bbe684
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP1/points.txt
@@ -0,0 +1,7 @@
+GAMMA 0 0 0
+A 0 0 1/2
+K 1/3 1/3 0
+H 1/3 1/3 1/2
+H_2 1/3 1/3 -1/2
+M 1/2 0 0
+L 1/2 0 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_inversion
new file mode 100644
index 00000000..9a797bfc
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_inversion
@@ -0,0 +1,11 @@
+hP2Y BPOSCAR-0001103
+ 1.0
+ 4.0893356498319466 0.0000000000000000 0.0000000000000000
+ -2.0446678249159733 3.5414685573558113 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 3.7962176799999998
+ Si Lu
+ 2 1
+Direct
+ 0.3333333333333333 0.6666666666666667 0.5000000000000000
+ 0.6666666666666667 0.3333333333333333 0.5000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_noinversion
new file mode 100644
index 00000000..98f58ab6
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/POSCAR_noinversion
@@ -0,0 +1,10 @@
+hP2N BPOSCAR-0000219
+ 1.0
+ 3.2446419509649993 0.0000000000000000 0.0000000000000000
+ -1.6223209754824996 2.8099423557203922 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 3.2005169000000002
+ P Mo
+ 1 1
+Direct
+ 0.3333333333333333 0.6666666666666667 0.5000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP2/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP2/path.txt
new file mode 100644
index 00000000..cde9b1e8
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/path.txt
@@ -0,0 +1,9 @@
+GAMMA M
+M K
+K GAMMA
+GAMMA A
+A L
+L H
+H A
+L M
+H K
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hP2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hP2/points.txt
new file mode 100644
index 00000000..43bbe684
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hP2/points.txt
@@ -0,0 +1,7 @@
+GAMMA 0 0 0
+A 0 0 1/2
+K 1/3 1/3 0
+H 1/3 1/3 1/2
+H_2 1/3 1/3 -1/2
+M 1/2 0 0
+L 1/2 0 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_inversion
new file mode 100644
index 00000000..e84faae2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_inversion
@@ -0,0 +1,14 @@
+hR1Y BPOSCAR-0020132
+ 1.0
+ 3.7622432546763140 0.0000000000000000 0.0000000000000000
+ -1.8811216273381570 3.2581982337663353 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 13.5138670706735571
+ In Hg
+ 3 3
+Direct
+ 0.6666666666666667 0.3333333333333333 0.8333333333333333
+ 0.3333333333333333 0.6666666666666666 0.1666666666666666
+ 0.0000000000000000 0.0000000000000000 0.4999999999999999
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.6666666666666666 0.3333333333333333 0.3333333333333333
+ 0.3333333333333333 0.6666666666666666 0.6666666666666666
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_noinversion
new file mode 100644
index 00000000..187f70e9
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/POSCAR_noinversion
@@ -0,0 +1,14 @@
+hR1N BPOSCAR-0022895
+ 1.0
+ 4.3089558515497082 0.0000000000000000 0.0000000000000000
+ -2.1544779257748541 3.7316652312276553 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 10.2486516858249015
+ Cu I
+ 3 3
+Direct
+ 0.0000000000000000 0.0000000000000000 0.2797794000000000
+ 0.6666666666666666 0.3333333333333333 0.6131127333333333
+ 0.3333333333333333 0.6666666666666666 0.9464460666666666
+ 0.0000000000000000 0.0000000000000000 0.0252206000000002
+ 0.6666666666666666 0.3333333333333333 0.3585539333333334
+ 0.3333333333333333 0.6666666666666666 0.6918872666666668
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR1/k_vector_parameters.txt
new file mode 100644
index 00000000..b8d379ae
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/k_vector_parameters.txt
@@ -0,0 +1,3 @@
+D a*a/4/c/c
+Y 5/6-2*D
+N 1/3+D
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR1/path.txt
new file mode 100644
index 00000000..22c5fa65
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/path.txt
@@ -0,0 +1,7 @@
+GAMMA T
+T H_2
+H_0 L
+L GAMMA
+GAMMA S_0
+S_2 F
+F GAMMA
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR1/points.txt
new file mode 100644
index 00000000..6700f97f
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR1/points.txt
@@ -0,0 +1,20 @@
+GAMMA 0 0 0
+T 1/2 1/2 1/2
+L 1/2 0 0
+L_2 0 -1/2 0
+L_4 0 0 -1/2
+F 1/2 0 1/2
+F_2 1/2 1/2 0
+S_0 N -N 0
+S_2 1-N 0 N
+S_4 N 0 -N
+S_6 1-N N 0
+H_0 1/2 -1+Y 1-Y
+H_2 Y 1-Y 1/2
+H_4 Y 1/2 1-Y
+H_6 1/2 1-Y -1+Y
+M_0 N -1+Y N
+M_2 1-N 1-Y 1-N
+M_4 Y N N
+M_6 1-N 1-N 1-Y
+M_8 N N -1+Y
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion
new file mode 100644
index 00000000..009897b4
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion
@@ -0,0 +1,38 @@
+Mn1 O3 S1
+1.0
+ 7.9120001793 0.0000000000 0.0000000000
+ -2.6073387350 7.4700422728 0.0000000000
+ -2.6073387350 -3.6716632672 6.5054146993
+ Mn S O
+ 6 6 18
+Direct
+ 0.365300000 0.186100006 0.681429982
+ 0.634700000 0.813899994 0.318570018
+ 0.681429982 0.365300000 0.186100006
+ 0.318570018 0.634700000 0.813899994
+ 0.186100006 0.681429982 0.365300000
+ 0.813899994 0.318570018 0.634700000
+ 0.355500013 0.024850000 0.210030004
+ 0.644500017 0.975149989 0.789969981
+ 0.210030004 0.355500013 0.024850000
+ 0.789969981 0.644500017 0.975149989
+ 0.024850000 0.210030004 0.355500013
+ 0.975149989 0.789969981 0.644500017
+ 0.553499997 0.230100006 0.340499997
+ 0.446500003 0.769899964 0.659500003
+ 0.340499997 0.553499997 0.230100006
+ 0.659500003 0.446500003 0.769899964
+ 0.230100006 0.340499997 0.553499997
+ 0.769899964 0.659500003 0.446500003
+ 0.310099989 0.979699969 0.372500002
+ 0.689900041 0.020300001 0.627499998
+ 0.372500002 0.310099989 0.979699969
+ 0.627499998 0.689900041 0.020300001
+ 0.979699969 0.372500002 0.310099989
+ 0.020300001 0.627499998 0.689900041
+ 0.412699997 0.867799997 0.119000003
+ 0.587300003 0.132200003 0.880999982
+ 0.119000003 0.412699997 0.867799997
+ 0.880999982 0.587300003 0.132200003
+ 0.867799997 0.119000003 0.412699997
+ 0.132200003 0.880999982 0.587300003
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion_alternate
new file mode 100644
index 00000000..db06b38d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_inversion_alternate
@@ -0,0 +1,20 @@
+hR2Y BPOSCAR-0559435
+ 1.0
+ 5.5166617143778431 0.0000000000000000 0.0000000000000000
+ -2.7583308571889216 4.7775691887362246 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 6.5087155299999999
+ F Co
+ 9 3
+Direct
+ 0.8333333333333333 0.6666666666666666 0.1666666666666666
+ 0.6666666666666666 0.8333333333333333 0.8333333333333334
+ 0.8333333333333333 0.1666666666666667 0.1666666666666666
+ 0.4999999999999999 0.0000000000000000 0.5000000000000000
+ 0.3333333333333332 0.1666666666666666 0.1666666666666666
+ 0.4999999999999999 0.5000000000000000 0.5000000000000000
+ 0.1666666666666666 0.3333333333333332 0.8333333333333333
+ 0.0000000000000000 0.4999999999999999 0.5000000000000000
+ 0.1666666666666666 0.8333333333333333 0.8333333333333333
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.6666666666666666 0.3333333333333333 0.3333333333333333
+ 0.3333333333333333 0.6666666666666666 0.6666666666666666
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_noinversion
new file mode 100644
index 00000000..fd324549
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/POSCAR_noinversion
@@ -0,0 +1,17 @@
+hR2N BPOSCAR-0035308
+ 1.0
+ 6.1618161492568841 0.0000000000000000 0.0000000000000000
+ -3.0809080746284421 5.3362893187056679 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.8124574132877891
+ C Cu N
+ 3 3 3
+Direct
+ 0.0000000000000000 0.0000000000000000 0.3778850299999999
+ 0.6666666666666666 0.3333333333333333 0.7112183633333332
+ 0.3333333333333333 0.6666666666666666 0.0445516966666666
+ 0.0000000000000000 0.0000000000000000 0.0002308800000000
+ 0.6666666666666666 0.3333333333333333 0.3335642133333334
+ 0.3333333333333333 0.6666666666666666 0.6668975466666667
+ 0.0000000000000000 0.0000000000000000 0.6218840800000001
+ 0.6666666666666666 0.3333333333333333 0.9552174133333334
+ 0.3333333333333333 0.6666666666666666 0.2885507466666666
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR2/k_vector_parameters.txt
new file mode 100644
index 00000000..de20aaae
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/k_vector_parameters.txt
@@ -0,0 +1,3 @@
+Z 1/6-c*c/9/a/a
+H 1/2-2*Z
+N 1/2+Z
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR2/path.txt
new file mode 100644
index 00000000..9c59e332
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/path.txt
@@ -0,0 +1,5 @@
+GAMMA L
+L T
+T P_0
+P_2 GAMMA
+GAMMA F
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/hR2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/hR2/points.txt
new file mode 100644
index 00000000..0e8a46f0
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/hR2/points.txt
@@ -0,0 +1,9 @@
+GAMMA 0 0 0
+T 1/2 -1/2 1/2
+P_0 H -1+H H
+P_2 H H H
+R_0 1-H -H -H
+M 1-N -N 1-N
+M_2 N -1+N -1+N
+L 1/2 0 0
+F 1/2 -1/2 0
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion
new file mode 100644
index 00000000..7859e5fb
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion
@@ -0,0 +1,16 @@
+Cu1 O1
+1.0
+ 4.6529998779 0.0000000000 0.0000000000
+ 0.0000000000 3.4100000858 0.0000000000
+ -0.8413048067 0.0000000000 5.0382405853
+ Cu O
+ 4 4
+Direct
+ 0.250000000 0.250000000 0.000000000
+ 0.750000000 0.750000000 0.000000000
+ 0.750000000 0.250000000 0.500000000
+ 0.250000000 0.750000000 0.500000000
+ 0.000000000 0.583999991 0.250000000
+ 0.000000000 0.416000009 0.750000000
+ 0.500000000 0.083999991 0.250000000
+ 0.500000000 0.916000009 0.750000000
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion_alternate
new file mode 100644
index 00000000..453c5039
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_inversion_alternate
@@ -0,0 +1,14 @@
+mC1Y BPOSCAR-0023219
+ 1.0
+ 7.6917654295426541 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 3.4925583779989822 0.0000000000000000
+ -3.3889674554441087 0.0000000000000000 6.1941827927435229
+ Cu Br
+ 2 4
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.9906259350000000 0.5000000000000000 0.7580006699999999
+ 0.0093740650000000 0.5000000000000000 0.2419993300000000
+ 0.4906259350000000 0.0000000000000000 0.7580006699999999
+ 0.5093740650000000 0.0000000000000000 0.2419993300000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion
new file mode 100644
index 00000000..4180a7e7
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion
@@ -0,0 +1,16 @@
+Cu1 O1
+1.0
+ 4.6890001297 0.0000000000 0.0000000000
+ 0.0000000000 3.4200000763 0.0000000000
+ -0.8528750994 0.0000000000 5.0586070453
+ Cu O
+ 4 4
+Direct
+ 0.250000000 0.231999993 0.000000000
+ 0.250000000 0.768000007 0.500000000
+ 0.750000000 0.731999993 0.000000000
+ 0.750000000 0.268000007 0.500000000
+ 0.972999990 0.412999988 0.233999997
+ 0.972999990 0.587000012 0.733999968
+ 0.472999990 0.912999988 0.233999997
+ 0.472999990 0.087000012 0.733999968
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion_alternate
new file mode 100644
index 00000000..37f23abb
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/POSCAR_noinversion_alternate
@@ -0,0 +1,14 @@
+mC1N BPOSCAR-0632403
+ 1.0
+ 5.9523730992692938 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.9315452334996053 0.0000000000000000
+ -0.1322263448500317 0.0000000000000000 4.9936063923993803
+ Cd Cl
+ 2 4
+Direct
+ 0.0000000000000000 0.8435554000000002 0.0000000000000000
+ 0.5000000000000000 0.3435554000000002 0.0000000000000000
+ 0.2512113300000000 0.0819644100000003 0.7285905800000003
+ 0.7487886699999999 0.0819644100000003 0.2714094199999996
+ 0.7512113300000001 0.5819644100000003 0.7285905800000003
+ 0.2487886700000000 0.5819644100000003 0.2714094199999996
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC1/k_vector_parameters.txt
new file mode 100644
index 00000000..85e248ae
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/k_vector_parameters.txt
@@ -0,0 +1,4 @@
+Z (2+a/c*cosbeta)/4/sinbeta/sinbeta
+H 1/2-2*Z*c*cosbeta/a
+S 3/4-b*b/4/a/a/sinbeta/sinbeta
+P S-(3/4-S)*a*cosbeta/c
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC1/path.txt
new file mode 100644
index 00000000..afd2c6ca
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/path.txt
@@ -0,0 +1,9 @@
+GAMMA C
+C_2 Y_2
+Y_2 GAMMA
+GAMMA M_2
+M_2 D
+D_2 A
+A GAMMA
+L_2 GAMMA
+GAMMA V_2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC1/points.txt
new file mode 100644
index 00000000..40664dfe
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC1/points.txt
@@ -0,0 +1,16 @@
+GAMMA 0 0 0
+Y_2 -1/2 1/2 0
+Y_4 1/2 -1/2 0
+A 0 0 1/2
+M_2 -1/2 1/2 1/2
+V 1/2 0 0
+V_2 0 1/2 0
+L_2 0 1/2 1/2
+C 1-S 1-S 0
+C_2 -1+S S 0
+C_4 S -1+S 0
+D -1+P P 1/2
+D_2 1-P 1-P 1/2
+E -1+Z 1-Z 1-H
+E_2 -Z Z H
+E_4 Z -Z 1-H
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion
new file mode 100644
index 00000000..bb3b7a1f
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion
@@ -0,0 +1,16 @@
+Cr1 S1
+1.0
+ 3.8259999752 0.0000000000 0.0000000000
+ 0.0000000000 5.9130001068 0.0000000000
+ -1.2243633483 0.0000000000 5.9646339479
+ Cr S
+ 4 4
+Direct
+ 0.000000000 0.000000000 0.000000000
+ 0.000000000 0.000000000 0.500000000
+ 0.500000000 0.500000000 0.000000000
+ 0.500000000 0.500000000 0.500000000
+ 0.000000000 0.319999993 0.250000000
+ 0.000000000 0.680000007 0.750000000
+ 0.500000000 0.819999993 0.250000000
+ 0.500000000 0.180000007 0.750000000
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion_alternate
new file mode 100644
index 00000000..070fa4c3
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_inversion_alternate
@@ -0,0 +1,20 @@
+mC2Y BPOSCAR-0849598
+ 1.0
+ 2.8361602316236882 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.9041675669748317 0.0000000000000000
+ -0.2930545685024968 0.0000000000000000 10.6463836915664292
+ Co O
+ 4 8
+Direct
+ 0.2500000000000000 0.7500000000000000 0.0000000000000000
+ 0.7500000000000000 0.7500000000000000 0.5000000000000000
+ 0.7500000000000000 0.2500000000000000 0.0000000000000000
+ 0.2500000000000000 0.2500000000000000 0.5000000000000000
+ 0.7573757500000002 0.9163308999999999 0.0906554850000001
+ 0.2426242499999998 0.9163308999999999 0.4093445149999999
+ 0.7426242499999998 0.5836691000000001 0.9093445150000000
+ 0.2573757500000002 0.5836691000000001 0.5906554850000001
+ 0.2573757500000002 0.4163308999999999 0.0906554850000001
+ 0.7426242499999998 0.4163308999999999 0.4093445149999999
+ 0.2426242499999998 0.0836691000000000 0.9093445150000000
+ 0.7573757500000002 0.0836691000000000 0.5906554850000001
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_noinversion
new file mode 100644
index 00000000..694a10bb
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/POSCAR_noinversion
@@ -0,0 +1,14 @@
+mC2N BPOSCAR-0684604
+ 1.0
+ 4.4543676407916521 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.9441566239106152 0.0000000000000000
+ -2.0649512746343106 0.0000000000000000 4.5288322975994166
+ Cu S
+ 2 4
+Direct
+ 0.0000000000000000 0.2823929850000000 0.0000000000000000
+ 0.5000000000000000 0.7823929850000000 0.0000000000000000
+ 0.0646265024999999 0.9926399325000000 0.7196481600000000
+ 0.9353734975000000 0.9926399325000000 0.2803518400000000
+ 0.5646265024999999 0.4926399324999999 0.7196481600000000
+ 0.4353734975000001 0.4926399324999999 0.2803518400000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC2/k_vector_parameters.txt
new file mode 100644
index 00000000..a5ce1c6d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/k_vector_parameters.txt
@@ -0,0 +1,6 @@
+Z (a*a/b/b+(1+a/c*cosbeta)/sinbeta/sinbeta)/4
+M (1+a*a/b/b)/4
+D -a*c*cosbeta/2/b/b
+X 1/2-2*Z*c*cosbeta/a
+P 1+Z-2*M
+S X-2*D
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC2/path.txt
new file mode 100644
index 00000000..15c24804
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/path.txt
@@ -0,0 +1,6 @@
+GAMMA Y
+Y M
+M A
+A GAMMA
+L_2 GAMMA
+GAMMA V_2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC2/points.txt
new file mode 100644
index 00000000..4e04590d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC2/points.txt
@@ -0,0 +1,16 @@
+GAMMA 0 0 0
+Y 1/2 1/2 0
+A 0 0 1/2
+M 1/2 1/2 1/2
+V_2 0 1/2 0
+L_2 0 1/2 1/2
+F -1+P 1-P 1-S
+F_2 1-P P S
+F_4 P 1-P 1-S
+H -Z Z X
+H_2 Z 1-Z 1-X
+H_4 Z -Z 1-X
+G -M M D
+G_2 M 1-M -D
+G_4 M -M -D
+G_6 1-M M D
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_inversion
new file mode 100644
index 00000000..2a305566
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_inversion
@@ -0,0 +1,14 @@
+mC3Y BPOSCAR-0755333
+ 1.0
+ 4.9221728169717158 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.0500784999999997 0.0000000000000000
+ -1.9363348593869576 0.0000000000000000 3.8443169378737232
+ Hg O
+ 2 4
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.5244409400000001 0.0000000000000000 0.6825487000000000
+ 0.4755590600000000 0.0000000000000000 0.3174513000000000
+ 0.0244409400000000 0.5000000000000000 0.6825487000000000
+ 0.9755590600000000 0.5000000000000000 0.3174513000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_noinversion
new file mode 100644
index 00000000..9c80651e
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/POSCAR_noinversion
@@ -0,0 +1,16 @@
+mC3N BPOSCAR-0546787
+ 1.0
+ 6.0503027690559161 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.8058162443484527 0.0000000000000000
+ -1.3412847479118257 0.0000000000000000 3.9837269517466511
+ O K N
+ 4 2 2
+Direct
+ 0.9204877800000000 0.6856527500000000 0.4000303300000000
+ 0.9204877800000000 0.3143472500000000 0.4000303300000000
+ 0.4204877800000000 0.1856527500000000 0.4000303300000000
+ 0.4204877800000000 0.8143472500000000 0.4000303300000000
+ 0.9924952600000000 0.0000000000000000 0.9494725800000000
+ 0.4924952600000000 0.5000000000000000 0.9494725800000000
+ 0.4988838949999999 0.0000000000000000 0.5567151100000001
+ 0.9988838949999999 0.5000000000000000 0.5567151100000001
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC3/k_vector_parameters.txt
new file mode 100644
index 00000000..cf4a2b4a
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/k_vector_parameters.txt
@@ -0,0 +1,7 @@
+Z (a*a/b/b+(1+a/c*cosbeta)/sinbeta/sinbeta)/4
+R 1-Z*b*b/a/a
+E 1/2-2*Z*c*cosbeta/a
+F E/2+a*a/4/b/b+a*c*cosbeta/2/b/b
+U 2*F-Z
+W c/2/a/cosbeta*(1-4*U+a*a*sinbeta*sinbeta/b/b)
+D -1/4+W/2-Z*c*cosbeta/a
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC3/path.txt
new file mode 100644
index 00000000..226205e3
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/path.txt
@@ -0,0 +1,7 @@
+GAMMA A
+A I_2
+I M_2
+M_2 GAMMA
+GAMMA Y
+L_2 GAMMA
+GAMMA V_2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mC3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mC3/points.txt
new file mode 100644
index 00000000..961f7071
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mC3/points.txt
@@ -0,0 +1,19 @@
+GAMMA 0 0 0
+Y 1/2 1/2 0
+A 0 0 1/2
+M_2 -1/2 1/2 1/2
+V 1/2 0 0
+V_2 0 1/2 0
+L_2 0 1/2 1/2
+I -1+R R 1/2
+I_2 1-R 1-R 1/2
+K -U U W
+K_2 -1+U 1-U 1-W
+K_4 1-U U W
+H -Z Z E
+H_2 Z 1-Z 1-E
+H_4 Z -Z 1-E
+N -F F D
+N_2 F 1-F -D
+N_4 F -F -D
+N_6 1-F F D
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_inversion
new file mode 100644
index 00000000..ac3ca189
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_inversion
@@ -0,0 +1,12 @@
+mP1Y BPOSCAR-0001048
+ 1.0
+ 2.9385939922724953 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.0149254499999998 0.0000000000000000
+ -0.9809144665664697 0.0000000000000000 4.6621998437406615
+ Ti Ni
+ 2 2
+Direct
+ 0.6102526299999999 0.7500000000000000 0.7841075399999999
+ 0.3897473700000002 0.2500000000000000 0.2158924600000000
+ 0.9374365400000000 0.7500000000000000 0.3284379699999999
+ 0.0625634599999999 0.2500000000000000 0.6715620300000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion
new file mode 100644
index 00000000..e3a2c043
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion
@@ -0,0 +1,20 @@
+Au1 Te2
+1.0
+ 8.7600002289 0.0000000000 0.0000000000
+ 0.0000000000 4.4099998474 0.0000000000
+ -5.8507873475 0.0000000000 8.2940207180
+ Au Te
+ 4 8
+Direct
+ 0.748300016 0.493800014 0.124300003
+ 0.748300016 0.506199956 0.624300003
+ 0.246000007 0.994099975 0.873099983
+ 0.246000007 0.005900000 0.373099983
+ 0.935100019 0.986199975 0.572799981
+ 0.935100019 0.013800000 0.072799981
+ 0.558499992 0.052000001 0.674700022
+ 0.558499992 0.948000014 0.174700022
+ 0.057500001 0.446399987 0.420899987
+ 0.057500001 0.553600013 0.920899987
+ 0.436300009 0.558499992 0.323500007
+ 0.436300009 0.441500008 0.823500037
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion_alternate
new file mode 100644
index 00000000..bd01116a
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/POSCAR_noinversion_alternate
@@ -0,0 +1,13 @@
+mP1N BPOSCAR-0037036
+ 1.0
+ 4.3191896229634406 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 3.7277627610011685 0.0000000000000000
+ -0.2651497979729798 0.0000000000000000 5.7104711285392602
+ Bi O
+ 2 3
+Direct
+ 0.0435174299999992 0.0000000000000000 0.0357734900000000
+ 0.4811621599999999 0.5000000000000000 0.4800676200000000
+ 0.5036851999999993 0.0000000000000000 0.2121958200000000
+ 0.2902936299999997 0.0000000000000000 0.6861861600000001
+ 0.0393416099999997 0.5000000000000000 0.2647768900000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/mP1/k_vector_parameters.txt
new file mode 100644
index 00000000..de426841
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/k_vector_parameters.txt
@@ -0,0 +1,2 @@
+Y (1+a/c*cosbeta)/2/sinbeta/sinbeta
+N 1/2+Y*c*cosbeta/a
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/mP1/path.txt
new file mode 100644
index 00000000..b7acaf7b
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/path.txt
@@ -0,0 +1,10 @@
+GAMMA Z
+Z D
+D B
+B GAMMA
+GAMMA A
+A E
+E Z
+Z C_2
+C_2 Y_2
+Y_2 GAMMA
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/mP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/mP1/points.txt
new file mode 100644
index 00000000..049122e0
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/mP1/points.txt
@@ -0,0 +1,18 @@
+GAMMA 0 0 0
+Z 0 1/2 0
+B 0 0 1/2
+B_2 0 0 -1/2
+Y 1/2 0 0
+Y_2 -1/2 0 0
+C 1/2 1/2 0
+C_2 -1/2 1/2 0
+D 0 1/2 1/2
+D_2 0 1/2 -1/2
+A -1/2 0 1/2
+E -1/2 1/2 1/2
+H -Y 0 1-N
+H_2 -1+Y 0 N
+H_4 -Y 0 -N
+M -Y 1/2 1-N
+M_2 -1+Y 1/2 N
+M_4 -Y 1/2 -N
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oA1/POSCAR_noinversion
new file mode 100644
index 00000000..3143baaf
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/POSCAR_noinversion
@@ -0,0 +1,14 @@
+oA1N BPOSCAR-0632475
+ 1.0
+ 3.5372412112199783 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 3.1790663357329523 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 9.9032878682703824
+ Nb S
+ 2 4
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0309652399999998
+ 0.0000000000000000 0.5000000000000000 0.5309652399999998
+ 0.0000000000000000 0.5000000000000000 0.8489601849999999
+ 0.5000000000000000 0.5000000000000000 0.1263269549999999
+ 0.0000000000000000 0.0000000000000000 0.3489601849999999
+ 0.5000000000000000 0.0000000000000000 0.6263269549999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA1/k_vector_parameters.txt
new file mode 100644
index 00000000..65033af5
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/k_vector_parameters.txt
@@ -0,0 +1 @@
+X (1+b*b/c/c)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA1/path.txt
new file mode 100644
index 00000000..1d8637f2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/path.txt
@@ -0,0 +1,11 @@
+GAMMA Y
+Y C_0
+SIGMA_0 GAMMA
+GAMMA Z
+Z A_0
+E_0 T
+T Y
+GAMMA S
+S R
+R Z
+Z T
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA1/points.txt
new file mode 100644
index 00000000..49efa4b4
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA1/points.txt
@@ -0,0 +1,10 @@
+GAMMA 0 0 0
+Y -1/2 1/2 0
+T -1/2 1/2 1/2
+Z 0 0 1/2
+S 0 1/2 0
+R 0 1/2 1/2
+SIGMA_0 X X 0
+C_0 -X 1-X 0
+A_0 X X 1/2
+E_0 -X 1-X 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oA2/POSCAR_noinversion
new file mode 100644
index 00000000..dcbbdf14
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/POSCAR_noinversion
@@ -0,0 +1,16 @@
+oA2N BPOSCAR-0776563
+ 1.0
+ 3.0969165300000001 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 8.3989907800000001 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.9027343099999996
+ Cr O
+ 2 6
+Direct
+ 0.0000000000000000 0.0000000000000000 0.8606000400000000
+ 0.0000000000000000 0.5000000000000000 0.3606000400000000
+ 0.5000000000000000 0.0000000000000000 0.0421212999999999
+ 0.0000000000000000 0.8482551199999999 0.6657793299999999
+ 0.0000000000000000 0.1517448800000001 0.6657793299999999
+ 0.5000000000000000 0.5000000000000000 0.5421212999999999
+ 0.0000000000000000 0.3482551199999998 0.1657793300000000
+ 0.0000000000000000 0.6517448800000001 0.1657793300000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA2/k_vector_parameters.txt
new file mode 100644
index 00000000..18b16f55
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/k_vector_parameters.txt
@@ -0,0 +1 @@
+X (1+c*c/b/b)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA2/path.txt
new file mode 100644
index 00000000..ad5a6ef5
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/path.txt
@@ -0,0 +1,11 @@
+GAMMA Y
+Y F_0
+DELTA_0 GAMMA
+GAMMA Z
+Z B_0
+G_0 T
+T Y
+GAMMA S
+S R
+R Z
+Z T
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oA2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oA2/points.txt
new file mode 100644
index 00000000..41f61b23
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oA2/points.txt
@@ -0,0 +1,15 @@
+GAMMA 0 0 0
+Y 1/2 1/2 0
+T 1/2 1/2 1/2
+T_2 1/2 1/2 -1/2
+Z 0 0 1/2
+Z_2 0 0 -1/2
+S 0 1/2 0
+R 0 1/2 1/2
+R_2 0 1/2 -1/2
+DELTA_0 -X X 0
+F_0 X 1-X 0
+B_0 -X X 1/2
+B_2 -X X -1/2
+G_0 X 1-X 1/2
+G_2 X 1-X -1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_inversion
new file mode 100644
index 00000000..024f69f7
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_inversion
@@ -0,0 +1,12 @@
+oC1Y BPOSCAR-0022558
+ 1.0
+ 3.6793989900000006 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.1535798599999998 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 3.8236792350000002
+ Si Ti
+ 2 2
+Direct
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_noinversion
new file mode 100644
index 00000000..17a251ce
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/POSCAR_noinversion
@@ -0,0 +1,16 @@
+oC1N BPOSCAR-0571636
+ 1.0
+ 4.4114352315552399 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 12.4398762544664478 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.5441456599999999
+ In Cl
+ 4 4
+Direct
+ 0.5000000000000000 0.1136209299999999 0.7500967299999999
+ 0.5000000000000000 0.8863790700000000 0.2500967299999999
+ 0.0000000000000000 0.6136209300000000 0.7500967299999999
+ 0.0000000000000000 0.3863790700000001 0.2500967299999999
+ 0.0000000000000000 0.8444605049999999 0.7659032699999999
+ 0.0000000000000000 0.1555394950000001 0.2659032699999999
+ 0.5000000000000000 0.3444605049999999 0.7659032699999999
+ 0.5000000000000000 0.6555394950000001 0.2659032699999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC1/k_vector_parameters.txt
new file mode 100644
index 00000000..7ded452d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/k_vector_parameters.txt
@@ -0,0 +1 @@
+X (1+a*a/b/b)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC1/path.txt
new file mode 100644
index 00000000..1d8637f2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/path.txt
@@ -0,0 +1,11 @@
+GAMMA Y
+Y C_0
+SIGMA_0 GAMMA
+GAMMA Z
+Z A_0
+E_0 T
+T Y
+GAMMA S
+S R
+R Z
+Z T
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC1/points.txt
new file mode 100644
index 00000000..49efa4b4
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC1/points.txt
@@ -0,0 +1,10 @@
+GAMMA 0 0 0
+Y -1/2 1/2 0
+T -1/2 1/2 1/2
+Z 0 0 1/2
+S 0 1/2 0
+R 0 1/2 1/2
+SIGMA_0 X X 0
+C_0 -X 1-X 0
+A_0 X X 1/2
+E_0 -X 1-X 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_inversion
new file mode 100644
index 00000000..cf6d0445
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_inversion
@@ -0,0 +1,16 @@
+oC2Y BPOSCAR-0027639
+ 1.0
+ 8.4287740423760944 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.4132319855084452 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 8.8163600399999993
+ Br I
+ 4 4
+Direct
+ 0.0000000000000000 0.7990394399999999 0.2500000000000000
+ 0.0000000000000000 0.2009605600000000 0.7500000000000000
+ 0.5000000000000000 0.2990394400000000 0.2500000000000000
+ 0.5000000000000000 0.7009605600000001 0.7500000000000000
+ 0.0000000000000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.0000000000000000
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_noinversion
new file mode 100644
index 00000000..13087ec2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/POSCAR_noinversion
@@ -0,0 +1,24 @@
+oC2N BPOSCAR-0560008
+ 1.0
+ 9.0059756537376536 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.5869779485260906 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.9891349099999998
+ P N F
+ 4 4 8
+Direct
+ 0.0000000000000000 0.8668441500000000 0.5046977300000000
+ 0.0000000000000000 0.1331558500000000 0.0046977300000000
+ 0.5000000000000000 0.3668441500000000 0.5046977300000000
+ 0.5000000000000000 0.6331558500000000 0.0046977300000000
+ 0.0000000000000000 0.9118570800000000 0.1953748200000000
+ 0.0000000000000000 0.0881429200000000 0.6953748200000001
+ 0.5000000000000000 0.4118570800000000 0.1953748200000000
+ 0.5000000000000000 0.5881429200000000 0.6953748200000001
+ 0.1317217700000000 0.3063995400000000 0.0694637200000000
+ 0.8682782300000000 0.6936004600000001 0.5694637200000000
+ 0.8682782300000000 0.3063995400000000 0.0694637200000000
+ 0.1317217700000000 0.6936004600000001 0.5694637200000000
+ 0.6317217700000000 0.8063995399999999 0.0694637200000000
+ 0.3682782300000000 0.1936004600000000 0.5694637200000000
+ 0.3682782300000000 0.8063995399999999 0.0694637200000000
+ 0.6317217700000000 0.1936004600000000 0.5694637200000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC2/k_vector_parameters.txt
new file mode 100644
index 00000000..50668952
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/k_vector_parameters.txt
@@ -0,0 +1 @@
+X (1+b*b/a/a)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC2/path.txt
new file mode 100644
index 00000000..ad5a6ef5
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/path.txt
@@ -0,0 +1,11 @@
+GAMMA Y
+Y F_0
+DELTA_0 GAMMA
+GAMMA Z
+Z B_0
+G_0 T
+T Y
+GAMMA S
+S R
+R Z
+Z T
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oC2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oC2/points.txt
new file mode 100644
index 00000000..41f61b23
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oC2/points.txt
@@ -0,0 +1,15 @@
+GAMMA 0 0 0
+Y 1/2 1/2 0
+T 1/2 1/2 1/2
+T_2 1/2 1/2 -1/2
+Z 0 0 1/2
+Z_2 0 0 -1/2
+S 0 1/2 0
+R 0 1/2 1/2
+R_2 0 1/2 -1/2
+DELTA_0 -X X 0
+F_0 X 1-X 0
+B_0 -X X 1/2
+B_2 -X X -1/2
+G_0 X 1-X 1/2
+G_2 X 1-X -1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_inversion
new file mode 100644
index 00000000..3fe3cbfa
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_inversion
@@ -0,0 +1,20 @@
+oF1Y BPOSCAR-0614565
+ 1.0
+ 2.7462061222599123 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 7.2623585400000694 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 11.4917672794962744
+ Cu O
+ 4 8
+Direct
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.6021200900000001
+ 0.5000000000000000 0.5000000000000000 0.8978799099999999
+ 0.0000000000000000 0.0000000000000000 0.1021200900000001
+ 0.5000000000000000 0.0000000000000000 0.3978799099999999
+ 0.5000000000000000 0.5000000000000000 0.1021200900000001
+ 0.0000000000000000 0.5000000000000000 0.3978799099999999
+ 0.5000000000000000 0.0000000000000000 0.6021200900000001
+ 0.0000000000000000 0.0000000000000000 0.8978799099999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_noinversion
new file mode 100644
index 00000000..e897f485
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/POSCAR_noinversion
@@ -0,0 +1,16 @@
+oF1N BPOSCAR-0685145
+ 1.0
+ 2.5153398345521460 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.0450801374370702 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.3398312607247256
+ B N
+ 4 4
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0004411600000001
+ 0.0000000000000000 0.5000000000000000 0.5004411600000001
+ 0.5000000000000000 0.0000000000000000 0.5004411600000001
+ 0.5000000000000000 0.5000000000000000 0.0004411600000001
+ 0.0000000000000000 0.0000000000000000 0.6665199100000001
+ 0.0000000000000000 0.5000000000000000 0.1665199100000000
+ 0.5000000000000000 0.0000000000000000 0.1665199100000000
+ 0.5000000000000000 0.5000000000000000 0.6665199100000001
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF1/k_vector_parameters.txt
new file mode 100644
index 00000000..875b14c1
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/k_vector_parameters.txt
@@ -0,0 +1,2 @@
+J (1+a*a/b/b-a*a/c/c)/4
+H (1+a*a/b/b+a*a/c/c)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF1/path.txt
new file mode 100644
index 00000000..c8f9040d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/path.txt
@@ -0,0 +1,9 @@
+GAMMA Y
+Y T
+T Z
+Z GAMMA
+GAMMA SIGMA_0
+U_0 T
+Y C_0
+A_0 Z
+GAMMA L
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF1/points.txt
new file mode 100644
index 00000000..60da6b08
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF1/points.txt
@@ -0,0 +1,9 @@
+GAMMA 0 0 0
+T 1 1/2 1/2
+Z 1/2 1/2 0
+Y 1/2 0 1/2
+SIGMA_0 0 H H
+U_0 1 1-H 1-H
+A_0 1/2 1/2+J J
+C_0 1/2 1/2-J 1-J
+L 1/2 1/2 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oF2/POSCAR_noinversion
new file mode 100644
index 00000000..e58b6557
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/POSCAR_noinversion
@@ -0,0 +1,32 @@
+oF2N BPOSCAR-0569272
+ 1.0
+ 10.4292567500000608 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 21.2694236321398442 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.5880580299681384
+ Cs Se
+ 16 8
+Direct
+ 0.1729328200000002 0.5632488700000001 0.9531259500000002
+ 0.8270671799999998 0.4367511299999999 0.9531259500000002
+ 0.0770671799999998 0.3132488700000001 0.7031259500000002
+ 0.9229328200000002 0.6867511299999999 0.7031259500000002
+ 0.1729328200000002 0.0632488700000001 0.4531259500000002
+ 0.8270671799999998 0.9367511299999998 0.4531259500000002
+ 0.0770671799999998 0.8132488700000001 0.2031259500000002
+ 0.9229328200000002 0.1867511299999999 0.2031259500000002
+ 0.6729328200000002 0.5632488700000001 0.4531259500000002
+ 0.3270671799999998 0.4367511299999999 0.4531259500000002
+ 0.5770671799999998 0.3132488700000001 0.2031259500000002
+ 0.4229328200000002 0.6867511299999999 0.2031259500000002
+ 0.6729328200000002 0.0632488700000001 0.9531259500000002
+ 0.3270671799999998 0.9367511299999998 0.9531259500000002
+ 0.5770671799999998 0.8132488700000001 0.7031259500000002
+ 0.4229328200000002 0.1867511299999999 0.7031259500000002
+ 0.0000000000000000 0.5000000000000000 0.4701481000000003
+ 0.7500000000000000 0.7500000000000000 0.2201481000000003
+ 0.0000000000000000 0.0000000000000000 0.9701481000000002
+ 0.7500000000000000 0.2500000000000000 0.7201481000000003
+ 0.5000000000000000 0.5000000000000000 0.9701481000000002
+ 0.2500000000000000 0.7500000000000000 0.7201481000000003
+ 0.5000000000000000 0.0000000000000000 0.4701481000000003
+ 0.2500000000000000 0.2500000000000000 0.2201481000000003
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF2/k_vector_parameters.txt
new file mode 100644
index 00000000..6b9898da
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/k_vector_parameters.txt
@@ -0,0 +1,2 @@
+J (1+c*c/a/a-c*c/b/b)/4
+K (1+c*c/a/a+c*c/b/b)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF2/path.txt
new file mode 100644
index 00000000..bddd09d0
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/path.txt
@@ -0,0 +1,9 @@
+GAMMA T
+T Z
+Z Y
+Y GAMMA
+GAMMA LAMBDA_0
+Q_0 Z
+T G_0
+H_0 Y
+GAMMA L
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF2/points.txt
new file mode 100644
index 00000000..684f82a4
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF2/points.txt
@@ -0,0 +1,9 @@
+GAMMA 0 0 0
+T 0 1/2 1/2
+Z 1/2 1/2 1
+Y 1/2 0 1/2
+LAMBDA_0 K K 0
+Q_0 1-K 1-K 1
+G_0 1/2-J 1-J 1/2
+H_0 1/2+J J 1/2
+L 1/2 1/2 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_inversion
new file mode 100644
index 00000000..9855c66e
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_inversion
@@ -0,0 +1,40 @@
+oF3Y BPOSCAR-0029752
+ 1.0
+ 7.4214640959206575 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 7.7727154597461103 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 7.9121098820103706
+ Ni Ge Pt
+ 8 8 16
+Direct
+ 0.0000000000000000 0.2013824000000001 0.0000000000000000
+ 0.0000000000000000 0.7986175999999999 0.0000000000000000
+ 0.0000000000000000 0.7013824000000001 0.5000000000000000
+ 0.0000000000000000 0.2986176000000000 0.5000000000000000
+ 0.5000000000000000 0.2013824000000001 0.5000000000000000
+ 0.5000000000000000 0.7986175999999999 0.5000000000000000
+ 0.5000000000000000 0.7013824000000001 0.0000000000000000
+ 0.5000000000000000 0.2986176000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.2326445950000000
+ 0.0000000000000000 0.0000000000000000 0.7673554050000000
+ 0.0000000000000000 0.5000000000000000 0.7326445950000000
+ 0.0000000000000000 0.5000000000000000 0.2673554050000000
+ 0.5000000000000000 0.0000000000000000 0.7326445950000000
+ 0.5000000000000000 0.0000000000000000 0.2673554050000000
+ 0.5000000000000000 0.5000000000000000 0.2326445950000000
+ 0.5000000000000000 0.5000000000000000 0.7673554050000000
+ 0.6979597600000003 0.0000000000000000 0.0000000000000000
+ 0.7500000000000000 0.2500000000000000 0.2500000000000000
+ 0.3020402399999998 0.0000000000000000 0.0000000000000000
+ 0.7500000000000000 0.7500000000000000 0.2500000000000000
+ 0.6979597600000003 0.5000000000000000 0.5000000000000000
+ 0.7500000000000000 0.7500000000000000 0.7500000000000000
+ 0.3020402399999998 0.5000000000000000 0.5000000000000000
+ 0.7500000000000000 0.2500000000000000 0.7500000000000000
+ 0.1979597600000002 0.0000000000000000 0.5000000000000000
+ 0.2500000000000000 0.2500000000000000 0.7500000000000000
+ 0.8020402399999997 0.0000000000000000 0.5000000000000000
+ 0.2500000000000000 0.7500000000000000 0.7500000000000000
+ 0.1979597600000002 0.5000000000000000 0.0000000000000000
+ 0.2500000000000000 0.7500000000000000 0.2500000000000000
+ 0.8020402399999997 0.5000000000000000 0.0000000000000000
+ 0.2500000000000000 0.2500000000000000 0.2500000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_noinversion
new file mode 100644
index 00000000..e72abd44
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/POSCAR_noinversion
@@ -0,0 +1,24 @@
+oF3N BPOSCAR-0022009
+ 1.0
+ 6.2363014538798494 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 24.0015979387369036 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 6.2508834982500243
+ Se Pb
+ 8 8
+Direct
+ 0.5000000000000000 0.1894212000000000 0.9850017800000000
+ 0.5000000000000000 0.8105788000000000 0.9850017800000000
+ 0.5000000000000000 0.6894212000000000 0.4850017799999999
+ 0.5000000000000000 0.3105788000000000 0.4850017799999999
+ 0.0000000000000000 0.1894212000000000 0.4850017799999999
+ 0.0000000000000000 0.8105788000000000 0.4850017799999999
+ 0.0000000000000000 0.6894212000000000 0.9850017800000000
+ 0.0000000000000000 0.3105788000000000 0.9850017800000000
+ 0.0000000000000000 0.1927314850000000 0.9979982250000000
+ 0.0000000000000000 0.8072685150000001 0.9979982250000000
+ 0.0000000000000000 0.6927314849999999 0.4979982249999999
+ 0.0000000000000000 0.3072685150000000 0.4979982249999999
+ 0.5000000000000000 0.1927314850000000 0.4979982249999999
+ 0.5000000000000000 0.8072685150000001 0.4979982249999999
+ 0.5000000000000000 0.6927314849999999 0.9979982250000000
+ 0.5000000000000000 0.3072685150000000 0.9979982250000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF3/k_vector_parameters.txt
new file mode 100644
index 00000000..dc832b13
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/k_vector_parameters.txt
@@ -0,0 +1,3 @@
+H (1+a*a/b/b-a*a/c/c)/4
+K (1+b*b/a/a-b*b/c/c)/4
+P (1+c*c/b/b-c*c/a/a)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF3/path.txt
new file mode 100644
index 00000000..d40b0833
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/path.txt
@@ -0,0 +1,10 @@
+GAMMA Y
+Y C_0
+A_0 Z
+Z B_0
+D_0 T
+T G_0
+H_0 Y
+T GAMMA
+GAMMA Z
+GAMMA L
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oF3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oF3/points.txt
new file mode 100644
index 00000000..effbb545
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oF3/points.txt
@@ -0,0 +1,11 @@
+GAMMA 0 0 0
+T 0 1/2 1/2
+Z 1/2 1/2 0
+Y 1/2 0 1/2
+A_0 1/2 1/2+H H
+C_0 1/2 1/2-H 1-H
+B_0 1/2+K 1/2 K
+D_0 1/2-K 1/2 1-K
+G_0 P 1/2+P 1/2
+H_0 1-P 1/2-P 1/2
+L 1/2 1/2 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_inversion
new file mode 100644
index 00000000..2c22c1ea
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_inversion
@@ -0,0 +1,12 @@
+oI1Y BPOSCAR-0684664
+ 1.0
+ 3.1118027642203017 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.3500051348576578 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.7866263658364208
+ Ga Sb
+ 2 2
+Direct
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_noinversion
new file mode 100644
index 00000000..90b535b0
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/POSCAR_noinversion
@@ -0,0 +1,16 @@
+oI1N BPOSCAR-0025596
+ 1.0
+ 2.6917850833772863 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 3.3132275496844019 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 10.0701233878206633
+ Li O Ni
+ 2 4 2
+Direct
+ 0.5000000000000000 0.0000000000000000 0.7724267500000002
+ 0.0000000000000000 0.5000000000000000 0.2724267500000001
+ 0.5000000000000000 0.5000000000000000 0.8826666700000001
+ 0.5000000000000000 0.5000000000000000 0.1307543700000000
+ 0.0000000000000000 0.0000000000000000 0.3826666700000001
+ 0.0000000000000000 0.0000000000000000 0.6307543700000000
+ 0.0000000000000000 0.5000000000000000 0.0071568500000000
+ 0.5000000000000000 0.0000000000000000 0.5071568500000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI1/k_vector_parameters.txt
new file mode 100644
index 00000000..69135c83
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/k_vector_parameters.txt
@@ -0,0 +1,4 @@
+Z (1+a*a/c/c)/4
+H (1+b*b/c/c)/4
+D (b*b-a*a)/4/c/c
+N (a*a+b*b)/4/c/c
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI1/path.txt
new file mode 100644
index 00000000..c8757548
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/path.txt
@@ -0,0 +1,11 @@
+GAMMA X
+X F_2
+SIGMA_0 GAMMA
+GAMMA Y_0
+U_0 X
+GAMMA R
+R W
+W S
+S GAMMA
+GAMMA T
+T W
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI1/points.txt
new file mode 100644
index 00000000..dcd6eea2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI1/points.txt
@@ -0,0 +1,13 @@
+GAMMA 0 0 0
+X 1/2 1/2 -1/2
+S 1/2 0 0
+R 0 1/2 0
+T 0 0 1/2
+W 1/4 1/4 1/4
+SIGMA_0 -Z Z Z
+F_2 Z 1-Z -Z
+Y_0 H -H H
+U_0 1-H H -H
+L_0 -N N 1/2-D
+M_0 N -N 1/2+D
+J_0 1/2-D 1/2+D -N
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oI2/POSCAR_noinversion
new file mode 100644
index 00000000..713c157f
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/POSCAR_noinversion
@@ -0,0 +1,28 @@
+oI2N BPOSCAR-0866845
+ 1.0
+ 9.8579857154919317 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.8879312335870866 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 7.0088148600000002
+ Ca Sn S
+ 4 4 12
+Direct
+ 0.7500000000000000 0.0305814600000002 0.0354614700000000
+ 0.2500000000000000 0.9694185399999998 0.0354614700000000
+ 0.2500000000000000 0.5305814600000002 0.5354614700000000
+ 0.7500000000000000 0.4694185399999998 0.5354614700000000
+ 0.0000000000000000 0.0000000000000000 0.5085183400000000
+ 0.0000000000000000 0.5000000000000000 0.0085183399999999
+ 0.5000000000000000 0.5000000000000000 0.0085183399999999
+ 0.5000000000000000 0.0000000000000000 0.5085183400000000
+ 0.2500000000000000 0.3739959450000001 0.9444468950000000
+ 0.7500000000000000 0.6260040549999999 0.9444468950000000
+ 0.0756857550000000 0.7605886250000001 0.7620421749999999
+ 0.9243142450000000 0.2394113749999999 0.7620421749999999
+ 0.9243142450000000 0.2605886250000002 0.2620421750000000
+ 0.0756857550000000 0.7394113749999999 0.2620421750000000
+ 0.7500000000000000 0.8739959450000001 0.4444468950000000
+ 0.2500000000000000 0.1260040549999999 0.4444468950000000
+ 0.5756857550000001 0.2605886250000002 0.2620421750000000
+ 0.4243142450000000 0.7394113749999999 0.2620421750000000
+ 0.4243142450000000 0.7605886250000001 0.7620421749999999
+ 0.5756857550000001 0.2394113749999998 0.7620421749999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI2/k_vector_parameters.txt
new file mode 100644
index 00000000..aa895a7d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/k_vector_parameters.txt
@@ -0,0 +1,4 @@
+Z (1+b*b/a/a)/4
+H (1+c*c/a/a)/4
+D (c*c-b*b)/4/a/a
+N (b*b+c*c)/4/a/a
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI2/path.txt
new file mode 100644
index 00000000..c30cb7c2
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/path.txt
@@ -0,0 +1,11 @@
+GAMMA X
+X U_2
+Y_0 GAMMA
+GAMMA LAMBDA_0
+G_2 X
+GAMMA R
+R W
+W S
+S GAMMA
+GAMMA T
+T W
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI2/points.txt
new file mode 100644
index 00000000..c900673f
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI2/points.txt
@@ -0,0 +1,13 @@
+GAMMA 0 0 0
+X -1/2 1/2 1/2
+S 1/2 0 0
+R 0 1/2 0
+T 0 0 1/2
+W 1/4 1/4 1/4
+Y_0 Z -Z Z
+U_2 -Z Z 1-Z
+LAMBDA_0 H H -H
+G_2 -H 1-H H
+K 1/2-D -N N
+K_2 1/2+D N -N
+K_4 -N 1/2-D 1/2+D
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_inversion
new file mode 100644
index 00000000..64345393
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_inversion
@@ -0,0 +1,20 @@
+oI3Y BPOSCAR-0030435
+ 1.0
+ 8.1511447228165714 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.0461430197341626 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 7.8659149207773531
+ Zn Ba
+ 8 4
+Direct
+ 0.6724366150000002 0.7500000000000000 0.4101287450000002
+ 0.8275633849999998 0.7500000000000000 0.0898712549999998
+ 0.6724366150000002 0.2500000000000000 0.5898712549999998
+ 0.8275633849999998 0.2500000000000000 0.9101287450000002
+ 0.1724366150000002 0.2500000000000000 0.9101287450000002
+ 0.3275633849999998 0.2500000000000000 0.5898712549999998
+ 0.1724366150000002 0.7500000000000000 0.0898712549999998
+ 0.3275633849999998 0.7500000000000000 0.4101287450000002
+ 0.5000000000000000 0.7500000000000000 0.8073779000000001
+ 0.0000000000000000 0.7500000000000000 0.6926220999999999
+ 0.0000000000000000 0.2500000000000000 0.3073779000000001
+ 0.5000000000000000 0.2500000000000000 0.1926220999999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion
new file mode 100644
index 00000000..bc141bc5
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion
@@ -0,0 +1,12 @@
+Hg1 O1
+1.0
+ 3.3110001087 0.0000000000 0.0000000000
+ 0.0000000000 5.5260000229 0.0000000000
+ 0.0000000000 0.0000000000 3.5260000229
+ Hg O
+ 2 2
+Direct
+ 0.000000000 0.000000000 0.000000000
+ 0.500000000 0.500000000 0.500000000
+ 0.000000000 0.500000000 0.170000002
+ 0.500000000 0.000000000 0.670000017
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion_alternate b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion_alternate
new file mode 100644
index 00000000..3f54d672
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/POSCAR_noinversion_alternate
@@ -0,0 +1,12 @@
+oI3N BPOSCAR-0684597
+ 1.0
+ 5.8530782471827889 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.1588711111131813 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 3.1607929446275036
+ In Sb
+ 2 2
+Direct
+ 0.5000000000000000 0.0000000000000000 0.5976610100000000
+ 0.0000000000000000 0.5000000000000000 0.0976610100000000
+ 0.0000000000000000 0.0000000000000000 0.1515127200000000
+ 0.5000000000000000 0.5000000000000000 0.6515127199999999
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI3/k_vector_parameters.txt
new file mode 100644
index 00000000..5a7bcb32
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/k_vector_parameters.txt
@@ -0,0 +1,4 @@
+Z (1+c*c/b/b)/4
+Y (1+a*a/b/b)/4
+D (a*a-c*c)/4/b/b
+M (c*c+a*a)/4/b/b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI3/path.txt
new file mode 100644
index 00000000..49bd952d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/path.txt
@@ -0,0 +1,11 @@
+GAMMA X
+X F_0
+SIGMA_0 GAMMA
+GAMMA LAMBDA_0
+G_0 X
+GAMMA R
+R W
+W S
+S GAMMA
+GAMMA T
+T W
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oI3/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oI3/points.txt
new file mode 100644
index 00000000..15aa13ab
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oI3/points.txt
@@ -0,0 +1,13 @@
+GAMMA 0 0 0
+X 1/2 -1/2 1/2
+S 1/2 0 0
+R 0 1/2 0
+T 0 0 1/2
+W 1/4 1/4 1/4
+SIGMA_0 -Y Y Y
+F_0 Y -Y 1-Y
+LAMBDA_0 Z Z -Z
+G_0 1-Z -Z Z
+V_0 M 1/2-D -M
+H_0 -M 1/2+D M
+H_2 1/2+D -M 1/2-D
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_inversion
new file mode 100644
index 00000000..a54e65d9
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_inversion
@@ -0,0 +1,11 @@
+oP1Y BPOSCAR-0705439
+ 1.0
+ 2.2658624671048813 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.9598350933265563 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 6.5642248417443598
+ Cu O
+ 1 2
+Direct
+ 0.5000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.0000000000000000 0.9050977550000002
+ 0.5000000000000000 0.0000000000000000 0.0949022449999998
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_noinversion
new file mode 100644
index 00000000..d0e84f46
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/POSCAR_noinversion
@@ -0,0 +1,10 @@
+oP1N BPOSCAR-0019744
+ 1.0
+ 3.0414632300000002 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.1468502899999997 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 3.1394173099999998
+ In Sb
+ 1 1
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0024766500000000
+ 0.0000000000000000 0.5000000000000000 0.7475233500000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/oP1/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/oP1/path.txt
new file mode 100644
index 00000000..3f09bcc7
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/path.txt
@@ -0,0 +1,12 @@
+GAMMA X
+X S
+S Y
+Y GAMMA
+GAMMA Z
+Z U
+U R
+R T
+T Z
+X U
+Y T
+S R
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/oP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/oP1/points.txt
new file mode 100644
index 00000000..81346fd4
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/oP1/points.txt
@@ -0,0 +1,8 @@
+GAMMA 0 0 0
+X 1/2 0 0
+Z 0 0 1/2
+U 1/2 0 1/2
+Y 0 1/2 0
+S 1/2 1/2 0
+T 0 1/2 1/2
+R 1/2 1/2 1/2
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_inversion
new file mode 100644
index 00000000..85befb72
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_inversion
@@ -0,0 +1,18 @@
+tI1Y BPOSCAR-0012635
+ 1.0
+ 6.6011835174224816 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 6.6011835174224816 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.0143642377425790
+ Ti Au
+ 2 8
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.1049425700000000 0.7069229100000002 0.5000000000000000
+ 0.8950574300000000 0.2930770899999998 0.5000000000000000
+ 0.2930770899999998 0.1049425700000000 0.5000000000000000
+ 0.7069229100000002 0.8950574300000000 0.5000000000000000
+ 0.6049425700000000 0.2069229100000002 0.0000000000000000
+ 0.3950574300000000 0.7930770899999998 0.0000000000000000
+ 0.7930770899999998 0.6049425700000000 0.0000000000000000
+ 0.2069229100000002 0.3950574300000000 0.0000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_noinversion
new file mode 100644
index 00000000..07e30986
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/POSCAR_noinversion
@@ -0,0 +1,20 @@
+tI1N BPOSCAR-0540284
+ 1.0
+ 5.4794836100000683 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 5.4794836100000683 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.1848378200001886
+ Cu O P
+ 2 8 2
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.1343956450000000 0.6953349850000001 0.9145759350000002
+ 0.6953349850000001 0.8656043550000001 0.0854240649999999
+ 0.8656043550000001 0.3046650149999998 0.9145759350000002
+ 0.3046650149999998 0.1343956450000000 0.0854240649999999
+ 0.6343956449999999 0.1953349850000001 0.4145759350000001
+ 0.1953349850000001 0.3656043550000000 0.5854240649999999
+ 0.3656043550000000 0.8046650149999999 0.4145759350000001
+ 0.8046650149999999 0.6343956449999999 0.5854240649999999
+ 0.5000000000000000 0.0000000000000000 0.2500000000000000
+ 0.0000000000000000 0.5000000000000000 0.7500000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI1/k_vector_parameters.txt
new file mode 100644
index 00000000..52bdedb4
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/k_vector_parameters.txt
@@ -0,0 +1 @@
+H (1+c*c/a/a)/4
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI1/path.txt
new file mode 100644
index 00000000..d9a5150f
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/path.txt
@@ -0,0 +1,8 @@
+GAMMA X
+X M
+M GAMMA
+GAMMA Z
+Z_0 M
+X P
+P N
+N GAMMA
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI1/points.txt
new file mode 100644
index 00000000..4c35fd34
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI1/points.txt
@@ -0,0 +1,7 @@
+GAMMA 0 0 0
+M -1/2 1/2 1/2
+X 0 0 1/2
+P 1/4 1/4 1/4
+Z H H -H
+Z_0 -H 1-H H
+N 0 1/2 0
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_inversion
new file mode 100644
index 00000000..d3b69d61
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_inversion
@@ -0,0 +1,12 @@
+tI2Y BPOSCAR-0019275
+ 1.0
+ 3.0845227912262532 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 3.0845227912262532 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 4.0861539485071861
+ O Co
+ 2 2
+Direct
+ 0.0000000000000000 0.0000000000000000 0.5000000000000000
+ 0.5000000000000000 0.5000000000000000 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_noinversion
new file mode 100644
index 00000000..4760e77d
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/POSCAR_noinversion
@@ -0,0 +1,12 @@
+tI2N BPOSCAR-0007590
+ 1.0
+ 3.5651955268357800 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 3.5651955268357800 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 5.7414401540403173
+ P Ge
+ 2 2
+Direct
+ 0.5000000000000000 0.5000000000000000 0.9233913399999996
+ 0.0000000000000000 0.0000000000000000 0.4233913399999996
+ 0.0000000000000000 0.0000000000000000 0.0036086699999997
+ 0.5000000000000000 0.5000000000000000 0.5036086699999996
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI2/k_vector_parameters.txt
new file mode 100644
index 00000000..5dcb4b54
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/k_vector_parameters.txt
@@ -0,0 +1,2 @@
+H (1+a*a/c/c)/4
+Z a*a/2/c/c
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI2/path.txt
new file mode 100644
index 00000000..39c00310
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/path.txt
@@ -0,0 +1,9 @@
+GAMMA X
+X P
+P N
+N GAMMA
+GAMMA M
+M S
+S_0 GAMMA
+X R
+G M
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tI2/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/tI2/points.txt
new file mode 100644
index 00000000..8ed3864f
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tI2/points.txt
@@ -0,0 +1,9 @@
+GAMMA 0 0 0
+M 1/2 1/2 -1/2
+X 0 0 1/2
+P 1/4 1/4 1/4
+N 0 1/2 0
+S_0 -H H H
+S H 1-H -H
+R -Z Z 1/2
+G 1/2 1/2 -Z
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_inversion b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_inversion
new file mode 100644
index 00000000..3f099fc0
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_inversion
@@ -0,0 +1,10 @@
+tP1Y BPOSCAR-0000949
+ 1.0
+ 2.6983934120929063 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 2.6983934120929063 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 3.7266309199999998
+ Co Pt
+ 1 1
+Direct
+ 0.0000000000000000 0.0000000000000000 0.0000000000000000
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_noinversion b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_noinversion
new file mode 100644
index 00000000..eab5ebba
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/POSCAR_noinversion
@@ -0,0 +1,11 @@
+tP1N BPOSCAR-0033154
+ 1.0
+ 4.2857283318865660 0.0000000000000000 0.0000000000000000
+ 0.0000000000000000 4.2857283318865660 0.0000000000000000
+ 0.0000000000000000 0.0000000000000000 6.3547812573430607
+ Ag I
+ 1 2
+Direct
+ 0.5000000000000000 0.5000000000000000 0.5000000000000000
+ 0.0000000000000000 0.5000000000000000 0.7777616999999999
+ 0.5000000000000000 0.0000000000000000 0.2222383000000001
\ No newline at end of file
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/k_vector_parameters.txt b/susyexists/src/seekpath/hpkot/band_path_data/tP1/k_vector_parameters.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/path.txt b/susyexists/src/seekpath/hpkot/band_path_data/tP1/path.txt
new file mode 100644
index 00000000..0f59a1a7
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/path.txt
@@ -0,0 +1,9 @@
+GAMMA X
+X M
+M GAMMA
+GAMMA Z
+Z R
+R A
+A Z
+X R
+M A
diff --git a/susyexists/src/seekpath/hpkot/band_path_data/tP1/points.txt b/susyexists/src/seekpath/hpkot/band_path_data/tP1/points.txt
new file mode 100644
index 00000000..947b3576
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/band_path_data/tP1/points.txt
@@ -0,0 +1,6 @@
+GAMMA 0 0 0
+Z 0 0 1/2
+M 1/2 1/2 0
+A 1/2 1/2 1/2
+R 0 1/2 1/2
+X 0 1/2 0
diff --git a/susyexists/src/seekpath/hpkot/spg_db.py b/susyexists/src/seekpath/hpkot/spg_db.py
new file mode 100644
index 00000000..71a7785c
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/spg_db.py
@@ -0,0 +1,472 @@
+"""Basic information on spacegroups."""
+# Given a spgroup number, return
+# the crystal family letter, the centering, and if the corresponding
+# pointgroup has inversion (True) or not.
+# Generated from the output of spg_mapping.get_spgroup_data_realtime
+# using spglib v.1.9.4.
+
+spgroup_data = {
+ 1: ("a", "P", False),
+ 2: ("a", "P", True),
+ 3: ("m", "P", False),
+ 4: ("m", "P", False),
+ 5: ("m", "C", False),
+ 6: ("m", "P", False),
+ 7: ("m", "P", False),
+ 8: ("m", "C", False),
+ 9: ("m", "C", False),
+ 10: ("m", "P", True),
+ 11: ("m", "P", True),
+ 12: ("m", "C", True),
+ 13: ("m", "P", True),
+ 14: ("m", "P", True),
+ 15: ("m", "C", True),
+ 16: ("o", "P", False),
+ 17: ("o", "P", False),
+ 18: ("o", "P", False),
+ 19: ("o", "P", False),
+ 20: ("o", "C", False),
+ 21: ("o", "C", False),
+ 22: ("o", "F", False),
+ 23: ("o", "I", False),
+ 24: ("o", "I", False),
+ 25: ("o", "P", False),
+ 26: ("o", "P", False),
+ 27: ("o", "P", False),
+ 28: ("o", "P", False),
+ 29: ("o", "P", False),
+ 30: ("o", "P", False),
+ 31: ("o", "P", False),
+ 32: ("o", "P", False),
+ 33: ("o", "P", False),
+ 34: ("o", "P", False),
+ 35: ("o", "C", False),
+ 36: ("o", "C", False),
+ 37: ("o", "C", False),
+ 38: ("o", "A", False),
+ 39: ("o", "A", False),
+ 40: ("o", "A", False),
+ 41: ("o", "A", False),
+ 42: ("o", "F", False),
+ 43: ("o", "F", False),
+ 44: ("o", "I", False),
+ 45: ("o", "I", False),
+ 46: ("o", "I", False),
+ 47: ("o", "P", True),
+ 48: ("o", "P", True),
+ 49: ("o", "P", True),
+ 50: ("o", "P", True),
+ 51: ("o", "P", True),
+ 52: ("o", "P", True),
+ 53: ("o", "P", True),
+ 54: ("o", "P", True),
+ 55: ("o", "P", True),
+ 56: ("o", "P", True),
+ 57: ("o", "P", True),
+ 58: ("o", "P", True),
+ 59: ("o", "P", True),
+ 60: ("o", "P", True),
+ 61: ("o", "P", True),
+ 62: ("o", "P", True),
+ 63: ("o", "C", True),
+ 64: ("o", "C", True),
+ 65: ("o", "C", True),
+ 66: ("o", "C", True),
+ 67: ("o", "C", True),
+ 68: ("o", "C", True),
+ 69: ("o", "F", True),
+ 70: ("o", "F", True),
+ 71: ("o", "I", True),
+ 72: ("o", "I", True),
+ 73: ("o", "I", True),
+ 74: ("o", "I", True),
+ 75: ("t", "P", False),
+ 76: ("t", "P", False),
+ 77: ("t", "P", False),
+ 78: ("t", "P", False),
+ 79: ("t", "I", False),
+ 80: ("t", "I", False),
+ 81: ("t", "P", False),
+ 82: ("t", "I", False),
+ 83: ("t", "P", True),
+ 84: ("t", "P", True),
+ 85: ("t", "P", True),
+ 86: ("t", "P", True),
+ 87: ("t", "I", True),
+ 88: ("t", "I", True),
+ 89: ("t", "P", False),
+ 90: ("t", "P", False),
+ 91: ("t", "P", False),
+ 92: ("t", "P", False),
+ 93: ("t", "P", False),
+ 94: ("t", "P", False),
+ 95: ("t", "P", False),
+ 96: ("t", "P", False),
+ 97: ("t", "I", False),
+ 98: ("t", "I", False),
+ 99: ("t", "P", False),
+ 100: ("t", "P", False),
+ 101: ("t", "P", False),
+ 102: ("t", "P", False),
+ 103: ("t", "P", False),
+ 104: ("t", "P", False),
+ 105: ("t", "P", False),
+ 106: ("t", "P", False),
+ 107: ("t", "I", False),
+ 108: ("t", "I", False),
+ 109: ("t", "I", False),
+ 110: ("t", "I", False),
+ 111: ("t", "P", False),
+ 112: ("t", "P", False),
+ 113: ("t", "P", False),
+ 114: ("t", "P", False),
+ 115: ("t", "P", False),
+ 116: ("t", "P", False),
+ 117: ("t", "P", False),
+ 118: ("t", "P", False),
+ 119: ("t", "I", False),
+ 120: ("t", "I", False),
+ 121: ("t", "I", False),
+ 122: ("t", "I", False),
+ 123: ("t", "P", True),
+ 124: ("t", "P", True),
+ 125: ("t", "P", True),
+ 126: ("t", "P", True),
+ 127: ("t", "P", True),
+ 128: ("t", "P", True),
+ 129: ("t", "P", True),
+ 130: ("t", "P", True),
+ 131: ("t", "P", True),
+ 132: ("t", "P", True),
+ 133: ("t", "P", True),
+ 134: ("t", "P", True),
+ 135: ("t", "P", True),
+ 136: ("t", "P", True),
+ 137: ("t", "P", True),
+ 138: ("t", "P", True),
+ 139: ("t", "I", True),
+ 140: ("t", "I", True),
+ 141: ("t", "I", True),
+ 142: ("t", "I", True),
+ 143: ("h", "P", False),
+ 144: ("h", "P", False),
+ 145: ("h", "P", False),
+ 146: ("h", "R", False),
+ 147: ("h", "P", True),
+ 148: ("h", "R", True),
+ 149: ("h", "P", False),
+ 150: ("h", "P", False),
+ 151: ("h", "P", False),
+ 152: ("h", "P", False),
+ 153: ("h", "P", False),
+ 154: ("h", "P", False),
+ 155: ("h", "R", False),
+ 156: ("h", "P", False),
+ 157: ("h", "P", False),
+ 158: ("h", "P", False),
+ 159: ("h", "P", False),
+ 160: ("h", "R", False),
+ 161: ("h", "R", False),
+ 162: ("h", "P", True),
+ 163: ("h", "P", True),
+ 164: ("h", "P", True),
+ 165: ("h", "P", True),
+ 166: ("h", "R", True),
+ 167: ("h", "R", True),
+ 168: ("h", "P", False),
+ 169: ("h", "P", False),
+ 170: ("h", "P", False),
+ 171: ("h", "P", False),
+ 172: ("h", "P", False),
+ 173: ("h", "P", False),
+ 174: ("h", "P", False),
+ 175: ("h", "P", True),
+ 176: ("h", "P", True),
+ 177: ("h", "P", False),
+ 178: ("h", "P", False),
+ 179: ("h", "P", False),
+ 180: ("h", "P", False),
+ 181: ("h", "P", False),
+ 182: ("h", "P", False),
+ 183: ("h", "P", False),
+ 184: ("h", "P", False),
+ 185: ("h", "P", False),
+ 186: ("h", "P", False),
+ 187: ("h", "P", False),
+ 188: ("h", "P", False),
+ 189: ("h", "P", False),
+ 190: ("h", "P", False),
+ 191: ("h", "P", True),
+ 192: ("h", "P", True),
+ 193: ("h", "P", True),
+ 194: ("h", "P", True),
+ 195: ("c", "P", False),
+ 196: ("c", "F", False),
+ 197: ("c", "I", False),
+ 198: ("c", "P", False),
+ 199: ("c", "I", False),
+ 200: ("c", "P", True),
+ 201: ("c", "P", True),
+ 202: ("c", "F", True),
+ 203: ("c", "F", True),
+ 204: ("c", "I", True),
+ 205: ("c", "P", True),
+ 206: ("c", "I", True),
+ 207: ("c", "P", False),
+ 208: ("c", "P", False),
+ 209: ("c", "F", False),
+ 210: ("c", "F", False),
+ 211: ("c", "I", False),
+ 212: ("c", "P", False),
+ 213: ("c", "P", False),
+ 214: ("c", "I", False),
+ 215: ("c", "P", False),
+ 216: ("c", "F", False),
+ 217: ("c", "I", False),
+ 218: ("c", "P", False),
+ 219: ("c", "F", False),
+ 220: ("c", "I", False),
+ 221: ("c", "P", True),
+ 222: ("c", "P", True),
+ 223: ("c", "P", True),
+ 224: ("c", "P", True),
+ 225: ("c", "F", True),
+ 226: ("c", "F", True),
+ 227: ("c", "F", True),
+ 228: ("c", "F", True),
+ 229: ("c", "I", True),
+ 230: ("c", "I", True),
+}
+
+centering = {
+ 1: "P",
+ 2: "P",
+ 3: "P",
+ 4: "P",
+ 5: "C",
+ 6: "P",
+ 7: "P",
+ 8: "C",
+ 9: "C",
+ 10: "P",
+ 11: "P",
+ 12: "C",
+ 13: "P",
+ 14: "P",
+ 15: "C",
+ 16: "P",
+ 17: "P",
+ 18: "P",
+ 19: "P",
+ 20: "C",
+ 21: "C",
+ 22: "F",
+ 23: "I",
+ 24: "I",
+ 25: "P",
+ 26: "P",
+ 27: "P",
+ 28: "P",
+ 29: "P",
+ 30: "P",
+ 31: "P",
+ 32: "P",
+ 33: "P",
+ 34: "P",
+ 35: "C",
+ 36: "C",
+ 37: "C",
+ 38: "A",
+ 39: "A",
+ 40: "A",
+ 41: "A",
+ 42: "F",
+ 43: "F",
+ 44: "I",
+ 45: "I",
+ 46: "I",
+ 47: "P",
+ 48: "P",
+ 49: "P",
+ 50: "P",
+ 51: "P",
+ 52: "P",
+ 53: "P",
+ 54: "P",
+ 55: "P",
+ 56: "P",
+ 57: "P",
+ 58: "P",
+ 59: "P",
+ 60: "P",
+ 61: "P",
+ 62: "P",
+ 63: "C",
+ 64: "C",
+ 65: "C",
+ 66: "C",
+ 67: "C",
+ 68: "C",
+ 69: "F",
+ 70: "F",
+ 71: "I",
+ 72: "I",
+ 73: "I",
+ 74: "I",
+ 75: "P",
+ 76: "P",
+ 77: "P",
+ 78: "P",
+ 79: "I",
+ 80: "I",
+ 81: "P",
+ 82: "I",
+ 83: "P",
+ 84: "P",
+ 85: "P",
+ 86: "P",
+ 87: "I",
+ 88: "I",
+ 89: "P",
+ 90: "P",
+ 91: "P",
+ 92: "P",
+ 93: "P",
+ 94: "P",
+ 95: "P",
+ 96: "P",
+ 97: "I",
+ 98: "I",
+ 99: "P",
+ 100: "P",
+ 101: "P",
+ 102: "P",
+ 103: "P",
+ 104: "P",
+ 105: "P",
+ 106: "P",
+ 107: "I",
+ 108: "I",
+ 109: "I",
+ 110: "I",
+ 111: "P",
+ 112: "P",
+ 113: "P",
+ 114: "P",
+ 115: "P",
+ 116: "P",
+ 117: "P",
+ 118: "P",
+ 119: "I",
+ 120: "I",
+ 121: "I",
+ 122: "I",
+ 123: "P",
+ 124: "P",
+ 125: "P",
+ 126: "P",
+ 127: "P",
+ 128: "P",
+ 129: "P",
+ 130: "P",
+ 131: "P",
+ 132: "P",
+ 133: "P",
+ 134: "P",
+ 135: "P",
+ 136: "P",
+ 137: "P",
+ 138: "P",
+ 139: "I",
+ 140: "I",
+ 141: "I",
+ 142: "I",
+ 143: "P",
+ 144: "P",
+ 145: "P",
+ 146: "R",
+ 147: "P",
+ 148: "R",
+ 149: "P",
+ 150: "P",
+ 151: "P",
+ 152: "P",
+ 153: "P",
+ 154: "P",
+ 155: "R",
+ 156: "P",
+ 157: "P",
+ 158: "P",
+ 159: "P",
+ 160: "R",
+ 161: "R",
+ 162: "P",
+ 163: "P",
+ 164: "P",
+ 165: "P",
+ 166: "R",
+ 167: "R",
+ 168: "P",
+ 169: "P",
+ 170: "P",
+ 171: "P",
+ 172: "P",
+ 173: "P",
+ 174: "P",
+ 175: "P",
+ 176: "P",
+ 177: "P",
+ 178: "P",
+ 179: "P",
+ 180: "P",
+ 181: "P",
+ 182: "P",
+ 183: "P",
+ 184: "P",
+ 185: "P",
+ 186: "P",
+ 187: "P",
+ 188: "P",
+ 189: "P",
+ 190: "P",
+ 191: "P",
+ 192: "P",
+ 193: "P",
+ 194: "P",
+ 195: "P",
+ 196: "F",
+ 197: "I",
+ 198: "P",
+ 199: "I",
+ 200: "P",
+ 201: "P",
+ 202: "F",
+ 203: "F",
+ 204: "I",
+ 205: "P",
+ 206: "I",
+ 207: "P",
+ 208: "P",
+ 209: "F",
+ 210: "F",
+ 211: "I",
+ 212: "P",
+ 213: "P",
+ 214: "I",
+ 215: "P",
+ 216: "F",
+ 217: "I",
+ 218: "P",
+ 219: "F",
+ 220: "I",
+ 221: "P",
+ 222: "P",
+ 223: "P",
+ 224: "P",
+ 225: "F",
+ 226: "F",
+ 227: "F",
+ 228: "F",
+ 229: "I",
+ 230: "I",
+}
diff --git a/susyexists/src/seekpath/hpkot/spg_mapping.py b/susyexists/src/seekpath/hpkot/spg_mapping.py
new file mode 100644
index 00000000..d871fe6b
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/spg_mapping.py
@@ -0,0 +1,345 @@
+"""Tools to map a spagegroup to the crystal family or similar requirements."""
+
+
+def get_crystal_family(number):
+ """
+ Given a spacegroup number, returns a string to identify its
+ crystal family (triclinic, monoclinic, ...).
+
+ :param number: the spacegroup number, from 1 to 230
+ """
+ if not isinstance(number, int):
+ raise TypeError("number should be integer")
+ if number < 1:
+ raise ValueError("number should be >= 1")
+ if number <= 2:
+ return "a" # triclinic
+ if number <= 15:
+ return "m" # monoclinic
+ if number <= 74:
+ return "o" # orthorhombic
+ if number <= 142:
+ return "t" # tetragonal
+ if number <= 194:
+ return "h" # trigonal + hexagonal
+ if number <= 230:
+ return "c" # cubic
+ raise ValueError("number should be <= 230")
+
+
+def pointgroup_has_inversion(number):
+ """
+ Return True if the pointgroup with given number has inversion,
+ False otherwise.
+
+ :param number: The integer number of the pointgroup, from 1 to 32.
+ """
+ if number in [2, 5, 8, 11, 15, 17, 20, 23, 27, 29, 32]:
+ return True
+ if number in [
+ 1,
+ 3,
+ 4,
+ 6,
+ 7,
+ 9,
+ 10,
+ 12,
+ 13,
+ 14,
+ 16,
+ 18,
+ 19,
+ 21,
+ 22,
+ 24,
+ 25,
+ 26,
+ 28,
+ 30,
+ 31,
+ ]:
+ return False
+ raise ValueError("number should be between 1 and 32")
+
+
+def pgnum_from_pgint(pgint):
+ """
+ Return the number of the pointgroup (from 1 to 32) from the
+ international pointgroup name.
+ """
+ table = {
+ "C1": 1,
+ "C2": 3,
+ "C2h": 5,
+ "C2v": 7,
+ "C3": 16,
+ "C3h": 22,
+ "C3i": 17,
+ "C3v": 19,
+ "C4": 9,
+ "C4h": 11,
+ "C4v": 13,
+ "C6": 21,
+ "C6h": 23,
+ "C6v": 25,
+ "Ci": 2,
+ "Cs": 4,
+ "D2": 6,
+ "D2d": 14,
+ "D2h": 8,
+ "D3": 18,
+ "D3d": 20,
+ "D3h": 26,
+ "D4": 12,
+ "D4h": 15,
+ "D6": 24,
+ "D6h": 27,
+ "O": 30,
+ "Oh": 32,
+ "S4": 10,
+ "T": 28,
+ "Td": 31,
+ "Th": 29,
+ }
+
+ return table[pgint]
+
+
+def get_spgroup_data():
+ """
+ Return a dictionary that has the spacegroup number as key, and a tuple
+ as value, with content::
+
+ (crystal family letter, centering, has_inversion).
+
+ It loads if from a table in the source code for efficiency.
+ """
+ from .spg_db import spgroup_data
+
+ return spgroup_data
+
+
+def get_spgroup_data_realtime():
+ """
+ Return a dictionary that has the spacegroup number as key, and a tuple
+ as value, with content::
+
+ (crystal family letter, centering, has_inversion),
+
+ got in real time using spglib methods.
+ """
+ import json
+ import spglib
+
+ info = {}
+ for hall_n in range(1, 531):
+ data = spglib.get_spacegroup_type(hall_n)
+ number = data["number"]
+ int_short = data["international_short"]
+ pg_int = data["pointgroup_international"]
+
+ if number not in info:
+ info[int(number)] = (
+ get_crystal_family(number), # get cyrstal family
+ # centering from the first letter of the first
+ # spacegroup that I encounter
+ int_short[0],
+ pointgroup_has_inversion(
+ pgnum_from_pgint(pg_int)
+ ), # pointgroup has inversion
+ )
+ return info
+
+
+def get_P_matrix(bravais_lattice):
+ r"""
+ Return a tuple of length 2 with the P matrix and its inverse::
+
+ (P, invP)
+
+ with :math:`invP = P^{-1}`.
+
+ These :math:`P` matrices are obtained from Table 3 of the HPKOT
+ paper.
+
+ The P matrix is a :math:`3\times 3` matrix is the matrix that converts
+ the lattice vectors from crystallographic conventional
+ :math:`(a,b,c)` to crystallographic primitive :math:`(a_P, b_P, c_P)`
+ as follows: :math:`(a_P, b_P, c_P) = (a,b,c) P`
+
+ The change of (real space) coordinate triples follows instead:
+ :math:`(x_P, y_P, z_P)^T = (P^{-1}) (x,y,z)^T`
+
+ .. note:: the :math:`invP = P^{-1}` matrix is always integer (with values
+ only :math:`-1, 0, 1`) while :math:`P` is rational (non-integer values can be
+ :math:`\pm \frac 1 2` and :math:`\pm \frac 1 3`).
+ """
+ import numpy as np
+
+ if bravais_lattice in ["cP", "tP", "hP", "oP", "mP"]:
+ P = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ invP = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ elif bravais_lattice in ["cF", "oF"]:
+ P = 1.0 / 2.0 * np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]])
+ invP = np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]])
+ elif bravais_lattice in ["cI", "tI", "oI"]:
+ P = 1.0 / 2.0 * np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]])
+ invP = np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]])
+ elif bravais_lattice == "hR":
+ P = 1.0 / 3.0 * np.array([[2, -1, -1], [1, 1, -2], [1, 1, 1]])
+ invP = np.array([[1, 0, 1], [-1, 1, 1], [0, -1, 1]])
+ elif bravais_lattice == "oC":
+ P = 1.0 / 2.0 * np.array([[1, 1, 0], [-1, 1, 0], [0, 0, 2]])
+ invP = np.array([[1, -1, 0], [1, 1, 0], [0, 0, 1]])
+ elif bravais_lattice == "oA":
+ P = 1.0 / 2.0 * np.array([[0, 0, 2], [1, 1, 0], [-1, 1, 0]])
+ invP = np.array([[0, 1, -1], [0, 1, 1], [1, 0, 0]])
+ elif bravais_lattice == "mC":
+ P = 1.0 / 2.0 * np.array([[1, -1, 0], [1, 1, 0], [0, 0, 2]])
+ invP = np.array([[1, 1, 0], [-1, 1, 0], [0, 0, 1]])
+ elif bravais_lattice == "aP":
+ # For aP, I should have already obtained the primitive cell
+ P = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ invP = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ else:
+ raise ValueError("Invalid bravais_lattice {}".format(bravais_lattice))
+
+ return P, invP
+
+
+def get_primitive(structure, bravais_lattice, wrap_to_zero_one=False):
+ """
+ Return the primitive cell from a conventional crystallographic cell.
+
+ :note: the input structure MUST be already standardized by spglib!
+
+ :param structure: should be a tuple of the form
+ (lattice, positions, types) and it MUST be already a conventional
+ crystallographic cell (i.e. as returned by spglib with the ``std_``
+ prefix).
+
+ :param bravais_lattice: a string with the information of the
+ Bravais lattice of the input structure.
+
+ :param wrap_to_zero_one: if True, wrap the scaled coordinates to the
+ :math:`[0,1[` interval. Otherwise, the scaled coordinates will not be
+ changed and can be outside of the :math:`[0,1[` range; the advantage is that
+ the Cartesian coordinates of each atom returned in the primitive
+ cell will match with one of the atoms in the input structure if this
+ variable is False.
+
+ :return: a tuple of length three: the first element is the primitive
+ structure, also in the format (lattice, positions, types); the second
+ is a tuple with the ``(P, invP)`` matrices as returned by :py:func:`get_P_matrix`; the
+ third is an array with the mapping from the atoms in the conventional
+ cell to the atoms in the primitive cell (e.g. if the conventional cell
+ has four atoms and twice the volume than the primitive, and the first
+ and third atoms in the conventional map to the first of the primitive,
+ while the second and the fourth map to the second of the primitive,
+ this array will be :math:`[0,1,0,1]`).
+ """
+ import numpy as np
+ from collections import Counter
+
+ threshold = 1.0e-6 # Threshold for creation of primitive cell
+
+ lattice, positions, types = structure
+ P, invP = get_P_matrix(bravais_lattice)
+
+ volume_ratio = int(round(np.linalg.det(invP)))
+
+ # (a_P, b_P, c_P) = (a,b,c) P
+ # a is the first ROW of lattice => I have to transpose lattice
+ prim_lattice = np.dot(np.array(np.array(lattice).T), P).T
+ # (x_P, y_P, z_P)^T = (P^-1) (x,y,z)^T
+ prim_positions = np.dot(invP, np.array(positions).T).T
+
+ # Now I need to remove duplicates
+ # I get if the x coord is the same, modulo one
+ # I compare all with all
+ # (I will get a NxN matrix, where N = number of atoms)
+ # I shift by 1/2, do %1 and then shift back so that I get values between
+ # -0.5 and 0.5 rather than between 0 and 1, which would be problematic
+ # to find values close to zero
+ x_match = (
+ np.abs(
+ ((prim_positions[:, 0] - prim_positions[:, 0][:, None] + 0.5) % 1.0) - 0.5
+ )
+ < threshold
+ )
+ y_match = (
+ np.abs(
+ ((prim_positions[:, 1] - prim_positions[:, 1][:, None] + 0.5) % 1.0) - 0.5
+ )
+ < threshold
+ )
+ z_match = (
+ np.abs(
+ ((prim_positions[:, 2] - prim_positions[:, 2][:, None] + 0.5) % 1.0) - 0.5
+ )
+ < threshold
+ )
+ # To be the same, they should all match
+ all_match = np.logical_and(x_match, np.logical_and(y_match, z_match))
+
+ # list of ids, each row identifies a group of equivalent atoms
+ # I convert to tuple so they can become keys of a dict for counting
+ group_of_equivalent_atoms = [
+ tuple(np.arange(all_match.shape[0])[row]) for row in all_match
+ ]
+ group_count = Counter(group_of_equivalent_atoms)
+ wrong_count = [group for group, cnt in group_count.items() if cnt != volume_ratio]
+ if wrong_count:
+ raise ValueError(
+ "Problem creating primitive cell, I found the "
+ "following group of atoms with len != {}: {}".format(
+ volume_ratio, ", ".join(str(_) for _ in wrong_count)
+ )
+ )
+ # These are the groups of equivalent atoms; values are the positions in
+ # the list from 0 to N-1
+ groups = sorted(group_count.keys())
+ # I check that the type is always the same
+ unique_types = [set(np.array(types)[np.array(group)]) for group in groups]
+ problematic_groups_idx = list(
+ group_idx
+ for group_idx, type_set in enumerate(unique_types)
+ if len(type_set) != 1
+ )
+ if problematic_groups_idx:
+ raise ValueError(
+ "The following ids of atoms go on top of each other, "
+ "but they are of different type! {}".format(
+ ", ".join(
+ [
+ str(group)
+ for group_idx, group in enumerate(groups)
+ if group_idx in problematic_groups_idx
+ ]
+ )
+ )
+ )
+ # All good, just return the first (no wrapping to [0..1[ yet)
+ chosen_idx = np.array([group[0] for group in groups])
+
+ # Create the list of mapped atoms
+ conv_prim_atoms_mapping = -1 * np.ones(len(positions), dtype=int)
+ for prim_idx, group in enumerate(groups):
+ for at_idx in group:
+ conv_prim_atoms_mapping[at_idx] = prim_idx
+ if -1 in conv_prim_atoms_mapping:
+ raise ValueError(
+ "Unable to recreate correctly the atom mapping! "
+ "{}".format(conv_prim_atoms_mapping)
+ )
+
+ prim_positions = prim_positions[chosen_idx]
+ prim_types = np.array(types)[chosen_idx]
+
+ if wrap_to_zero_one:
+ prim_positions = prim_positions % 1.0
+
+ prim_structure = (prim_lattice, prim_positions, prim_types)
+
+ return (prim_structure, (P, invP), conv_prim_atoms_mapping)
diff --git a/susyexists/src/seekpath/hpkot/tools.py b/susyexists/src/seekpath/hpkot/tools.py
new file mode 100644
index 00000000..bbcf433e
--- /dev/null
+++ b/susyexists/src/seekpath/hpkot/tools.py
@@ -0,0 +1,367 @@
+"""Various utilities."""
+import numpy
+import numpy.linalg
+from math import sqrt
+
+
+def eval_expr_simple(expr, kparam): # pylint=disable: too-many-return-statements
+ """
+ To evaluate expressions tha only require kparams and not a, b, c, ...
+ """
+ if expr == "0":
+ return 0.0
+ if expr == "1/2":
+ return 1.0 / 2.0
+ if expr == "1":
+ return 1.0
+ if expr == "-1/2":
+ return -1.0 / 2.0
+ if expr == "1/4":
+ return 1.0 / 4.0
+ if expr == "3/8":
+ return 3.0 / 8.0
+ if expr == "3/4":
+ return 3.0 / 4.0
+ if expr == "5/8":
+ return 5.0 / 8.0
+ if expr == "1/3":
+ return 1.0 / 3.0
+ try:
+ return kparam[expr]
+ except KeyError as exc:
+ raise ValueError(
+ "Asking for evaluation of symbol '{}' in "
+ "eval_expr_simple but this has not been defined or not "
+ "yet computed".format(str(exc))
+ )
+
+
+def extend_kparam(kparam):
+ """
+ Extend the list of kparam with also expressions like :math:`1-x`, ...
+
+ :param kparam: a dictionary where the key is the expression as a string and
+ the value is the numerical value
+ :return: a similar dictionary, extended with simple expressions
+ """
+ kparam_extended = {}
+ for key, val in kparam.items():
+ kparam_extended[key] = val
+ kparam_extended["-{}".format(key)] = -val
+ kparam_extended["1-{}".format(key)] = 1.0 - val
+ kparam_extended["-1+{}".format(key)] = -1.0 + val
+ kparam_extended["1/2-{}".format(key)] = 1.0 / 2.0 - val
+ kparam_extended["1/2+{}".format(key)] = 1.0 / 2.0 + val
+
+ return kparam_extended
+
+
+def eval_expr( # pylint: disable=too-many-return-statements,unused-argument
+ expr, a, b, c, cosalpha, cosbeta, cosgamma, kparam
+):
+ r"""
+ Given a string expression as a function of the parameters ``a``, ``b``, ``c`` (lengths of the
+ cell lattice vectors) and ``cosalpha``, ``cosbeta``, ``cosgamma`` (the cosines of the three
+ angles between lattice vectors) returns the numerical value of the expression.
+
+ :param a: length of the first lattice vector
+ :param b: length of the second lattice vector
+ :param c: length of the third lattice vector
+ :param cosalpha: cosine of the :math:`\alpha` angle (between lattice vectors 2 and 3)
+ :param cosbeta: cosine of the :math:`\beta` angle (between lattice vectors 1 and 3)
+ :param cosgamma: cosine of the :math:`\gamma` angle (between lattice vectors 1 and 2)
+ :param kparam: a dictionary that associates the value to expressions as a function
+ of the ``a, b, c, cosalpha, cosbeta, cosgamma`` parameters
+
+ :return: the value of the expression for the given values of the cell parameters
+
+ .. note:: To evaluate expressions, I hardcode a table of existing expressions in the
+ DB rather than parsing the string (to avoid additional dependencies and
+ avoid the use of ``eval``).
+ """
+ from math import sqrt
+
+ # sinalpha = sqrt(1.0 - cosalpha ** 2)
+ sinbeta = sqrt(1.0 - cosbeta**2)
+ # singamma = sqrt(1.0 - cosgamma ** 2)
+
+ try:
+ if expr == "(a*a/b/b+(1+a/c*cosbeta)/sinbeta/sinbeta)/4":
+ return (a * a / b / b + (1.0 + a / c * cosbeta) / sinbeta / sinbeta) / 4.0
+ if expr == "1-Z*b*b/a/a":
+ Z = kparam["Z"]
+ return 1.0 - Z * b * b / a / a
+ if expr == "1/2-2*Z*c*cosbeta/a":
+ Z = kparam["Z"]
+ return 1.0 / 2.0 - 2.0 * Z * c * cosbeta / a
+ if expr == "E/2+a*a/4/b/b+a*c*cosbeta/2/b/b":
+ E = kparam["E"]
+ return E / 2.0 + a * a / 4.0 / b / b + a * c * cosbeta / 2.0 / b / b
+ if expr == "2*F-Z":
+ F = kparam["F"]
+ Z = kparam["Z"]
+ return 2.0 * F - Z
+ if expr == "c/2/a/cosbeta*(1-4*U+a*a*sinbeta*sinbeta/b/b)":
+ U = kparam["U"]
+ return (
+ c
+ / 2.0
+ / a
+ / cosbeta
+ * (1.0 - 4.0 * U + a * a * sinbeta * sinbeta / b / b)
+ )
+ if expr == "-1/4+W/2-Z*c*cosbeta/a":
+ W = kparam["W"]
+ Z = kparam["Z"]
+ return -1.0 / 4.0 + W / 2.0 - Z * c * cosbeta / a
+ if expr == "(2+a/c*cosbeta)/4/sinbeta/sinbeta":
+ return (2.0 + a / c * cosbeta) / 4.0 / sinbeta / sinbeta
+ if expr == "3/4-b*b/4/a/a/sinbeta/sinbeta":
+ return 3.0 / 4.0 - b * b / 4.0 / a / a / sinbeta / sinbeta
+ if expr == "S-(3/4-S)*a*cosbeta/c":
+ S = kparam["S"]
+ return S - (3.0 / 4.0 - S) * a * cosbeta / c
+ if expr == "(1+a*a/b/b)/4":
+ return (1.0 + a * a / b / b) / 4.0
+ if expr == "-a*c*cosbeta/2/b/b":
+ return -a * c * cosbeta / 2.0 / b / b
+ if expr == "1+Z-2*M":
+ Z = kparam["Z"]
+ M = kparam["M"]
+ return 1.0 + Z - 2.0 * M
+ if expr == "X-2*D":
+ X = kparam["X"]
+ D = kparam["D"]
+ return X - 2 * D
+ if expr == "(1+a/c*cosbeta)/2/sinbeta/sinbeta":
+ return (1.0 + a / c * cosbeta) / 2.0 / sinbeta / sinbeta
+ if expr == "1/2+Y*c*cosbeta/a":
+ Y = kparam["Y"]
+ return 1.0 / 2.0 + Y * c * cosbeta / a
+ if expr == "a*a/4/c/c":
+ return a * a / 4.0 / c / c
+ if expr == "5/6-2*D":
+ D = kparam["D"]
+ return 5.0 / 6.0 - 2.0 * D
+ if expr == "1/3+D":
+ D = kparam["D"]
+ return 1.0 / 3.0 + D
+ if expr == "1/6-c*c/9/a/a":
+ return 1.0 / 6.0 - c * c / 9.0 / a / a
+ if expr == "1/2-2*Z":
+ Z = kparam["Z"]
+ return 1.0 / 2.0 - 2.0 * Z
+ if expr == "1/2+Z":
+ Z = kparam["Z"]
+ return 1.0 / 2.0 + Z
+ if expr == "(1+b*b/c/c)/4":
+ return (1.0 + b * b / c / c) / 4.0
+ if expr == "(1+c*c/b/b)/4":
+ return (1.0 + c * c / b / b) / 4.0
+ if expr == "(1+b*b/a/a)/4":
+ return (1.0 + b * b / a / a) / 4.0
+ if expr == "(1+a*a/b/b-a*a/c/c)/4":
+ return (1.0 + a * a / b / b - a * a / c / c) / 4.0
+ if expr == "(1+a*a/b/b+a*a/c/c)/4":
+ return (1.0 + a * a / b / b + a * a / c / c) / 4.0
+ if expr == "(1+c*c/a/a-c*c/b/b)/4":
+ return (1.0 + c * c / a / a - c * c / b / b) / 4.0
+ if expr == "(1+c*c/a/a+c*c/b/b)/4":
+ return (1.0 + c * c / a / a + c * c / b / b) / 4.0
+ if expr == "(1+b*b/a/a-b*b/c/c)/4":
+ return (1.0 + b * b / a / a - b * b / c / c) / 4.0
+ if expr == "(1+c*c/b/b-c*c/a/a)/4":
+ return (1.0 + c * c / b / b - c * c / a / a) / 4.0
+ if expr == "(1+a*a/c/c)/4":
+ return (1.0 + a * a / c / c) / 4.0
+ if expr == "(b*b-a*a)/4/c/c":
+ return (b * b - a * a) / 4.0 / c / c
+ if expr == "(a*a+b*b)/4/c/c":
+ return (a * a + b * b) / 4.0 / c / c
+ if expr == "(1+c*c/a/a)/4":
+ return (1.0 + c * c / a / a) / 4.0
+ if expr == "(c*c-b*b)/4/a/a":
+ return (c * c - b * b) / 4.0 / a / a
+ if expr == "(b*b+c*c)/4/a/a":
+ return (b * b + c * c) / 4.0 / a / a
+ if expr == "(a*a-c*c)/4/b/b":
+ return (a * a - c * c) / 4.0 / b / b
+ if expr == "(c*c+a*a)/4/b/b":
+ return (c * c + a * a) / 4.0 / b / b
+ if expr == "a*a/2/c/c":
+ return a * a / 2.0 / c / c
+ raise ValueError(
+ "Unknown expression, define a new case:\n"
+ ' elif expr == "{0}":\n'
+ " return {0}".format(expr)
+ )
+ except KeyError as exc:
+ raise ValueError(
+ "Asking for evaluation of symbol '{}' but this has "
+ "not been defined or not yet computed".format(str(exc))
+ )
+
+
+def check_spglib_version():
+ """
+ Check the SPGLIB version and raise a ValueError if the version is
+ older than 1.9.4.
+
+ Also raises an warning if the user has a version of SPGLIB that is
+ older than 1.13, because before then there were some bugs (e.g.
+ wrong treatment of oI, see e.g. issue )
+
+ Return the spglib module.
+ """
+ try:
+ import spglib
+ except ImportError:
+ raise ValueError(
+ "spglib >= 1.9.4 is required for the creation "
+ "of the k-paths, but it could not be imported"
+ )
+
+ try:
+ version = spglib.__version__
+ except NameError:
+ version = "1.8.0" # or older, version was introduced only recently
+
+ try:
+ version_pieces = [int(_) for _ in version.split(".")]
+ if len(version_pieces) < 3:
+ raise ValueError
+ except ValueError:
+ raise ValueError("Unable to parse version number")
+
+ if tuple(version_pieces[:2]) < (1, 9):
+ raise ValueError("Invalid spglib version, need >= 1.9.4")
+
+ if version_pieces[:2] == (1, 9) and version_pieces[2] < 4:
+ raise ValueError("Invalid spglib version, need >= 1.9.4")
+
+ if tuple(version_pieces[:2]) < (1, 13):
+ import warnings
+
+ warnings.warn(
+ "You have a version of SPGLIB older than 1.13, "
+ "please consider upgrading to 1.13 or later since some bugs "
+ "have been fixed",
+ RuntimeWarning,
+ )
+
+ return spglib
+
+
+def get_cell_params(cell):
+ r"""
+ Return (a,b,c,cosalpha,cosbeta,cosgamma) given a :math:`3\times 3` cell
+
+ .. note:: Rows are vectors: ``v1 = cell[0]``, ``v2 = cell[1]``, ``v3 = cell[3]``
+ """
+ v1, v2, v3 = numpy.array(cell)
+ a = sqrt(sum(v1**2))
+ b = sqrt(sum(v2**2))
+ c = sqrt(sum(v3**2))
+ cosalpha = numpy.dot(v2, v3) / b / c
+ cosbeta = numpy.dot(v1, v3) / a / c
+ cosgamma = numpy.dot(v1, v2) / a / b
+
+ return (a, b, c, cosalpha, cosbeta, cosgamma)
+
+
+def get_reciprocal_cell_rows(real_space_cell):
+ r"""
+ Given the cell in real space (3x3 matrix, vectors as rows,
+ return the reciprocal-space cell where again the G vectors are
+ rows, i.e. satisfying
+ ``dot(real_space_cell, reciprocal_space_cell.T)`` = :math:`2 \pi I`,
+ where :math:`I` is the :math:`3\times 3` identity matrix.
+
+ :return: the :math:`3\times 3` list of reciprocal lattice vectors where each row is
+ one vector.
+ """
+ reciprocal_space_columns = 2.0 * numpy.pi * numpy.linalg.inv(real_space_cell)
+ return (reciprocal_space_columns.T).tolist()
+
+
+def get_real_cell_from_reciprocal_rows(reciprocal_space_rows):
+ r"""
+ Given the cell in reciprocal space (3x3 matrix, G vectors as rows,
+ return the real-space cell where again the R vectors are
+ rows, i.e. satisfying
+ ``dot(real_space_cell, reciprocal_space_cell.T)`` = :math:`2 \pi I`,
+ where :math:`I` is the :math:`3\times 3` identity matrix.
+
+ .. note:: This is actually the same as :py:func:`get_reciprocal_cell_rows`.
+
+ :return: the :math:`3\times 3` list of real lattice vectors where each row is
+ one vector.
+ """
+ real_space_columns = 2.0 * numpy.pi * numpy.linalg.inv(reciprocal_space_rows)
+ return (real_space_columns.T).tolist()
+
+
+def get_path_data(ext_bravais):
+ """
+ Given an extended Bravais symbol among those defined in the HPKOT paper
+ (only first three characters, like cF1), return the points and the
+ suggested path.
+
+ :param ext_bravais: a string among the allowed etended Bravais lattices
+ defined in HPKOT.
+ :return: a tuple ``(kparam_def, points_def, path)`` where the
+ first element is the list with the definition of the
+ k-point parameters, the second is the dictionary with the
+ definition of the k-points, and the third is the list
+ with the suggested paths.
+
+ .. note:: ``kparam_def`` has to be a list and not a dictionary
+ because the order matters (later k-parameters can be defined
+ in terms of previous ones)
+ """
+ import os
+
+ # Get the data from the band_data folder
+ this_folder = os.path.split(os.path.abspath(__file__))[0]
+ folder = os.path.join(this_folder, "band_path_data", ext_bravais)
+ path_file = os.path.join(folder, "path.txt")
+ points_file = os.path.join(folder, "points.txt")
+ kparam_file = os.path.join(folder, "k_vector_parameters.txt")
+ with open(kparam_file) as f:
+ kparam_raw = [_.split() for _ in f.readlines() if _.strip()]
+ with open(points_file) as f:
+ points_raw = [_.split() for _ in f.readlines()]
+ with open(path_file) as f:
+ path_raw = [_.split() for _ in f.readlines()]
+
+ # check
+ if any(len(_) != 2 for _ in kparam_raw):
+ raise ValueError("Invalid line length in {}".format(kparam_file))
+ if any(len(_) != 2 for _ in path_raw):
+ raise ValueError("Invalid line length in {}".format(path_file))
+ if any(len(_) != 4 for _ in points_raw):
+ raise ValueError("Invalid line length in {}".format(points_file))
+ # order must be preserved here
+ kparam_def = [(_[0], _[1].strip()) for _ in kparam_raw]
+ points_def = {}
+ for label, kPx, kPy, kPz in points_raw:
+ if label in points_def:
+ raise ValueError(
+ "Internal error! Point {} defined multiple times "
+ "for Bravais lattice {}".format(label, ext_bravais)
+ )
+ points_def[label] = (kPx, kPy, kPz)
+ path = [(_[0], _[1]) for _ in path_raw]
+
+ # check path is valid
+ for p1, p2 in path:
+ if p1 not in points_def:
+ raise ValueError(
+ "Point {} found in path (for {}) but undefined!".format(p1, ext_bravais)
+ )
+ if p2 not in points_def:
+ raise ValueError(
+ "Point {} found in path (for {}) but undefined!".format(p2, ext_bravais)
+ )
+
+ return (kparam_def, points_def, path)
diff --git a/susyexists/src/seekpath/util.py b/susyexists/src/seekpath/util.py
new file mode 100644
index 00000000..32eac07e
--- /dev/null
+++ b/susyexists/src/seekpath/util.py
@@ -0,0 +1,116 @@
+"""Utilities (mapping of chemical elements to atomic number)."""
+
+atoms_num_dict = {
+ "H": 1,
+ "He": 2,
+ "Li": 3,
+ "Be": 4,
+ "B": 5,
+ "C": 6,
+ "N": 7,
+ "O": 8,
+ "F": 9,
+ "Ne": 10,
+ "Na": 11,
+ "Mg": 12,
+ "Al": 13,
+ "Si": 14,
+ "P": 15,
+ "S": 16,
+ "Cl": 17,
+ "Ar": 18,
+ "K": 19,
+ "Ca": 20,
+ "Sc": 21,
+ "Ti": 22,
+ "V": 23,
+ "Cr": 24,
+ "Mn": 25,
+ "Fe": 26,
+ "Co": 27,
+ "Ni": 28,
+ "Cu": 29,
+ "Zn": 30,
+ "Ga": 31,
+ "Ge": 32,
+ "As": 33,
+ "Se": 34,
+ "Br": 35,
+ "Kr": 36,
+ "Rb": 37,
+ "Sr": 38,
+ "Y": 39,
+ "Zr": 40,
+ "Nb": 41,
+ "Mo": 42,
+ "Tc": 43,
+ "Ru": 44,
+ "Rh": 45,
+ "Pd": 46,
+ "Ag": 47,
+ "Cd": 48,
+ "In": 49,
+ "Sn": 50,
+ "Sb": 51,
+ "Te": 52,
+ "I": 53,
+ "Xe": 54,
+ "Cs": 55,
+ "Ba": 56,
+ "La": 57,
+ "Ce": 58,
+ "Pr": 59,
+ "Nd": 60,
+ "Pm": 61,
+ "Sm": 62,
+ "Eu": 63,
+ "Gd": 64,
+ "Tb": 65,
+ "Dy": 66,
+ "Ho": 67,
+ "Er": 68,
+ "Tm": 69,
+ "Yb": 70,
+ "Lu": 71,
+ "Hf": 72,
+ "Ta": 73,
+ "W": 74,
+ "Re": 75,
+ "Os": 76,
+ "Ir": 77,
+ "Pt": 78,
+ "Au": 79,
+ "Hg": 80,
+ "Tl": 81,
+ "Pb": 82,
+ "Bi": 83,
+ "Po": 84,
+ "At": 85,
+ "Rn": 86,
+ "Fr": 87,
+ "Ra": 88,
+ "Ac": 89,
+ "Th": 90,
+ "Pa": 91,
+ "U": 92,
+ "Np": 93,
+ "Pu": 94,
+ "Am": 95,
+ "Cm": 96,
+ "Bk": 97,
+ "Cf": 98,
+ "Es": 99,
+ "Fm": 100,
+ "Md": 101,
+ "No": 102,
+ "Lr": 103,
+ "Rf": 104,
+ "Db": 105,
+ "Sg": 106,
+ "Bh": 107,
+ "Hs": 108,
+ "Mt": 109,
+ "Ds": 110,
+ "Rg": 111,
+ "Cn": 112,
+}
diff --git a/susyexists/src/structure.py b/susyexists/src/structure.py
new file mode 100644
index 00000000..05d07392
--- /dev/null
+++ b/susyexists/src/structure.py
@@ -0,0 +1,338 @@
+from . import seekpath
+from markupsafe import escape
+import copy
+import io
+import json
+import time
+import traceback
+
+import numpy as np
+
+from ase.data import chemical_symbols
+from tools_barebone import logme, get_tools_barebone_version
+from tools_barebone.structure_importers import get_structure_tuple, UnknownFormatError
+
+
+
+
+MAX_NUMBER_OF_ATOMS = 1000
+
+
+def get_json_for_visualizer(
+ cell, relcoords, atomic_numbers
+): # pylint: disable=too-many-locals
+ from seekpath import hpkot, brillouinzone
+ hpkot = seekpath.hpkot
+
+ system = (np.array(cell), np.array(relcoords), np.array(atomic_numbers))
+ res = hpkot.get_path(system, with_time_reversal=False)
+
+ real_lattice = res["primitive_lattice"]
+ # rec_lattice = np.linalg.inv(real_lattice).T # Missing 2pi!
+ rec_lattice = np.array(hpkot.tools.get_reciprocal_cell_rows(real_lattice))
+ b1, b2, b3 = rec_lattice
+ faces_data = seekpath.brillouinzone.get_BZ(b1=b1, b2=b2, b3=b3)
+
+ response = {}
+ response["faces_data"] = faces_data
+ response["b1"] = b1.tolist()
+ response["b2"] = b2.tolist()
+ response["b3"] = b3.tolist()
+ ## Convert to absolute
+ response["kpoints"] = {
+ k: (v[0] * b1 + v[1] * b2 + v[2] * b3).tolist()
+ for k, v in res["point_coords"].items()
+ }
+ response["kpoints_rel"] = {
+ k: [v[0], v[1], v[2]] for k, v in res["point_coords"].items()
+ }
+ response["path"] = res["path"]
+
+ # It should use the same logic, so give the same cell as above
+ res_explicit = seekpath.get_explicit_k_path(system, with_time_reversal=False)
+ for k in res_explicit:
+ if k == "segments" or k.startswith("explicit_"):
+ if isinstance(res_explicit[k], np.ndarray):
+ response[k] = res_explicit[k].tolist()
+ else:
+ response[k] = res_explicit[k]
+
+ if (
+ np.sum(
+ np.abs(
+ np.array(res_explicit["reciprocal_primitive_lattice"])
+ - np.array(res["reciprocal_primitive_lattice"])
+ )
+ )
+ > 1.0e-7
+ ):
+ raise AssertionError("Got different reciprocal cells...")
+
+ # Response for JS, and path_results
+ return response, res
+
+
+def process_structure_core( # pylint: disable=too-many-locals,too-many-statements,too-many-arguments
+ filecontent,
+ fileformat,
+ call_source="",
+ logger=None,
+ flask_request=None,
+):
+
+ start_time = time.time()
+ fileobject = io.StringIO(str(filecontent))
+ # form_data = dict(flask_request.form)
+ form_data = None
+ try:
+ structure_tuple = get_structure_tuple(
+ fileobject, fileformat, extra_data=None
+ )
+ except UnknownFormatError:
+ logme(
+ logger,
+ filecontent,
+ fileformat,
+ flask_request,
+ call_source,
+ reason="unknownformat",
+ extra={"form_data": form_data,},
+ )
+ raise FlaskRedirectException("Unknown format '{}'".format(fileformat))
+ except Exception:
+ # There was an exception...
+ logme(
+ logger,
+ filecontent,
+ fileformat,
+ flask_request,
+ call_source,
+ reason="exception",
+ extra={"traceback": traceback.format_exc(), "form_data": form_data,},
+ )
+ raise FlaskRedirectException(
+ "I tried my best, but I wasn't able to load your "
+ "file in format '{}'...".format(fileformat)
+ )
+
+ if len(structure_tuple[1]) > MAX_NUMBER_OF_ATOMS:
+ ## Structure too big
+ logme(
+ logger,
+ filecontent,
+ fileformat,
+ flask_request,
+ call_source,
+ reason="toolarge",
+ extra={"number_of_atoms": len(structure_tuple[1]), "form_data": form_data,},
+ )
+ raise FlaskRedirectException(
+ "Sorry, this online visualizer is limited to {} atoms "
+ "in the input cell, while your structure has {} atoms."
+ "".format(MAX_NUMBER_OF_ATOMS, len(structure_tuple[1]))
+ )
+
+ # Log the content in case of valid structure
+ logme(
+ logger,
+ filecontent,
+ fileformat,
+ flask_request,
+ call_source,
+ reason="OK",
+ extra={"number_of_atoms": len(structure_tuple[1]), "form_data": form_data,},
+ )
+
+ try:
+ in_json_data = {
+ "cell": structure_tuple[0],
+ "scaled_coords": structure_tuple[1],
+ "atomic_numbers": structure_tuple[2],
+ }
+
+ out_json_data, path_results = get_json_for_visualizer(
+ in_json_data["cell"],
+ in_json_data["scaled_coords"],
+ in_json_data["atomic_numbers"],
+ )
+
+ raw_code_dict = copy.copy(out_json_data)
+ for k in list(raw_code_dict.keys()):
+ if k.startswith("explicit_"):
+ raw_code_dict.pop(k)
+ if k == "segments":
+ raw_code_dict.pop(k)
+ raw_code_dict.pop("faces_data")
+ raw_code_dict["primitive_lattice"] = path_results["primitive_lattice"].tolist()
+ raw_code_dict["primitive_positions"] = path_results[
+ "primitive_positions"
+ ].tolist()
+ inputstructure_positions_cartesian = np.dot(
+ np.array(in_json_data["scaled_coords"]), np.array(in_json_data["cell"]),
+ ).tolist()
+ primitive_positions_cartesian = np.dot(
+ np.array(path_results["primitive_positions"]),
+ np.array(path_results["primitive_lattice"]),
+ ).tolist()
+ primitive_positions_cartesian_refolded = np.dot(
+ np.array(path_results["primitive_positions"]) % 1.0,
+ np.array(path_results["primitive_lattice"]),
+ ).tolist()
+ raw_code_dict["primitive_positions_cartesian"] = primitive_positions_cartesian
+
+ # raw_code['primitive_types'] = path_results['primitive_types']
+ primitive_symbols = [
+ chemical_symbols[num] for num in path_results["primitive_types"]
+ ]
+ raw_code_dict["primitive_symbols"] = primitive_symbols
+
+ raw_code = json.dumps(raw_code_dict, indent=2)
+ ## I manually escape it to then add
and pass it to a filter with
+ ## |safe. I have to 'unicode' it otherwise it keeps escaping also the
+ ## next replaces
+ raw_code = (
+ str(escape(raw_code)).replace("\n", "
").replace(" ", " ")
+ )
+
+ kpoints = [
+ [
+ k,
+ out_json_data["kpoints"][k][0],
+ out_json_data["kpoints"][k][1],
+ out_json_data["kpoints"][k][2],
+ ]
+ for k in sorted(out_json_data["kpoints"])
+ ]
+ kpoints_rel = [
+ [
+ k,
+ out_json_data["kpoints_rel"][k][0],
+ out_json_data["kpoints_rel"][k][1],
+ out_json_data["kpoints_rel"][k][2],
+ ]
+ for k in sorted(out_json_data["kpoints_rel"])
+ ]
+
+ inputstructure_cell_vectors = [
+ [idx, coords[0], coords[1], coords[2]]
+ for idx, coords in enumerate(in_json_data["cell"], start=1)
+ ]
+ inputstructure_symbols = [
+ chemical_symbols[num] for num in in_json_data["atomic_numbers"]
+ ]
+ inputstructure_atoms_scaled = [
+ [label, coords[0], coords[1], coords[2]]
+ for label, coords in zip(
+ inputstructure_symbols, in_json_data["scaled_coords"]
+ )
+ ]
+ inputstructure_atoms_cartesian = [
+ [label, coords[0], coords[1], coords[2]]
+ for label, coords in zip(
+ inputstructure_symbols, inputstructure_positions_cartesian
+ )
+ ]
+
+ direct_vectors = [
+ [idx, coords[0], coords[1], coords[2]]
+ for idx, coords in enumerate(path_results["primitive_lattice"], start=1)
+ ]
+
+ reciprocal_primitive_vectors = [
+ [idx, coords[0], coords[1], coords[2]]
+ for idx, coords in enumerate(
+ path_results["reciprocal_primitive_lattice"], start=1
+ )
+ ]
+
+ atoms_scaled = [
+ [label, str(coords[0]), str(coords[1]), str(coords[2])]
+ for label, coords in zip(
+ primitive_symbols, path_results["primitive_positions"]
+ )
+ ]
+
+ atoms_cartesian = [
+ [label, coords[0], coords[1], coords[2]]
+ for label, coords in zip(primitive_symbols, primitive_positions_cartesian)
+ ]
+
+ # Create extetically-nice looking path, with dashes and pipes
+ suggested_path = []
+ if path_results["path"]:
+ suggested_path.append(path_results["path"][0][0])
+ suggested_path.append("-")
+ suggested_path.append(path_results["path"][0][1])
+ last = path_results["path"][0][1]
+ for p1, p2 in path_results["path"][1:]:
+ if p1 != last:
+ suggested_path.append("|")
+ suggested_path.append(p1)
+ suggested_path.append("-")
+ suggested_path.append(p2)
+ last = p2
+
+ primitive_lattice = path_results["primitive_lattice"]
+ xsfstructure = []
+ xsfstructure.append("CRYSTAL")
+ xsfstructure.append("PRIMVEC")
+ for vector in primitive_lattice:
+ xsfstructure.append("{} {} {}".format(vector[0], vector[1], vector[2]))
+ xsfstructure.append("PRIMCOORD")
+ xsfstructure.append("{} 1".format(len(primitive_positions_cartesian_refolded)))
+ for atom_num, pos in zip(
+ path_results["primitive_types"], primitive_positions_cartesian_refolded
+ ):
+ xsfstructure.append("{} {} {} {}".format(atom_num, pos[0], pos[1], pos[2]))
+ xsfstructure = "\n".join(xsfstructure)
+
+ compute_time = time.time() - start_time
+ except Exception:
+ logme(
+ logger,
+ filecontent,
+ fileformat,
+ flask_request,
+ call_source,
+ reason="codeexception",
+ extra={"traceback": traceback.extract_stack(), "form_data": form_data,},
+ )
+ raise
+
+ return dict(
+ jsondata=json.dumps(out_json_data),
+ volume_ratio_prim=int(round(path_results["volume_original_wrt_prim"])),
+ raw_code=raw_code,
+ kpoints=kpoints,
+ kpoints_rel=kpoints_rel,
+ bravais_lattice=path_results["bravais_lattice"],
+ bravais_lattice_extended=path_results["bravais_lattice_extended"],
+ spacegroup_number=path_results["spacegroup_number"],
+ spacegroup_international=path_results["spacegroup_international"],
+ direct_vectors=direct_vectors,
+ inputstructure_cell_vectors=inputstructure_cell_vectors,
+ inputstructure_atoms_scaled=inputstructure_atoms_scaled,
+ inputstructure_atoms_cartesian=inputstructure_atoms_cartesian,
+ atoms_scaled=atoms_scaled,
+ with_without_time_reversal=(
+ "with" if path_results["has_inversion_symmetry"] else "without"
+ ),
+ atoms_cartesian=atoms_cartesian,
+ reciprocal_primitive_vectors=reciprocal_primitive_vectors,
+ primitive_vectors=primitive_lattice,
+ suggested_path=suggested_path,
+ )
+
+
+def primitive(fileContent,fileformat):
+ with open(fileContent) as file:
+ fileContent = file.read()
+ process_structure_core(filecontent=fileContent,fileformat=fileformat)
+ structure = process_structure_core(filecontent=fileContent,fileformat=fileformat)
+ lattice = (structure["primitive_vectors"].astype('str')).tolist()
+ atoms = structure["atoms_scaled"]
+ kpoints = structure['kpoints_rel']
+ return (lattice,atoms,kpoints)
+
+
+
diff --git a/susyexists/src/utils.py b/susyexists/src/utils.py
new file mode 100644
index 00000000..e6cf46df
--- /dev/null
+++ b/susyexists/src/utils.py
@@ -0,0 +1,142 @@
+import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+import os
+import re
+import subprocess
+import json
+import qcelemental as qcel
+import untangle
+
+
+def make_monolayer(atoms):
+ df = pd.DataFrame()
+ atoms=np.array(atoms)
+ df['Atoms'] = atoms.T[0]
+ df['x'] = atoms.T[1].astype(float)
+ df['y'] = atoms.T[2].astype(float)
+ df['z'] = atoms.T[3].astype(float)
+ df = df.query('z<0.5')
+ df_shifted = pd.DataFrame()
+ df_shifted["Atoms"] = df['Atoms'].values
+ df_shifted["x"] = df['x'].values
+ df_shifted["y"] = df['y'].values
+ df_shifted["z"] = df['z'].values+0.25
+ return df_shifted.values
+
+
+def plot_sigma_energy(path):
+ out_files = os.listdir(path)
+ total_energy = []
+ e_fermi = []
+ for file in out_files:
+ temp_file = open(f'{path}/{file}', 'r').readlines()
+ for i in range(len(temp_file)):
+ if len(temp_file[i].split())>2:
+ if temp_file[i].split()[0]=='!':
+ temp_en=temp_file[i].split()[4]
+ # if temp_file[i].split()[0]=='the':
+ # temp_fermi=temp_file[i].split()[-2]
+ total_energy.append([float(temp_en),float(file[:-13])])
+ # e_fermi.append([float(temp_fermi),float(file[:-13])])
+
+ tot_en = np.array(total_energy)
+ tot_en = tot_en[tot_en[:, 1].argsort()]
+
+
+ # e_f = np.array(e_fermi)
+ # e_f = e_f[e_f[:, 1].argsort()]
+
+ fig = plt.figure(figsize=(8,6))
+ plt.plot(tot_en.T[1],tot_en.T[0])
+ plt.ylabel('Total Energy [Ry]',fontsize=20)
+ plt.xlabel('Smearing Value [Ry]',fontsize=20)
+ plt.xticks(fontsize=20)
+ plt.yticks(fontsize=20)
+ plt.savefig('total_sigma.png')
+
+def get_total_energy(path):
+ obj = untangle.parse(path)
+ en = float(obj.qes_espresso.output.total_energy.etot.cdata)*2
+ # p = subprocess.Popen(f"grep '!' {path}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ # line = p.stdout.readlines()[0].decode()
+ # en = float(re.findall(r"[-+]?(?:\d*\.*\d+)", line)[0])
+ return(en)
+
+def configure(calculation,path="./config.json"):
+ with open(path) as f:
+ data = f.read()
+ config = json.loads(data)
+ return config[calculation]
+
+def afm_maker(atom,afm_matrix):
+ # afm_matrix = [['u','u','d','d'],['u','d','u','d'],['u','d','d','u']]
+ afm =[]
+ for i in range(len(afm_matrix)):
+ # print(f"AFM{i}")
+ afm.append(np.array(atom).copy())
+ for j in range(4):
+ afm[i][j][0]=atom[j][0]+afm_matrix[i][j]
+ # print(afm[i][j][0])
+ return afm
+
+def default_pseudo(atom):
+ atom_type = list(set([a[0] for a in atom]))
+ atom_array = []
+ for i in atom_type:
+ temp_atom = {"atom":i,'mass':str(qcel.periodictable.to_mass(i)),'pseudopotential':f"{i}.UPF"}
+ atom_array.append(temp_atom)
+ # print(temp_atom)
+ # print(atom_array)
+ return atom_array
+
+def atom_type(atom):
+ num_type = len(list(set([a[0] for a in atom])))
+ return num_type
+
+
+def test_parameter(self,parameter_name,conv_thr,start,end,step,num_core,debug=False,out=False):
+ parameter = np.arange(start,end,step)
+ result = np.zeros(shape=(3,len(parameter)))
+ end=0
+ for j,i in enumerate(parameter):
+ if parameter_name=="ecutwfc":
+ self.ecutwfc(i)
+ self.job_id=f"ecutwfc_{i}"
+ if parameter_name=="kpoints":
+ self.k_points(int(i))
+ self.job_id=f"kpoints_{i}"
+ if debug==False:
+ self.scf(num_core)
+ path = f'./Projects/{self.project_id}/{self.job_id}/{self.job_id}.save/data-file-schema.xml'
+ temp_en = get_total_energy(path)
+ temp_time = get_time(path)
+ result[0][j]=i #parameters
+ result[1][j]=temp_en #energy
+ result[2][j]=temp_time #time
+ end+=1
+ if j!=0:
+ if out==True:
+ print(f"{parameter_name}: {result[0][j]} DeltaE :{(result[1][j]-result[1][j-1])} Ry Time: {result[2][j]} seconds")
+ if abs(result[1][j-1] - result[1][j]) < conv_thr:
+ end=j
+ break
+ # print(result.T[:end+1].T)
+ return result.T[:end+1].T
+
+
+def get_time(path):
+ obj = untangle.parse(path)
+ time = float(obj.qes_espresso.timing_info.total.wall.cdata)
+ return time
+ # with open(path, 'r') as data:
+ # data = data.read().split()
+ # counter = 0
+ # for j,i in enumerate(data):
+ # # if i == "PWSCF":
+ # # counter += 1
+ # # if counter ==3:
+ # # # print(f"CPU: {data[j+2]}, WALL: {data[j+4]}")
+ # # return (data[j+4])
+ # if i=='End':
+ # return(data[j-2])
diff --git a/susyexists/src/writes.py b/susyexists/src/writes.py
new file mode 100644
index 00000000..c3579f61
--- /dev/null
+++ b/susyexists/src/writes.py
@@ -0,0 +1,55 @@
+def write_atom_species(file,atomic_species):
+ with open(file, "a") as file_object:
+ file_object.write("ATOMIC_SPECIES \n")
+ for atom in atomic_species:
+ listed = list(atom.values())
+ file_object.write(" ".join(listed)+'\n')
+
+
+def write_atom_positions(file, positions):
+ with open(file, "a") as file_object:
+ file_object.write("ATOMIC_POSITIONS (crystal) \n")
+ for i in positions:
+ try:
+ file_object.write(" ".join(i)+'\n')
+ except:
+ try:
+ file_object.write(" ".join(i.astype(str))+'\n')
+ except:
+ file_object.write(" ".join(str(i))+'\n')
+
+def write_cell_parameters(file, cell):
+ with open(file, "a") as file_object:
+ file_object.write("CELL_PARAMETERS (angstrom) \n")
+ for i in cell:
+ try:
+ file_object.write(" ".join(i)+'\n')
+ except:
+ try:
+ file_object.write(" ".join(i.astype(str))+'\n')
+ except:
+ file_object.write(" ".join(str(i))+'\n')
+ # print(i.astype(str))
+
+
+def write_k_points(file, k):
+ with open(file, "a") as file_object:
+ file_object.write("K_POINTS automatic \n")
+ file_object.write(k+'\n')
+
+def write_k_points_bands(file,k):
+ with open(file, "a") as file_object:
+ file_object.write("K_POINTS crystal_b \n")
+ file_object.write(str(len(k))+'\n')
+ for point in k:
+ listed = list(point.values())
+ file_object.write(" ".join(listed)+'\n')
+
+def write_k_points_matdyn(file,k):
+ with open(file, "a") as file_object:
+ file_object.write(str(len(k))+'\n')
+ for point in k:
+ listed = list(point.values())
+ file_object.write(" ".join(listed)+'\n')
+
+