From 756f4da3aec82c1bd52e79a54c1fb10f67946140 Mon Sep 17 00:00:00 2001 From: Yibin Jiang <44966246+chemyibinjiang@users.noreply.github.com> Date: Thu, 23 Dec 2021 19:51:58 +0000 Subject: [PATCH] Added the python version --- py-CIREALS/Basic_function.ipynb | 395 ++++++++++++ py-CIREALS/data/VEGAS.csv | 1000 +++++++++++++++++++++++++++++++ py-CIREALS/data/test.cif | 348 +++++++++++ py-CIREALS/data/torchquad.csv | 1000 +++++++++++++++++++++++++++++++ py-CIREALS/params/SF.xlsx | Bin 0 -> 35244 bytes py-CIREALS/params/SF_name.txt | 211 +++++++ 6 files changed, 2954 insertions(+) create mode 100644 py-CIREALS/Basic_function.ipynb create mode 100644 py-CIREALS/data/VEGAS.csv create mode 100644 py-CIREALS/data/test.cif create mode 100644 py-CIREALS/data/torchquad.csv create mode 100644 py-CIREALS/params/SF.xlsx create mode 100644 py-CIREALS/params/SF_name.txt diff --git a/py-CIREALS/Basic_function.ipynb b/py-CIREALS/Basic_function.ipynb new file mode 100644 index 0000000..2f8a102 --- /dev/null +++ b/py-CIREALS/Basic_function.ipynb @@ -0,0 +1,395 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "18:52:40|TQ-INFO| Initializing torchquad.\n", + "18:52:40|TQ-INFO| __pyTorch VERSION:\n", + "18:52:40|TQ-INFO| __CUDNN VERSION:7605\n", + "18:52:40|TQ-INFO| __Number of CUDA Devices:1\n", + "18:52:40|TQ-INFO| Active CUDA Device: GPU0\n", + "18:52:40|TQ-INFO| Setting default tensor type to cuda.Float32 (CUDA is initialized).\n" + ] + } + ], + "source": [ + "import torch\n", + "from gemmi import cif\n", + "import numpy as np \n", + "import pandas as pd\n", + "import sympy\n", + "from sympy import solve\n", + "from sympy import Symbol\n", + "import torchquad\n", + "from matplotlib import pyplot as plt\n", + "# Enable GPU support if available\n", + "torchquad.enable_cuda() " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def read_cif_file(file_path):\n", + " \"\"\"\n", + " To do: given the file path, read in the cif file. \n", + " Input: \n", + " file_path: the path to the cif file\n", + " Return: \n", + " cell_prams: list object contaning a,b,c,alpha, beta and gama\n", + " atom_type: list obejct containing the types of atoms\n", + " coor: the coordinate of the atoms\n", + " \"\"\"\n", + " doc = cif.read_file(file_path)\n", + " crystal = doc[0]\n", + " cell_params = [float(crystal.find_value('_cell_length_a')),\n", + " float(crystal.find_value('_cell_length_b')),\n", + " float(crystal.find_value('_cell_length_c')),\n", + " float(crystal.find_value('_cell_angle_alpha'))/180*np.pi,\n", + " float(crystal.find_value('_cell_angle_beta'))/180*np.pi,\n", + " float(crystal.find_value('_cell_angle_gamma'))/180*np.pi]\n", + " atom_type = list(crystal.find_loop('_atom_site_type_symbol'))\n", + "\n", + " coor = np.array([[float(i) for i in crystal.find_loop('_atom_site_fract_x')],\n", + " [float(i) for i in crystal.find_loop('_atom_site_fract_y')],\n", + " [float(i) for i in crystal.find_loop('_atom_site_fract_z')]]).T\n", + " return cell_params,atom_type,coor\n", + "def read_atomic_scattering_factor(name_path,file_path):\n", + " \"\"\"\n", + " To do: given the file path, read in the atomic scattering factors. \n", + " Check http://lampx.tugraz.at/~hadley/ss1/crystaldiffraction/atomicformfactors/formfactors.php for more details. \n", + " Input: \n", + " name_path: the path recording the names of the atom types\n", + " file_path: the path recording the corresponding coefficients to calculate the scattering factor. The columns are arranged\n", + " in the order of a1,b1,a2,b2,a3,b3,c. ()\n", + " Return:\n", + " sf_names: the atom names for the calculation of scattering factors\n", + " sf_factor: the coefficeint to calculate scattering factor\n", + " \n", + " \"\"\"\n", + " sf_names = [i.split() for i in open(name_path).readlines()]\n", + " sf_names = np.array(sf_names).flatten().tolist()\n", + " \n", + " data = pd.read_excel(file_path,header=None)\n", + " sf_factor = np.array(data)\n", + " \n", + " return sf_names, sf_factor \n", + "\n", + "def calculate_fj(k,atom_type,sf_names,sf_factor):\n", + " \"\"\"\n", + " To do: given the scattering vectors, names and coefficients, calculate the fj constant for PXRD simulation\n", + " Input:\n", + " k: the scattering vector defined as 4*pi/lambda*sin(theta)\n", + " atom_type: the atom types\n", + " sf_names: the atoms of scattering \n", + " sf_factor: the coefficeints for scattering calculation\n", + " Return:\n", + " fj: the calculated scattering factor\n", + " \"\"\"\n", + " fj = []\n", + " index_temp = [sf_names.index(i) for i in atom_type]\n", + " for k_temp in k:\n", + " for i in index_temp:\n", + " coeff = sf_factor[i]\n", + " part1 = coeff[0]*np.exp(-coeff[1]*((k_temp/np.pi)**2))\n", + " part2 = coeff[2]*np.exp(-coeff[3]*((k_temp/np.pi)**2))\n", + " part3 = coeff[4]*np.exp(-coeff[5]*((k_temp/np.pi)**2)) + coeff[5]\n", + " fj_temp = part1 + part2+ part3\n", + " fj.append(fj_temp)\n", + " fj = np.array(fj).reshape((len(k),len(atom_type)))\n", + " return fj\n", + "def solve_lattice_c(lattice_a,lattice_b):\n", + " \"\"\"\n", + " To do: given the lattice constant, create the basic vector representing lattice c \n", + " Input:\n", + " lattice_a: the lattice vector for a\n", + " lattice_b: the lattice vector for b\n", + " Return:\n", + " A unit vector for lattice vector c\n", + " \"\"\"\n", + " lattice_cx = Symbol('lattice_cx')\n", + " lattice_cy = Symbol('lattice_cy')\n", + " lattice_cz = Symbol('lattice_cz')\n", + " eq1 = sympy.Eq(lattice_cx**2+lattice_cy**2+lattice_cz**2,1)\n", + " eq2 = sympy.Eq((lattice_cx*lattice_a[0] + lattice_cy*lattice_a[1]+lattice_cy*lattice_a[2])/cell_params[0],np.cos(cell_params[4]))\n", + " eq3 = sympy.Eq((lattice_cx*lattice_b[0] + lattice_cy*lattice_b[1]+lattice_cy*lattice_b[2])/cell_params[0],np.cos(cell_params[5]))\n", + " result = sympy.solve([eq1,eq2,eq3],(lattice_cx,lattice_cy,lattice_cz))\n", + " result = np.array(result).astype(float)\n", + " \n", + " # Only return the lattice that satisfies the right-hand relation\n", + " for i in result:\n", + " if i[-1]>0:\n", + " return i\n", + "def calculate_rotation_matrix(theta):\n", + " \"\"\"\n", + " To do: the rotation matrix for the given theta_x, theta_y, and theta_z\n", + " Input:\n", + " theta = [theta_x,theta_y,theta_z]\n", + " theta_x: Rotation operation around X\n", + " theta_y: Rotation operation around Y\n", + " theta_z: Rotation operation around Z\n", + " Returns:\n", + " rot_matrix: 3x3 rotation matrix. The vector that will be rotated should be a column\n", + " \"\"\" \n", + "\n", + " rot_x = torch.tensor([[1.0, 0.0, 0.0],\n", + " [0.0, torch.cos(theta[:,0]), -torch.sin(theta[:,0])],\n", + " [0.0, torch.sin(theta[:,0]), torch.cos(theta[:,0])]],dtype=torch.float64)\n", + "\n", + " rot_y = torch.tensor([[ torch.cos(theta[:,1]), 0.0, torch.sin(theta[:,1])],\n", + " [ 0.0, 1.0, 0.0],\n", + " [-torch.sin(theta[:,1]), 0.0, torch.cos(theta[:,1])]],dtype=torch.float64)\n", + "\n", + "# rot_z = torch.tensor([[torch.cos(theta[:,2]), -torch.sin(theta[:,2]), 0.0],\n", + "# [torch.sin(theta[:,2]), torch.cos(theta[:,2]), 0.0],\n", + "# [0.0, 0.0, 1.0]],dtype=torch.float64)\n", + "\n", + "# rot_matrix = torch.matmul(rot_z, torch.matmul(rot_y, rot_x))\n", + " rot_matrix = torch.matmul(rot_y, rot_x)\n", + " return rot_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_intensity(theta_total):\n", + " \"\"\"\n", + " To do: for the given rotation angle theta and the specific theta angle, calculate the diffraction intensity\n", + " Input:\n", + " theta: a list containing the rotation angles\n", + " k_temp: the scattering vector\n", + " fj_temp: the scattering factors corresponding to the scattering vector\n", + " Output:\n", + " I: the intensity for this specific orientation\n", + " \"\"\"\n", + " theta_total = theta_total.reshape(-1,2)\n", + " I = []\n", + " for theta in theta_total:\n", + " theta = theta.reshape(1,2)\n", + " rot_matrix = calculate_rotation_matrix(theta)\n", + "# rot_matrix = torch.tensor([[torch.sin(theta[:,1])*torch.cos(theta[:,0])],\n", + "# [torch.sin(theta[:,0])],\n", + "# [torch.cos(theta[:,1])*torch.cos(theta[:,0])]], dtype = torch.float64).flatten()\n", + " aZ = torch.matmul(rot_matrix,lattice_a.reshape(-1,1))[-1]\n", + " bZ = torch.matmul(rot_matrix,lattice_b.reshape(-1,1))[-1]\n", + " cZ = torch.matmul(rot_matrix,lattice_c.reshape(-1,1))[-1]\n", + " \n", + " F = abs((torch.exp((coor*torch.tensor([aZ,bZ,cZ])).sum(axis=1)*k_temp*1j)*fj_temp).sum())**2\n", + " if torch.sin(k_temp/2*aZ) == 0:\n", + " Gx = nx**2\n", + " else:\n", + " Gx = (torch.sin(k_temp/2*aZ*nx)/torch.sin(k_temp/2*aZ))**2\n", + "\n", + " if torch.sin(k_temp/2*bZ) == 0:\n", + " Gy = ny**2\n", + " else:\n", + " Gy = (torch.sin(k_temp/2*bZ*ny)/torch.sin(k_temp/2*bZ))**2\n", + "\n", + " if torch.sin(k_temp/2*cZ) == 0:\n", + " Gz = nz**2\n", + " else: \n", + " Gz = (torch.sin(k_temp/2*cZ*nz)/torch.sin(k_temp/2*cZ))**2\n", + "\n", + " I.append(F*Gx*Gy*Gz)\n", + " return torch.tensor(I)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# read and parse a CIF file\n", + "file_path = \"./data/test.cif\"\n", + "cell_params,atom_type,coor = read_cif_file(file_path)\n", + "# In this test example, we actually built Zr4+, so we need to replace the Zr with Zr4+\n", + "atom_type = ['Zr4+' if i=='Zr' else i for i in atom_type]\n", + "\n", + "# read in the coefficeint to calculate the scattering factor\n", + "name_path = './params/SF_name.txt'\n", + "file_path = './params/SF.xlsx'\n", + "sf_names,sf_factor = read_atomic_scattering_factor(name_path,file_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# define parameters for simulation\n", + "Xlambda = 1.54 # the wavelength of X-ray source in A\n", + "min_twotheta = 2.0 # the minimum value of 2-theta in degree\n", + "max_twotheta = 20.0 # the maximum value of 2-theta in degree\n", + "sampling_num = 1000 # sampling number\n", + "# define the crystal size \n", + "nx = 1000\n", + "ny = 1000\n", + "nz = 1\n", + "# convert from degree to non-unit\n", + "twotheta = np.linspace(min_twotheta,max_twotheta,sampling_num)*np.pi/180 \n", + "# define the scattering vector\n", + "k = 4*np.pi*np.sin(twotheta/2)/Xlambda \n", + "# define the scattering factor for individual atoms\n", + "fj = calculate_fj(k,atom_type,sf_names,sf_factor) \n", + "\n", + "# convert everything to pytorch\n", + "fj = torch.tensor(fj,dtype=torch.float64)\n", + "k = torch.tensor(k,dtype=torch.float64)\n", + "coor = torch.tensor(coor,dtype=torch.float64)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# create the basic vector of a,b and c according to the lattice constant \n", + "# we force the lattice a on the (X,Y) surface\n", + "lattice_a = np.array([cell_params[0],0,0])\n", + "# we force the lattice b on the (X,Y) surface with a angle of \n", + "lattice_b = np.array([cell_params[1]*np.cos(cell_params[5]),cell_params[1]*np.sin(cell_params[5]),0])\n", + "# we define the lattice c according to its angle between a and b\n", + "# solve the equation for c\n", + "lattice_c = (cell_params[2]*solve_lattice_c(lattice_a,lattice_b))\n", + "# the Z axis\n", + "Z = torch.tensor([0,0,1]).reshape(-1,1)\n", + "\n", + "lattice_a = torch.tensor(lattice_a)\n", + "lattice_b = torch.tensor(lattice_b)\n", + "lattice_c = torch.tensor(lattice_c)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "18:53:03|TQ-INFO| Computed integral was tensor(-9.5320e+09, dtype=torch.float64)\n", + "18:53:25|TQ-INFO| Computed integral was tensor(-5.6775e+09, dtype=torch.float64)\n", + "18:53:46|TQ-INFO| Computed integral was tensor(1.1233e+09, dtype=torch.float64)\n", + "18:54:07|TQ-INFO| Computed integral was tensor(1.9831e+11, dtype=torch.float64)\n", + "18:54:29|TQ-INFO| Computed integral was tensor(-7.4777e+09, dtype=torch.float64)\n", + "18:54:49|TQ-INFO| Computed integral was tensor(5.3349e+10, dtype=torch.float64)\n", + "18:55:16|TQ-INFO| Computed integral was tensor(4.9633e+10, dtype=torch.float64)\n", + "18:55:42|TQ-INFO| Computed integral was tensor(4.1688e+09, dtype=torch.float64)\n", + "18:56:12|TQ-INFO| Computed integral was tensor(-1.1636e+10, dtype=torch.float64)\n", + "18:56:47|TQ-INFO| Computed integral was tensor(7.9625e+10, dtype=torch.float64)\n", + "18:58:16|TQ-INFO| Computed integral was tensor(1.4182e+10, dtype=torch.float64)\n", + "18:59:55|TQ-INFO| Computed integral was tensor(3.2906e+10, dtype=torch.float64)\n", + "19:01:22|TQ-INFO| Computed integral was tensor(1.9506e+10, dtype=torch.float64)\n", + "19:02:51|TQ-INFO| Computed integral was tensor(-3.6119e+10, dtype=torch.float64)\n", + "19:04:10|TQ-INFO| Computed integral was tensor(-3.9208e+10, dtype=torch.float64)\n", + "19:05:27|TQ-INFO| Computed integral was tensor(3.3871e+10, dtype=torch.float64)\n", + "19:06:46|TQ-INFO| Computed integral was tensor(-4.0472e+10, dtype=torch.float64)\n", + "19:07:58|TQ-INFO| Computed integral was tensor(5.2812e+10, dtype=torch.float64)\n", + "19:09:11|TQ-INFO| Computed integral was tensor(1.5932e+09, dtype=torch.float64)\n", + "19:10:26|TQ-INFO| Computed integral was tensor(-7.2343e+10, dtype=torch.float64)\n", + "19:11:42|TQ-INFO| Computed integral was tensor(8.2594e+09, dtype=torch.float64)\n", + "19:12:57|TQ-INFO| Computed integral was tensor(-1.0432e+10, dtype=torch.float64)\n", + "19:14:11|TQ-INFO| Computed integral was tensor(-6.5600e+10, dtype=torch.float64)\n", + "19:15:25|TQ-INFO| Computed integral was tensor(-1.8100e+09, dtype=torch.float64)\n", + "19:16:34|TQ-INFO| Computed integral was tensor(8.1026e+10, dtype=torch.float64)\n", + "19:17:43|TQ-INFO| Computed integral was tensor(-9.4652e+09, dtype=torch.float64)\n", + "19:18:52|TQ-INFO| Computed integral was tensor(1.7871e+10, dtype=torch.float64)\n", + "19:20:00|TQ-INFO| Computed integral was tensor(-2.8760e+10, dtype=torch.float64)\n", + "19:21:12|TQ-INFO| Computed integral was tensor(-1.8960e+10, dtype=torch.float64)\n", + "19:22:23|TQ-INFO| Computed integral was tensor(-3.3547e+10, dtype=torch.float64)\n", + "19:23:30|TQ-INFO| Computed integral was tensor(-3.5664e+09, dtype=torch.float64)\n", + "19:24:35|TQ-INFO| Computed integral was tensor(3.4237e+10, dtype=torch.float64)\n", + "19:25:44|TQ-INFO| Computed integral was tensor(-1.2290e+10, dtype=torch.float64)\n", + "19:26:55|TQ-INFO| Computed integral was tensor(2.2666e+10, dtype=torch.float64)\n", + "19:28:01|TQ-INFO| Computed integral was tensor(4.7930e+09, dtype=torch.float64)\n", + "19:29:04|TQ-INFO| Computed integral was tensor(2.5066e+10, dtype=torch.float64)\n", + "19:30:09|TQ-INFO| Computed integral was tensor(1.1991e+10, dtype=torch.float64)\n", + "19:31:19|TQ-INFO| Computed integral was tensor(3.5950e+10, dtype=torch.float64)\n", + "19:32:25|TQ-INFO| Computed integral was tensor(-1.2536e+10, dtype=torch.float64)\n", + "19:33:31|TQ-INFO| Computed integral was tensor(5.7633e+09, dtype=torch.float64)\n", + "19:34:34|TQ-INFO| Computed integral was tensor(2.6560e+10, dtype=torch.float64)\n", + "19:35:39|TQ-INFO| Computed integral was tensor(1.7084e+10, dtype=torch.float64)\n", + "19:36:46|TQ-INFO| Computed integral was tensor(-5.2655e+09, dtype=torch.float64)\n", + "19:37:48|TQ-INFO| Computed integral was tensor(-1.4014e+09, dtype=torch.float64)\n", + "19:38:52|TQ-INFO| Computed integral was tensor(1.9365e+10, dtype=torch.float64)\n", + "19:39:56|TQ-INFO| Computed integral was tensor(3.9133e+11, dtype=torch.float64)\n", + "19:40:59|TQ-INFO| Computed integral was tensor(-2.9777e+10, dtype=torch.float64)\n", + "19:41:29|TQ-INFO| Computed integral was tensor(-1.2827e+10, dtype=torch.float64)\n", + "19:41:52|TQ-INFO| Computed integral was tensor(7.5860e+09, dtype=torch.float64)\n", + "19:42:14|TQ-INFO| Computed integral was tensor(-2.1378e+10, dtype=torch.float64)\n", + "19:42:36|TQ-INFO| Computed integral was tensor(7.1612e+09, dtype=torch.float64)\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mk_temp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mk_index\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mfj_temp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfj\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mk_index\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[0mintegral_value\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mintegrate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcalculate_intensity\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mdim\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mN\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10000\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mintegration_domain\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 7\u001b[0m \u001b[0mIs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mintegral_value\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtwotheta\u001b[0m\u001b[1;33m*\u001b[0m\u001b[1;36m180\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mtorch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtensor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mIs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcpu\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\torchquad\\integration\\monte_carlo.py\u001b[0m in \u001b[0;36mintegrate\u001b[1;34m(self, fn, dim, N, integration_domain, seed)\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[0mlogger\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdebug\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Evaluating integrand\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 55\u001b[1;33m \u001b[0mfunction_values\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msample_points\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0mlogger\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdebug\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Computing integration domain volume\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36mcalculate_intensity\u001b[1;34m(theta_total)\u001b[0m\n\u001b[0;32m 35\u001b[0m \u001b[0mGz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnz\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 36\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 37\u001b[1;33m \u001b[0mGz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mk_temp\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mcZ\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnz\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mtorch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mk_temp\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mcZ\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 38\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[0mI\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtheta\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mF\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mGx\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mGy\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mGz\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "model = torchquad.MonteCarlo()\n", + "Is = []\n", + "for k_index in range(len(k)):\n", + " k_temp = k[k_index]\n", + " fj_temp = fj[k_index]\n", + " integral_value = model.integrate(calculate_intensity,dim=2,N=10000,integration_domain = [[0,2*np.pi],[0,2*np.pi]])\n", + " Is.append(integral_value)\n", + "plt.plot(twotheta*180/np.pi,torch.tensor(Is).cpu())\n", + "np.savetxt('./data/MonteCarlo.csv',np.array(torch.tensor(Is).cpu()),delimiter=',')" + ] + }, + { + "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.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/py-CIREALS/data/VEGAS.csv b/py-CIREALS/data/VEGAS.csv new file mode 100644 index 0000000..e70614f --- /dev/null +++ b/py-CIREALS/data/VEGAS.csv @@ -0,0 +1,1000 @@ +3.565461648179200000e+13 +1.040263812218880000e+14 +2.926828532531200000e+13 +7.608672138035200000e+13 +3.940425295462400000e+13 +2.398672755097600000e+13 +5.734986783129600000e+13 +2.247139472179200000e+13 +1.938240726630400000e+13 +1.865133169049600000e+13 +2.024766491852800000e+13 +2.701674309222400000e+13 +2.207254157721600000e+13 +4.191329399603200000e+13 +2.657075226214400000e+13 +1.842639955558400000e+13 +9.484517769216000000e+12 +2.009594016563200000e+13 +3.188381135667200000e+13 +1.361690650214400000e+13 +1.578763708006400000e+13 +1.553113337036800000e+13 +2.086930481152000000e+13 +2.120119589273600000e+13 +1.371158662348800000e+13 +9.900208947200000000e+12 +2.565013399142400000e+13 +1.178394951680000000e+13 +1.559901503488000000e+13 +3.964728770560000000e+13 +8.610312093696000000e+12 +1.022209871052800000e+13 +3.325246046208000000e+12 +1.306375330201600000e+13 +1.506461351936000000e+13 +4.066561228800000000e+12 +7.345558414950400000e+13 +3.704229199872000000e+12 +6.629224349696000000e+12 +7.393636253696000000e+12 +8.101295554560000000e+12 +6.897526636544000000e+12 +6.703250753454080000e+14 +9.380990812160000000e+12 +6.211645210624000000e+12 +7.318966632448000000e+12 +9.826762699571200000e+13 +3.158138159104000000e+12 +8.888835375104000000e+12 +4.967472562176000000e+12 +6.020628742144000000e+12 +4.587951489024000000e+12 +4.084595687424000000e+13 +8.373074919424000000e+12 +7.236582113280000000e+12 +3.513219022848000000e+12 +5.660326494208000000e+12 +4.327856930816000000e+13 +3.375804710912000000e+12 +2.990425243648000000e+12 +4.328168882176000000e+12 +2.054502875136000000e+12 +3.481124995072000000e+12 +2.513089855488000000e+12 +1.930332995584000000e+13 +4.210682232832000000e+12 +2.218937024512000000e+12 +4.735898222592000000e+12 +1.520849256448000000e+12 +3.110177341440000000e+12 +1.283136684032000000e+13 +2.696611889152000000e+12 +8.575780527276032000e+15 +4.458571890688000000e+12 +1.363378962432000000e+12 +6.496754073600000000e+11 +5.855659950080000000e+11 +2.587166769152000000e+12 +1.604436623360000000e+12 +2.282165108736000000e+12 +1.402721271808000000e+12 +4.610831941632000000e+13 +3.387023360000000000e+11 +1.030621888512000000e+12 +4.817609031680000000e+12 +9.509719286743040000e+14 +6.579488083148800000e+13 +8.530906474086400000e+13 +6.053151165644800000e+13 +6.680043585536000000e+13 +5.638262358016000000e+13 +5.013080794726400000e+13 +4.560723011174400000e+13 +1.590952984576000000e+13 +4.302970447462400000e+13 +4.885172138803200000e+13 +2.857102003404800000e+13 +4.547312143564800000e+13 +2.942461332684800000e+13 +2.192454975488000000e+13 +5.175852086067200000e+13 +3.073879782195200000e+13 +1.820146909839360000e+14 +6.301338619084800000e+13 +7.384963901030400000e+13 +3.759610527744000000e+13 +1.364017859788800000e+13 +4.908513859993600000e+13 +1.568553262120960000e+14 +2.599482399129600000e+13 +2.445604709990400000e+13 +4.873098834739200000e+13 +3.369746825216000000e+13 +1.351831519232000000e+13 +1.060559860531200000e+13 +2.170534284492800000e+13 +3.246301957324800000e+13 +1.484295084441600000e+13 +1.183525424332800000e+13 +2.068768515686400000e+13 +3.158903986585600000e+13 +8.117625552896000000e+12 +2.631561065267200000e+13 +1.277072035020800000e+13 +1.841838214348800000e+13 +9.273309396992000000e+12 +1.196493897728000000e+13 +4.063931609907200000e+13 +5.793746255872000000e+12 +1.863227696742400000e+13 +2.344869271961600000e+13 +1.976520042086400000e+13 +1.352070594560000000e+13 +1.879421485056000000e+13 +1.225080281497600000e+13 +8.867398287360000000e+12 +2.948027383808000000e+13 +1.709141340979200000e+13 +1.211914885529600000e+13 +5.295155707904000000e+12 +5.782870215884800000e+13 +2.192648962048000000e+13 +1.416189234380800000e+13 +1.901896400896000000e+12 +2.278501751193600000e+13 +1.389601751040000000e+13 +8.555034312704000000e+12 +4.457534744166400000e+13 +1.038590201036800000e+13 +3.644951258726400000e+13 +5.539333931008000000e+12 +4.657945300172800000e+13 +5.481490284544000000e+12 +3.521835014553600000e+13 +9.249612627968000000e+12 +5.090380873728000000e+12 +2.309388500992000000e+12 +7.595779162112000000e+12 +9.806182927564800000e+13 +4.640439009280000000e+12 +1.197969244160000000e+13 +5.332012105728000000e+12 +1.164077380403200000e+13 +3.505543184384000000e+12 +4.000453230592000000e+12 +7.131024064512000000e+12 +1.453280722944000000e+13 +6.069022097408000000e+12 +4.627031916544000000e+12 +4.705324892160000000e+12 +2.310834749440000000e+12 +2.113368489984000000e+12 +5.171981582336000000e+12 +3.052894420992000000e+12 +7.796266369024000000e+12 +3.510884368384000000e+12 +1.614454928179200000e+13 +3.535723036672000000e+12 +4.826482081792000000e+12 +3.751453917184000000e+12 +5.855644745728000000e+12 +4.700870017024000000e+12 +3.550912970752000000e+12 +3.933258907648000000e+12 +8.259774709760000000e+12 +1.410383373926400000e+13 +3.362684928000000000e+11 +2.110490279936000000e+12 +5.739867275264000000e+12 +1.044058399047680000e+14 +7.784989458432000000e+12 +1.187457269760000000e+13 +3.608285806592000000e+12 +1.280245760000000000e+12 +1.772804122869760000e+14 +1.066803134464000000e+12 +6.821337104384000000e+12 +1.100744124006400000e+13 +1.316034602598400000e+13 +9.751872143360000000e+12 +2.136924697395200000e+13 +1.375097847808000000e+12 +2.890407870464000000e+12 +3.529328230400000000e+11 +1.729690861568000000e+12 +1.849945620480000000e+12 +2.090701946880000000e+12 +7.902050385920000000e+12 +1.543840674611200000e+13 +1.146025279488000000e+12 +8.129254785024000000e+12 +2.575473573888000000e+12 +1.038353891328000000e+12 +5.803003740160000000e+11 +1.097089351680000000e+11 +1.470248255488000000e+12 +1.750156050432000000e+12 +1.509282283520000000e+12 +3.520934445056000000e+12 +1.081341378560000000e+12 +2.713230770176000000e+12 +2.797827522560000000e+12 +1.105307238400000000e+12 +7.654007111680000000e+11 +4.881925013504000000e+12 +1.236404273152000000e+12 +4.906363453440000000e+11 +1.276037562368000000e+12 +9.775714795520000000e+11 +1.743173844992000000e+12 +1.016374034432000000e+12 +1.924936826880000000e+11 +1.616844685312000000e+12 +6.849233420288000000e+12 +1.833536716800000000e+12 +1.536316407808000000e+12 +1.893663703040000000e+11 +4.900028088320000000e+11 +4.214342942720000000e+11 +4.873898688512000000e+12 +1.370272432128000000e+12 +3.583788187648000000e+12 +1.610389095710720000e+14 +3.693242377830400000e+13 +2.097675449139200000e+13 +1.000436819558400000e+13 +4.156127025561600000e+13 +1.041484480512000000e+13 +4.388185440256000000e+12 +2.477070798028800000e+13 +2.916370350080000000e+12 +4.890853638144000000e+12 +1.929124773888000000e+12 +4.128166641664000000e+12 +1.062599760281600000e+13 +4.658846760960000000e+12 +1.452567429120000000e+12 +3.260746301440000000e+12 +3.549133012992000000e+12 +2.724478320640000000e+12 +6.437901697024000000e+12 +8.151310008320000000e+11 +1.594470537625600000e+13 +1.013121417216000000e+12 +7.868948807680000000e+11 +1.357012795392000000e+12 +1.684198653952000000e+12 +4.917029135974400000e+13 +2.589850337280000000e+11 +5.984006963200000000e+11 +9.449976627200000000e+12 +6.193129472000000000e+10 +4.534363750400000000e+11 +5.768474787840000000e+11 +5.908356710400000000e+10 +6.158615183360000000e+11 +3.715187671040000000e+11 +3.158160179200000000e+11 +5.802399105024000000e+12 +3.582420910080000000e+11 +1.236754235392000000e+12 +1.337469341532160000e+14 +4.309066029465600000e+13 +2.658595241984000000e+13 +4.576184893440000000e+13 +4.337689218252800000e+13 +2.092296673689600000e+13 +1.781125034803200000e+13 +2.107641744588800000e+13 +5.409229871513600000e+13 +1.024024326963200000e+13 +3.000233885696000000e+13 +1.422696172748800000e+13 +1.034381846118400000e+13 +2.357413806080000000e+13 +1.744741649612800000e+13 +1.046323029606400000e+13 +2.831823352627200000e+13 +5.570295234560000000e+12 +1.670316556288000000e+13 +9.329226809344000000e+12 +6.527340511232000000e+12 +7.877748588544000000e+12 +4.163750173081600000e+13 +6.394273909964800000e+13 +9.354154606592000000e+12 +1.221994532044800000e+13 +3.621025218560000000e+12 +5.352214495232000000e+12 +1.357749053030400000e+13 +1.181442008678400000e+13 +8.734525358080000000e+12 +2.621122543616000000e+12 +7.693525843968000000e+12 +1.161162784768000000e+12 +5.418048290816000000e+12 +3.708500312064000000e+12 +1.587225716326400000e+13 +2.198609193861120000e+14 +3.134486478848000000e+12 +2.282877616128000000e+12 +1.271481971507200000e+13 +4.000818921472000000e+12 +4.084377059328000000e+12 +5.788762374144000000e+12 +2.655177146368000000e+12 +6.707687194624000000e+12 +1.742006910976000000e+12 +2.363451768832000000e+12 +1.359118467072000000e+12 +8.720049766400000000e+12 +2.498237562880000000e+12 +2.000970711040000000e+12 +6.783451136000000000e+11 +6.452098891776000000e+12 +1.708068962304000000e+12 +1.864078721024000000e+12 +8.016507174912000000e+12 +1.499339948032000000e+13 +6.732482347008000000e+12 +1.004222939136000000e+12 +1.994388799488000000e+12 +1.732154228736000000e+12 +2.655457116160000000e+12 +4.086841475072000000e+12 +5.145807552512000000e+12 +1.922901606400000000e+12 +1.017117356851200000e+13 +8.976122675200000000e+10 +1.596910469120000000e+11 +2.999016488960000000e+11 +1.060001611776000000e+12 +7.402546790400000000e+11 +1.494802628608000000e+12 +5.085544120320000000e+11 +5.362112266240000000e+11 +1.202568036352000000e+12 +2.217012887552000000e+12 +1.927545225216000000e+12 +6.625353531392000000e+12 +2.534309101568000000e+12 +4.605618749440000000e+11 +2.973309992960000000e+11 +6.532319150080000000e+11 +4.193251229696000000e+12 +2.186370744320000000e+12 +2.144758824960000000e+11 +1.690114293760000000e+11 +3.567437414400000000e+11 +5.703647887360000000e+11 +5.047320248320000000e+11 +3.287684009164800000e+13 +3.676529623040000000e+11 +5.613634191360000000e+11 +9.815394713600000000e+10 +9.037235814400000000e+10 +1.158593380352000000e+12 +4.726606056652800000e+13 +4.863228379136000000e+12 +5.229577011200000000e+10 +1.754171703296000000e+12 +2.568935505920000000e+11 +1.509502877696000000e+12 +3.114592174080000000e+11 +1.024511180800000000e+12 +6.914610790400000000e+10 +6.788193320960000000e+11 +1.099942550568960000e+14 +2.346608558080000000e+11 +1.012743454720000000e+11 +7.253313454080000000e+11 +9.718798745600000000e+11 +4.190492262400000000e+10 +1.034041917440000000e+11 +1.267819479040000000e+12 +2.076344524800000000e+10 +1.274182533120000000e+11 +2.170990919680000000e+11 +3.948082790400000000e+10 +4.437195620352000000e+12 +1.235330269184000000e+12 +1.588817592320000000e+11 +8.842947788800000000e+10 +8.656797696000000000e+10 +7.910958694400000000e+11 +1.703118929920000000e+11 +5.140553400320000000e+11 +2.909062299648000000e+12 +1.532884746240000000e+11 +1.886390190080000000e+11 +8.419289989120000000e+11 +4.886110404608000000e+12 +6.469855477760000000e+11 +2.251747328000000000e+11 +1.735344291840000000e+11 +3.905587200000000000e+10 +6.780283781120000000e+11 +1.459422330880000000e+11 +1.046687334400000000e+11 +1.835630387200000000e+10 +2.219721318400000000e+10 +1.905024204800000000e+10 +2.247497646080000000e+11 +6.168048435200000000e+11 +1.084006318080000000e+11 +1.724401254400000000e+10 +1.808250306560000000e+11 +1.141253980160000000e+11 +1.215600148480000000e+11 +5.488366059520000000e+11 +3.332730716160000000e+11 +6.913084620800000000e+10 +7.003429273600000000e+10 +1.104452075520000000e+11 +6.037766553600000000e+10 +1.165600153600000000e+10 +4.138906157056000000e+12 +4.101707366400000000e+10 +1.424889446400000000e+10 +2.918361497600000000e+10 +2.130131968000000000e+10 +2.454745907200000000e+10 +5.972935475200000000e+10 +3.395731865600000000e+10 +8.414135091200000000e+10 +1.604965498880000000e+11 +2.771877273600000000e+10 +1.366550528000000000e+10 +2.224563650560000000e+11 +1.034626457600000000e+10 +2.279462707200000000e+10 +4.240603136000000000e+10 +5.213541990400000000e+10 +6.293053440000000000e+10 +7.182325350400000000e+10 +3.043738009600000000e+10 +5.021339238400000000e+10 +3.600912384000000000e+10 +4.877975961600000000e+10 +4.111579545600000000e+10 +3.144034713600000000e+10 +4.482215116800000000e+11 +6.257602560000000000e+10 +1.074417582080000000e+11 +1.324880199680000000e+11 +1.646496481280000000e+11 +1.737372139520000000e+11 +1.514186178560000000e+11 +1.820790620160000000e+11 +1.286722846720000000e+11 +1.038258503680000000e+11 +1.199412920320000000e+11 +1.651090718720000000e+11 +3.358657740800000000e+11 +7.945836298240000000e+11 +2.594516500480000000e+12 +7.831917953024000000e+12 +7.640280412979200000e+13 +1.750294299934720000e+14 +3.832879146598400000e+13 +9.282018240102400000e+13 +2.036688381542400000e+13 +7.703053205504000000e+12 +4.255105155072000000e+12 +1.441641109913600000e+13 +4.024296275968000000e+12 +1.169068392448000000e+12 +1.881302630400000000e+12 +1.256307163136000000e+12 +8.351878348800000000e+11 +8.143290368000000000e+11 +1.979244380160000000e+11 +5.449652961280000000e+11 +1.511424891289600000e+13 +3.316854292480000000e+11 +2.052398147174400000e+13 +3.964793978880000000e+11 +4.085350662144000000e+12 +1.600542801920000000e+11 +2.760349450240000000e+11 +8.294882508800000000e+10 +4.789358100480000000e+11 +6.676126924800000000e+10 +4.905885696000000000e+10 +1.933334323200000000e+10 +1.327016509440000000e+11 +3.008893132800000000e+10 +7.407996764160000000e+11 +8.639954944000000000e+10 +1.098606182400000000e+11 +7.314380554240000000e+11 +1.358383411200000000e+10 +1.034375577600000000e+11 +2.404862566400000000e+10 +8.555538841600000000e+10 +1.072095150080000000e+11 +5.953364787200000000e+10 +3.001190973440000000e+11 +1.437556899840000000e+11 +3.427425280000000000e+10 +6.155484672000000000e+09 +3.707243008000000000e+09 +2.750599659520000000e+11 +2.185644800000000000e+09 +1.575240335360000000e+11 +6.543549952000000000e+09 +3.236875264000000000e+10 +3.463147520000000000e+10 +9.064979660800000000e+10 +1.000296729804800000e+13 +5.853313536000000000e+09 +1.345700331520000000e+11 +8.745535488000000000e+09 +1.635907891200000000e+10 +3.624095232000000000e+09 +4.007661977600000000e+10 +4.999537152000000000e+09 +1.760765337600000000e+10 +1.192496640000000000e+10 +9.668237312000000000e+09 +7.137241333760000000e+11 +1.656336793600000000e+10 +7.069020160000000000e+09 +1.672899072000000000e+10 +5.666226176000000000e+10 +5.834462822400000000e+10 +1.865313894400000000e+10 +7.617464320000000000e+09 +3.848547532800000000e+11 +6.794733158400000000e+11 +9.445039308800000000e+10 +4.267877662720000000e+11 +4.295171276800000000e+10 +1.126318899200000000e+11 +9.425479270400000000e+10 +2.230918184960000000e+11 +1.325254983680000000e+11 +1.275016511488000000e+12 +2.563618242560000000e+11 +2.766995128320000000e+11 +5.157614796800000000e+10 +1.571185623040000000e+11 +1.337062440960000000e+11 +3.192061337600000000e+10 +6.484412989440000000e+11 +3.141184061440000000e+11 +3.500491407360000000e+12 +2.538074112000000000e+10 +3.357969920000000000e+09 +4.632042496000000000e+09 +6.310302924800000000e+10 +1.979102494720000000e+11 +2.547321856000000000e+10 +1.471490129920000000e+11 +3.773765713920000000e+11 +1.483257544704000000e+12 +3.665528012800000000e+10 +8.665926205440000000e+11 +3.723671961600000000e+10 +1.355725312000000000e+10 +7.973820416000000000e+09 +2.328353792000000000e+09 +3.795193856000000000e+10 +1.550819655680000000e+11 +1.863180697600000000e+10 +1.965016064000000000e+10 +2.957672243200000000e+10 +4.384918016000000000e+09 +1.748233256960000000e+11 +5.673623961600000000e+10 +1.167901900800000000e+10 +2.521857228800000000e+10 +5.189763072000000000e+09 +1.217701150720000000e+11 +4.573848371200000000e+10 +5.204835368960000000e+11 +5.336854953984000000e+12 +3.367636041728000000e+12 +2.928225026048000000e+12 +3.033853067264000000e+12 +3.334398607360000000e+11 +1.171455213568000000e+12 +6.727892992000000000e+11 +1.020455288832000000e+12 +6.500717035520000000e+11 +1.316033134592000000e+12 +5.648241655808000000e+12 +9.849178685440000000e+11 +2.102790553600000000e+10 +6.734308311040000000e+11 +2.190808842240000000e+11 +4.607612026880000000e+11 +8.714923540480000000e+11 +1.712488120320000000e+11 +1.687327342592000000e+12 +9.468178595840000000e+11 +5.133368115200000000e+10 +4.790655488000000000e+09 +1.734508052480000000e+11 +1.168895692800000000e+10 +1.201718640640000000e+11 +2.513023795200000000e+11 +2.737386086400000000e+10 +1.428640235520000000e+11 +1.111153862246400000e+13 +1.494293708800000000e+11 +3.001879756800000000e+11 +3.589032181760000000e+11 +4.515613696000000000e+09 +2.386552422400000000e+10 +5.358852505600000000e+10 +1.642297088000000000e+09 +6.122299719680000000e+11 +2.588140544000000000e+10 +5.888857702400000000e+10 +2.758475776000000000e+11 +3.443767296000000000e+10 +3.074292940800000000e+10 +1.084953395200000000e+11 +1.606658048000000000e+10 +8.496771584000000000e+09 +2.822715801600000000e+10 +3.466737418240000000e+11 +3.400765030400000000e+10 +4.472348672000000000e+10 +4.733950771200000000e+10 +2.689005363200000000e+10 +1.394449920000000000e+10 +7.485011558400000000e+10 +1.362673766400000000e+10 +1.461369856000000000e+10 +6.307081011200000000e+10 +3.082462617600000000e+10 +8.346378752000000000e+09 +9.320803532800000000e+10 +2.665479168000000000e+09 +5.407497830400000000e+10 +4.880867840000000000e+09 +7.834563072000000000e+09 +1.465047777280000000e+11 +1.675947008000000000e+10 +2.796446924800000000e+10 +2.417637376000000000e+10 +3.192959795200000000e+10 +2.434795315200000000e+10 +7.784321024000000000e+10 +2.439281868800000000e+10 +3.127952384000000000e+10 +2.244771020800000000e+10 +1.836216934400000000e+10 +2.328564121600000000e+10 +5.121911193600000000e+10 +1.921485209600000000e+11 +5.585846272000000000e+11 +6.042937720832000000e+12 +1.630925016268800000e+13 +6.390500818944000000e+12 +3.474839830528000000e+12 +2.041594249216000000e+12 +1.011691945984000000e+12 +3.267562700800000000e+11 +5.583831040000000000e+11 +7.298444165120000000e+11 +9.346311127040000000e+11 +4.162786426880000000e+11 +2.064185262080000000e+11 +2.712596807680000000e+11 +6.749854105600000000e+10 +2.468459479040000000e+11 +2.709930803200000000e+11 +1.085525196800000000e+11 +6.909987225600000000e+10 +3.782049382400000000e+10 +3.650162278400000000e+10 +2.969634734080000000e+11 +1.223381299200000000e+10 +3.153447116800000000e+10 +6.125773651968000000e+12 +1.841845108736000000e+12 +7.957673574400000000e+10 +3.868783820800000000e+10 +9.688667136000000000e+09 +5.315914240000000000e+09 +5.200014848000000000e+09 +1.776309239808000000e+12 +3.498710220800000000e+10 +1.313801472000000000e+09 +1.064138035200000000e+10 +1.830436249600000000e+10 +3.184448000000000000e+09 +3.414060032000000000e+09 +1.369917440000000000e+09 +3.905615872000000000e+10 +3.184163840000000000e+10 +2.816694476800000000e+10 +7.141393408000000000e+09 +9.178957414400000000e+10 +6.875259392000000000e+09 +6.199704576000000000e+09 +2.065730764800000000e+11 +1.403783741440000000e+11 +4.238243921920000000e+11 +4.152824627200000000e+10 +1.056068730880000000e+11 +3.250914304000000000e+10 +2.941338112000000000e+09 +2.573451776000000000e+09 +3.764317798400000000e+10 +5.527399301120000000e+11 +8.330432000000000000e+09 +7.650698854400000000e+10 +3.014103449600000000e+10 +1.158410035200000000e+10 +1.535847792640000000e+11 +3.768958976000000000e+11 +5.866561536000000000e+10 +1.842415665152000000e+12 +4.690055004160000000e+11 +2.426008698880000000e+11 +1.784358174720000000e+11 +1.610861363200000000e+10 +1.155562618880000000e+11 +4.575066521600000000e+11 +4.857124454400000000e+10 +1.427648000000000000e+10 +1.188374937600000000e+11 +4.656529817600000000e+10 +7.072458997760000000e+12 +1.173363671040000000e+11 +2.533857427456000000e+12 +8.011959500800000000e+10 +1.797465374720000000e+11 +2.065284300800000000e+10 +7.788660326400000000e+10 +8.589175193600000000e+10 +6.403333734400000000e+10 +3.297596928000000000e+09 +2.438157041664000000e+12 +5.590112256000000000e+10 +2.944718848000000000e+10 +1.297532846080000000e+11 +2.534890700800000000e+11 +1.485188628480000000e+11 +7.021324697600000000e+10 +2.576282112000000000e+09 +9.335577640960000000e+11 +6.179826176000000000e+09 +5.468387082240000000e+11 +3.680894720000000000e+09 +8.058031360000000000e+08 +3.832749670400000000e+10 +1.067400396800000000e+10 +8.780437913600000000e+10 +1.064227532800000000e+10 +3.079264051200000000e+10 +1.285517312000000000e+10 +8.316619776000000000e+09 +1.234634407936000000e+12 +2.266445119488000000e+12 +6.849474048000000000e+09 +2.814640640000000000e+09 +5.736821760000000000e+08 +1.744510976000000000e+11 +1.473204551680000000e+11 +1.169672765440000000e+12 +1.961962752000000000e+09 +1.518033633280000000e+11 +3.145138688000000000e+09 +6.660211712000000000e+09 +6.274117632000000000e+10 +5.328698880000000000e+09 +1.308268380160000000e+11 +8.324328652800000000e+10 +1.044612864000000000e+09 +2.165195079680000000e+11 +1.360042112000000000e+09 +1.380942807040000000e+11 +2.464426557440000000e+11 +3.864278630400000000e+10 +2.056381849600000000e+10 +2.903358464000000000e+10 +2.371091660800000000e+11 +2.862851481600000000e+10 +2.405947310080000000e+11 +2.105978265600000000e+10 +1.365022310400000000e+11 +1.865964544000000000e+10 +9.681363927040000000e+11 +8.189422592000000000e+09 +2.570254540800000000e+10 +3.160228608000000000e+09 +3.327783731200000000e+11 +8.171257856000000000e+10 +4.139935006720000000e+11 +5.294378496000000000e+09 +4.976716595200000000e+10 +1.849758187520000000e+11 +9.024067584000000000e+09 +3.967033016320000000e+11 +1.410387968000000000e+10 +9.818542080000000000e+08 +2.637587021824000000e+12 +7.294361600000000000e+09 +5.685029888000000000e+09 +6.779012096000000000e+09 +9.703642112000000000e+09 +4.569949798400000000e+10 +1.683755724800000000e+10 +7.931640217600000000e+10 +1.251902259200000000e+10 +7.761226240000000000e+09 +3.131167129600000000e+10 +8.581502464000000000e+09 +3.669510963200000000e+10 +1.568715776000000000e+10 +9.204853964800000000e+10 +1.702984744960000000e+11 +8.601113600000000000e+09 +2.266240768000000000e+09 +1.777098293248000000e+12 +2.793071104000000000e+09 +3.813881446400000000e+10 +1.354395443200000000e+10 +1.458027827200000000e+10 +1.053719756800000000e+10 +2.974588108800000000e+10 +1.997169408000000000e+09 +7.220453965824000000e+12 +1.260584140800000000e+10 +1.551523840000000000e+11 +5.308639232000000000e+09 +1.866426240000000000e+09 +4.715479449600000000e+10 +2.668600320000000000e+09 +1.248720715776000000e+12 +4.886201139200000000e+10 +1.375534612480000000e+11 +8.892343091200000000e+10 +4.668125184000000000e+09 +9.662155980800000000e+10 +7.402403328000000000e+09 +3.651367075840000000e+11 +4.162147584000000000e+09 +2.364889943244800000e+13 +2.888512512000000000e+10 +9.651756236800000000e+10 +1.683283981107200000e+13 +1.654684467200000000e+10 +1.101619404800000000e+10 +4.929545420800000000e+10 +6.745127731200000000e+10 +1.776634101760000000e+11 +3.929737265152000000e+12 +4.389121032192000000e+12 +8.405819064320000000e+11 +1.576799698944000000e+12 +7.416742543360000000e+11 +8.064521338880000000e+11 +7.294243307520000000e+11 +1.697121304576000000e+12 +8.513114603520000000e+11 +9.159766835200000000e+10 +1.445477613568000000e+12 +2.152902860800000000e+10 +9.848857395200000000e+10 +1.883758395392000000e+12 +2.451750256640000000e+11 +1.311470387200000000e+11 +2.008914534400000000e+10 +3.503040102400000000e+10 +2.455836057600000000e+10 +7.461342412800000000e+10 +3.369853255680000000e+11 +1.330527129600000000e+10 +1.734091735040000000e+11 +1.274899333120000000e+11 +2.681423462400000000e+10 +2.117881200640000000e+11 +1.693218766848000000e+12 +4.735112806400000000e+10 +5.985930752000000000e+09 +4.511298027520000000e+11 +1.223689728000000000e+10 +8.253168025600000000e+10 +2.115466526720000000e+11 +1.042226790400000000e+10 +6.233304064000000000e+09 +9.888007782400000000e+10 +1.096901181440000000e+11 +2.186960568320000000e+11 +1.909867479040000000e+11 +9.391847424000000000e+09 +5.795971584000000000e+09 +2.481737728000000000e+10 +2.982728960000000000e+09 +2.512592691200000000e+10 +1.131924789657600000e+13 +8.913980416000000000e+09 +3.489316864000000000e+11 +6.750747443200000000e+10 +9.458187468800000000e+10 +2.699245158400000000e+10 +2.385571072000000000e+09 +8.282870579200000000e+10 +6.592417382400000000e+10 +3.170107187200000000e+10 +5.243704934400000000e+10 +4.340387020800000000e+11 +2.415941427200000000e+10 +1.134539161600000000e+11 +1.609769472000000000e+09 +6.347476172800000000e+10 +4.576750141440000000e+11 +2.312313241600000000e+11 +1.741979443200000000e+10 +3.426463744000000000e+10 +1.425193984000000000e+10 +4.526581350400000000e+11 +6.537229516800000000e+10 +1.843815628800000000e+10 +1.402174341120000000e+11 +1.837442457600000000e+10 +5.261350400000000000e+09 +1.072260198400000000e+10 +1.885253632000000000e+10 +4.594169036800000000e+10 +5.921776640000000000e+09 +3.577022976000000000e+09 +2.093326336000000000e+11 +1.908186880000000000e+09 +4.008648704000000000e+10 +2.227943014400000000e+10 +6.954418995200000000e+10 +9.362346475520000000e+11 +1.706861035520000000e+11 +6.219169382400000000e+10 +2.996153221120000000e+11 +1.555695861760000000e+11 +1.537182617600000000e+10 +1.667091660800000000e+10 +3.007764889600000000e+11 +1.399461376000000000e+10 +9.462602137600000000e+10 +1.994141568000000000e+09 +9.817840844800000000e+10 +8.175699456000000000e+09 +2.576790016000000000e+09 +2.213786214400000000e+10 +2.900928757760000000e+11 +1.182365450240000000e+11 +6.751740928000000000e+09 +2.434782822400000000e+11 +1.011876659200000000e+10 +2.774012518400000000e+10 +3.945713254400000000e+10 +1.497587840000000000e+09 +9.762814361600000000e+10 +2.331161722880000000e+11 +5.409647616000000000e+09 +2.620837120000000000e+09 +4.540107980800000000e+11 +2.543911731200000000e+10 +6.685044244480000000e+12 +3.591756595200000000e+10 +4.706984448000000000e+09 +5.889690173440000000e+11 +5.980353331200000000e+10 +1.875434752000000000e+09 +9.911135436800000000e+10 +6.267215872000000000e+09 +1.018784563200000000e+10 +5.744949760000000000e+09 +1.968922624000000000e+10 +1.812858496000000000e+09 +7.581969612800000000e+10 +9.876665344000000000e+09 +2.267033600000000000e+10 +6.597301862400000000e+10 +8.950228992000000000e+09 +1.879036723200000000e+10 diff --git a/py-CIREALS/data/test.cif b/py-CIREALS/data/test.cif new file mode 100644 index 0000000..335f271 --- /dev/null +++ b/py-CIREALS/data/test.cif @@ -0,0 +1,348 @@ +data_2D\Zr-TCBPE-eclipsed +_audit_creation_date 2018-05-07 +_audit_creation_method 'Materials Studio' +_symmetry_space_group_name_H-M 'P1' +_symmetry_Int_Tables_number 1 +_symmetry_cell_setting triclinic +loop_ +_symmetry_equiv_pos_as_xyz + x,y,z +_cell_length_a 25.0000 +_cell_length_b 16.7000 +_cell_length_c 11.3000 +_cell_angle_alpha 90.0000 +_cell_angle_beta 90.0000 +_cell_angle_gamma 90.0000 +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_U_iso_or_equiv +_atom_site_adp_type +_atom_site_occupancy +C1 C 0.85298 0.17308 -0.51887 0.00000 Uiso 1.00 +C2 C 0.86057 0.10848 -0.43745 0.00000 Uiso 1.00 +C3 C 0.90832 0.06342 -0.43671 0.00000 Uiso 1.00 +C4 C 0.94997 0.07932 -0.51970 0.00000 Uiso 1.00 +C5 C 0.94283 0.14413 -0.60009 0.00000 Uiso 1.00 +C6 C 0.89549 0.19013 -0.59961 0.00000 Uiso 1.00 +C7 C 1.00176 0.03143 -0.52082 0.00000 Uiso 1.00 +C8 C 1.00168 -0.05158 -0.52106 0.00000 Uiso 1.00 +C9 C 1.05286 -0.09969 -0.51809 0.00000 Uiso 1.00 +C10 C 1.05362 0.07918 -0.52175 0.00000 Uiso 1.00 +C11 C 0.95035 -0.09933 -0.52434 0.00000 Uiso 1.00 +C12 C 1.06064 0.14428 -0.44184 0.00000 Uiso 1.00 +C13 C 1.10803 0.19014 -0.44209 0.00000 Uiso 1.00 +C14 C 1.15075 0.17264 -0.52204 0.00000 Uiso 1.00 +C15 C 1.14329 0.10776 -0.60299 0.00000 Uiso 1.00 +C16 C 1.09548 0.06286 -0.60402 0.00000 Uiso 1.00 +C17 C 1.08732 -0.09850 -0.41695 0.00000 Uiso 1.00 +C18 C 1.13502 -0.14385 -0.41595 0.00000 Uiso 1.00 +C19 C 1.15026 -0.19086 -0.51688 0.00000 Uiso 1.00 +C20 C 1.11545 -0.19187 -0.61775 0.00000 Uiso 1.00 +C21 C 1.06732 -0.14791 -0.61764 0.00000 Uiso 1.00 +C22 C 0.91666 -0.09935 -0.62687 0.00000 Uiso 1.00 +C23 C 0.86889 -0.14453 -0.62833 0.00000 Uiso 1.00 +C24 C 0.85279 -0.18986 -0.52641 0.00000 Uiso 1.00 +C25 C 0.88674 -0.18959 -0.42405 0.00000 Uiso 1.00 +C26 C 0.93505 -0.14607 -0.42378 0.00000 Uiso 1.00 +C27 C 1.20222 0.22173 -0.52166 0.00000 Uiso 1.00 +C28 C 0.80159 0.22237 -0.51896 0.00000 Uiso 1.00 +C29 C 1.20193 -0.23843 -0.51741 0.00000 Uiso 1.00 +C30 C 0.80106 -0.23702 -0.52627 0.00000 Uiso 1.00 +C31 C 1.22016 0.26215 -0.41619 0.00000 Uiso 1.00 +C32 C 1.26777 0.30768 -0.41618 0.00000 Uiso 1.00 +C33 C 1.29996 0.31368 -0.52097 0.00000 Uiso 1.00 +C34 C 1.28235 0.27335 -0.62618 0.00000 Uiso 1.00 +C35 C 1.23435 0.22895 -0.62687 0.00000 Uiso 1.00 +C36 C 1.23391 -0.24365 -0.62272 0.00000 Uiso 1.00 +C37 C 1.28202 -0.28785 -0.62355 0.00000 Uiso 1.00 +C38 C 1.29960 -0.32978 -0.51974 0.00000 Uiso 1.00 +C39 C 1.26710 -0.32593 -0.41501 0.00000 Uiso 1.00 +C40 C 1.21945 -0.28053 -0.41355 0.00000 Uiso 1.00 +C41 C 0.76679 -0.23656 -0.42449 0.00000 Uiso 1.00 +C42 C 0.71868 -0.28070 -0.42369 0.00000 Uiso 1.00 +C43 C 0.70340 -0.32826 -0.52389 0.00000 Uiso 1.00 +C44 C 0.73807 -0.32955 -0.62516 0.00000 Uiso 1.00 +C45 C 0.78580 -0.28428 -0.62669 0.00000 Uiso 1.00 +C46 C 0.76981 0.23031 -0.41330 0.00000 Uiso 1.00 +C47 C 0.72187 0.27486 -0.41376 0.00000 Uiso 1.00 +C48 C 0.70399 0.31467 -0.51921 0.00000 Uiso 1.00 +C49 C 0.73582 0.30791 -0.62445 0.00000 Uiso 1.00 +C50 C 0.78336 0.26222 -0.62465 0.00000 Uiso 1.00 +C51 C 0.65230 0.36164 -0.51942 0.00000 Uiso 1.00 +O52 O 0.64466 0.41387 -0.60569 0.00000 Uiso 1.00 +O53 O 0.61804 0.34690 -0.43317 0.00000 Uiso 1.00 +Zr54 Zr 0.57932 -0.50788 -1.64271 0.04604 Uiso 1.00 +Zr55 Zr 0.42423 -0.50773 -1.39896 0.04604 Uiso 1.00 +Zr56 Zr 0.54018 -0.40781 -1.39944 0.04604 Uiso 1.00 +Zr57 Zr 0.46342 -0.60752 -1.64244 0.04604 Uiso 1.00 +Zr58 Zr 0.54063 -0.60609 -1.39735 0.04604 Uiso 1.00 +Zr59 Zr 0.46284 -0.40928 -1.64423 0.04604 Uiso 1.00 +O60 O 0.58243 -0.50700 -1.45600 0.09771 Uiso 1.00 +O61 O 0.46211 -0.61078 -1.45580 0.09771 Uiso 1.00 +O62 O 0.46161 -0.40467 -1.45773 0.09771 Uiso 1.00 +O63 O 0.50214 -0.50846 -1.71072 0.09771 Uiso 1.00 +O64 O 0.54142 -0.40474 -1.58602 0.09771 Uiso 1.00 +O65 O 0.42111 -0.50843 -1.58569 0.09771 Uiso 1.00 +O66 O 0.54195 -0.61086 -1.58388 0.09771 Uiso 1.00 +O67 O 0.50141 -0.50689 -1.33099 0.09771 Uiso 1.00 +O68 O 0.41885 -0.58321 -1.24586 0.10044 Uiso 1.00 +O69 O 0.35895 -0.42944 -1.43511 0.10044 Uiso 1.00 +O70 O 0.58460 -0.43256 -1.79603 0.10044 Uiso 1.00 +O71 O 0.61734 -0.36007 -1.43703 0.10044 Uiso 1.00 +O72 O 0.50483 -0.65354 -1.79418 0.10044 Uiso 1.00 +O73 O 0.38609 -0.65466 -1.60635 0.10044 Uiso 1.00 +O74 O 0.49879 -0.36192 -1.24762 0.10044 Uiso 1.00 +O75 O 0.58722 -0.57515 -1.24476 0.10044 Uiso 1.00 +O76 O 0.47436 -0.28654 -1.60862 0.10044 Uiso 1.00 +O77 O 0.41618 -0.44010 -1.79673 0.10044 Uiso 1.00 +O78 O 0.52916 -0.72883 -1.43322 0.10044 Uiso 1.00 +O79 O 0.52809 -0.28552 -1.43765 0.10044 Uiso 1.00 +O80 O 0.41684 -0.57844 -1.79584 0.10044 Uiso 1.00 +O81 O 0.47532 -0.72981 -1.60402 0.10044 Uiso 1.00 +O82 O 0.58693 -0.43680 -1.24627 0.10044 Uiso 1.00 +O83 O 0.64443 -0.42905 -1.60728 0.10044 Uiso 1.00 +O84 O 0.41867 -0.43139 -1.24685 0.10044 Uiso 1.00 +O85 O 0.35911 -0.58660 -1.43514 0.10044 Uiso 1.00 +O86 O 0.58504 -0.58438 -1.79456 0.10044 Uiso 1.00 +O87 O 0.50398 -0.36441 -1.79714 0.10044 Uiso 1.00 +O88 O 0.49955 -0.65105 -1.24445 0.10044 Uiso 1.00 +O89 O 0.38543 -0.36209 -1.60735 0.10044 Uiso 1.00 +C90 C 0.45265 -0.63422 -1.20154 0.13493 Uiso 1.00 +C91 C 0.35127 -0.37691 -1.52085 0.13493 Uiso 1.00 +C92 C 0.55082 -0.38146 -1.84026 0.13493 Uiso 1.00 +C93 C 0.65178 -0.37559 -1.52267 0.13493 Uiso 1.00 +C94 C 0.55160 -0.63638 -1.83759 0.13493 Uiso 1.00 +C95 C 0.35167 -0.63940 -1.52069 0.13493 Uiso 1.00 +C96 C 0.45210 -0.37933 -1.20393 0.13493 Uiso 1.00 +C97 C 0.60031 -0.50571 -1.20187 0.13493 Uiso 1.00 +C98 C 0.50113 -0.25114 -1.52350 0.13493 Uiso 1.00 +C99 C 0.40329 -0.50953 -1.83995 0.13493 Uiso 1.00 +C100 C 0.50230 -0.76421 -1.51824 0.13493 Uiso 1.00 +H101 H 0.82946 0.09172 -0.37412 0.00000 Uiso 1.00 +H102 H 0.91269 0.01629 -0.37000 0.00000 Uiso 1.00 +H103 H 0.97415 0.15934 -0.66405 0.00000 Uiso 1.00 +H104 H 0.89285 0.24000 -0.66200 0.00000 Uiso 1.00 +H105 H 1.02918 0.15985 -0.37842 0.00000 Uiso 1.00 +H106 H 1.11055 0.24026 -0.38015 0.00000 Uiso 1.00 +H107 H 1.17457 0.09062 -0.66565 0.00000 Uiso 1.00 +H108 H 1.09124 0.01547 -0.67032 0.00000 Uiso 1.00 +H109 H 1.07719 -0.06253 -0.33843 0.00000 Uiso 1.00 +H110 H 1.16049 -0.14100 -0.33662 0.00000 Uiso 1.00 +H111 H 1.12505 -0.22769 -0.69671 0.00000 Uiso 1.00 +H112 H 1.04165 -0.15037 -0.69675 0.00000 Uiso 1.00 +H113 H 0.92749 -0.06457 -0.70613 0.00000 Uiso 1.00 +H114 H 0.84398 -0.14288 -0.70873 0.00000 Uiso 1.00 +H115 H 0.87622 -0.22406 -0.34427 0.00000 Uiso 1.00 +H116 H 0.96017 -0.14767 -0.34366 0.00000 Uiso 1.00 +H117 H 1.19804 0.25773 -0.33201 0.00000 Uiso 1.00 +H118 H 1.27989 0.33708 -0.33288 0.00000 Uiso 1.00 +H119 H 1.30546 0.27683 -0.70927 0.00000 Uiso 1.00 +H120 H 1.22230 0.20119 -0.71133 0.00000 Uiso 1.00 +H121 H 1.22205 -0.21290 -0.70491 0.00000 Uiso 1.00 +H122 H 1.30526 -0.28972 -0.70645 0.00000 Uiso 1.00 +H123 H 1.27859 -0.35804 -0.33357 0.00000 Uiso 1.00 +H124 H 1.19558 -0.27991 -0.33142 0.00000 Uiso 1.00 +H125 H 0.77683 -0.20095 -0.34553 0.00000 Uiso 1.00 +H126 H 0.69353 -0.27789 -0.34361 0.00000 Uiso 1.00 +H127 H 0.72836 -0.36580 -0.70377 0.00000 Uiso 1.00 +H128 H 0.81152 -0.28767 -0.70579 0.00000 Uiso 1.00 +H129 H 0.78210 0.20297 -0.32870 0.00000 Uiso 1.00 +H130 H 0.69901 0.27884 -0.33036 0.00000 Uiso 1.00 +H131 H 0.72347 0.33685 -0.70794 0.00000 Uiso 1.00 +H132 H 0.80522 0.25723 -0.70913 0.00000 Uiso 1.00 +H133 H 0.44047 -0.66595 -1.12045 0.00000 Uiso 1.00 +H134 H 0.56297 -0.34982 -1.92146 0.00000 Uiso 1.00 +H135 H 0.56401 -0.66881 -1.91787 0.00000 Uiso 1.00 +H136 H 0.43977 -0.34710 -1.12341 0.00000 Uiso 1.00 +H137 H 0.62489 -0.50521 -1.12100 0.00000 Uiso 1.00 +H138 H 0.50100 -0.18641 -1.52418 0.00000 Uiso 1.00 +H139 H 0.37874 -0.51002 -1.92085 0.00000 Uiso 1.00 +H140 H 0.50240 -0.82894 -1.51751 0.00000 Uiso 1.00 +loop_ +_geom_bond_atom_site_label_1 +_geom_bond_atom_site_label_2 +_geom_bond_distance +_geom_bond_site_symmetry_2 +_ccdc_geom_bond_type +C1 C2 1.431 . A +C1 C6 1.429 . A +C1 C28 1.526 . S +C2 C3 1.411 . A +C2 H101 1.093 . S +C3 C4 1.426 . A +C3 H102 1.095 . S +C4 C5 1.424 . A +C4 C7 1.522 . S +C5 C6 1.411 . A +C5 H103 1.095 . S +C6 H104 1.093 . S +C7 C8 1.386 . D +C7 C10 1.522 . S +C8 C9 1.511 . S +C8 C11 1.511 . S +C9 C17 1.431 . A +C9 C21 1.430 . A +C10 C12 1.424 . A +C10 C16 1.426 . A +C11 C22 1.432 . A +C11 C26 1.431 . A +C12 C13 1.411 . A +C12 H105 1.095 . S +C13 C14 1.429 . A +C13 H106 1.093 . S +C14 C15 1.430 . A +C14 C27 1.526 . S +C15 C16 1.411 . A +C15 H107 1.093 . S +C16 H108 1.095 . S +C17 C18 1.413 . A +C17 H109 1.101 . S +C18 C19 1.436 . A +C18 H110 1.101 . S +C19 C20 1.434 . A +C19 C29 1.516 . S +C20 C21 1.410 . A +C20 H111 1.101 . S +C21 H112 1.101 . S +C22 C23 1.413 . A +C22 H113 1.101 . S +C23 C24 1.436 . A +C23 H114 1.102 . S +C24 C25 1.435 . A +C24 C30 1.514 . S +C25 C26 1.410 . A +C25 H115 1.101 . S +C26 H116 1.102 . S +C27 C31 1.441 . A +C27 C35 1.440 . A +C28 C46 1.440 . A +C28 C50 1.441 . A +C29 C36 1.436 . A +C29 C40 1.436 . A +C30 C41 1.434 . A +C30 C45 1.434 . A +C31 C32 1.412 . A +C31 H117 1.103 . S +C32 C33 1.435 . A +C32 H118 1.104 . S +C33 C34 1.436 . A +C33 C95 1.512 1_666 A +C34 C35 1.411 . A +C34 H119 1.104 . S +C35 H120 1.103 . S +C36 C37 1.411 . A +C36 H121 1.102 . S +C37 C38 1.435 . A +C37 H122 1.103 . S +C38 C39 1.437 . A +C38 C91 1.513 1_656 A +C39 C40 1.412 . A +C39 H123 1.103 . S +C40 H124 1.103 . S +C41 C42 1.411 . A +C41 H125 1.101 . S +C42 C43 1.435 . A +C42 H126 1.103 . S +C43 C44 1.436 . A +C43 C93 1.513 1_556 S +C44 C45 1.413 . A +C44 H127 1.102 . S +C45 H128 1.103 . S +C46 C47 1.411 . A +C46 H129 1.103 . S +C47 C48 1.436 . A +C47 H130 1.104 . S +C48 C49 1.435 . A +C48 C51 1.512 . S +C49 C50 1.412 . A +C49 H131 1.104 . S +C50 H132 1.103 . S +C51 O52 1.322 . A +C51 O53 1.321 . A +O52 Zr54 2.133 1_566 A +O53 Zr58 2.127 1_566 S +Zr54 O60 2.111 . S +Zr54 O63 2.077 . S +Zr54 O64 2.068 . S +Zr54 O66 2.067 . S +Zr54 O70 2.145 . S +Zr54 O83 2.131 . S +Zr54 O86 2.144 . S +Zr54 O52 2.133 1_544 A +Zr55 O61 2.067 . S +Zr55 O62 2.068 . S +Zr55 O65 2.112 . S +Zr55 O67 2.077 . S +Zr55 O68 2.145 . S +Zr55 O69 2.131 . S +Zr55 O85 2.134 . S +Zr55 O84 2.145 . S +Zr56 O60 2.066 . S +Zr56 O62 2.072 . S +Zr56 O67 2.068 . S +Zr56 O64 2.109 . S +Zr56 O71 2.130 . S +Zr56 O74 2.145 . S +Zr56 O82 2.144 . S +Zr56 O79 2.109 . S +Zr57 O63 2.066 . S +Zr57 O61 2.110 . S +Zr57 O65 2.066 . S +Zr57 O66 2.073 . S +Zr57 O72 2.145 . S +Zr57 O73 2.127 . S +Zr57 O80 2.144 . S +Zr57 O81 2.109 . S +Zr58 O60 2.066 . S +Zr58 O61 2.073 . S +Zr58 O66 2.110 . S +Zr58 O67 2.066 . S +Zr58 O75 2.144 . S +Zr58 O78 2.109 . S +Zr58 O88 2.146 . S +Zr58 O53 2.127 1_544 S +Zr59 O62 2.109 . S +Zr59 O63 2.067 . S +Zr59 O65 2.066 . S +Zr59 O64 2.073 . S +Zr59 O76 2.109 . S +Zr59 O77 2.144 . S +Zr59 O89 2.131 . S +Zr59 O87 2.146 . S +O68 C90 1.300 . A +O69 C91 1.321 . A +O70 C92 1.300 . A +O71 C93 1.321 . A +O72 C94 1.300 . A +O73 C95 1.320 . A +O74 C96 1.300 . A +O75 C97 1.299 . A +O76 C98 1.312 . A +O77 C99 1.299 . A +O78 C100 1.313 . A +O79 C98 1.313 . A +O80 C99 1.299 . A +O81 C100 1.313 . A +O82 C97 1.299 . A +O83 C93 1.321 . A +O84 C96 1.300 . A +O85 C95 1.322 . A +O86 C94 1.300 . A +O87 C92 1.300 . A +O88 C90 1.300 . A +O89 C91 1.321 . A +C90 H133 1.101 . S +C91 C38 1.513 1_454 A +C92 H134 1.102 . S +C93 C43 1.513 1_554 S +C94 H135 1.101 . S +C95 C33 1.512 1_444 A +C96 H136 1.101 . S +C97 H137 1.101 . S +C98 H138 1.081 . S +C99 H139 1.101 . S +C100 H140 1.081 . S \ No newline at end of file diff --git a/py-CIREALS/data/torchquad.csv b/py-CIREALS/data/torchquad.csv new file mode 100644 index 0000000..86ad065 --- /dev/null +++ b/py-CIREALS/data/torchquad.csv @@ -0,0 +1,1000 @@ +2.691097736962999200e+16 +2.654303902215014000e+16 +2.618319041234374800e+16 +2.582560243749501600e+16 +2.547135516806692400e+16 +2.509749820604318000e+16 +2.473424900600195200e+16 +2.439962607479170400e+16 +2.404523787822231200e+16 +2.368267927869476800e+16 +2.333282930998431600e+16 +2.298709771710669600e+16 +2.264709835748893600e+16 +2.230798511691672000e+16 +2.195640146471924000e+16 +2.161404649236393200e+16 +2.129500554661916000e+16 +2.096004934742599200e+16 +2.062281372588496000e+16 +2.029547586852063200e+16 +1.997208387877944000e+16 +1.965338628322578000e+16 +1.933702630143287600e+16 +1.901165581880150800e+16 +1.869642883688236800e+16 +1.839795001208821200e+16 +1.809046243090766400e+16 +1.778126092499225200e+16 +1.748080897914588400e+16 +1.718499231128200400e+16 +1.689414557267763600e+16 +1.660506100475096800e+16 +1.631153152724426200e+16 +1.602582633215876800e+16 +1.575482647645277600e+16 +1.547758204371736000e+16 +1.520041804364395000e+16 +1.493187953761443200e+16 +1.466786857081100400e+16 +1.440806007050592400e+16 +1.415114559592427200e+16 +1.389167586451667800e+16 +1.364011704816885400e+16 +1.340060911174737800e+16 +1.315736657699447800e+16 +1.291513648353003400e+16 +1.268136043289305000e+16 +1.245173907896488600e+16 +1.222630619047310200e+16 +1.200491194398326800e+16 +1.178207437155340000e+16 +1.156708463318889400e+16 +1.136172507549273200e+16 +1.115452028386719000e+16 +1.095002405479813200e+16 +1.075249027807667200e+16 +1.055938575802613400e+16 +1.037099700776542000e+16 +1.018580162266658000e+16 +1.000138347301671200e+16 +9.823814100531670000e+15 +9.654818250597724000e+15 +9.485138037209752000e+15 +9.318898680296720000e+15 +9.158870936745176000e+15 +9.003525417719005000e+15 +8.852442466528834000e+15 +8.705112335940452000e+15 +8.559156039931788000e+15 +8.419471001862822000e+15 +8.287142606167786000e+15 +8.155759762251431000e+15 +8.027002504732635000e+15 +7.904824242058924000e+15 +7.786761673301056000e+15 +7.673002768594800000e+15 +7.562820606233184000e+15 +7.455085482949601000e+15 +7.352592260716374000e+15 +7.256764020853302000e+15 +7.162062968019657000e+15 +7.070372727660457000e+15 +6.985398309600351000e+15 +6.907783534243414000e+15 +6.863451270131378000e+15 +1.253724032070109400e+16 +6.732233949671536000e+15 +6.628255246536526000e+15 +6.575751977943445000e+15 +6.688825097751336000e+15 +6.444869121258939000e+15 +6.390344921445584000e+15 +6.472841303376222000e+15 +6.299409229593022000e+15 +6.261522784393822000e+15 +6.283243823202398000e+15 +1.286153385572720400e+16 +6.195992842360002000e+15 +6.132651915188176000e+15 +6.107123670133240000e+15 +6.081930586829338000e+15 +1.240993812657257600e+16 +6.094377050279254000e+15 +6.049849921247813000e+15 +6.040202184269298000e+15 +6.041746741060069000e+15 +6.088615176381622000e+15 +6.055804096668890000e+15 +6.502450349870452000e+15 +6.053896082882413000e+15 +6.073009799968497000e+15 +6.079619171186773000e+15 +6.096863360449590000e+15 +6.115728944688021000e+15 +6.183227375295234000e+15 +6.174548009641700000e+15 +6.307888033955762000e+15 +6.225836841026767000e+15 +6.251680778176516000e+15 +6.285835388525636000e+15 +6.327645814775624000e+15 +6.378536682851550000e+15 +6.411841825608046000e+15 +6.446500553320686000e+15 +6.849628500240140000e+15 +8.375145765118474000e+15 +6.647544149615420000e+15 +6.642162436020719000e+15 +6.707116380721683000e+15 +6.764928852179619000e+15 +6.814911467239890000e+15 +6.870104749230266000e+15 +6.933190415194178000e+15 +6.998666998575546000e+15 +7.060938244769867000e+15 +7.132537037111009000e+15 +2.407730989940228400e+16 +7.293839144402042000e+15 +7.346224001433809000e+15 +7.411465463863194000e+15 +7.480074899938442000e+15 +7.552791931721552000e+15 +7.629887068779359000e+15 +7.709213776240856000e+15 +7.789839569747746000e+15 +7.868427153882893000e+15 +7.941354892307704000e+15 +8.014243158068600000e+15 +8.132969710289570000e+15 +8.904045038528656000e+15 +1.055368003075489600e+16 +8.471070059787462000e+15 +8.435342418419234000e+15 +8.505029789396456000e+15 +8.593645939965684000e+15 +8.680820362813629000e+15 +8.766971694433171000e+15 +8.846057065169716000e+15 +8.927784508898338000e+15 +9.013648535306054000e+15 +9.096725311001328000e+15 +9.188981886366528000e+15 +9.270798102027600000e+15 +9.358219248200620000e+15 +9.472409474387504000e+15 +9.521131745777148000e+15 +2.262251562242940800e+16 +9.774944601985528000e+15 +9.785823726678322000e+15 +9.876272087596136000e+15 +9.941040081583492000e+15 +1.002683347680310200e+16 +1.010748021213199000e+16 +1.018897165351272200e+16 +1.027022031885245600e+16 +1.035100002423195200e+16 +1.043061119518908400e+16 +1.050695816525954200e+16 +1.059178599485169200e+16 +1.066638767154280400e+16 +1.074097461180393200e+16 +1.083417250106998000e+16 +1.090826905079525800e+16 +1.264721463044886600e+16 +1.112904368608888400e+16 +1.177319736278434400e+16 +1.956043481061700800e+16 +1.167634403638968200e+16 +1.548136561420592800e+16 +1.143310074547610600e+16 +1.147317237483238000e+16 +1.153464991969527600e+16 +1.163835237553451400e+16 +1.164739838498335200e+16 +1.172461116248928200e+16 +1.177707782761747600e+16 +1.182291333892778400e+16 +1.189448044079186400e+16 +1.211729439513662600e+16 +1.412055505069115600e+16 +1.205195761323342000e+16 +1.209696384351402000e+16 +1.215231420131528800e+16 +1.219706727027924000e+16 +1.223899710430982400e+16 +1.229229056022154400e+16 +1.248546311899902000e+16 +1.263195409162330000e+16 +1.243067825314141200e+16 +1.245295712226860000e+16 +1.253252313139346800e+16 +2.273677895117369200e+16 +1.266334507286765800e+16 +1.263459214095753600e+16 +1.266866238750327400e+16 +1.277865769958659200e+16 +2.558549831921884000e+16 +1.281057358481840600e+16 +1.273327819196771400e+16 +1.274233303934043200e+16 +1.275845934950480800e+16 +1.277445525745066800e+16 +1.279152893077945200e+16 +1.280732572063874000e+16 +1.282083217486398400e+16 +1.283362432423660800e+16 +1.285061325472995200e+16 +1.292896763167709600e+16 +1.394535230463187200e+16 +1.290639664878472400e+16 +1.287746568005282000e+16 +1.287096211564794000e+16 +1.286569728086156400e+16 +1.285871537045595000e+16 +1.285241560868895200e+16 +1.284994917204515200e+16 +1.284856969261237200e+16 +1.284341896018875600e+16 +1.283057171059092400e+16 +1.281160543831051800e+16 +1.281865219622742000e+16 +1.317934884081506400e+16 +2.930820252691467200e+16 +1.299619189096176800e+16 +1.275147437760337200e+16 +1.270402591197645600e+16 +1.266570595887748800e+16 +1.264156775746469200e+16 +1.261257433913705200e+16 +1.258665851645585800e+16 +1.254549925955327200e+16 +1.251058169821988600e+16 +1.247710967606486800e+16 +1.244202104496164400e+16 +1.240393666607192800e+16 +1.236865170345100600e+16 +1.233210119512310200e+16 +1.228066952833054800e+16 +1.229178247125446200e+16 +1.487779314466274400e+16 +1.216216686311321200e+16 +1.210134054490114600e+16 +1.205734542652490400e+16 +1.200293317993182000e+16 +1.194876090586005400e+16 +1.189851099430469200e+16 +1.184298915156239000e+16 +1.178854531264792000e+16 +1.173166578404074200e+16 +1.167505990764313000e+16 +1.161513252353794000e+16 +1.155587592520896000e+16 +1.149745340464527000e+16 +1.143288683841249000e+16 +1.137572192952447000e+16 +1.130605387129702200e+16 +1.125639316947556000e+16 +1.118741980085677600e+16 +1.117185467816702000e+16 +1.268093467523957200e+16 +1.109859577256197800e+16 +1.688631136152427800e+16 +1.104435148767608600e+16 +1.077194285553178800e+16 +1.069307188376948200e+16 +1.061919630256346200e+16 +1.054688295064643800e+16 +1.047972717435218800e+16 +1.047613934890238200e+16 +1.080093416569061800e+16 +1.026237210549124200e+16 +1.016661927762302400e+16 +1.008502895832671400e+16 +1.000706384562520400e+16 +9.944069050099478000e+15 +1.095316330113639600e+16 +9.786351883389004000e+15 +9.690422891116964000e+15 +9.608242083682000000e+15 +9.527922135956292000e+15 +9.453929028934036000e+15 +9.374204428350284000e+15 +9.290036451361806000e+15 +3.090703485300131200e+16 +1.217463976943726400e+16 +9.097158011629948000e+15 +8.956234955879045000e+15 +8.864112663425640000e+15 +8.778682503429146000e+15 +8.694432172237038000e+15 +8.610702000276323000e+15 +8.525004101729050000e+15 +8.461206458602749000e+15 +8.587444700395948000e+15 +8.270266685832284000e+15 +8.194442546089741000e+15 +8.108192689422338000e+15 +8.017958124138000000e+15 +7.933288993286130000e+15 +7.850079057500646000e+15 +7.764271282647182000e+15 +7.683967183717826000e+15 +7.595528808301542000e+15 +7.523115832569883000e+15 +7.434463840766614000e+15 +7.401960791602235000e+15 +1.031263044574328800e+16 +7.213821271145490000e+15 +7.132744793802127000e+15 +7.017269283766329000e+15 +6.939035203944157000e+15 +6.858637279357073000e+15 +7.524768070182600000e+15 +6.785988546110000000e+15 +9.121927469979314000e+15 +6.525963281266844000e+15 +6.453624072977348000e+15 +6.370031408512294000e+15 +6.287449375352416000e+15 +6.205377231748992000e+15 +6.135296822597006000e+15 +6.114338666809252000e+15 +6.027056329303880000e+15 +5.924777431566544000e+15 +5.816035767347426000e+15 +5.741588288102773000e+15 +5.664145488387734000e+15 +5.587471838953020000e+15 +5.513963903250949000e+15 +5.438481662255577000e+15 +5.365132301804482000e+15 +5.292433170934962000e+15 +5.220422863724208000e+15 +5.148062216699554000e+15 +5.075530493406184000e+15 +5.006780607627972000e+15 +4.939247436445646000e+15 +4.869064759297442000e+15 +4.796598442403880000e+15 +4.741824191886744000e+15 +4.915417391797916000e+15 +5.041861033257102000e+15 +4.531245901753748000e+15 +4.464372167800291000e+15 +4.403145496600754000e+15 +4.336258320515721000e+15 +4.268965693103200500e+15 +4.205836738831580000e+15 +4.144839937914831000e+15 +4.084570049129102000e+15 +4.028287874221778000e+15 +4.302485968565988500e+15 +3.908493126761775000e+15 +3.842452961260888500e+15 +3.783046421193502500e+15 +3.725011738361283000e+15 +3.668286989439152000e+15 +3.612158680932589500e+15 +3.556580519811716000e+15 +3.501880300276962000e+15 +3.448293523710933000e+15 +3.396362081952001000e+15 +3.348263858591044500e+15 +3.404445266555694000e+15 +3.253145496697881000e+15 +3.187326860298761000e+15 +3.135555739652146500e+15 +3.085465974694620500e+15 +3.036394672306789500e+15 +2.988077259401938000e+15 +2.940471317888771000e+15 +2.893549523442185000e+15 +2.847331701390915000e+15 +2.801849380161136500e+15 +2.757132570966475500e+15 +2.712831266018635000e+15 +2.669152612492867000e+15 +2.626410531000931500e+15 +2.584392912497766500e+15 +2.543154730371360500e+15 +2.504062800102376500e+15 +2.492735036139365500e+15 +2.427930637783913000e+15 +2.380850034627502000e+15 +2.340975674049047000e+15 +2.302659356651916000e+15 +2.264705176266778000e+15 +2.227152723356257000e+15 +2.191436137063173500e+15 +2.162269530263581500e+15 +2.181743088568823500e+15 +2.238097765865240500e+15 +2.051424213591307750e+15 +2.016473958399955500e+15 +1.985805552974628000e+15 +1.956700866272637000e+15 +1.932235992886824250e+15 +1.974304164011179250e+15 +1.863001744776198250e+15 +1.821253526598446500e+15 +1.791707392172677000e+15 +1.762184319868155250e+15 +1.732394579166918000e+15 +1.702633261616848750e+15 +1.673431192905209000e+15 +1.644766658405464500e+15 +1.616593997475782750e+15 +1.589146913900679500e+15 +1.562090260637702500e+15 +1.535536571328501250e+15 +1.509352654464231250e+15 +1.483425607746577500e+15 +1.457821581814310500e+15 +1.432552425500485000e+15 +1.407575941486821000e+15 +1.382966323826735000e+15 +1.358839817411112750e+15 +1.335293585440729500e+15 +1.311967106086363250e+15 +1.289171887056183500e+15 +1.266815129816345000e+15 +1.244757307035158500e+15 +1.223168493968433000e+15 +1.203828025514434750e+15 +1.180626526209231000e+15 +1.158660425357562250e+15 +1.135917826631339500e+15 +1.115483614076731875e+15 +1.094830156879892000e+15 +1.074801954370614625e+15 +1.055316795553621250e+15 +1.035788804941048750e+15 +1.016862316333798000e+15 +9.977597525295116250e+14 +9.787061798207388750e+14 +9.601915309833461250e+14 +9.412039633763726250e+14 +9.228186024430360000e+14 +9.045687609122251250e+14 +8.863981111653305000e+14 +8.694383880175297500e+14 +8.523107069938782500e+14 +8.357094409901850000e+14 +8.198854670636485000e+14 +8.036787316405355000e+14 +7.881480681462047500e+14 +7.718044551795260000e+14 +7.556183588565762500e+14 +7.390532351972755000e+14 +7.217164928253832500e+14 +7.071151647431513750e+14 +6.896942306064205000e+14 +6.772987477633855000e+14 +6.735124511494086250e+14 +6.656757229557395000e+14 +7.151769892117140000e+14 +1.084226022190842125e+15 +2.441094095866008000e+15 +2.630123861584934000e+15 +9.007984468320086250e+14 +6.215545285970232500e+14 +7.895195655784613750e+14 +5.395475855894711250e+14 +5.455805174324628750e+14 +8.296325033176780000e+14 +5.115389596812472500e+14 +4.923430927938328750e+14 +5.203749233671055625e+14 +7.252437235120624000e+15 +2.870475298309248000e+15 +4.397541083724686250e+14 +4.291727893519880000e+14 +4.035373814689953750e+14 +3.923011069435065000e+14 +3.800245089952349375e+14 +3.654238270059386250e+14 +4.126169256666183750e+14 +6.165897239780722000e+15 +3.631039390625473750e+14 +6.643048414453376250e+14 +3.208495307356436250e+14 +3.027700959955070000e+14 +2.893679310040618750e+14 +2.767897269869690938e+14 +2.640817192115372188e+14 +2.514163641948274375e+14 +2.509409461532245625e+14 +2.623294170224700938e+14 +2.732015296779025312e+14 +2.529926481465473750e+14 +2.953492197719117500e+14 +2.441347144378122812e+14 +2.049502413794061875e+14 +1.785481169669008438e+14 +1.654564414920963125e+14 +1.591350234808826875e+14 +1.520055628356186875e+14 +1.428231552235231250e+14 +1.336484080112466875e+14 +1.256761578574354219e+14 +1.183737604518519219e+14 +1.107282395302102031e+14 +1.028788930604273594e+14 +9.994140223670814062e+13 +1.428086963479965625e+14 +2.688807767800363500e+15 +1.904473262982411875e+14 +7.694254411760717188e+13 +6.510309967875257812e+13 +5.872629451667729688e+13 +5.381733176767487500e+13 +4.923824802294904688e+13 +4.447405164461009375e+13 +3.985267620714371875e+13 +3.712088593651729688e+13 +3.208955528464878125e+13 +2.827765742657447656e+13 +2.506203141313339062e+13 +2.259463290949586719e+13 +2.079789676073657031e+13 +2.006869979199918750e+13 +2.042163648993194531e+13 +2.652061068920342969e+13 +5.863517672315499219e+13 +9.135401739657204000e+15 +6.383671253357351562e+13 +1.368203041215725781e+13 +4.931673329964220703e+12 +1.152101960036642334e+12 +1.770576577059102539e+12 +9.943499085549526367e+11 +3.457001861868339844e+12 +5.081922042714345703e+12 +2.610068323074698750e+14 +1.189746322028843359e+13 +8.825237527391667969e+12 +7.792042519391722656e+12 +9.898500034682906250e+12 +1.181440356432863281e+13 +1.443305054019637891e+13 +1.709181755777694531e+13 +2.055183018828808203e+13 +2.411452408334464062e+13 +2.850116191928686328e+13 +3.360767274972269141e+13 +4.040081466815264062e+13 +5.550685939077998438e+13 +1.891233118273341875e+14 +1.918511290502800000e+14 +2.731317879933689062e+14 +6.825961959957674219e+13 +7.294736158113428125e+13 +7.750618278042821875e+13 +8.407949089779492188e+13 +9.122969769553540625e+13 +9.858411012175164062e+13 +1.065704435942210469e+14 +1.147614554807132344e+14 +1.233110272675128125e+14 +1.323298801594507500e+14 +1.415178697729388750e+14 +1.509776061200438125e+14 +1.605358161693920938e+14 +1.705152911622362500e+14 +1.810341577221258125e+14 +1.918982628332171875e+14 +2.028066385657668750e+14 +2.136599105237858750e+14 +2.248585930588285625e+14 +2.370441239474282500e+14 +2.501343559673003125e+14 +2.633596465711534688e+14 +2.757615040632737812e+14 +2.877978486903952500e+14 +3.038139133728815000e+14 +3.723694211341528750e+14 +1.695184645220179000e+15 +3.850050614146678750e+14 +3.730599578815305000e+14 +3.735433414863008750e+14 +3.850638486632358125e+14 +3.993633522604915000e+14 +4.141619448662234375e+14 +4.289174000401008750e+14 +4.438260996481130000e+14 +4.592530797063513750e+14 +4.752692996675541250e+14 +4.915316115205314375e+14 +5.077270947635514375e+14 +5.239728621211666875e+14 +5.406745923954146875e+14 +5.574277453324066250e+14 +5.745278740066592500e+14 +5.917891953600982500e+14 +6.090245883221001250e+14 +6.264563355600802500e+14 +6.442087535774112500e+14 +6.620742429651622500e+14 +6.799711216980955000e+14 +6.981456218435196250e+14 +7.163360957107830000e+14 +7.347811498815015000e+14 +7.531314627918212500e+14 +7.718891835559571250e+14 +7.903102219597590000e+14 +8.092153144865890000e+14 +8.288267872898855000e+14 +8.473569850722957500e+14 +8.667258206500467500e+14 +9.014723412540665000e+14 +1.695419794340140500e+15 +9.506566771922645000e+14 +9.574566918437141250e+14 +9.644645126179386250e+14 +9.818028442711056250e+14 +1.001236939655835375e+15 +1.020364700002421375e+15 +1.039396486388810000e+15 +1.058852030673434250e+15 +1.078317461719521375e+15 +1.097523005271983500e+15 +1.117014050007218250e+15 +1.136505019435929000e+15 +1.155751985143161500e+15 +1.175148815643930250e+15 +1.194913004271610500e+15 +1.214128913835568500e+15 +1.235022140509732500e+15 +1.275942632793968500e+15 +1.272013238948189000e+15 +1.290439825253260500e+15 +1.309471204384204500e+15 +1.328613234443700750e+15 +1.347492398092959500e+15 +1.365696970339147500e+15 +1.385745970243552750e+15 +1.414155187949470750e+15 +1.643342285087196500e+15 +1.442547294920309000e+15 +1.462152847809053250e+15 +1.477353206353388500e+15 +1.494556020528883000e+15 +1.512734505263534000e+15 +1.530813189619821000e+15 +1.547831520348438500e+15 +1.565533144655573250e+15 +1.582793410580268500e+15 +1.600067905478751750e+15 +1.618012878332836000e+15 +1.634399394235214000e+15 +1.665725844725191000e+15 +2.789280524383223000e+15 +1.717915422033469000e+15 +1.767939097059789500e+15 +1.932226572932922500e+15 +2.034805967626939000e+15 +1.793376374341722500e+15 +1.774745324055587000e+15 +1.783456378322917750e+15 +1.796052083714822500e+15 +1.809799210950576500e+15 +1.832165376951519500e+15 +1.840197813385957000e+15 +1.852699190875176500e+15 +1.866557358346785500e+15 +1.880701281978957250e+15 +1.894624639132050000e+15 +1.908542281320587750e+15 +1.922148478139408250e+15 +1.935672117014121000e+15 +2.630812537683571000e+15 +1.961968457862380000e+15 +1.974933097314985500e+15 +1.987650491627700750e+15 +2.000212021406107750e+15 +2.012622083381629250e+15 +2.024914988863938000e+15 +2.036977644144170250e+15 +2.048965889293477000e+15 +2.060786123235865750e+15 +2.072502891409602500e+15 +2.084082069564436000e+15 +2.095791476085047250e+15 +2.106545962054416000e+15 +2.117706524942082500e+15 +2.128731577673302250e+15 +2.139576872989427500e+15 +2.150305153185899500e+15 +2.160934613126974250e+15 +2.171447922252328500e+15 +2.181905174131186000e+15 +2.192220963839321000e+15 +2.202457929259407500e+15 +2.212661766203925500e+15 +2.222724091837498750e+15 +2.232832781351021000e+15 +2.243086490016982750e+15 +2.253572887072243000e+15 +2.264214004966259000e+15 +2.273089805825238000e+15 +2.283901017673941000e+15 +2.317944405946373500e+15 +2.321548240768294000e+15 +2.311802568218793000e+15 +2.322454765730880000e+15 +2.331309680720708500e+15 +2.341257178380239000e+15 +2.351032611027647000e+15 +2.360918136929610000e+15 +2.370901548790015000e+15 +2.380901212647353000e+15 +2.391142592062123500e+15 +2.401354242562224000e+15 +2.411601995090266500e+15 +2.422140365877726500e+15 +2.432783561439420500e+15 +2.443375664797367000e+15 +2.454439050279935500e+15 +2.466402900533411500e+15 +2.477101073524673000e+15 +2.498545489873359000e+15 +2.501119033589568000e+15 +2.511146047422458000e+15 +2.523212585046010000e+15 +2.535471336535402000e+15 +2.547770282905481000e+15 +2.560614201033114000e+15 +2.573572287417434500e+15 +2.586717065720475000e+15 +2.600291411980878500e+15 +2.614178545789570500e+15 +2.628440156227142000e+15 +2.642935147610170500e+15 +2.657775458444104000e+15 +2.673050483191800000e+15 +2.688717312265998000e+15 +2.704882161264615000e+15 +2.721067073041775000e+15 +2.738047380544496000e+15 +2.755220274381972500e+15 +2.773488025347525000e+15 +2.791035614770364000e+15 +2.810635817644990500e+15 +2.829119565306208000e+15 +2.854051839120948000e+15 +2.899575642259658500e+15 +2.910329257905099500e+15 +2.913444641354119000e+15 +2.933407101044968000e+15 +2.955998050520246500e+15 +2.977630120248601000e+15 +3.001861176280839000e+15 +3.029531808320874000e+15 +3.066410637152578000e+15 +3.078533561699924500e+15 +3.101638400399093000e+15 +3.146073112906176000e+15 +3.344254734902418000e+15 +3.508090982434422000e+15 +3.226460912621347500e+15 +3.250295894407401000e+15 +3.287886873877664000e+15 +3.337120875228498500e+15 +3.506736396687363000e+15 +3.378011600617840500e+15 +3.399021398179996500e+15 +3.433663005279208000e+15 +3.467519904814242000e+15 +3.502079138524800000e+15 +3.762793848422863500e+15 +3.577368011505506000e+15 +3.613026562153583500e+15 +3.651338779651993000e+15 +3.691252202565544000e+15 +3.731738362390793500e+15 +3.772119766989929000e+15 +3.821352555091605500e+15 +3.934323564964329500e+15 +3.901417115925671000e+15 +3.946746742191852000e+15 +3.992011388301249500e+15 +4.040801206424339000e+15 +4.094067865183626500e+15 +4.256509379808709000e+15 +4.528825201831666000e+15 +4.392430788066876000e+15 +4.299427194279580000e+15 +4.339380601206613000e+15 +4.389587569217660500e+15 +4.442965044664293500e+15 +4.498061348248963000e+15 +4.554147751102046000e+15 +4.611230924191864000e+15 +4.669358379677776000e+15 +4.728365529292884000e+15 +4.788147068958884000e+15 +4.848785882552109000e+15 +4.910453552065542000e+15 +4.973488227169353000e+15 +5.038016202106052000e+15 +5.103874512142448000e+15 +5.174181643199378000e+15 +5.234852367089938000e+15 +5.303264700573914000e+15 +5.371679449860524000e+15 +5.440929856354202000e+15 +5.511333236351506000e+15 +5.583075923714898000e+15 +5.656047131511868000e+15 +5.729789595528998000e+15 +5.804306755684804000e+15 +5.879740353997962000e+15 +5.956503588012734000e+15 +6.036175087278947000e+15 +6.127751755627963000e+15 +6.398876155340784000e+15 +6.272841465531714000e+15 +6.354077613689797000e+15 +6.436709132050966000e+15 +6.519804214898924000e+15 +6.603744915043620000e+15 +6.688641149699622000e+15 +6.774826802742094000e+15 +6.862882061022086000e+15 +6.955605835992518000e+15 +7.106496165543827000e+15 +7.128593841421804000e+15 +7.217911465146975000e+15 +7.309157922485679000e+15 +7.401523086581621000e+15 +7.494657981844260000e+15 +7.588590529092646000e+15 +7.683513417986641000e+15 +7.779676417827806000e+15 +7.877637724442297000e+15 +7.981785741171316000e+15 +8.837760062602585000e+15 +8.176699865478156000e+15 +8.795104857689326000e+15 +8.366956258321955000e+15 +8.465551552468022000e+15 +8.566575868981254000e+15 +8.668443171201629000e+15 +8.770926291455224000e+15 +8.873998286430497000e+15 +8.977657560770918000e+15 +9.081921458116982000e+15 +9.186929134975964000e+15 +9.292626728758496000e+15 +9.399100286901726000e+15 +9.507110958113722000e+15 +9.620705087933688000e+15 +9.874071973919566000e+15 +9.890170511084232000e+15 +1.028453381734785200e+16 +1.006061510685748800e+16 +1.015674870982634600e+16 +1.026404877898095200e+16 +1.037342658409495200e+16 +1.048503536294598400e+16 +1.061304458701355200e+16 +1.091023086944837800e+16 +1.081904350230114800e+16 +1.092645092108396000e+16 +1.103700338316161000e+16 +1.114852249002664600e+16 +1.126051578735212400e+16 +1.137272969700409600e+16 +1.148535236222228800e+16 +1.159861736793941200e+16 +1.171284340757447200e+16 +1.183224856652733200e+16 +1.198575782888794400e+16 +1.206472264743159800e+16 +1.218417246565434200e+16 +1.232875684460745000e+16 +1.258527817337935600e+16 +1.706996732515232800e+16 +1.335228732145640800e+16 +1.285713994415775400e+16 +1.288859555434954000e+16 +1.297442111486757200e+16 +1.307405049028376000e+16 +1.317893025633669000e+16 +1.328617782831415200e+16 +1.339446000552445200e+16 +1.350416831161795600e+16 +1.363948444013348200e+16 +1.372877952401197000e+16 +1.405407334503055600e+16 +1.394473828314070800e+16 +1.404431748487802400e+16 +1.415059896891178000e+16 +1.425787592352397200e+16 +1.436610763037333200e+16 +1.447865465602624200e+16 +1.461890220323966200e+16 +1.654296649599269600e+16 +1.492194129215779200e+16 +1.491395582169819600e+16 +1.499971695044326600e+16 +1.509635530539358800e+16 +1.519569096984042400e+16 +1.529542746908004400e+16 +1.539468060028706800e+16 +1.549324966423051600e+16 +1.559226889091449800e+16 +1.569958580730010000e+16 +1.712615269998361600e+16 +1.588363710775364000e+16 +1.597715662530866400e+16 +1.607255355745978400e+16 +1.616543858784304600e+16 +1.625562316364992600e+16 +1.634639328052199000e+16 +1.646180693458410000e+16 +1.835413091009314000e+16 +1.662574272782014800e+16 +1.669959227403040800e+16 +1.678553873600955600e+16 +1.687057033812543000e+16 +1.695300036358361800e+16 +1.703414142979072800e+16 +1.711573880037763800e+16 +1.719794210570946800e+16 +1.727965227626643200e+16 +1.735964320055038800e+16 +1.743660253735361000e+16 +1.750925028484260000e+16 +1.757525964751992400e+16 +1.775240698565812600e+16 +1.775986065935620400e+16 +1.865275459162767200e+16 +1.786746701197246600e+16 +1.866643031597245600e+16 +1.799164551660094800e+16 +1.804889370510039200e+16 +1.811105751443074000e+16 +1.817210290038087200e+16 +1.823202277118664400e+16 +1.828992472337350400e+16 +1.834563542921651200e+16 +1.840007854401831200e+16 +1.845313798110137600e+16 +1.850558551041834800e+16 +1.855501567393730800e+16 +1.860380906539376000e+16 +1.865126403597801600e+16 +1.869706867703986400e+16 +1.874091383653182400e+16 +1.878318111868232400e+16 +1.882403159531998400e+16 +1.886339979481916800e+16 +1.890247209074041600e+16 +1.893745218483118800e+16 +1.897189761387340400e+16 +1.900492397042253600e+16 +1.903632132196855200e+16 +1.906581505748326000e+16 +1.909385803943735600e+16 +1.912032684000915200e+16 +1.914544653429302400e+16 +1.916861858879786800e+16 +1.919125001324986400e+16 +1.921042999022195200e+16 +1.923366462390696800e+16 +1.925402343494130800e+16 +1.930271012847793600e+16 +1.927399011946626400e+16 +1.928718397399636800e+16 +1.929565833466235600e+16 +1.930484718293284800e+16 +1.931123949416572000e+16 +1.931673303572037600e+16 +1.932030263835363600e+16 +1.932284091480529200e+16 +1.932308071009947600e+16 +1.932250504423434000e+16 +1.931961938348475200e+16 +1.931608987189572000e+16 diff --git a/py-CIREALS/params/SF.xlsx b/py-CIREALS/params/SF.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d4f6934ed316931e3286e8c04c4554d6403460f6 GIT binary patch literal 35244 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