diff --git a/RATapi/examples/absorption/absorption.ipynb b/RATapi/examples/absorption/absorption.ipynb
index d0af24dd..9041fd0b 100644
--- a/RATapi/examples/absorption/absorption.ipynb
+++ b/RATapi/examples/absorption/absorption.ipynb
@@ -36,7 +36,7 @@
"metadata": {},
"outputs": [],
"source": [
- "problem = RAT.Project(name=\"Absorption example\", calculation=\"non polarised\", model=\"custom layers\", geometry=\"substrate/liquid\", absorption=True)"
+ "problem = RAT.Project(name=\"Absorption example\", calculation=\"normal\", model=\"custom layers\", geometry=\"substrate/liquid\", absorption=True)"
]
},
{
diff --git a/RATapi/examples/absorption/absorption.py b/RATapi/examples/absorption/absorption.py
index cbf9dc63..4b59ff88 100644
--- a/RATapi/examples/absorption/absorption.py
+++ b/RATapi/examples/absorption/absorption.py
@@ -9,7 +9,7 @@ def absorption():
"""Custom layers model including absorption"""
problem = RAT.Project(
name="Absorption example",
- calculation="non polarised",
+ calculation="normal",
model="custom layers",
geometry="substrate/liquid",
absorption=True,
diff --git a/RATapi/examples/convert_rascal_project/convert_rascal.ipynb b/RATapi/examples/convert_rascal_project/convert_rascal.ipynb
index c3b5e343..c62be937 100644
--- a/RATapi/examples/convert_rascal_project/convert_rascal.ipynb
+++ b/RATapi/examples/convert_rascal_project/convert_rascal.ipynb
@@ -20,140 +20,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Name: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "monolayerVolumeModel\n",
- "\n",
- "Calculation: ---------------------------------------------------------------------------------------\n",
- "\n",
- "non polarised\n",
- "\n",
- "Model: ---------------------------------------------------------------------------------------------\n",
- "\n",
- "custom layers\n",
- "\n",
- "Geometry: ------------------------------------------------------------------------------------------\n",
- "\n",
- "air/substrate\n",
- "\n",
- "Parameters: ----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------------+------+--------------------+-------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------------+------+--------------------+-------+------+------------+-----+-------+\n",
- "| 0 | Substrate Roughness | 1.0 | 2.9979642781948908 | 8.0 | True | uniform | 0.0 | inf |\n",
- "| 1 | Area per molecule | 47.0 | 53.052680457664785 | 100.0 | True | uniform | 0.0 | inf |\n",
- "| 2 | Head Thickness | 7.0 | 12.276333836779942 | 20.0 | True | uniform | 0.0 | inf |\n",
- "| 3 | Theta | 0.0 | 28.870541049836262 | 50.0 | True | uniform | 0.0 | inf |\n",
- "+-------+---------------------+------+--------------------+-------+------+------------+-----+-------+\n",
- "\n",
- "Bulk In: -------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| 0 | Air | 0.0 | 0.0 | 0.0 | False | uniform | 0.0 | inf |\n",
- "+-------+------+-----+-------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Bulk Out: ------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------+---------+----------+---------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+------+---------+----------+---------+-------+------------+-----+-------+\n",
- "| 0 | D2O | 6.3e-06 | 6.35e-06 | 6.4e-06 | False | uniform | 0.0 | inf |\n",
- "| 1 | ACMW | -5e-07 | 0.0 | 5e-07 | False | uniform | 0.0 | inf |\n",
- "+-------+------+---------+----------+---------+-------+------------+-----+-------+\n",
- "\n",
- "Scalefactors: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+-----+--------------------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------+-----+--------------------+-----+-------+------------+-----+-------+\n",
- "| 0 | Scalefactor 1 | 0.1 | 0.2272676786810902 | 0.4 | False | uniform | 0.0 | inf |\n",
- "+-------+---------------+-----+--------------------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Background Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+------------------------+-------+------------------------+-------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+------------------------+-------+------------------------+-------+------+------------+-----+-------+\n",
- "| 0 | Background parameter 1 | 1e-07 | 2.2653463958223856e-06 | 7e-06 | True | uniform | 0.0 | inf |\n",
- "| 1 | Background parameter 2 | 1e-07 | 5.7431759430575025e-06 | 7e-06 | True | uniform | 0.0 | inf |\n",
- "+-------+------------------------+-------+------------------------+-------+------+------------+-----+-------+\n",
- "\n",
- "Backgrounds: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+-----------------+----------+------------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+-----------------+----------+------------------------+---------+---------+---------+---------+\n",
- "| 0 | Background D2O | constant | Background parameter 1 | | | | |\n",
- "| 1 | Background ACMW | constant | Background parameter 2 | | | | |\n",
- "+-------+-----------------+----------+------------------------+---------+---------+---------+---------+\n",
- "\n",
- "Resolution Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+------------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+------------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Resolution parameter 1 | 0.01 | 0.03 | 0.05 | False | uniform | 0.0 | inf |\n",
- "+-------+------------------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Resolutions: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+------------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+------------------------+---------+---------+---------+---------+\n",
- "| 0 | Resolution 1 | constant | Resolution parameter 1 | | | | |\n",
- "+-------+--------------+----------+------------------------+---------+---------+---------+---------+\n",
- "\n",
- "Custom Files: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+-----------+-------------+---------------+----------+------+\n",
- "| index | name | filename | function name | language | path |\n",
- "+-------+-----------+-------------+---------------+----------+------+\n",
- "| 0 | Model_IIb | Model_IIb.m | Model_IIb | matlab | . |\n",
- "+-------+-----------+-------------+---------------+----------+------+\n",
- "\n",
- "Data: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------------+----------------------+---------------------+---------------------+\n",
- "| index | name | data | data range | simulation range |\n",
- "+-------+------------+----------------------+---------------------+---------------------+\n",
- "| 0 | Simulation | [] | [] | [0.005, 0.7] |\n",
- "| 1 | d70acmw20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "| 2 | d70d2o20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "| 3 | d13acmw20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "| 4 | d13d2o20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "| 5 | d83acmw20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "| 6 | d83d2o20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "| 7 | hd2o20 | Data array: [51 x 3] | [0.051793, 0.58877] | [0.051793, 0.58877] |\n",
- "+-------+------------+----------------------+---------------------+---------------------+\n",
- "\n",
- "Contrasts: -----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+-----------+-----------------+-------------------+---------+----------+---------------+--------------+----------+-----------+\n",
- "| index | name | data | background | background action | bulk in | bulk out | scalefactor | resolution | resample | model |\n",
- "+-------+--------------+-----------+-----------------+-------------------+---------+----------+---------------+--------------+----------+-----------+\n",
- "| 0 | d70, acmw | d70acmw20 | Background ACMW | add | Air | ACMW | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "| 1 | d70 d2o | d70d2o20 | Background D2O | add | Air | D2O | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "| 2 | d13 acmw | d13acmw20 | Background ACMW | add | Air | ACMW | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "| 3 | d13 d2o | d13d2o20 | Background D2O | add | Air | D2O | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "| 4 | d83 acmw | d83acmw20 | Background ACMW | add | Air | ACMW | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "| 5 | d83 d2o | d83d2o20 | Background D2O | add | Air | D2O | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "| 6 | fully h, D2O | hd2o20 | Background D2O | add | Air | D2O | Scalefactor 1 | Resolution 1 | False | Model_IIb |\n",
- "+-------+--------------+-----------+-----------------+-------------------+---------+----------+---------------+--------------+----------+-----------+\n",
- "\n",
- "\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"from RATapi.utils.convert import r1_to_project_class\n",
"\n",
@@ -170,24 +39,9 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "+-------+---------------------+------+--------------------+-------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------------+------+--------------------+-------+------+------------+-----+-------+\n",
- "| 0 | Substrate Roughness | 1.0 | 2.9979642781948908 | 8.0 | True | uniform | 0.0 | inf |\n",
- "| 1 | Area per molecule | 47.0 | 53.052680457664785 | 100.0 | True | uniform | 0.0 | 50.0 |\n",
- "| 2 | Head Thickness | 7.0 | 12.276333836779942 | 20.0 | True | gaussian | 0.0 | inf |\n",
- "| 3 | Theta | 0.0 | 28.870541049836262 | 50.0 | True | uniform | 2.0 | inf |\n",
- "+-------+---------------------+------+--------------------+-------+------+------------+-----+-------+\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"project.parameters[\"Head Thickness\"].prior_type = 'gaussian'\n",
"project.parameters[\"Theta\"].mu = 2.0\n",
@@ -205,7 +59,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -222,7 +76,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -241,173 +95,9 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "Elapsed time is 0.029 seconds\n",
- "\n",
- "Finished RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "Name: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "original_dspc_bilayer\n",
- "\n",
- "Calculation: ---------------------------------------------------------------------------------------\n",
- "\n",
- "non polarised\n",
- "\n",
- "Model: ---------------------------------------------------------------------------------------------\n",
- "\n",
- "standard layers\n",
- "\n",
- "Geometry: ------------------------------------------------------------------------------------------\n",
- "\n",
- "substrate/liquid\n",
- "\n",
- "Parameters: ----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+-------------------------+----------+-----------+----------+-------+------------+------+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+-------------------------+----------+-----------+----------+-------+------------+------+-------+\n",
- "| 0 | Substrate Roughness | 1.0 | 3.0 | 10.0 | True | uniform | 0.0 | inf |\n",
- "| 1 | Oxide Thickness | 5.0 | 19.54 | 60.0 | True | uniform | 0.0 | inf |\n",
- "| 2 | Oxide SLD | 3.39e-06 | 3.39e-06 | 3.41e-06 | False | uniform | 0.0 | inf |\n",
- "| 3 | SAM Tails Thickness | 15.0 | 22.66 | 35.0 | True | uniform | 0.0 | inf |\n",
- "| 4 | SAM Tails SLD | -5e-07 | -4.01e-07 | -3e-07 | False | uniform | 0.0 | inf |\n",
- "| 5 | SAM Tails Hydration | 1.0 | 5.252 | 50.0 | True | uniform | 0.0 | inf |\n",
- "| 6 | SAM Roughness | 1.0 | 5.64 | 15.0 | True | uniform | 0.0 | inf |\n",
- "| 7 | CW Thickness | 10.0 | 17.12 | 28.0 | True | uniform | 0.0 | inf |\n",
- "| 8 | CW SLD | 0.0 | 0.0 | 1e-09 | False | uniform | 0.0 | inf |\n",
- "| 9 | SAM Heads Thickness | 5.0 | 8.56 | 17.0 | True | gaussian | 10.0 | 2.0 |\n",
- "| 10 | SAM Heads SLD | 1e-07 | 1.75e-06 | 2e-06 | False | uniform | 0.0 | inf |\n",
- "| 11 | SAM Heads Hydration | 10.0 | 45.45 | 50.0 | True | uniform | 30.0 | 3.0 |\n",
- "| 12 | Bilayer Heads Thickness | 7.0 | 10.7 | 17.0 | True | gaussian | 10.0 | 2.0 |\n",
- "| 13 | Bilayer Heads SLD | 5e-07 | 1.47e-06 | 1.5e-06 | False | uniform | 0.0 | inf |\n",
- "| 14 | Bilayer Roughness | 2.0 | 6.014 | 15.0 | True | uniform | 0.0 | inf |\n",
- "| 15 | Bilayer Tails Thickness | 14.0 | 17.82 | 22.0 | True | uniform | 0.0 | inf |\n",
- "| 16 | Bilayer Tails SLD | -5e-07 | -4.61e-07 | 0.0 | False | uniform | 0.0 | inf |\n",
- "| 17 | Bilayer Tails Hydration | 10.0 | 17.64 | 50.0 | True | uniform | 0.0 | inf |\n",
- "| 18 | Bilayer Heads Hydration | 10.0 | 36.15 | 50.0 | True | gaussian | 30.0 | 3.0 |\n",
- "| 19 | CW Hydration | 99.9 | 100.0 | 100.0 | False | uniform | 0.0 | inf |\n",
- "| 20 | Oxide Hydration | 0.0 | 23.61 | 60.0 | True | uniform | 0.0 | inf |\n",
- "+-------+-------------------------+----------+-----------+----------+-------+------------+------+-------+\n",
- "\n",
- "Bulk In: -------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+-------+-----------+---------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------+-------+-----------+---------+-------+------------+-----+-------+\n",
- "| 0 | Silicon | 2e-06 | 2.073e-06 | 2.1e-06 | False | uniform | 0.0 | inf |\n",
- "+-------+---------+-------+-----------+---------+-------+------------+-----+-------+\n",
- "\n",
- "Bulk Out: ------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------+---------+----------+----------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+------+---------+----------+----------+------+------------+-----+-------+\n",
- "| 0 | D2O | 5.5e-06 | 5.98e-06 | 6.4e-06 | True | uniform | 0.0 | inf |\n",
- "| 1 | SMW | 1e-06 | 2.21e-06 | 4.99e-06 | True | uniform | 0.0 | inf |\n",
- "+-------+------+---------+----------+----------+------+------------+-----+-------+\n",
- "\n",
- "Scalefactors: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+------+-------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------+------+-------+-----+-------+------------+-----+-------+\n",
- "| 0 | Scalefactor 1 | 0.05 | 0.1 | 0.2 | False | uniform | 0.0 | inf |\n",
- "| 1 | Scalefactor 2 | 0.05 | 0.15 | 0.2 | False | uniform | 0.0 | inf |\n",
- "+-------+---------------+------+-------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Background Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------------+-------+----------+----------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------------+-------+----------+----------+------+------------+-----+-------+\n",
- "| 0 | Background parameter D2O | 5e-10 | 2.23e-06 | 7e-06 | True | uniform | 0.0 | inf |\n",
- "| 1 | Background parameter SMW | 1e-10 | 3.38e-06 | 4.99e-06 | True | uniform | 0.0 | inf |\n",
- "+-------+--------------------------+-------+----------+----------+------+------------+-----+-------+\n",
- "\n",
- "Backgrounds: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+----------------+----------+--------------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+----------------+----------+--------------------------+---------+---------+---------+---------+\n",
- "| 0 | D2O Background | constant | Background parameter D2O | | | | |\n",
- "| 1 | SMW Background | constant | Background parameter SMW | | | | |\n",
- "+-------+----------------+----------+--------------------------+---------+---------+---------+---------+\n",
- "\n",
- "Resolution Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Resolution Param 1 | 0.01 | 0.03 | 0.05 | False | uniform | 0.0 | inf |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Resolutions: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| 0 | Resolution 1 | constant | Resolution Param 1 | | | | |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "\n",
- "Data: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------------------+---------------------+---------------------+\n",
- "| index | name | data | data range | simulation range |\n",
- "+-------+--------------+----------------------+---------------------+---------------------+\n",
- "| 0 | Simulation | [] | [] | [0.005, 0.7] |\n",
- "| 1 | dspc_bil_D2O | Data array: [82 x 3] | [0.011403, 0.59342] | [0.011403, 0.59342] |\n",
- "| 2 | dspc_bil_smw | Data array: [82 x 3] | [0.011403, 0.59342] | [0.011403, 0.59342] |\n",
- "+-------+--------------+----------------------+---------------------+---------------------+\n",
- "\n",
- "Layers: --------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+-------------------------+-------------------+---------------------+-------------------------+--------------+\n",
- "| index | name | thickness | SLD | roughness | hydration | hydrate with |\n",
- "+-------+---------------+-------------------------+-------------------+---------------------+-------------------------+--------------+\n",
- "| 0 | Oxide | Oxide Thickness | Oxide SLD | Substrate Roughness | Oxide Hydration | bulk out |\n",
- "| 1 | SAM Tails | SAM Tails Thickness | SAM Tails SLD | SAM Roughness | SAM Tails Hydration | bulk out |\n",
- "| 2 | SAM Heads | SAM Heads Thickness | SAM Heads SLD | SAM Roughness | SAM Heads Hydration | bulk out |\n",
- "| 3 | Central Water | CW Thickness | CW SLD | Bilayer Roughness | CW Hydration | bulk out |\n",
- "| 4 | Bilayer Heads | Bilayer Heads Thickness | Bilayer Heads SLD | Bilayer Roughness | Bilayer Heads Hydration | bulk out |\n",
- "| 5 | Bilayer Tails | Bilayer Tails Thickness | Bilayer Tails SLD | Bilayer Roughness | Bilayer Tails Hydration | bulk out |\n",
- "+-------+---------------+-------------------------+-------------------+---------------------+-------------------------+--------------+\n",
- "\n",
- "Contrasts: -----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------+--------------+----------------+-------------------+---------+----------+---------------+--------------+----------+---------------+\n",
- "| index | name | data | background | background action | bulk in | bulk out | scalefactor | resolution | resample | model |\n",
- "+-------+------+--------------+----------------+-------------------+---------+----------+---------------+--------------+----------+---------------+\n",
- "| 0 | D2O | dspc_bil_D2O | D2O Background | add | Silicon | D2O | Scalefactor 1 | Resolution 1 | False | Oxide |\n",
- "| | | | | | | | | | | SAM Tails |\n",
- "| | | | | | | | | | | SAM Heads |\n",
- "| | | | | | | | | | | Central Water |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "| 1 | SMW | dspc_bil_smw | SMW Background | add | Silicon | SMW | Scalefactor 2 | Resolution 1 | False | Oxide |\n",
- "| | | | | | | | | | | SAM Tails |\n",
- "| | | | | | | | | | | SAM Heads |\n",
- "| | | | | | | | | | | Central Water |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "+-------+------+--------------+----------------+-------------------+---------+----------+---------------+--------------+----------+---------------+\n",
- "\n",
- "\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"from RATapi.examples import DSPC_standard_layers\n",
"lipid_bilayer_project = DSPC_standard_layers()[0]\n",
@@ -427,22 +117,9 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "ename": "AttributeError",
- "evalue": "'NoneType' object has no attribute 'result'",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[6], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpprint\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m pp \u001b[38;5;66;03m# for printing the struct\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# save to a file called lipid_bilayer.mat\u001b[39;00m\n\u001b[0;32m----> 5\u001b[0m \u001b[43mproject_class_to_r1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlipid_bilayer_project\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlipid_bilayer.mat\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# return as a Python dictionary\u001b[39;00m\n\u001b[1;32m 8\u001b[0m struct \u001b[38;5;241m=\u001b[39m project_class_to_r1(lipid_bilayer_project, return_struct\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
- "File \u001b[0;32m/mnt/c/Users/gnn85523/projects/python-RAT/RATapi/utils/convert.py:497\u001b[0m, in \u001b[0;36mproject_class_to_r1\u001b[0;34m(project, filename, return_struct)\u001b[0m\n\u001b[1;32m 493\u001b[0m filename \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.mat\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 494\u001b[0m \u001b[38;5;66;03m# scipy.io.savemat doesn't do cells properly:\u001b[39;00m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;66;03m# https://github.com/scipy/scipy/issues/3756\u001b[39;00m\n\u001b[1;32m 496\u001b[0m \u001b[38;5;66;03m# rather than fiddling we just use matlab\u001b[39;00m\n\u001b[0;32m--> 497\u001b[0m eng \u001b[38;5;241m=\u001b[39m \u001b[43mwrappers\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstart_matlab\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresult\u001b[49m()\n\u001b[1;32m 498\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m eng \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 499\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmatlabengine is not installed.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
- "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'result'"
- ]
- }
- ],
+ "outputs": [],
"source": [
"from RATapi.utils.convert import project_class_to_r1\n",
"from pprint import pp # for printing the struct\n",
diff --git a/RATapi/examples/domains/domains_custom_XY.ipynb b/RATapi/examples/domains/domains_custom_XY.ipynb
index 9e19f2ed..fa8f317d 100644
--- a/RATapi/examples/domains/domains_custom_XY.ipynb
+++ b/RATapi/examples/domains/domains_custom_XY.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -28,7 +28,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -54,7 +54,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -75,310 +75,9 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
import math \n",
- "\n",
- "import numpy as np \n",
- "\n",
- "\n",
- "def domains_XY_model ( params , bulk_in , bulk_out , contrast , domain ): \n",
- " # Split up the parameters for convenience \n",
- " subRough = params [ 0 ] \n",
- " oxideThick = params [ 1 ] \n",
- " layerThick = params [ 2 ] \n",
- " layerSLD = params [ 3 ] \n",
- " layerRough = params [ 4 ] \n",
- " domainSLD = params [ 5 ] \n",
- "\n",
- " # Make an array of z values for our model \n",
- " z = np . arange ( 0 , 141 ) \n",
- "\n",
- " # Make the volume fraction distribution for our Silicon substrate \n",
- " [ vfSilicon , siSurf ] = makeLayer ( z , - 25 , 50 , 1 , subRough , subRough ) \n",
- "\n",
- " # ... and the Oxide ... \n",
- " [ vfOxide , oxSurface ] = makeLayer ( z , siSurf , oxideThick , 1 , subRough , subRough ) \n",
- "\n",
- " # ... and also our layer. \n",
- " [ vfLayer , laySurface ] = makeLayer ( z , oxSurface , layerThick , 1 , subRough , layerRough ) \n",
- "\n",
- " # Everything that is not already occupied will be filled will water \n",
- " totalVF = vfSilicon + vfOxide + vfLayer \n",
- " vfWater = 1 - totalVF \n",
- "\n",
- " # Now convert the Volume Fractions to SLDs \n",
- " siSLD = vfSilicon * bulk_in \n",
- " oxSLD = vfOxide * 3.41e-6 \n",
- "\n",
- " # Layer SLD depends on whether we are calculating the domain or not \n",
- " if domain == 0 : \n",
- " laySLD = vfLayer * layerSLD \n",
- " else : \n",
- " laySLD = vfLayer * domainSLD \n",
- "\n",
- " # ... and finally the water SLD. \n",
- " waterSLD = vfWater * bulk_out [ contrast ] \n",
- "\n",
- " # Make the total SLD by just adding them all up \n",
- " totalSLD = siSLD + oxSLD + laySLD + waterSLD \n",
- "\n",
- " # The output is just a [n x 2] array of z against SLD \n",
- " SLD = np . column_stack ([ z , totalSLD ]) \n",
- "\n",
- " return SLD , subRough \n",
- "\n",
- "\n",
- "def makeLayer ( z , prevLaySurf , thickness , height , Sigma_L , Sigma_R ): \n",
- " """This produces a layer, with a defined thickness, height and roughness. \n",
- " Each side of the layer has its own roughness value. \n",
- " """ \n",
- " # Find the edges \n",
- " left = prevLaySurf \n",
- " right = prevLaySurf + thickness \n",
- "\n",
- " # Make our heaviside \n",
- " a = ( z - left ) / (( 2 ** 0.5 ) * Sigma_L ) \n",
- " b = ( z - right ) / (( 2 ** 0.5 ) * Sigma_R ) \n",
- "\n",
- " erf_a = np . array ([ math . erf ( value ) for value in a ]) \n",
- " erf_b = np . array ([ math . erf ( value ) for value in b ]) \n",
- "\n",
- " VF = np . array (( height / 2 ) * ( erf_a - erf_b )) \n",
- "\n",
- " return VF , right \n",
- " \n"
- ],
- "text/latex": [
- "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n",
- "\\PY{k+kn}{import} \\PY{n+nn}{math}\n",
- "\n",
- "\\PY{k+kn}{import} \\PY{n+nn}{numpy} \\PY{k}{as} \\PY{n+nn}{np}\n",
- "\n",
- "\n",
- "\\PY{k}{def} \\PY{n+nf}{domains\\PYZus{}XY\\PYZus{}model}\\PY{p}{(}\\PY{n}{params}\\PY{p}{,} \\PY{n}{bulk\\PYZus{}in}\\PY{p}{,} \\PY{n}{bulk\\PYZus{}out}\\PY{p}{,} \\PY{n}{contrast}\\PY{p}{,} \\PY{n}{domain}\\PY{p}{)}\\PY{p}{:}\n",
- " \\PY{c+c1}{\\PYZsh{} Split up the parameters for convenience}\n",
- " \\PY{n}{subRough} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{0}\\PY{p}{]}\n",
- " \\PY{n}{oxideThick} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{1}\\PY{p}{]}\n",
- " \\PY{n}{layerThick} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{2}\\PY{p}{]}\n",
- " \\PY{n}{layerSLD} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{3}\\PY{p}{]}\n",
- " \\PY{n}{layerRough} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{4}\\PY{p}{]}\n",
- " \\PY{n}{domainSLD} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{5}\\PY{p}{]}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Make an array of z values for our model}\n",
- " \\PY{n}{z} \\PY{o}{=} \\PY{n}{np}\\PY{o}{.}\\PY{n}{arange}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{,} \\PY{l+m+mi}{141}\\PY{p}{)}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Make the volume fraction distribution for our Silicon substrate}\n",
- " \\PY{p}{[}\\PY{n}{vfSilicon}\\PY{p}{,} \\PY{n}{siSurf}\\PY{p}{]} \\PY{o}{=} \\PY{n}{makeLayer}\\PY{p}{(}\\PY{n}{z}\\PY{p}{,} \\PY{o}{\\PYZhy{}}\\PY{l+m+mi}{25}\\PY{p}{,} \\PY{l+m+mi}{50}\\PY{p}{,} \\PY{l+m+mi}{1}\\PY{p}{,} \\PY{n}{subRough}\\PY{p}{,} \\PY{n}{subRough}\\PY{p}{)}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} ... and the Oxide ...}\n",
- " \\PY{p}{[}\\PY{n}{vfOxide}\\PY{p}{,} \\PY{n}{oxSurface}\\PY{p}{]} \\PY{o}{=} \\PY{n}{makeLayer}\\PY{p}{(}\\PY{n}{z}\\PY{p}{,} \\PY{n}{siSurf}\\PY{p}{,} \\PY{n}{oxideThick}\\PY{p}{,} \\PY{l+m+mi}{1}\\PY{p}{,} \\PY{n}{subRough}\\PY{p}{,} \\PY{n}{subRough}\\PY{p}{)}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} ... and also our layer.}\n",
- " \\PY{p}{[}\\PY{n}{vfLayer}\\PY{p}{,} \\PY{n}{laySurface}\\PY{p}{]} \\PY{o}{=} \\PY{n}{makeLayer}\\PY{p}{(}\\PY{n}{z}\\PY{p}{,} \\PY{n}{oxSurface}\\PY{p}{,} \\PY{n}{layerThick}\\PY{p}{,} \\PY{l+m+mi}{1}\\PY{p}{,} \\PY{n}{subRough}\\PY{p}{,} \\PY{n}{layerRough}\\PY{p}{)}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Everything that is not already occupied will be filled will water}\n",
- " \\PY{n}{totalVF} \\PY{o}{=} \\PY{n}{vfSilicon} \\PY{o}{+} \\PY{n}{vfOxide} \\PY{o}{+} \\PY{n}{vfLayer}\n",
- " \\PY{n}{vfWater} \\PY{o}{=} \\PY{l+m+mi}{1} \\PY{o}{\\PYZhy{}} \\PY{n}{totalVF}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Now convert the Volume Fractions to SLDs}\n",
- " \\PY{n}{siSLD} \\PY{o}{=} \\PY{n}{vfSilicon} \\PY{o}{*} \\PY{n}{bulk\\PYZus{}in}\n",
- " \\PY{n}{oxSLD} \\PY{o}{=} \\PY{n}{vfOxide} \\PY{o}{*} \\PY{l+m+mf}{3.41e\\PYZhy{}6}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Layer SLD depends on whether we are calculating the domain or not}\n",
- " \\PY{k}{if} \\PY{n}{domain} \\PY{o}{==} \\PY{l+m+mi}{0}\\PY{p}{:}\n",
- " \\PY{n}{laySLD} \\PY{o}{=} \\PY{n}{vfLayer} \\PY{o}{*} \\PY{n}{layerSLD}\n",
- " \\PY{k}{else}\\PY{p}{:}\n",
- " \\PY{n}{laySLD} \\PY{o}{=} \\PY{n}{vfLayer} \\PY{o}{*} \\PY{n}{domainSLD}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} ... and finally the water SLD.}\n",
- " \\PY{n}{waterSLD} \\PY{o}{=} \\PY{n}{vfWater} \\PY{o}{*} \\PY{n}{bulk\\PYZus{}out}\\PY{p}{[}\\PY{n}{contrast}\\PY{p}{]}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Make the total SLD by just adding them all up}\n",
- " \\PY{n}{totalSLD} \\PY{o}{=} \\PY{n}{siSLD} \\PY{o}{+} \\PY{n}{oxSLD} \\PY{o}{+} \\PY{n}{laySLD} \\PY{o}{+} \\PY{n}{waterSLD}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} The output is just a [n x 2] array of z against SLD}\n",
- " \\PY{n}{SLD} \\PY{o}{=} \\PY{n}{np}\\PY{o}{.}\\PY{n}{column\\PYZus{}stack}\\PY{p}{(}\\PY{p}{[}\\PY{n}{z}\\PY{p}{,} \\PY{n}{totalSLD}\\PY{p}{]}\\PY{p}{)}\n",
- "\n",
- " \\PY{k}{return} \\PY{n}{SLD}\\PY{p}{,} \\PY{n}{subRough}\n",
- "\n",
- "\n",
- "\\PY{k}{def} \\PY{n+nf}{makeLayer}\\PY{p}{(}\\PY{n}{z}\\PY{p}{,} \\PY{n}{prevLaySurf}\\PY{p}{,} \\PY{n}{thickness}\\PY{p}{,} \\PY{n}{height}\\PY{p}{,} \\PY{n}{Sigma\\PYZus{}L}\\PY{p}{,} \\PY{n}{Sigma\\PYZus{}R}\\PY{p}{)}\\PY{p}{:}\n",
- "\\PY{+w}{ }\\PY{l+s+sd}{\\PYZdq{}\\PYZdq{}\\PYZdq{}This produces a layer, with a defined thickness, height and roughness.}\n",
- "\\PY{l+s+sd}{ Each side of the layer has its own roughness value.}\n",
- "\\PY{l+s+sd}{ \\PYZdq{}\\PYZdq{}\\PYZdq{}}\n",
- " \\PY{c+c1}{\\PYZsh{} Find the edges}\n",
- " \\PY{n}{left} \\PY{o}{=} \\PY{n}{prevLaySurf}\n",
- " \\PY{n}{right} \\PY{o}{=} \\PY{n}{prevLaySurf} \\PY{o}{+} \\PY{n}{thickness}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Make our heaviside}\n",
- " \\PY{n}{a} \\PY{o}{=} \\PY{p}{(}\\PY{n}{z} \\PY{o}{\\PYZhy{}} \\PY{n}{left}\\PY{p}{)} \\PY{o}{/} \\PY{p}{(}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{o}{*}\\PY{o}{*}\\PY{l+m+mf}{0.5}\\PY{p}{)} \\PY{o}{*} \\PY{n}{Sigma\\PYZus{}L}\\PY{p}{)}\n",
- " \\PY{n}{b} \\PY{o}{=} \\PY{p}{(}\\PY{n}{z} \\PY{o}{\\PYZhy{}} \\PY{n}{right}\\PY{p}{)} \\PY{o}{/} \\PY{p}{(}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{o}{*}\\PY{o}{*}\\PY{l+m+mf}{0.5}\\PY{p}{)} \\PY{o}{*} \\PY{n}{Sigma\\PYZus{}R}\\PY{p}{)}\n",
- "\n",
- " \\PY{n}{erf\\PYZus{}a} \\PY{o}{=} \\PY{n}{np}\\PY{o}{.}\\PY{n}{array}\\PY{p}{(}\\PY{p}{[}\\PY{n}{math}\\PY{o}{.}\\PY{n}{erf}\\PY{p}{(}\\PY{n}{value}\\PY{p}{)} \\PY{k}{for} \\PY{n}{value} \\PY{o+ow}{in} \\PY{n}{a}\\PY{p}{]}\\PY{p}{)}\n",
- " \\PY{n}{erf\\PYZus{}b} \\PY{o}{=} \\PY{n}{np}\\PY{o}{.}\\PY{n}{array}\\PY{p}{(}\\PY{p}{[}\\PY{n}{math}\\PY{o}{.}\\PY{n}{erf}\\PY{p}{(}\\PY{n}{value}\\PY{p}{)} \\PY{k}{for} \\PY{n}{value} \\PY{o+ow}{in} \\PY{n}{b}\\PY{p}{]}\\PY{p}{)}\n",
- "\n",
- " \\PY{n}{VF} \\PY{o}{=} \\PY{n}{np}\\PY{o}{.}\\PY{n}{array}\\PY{p}{(}\\PY{p}{(}\\PY{n}{height} \\PY{o}{/} \\PY{l+m+mi}{2}\\PY{p}{)} \\PY{o}{*} \\PY{p}{(}\\PY{n}{erf\\PYZus{}a} \\PY{o}{\\PYZhy{}} \\PY{n}{erf\\PYZus{}b}\\PY{p}{)}\\PY{p}{)}\n",
- "\n",
- " \\PY{k}{return} \\PY{n}{VF}\\PY{p}{,} \\PY{n}{right}\n",
- "\\end{Verbatim}\n"
- ],
- "text/plain": [
- "import math\n",
- "\n",
- "import numpy as np\n",
- "\n",
- "\n",
- "def domains_XY_model(params, bulk_in, bulk_out, contrast, domain):\n",
- " # Split up the parameters for convenience\n",
- " subRough = params[0]\n",
- " oxideThick = params[1]\n",
- " layerThick = params[2]\n",
- " layerSLD = params[3]\n",
- " layerRough = params[4]\n",
- " domainSLD = params[5]\n",
- "\n",
- " # Make an array of z values for our model\n",
- " z = np.arange(0, 141)\n",
- "\n",
- " # Make the volume fraction distribution for our Silicon substrate\n",
- " [vfSilicon, siSurf] = makeLayer(z, -25, 50, 1, subRough, subRough)\n",
- "\n",
- " # ... and the Oxide ...\n",
- " [vfOxide, oxSurface] = makeLayer(z, siSurf, oxideThick, 1, subRough, subRough)\n",
- "\n",
- " # ... and also our layer.\n",
- " [vfLayer, laySurface] = makeLayer(z, oxSurface, layerThick, 1, subRough, layerRough)\n",
- "\n",
- " # Everything that is not already occupied will be filled will water\n",
- " totalVF = vfSilicon + vfOxide + vfLayer\n",
- " vfWater = 1 - totalVF\n",
- "\n",
- " # Now convert the Volume Fractions to SLDs\n",
- " siSLD = vfSilicon * bulk_in\n",
- " oxSLD = vfOxide * 3.41e-6\n",
- "\n",
- " # Layer SLD depends on whether we are calculating the domain or not\n",
- " if domain == 0:\n",
- " laySLD = vfLayer * layerSLD\n",
- " else:\n",
- " laySLD = vfLayer * domainSLD\n",
- "\n",
- " # ... and finally the water SLD.\n",
- " waterSLD = vfWater * bulk_out[contrast]\n",
- "\n",
- " # Make the total SLD by just adding them all up\n",
- " totalSLD = siSLD + oxSLD + laySLD + waterSLD\n",
- "\n",
- " # The output is just a [n x 2] array of z against SLD\n",
- " SLD = np.column_stack([z, totalSLD])\n",
- "\n",
- " return SLD, subRough\n",
- "\n",
- "\n",
- "def makeLayer(z, prevLaySurf, thickness, height, Sigma_L, Sigma_R):\n",
- " \"\"\"This produces a layer, with a defined thickness, height and roughness.\n",
- " Each side of the layer has its own roughness value.\n",
- " \"\"\"\n",
- " # Find the edges\n",
- " left = prevLaySurf\n",
- " right = prevLaySurf + thickness\n",
- "\n",
- " # Make our heaviside\n",
- " a = (z - left) / ((2**0.5) * Sigma_L)\n",
- " b = (z - right) / ((2**0.5) * Sigma_R)\n",
- "\n",
- " erf_a = np.array([math.erf(value) for value in a])\n",
- " erf_b = np.array([math.erf(value) for value in b])\n",
- "\n",
- " VF = np.array((height / 2) * (erf_a - erf_b))\n",
- "\n",
- " return VF, right"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"Code(\"domains_XY_model.py\")"
]
@@ -392,7 +91,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -445,32 +144,9 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "Elapsed time is 0.071 seconds\n",
- "\n",
- "Finished RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n"
- ]
- },
- {
- "data": {
- "image/png": "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ZE6ePFlj/e9//3uKioro2rVraJ2u63Tr1q1aucLCQgA6derUvMGLZiU1QqJV3X///YwaNapaElTlqquuAqhRvXy6utrsG9Je3xykzV+I9k/TNO64445QEtSvX79ay/Xr14+dO3dWW7dkyRJycnLYvHkzubm5oeX111/n4MGD1RKn7du307VrV5KTk1v0fMTZkURItJrNmzezdevWOmtTKioqALDb666orKvNviHt9Q0xfPhwfv7zn/Pxxx/TtWtX1q5dW227tPkL0b7pus4dd9zB4sWLeeutt+jSpQt5eXnVFk3TABg5ciQ7duwIJTeBQIAHH3yQyZMn12hmv/baa4HqP+S++OILRowY0fonKRpFmsZEq6mqoamtChpg06ZNAFx66aV1vkZtbfZV7fW7du0Krautvb4hPvvss3q3S5u/EO3bhg0bePvttwG44YYbamxXFIWioiLi4+Pp06cP/fv359133+Xuu+/mpZdeoqioiEmTJtXYr1u3bkRHR5Obm8uwYcPwer0sXryYpUuXtvg5ibMjiZBoNX6/H6DWzocAf/3rX7nyyivp0aNHna9RW5t9Q9vrm4O0+QvRvmVlZdGYCRWmT5/O5MmTmTBhAtnZ2WRnZ9daTlEUysrKQs/feOMNBg8eXOcYRKLtkERItJqq21JXrlzJmDFjqm179tln2bVrF6tXrwbM/kJVt6lv27aNdevWMXDgQPr161ftrq3T2+tPb1LbsGED48eP5+TJk7XePdZU0uYvRGS58cYb2bNnD4cPH27UjyuHw8FLL73UgpGJ5iJzjYlWdf3117Nt2zZmz57NwIEDyc/P57XXXuOdd95h0aJFXHfdddXKz5gxg6KiIl544QXATIr69+9PQUEBsbGxZGRkMH78eB566KFq+x08eJBzzz2XFStWMGzYsGaL/9e//jU2m43XX3+92V5TCCGEdaRGSLSqf/3rX/zpT39i8uTJfP/992iaxvXXX88333xToxP07Nmz2b9/PwsWLAitO73NvqysrMHt9c1B2vyFECL8SI2QsNRdd93FihUryMnJoUOHDqH1CxYs4MMPP+S9997DZrNV2+ejjz5i8uTJbN++HVVtvRsfX3nlFRYtWsSyZcta7ZhCCCFaltw+Lyw1Z84cxo8fz+bNm0PrFi1axDvvvMM///nPGkkQmG32v/nNbzh8+HBrhipt/kIIEYakRki0OYmJiXTq1Ino6GgAZs6cyY9//GOLoxJCCBGOJBESQgghRMSSpjEhhBBCRCxJhIQQQggRsSQREkIIIUTEkkRICCGEEBFLEiEhhBBCRCxJhIQQQggRsSQREkIIIUTEkkRICCGEEBFLEiEhhBBCRCxJhIQQQggRsSQREkIIIUTEkkRICCGEEBHr/wP36JO4iSYKxwAAAABJRU5ErkJggg==",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"controls = RAT.Controls()\n",
"problem, results = RAT.run(problem, controls)\n",
diff --git a/RATapi/examples/domains/domains_custom_layers.ipynb b/RATapi/examples/domains/domains_custom_layers.ipynb
index 1466f2f2..03179d54 100644
--- a/RATapi/examples/domains/domains_custom_layers.ipynb
+++ b/RATapi/examples/domains/domains_custom_layers.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -36,132 +36,9 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Calculation: ---------------------------------------------------------------------------------------\n",
- "\n",
- "domains\n",
- "\n",
- "Model: ---------------------------------------------------------------------------------------------\n",
- "\n",
- "custom layers\n",
- "\n",
- "Geometry: ------------------------------------------------------------------------------------------\n",
- "\n",
- "substrate/liquid\n",
- "\n",
- "Parameters: ----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------------+-------+---------+---------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------------+-------+---------+---------+------+------------+-----+-------+\n",
- "| 0 | Substrate Roughness | 1.0 | 3.0 | 5.0 | True | uniform | 0.0 | inf |\n",
- "| 1 | Alloy Thickness | 100.0 | 150.0 | 200.0 | True | uniform | 0.0 | inf |\n",
- "| 2 | Alloy SLD up | 9e-06 | 1.1e-05 | 1.3e-05 | True | uniform | 0.0 | inf |\n",
- "| 3 | Alloy SLD down | 5e-06 | 7e-06 | 1e-05 | True | uniform | 0.0 | inf |\n",
- "| 4 | Alloy Roughness | 5.0 | 7.0 | 11.0 | True | uniform | 0.0 | inf |\n",
- "| 5 | Gold Thickness | 100.0 | 150.0 | 200.0 | True | uniform | 0.0 | inf |\n",
- "| 6 | Gold SLD | 4e-06 | 4.5e-06 | 5e-06 | True | uniform | 0.0 | inf |\n",
- "| 7 | Gold Roughness | 5.0 | 7.0 | 11.0 | True | uniform | 0.0 | inf |\n",
- "+-------+---------------------+-------+---------+---------+------+------------+-----+-------+\n",
- "\n",
- "Bulk In: -------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+-----+-----------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------+-----+-----------+-----+-------+------------+-----+-------+\n",
- "| 0 | Silicon | 0.0 | 2.073e-06 | 1.0 | False | uniform | 0.0 | inf |\n",
- "+-------+---------+-----+-----------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Bulk Out: ------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+---------+----------+----------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------+---------+----------+----------+-------+------------+-----+-------+\n",
- "| 0 | SLD D2O | 6.2e-06 | 6.35e-06 | 6.35e-06 | False | uniform | 0.0 | inf |\n",
- "+-------+---------+---------+----------+----------+-------+------------+-----+-------+\n",
- "\n",
- "Scalefactors: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Scalefactor 1 | 0.02 | 0.23 | 0.25 | False | uniform | 0.0 | inf |\n",
- "+-------+---------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Domain Ratios: -------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+----------------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+----------------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| 0 | Domain Ratio 1 | 0.4 | 0.5 | 0.6 | False | uniform | 0.0 | inf |\n",
- "+-------+----------------+-----+-------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Background Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------+-------+-------+-------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------+-------+-------+-------+-------+------------+-----+-------+\n",
- "| 0 | Background Param 1 | 1e-07 | 1e-06 | 1e-05 | False | uniform | 0.0 | inf |\n",
- "+-------+--------------------+-------+-------+-------+-------+------------+-----+-------+\n",
- "\n",
- "Backgrounds: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| 0 | Background 1 | constant | Background Param 1 | | | | |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "\n",
- "Resolution Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Resolution Param 1 | 0.01 | 0.03 | 0.05 | False | uniform | 0.0 | inf |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Resolutions: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| 0 | Resolution 1 | constant | Resolution Param 1 | | | | |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "\n",
- "Custom Files: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+------------------+---------------+----------+-------------------------------------------------------------------+\n",
- "| index | name | filename | function name | language | path |\n",
- "+-------+---------------+------------------+---------------+----------+-------------------------------------------------------------------+\n",
- "| 0 | Alloy domains | alloy_domains.py | alloy_domains | python | /mnt/c/Users/gnn85523/projects/python-RAT/RATapi/examples/domains |\n",
- "+-------+---------------+------------------+---------------+----------+-------------------------------------------------------------------+\n",
- "\n",
- "Data: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------------+------+------------+------------------+\n",
- "| index | name | data | data range | simulation range |\n",
- "+-------+------------+------+------------+------------------+\n",
- "| 0 | Simulation | [] | [] | [0.005, 0.7] |\n",
- "+-------+------------+------+------------+------------------+\n",
- "\n",
- "Contrasts: -----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+------------+--------------+-------------------+---------+----------+---------------+--------------+----------+----------------+---------------+\n",
- "| index | name | data | background | background action | bulk in | bulk out | scalefactor | resolution | resample | domain ratio | model |\n",
- "+-------+--------------+------------+--------------+-------------------+---------+----------+---------------+--------------+----------+----------------+---------------+\n",
- "| 0 | D2O Contrast | Simulation | Background 1 | add | Silicon | SLD D2O | Scalefactor 1 | Resolution 1 | False | Domain Ratio 1 | Alloy domains |\n",
- "+-------+--------------+------------+--------------+-------------------+---------+----------+---------------+--------------+----------+----------------+---------------+\n",
- "\n",
- "\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"problem = RAT.Project(calculation=\"domains\", model=\"custom layers\", geometry=\"substrate/liquid\")\n",
"\n",
@@ -211,178 +88,9 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "def alloy_domains ( params , bulkIn , bulkOut , contrast , domain ): \n",
- " """Simple custom model for testing incoherent summing. \n",
- " Simple two layer of permalloy / gold, with up/down domains. \n",
- " """ \n",
- " # Split up the parameters \n",
- " subRough = params [ 0 ] \n",
- " alloyThick = params [ 1 ] \n",
- " alloySLDup = params [ 2 ] \n",
- " alloySLDdn = params [ 3 ] \n",
- " alloyRough = params [ 4 ] \n",
- " goldThick = params [ 5 ] \n",
- " goldSLD = params [ 6 ] \n",
- " goldRough = params [ 7 ] \n",
- "\n",
- " # Make the layers \n",
- " alloyUp = [ alloyThick , alloySLDup , alloyRough ] \n",
- " alloyDn = [ alloyThick , alloySLDdn , alloyRough ] \n",
- " gold = [ goldThick , goldSLD , goldRough ] \n",
- "\n",
- " # Make the model depending on which domain we are looking at \n",
- " if domain == 0 : \n",
- " output = [ alloyUp , gold ] \n",
- " else : \n",
- " output = [ alloyDn , gold ] \n",
- "\n",
- " return output , subRough \n",
- " \n"
- ],
- "text/latex": [
- "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n",
- "\\PY{k}{def} \\PY{n+nf}{alloy\\PYZus{}domains}\\PY{p}{(}\\PY{n}{params}\\PY{p}{,} \\PY{n}{bulkIn}\\PY{p}{,} \\PY{n}{bulkOut}\\PY{p}{,} \\PY{n}{contrast}\\PY{p}{,} \\PY{n}{domain}\\PY{p}{)}\\PY{p}{:}\n",
- "\\PY{+w}{ }\\PY{l+s+sd}{\\PYZdq{}\\PYZdq{}\\PYZdq{}Simple custom model for testing incoherent summing.}\n",
- "\\PY{l+s+sd}{ Simple two layer of permalloy / gold, with up/down domains.}\n",
- "\\PY{l+s+sd}{ \\PYZdq{}\\PYZdq{}\\PYZdq{}}\n",
- " \\PY{c+c1}{\\PYZsh{} Split up the parameters}\n",
- " \\PY{n}{subRough} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{0}\\PY{p}{]}\n",
- " \\PY{n}{alloyThick} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{1}\\PY{p}{]}\n",
- " \\PY{n}{alloySLDup} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{2}\\PY{p}{]}\n",
- " \\PY{n}{alloySLDdn} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{3}\\PY{p}{]}\n",
- " \\PY{n}{alloyRough} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{4}\\PY{p}{]}\n",
- " \\PY{n}{goldThick} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{5}\\PY{p}{]}\n",
- " \\PY{n}{goldSLD} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{6}\\PY{p}{]}\n",
- " \\PY{n}{goldRough} \\PY{o}{=} \\PY{n}{params}\\PY{p}{[}\\PY{l+m+mi}{7}\\PY{p}{]}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Make the layers}\n",
- " \\PY{n}{alloyUp} \\PY{o}{=} \\PY{p}{[}\\PY{n}{alloyThick}\\PY{p}{,} \\PY{n}{alloySLDup}\\PY{p}{,} \\PY{n}{alloyRough}\\PY{p}{]}\n",
- " \\PY{n}{alloyDn} \\PY{o}{=} \\PY{p}{[}\\PY{n}{alloyThick}\\PY{p}{,} \\PY{n}{alloySLDdn}\\PY{p}{,} \\PY{n}{alloyRough}\\PY{p}{]}\n",
- " \\PY{n}{gold} \\PY{o}{=} \\PY{p}{[}\\PY{n}{goldThick}\\PY{p}{,} \\PY{n}{goldSLD}\\PY{p}{,} \\PY{n}{goldRough}\\PY{p}{]}\n",
- "\n",
- " \\PY{c+c1}{\\PYZsh{} Make the model depending on which domain we are looking at}\n",
- " \\PY{k}{if} \\PY{n}{domain} \\PY{o}{==} \\PY{l+m+mi}{0}\\PY{p}{:}\n",
- " \\PY{n}{output} \\PY{o}{=} \\PY{p}{[}\\PY{n}{alloyUp}\\PY{p}{,} \\PY{n}{gold}\\PY{p}{]}\n",
- " \\PY{k}{else}\\PY{p}{:}\n",
- " \\PY{n}{output} \\PY{o}{=} \\PY{p}{[}\\PY{n}{alloyDn}\\PY{p}{,} \\PY{n}{gold}\\PY{p}{]}\n",
- "\n",
- " \\PY{k}{return} \\PY{n}{output}\\PY{p}{,} \\PY{n}{subRough}\n",
- "\\end{Verbatim}\n"
- ],
- "text/plain": [
- "def alloy_domains(params, bulkIn, bulkOut, contrast, domain):\n",
- " \"\"\"Simple custom model for testing incoherent summing.\n",
- " Simple two layer of permalloy / gold, with up/down domains.\n",
- " \"\"\"\n",
- " # Split up the parameters\n",
- " subRough = params[0]\n",
- " alloyThick = params[1]\n",
- " alloySLDup = params[2]\n",
- " alloySLDdn = params[3]\n",
- " alloyRough = params[4]\n",
- " goldThick = params[5]\n",
- " goldSLD = params[6]\n",
- " goldRough = params[7]\n",
- "\n",
- " # Make the layers\n",
- " alloyUp = [alloyThick, alloySLDup, alloyRough]\n",
- " alloyDn = [alloyThick, alloySLDdn, alloyRough]\n",
- " gold = [goldThick, goldSLD, goldRough]\n",
- "\n",
- " # Make the model depending on which domain we are looking at\n",
- " if domain == 0:\n",
- " output = [alloyUp, gold]\n",
- " else:\n",
- " output = [alloyDn, gold]\n",
- "\n",
- " return output, subRough"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"Code(\"alloy_domains.py\")"
]
@@ -398,32 +106,9 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "Elapsed time is 0.015 seconds\n",
- "\n",
- "Finished RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n"
- ]
- },
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"controls = RAT.Controls()\n",
"problem, results = RAT.run(problem, controls)\n",
diff --git a/RATapi/examples/domains/domains_standard_layers.ipynb b/RATapi/examples/domains/domains_standard_layers.ipynb
index 8da0409e..2b5a29f0 100644
--- a/RATapi/examples/domains/domains_standard_layers.ipynb
+++ b/RATapi/examples/domains/domains_standard_layers.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -34,7 +34,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -50,7 +50,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -83,7 +83,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -105,131 +105,9 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Calculation: ---------------------------------------------------------------------------------------\n",
- "\n",
- "domains\n",
- "\n",
- "Model: ---------------------------------------------------------------------------------------------\n",
- "\n",
- "standard layers\n",
- "\n",
- "Geometry: ------------------------------------------------------------------------------------------\n",
- "\n",
- "air/substrate\n",
- "\n",
- "Parameters: ----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------------+---------+---------+-------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------------+---------+---------+-------+-------+------------+-----+-------+\n",
- "| 0 | Substrate Roughness | 1.0 | 3.0 | 5.0 | True | uniform | 0.0 | inf |\n",
- "| 1 | L1 Thickness | 5.0 | 20.0 | 60.0 | True | uniform | 0.0 | inf |\n",
- "| 2 | L1 SLD | 3e-06 | 4.1e-06 | 5e-06 | False | uniform | 0.0 | inf |\n",
- "| 3 | L1 Roughness | 2.0 | 5.0 | 20.0 | True | uniform | 0.0 | inf |\n",
- "| 4 | L1 Hydration | 10.0 | 20.0 | 30.0 | True | uniform | 0.0 | inf |\n",
- "| 5 | L2 Thickness | 5.0 | 60.0 | 100.0 | True | uniform | 0.0 | inf |\n",
- "| 6 | L2 SLD | 2.1e-06 | 3e-06 | 5e-06 | False | uniform | 0.0 | inf |\n",
- "| 7 | L2 Roughness | 2.0 | 5.0 | 20.0 | True | uniform | 0.0 | inf |\n",
- "| 8 | L2 Hydration | 10.0 | 20.0 | 30.0 | True | uniform | 0.0 | inf |\n",
- "| 9 | L3 Thickness | 5.0 | 200.0 | 300.0 | True | uniform | 0.0 | inf |\n",
- "| 10 | L3 SLD | 3e-06 | 7e-06 | 8e-06 | False | uniform | 0.0 | inf |\n",
- "| 11 | L3 Roughness | 2.0 | 5.0 | 20.0 | True | uniform | 0.0 | inf |\n",
- "| 12 | L3 Hydration | 10.0 | 20.0 | 30.0 | True | uniform | 0.0 | inf |\n",
- "+-------+---------------------+---------+---------+-------+-------+------------+-----+-------+\n",
- "\n",
- "Bulk In: -------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| 0 | SLD Air | 0.0 | 0.0 | 0.0 | False | uniform | 0.0 | inf |\n",
- "+-------+---------+-----+-------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Bulk Out: ------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+---------+----------+----------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------+---------+----------+----------+-------+------------+-----+-------+\n",
- "| 0 | SLD D2O | 6.2e-06 | 6.35e-06 | 6.35e-06 | False | uniform | 0.0 | inf |\n",
- "+-------+---------+---------+----------+----------+-------+------------+-----+-------+\n",
- "\n",
- "Scalefactors: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Scalefactor 1 | 0.02 | 0.23 | 0.25 | False | uniform | 0.0 | inf |\n",
- "+-------+---------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Domain Ratios: -------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+----------------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+----------------+-----+-------+-----+-------+------------+-----+-------+\n",
- "| 0 | Domain Ratio 1 | 0.4 | 0.5 | 0.6 | False | uniform | 0.0 | inf |\n",
- "+-------+----------------+-----+-------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Background Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------+-------+-------+-------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------+-------+-------+-------+-------+------------+-----+-------+\n",
- "| 0 | Background Param 1 | 1e-07 | 1e-06 | 1e-05 | False | uniform | 0.0 | inf |\n",
- "+-------+--------------------+-------+-------+-------+-------+------------+-----+-------+\n",
- "\n",
- "Backgrounds: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| 0 | Background 1 | constant | Background Param 1 | | | | |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "\n",
- "Resolution Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Resolution Param 1 | 0.01 | 0.03 | 0.05 | False | uniform | 0.0 | inf |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Resolutions: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| 0 | Resolution 1 | constant | Resolution Param 1 | | | | |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "\n",
- "Data: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------------+------+------------+------------------+\n",
- "| index | name | data | data range | simulation range |\n",
- "+-------+------------+------+------------+------------------+\n",
- "| 0 | Simulation | [] | [] | [0.005, 0.7] |\n",
- "+-------+------------+------+------------+------------------+\n",
- "\n",
- "Layers: --------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+--------------+--------+--------------+--------------+--------------+\n",
- "| index | name | thickness | SLD | roughness | hydration | hydrate with |\n",
- "+-------+---------+--------------+--------+--------------+--------------+--------------+\n",
- "| 0 | Layer 1 | L1 Thickness | L1 SLD | L1 Roughness | L1 Hydration | bulk out |\n",
- "| 1 | Layer 2 | L2 Thickness | L2 SLD | L2 Roughness | L2 Hydration | bulk out |\n",
- "| 2 | Layer 3 | L3 Thickness | L3 SLD | L3 Roughness | L3 Hydration | bulk out |\n",
- "+-------+---------+--------------+--------+--------------+--------------+--------------+\n",
- "\n",
- "\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"print(problem)"
]
@@ -243,7 +121,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -260,7 +138,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -287,32 +165,9 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "Elapsed time is 0.004 seconds\n",
- "\n",
- "Finished RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n"
- ]
- },
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"controls = RAT.Controls()\n",
"problem, results = RAT.run(problem, controls)\n",
diff --git a/RATapi/examples/languages/setup_problem.py b/RATapi/examples/languages/setup_problem.py
index 2ab6f4fd..c6808119 100644
--- a/RATapi/examples/languages/setup_problem.py
+++ b/RATapi/examples/languages/setup_problem.py
@@ -38,7 +38,7 @@ def make_example_problem():
# and H2O. Load these datafiles in and put them in the data block
# Read in the datafiles
- data_path = pathlib.Path("../data")
+ data_path = pathlib.Path(__file__).parents[1] / "data"
D2O_data = np.loadtxt(data_path / "c_PLP0016596.dat", delimiter=",")
SMW_data = np.loadtxt(data_path / "c_PLP0016601.dat", delimiter=",")
H2O_data = np.loadtxt(data_path / "c_PLP0016607.dat", delimiter=",")
diff --git a/RATapi/examples/non_polarised/DSPC_custom_xy.ipynb b/RATapi/examples/non_polarised/DSPC_custom_xy.ipynb
index c792fb13..ae57d6e2 100644
--- a/RATapi/examples/non_polarised/DSPC_custom_xy.ipynb
+++ b/RATapi/examples/non_polarised/DSPC_custom_xy.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"id": "956a341a-2a40-466c-b5c4-f8ea334ee81c",
"metadata": {},
"outputs": [],
@@ -47,7 +47,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"id": "d53c3ea9-b06f-4bf1-b7cc-da2264ca7322",
"metadata": {},
"outputs": [],
@@ -65,7 +65,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"id": "4ba58003-096e-45cb-b384-f82d66259fed",
"metadata": {},
"outputs": [],
@@ -94,7 +94,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"id": "d0ef585b-4893-440b-9e63-6dcc8102d4c6",
"metadata": {},
"outputs": [],
@@ -118,7 +118,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"id": "372cf5bc-5ec5-4e96-8ade-05a8b0baa3a2",
"metadata": {},
"outputs": [],
@@ -145,7 +145,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"id": "60a4b771-7967-4b46-bd3c-1c7cb4eaa24b",
"metadata": {},
"outputs": [],
@@ -164,7 +164,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"id": "57303283-9319-4b1c-817b-04d6441a2992",
"metadata": {},
"outputs": [],
@@ -198,7 +198,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"id": "6815648e-ad4a-4193-ba39-83f5f15781b1",
"metadata": {},
"outputs": [],
@@ -249,37 +249,10 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"id": "821571d9-3593-4ac6-a5db-4d83998ff4db",
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "\n",
- "Running Differential Evolution\n",
- "\n",
- "Final chi squared is 8.39155\n",
- "Elapsed time is 108.162 seconds\n",
- "\n",
- "Finished RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n"
- ]
- },
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"controls = RAT.Controls(procedure=\"de\", parallel=\"contrasts\", display=\"final\")\n",
"problem, results = RAT.run(problem, controls)\n",
diff --git a/RATapi/examples/non_polarised/DSPC_standard_layers.ipynb b/RATapi/examples/non_polarised/DSPC_standard_layers.ipynb
index 34a81e93..3269efe1 100644
--- a/RATapi/examples/non_polarised/DSPC_standard_layers.ipynb
+++ b/RATapi/examples/non_polarised/DSPC_standard_layers.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"id": "1ca14405-4a7c-4588-93cd-46534c374a36",
"metadata": {},
"outputs": [],
@@ -47,12 +47,12 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"id": "24510c3b-eb41-4981-ac34-9503f742a8dc",
"metadata": {},
"outputs": [],
"source": [
- "problem = RAT.Project(name=\"original_dspc_bilayer\", calculation=\"non polarised\", model=\"standard layers\", geometry=\"substrate/liquid\", absorption=False)"
+ "problem = RAT.Project(name=\"original_dspc_bilayer\", calculation=\"normal\", model=\"standard layers\", geometry=\"substrate/liquid\", absorption=False)"
]
},
{
@@ -65,7 +65,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"id": "f75a8713-0e9c-4972-a803-fae5b5028056",
"metadata": {},
"outputs": [],
@@ -113,7 +113,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"id": "f9fb80fe-41a3-4062-b84d-1e4ed524d02b",
"metadata": {},
"outputs": [],
@@ -146,7 +146,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"id": "b197f3ea-c6ef-4831-9500-9ff0cb5011f3",
"metadata": {},
"outputs": [],
@@ -169,7 +169,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"id": "92a26ca2-b1ee-41c8-89ce-8b72c0892438",
"metadata": {},
"outputs": [],
@@ -198,7 +198,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"id": "73681532-2688-4bfd-8153-1ab763f5687a",
"metadata": {},
"outputs": [],
@@ -222,7 +222,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"id": "e5475631-2aa2-4419-9227-aa41cd94b4ed",
"metadata": {},
"outputs": [],
@@ -264,168 +264,10 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"id": "e0409648-05f4-448b-93d6-5c4382e0dad6",
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Name: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "original_dspc_bilayer\n",
- "\n",
- "Calculation: ---------------------------------------------------------------------------------------\n",
- "\n",
- "non polarised\n",
- "\n",
- "Model: ---------------------------------------------------------------------------------------------\n",
- "\n",
- "standard layers\n",
- "\n",
- "Geometry: ------------------------------------------------------------------------------------------\n",
- "\n",
- "substrate/liquid\n",
- "\n",
- "Parameters: ----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+-------------------------+----------+-----------+----------+-------+------------+------+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+-------------------------+----------+-----------+----------+-------+------------+------+-------+\n",
- "| 0 | Substrate Roughness | 1.0 | 3.0 | 10.0 | True | uniform | 0.0 | inf |\n",
- "| 1 | Oxide Thickness | 5.0 | 19.54 | 60.0 | True | uniform | 0.0 | inf |\n",
- "| 2 | Oxide SLD | 3.39e-06 | 3.39e-06 | 3.41e-06 | False | uniform | 0.0 | inf |\n",
- "| 3 | Oxide Hydration | 0.0 | 23.61 | 60.0 | True | uniform | 0.0 | inf |\n",
- "| 4 | SAM Tails Thickness | 15.0 | 22.66 | 35.0 | True | uniform | 0.0 | inf |\n",
- "| 5 | SAM Tails SLD | -5e-07 | -4.01e-07 | -3e-07 | False | uniform | 0.0 | inf |\n",
- "| 6 | SAM Tails Hydration | 1.0 | 5.252 | 50.0 | True | uniform | 0.0 | inf |\n",
- "| 7 | SAM Roughness | 1.0 | 5.64 | 15.0 | True | uniform | 0.0 | inf |\n",
- "| 8 | SAM Heads Thickness | 5.0 | 8.56 | 17.0 | True | gaussian | 10.0 | 2.0 |\n",
- "| 9 | SAM Heads SLD | 1e-07 | 1.75e-06 | 2e-06 | False | uniform | 0.0 | inf |\n",
- "| 10 | SAM Heads Hydration | 10.0 | 45.45 | 50.0 | True | gaussian | 30.0 | 3.0 |\n",
- "| 11 | CW Thickness | 10.0 | 17.12 | 28.0 | True | uniform | 0.0 | inf |\n",
- "| 12 | CW SLD | 0.0 | 0.0 | 1e-09 | False | uniform | 0.0 | inf |\n",
- "| 13 | CW Hydration | 99.9 | 100.0 | 100.0 | False | uniform | 0.0 | inf |\n",
- "| 14 | Bilayer Heads Thickness | 7.0 | 10.7 | 17.0 | True | gaussian | 10.0 | 2.0 |\n",
- "| 15 | Bilayer Heads SLD | 5e-07 | 1.47e-06 | 1.5e-06 | False | uniform | 0.0 | inf |\n",
- "| 16 | Bilayer Heads Hydration | 10.0 | 36.15 | 50.0 | True | gaussian | 30.0 | 3.0 |\n",
- "| 17 | Bilayer Roughness | 2.0 | 6.014 | 15.0 | True | uniform | 0.0 | inf |\n",
- "| 18 | Bilayer Tails Thickness | 14.0 | 17.82 | 22.0 | True | uniform | 0.0 | inf |\n",
- "| 19 | Bilayer Tails SLD | -5e-07 | -4.61e-07 | 0.0 | False | uniform | 0.0 | inf |\n",
- "| 20 | Bilayer Tails Hydration | 10.0 | 17.64 | 50.0 | True | uniform | 0.0 | inf |\n",
- "+-------+-------------------------+----------+-----------+----------+-------+------------+------+-------+\n",
- "\n",
- "Bulk In: -------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------+-------+-----------+---------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------+-------+-----------+---------+-------+------------+-----+-------+\n",
- "| 0 | Silicon | 2e-06 | 2.073e-06 | 2.1e-06 | False | uniform | 0.0 | inf |\n",
- "+-------+---------+-------+-----------+---------+-------+------------+-----+-------+\n",
- "\n",
- "Bulk Out: ------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------+---------+----------+----------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+------+---------+----------+----------+------+------------+-----+-------+\n",
- "| 0 | D2O | 5.5e-06 | 5.98e-06 | 6.4e-06 | True | uniform | 0.0 | inf |\n",
- "| 1 | SMW | 1e-06 | 2.21e-06 | 4.99e-06 | True | uniform | 0.0 | inf |\n",
- "+-------+------+---------+----------+----------+------+------------+-----+-------+\n",
- "\n",
- "Scalefactors: --------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+------+-------+-----+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+---------------+------+-------+-----+-------+------------+-----+-------+\n",
- "| 0 | Scalefactor 1 | 0.05 | 0.1 | 0.2 | False | uniform | 0.0 | inf |\n",
- "| 1 | Scalefactor 2 | 0.05 | 0.15 | 0.2 | False | uniform | 0.0 | inf |\n",
- "+-------+---------------+------+-------+-----+-------+------------+-----+-------+\n",
- "\n",
- "Background Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------------+-------+----------+----------+------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------------+-------+----------+----------+------+------------+-----+-------+\n",
- "| 0 | Background parameter D2O | 5e-10 | 2.23e-06 | 7e-06 | True | uniform | 0.0 | inf |\n",
- "| 1 | Background parameter SMW | 1e-10 | 3.38e-06 | 4.99e-06 | True | uniform | 0.0 | inf |\n",
- "+-------+--------------------------+-------+----------+----------+------+------------+-----+-------+\n",
- "\n",
- "Backgrounds: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+----------------+----------+--------------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+----------------+----------+--------------------------+---------+---------+---------+---------+\n",
- "| 0 | D2O Background | constant | Background parameter D2O | | | | |\n",
- "| 1 | SMW Background | constant | Background parameter SMW | | | | |\n",
- "+-------+----------------+----------+--------------------------+---------+---------+---------+---------+\n",
- "\n",
- "Resolution Parameters: -----------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| index | name | min | value | max | fit | prior type | mu | sigma |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "| 0 | Resolution Param 1 | 0.01 | 0.03 | 0.05 | False | uniform | 0.0 | inf |\n",
- "+-------+--------------------+------+-------+------+-------+------------+-----+-------+\n",
- "\n",
- "Resolutions: ---------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| index | name | type | value 1 | value 2 | value 3 | value 4 | value 5 |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "| 0 | Resolution 1 | constant | Resolution Param 1 | | | | |\n",
- "+-------+--------------+----------+--------------------+---------+---------+---------+---------+\n",
- "\n",
- "Data: ----------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+--------------+----------------------+---------------------+---------------------+\n",
- "| index | name | data | data range | simulation range |\n",
- "+-------+--------------+----------------------+---------------------+---------------------+\n",
- "| 0 | Simulation | [] | [] | [0.005, 0.7] |\n",
- "| 1 | dspc_bil_D2O | Data array: [82 x 3] | [0.011403, 0.59342] | [0.011403, 0.59342] |\n",
- "| 2 | dspc_bil_smw | Data array: [82 x 3] | [0.011403, 0.59342] | [0.011403, 0.59342] |\n",
- "+-------+--------------+----------------------+---------------------+---------------------+\n",
- "\n",
- "Layers: --------------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+---------------+-------------------------+-------------------+---------------------+-------------------------+--------------+\n",
- "| index | name | thickness | SLD | roughness | hydration | hydrate with |\n",
- "+-------+---------------+-------------------------+-------------------+---------------------+-------------------------+--------------+\n",
- "| 0 | Oxide | Oxide Thickness | Oxide SLD | Substrate Roughness | Oxide Hydration | bulk out |\n",
- "| 1 | SAM Tails | SAM Tails Thickness | SAM Tails SLD | SAM Roughness | SAM Tails Hydration | bulk out |\n",
- "| 2 | SAM Heads | SAM Heads Thickness | SAM Heads SLD | SAM Roughness | SAM Heads Hydration | bulk out |\n",
- "| 3 | Central Water | CW Thickness | CW SLD | Bilayer Roughness | CW Hydration | bulk out |\n",
- "| 4 | Bilayer Heads | Bilayer Heads Thickness | Bilayer Heads SLD | Bilayer Roughness | Bilayer Heads Hydration | bulk out |\n",
- "| 5 | Bilayer Tails | Bilayer Tails Thickness | Bilayer Tails SLD | Bilayer Roughness | Bilayer Tails Hydration | bulk out |\n",
- "+-------+---------------+-------------------------+-------------------+---------------------+-------------------------+--------------+\n",
- "\n",
- "Contrasts: -----------------------------------------------------------------------------------------\n",
- "\n",
- "+-------+------+--------------+----------------+-------------------+---------+----------+---------------+--------------+----------+---------------+\n",
- "| index | name | data | background | background action | bulk in | bulk out | scalefactor | resolution | resample | model |\n",
- "+-------+------+--------------+----------------+-------------------+---------+----------+---------------+--------------+----------+---------------+\n",
- "| 0 | D2O | dspc_bil_D2O | D2O Background | add | Silicon | D2O | Scalefactor 1 | Resolution 1 | False | Oxide |\n",
- "| | | | | | | | | | | SAM Tails |\n",
- "| | | | | | | | | | | SAM Heads |\n",
- "| | | | | | | | | | | Central Water |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "| 1 | SMW | dspc_bil_smw | SMW Background | add | Silicon | SMW | Scalefactor 2 | Resolution 1 | False | Oxide |\n",
- "| | | | | | | | | | | SAM Tails |\n",
- "| | | | | | | | | | | SAM Heads |\n",
- "| | | | | | | | | | | Central Water |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Tails |\n",
- "| | | | | | | | | | | Bilayer Heads |\n",
- "+-------+------+--------------+----------------+-------------------+---------+----------+---------------+--------------+----------+---------------+\n",
- "\n",
- "\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"print(problem)"
]
@@ -442,27 +284,10 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": null,
"id": "c9ec7e39-48a8-4651-b74c-19d5800c67d7",
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "+------------------+-----------+\n",
- "| Property | Value |\n",
- "+------------------+-----------+\n",
- "| procedure | calculate |\n",
- "| parallel | single |\n",
- "| calcSldDuringFit | False |\n",
- "| resampleMinAngle | 0.9 |\n",
- "| resampleNPoints | 50 |\n",
- "| display | iter |\n",
- "+------------------+-----------+\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"controls = RAT.Controls(display='iter')\n",
"print(controls)"
@@ -478,33 +303,10 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"id": "e59bf938-804c-458c-891c-c3e56ed32820",
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n",
- "Elapsed time is 0.027 seconds\n",
- "\n",
- "Finished RAT ───────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
- "\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHLCAYAAAAk8PeNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC2x0lEQVR4nOyde3xT9f3/n7m0Se/QlhYKlPv9fhdvgKCIyrwypjgR1KkrDq1uP/nOoW5T5qYMnZ14GeJd5o05L6hDLqLcodzvlGvpjV7Sa+6/P06StrQpaZvkpO37+XjkkeRzTs55J9Dkdd5XjdPpdCIIgiAIgtAG0aptgCAIgiAIglqIEBIEQRAEoc0iQkgQBEEQhDaLCCFBEARBENosIoQEQRAEQWiziBASBEEQBKHNIkJIEARBEIQ2iwghQRAEQRDaLCKEBEEQBEFos4gQEgRBEAShzSJCSBAEIQRYv34906dPJyUlBY1Gw8qVKwN+zrNnz3LnnXeSkJBAREQEQ4YMYdu2bQE/ryCEEiKEBEEQQoDy8nKGDRtGRkZGUM5XVFTEZZddRlhYGF9//TX79+/nhRdeoH379kE5vyCEChoZuioIghBaaDQaPvvsM2666SbPmtls5ve//z0ffPABxcXFDB48mOeee46JEyc26RyPP/44P/74Iz/88IN/jBaEFop4hARBEFoA8+bNY+PGjXz44Yfs3r2bGTNmcO2113LkyJEmHe/zzz9n9OjRzJgxg6SkJEaMGMHrr7/uZ6sFIfQRj5AgCEKIcaFH6NSpU/Ts2ZNTp06RkpLi2W/KlCmMHTuWZ599ttHnMBqNAKSnpzNjxgy2bt3K/PnzWbp0KbNnz/bL+xCEloBebQMEQRCEhtmzZw92u52+ffvWWjebzSQkJABw8OBBBgwY0OBx/t//+3/85S9/AcDhcDB69GiPiBoxYgR79+4VISS0OUQICYIghDhlZWXodDq2b9+OTqertS06OhqAnj17cuDAgQaP4xZNAJ06dWLgwIG1tg8YMIBPPvnET1YLQstAhJAgCEKIM2LECOx2O3l5eVxxxRX17hMeHk7//v19PuZll13GoUOHaq0dPnyYbt26NctWQWhpiBASBEEIAcrKyjh69KjneVZWFpmZmcTHx9O3b19mzZrFXXfdxQsvvMCIESPIz89n9erVDB06lOuvv77R53vkkUe49NJLefbZZ/n5z3/Oli1beO2113jttdf8+bYEIeSRZGlBEIQQYO3atUyaNKnO+uzZs1m+fDlWq5U///nPvP3225w9e5bExEQuueQSnn76aYYMGdKkc37xxRcsWLCAI0eO0KNHD9LT07nvvvua+1YEoUUhQkgQBEEQhDaL9BESBEEQBKHNIkJIEARBEIQ2iyRLXwSHw0F2djYxMTFoNBq1zRGEVoPT6aS0tJSUlBS02rZ5TSbfL4IQOHz9jhEhdBGys7Pp2rWr2mYIQqvl9OnTdOnSRW0zVEG+XwQh8FzsO0aE0EWIiYkBlA8yNjZWZWsEofVgMpno2rWr52+sLSLfL4IQOHz9jhEhdBHc7urY2Fj5ohKEANCWQ0Ly/SIIgedi3zFtMzAvCIIgCIKACCFBEARBENowIoQEQRAEQWizSI6QIHjBbrdjtVrVNqNFEx4e3mZL4wVBaBmIEPJCRkYGGRkZ2O12tU0RgozT6SQnJ4fi4mK1TWnxaLVaevToQXh4uNqmCIIg1IvMGrsIJpOJuLg4SkpKpKqjjXDu3DmKi4tJSkoiMjKyTVc1NQd3s8CwsDBSU1PrfI7ytyWfgSAEEl//vsQjJAg1sNvtHhGUkJCgtjktng4dOpCdnY3NZiMsLExtcwRBEOogwXtBqIE7JygyMlJlS1oH7pCYhJgFQQhVRAgJQj1IOMw/tIXP8ezZs9x5550kJCQQERHBkCFD2LZtm9pmCYLgIxIaEwRBaCJFRUVcdtllTJo0ia+//poOHTpw5MgR2rdvr7ZpgiD4SJvwCH3xxRf069ePPn368MYbb6htjiAIrYTnnnuOrl278uabbzJ27Fh69OjBNddcQ69evdQ2TRAEH2n1Qshms5Gens7333/Pzp07+dvf/sb58+fVNksQ/M7dd9+NRqNBo9EQFhZGcnIyV199NcuWLcPhcABQWFjIQw89RL9+/YiIiCA1NZXf/OY3lJSU1DneW2+9xZgxY4iMjCQmJoYJEybwxRdfBPtthTSff/45o0ePZsaMGSQlJTFixAhef/11tc0SBKERtHohtGXLFgYNGkTnzp2Jjo5m2rRpfPvttwE736nzFXy8/QynzlcE7ByC4I1rr72Wc+fOceLECb7++msmTZrE/PnzueGGG7DZbGRnZ5Odnc3zzz/P3r17Wb58OatWreKee+6pdZzHHnuM+++/n5kzZ7J79262bNnC5Zdfzo033sjLL7+s0rsLPY4fP84rr7xCnz59+Oabb3jwwQf5zW9+w1tvvVXv/mazGZPJVOsmCIK6hHyO0Pr16/nb3/7G9u3bOXfuHJ999hk33XRTrX0yMjL429/+Rk5ODsOGDeMf//gHY8eOBSA7O5vOnTt79u3cuTNnz54NiK2nzlcwdcl6Kq12DHot6Vf3ZdrgTgBsOVHI2O7xpCZINZIQOAwGAx07dgSU/+sjR47kkksuYfLkySxfvpx7772XTz75xLN/r169eOaZZ7jzzjux2Wzo9Xo2bdrECy+8wEsvvcRDDz3k2feZZ56hqqqK9PR0brzxRrp27Rr09xdqOBwORo8ezbPPPgvAiBEj2Lt3L0uXLmX27Nl19l+0aBFPP/10sM0UWjlVVjuf78pm/eF8juWXU1Ruodxsw+F04gQcTicOJ9CKugZeO7gjL90+wi/HCnkhVF5ezrBhw5g7dy633HJLne0rVqwgPT2dpUuXMm7cOJYsWcLUqVM5dOgQSUlJQbHxH6uPcCSvjH3ZJVRalTJhs83Boq8P8pevD6IBHEC4TsN3j0ygW2JUUOwSBICrrrqKYcOG8emnn3LvvffW2e5uNqbXK18HH3zwAdHR0dx///119n300UdZvHgxn3zyCQ8//HCgTQ95OnXqxMCBA2utDRgwoJbYrMmCBQtIT0/3PDeZTCIohWZxKKeU+97expmiCoZ2acfI1HYkRIUTbdSjdYXKtRrQgCt0rrbF/iE13n9OhZAXQtOmTWPatGlety9evJj77ruPOXPmALB06VK+/PJLli1bxuOPP05KSkotD9DZs2c93qL6MJvNmM1mz3NfXNf/yczmaH5ZvdtqinCL3clN//yR5XPGMqxru4seVwgdpv9jA/ml5ovv6Ec6xBj470OX++VY/fv3Z/fu3XXWCwoK+NOf/sSvfvUrz9rhw4fp1atXvWMxUlJSiI2N5fDhw36xq6Vz2WWXcejQoVprhw8fplu3bvXubzAYMBgMwTBNaAPkmqq481+bSYgK57v0CfTqEK22SS2SkBdCDWGxWNi+fTsLFizwrGm1WqZMmcLGjRsBGDt2LHv37uXs2bPExcXx9ddf84c//MHrMZviuq6w2Hzet6jCykurj/Cvu8c06hyCuuSXmskxValtRpNxOp31jri4/vrrGThwIE899VSd/YWL88gjj3DppZfy7LPP8vOf/5wtW7bw2muv8dprr6ltmtAGePq/+3A64Z17xtEhRgR2U2nRQqigoAC73U5ycnKt9eTkZA4ePAiAXq/nhRdeYNKkSTgcDn73u981ODqhKa7rv942jHve2orZ5sCg1/LKrFEA7M0uYXBKHDaHg4+2n+G7/bkArD6Yx6nzFZIv1IJQ40vGn+c8cOAAPXr08DwvLS3l2muvJSYmhs8++6zW+Iu+ffuyYcMGLBZLHa9QdnY2JpOJvn37+s22lsyYMWP47LPPWLBgAX/84x/p0aMHS5YsYdasWWqbJrRyDuaY+GpPDs/PGCYiqJm0aCHkKz/72c/42c9+5tO+btd1Y6bPX94nke8emVAnIfqqAdU5SqYqm0cIgZI8LUKo5eCvEJUafP/99+zZs4dHHnkEUMT91KlTMRgMfP755xiNxlr7/+IXv+Cll17i1VdfrZUsDfD8888TFhbGrbfeGjT7Q50bbriBG264QW0zhDbGWz+doGOskRuHp6htSounRQuhxMREdDodubm5tdZzc3M9lTNNJS0tjbS0NM/02ouRmhDZoLAZ2z0erQYlcx/onxzTLPsEoT7MZjM5OTnY7XZyc3NZtWoVixYt4oYbbuCuu+7CZDJxzTXXUFFRwbvvvlurhLtDhw7odDrGjx/P/Pnz+e1vf4vFYuGmm27CarXy7rvv8uKLL7JkyRJJ8BUEFbHaHXy1J4c7L0klTNfqu+AEnBYthMLDwxk1ahSrV6/2lNQ7HA5Wr17NvHnzmnXsxniEfCE1IZLrh3Tiv7vPAeBoTXWMQsiwatUqOnXqhF6vp3379gwbNoyXXnqJ2bNno9Vq2bFjB5s3bwagd+/etV6blZVF9+7dAViyZAlDhw7ln//8J0888QQ6nY6RI0eycuVKpk+fHuy3JQhCDTYfL6Sk0uppzyI0j5AXQmVlZRw9etTzPCsri8zMTOLj40lNTSU9PZ3Zs2czevRoxo4dy5IlSygvL/dUkTWVxnqEfGFASqxHCJ08r5Q6CoK/WL58OcuXL29wn4kTJ/qcCD137lzmzp3rB8sEQfAnPxzJJynGwKCUWLVNaRWEvBDatm0bkyZN8jx3JzLPnj2b5cuXM3PmTPLz81m4cCE5OTkMHz6cVatW1Umgbiz+9ggBdIuv7h90qlA6TwuCIAiNZ3NWIeN6JtSpBBWaRsgLIV+uYOfNm9fsUNiFBMIj1K1GDpGM4BAEQRAaS4XFxt6zJdw2qovaprQaJMsqiHSt0QnzZGG5ipYIgiAILZH92SZsDicjU9urbUqrQYSQFzIyMhg4cCBjxviv8WFcRBjtIpV+LacLK/12XEEQBKFtsC/bRLhOS+8k6SLtL0QIeSEtLY39+/ezdetWvx63m8srlF1Sidnmv/wjQRAEofWzP9tEn+RowvXy8+0v5JMMMu7wmNMJZ4rEKyQIgiD4zv5zJgZ0kmoxfyJCyAuBCI3BBQnTUjkmCIIg+IjT6eRYfhl9kyUs5k9ECHkhcKGxGiX0UjkmCIIg+EiuyUyFxU7PRBFC/kSEUJCpVTkmQkgQBEHwkeP5ZQD07BB1kT2FxiBCKMhIaEwQBEFoCscLytFrNbUuqIXmI0LIC4HKEeoYayTcNSRvz9kSCY8JfiM/P58HH3yQ1NRUDAYDHTt2ZOrUqfz4448AdO/eHY1Gw4cffljntYMGDUKj0XhGdPziF7/g2muvrbXPqlWr0Gg0PPXUU7XWn3rqKVJTUwPyngRBqCaroJyu8ZEyaNXPyKfphUDlCGm1GjrGGQHINVVxzd/XiRgS/MKtt97Kzp07eeuttzh8+DCff/45EydO5Pz58559unbtyptvvlnrdZs2bSInJ4eoqGp3+6RJk/jxxx+x2WyetTVr1tC1a1fWrl1b6/Vr1qypNQZHEEKBKqudp/+7j093nFHbFL9xpqiCLu0j1Daj1SFCSAWiDDrP4yqbgy0nClW0RmgNFBcX88MPP/Dcc88xadIkunXrxtixY1mwYAE/+9nPPPvNmjWLdevWcfr0ac/asmXLmDVrFnp99cSdSZMmUVZWxrZt2zxra9eu5fHHH2fz5s1UVVUBUFVVxebNm0UICSHHy98f5c0fT5D+711kF7eOViVniyvp0l7CYv5GhJAKjKrRGj1Mq2Fs93gVrRFaA9HR0URHR7Ny5UrMZrPX/ZKTk5k6dSpvvfUWABUVFaxYsaLOlPm+ffuSkpLCmjVrACgtLWXHjh3MmDGD7t27s3HjRgB++uknzGazCCEh5Fi1L4frhnTEoNfy1Z5zapvjF84UVYpHKACE/NDV1silvRN5d/MpAGZd0o3UBFH4Ic+rE6AsL7jnjE6C+9f5tKter2f58uXcd999LF26lJEjRzJhwgR+8YtfMHTo0Fr7zp07l0cffZTf//73fPzxx/Tq1Yvhw4fXOeakSZNYu3YtCxYs4IcffqBv37506NCBK6+8krVr13q29+jRg27duvnjHQuCXzh5vpyjeWX8dmo/CsstbDpeyL1X9FTbrGZRZrZRXGGlczsRQv5GPEJeCFSyNMCglOquoNJduoVQlgel2cG9NVJ43XrrrWRnZ/P5559z7bXXsnbtWkaOHOlJgHZz/fXXU1ZWxvr161m2bFkdb5CbiRMn8uOPP2K1Wlm7di0TJ04EYMKECZ48IbcgEoRQYteZEgDG9Yjnkp4JbD1RiMPhVNmq5nHW9VshHiH/Ix4hL6SlpZGWlobJZCIuLs6vx+7aPpIYg55Ss4192SV+PbYQIKKTWsQ5jUYjV199NVdffTV/+MMfuPfee3nyySe5++67Pfvo9Xp++ctf8uSTT7J582Y+++yzeo81adIkysvL2bp1K2vWrOG3v/0toAihuXPnUlhYyObNm7n//vub9PYEIVAcyjGRHGugXWQ4w7q2o6TSytniyhZddu7Oc0oRj5DfESGkAlqthgEpsWzJKuRcSRWF5Rbio8LVNktoCB9DVKHGwIEDWblyZZ31uXPn8vzzzzNz5kzat29f94VAr1696Nq1K59//jmZmZlMmDABgM6dO9O5c2deeOEFLBaLeISEkONQTin9Oiqe994dlC7MR/PLWrQQyi9Vcv8Sow0qW9L6kNCYStQMj4lXSGgu58+f56qrruLdd99l9+7dZGVl8dFHH/HXv/6VG2+8sc7+AwYMoKCgoE4p/YVMmjSJf/7zn/Tu3Zvk5GTP+oQJE/jHP/7hSaoWhFDiUG4p/TvGANC5XQQGvZZjeWUqW9U88kqriI8Kl6nzAUA+UZUYlFIdbtuXbVLREqE1EB0dzbhx4/j73//OlVdeyeDBg/nDH/7Afffdx8svv1zvaxISEoiIaNjNPmnSJEpLSz35QW4mTJhAaWmpeIOEkMNic3C2qJIeiUpfLK1WQ88O0RzLL1fZsuaRX2qmg3iDAoKExlSitkdIhJDQPAwGA4sWLWLRokVe9zlx4kSDxyguLq6zdvfdd9fKL3Ize/ZsZs+e3UgrBSHw5JRU4XDWTiru1SGKY/kt2yOUX2amQ4wIoUAgHiGV6J0U7XFxSmhMEATBP5wpVjr11ywz79I+ssU3VcwzmUkSIRQQRAh5IZDl8wBhOq0nhp2VX87Bc+IVEgRBaC7uliQ1q6s6tzOSU1KFvQWX0ItHKHCIEPJCoGaN1aSbq4LBCfzs5R9l5pggCEIzOVtUSYcYA8aw6lFGKe0isDmcFJR577oeyjidTvJMIoQChQghFQmrkf1vscvMMUEQhOZytriyTvdlt3fobAsNj5Vb7FRa7SKEAoQIIRWZNriT57EGZOZYCOF0tlwXeighn6MQbHJNVXSMNdZacwuhlpon5O4hlBRjvMieQlMQIaQik/sn0S4yDICIcB2d2sl/crUJC1P+PSoqJEzpDywWCwA6ne4iewqCf8gvrRtCijXqiTboW6wQyjNVAYhHKEBI+byKaLUaJvTtwH8ys6mw2Nl5qpixPcQrpCY6nY527dqRl6fM+YqMjESj0ahsVcvE4XCQn59PZGQker181QjBoaCsbnWVRqMhKdbg8ay0NPJduU1JsSKEAkGb+Ha6+eabWbt2LZMnT+bjjz9W25xaXNlHEUIA6w/nixAKATp27AjgEUNC09FqtaSmpoqYFIKCze7gfLmlXs9Jh2gDeS1VCJWaMei1xBjaxE920GkTn+r8+fOZO3cub731ltqm1OGKvomex+uP5PPY1H4qWiOAcvXYqVMnkpKSsFqtapvTogkPD0erlQi8EBzOl1twOusPIXWIabkeoTxXuE8uKAJDmxBCEydOZO3atWqbUS9JMUYGdIrlwDkTe86WcL7MTIK0UQ8JdDqd5LYIQguioaTiDjEGDuWUBtskv5BfKs0UA4nql2rr169n+vTppKSkoNFo6p2UnZGRQffu3TEajYwbN44tW7YE39AAcqXLK+R0wgvfHZZ+QoIgCE3ALYS8eoRaaB+hgjKzTJ0PIKoLofLycoYNG0ZGRka921esWEF6ejpPPvkkO3bsYNiwYUydOrVW/sbw4cMZPHhwnVt2dnaw3kazmNCng+fx+5tPMXXJehFDgiAIjcQtdBKiw+tsS4oxUlxhxWyzB9usZlNUbqF9ZN33JPgH1UNj06ZNY9q0aV63L168mPvuu485c+YAsHTpUr788kuWLVvG448/DkBmZqbf7DGbzZjN1VcNJlPgR1+M6t6eMJ0Wq90BQKXVzpYThaQmRAb83IIgCK2FonILsUY9Ybq61/huL1FBmaVOw8VQp6jCSruoMLXNaLWo7hFqCIvFwvbt25kyZYpnTavVMmXKFDZu3BiQcy5atIi4uDjPrWvXrgE5T00Meh2X9KyuFgvXaaW5oiAIQiMprLAQH1W/5yTR5SUqaIEJ00UV4hEKJCEthAoKCrDb7SQnJ9daT05OJicnx+fjTJkyhRkzZvDVV1/RpUuXBkXUggULKCkp8dxOnz7dZPsbw22jungeXz+0k3iDBEEQGklRuYX2XoSQW0gUVViCaVKzsdkdlFbZaB8pHqFAoXpoLBj873//83lfg8GAwWAgIyODjIwM7PbgxJMnD0gmXK/FYnOw4WgBdocTnVZKJQVBEHylsNxKvBfPiVsIFVe0rJYYxZWKve3EIxQwQtojlJiYiE6nIzc3t9Z6bm6up+ldoAjG9PmaRBv0TOirJE3nl5rZfrIoKOcVBEFoLRRVePcIRYTrMIZpKSxvWR6hYpcHS0JjgSOkhVB4eDijRo1i9erVnjWHw8Hq1asZP358QM+dkZHBwIEDGTNmTEDPU5PrhlSLu5dWH5HKMUEQhEZQVO49RwgUMVHcwkJjRS4PloTGAofqQqisrIzMzExP5VdWVhaZmZmcOnUKgPT0dF5//XXeeustDhw4wIMPPkh5ebmniixQBNsjBEp4LEynhMM2HC3g6sVrRQwJgiD4SOFFkorbRYZ7hEVLwR3Kk9BY4FBdCG3bto0RI0YwYsQIQBE+I0aMYOHChQDMnDmT559/noULFzJ8+HAyMzNZtWpVnQRqf6OGRyjWGEafpBjPc7PdyZYThUE7vyAIjeOpp55Co9HUuvXv319ts9okNruDkkor8Q2UmcdHhVHY4jxCir3txCMUMFRPlp44cSJOp7PBfebNm8e8efOCZJFCWloaaWlpmEwm4uLignbeW0Z0Zv85pXeRTqORMnpBCHEGDRpUqyBDr1f9a7VNYqqy4XQ27Dlp1wJDY8UVFmIM9fdGEvyDfLIhxh2XpBIRpsy3MoZpSYqVtuqCEMro9Xo6duzouSUmJl78RYLfKXFVV8VFePectI8Mo6i8ZYXGpJli4BEh5AU1QmMAkeF6rh/aCYByi51v9+de5BWCIKjJkSNHSElJoWfPnsyaNcuT3ygEF5NLCMUaGwiNtVCPkFSMBRYRQl5QI1naza0jq5srfrL9TNDPLwiCb4wbN47ly5ezatUqXnnlFbKysrjiiisoLa1/yrnZbMZkMtW6Cf7BVOUSQhHeQ5PtIsNbXo5QuVUSpQOMCKEQZFyPeM8snPWH89khPYUEISSZNm0aM2bMYOjQoUydOpWvvvqK4uJi/v3vf9e7vxojfNoKpkobALENhcaiwqiyOqiytpzBq8p4DQmNBRIRQl5QKzQGoNVqmDIgCQAn8PNXN0oZvSC0ANq1a0ffvn05evRovdvVGuHTFjBVWdFoIDrcu0eoJY7ZKK6wSmgswIgQ8oKaoTGATjWmI9scTjZnnVfFDkEQfKesrIxjx47RqVOnercbDAZiY2Nr3QT/YKq0EmPQo21gNJFbULSk7tJFFRYpnQ8wIoRClOsGd6Lmn3O4lE4KQsjx2GOPsW7dOk6cOMFPP/3EzTffjE6n4/bbb1fbtDaHqcraYFgMWt68MafTKR6hICC/riFKakIkC28Y6Hn+3QGpHhOEUOPMmTPcfvvt9OvXj5///OckJCSwadMmOnTooLZpbQ5Tpa3BijFQcoSg5YTGKix2LHaHeIQCjHT+8kKwp8/Xxx2XpPLymqOcL7ewam8Ob/6YxeT+yaQmRKpmkyAI1Xz44YdqmyC4UDxCDf+kRRv06LUailpIaKy6q7R4hAKJeIS8oHaOEIBBr2PGaKWqxOZw8vR/9zN1yXpJnBYEQbgAU6X1oh4hjUbTouaNlVa5KuGM4rMIJCKEQpzbx9Yur6202mX+mCAIwgWYqmwXzRECZd5YSwmNuYVQzEUEntA8RAiFON0SohjTvb3nebhOK/PHBEEQLsAXjxBAu4jwFpMsXepuEikeoYAiQqgF8Ksre3keD+0SJzlCgiAIF+BLjhAonafdAiPUEY9QcBAh5AU1GypeyFX9k+jmEj/bThZxOLf+9v2CIAhtFV+qxkDpPO3uQh3qlJpt6LQajGHyUx1I5NP1QigkS7vRaTXcfWl3z/M/rNwrCdOCIAguLDYHlVa7TzlCscYwz1yyUKe0ykqMUY9G471JpNB8RAi1EG4b1YXIcB0Am7MKuebv60QMCYIg0LhcmtiIMEoqW4oQshEj+UEBR4RQCyHGGMaobtVJ01U2h1SPCYIgoFSMQcMDV93EGvWYWowQshJjkPygQCNCqAWRNrF3refDOsepZIkgCELo4Pbw+JojVG6xY7M7Am1WsymrshEtHqGAI0KoBXFJrwQm9UvyPN8sHiFBEASPh8enqjGXWHJXZIUypVU2KZ0PAiKEWhiPXtPX8/i19cdbxFWNIAhCIHEnP/sUGnOJpZaQMK3kCEloLNCIEPJCKJXP12Rw5ziu6JMIwKnCCp767z5JmhYEoU1jqrSh0UB0uO8eoZZQQm+qshJtEI9QoBEh5IVQKp+/kAcmVDdYfHfTKa5evFbEkCAIbRZTlZUYgx6t9uJl5nEur1FL8AiVmaVqLBiIEGqBXNorgS7tIzzPzXanVJAJgtBmUfrt+BZCqvYIhb4QktBYcBAh1ALRaDQ8WMMrpNHAmBql9YIgCG2JcrPd5xCSuwor1D1CTqdTPEJBQoRQC+WOcan0SYoGwOmEo/llKlskCIKgDmVmG1EGnU/76rQaYgz6kM8RqrDYsTucIoSCgAihFopGo+Gxqf08z5/8fB8nC8pVtEgQBEEdys02ohqRVNwSukuXmd0DV0UIBZpWL4ROnz7NxIkTGThwIEOHDuWjjz5S2yS/cc3AZI9X6ExRJVMWy9gNQRDaHmVmW6Oqq2KM+pAPjbnHhkiOUOBp9UJIr9ezZMkS9u/fz7fffsvDDz9MeXnr8JxoNBou653oeW51ONmUdV5FiwRBEIJPYz1CcRFhIZ8s7R4bIh6hwNPqhVCnTp0YPnw4AB07diQxMZHCwtZTYTXn0u7UHExsqgjtP25BEAR/05hkaVBCY6YQ7yxd5rJP+ggFHtWF0Pr165k+fTopKSloNBpWrlxZZ5+MjAy6d++O0Whk3LhxbNmypUnn2r59O3a7na5duzbT6tChW2IUi2cM9zzPWHuMY3mSOC0IQtuhMcnSoJTQh7pHqNTjEZLQWKBRXQiVl5czbNgwMjIy6t2+YsUK0tPTefLJJ9mxYwfDhg1j6tSp5OXlefYZPnw4gwcPrnPLzs727FNYWMhdd93Fa6+9FvD3FGxuHtmZ0a7y+aIKC1P/LrlCgiC0HcotjU2Wbjk5QuIRCjyqf8LTpk1j2rRpXrcvXryY++67jzlz5gCwdOlSvvzyS5YtW8bjjz8OQGZmZoPnMJvN3HTTTTz++ONceumlF93XbDZ7nptMJh/fibpc3ieRbSeLALA5Yd3hfH45vpvKVgmCIASe8kYmSyseodAOjZVWKe9J50O3bKF5qO4RagiLxcL27duZMmWKZ02r1TJlyhQ2btzo0zGcTid33303V111Fb/85S8vuv+iRYuIi4vz3FpKGO2WEV3Q1UgW2nOmWD1jBEEQgoTZZsdqdzYhRyjEPUKNFHdC0wlpIVRQUIDdbic5ObnWenJyMjk5OT4d48cff2TFihWsXLmS4cOHM3z4cPbs2eN1/wULFlBSUsLzzz9Pv3796N27d7PeQ7BITYjkw19dgt519fDpzrMclyaLgiC0csrNdoDGhcaMeiosdqx2R6DMajbK2BARQsEgpIWQP7j88stxOBxkZmZ6bkOGDPG6v8FgIDY2lkcffZSDBw+yffv2IFrbPMb0iOfXE5XRGzaHk7T3d0qukCAIrZpyc+Orq9wJyKUhXDmmzBkTIRQMQloIJSYmotPpyM3NrbWem5tLx44dA3rujIwMBg4cyJgxYwJ6Hn/zwMRedIg2AHDgnEmaLAqC0Kpxd2BurEcIqkvUQ5HGDJIVmkdIC6Hw8HBGjRrF6tWrPWsOh4PVq1czfvz4gJ47LS2N/fv3s3Xr1oCex99Ehuu5emB1KNFid7DhaIGKFgmCIASOao+Q7+XzLWHwapnZ5rFTCCyqC6GysjJPyAogKyuLzMxMTp06BUB6ejqvv/46b731FgcOHODBBx+kvLzcU0Um1OX+K3tSs87gv7vOildIEIRWSVM8Qu4wmvu1oUhplc3juRICi+pCaNu2bYwYMYIRI0YAivAZMWIECxcuBGDmzJk8//zzLFy4kOHDh5OZmcmqVavqJFD7m5YaGgOlyeI794zzVJFtPF7I1dJbSBCEVkhTkqXdIafQDo3ZJDQWJFSXmxMnTsTpdDa4z7x585g3b16QLFJIS0sjLS0Nk8lEXFxcUM/tDy7vk8hVA5L4br+SX2W2Odh4/DypCZEqWyYIguA/3KGxqPDGDV0FKDWHbmistMpKjJTPBwXVPUKhSkv2CLn53dR+tZ5LOb0gCK2NMrONiDBdoxoPGvRawnSakPcISY5QcBAh5IWWmixdkz7JMfzzjpGefKE3fzzBoZxSVW0SBEHwJ42dPA+g0WiINuhDdvCqxebAbHNIaCxIiBBq5Vw3tBO/mtATUCrI5i7fKkNZBUFoNZRZbI2qGHMTYwwL2WRp95wx6SMUHEQItQEemdKX7q7coLPFlVwjidOCILQSmuIRAqVyrDREy+erJ8+LEAoGIoS80BpyhNwYw3TcNKKz57ndCcs3nlDPIEEQBD9RbrY3TQgZ9SGbI+T2VMUYJDQWDEQIeaE15AjV5JYRXQirkUz4weZTbDtRqKJFgiAIzaesicNJY436kA2NmSQ0FlRECLURUhMi+V/6BPokRQNQabUz49WNHMmV5GlBEFouzQmNhWqytITGgosIIS+0ptCYm26JUfxyfDfPc6cT/u+zPRft4yQIghCqlJubkSwd4kJIyueDgwghL7S20JibiX2TCNdVh8i2nijikRWZkjwtCEKLpMxsa1QzRTfRRn3INlQsq7ISrtdi0Dde4AmNR4RQG0MJkU1k1rhUz9rKzGyZUi8IQoukycnShtBNlpY5Y8FFhFAbJDUhkmduHsJV/ZM8axa7g493nFHRKkEQhMaj5Ag13nPiTpYOxdSAUrPMGQsmIoTaMAtvGFjrP8DbG0+QVVCumj2CIAiNwel0UmG1E9HE0JjV7sRscwTAsuZRWmWVROkgIkLIC60xWfpCuidG8e0jE+iZGAVAcYWVX7y2kbPFlSpbJggtj7/85S9oNBoefvhhtU1pM1jtTuwOJ5FhTUiWdvXoKQ3B8FhpVdNaAghNQ4SQF1prsvSF9E6O5h+3j/A8zzWZueGlH9h5skhFqwShZbF161ZeffVVhg4dqrYpbYpKix2AyPDGCyF3RVYodpcurbKJRyiIiBASOHDBINaiCis3v/KTiCFB8IGysjJmzZrF66+/Tvv27dU2p01RYVW8OcYmCCG30AjFpopKaExyhIKFCCGBsd3jiajHtXzv29tYtiFLqskEoQHS0tK4/vrrmTJlitqmtDk8HqFWGBoTj1DwkE9aIDUhkm8evpKv957jhW8PYbErVRTnyy388Yv9PPf1Ab5Ln0iqa3CrIAgKH374ITt27PA5hG42mzGbzZ7nJpMpUKYFnd1niln4n30cyytjeGo7nrt1KCntIgJ6zgpPaKxpydIQmkKozGwjRnKEgoZ4hARAEUP3T+jF/9In8n/XDSAuovqP0Gx38tyqg+IZEoQanD59mvnz5/Pee+9hNBp9es2iRYuIi4vz3Lp27RpgK4NDfqmZO17fjN3h5IGJvTiWV8bc5VtxOAJbml5pVYRQRHjjf8rcycihGRqT8vlgIkJIqEVqQiS/urInr/9yDJoa61/uOceUxWtFDAmCi+3bt5OXl8fIkSPR6/Xo9XrWrVvHSy+9hF6vx26313nNggULKCkp8dxOnz6tguX+Z+m6Y2g08M49Y0mb1JslvxjBwZxSNh4/H9DzukNjTSmfVzo3a0MuWdrucCoeIQmNBQ0RQl5oC+XzDTG2ZzyfPHgpsTU8Qxa7kzc2HOfj7WdEEAltnsmTJ7Nnzx4yMzM9t9GjRzNr1iwyMzPR6ermrRgMBmJjY2vdWjpOp5Ov9pxjxqiutIsMB2BM9/b07BDFpzvOBvTcFc3IEYLQnDfm9lCJRyh4iOT0QlpaGmlpaZhMJuLi4tQ2RxVGdmvPe/dcwvSXN3jW3t54EjiJUa/l20cmSN6Q0GaJiYlh8ODBtdaioqJISEios96aOZpXxrmSKib06+BZ02g0XNE7kQ1HCwJ67kpX1VhEE6rGQKkcKw2x0JhbCMnA1eAhHiGhQYZ0iWPV/CvonRRda73K5mDLiUKVrBIEIVTYePw8YToNY7vH11of0CmWrIJyqqx1Q4T+otLiQKMBg75pP2UxRn3IJUu7Q3USGgseIoSEi9K/UyxfPHQ5V/ROrLX+3f4cCZEJQg3Wrl3LkiVL1DYjqBzJLaNnYnQdr8yATrE4nHDogj5l/qTCYiMyTIdGo7n4zvUQbdCHXI6QW5jJ0NXgIUJI8AljmI4354zh+iGdPGvf7Mtl0vNr2Hi0QPKGBKGNcjSvjF5JUXXW+3WMQaMJrBCqtNibHBYD1wT6EAuNVXuEJEcoWIgQEnxGr9Py8h0jmFQjF8DuhFn/2sxjH+1i6pL1IoYEoY1xNL+M3h2i66wbw3QkRhs4V1IVsHNXWpsnhEIxWdrtEZJZY8FDhJDQKDQaDU//bDB6bbUr2t0qpNJqJ2PtURFDgtBGKKm0kl9qpldSXSEEkBRjILc0cEKowmInMqzpgiE0c4Rs6LSaJs1PE5pGqxdCxcXFjB49muHDhzN48GBef/11tU1q8aQmRPL9oxP5+eiuXBiaX7H1tHiGBKGNcKZI+TtPja+/ejQ51kieKYAeIYu9SXPG3MQYQzE0pkyeb2rek9B4Wr3vLSYmhvXr1xMZGUl5eTmDBw/mlltuISEhQW3TWjSpCZH89bahXNU/iYc+2IHVXt1BttJqZ8uJQimtF4RWTp5JGRfSMa7+ztpJMQb2nwvcGJFKq73JPYRACT+ZQi5Z2ioVY0Gm1XuEdDodkZHKD7LZbMbpdOJ0Brbte1vi2sEdWT5nbJ2hrWcKK8QrJAitnFxTFRoNJEYb6t2eFGskN4AeoQqLvVkhpBhjGGVmW0j9JpSZbZIfFGRUF0Lr169n+vTppKSkoNFoWLlyZZ19MjIy6N69O0ajkXHjxrFly5ZGnaO4uJhhw4bRpUsXfvvb35KYmHjxFwk+c1nvRN6/b1ytq5glq49wtYzkEIRWTa7JTEKUgTBd/T8lSTEGCsos2AM0c6zSamtWaCzaqMfphHJL4HodNZbSKhuxUjEWVFQXQuXl5QwbNoyMjIx6t69YsYL09HSefPJJduzYwbBhw5g6dSp5eXmefdz5PxfesrOzAWjXrh27du0iKyuL999/n9zcXK/2mM1mTCZTrZtwcUaktufjBy6tJYbMdidf7zunolWCIASS3NIqkmPr9waBkiNkdzg5X24OyPmVZOlmeITcg1dDKGFaQmPBR/VPe9q0aUybNs3r9sWLF3PfffcxZ84cAJYuXcqXX37JsmXLePzxxwHIzMz06VzJyckMGzaMH374gdtuu63efRYtWsTTTz/duDchAErfkFfvHMWsNzbjvv5buvYYVpuT0d3ac6a4krHd4yV3SBBaCXmmKpJj688PAmgfqXg2iiusJMV436+pVDY7NOaeQG8F/G9fUyitstHJS86VEBhU9wg1hMViYfv27UyZMsWzptVqmTJlChs3bvTpGLm5uZSWKg29SkpKWL9+Pf369fO6f2udDh0sLu2dyMcPXEpSjHKVWFRh5flvD/GL1zdJryFBaGXkmswNeoRiIxQhFKjuzZXW5lWNued5mULKI2STOWNBJqSFUEFBAXa7neTk5FrrycnJ5OTk+HSMkydPcsUVVzBs2DCuuOIKHnroIYYMGeJ1f/d06HfeeYdLLrmEyZMnN+s9tEVGdW/PqoevpEv7iDrb3BVlgiC0fArKzF4TpaHa42KqDIzQaH4fIUWohVRozGyVrtJBptXLzrFjx/ocOquJTJ9vHvFR4bxx12imvfgDNdMk9Rro0i6Cj7efkTCZILRwiiostIsM97rdnfQbqBL1qmaGxtzVWaHUVLG0yiY5QkEmpD1CiYmJ6HS6OsnNubm5dOzYMaDnzsjIYODAgYwZMyag52nN9O8Uy//SJzCiazvPmk1GcghCq6DKaqfK6qBdhHfvRWS4Dp1WExCh4XQ6qWhuaMxQM0dIfZxOJ2VVNvEIBZmQFkLh4eGMGjWK1atXe9YcDgerV69m/PjxAT13Wloa+/fvZ+vWrQE9T2unV1I0nzx4KfdP6OlZc5fSSphMEFouxRWKeGgf5f1HW6PREGMMTNNCi92B3eFsVtWYTqshKlwXMh6hKqsDm8PpqWYTgoPqn3ZZWRlHjx71PM/KyiIzM5P4+HhSU1NJT09n9uzZjB49mrFjx7JkyRLKy8s9VWRC6KPValgwbQB9k2J4/NPdtbpQrz2UR+c4I2dLqmqFyk6dr2DLiUIJnwlCiFJUYQFoMDQGgZvnVWVxADR7Jld0CM0bq548r/pPc5tC9U9727ZtTJo0yfM8PT0dgNmzZ7N8+XJmzpxJfn4+CxcuJCcnh+HDh7Nq1ao6CdT+JiMjg4yMDOz20Gm01dK5dVQXenaI4sH3dpDjmkj9xe5zfLFb6TVk1GtZPmcsu84U8/fvDlNlcxARpuPNu8dwpriSLu0iPCX4gAglQVARj0foIkIo1hiGqdL/HqEKqyJemhMag+ru0qGAu3pNQmPBRXUhNHHixIu2N583bx7z5s0LkkUKkiwdGEaktufbR65kzptb2X6yqNa2KpuDO97YRM0mtJVWO79ctrmWFylcpwwjtNidhOk0PHBlLy7tlVDHqyQIQuAodnmE3L2CvBEoj1CFqxt0c0JjoOQJBaq8v7G4BZmM2Agu8ml7QTxCgSPWGMbffz6cKYvXYbE7am2rrxN/TREEigCque0fa47yjzVKeFWngcU/H47V4RRRJAgBpKjCikZzce9FrDEsIDlClW4hFN68n7FQmkAvoTF1kE/bC+IRCiypCZH8L30CG4+f53h+Gf/dnU12cfOHM9qdMH9FJgAGvZbvHpkgYkgQAkBRhYW4iDB0Wk2D+8UYwzhxvtzv56+0KkIoIrx5NT+B8lg1BbcdMmssuDRJCB0/fpyePXtefEdBaIDUhEiPSFlw3QCO5pXywZbTbMkqpLTK6hnWaHcoIbDYiDDCdVo6t48gxqDnXEkVe8+W4PByfLPNwaKvD/CP20eg9zIUUhCEplFSaW2wdN6NIjQCkCNkcQuh5l3PRxv0frkI8wfuz0k6SweXJn3avXv3ZsKECdxzzz3cdtttGI2tby6KhMaCT++kGP5ww8BGvcZdXdalXQR7s0s4llfGh1tPe5o4fr03hznLt/Kv2WMI14sYEgR/Yaq0EueDEIoy6Cg3+/97tNJPOUKhlCxdWmXz9F4SgkeTfhl27NjB0KFDSU9Pp2PHjtx///1s2bLF37apivQRahmkJkRy26guXNIrgXuv6MmiW4eyav6VjO3e3rPPD0cKmPnqRj7YckoaOAqCnyg1+zYTKzJcT5U1AELIVTUW0dzy+RBKlpau0urQJCE0fPhwXnzxRbKzs1m2bBnnzp3j8ssvZ/DgwSxevJj8/Hx/2ykIPtOvUww/H5Naa23n6WIWfLqHa/6+TsSQIPiBsiobMYaLe4SMYTpPGMufVFjsaDRKLmBziDHqQ2bWWKl0lVaFZv0P0uv13HLLLXz00Uc899xzHD16lMcee4yuXbty1113ce7cOX/ZKQiNYmz3eCLqcZlX2RzSzVoQ/ECZzx4hHZVW+0XbpDSWSoudyDAdGk3zwkgxRj3lFrun472alFZZxSOkAs0SQtu2bePXv/41nTp1YvHixTz22GMcO3aM7777juzsbG688UZ/2Rl0ZNZYyyY1IZJvHr6S52cM4w/XD6i1zSi5Qm0Wq9XK6dOnOXToEIWFIoibQ2mV1ad+N+4LErPNW1lD06i02JsdFoMaE+hDIE+ozGyTHkIq0KRPfPHixbz55pscOnSI6667jrfffpvrrrsOrVb5genRowfLly+ne/fu/rQ1qEj5fMunZlXamaJK3vzpBADPfHWAy/skXnQ0gNA6KC0t5d133+XDDz9ky5YtWCwWnE4nGo2GLl26cM011/CrX/1KLnoaSZmP+SxusVJhsWNsZmJzTSqs/hFC1RPofUv+DiSlVTbVbWiLNOnS+JVXXuGOO+7g5MmTrFy5khtuuMEjgtwkJSXxr3/9yy9GCkJzeeKGgVzSUxnNca6kiqc+36+yRUIwWLx4Md27d+fNN99kypQprFy5kszMTA4fPszGjRt58sknsdlsXHPNNVx77bUcOXJEbZNbDKVmH4WQS/xU+jlhWgmNNd974n4PodBLSEJj6tCkT/y7774jNTW1jvhxOp2cPn2a1NRUwsPDmT17tl+MFITmotNq+O01/bl16U8ArMw8yy0jO3Nl3w4qWyYEkq1bt7J+/XoGDRpU7/axY8cyd+5cli5dyptvvskPP/xAnz59gmxly8PpdLrCOBf3XriHolZa/Cs0Ki32Zs8Zg2ohFAqhMakaU4cmfeK9evXi3LlzJCUl1VovLCykR48e0ntHCEmyLuhu+5evD4oQauV88MEHPu1nMBh44IEHAmxN66HCYsfp9K3xnzscVmnxb45QhdXe7B5CUJ0jFAol9KU+ikvBvzQpNOYt+7+srKzVNFeUZOnWx9ju8bUSpfefM/HTsQIVLRKElok7jBTjQ2JvpCdHyP8eoUi/5giFgkdIQmNq0KhPPD09HQCNRsPChQuJjKye4WS329m8eTPDhw/3q4FqIcnSrY/UhEi+fWQC/1x7lA+3ngbgj//dz9fzr2h2Ca4QelRWVlJYWEjnzp1rre/bt89rqEzwjTKz76Mg3AnNfs8Rstr8UvDg7uSsthCy2h1UWR0ihFSgUR6hnTt3snPnTpxOJ3v27PE837lzJwcPHmTYsGEsX748QKYKQvNJTYjkgQm9cMuegzmlfLFb+l21Nj7++GP69OnD9ddfz9ChQ9m8ebNn2y9/+UsVLWsdeDxCvvQRciU0V/q5qWKFxT+hMY1GQ7RB/Qn01Z+phMaCTaOk55o1awCYM2cOL774IrGxsQExShACybaTRdQM7r66/jjTh6WoZo/gf/785z+zfft2kpOT2b59O7Nnz+b//u//uOOOO/ze2K8t4hYNvvS8MbqmwwekaswPoTEIjTEbZY0Ql4J/adIn/uabb/rbDkEIGmO7x2PQaTDblR/EfWdLOHW+wtNzSGj5WK1WkpOTARg1ahTr16/n5ptv5ujRoxIG9QPVOUIX916E67TotBq/j9motPqnagxCY8yGySXERAgFH58/8VtuuYXly5cTGxvLLbfc0uC+n376abMNE4RAkZoQyXfpE1n09QG+3puDE3jzpyyenC55I62FpKQkdu/ezdChQwGIj4/nu+++Y/bs2ezevVtl61o+btEQZbi4ENFoNESE6fw+eLXCT32EQBEfaucISWhMPXzOEYqLi/NcScXGxhIXF+f1JgihTmpCJM/ePARjmPIn8O+tpympVL98VvAP77zzTp32HuHh4XzwwQesW7dOJataD6VmG5HhOvQ6335CIsL9P3i1yo+hsRhjGKWq5wiJR0gtfP7Ea4bD2kJCdEZGBhkZGdITqRXTPiqcW0d24b3Npyi32Pl8Vza/vKSb2mYJfqBLly61nufk5NCxY0cALrvsMjVMalWUVTVuJlZEmM6vOUJOp5MKP4bGog168kqr/HKsptKYvCvBvzSpj9Cf//xnsrKy/G1LSJGWlsb+/fvZunWr2qYIAeSOcamexx9sPqWiJUIgueaaa9Q2oVVRWmX1qXTeTUSYzq9VYxa7A7vD6ZeqMXDlCKnuEbIRrtP6dR6b4BtNEkIfffQRvXv35tJLL+Wf//wnBQXSlE5omcQYwjyl9PvPmdhwRP4vt0akUsy/lJltPjVTdGMI02Kx+6+zdJWrS7XfqsZCIkdImimqRZOE0K5du9i9ezcTJ07k+eefJyUlheuvv57333+fiooKf9soCAFjy4nCWqX0b/7Yuj2dbRWpFPMvysBV35N6DXotZqv/hFCFVREt/gqNxRrDVK8akzlj6tEkIQQwaNAgnn32WY4fP86aNWvo3r07Dz/8sCcOLwgtAXcpvZs9Z0twOMR7IAgN0dgcIYNeh9nmv9CYO/HaX6ExpY+QykLIbGtUuFHwH00WQjWJiooiIiKC8PBwrFapvBFaDu5S+gGdYgDIKzWz8fh5la0ShNCmTo6QwwE/vABLhsKirvD2jXD+mGezQa/FbPOfR8idbxQZ7r/yeYvd4fcS/8ZQWmXzqS+T4H+aLISysrJ45plnGDRoEKNHj2bnzp08/fTT5OTk+NM+v1FRUUG3bt147LHH1DZFCDFSEyKZN6mP5/kn28+oaI0QCHQ6SUD1J2XmCzxCq5+G1X+CXpPginQoPg3LbwCLkioR7m8h5BIsEeF+uZb3vBc1E6YlR0g9mvS/6JJLLqF37958/PHHzJkzh5MnT7J69WruueeekO0j9Mwzz3DJJZeobYYQokwekOT5Mly1L0fVK0PB/+zcuTMgx33llVcYOnQosbGxxMbGMn78eL7++uuAnCuUKKuyEev+0S46CRszYNLvYfqLcPkjcOfHUJYDu94H3DlC/g+NRfjNI6R4YtQMjyk5QuIRUoMmCaHJkyd7hq4+9thjdaY7hxpHjhzh4MGDTJs2TW1ThBAlz2SmwnU1WGGx8/E28QoJF6dLly785S9/Yfv27Wzbto2rrrqKG2+8kX379qltWkCplc+y8x0Ij4Txv67eIb4n9L0W9nwMuHOEAhAa82P5PKBqwnSZJEurRpOE0DPPPMPAgQP9YsD69euZPn06KSkpaDQaVq5cWWefjIwMunfvjtFoZNy4cWzZsqVR53jsscdYtGiRX+wVWidbThRS82v64x0ihISLM336dK677jr69OlD3759eeaZZ4iOjmbTpk1qmxYwnE4nZWYbUe7Q2OFvoPfVEB5Ve8ful0P2TrBbMYT5OzSmCJYIP84aA1QdvCqhMfXw+VNPT0/nT3/6E1FRUaSnpze47+LFi302oLy8nGHDhjF37tx6Z5itWLGC9PR0li5dyrhx41iyZAlTp07l0KFDnhb6w4cPx2arq+S//fZbtm7dSt++fenbty8//fSTz3YJbYux3eMx6rVUub6sD+aYqLDY/JaMKYQmJSUl7Nq1i8zMTH7zm98061h2u52PPvqI8vJyxo8f7ycLQ49yix2n0xVOKs2FnN1w6UN1d+wyBmxVkLMHg97o96oxjUYJufkDd1hczTEbUj6vHj5/6jt37vRUhPkz3j5t2rQGQ1aLFy/mvvvuY86cOQAsXbqUL7/8kmXLlvH4448DkJmZ6fX1mzZt4sMPP+Sjjz6irKwMq9VKbGwsCxcurHd/s9mM2Wz2PDeZTE14V0JLIzUhkm8fmcDvPtnFpuOFVFkdrD6Qx/RhKWqbJjSBY8eO8cQTT2AwGFiyZAnt2rUjKyuLzMxMj/DZtWsXp06dwul0EhUV1WQhtGfPHsaPH09VVRXR0dF89tlnXj3mreH7pcwzHFQP51y/Ban15F92GgZaPWTvxKC/3K99hCotdiLDdH7rDxXt8QipI4QcDidlFskRUgufhdCaNWvqfRxILBYL27dvZ8GCBZ41rVbLlClT2Lhxo0/HWLRokScstnz5cvbu3etVBLn3f/rpp5tnuNAiSU2I5DdX9WHT8c0A/HdXtgihFsqsWbOYNWsW3bp1Y/DgwZSVlWEymYiLi2PgwIEMHjyY06dP869//YvJkyfTtWvXJp+rX79+ZGZmUlJSwscff8zs2bNZt25dvWKoNXy/lJldw0ENeji5G4ztIK6ez09vgNjOUHwqIOXz/gqLgZLDFK7XUqZSaKzcYsPplDljatEkv+LcuXMpLS2ts15eXs7cuXObbZSbgoIC7HY7ycnJtdaTk5MDVqa/YMECSkpKPLfTp08H5DxCaDKuZwKJ0QYA1h7Ox6RizoDQdPLy8hg8eDDDhg0jJyeHtLQ0Tp8+TVFRET/++COvvvoqGo2GsWPHNksEgTLVvnfv3owaNYpFixYxbNgwXnzxxXr3bQ3fL26vSbRRr4TFOg4Bb56ZuK5QctqVI+TH0JjVv0IIIFbFMRulNb1sQtBpkhB66623qKysrLNeWVnJ22+/3WyjAsXdd9/N888/3+A+BoOB2NhY3nnnHS655BImT54cJOuEUECn1XDD0E4AWGwOvtx9TmWLhKbw0ksv8eCDDzJr1iyWLl3K559/TlpaGocPHw74uR0OR63wV03c3y81by2NWlPSc/cpQsgb7bpC8emAVI1FhvlXNMQYw1TrI1QthCQ0pgaNEkImk4mSkhKcTielpaWYTCbPraioiK+++sqTwOwPEhMT0el05Obm1lrPzc0N+CgPmT7fdrl1ZBfP4/c2nVTREqGp3HDDDRw8eJANGzZw7733kpmZyZQpU7jyyitJS0sjLy/PL+dZsGAB69ev58SJE+zZs4cFCxawdu1aZs2a5ZfjhyKeH+0wDRSfhIRe3neO6wolZzDotVhsDr8Nv6202P02Z8xNtEGPSTWPkOJ5jhWPkCo0Sgi1a9eO+Ph4NBoNffv2pX379p5bYmIic+fOJS0tzW/GhYeHM2rUKFavXu1ZczgcrF69OuBVGRkZGQwcOJAxY8YE9DxC6FHzy2hvtokfZSJ9i0en0zFv3jz279+PTqejf//+OBwO7PbmhWvy8vK466676NevH5MnT2br1q188803XH311X6yPPRwJ0tHm3PAYYP23b3vHNcFSs9h1Cmv8ZdXqMJq91sPITcxRr16HiFzjXCjEHQa9amvWbMGp9PJVVddxSeffEJ8fLxnW3h4ON26dSMlpXHJpWVlZRw9etTz3F3ZER8fT2pqKunp6cyePZvRo0czduxYlixZQnl5uaeKLFCkpaWRlpbmSbAU2g5bTxbVer7sxywu65OokjWCP4mPj+ell17igQce4JFHHmHy5Mn87ne/Iy0tjYiIiEYf71//+lcArAxtSs02IsN16IpPKAvte3jfOa4L4CTOqszvM9scGP0gYCotig3+RBm8qk5OoITG1KVRQmjChAmAIlZSU1P9Urq4bds2Jk2a5Hnu7lE0e/Zsli9fzsyZM8nPz2fhwoXk5OQwfPhwVq1aVSeBWhD8xYU9hXafLcHucKLT+qdUV1CfgQMH8s033/DFF1/w2GOP8cILL3DunOSD+YJn8nzRCdDooF2q950jE5Q7m9ImQEmYbv6PfaXVTrvI8GYfpyYxxjBOni/36zF9pbTKilYDUX4Wd4JvNClZ+vvvv+fjjz+us/7RRx/x1ltvNepYEydOxOl01rktX77cs8+8efM4efIkZrOZzZs3M27cuKaY3SgaFRqz2+DAF+Cn+LegLu6eQgM7KYms+aVmfjwq4bGWyKlTpxrcfsMNN7Bnzx5+97vfAXD27NlgmNWiKTO7Js8XZUFcZ9A1IGwilahBpKMEwG+9hCosgQmNqVU15haX/uqLJDSOJgmhRYsWkZhYN1SQlJTEs88+22yjQoFGJUuv/yusmAUf3Q0VhQG3TQg8qQmR/GZyb8/zl78/6rdETyF4jBkzhvvvv7/Bv+OKigqioqIYPHgwn3zySRCta5mUVtmUHkKm7Pr7B9Ukor1yZ3V7hPwjhCotdr+HxlTNEZKBq6rSpMysU6dO0aNH3bhwt27dLnoF1lLIyMggIyPj4smU54/B+r8pj/evhDNb4eal0OPKgNsoBJbJA5LpkRhFVkE5W04UsmpvDtOGdFLbLKER7N+/n2eeeYarr74ao9HIqFGjSElJwWg0UlRUxP79+9m3bx8jR47kr3/9K9ddd53aJoc8pWbXj3ZpDsRc5O8hPBq0YRhtJUAHv/USqrQGqmpMrRwhmTOmJk3yCCUlJbF79+4667t27SIhIaHZRoUCPnuEEnrBjOVKd1UA01l462ew7q/g8F/fDCH4hOm03HdFT8/zRV8f9GtTOCHwJCQksHjxYs6dO8fLL79Mnz59KCgo4MiRI4DSgXr79u1s3LhRRJCPeHKETNkQc5E2JhoNRMZjsCqhMYu/qsYC2EfI4Qi+51fmjKlLkz7522+/nd/85jfExMRw5ZWK52PdunXMnz+fX/ziF341sEUw8EaISob//gYKDgFOWPMMnNkGt7zqcQ8LLYtT5yt4+vO91c8LK1i24QQPTmygb4oQkkRERHDbbbdx2223qW1Ki6fMbKNDdLhvHiGAiPaEW4qB0A6NRRv1OJ1KaX6wR12YqqzESmhMNZr0r/2nP/2JEydOMHnyZPR65RAOh4O77rqr1eQI+RwaAyjMgnduAlslaPTgtANOOPINvDYRZr7bcPdVISTZcqIQs7321eHfvjmIVgO/urKnJDYKbZLSKisJYWawlkOsL0IonjCL4hGqsjbfo+p0OgMSGovxDF61qiCEbKTEGYN6TqGaJoXGwsPDWbFiBQcPHuS9997j008/5dixYyxbtozwcP+WNKpFo5KlT21URBCA0waXPgQRrh5LRSfgjath14qA2SoEBncZPYC7ct7hVEJkD32wk/Nl9Y9REEKP1atXc8kll2A0GomJiWHMmDE899xz9c5MFBqmrMpGR42r15YvHqHIeHRmZX+rvflhJ4vdgd3h9H/VmEv8lKlQOVZaZSM2QjxCatEkIeSme/fuDB06lGuvvZZu3br5y6aWR+p40LvUvN4Io+fC/eshZYSyZquEz34FX/8/sMsQz5aCu4z++RnD+P7Ridx9aXfPti92n2Pi39by6rpjfst7EALD5s2bmTZtGgaDgSeeeII//OEPDB06lOeff57BgwfXm+8oeKfUbCMJV3WsT6GxduiqFCHkj7+VSoviVfJ/1ZgiRNQYs2GqlGRpNWmSEKqoqOCee+4hMjKSQYMGeSrFHnroIf7yl7/41cAWQXwPmP1f6Hc93Pya4iFy2GDOKhh5V/V+m5cqidRl/plzJASe1IRIbhvVBa1Gw4dbaldElpptLPr6IHOXb5Uk6hDmr3/9KzfeeCPr1q3jiSee4He/+x3/+te/OHnyJFdeeSXXX389xcXFapvZInA6nZSZbcQ73ELIh5mPEe3Rml3J0s0caQJKxRjg/6oxlxBRo4ReqRoTj5BaNEkILViwgF27drF27VqMxuq45pQpU1ixonWEgBo9a6zrWJj6DHx2P6x8EP45HkrPwc/+AdNfBJ0rZHjqJ3h1ApzZHjjjBb+z5UShp9M0QM/EKNwZQhuOFvDYR7tVqTYRLs7GjRuZN29enfXIyEjeeustunTpwtKlS1WwrOVRYbHjdEKc7bxSKRvmw1iS8Bg0FqVjsz88QhVuj1AAGioCQR+z4XAo4lKSpdWjSUJo5cqVvPzyy1x++eW1EkYHDRrEsWPH/GacmjRp+nzNXCFbJWxYrCRSj7ob5nwNMa45bKXZ8OY02Pmu3+0WAsPY7vFE1PjiPV5Qjk4Lelfy0H93ZfPMVwfUMk9ogPz8/Hr7ngFotVrmz5/Pl19+GWSrWibuzsux1nyI9XGuZHgUGksZOq3Gz6Ex/4aSosLVyREqt9hwOJHQmIo0SQjl5+eTlJRUZ728vLxtV9Kkjgd9jSukHW8rnqGsH6DgMPz8bWUfALsZ/pMGX/1O8oZaAKkJkXzz8JXMHFPdSdfmAFsNL9C/NmSx+fh5NcwTGsBut9fyXF/IqFGjOHToUBAtarmUmZXvqkhLvm9hMQBDNFjKMOjA4odkaXdoLCK8WSmuddBpNa7Bq8EVQtUDV0UIqUWT/ieNHj261hWUW/y88cYbjB8/3j+WtUTie8CvN9bOC7JVwjs3K+Gyt6bD9JdgzL3V27e8qmwvlx/QUCc1IZK0ib09lWT18dr640G0SPCVt99+m82bN1NVVVVnW2xsrOQI+Yj7RzuiMrfaw30xwqMBiNVZ/Roai/CzRwhc88aCnCPk8bJJ1ZhqNOl/0rPPPsu0adPYv38/NpuNF198kf379/PTTz+xbt06f9vYsojvAZenw+6PFBGkDQOHy+Njq4Sz2+D6F6DjUPjyUWXbiR/g9Ulw+4eQPFBd+4UGcVeSfb33HIu/PYTZ7sSg0xAXGU5eqZnVB/M4mldK76QYtU0VXFxxxRX86U9/orS0FL1eT79+/Rg1ahQjR45k1KhRJCcn+9YvTPAkEodV5ELMZN9e5BJC7fQWP4XGFBv8nSMEuDxCwfXQu8d6xIpHSDWa5BG6/PLLyczMxGazMWTIEL799luSkpLYuHEjo0aN8reNqtDoZOmauD1DN70Cv/ysOlymj6gOjfW4Ei6bD5GukSTFJ+FfV8PBr/zzBoSAkZoQyf0TevFd+kSenzGM79InMmNUF8/2N37IUtE64ULWrVtHSUkJhw4d4u2332batGmcOXOGp556iiuuuIJ+/fqpbWKLoazKhgYHuoq8xoXGgDit2a9VYxF+rhoD1+DVoIfGrK5zi0dILZosQXv16sXrr7/uT1tCirS0NNLS0jCZTMTFxTX+APE9lBsooujURmVS86mNUHIG3puheIh0BugwAPIPgKUMPrwDpjyliKS2nG/VAkhNiCQ1IZJT5yt444fqkNgnO86Qfk1fkmKkU2wo0adPH/r06VNrDFBWVhbbtm1j586dKlrWciitspFAKRqHrRHJ0i6PkM7st9CYRgOGBkLUTSXaGBb0HCFTpSs0JkJINXwWQiaTyeeDxsbGNsmYVotbEP1zfN1wmd0MnUdAu1RlJAdO+N+TkH8Ipi8BvUEtqwUfuXAUh9Xu5N1Np0i/uq+KVgm+0KNHD3r06MGMGTPUNqVFYKqykhqm9ATy2SPkEkIx2iq/dJautNiJDNMFpDAnxqinpCK4obHSKit6rQZjmP+FneAbPn/y7dq1o3379g3e3PsI9VCztN5hVcSQm8z34fg6GPdg9dqu9+HtmySJugVQcxSHm2/35ahkjdBYjhw5woQJE9Q2o0VQUmmlp8F1UexrsrTBLYTMfhm6WmmxByQsBkqejinoOULK5Pk2XXGtMj57hNasWRNIO1o/7tJ6W6VyP+sj2PNvpcQewF6lDDAcc6/SX8hWpTRffGOysm9iH3XtF7ziTqDecqKQN344zsGcUg7mlJJnqiIpVsJjoY7FYmHDhg1qm9EiKKqwkBpuArsWojr49qLwKEDxCJn8ERqzBlIIqRAaq7JKxZjK+CyEXnzxRZYvX05sbCxvv/02M2fOxGCQsI3PuBOoT21URFF8D4jrUl1dpjPAmmcVAaQzQGQiVBRAURa8MQV+8T50v0ztdyF4wZ0vdKKgnIM5yiDPDUcLuGVkl4u8UhBaDkUVVkboiiA6GXQ+/nyEKUIoGjMWu388QpFhgamwio0Io6Qy2KExm/QQUhmfQ2NffPEF5eVKm/Q5c+ZQUlISMKNaLfE9YPgd1TlDNavLrvq9IoJAyRu6/BFIHqw8ryqGd25SRJMQ0lzRJ9HzeP3hfBUtEdw88MADvP7662zbtg2LxaK2OS2a4goLHTXFvucHAWi1EB5NtKYKix9m8lVa7H6fM+Ym1qjHVGnF6QzeuJzSKhsxBvEIqYnPMrR///4sWLCASZMm4XQ6+fe//+01Kfquu+6qd70lkZGRQUZGRuD7i7irywqzYM2i6tBZ/+uVxowfz4Gj/wO7BT69F0xn4LKHpaIsREmMNmDQazHbHGw4WoDD4USrlX8rNdmzZw/vvfce5eXlhIWFMXDgQE8PoZEjR6LVSpKqrxSVW0l0Fvo2db4m4VFEUumXZOkKqz0gPYRA8QjZHE4qrXa/j/DwhqnSSmyEeITUxOdPf+nSpaSnp/Pll1+i0Wh44okn6k3u0mg0rUIINbt8vrHUFzoDuH0FfPUobF+uPP/fU1ByFqY9B9rAfBkITePU+Qquf+kHT0JoQZmFAzkmBqUE4f+P4JUff/wRp9PJoUOH2LFjh+f22WefeTpKS6Kqb5RUWmmvLYCYRjZ+DY8m2lHlt4aKkQHMEQKlpD1YQqi0ykqHmOignEuoH5//pS+99FI2bdoEKIMKDx8+XO+8MaEZ1PQOZb6v9B0qOQ2XzlfK61f/Udlv6+tQlgO3vAFhkowbKlw4oR7ghyMFIoRUZt++fRgMBvr370///v254447PNuOHz/O9u3bpY+QjxRVWIgxFDTBIxSJ0eyfPkKVVjvtIsObfZz6cHtmTFVWOsYF57tVcoTUp0mfflZWFh06+FgxIDSOwqzqfkNuwiLhwZ8gtrMyqNVhgwP/hXdvhdvfB6P80IYC7jL6mmJo/eF8HpjQS0WrhPT0dAYNGsTixYs9a19++SXvv/8+SUlJzJ8/X/oI+YDZZsdmqSJCW6RUuDYGfQSGKgtmPyRLV1jspMQFxiMUF+H2CAUvYdpUZZVmiirTpOB4t27d2LBhA3feeSfjx4/n7NmzALzzzjtShtpcavYbcmOtUNaH/QLu+LenCoOTG+DN66EsL/h2CnVwl9H/7bahnqvJbSeKqLLKHCs12bVrF7feeqvn+YEDB7j55ptZt24d7777LmPHjiU7O1tFC1sGxRVWOlCsPGlMsjRAWARG/OQRstgDHxoLYi8h8QipT5OE0CeffMLUqVOJiIhg586dmM1mAEpKSnj22Wf9amCbw91vqCY1Z5T1ngyz/1s9oyx3DyybCsWngmunUC+pCZHMGN2VK3or1WMWu4MD53zvyi74n5KSErp27ep5/vbbb9OzZ09OnjzJmTNnGDZsGH/5y19UtLBlcL7MQrKmSHnS2NBYWAThTgtWf5TPWwNYNRZRnSMUDGx2BxUWu3iEVKZJQujPf/4zS5cu5fXXXycsrPof8LLLLmPHjh1+M85fdO/enaFDhzJ8+HAmTZqktjkNU7OkfvYXyv2vN1YnTwN0GQVzv4FYV4+awuPwr6mQf1gdm4U6DEqprqjcly1CSE26dOnCuXPnPM9Xr17NjBkz0Ol0GAwGFixYwLfffquihS2D3NKqZgoh/80aC1QfIYNeS7hOGzSPkLt5o1SNqUuThNChQ4e48sor66zHxcV5qjBCjZ9++onMzMyW0SHb3W+oxxXVfYfcCdSFrsnmiX3gnm8gwdVxujQbll8HufvUs1vwMKhzdd7WlqxCFS0RpkyZ4skPOnnyJDt27OCaa67xbO/VqxenT59Wy7wWQ56pik6aQpx6I0Q0cpSSPoJwp7+qxgIXGtNoNMRGBG/emFsIyeR5dWmSEOrYsSNHjx6ts75hwwZ69uzZbKOEC3AnUK98ULl3i6G4LjDna+g4RHleng/Lr4dsqYBRmxhD9RXe57uyOXW+QkVr2jZPPPEEa9asoWfPnowfP56uXbty+eWXe7bn5uYSHS3lyxcj12Smb3gBmnbdGt/HzO0RamZozOl0UmGxBSw0BkqeULA8Qu7zSGhMXZokhO677z7mz5/P5s2b0Wg0ZGdn89577/Hoo4/y4IMPXvwANVi/fj3Tp08nJSUFjUbDypUr6+yTkZFB9+7dMRqNjBs3ji1btjTqHBqNhgkTJjBmzBjee++9Rr02JKiZQG2rhA2Lq8VQdAclZ6jzKOV5ZRG8fSOcDb0QZVti7wXhsI3HZXiuWnTu3JmtW7dy8803M23aND799NNafYO+//57+vbtq6KFLYNcUxU99QW1w/S+EhZBmKP5oTGL3YHDScAaKgLERIQFLUfILYQkWVpdmvTpP/744zgcDiZPnkxFRQVXXnklBoOB3/72t9x7772NOlZ5eTnDhg1j7ty53HLLLXW2r1ixgvT0dJYuXcq4ceNYsmQJU6dO5dChQ54+RsOHD8dmq/sf99tvvyUlJYUNGzbQuXNnzp07x5QpUxgyZAhDhw5tyltXh5oDW0EZ1Lr7o+rcoYj28MuV8P5MZVBrVYkyuf6uz6oFkhBUxnaPRwu4v/Y7yvBVVenWrRsvvPBCvdv279/PbbfdFmSLWh65JjNdnDnQfnTjXxwWgd7RfI9QpUWpwAxUaAyCO4G+OjQmQkhNmuQR0mg0/P73v6ewsJC9e/eyadMm8vPziYuLo0ePxl0tTJs2jT//+c/cfPPN9W5fvHgx9913H3PmzGHgwIEsXbqUyMhIli1b5tknMzOTvXv31rmlpKQAyhUhQKdOnbjuuusaTOg2m82YTKZaN9VxJ1CPrNGx21YJBz6vzhsyxipT6ru5BrOaS+DtmyVMphKpCZHce0V1mLiwwqyiNUJDvP3228yfP19tM0KefFMFHey50L5741+sN6K3KzlCzZnjVeESQgENjUUEMTRW6fYISWhMTRolhMxmMwsWLGD06NFcdtllfPXVVwwcOJB9+/bRr18/XnzxRR555BG/GWexWNi+fTtTpkypNlirZcqUKWzcuNGnY5SXl1NaqkwDLysr4/vvv2fQoEFe91+0aBFxcXGeW82yW1WJ7wGXp1eX1usM8P0ztfOGDNEuMeTKfzCXwDs3Q85e9exuw1zaO8HzeN/ZEBDUgtAMLEVnCXNamhgai0TvUIZKN2feWKWrJ1cgQ2NxQQyNlVbZMIZpCdfLvDs1aZQ/buHChbz66qtMmTKFn376iRkzZjBnzhw2bdrECy+84ClJ9RcFBQXY7XaSk5NrrScnJ3Pw4EGfjpGbm+vxNtntdu677z7GjBnjdf8FCxaQnp7ueW4ymUJLDLnnkZXnw3cLlXV33tDl6co+s/4N796mhMncOUNzvoIO/dS1v41Rc7SGlNALLZnCcgsdq45BONChf+MPEBaBzl4FOLHYHU3+4a8OjQUulBTMZGmlmWIzvUHmUig4AhXnwVIGlnJw2IEagtPjhXNe8LwF07670lfPDzTqf9NHH33E22+/zc9+9jP27t3L0KFDsdls7Nq1K2SHFvbs2ZNdu3b5vL/BYMBgMARv+nxjqW9aPdTNG5r1byVP6Ow2qChQHt/zjTKzTAgKHWIMJMUYyCs1sy+7BKfTGbJ/J4LQEMfyyxioOYk9PA5dU75DwiLQ4MSAVUmYNjTNDndoLCI8cB6U2Ah90EZsKOM1miDqnE7Y/W9lGPepjdQSPV5xffd4voNa+HfRwBvVEUJnzpxh1Cgl+Xbw4MEYDAYeeeSRgH25JyYmotPpyM3NrbWem5tLx46NbPHeSII+fb6xuL1DGxYrIggUUXTKJYQMMXDnJ/DWdMjZrfQZevsmpRFjtMyJCxaDUmLJO5SPqcrG2eJKurSPVNskQWg0R/PKGKw9AZ2GNL50HiBMCekbaF53aXdoLCLgHiFbUC5cSqusjfcIlebCx3Pg5I/Q6yqYvkRpoRLdEcKjlJtOco4aQ6Nktd1uJzy8euqvXq8PaP+N8PBwRo0axerVqz1rDoeD1atXM378+ICdF5SS/YEDBzYYRlOdC/OGao7iKMyCQ1/BDUsgobdr7Ri8e4viShWCgoTHhNbA4RwTI/RZ6DoNa9oBXN9REViaVUJfaVFyd3zKETqzHTYthdONa7cSGxGG3eGk3BL4aECj54xVFCqNcwuPw13/gV9+BqPuVqqD4zpDRDsRQU2gUbLa6XRy9913YzAofs2qqioeeOABoqKiau336aef+nzMsrKyWs0Zs7KyyMzMJD4+ntTUVNLT05k9ezajR49m7NixLFmyhPLycubMmdMY0xtNyHuE3NTMG0odXx02c0+w10fALz+FT+4F01nFO/Tv2XDHCvmDCQIDLxi1MXVQYD2ZghAIzh7JpKMzH3pObNoBXB4ho8aCuRlCqDo0dhEh9P0zsP6voNWDwwZj7oPr/uaTN8sdqjJVWok2BLas3VRlpV1k+MV3BCUc9umvlLzPe76DhF4Bta0t0ah/5dmzZ9d6fueddzbbgG3bttWa/+VOVJ49ezbLly9n5syZ5Ofns3DhQnJychg+fDirVq2qk0Dtb0I2R6g+auYNZb6vJFLXbMBYdEK5cvjXNVBVDMdWw3/nw40ZTXNzCz4zsFO1EJLhq0JLJM9URc/CH7AZjeh7XNG0g4T5ySNktaPRKDPBvLL/P4oIuuoPcNnDsGM5fPkoxKbAFeneX+fCM3i1ykoKERfZu3mUVFrplhB18R0B9n4CR7+DO/4tIsjPNEoIvfnmm343YOLEiRftKzFv3jzmzZvn93M3RIvxCLmp6QXSGZSb3VwdLovvAbd/qFSQ2c2Q+Z6SdT/hd2pb3qpJjY8kKlxHucUuQkhokXy85Riz9d9i73s9+rAmCgOPEGpeU8VKi53IMJ333B2bBb75PfS7Dq54VLnQG3MvFJ+GtYtgwM8gsXeD53CPuwhGCX1xhZW4CB8883YbrHkW+kyFvlMDbldbQ9pZthZqjuGwm+HqP0JUh2oRBNBtPNzyGnx0N+CENc8o+UOD63b0FvyDVquhX8cYdpwq5kxRpatKREKSQuNw2O04na5mhE4n4FTqhFwXke51ZdX1WNmhVum066Wu19c4lhPX612vwYnd7mD34Sx6/fA0SZoSdJMXNP0N6JXO6kZN85KlKyz2hsNiez6CkjMw6+Pa3u6JjyselTXPwIyGL+jdk+CDUTlWUmmlnS9CaPeHSo7nRWwXmoYIIS+0qNAY1B7DoY9QrnzieyiJgt/8Hi5/GLqOhUE3QdFT8L8nldetfBDad5NRHAFkQKdYdpwqBuDguVLG9ohX1yDBbyxatIhPP/2UgwcPEhERwaWXXspzzz1Hv37+7dl1eNFl9Lcd8OsxfeEKoEIbieWmfxGR2KfpB6pRNdbc0FiDQmjnu9BzAiRd0OsoLAIuf0QJkV31RIOhJY9HKMC9hOwOJ6VVtot7hJxO2JgB/a6HpiarCw0iQsgLLS405i1p+q3pYKtS8oJ+vUlZv2w+FBxWwmO2KvhwFvxqHcQENu+qrdK/Rp7QwRyTCKFWxLp160hLS2PMmDHYbDb+7//+j2uuuYb9+/fXKSJpDlXjH2aLKY/q3i8a10ON6/GF68ooJCcaNK7tTty7Kevu/T1hJo2Gmr1mtBotHRLa03Xw5WiM1f+Hm4TLI+TpI9RElNCYl5+tkjNKE9mbX6t/+/A7YPUfYcdbisfcC8YwHQa9NuAeoVKX0LqoEMrZDXn7YcpTAbWnLSNCqDXhTpp2c2qjInRAuXf3GNJo4Ia/K0Lp1E9Qek4Jl83+XCrJAoCuhote8oRaF6tWrar1fPny5SQlJbF9+3auvPJKv51n+ORf+O1YqlBDCDWvaszmfc7YkW9Bo/OeQxMWAcN+AZkfwOQnQevds6TMGwtsjlBJpY9CKPMDiEqCXv5pHijURQaceKFF9BG6GO5wGSj3cV2rh7TqDfDztyBGGUzLqZ/g2yfUs7WVcup8BU99Xj3rLfN0sXrGCAGnpKQEgPh48frVQq+0XDFqLM1LlrY6vPcQOvIdpF6i9NLxxqBboDwPzmxt8DyxRr1HqASK4gqXEIpsQAjZrUre09Cfg078FoFChJAX0tLS2L9/P1u3NvwHE9K4w2U3vaIMY33/50pO0CuXKmIoOglmvgM6Vx+LzUthz8fq2tzK2HKiEEuNIZNH88qwO+qvktxxsoj73t7GjpNFXo+XZ6ri798dJs9U5XdbhebhcDh4+OGHueyyyxg8eHC9+5jNZkwmU61bm0Crw6kNw4AVazMbKkbW5xFyOODEjxfvc9RljOJdOfhFg7vFRoQFPDTmk0fo1CZlRNLgWwNqS1tHhFBrJ76HEhsvOQ3WCmXNWqGM5ijMgi6jlUZjbv77MJw/poqprZGx3eNr9Tyx2p2cOF9eZ79T5yu4/fVNfLc/l9tf38Sp8xX1Hm/XmRJeXH2EXWdKAmaz0DTS0tLYu3cvH374odd9Fi1aRFxcnOcWMgOdg4HeqOQINbNqrN7QWP4BMJcoHqGG0Gqh/3Vw4IsGB48GY/CqT0Lo2GqITIROwwNqS1tHhFBboWaYDJT5ZG7P0MjZMHSmsm4pVebY2Mzq2NnKSE2I5IP7LqFnh+rE2fryhLacKPTkTphtDracKKyzz6nzFcx7fwcA897f4VUsCcFn3rx5fPHFF6xZs4YuXbp43W/BggWUlJR4bqdPnw6ileqiCTMSqbU1u2qs3tDYqU1KfpAv1a/9b4CiLCUB2QuKRyjwOUI6rabh7tVH/6fME9PKT3UgkU/XC60iR6gm7jDZyLuq16wVcOBz2PUBXPqb6plk53bB/55SxczWyMhu7fl/11aX89YnhMZ0a0+YTkmqNui1jO1eO8ckz1TFn77cf1GxVB8STgscTqeTefPm8dlnn/H999/To0ePBvc3GAzExsbWurUZ9EYitX6oGqvPI5S9E5IHKgNHL0aPK5Xk7WNrvO4Sa9QHxSMUFxHmvTlkWR7k7PHbhHXBOyKEvNAqcoQu5MIhrTqDMpNn5YPwxhS45s/KGsCmf8LxtaqZ2tqoPWqj1JMP9O8tp7nlnz8y87VNWF25RGmTevHJjjO1hMuuMyV8tz8Xd5StPrHkDQmnBY60tDTeffdd3n//fWJiYsjJySEnJ4fKykq1TQs99AZFCAUiNJazBzr62GNHb4DOo5UqWi8oVWPBEUJeOfa9ct/rqoDaIYgQanvUTKC+6vdKF2pQGjFWFtXuVbHy11BZrIaVrY4u7SOIcbnAt2QV8ovXNvLd/lx+9+ludpwqJqeG6Hl1/fFawqVmSMzNy3eMJDUh8qLn9Xc4rT7vUlv2OL3yyiuUlJQwceJEOnXq5LmtWLFCbdNCD72RCI0/QmMXhJLsVsg7AB2H+H6gbuMVIeQlTyguIsxT1RUoSiqsnrlm9ZL1AyQPVopahIAiQqgt4k6gHvCz2uX1qeNh3AOK6xiUafVf/z/17GxFaDQarhqgfKGVmW21KsncJEYr1XvlZqWb+a/f286p8xW18ofcvyGd4ow+ndeX3KPGkFdq5sXVR8grNTe41lZwOp313u6++261TQs99AYiNM3zCNUbGis4olzQday/Uq9eUsdDxXmlsWw9tIsIo7TKhq0Ztl6Mi3qEzm5TqtyEgCNCqC1zYXn9qY1QfBJu/CcYXKGc3R/Coa/VtbOV8MT1A0mICve6ff7kvnRpX53QbrU7WXckv1blWbhOw92XdicpxuCTJ6bmaxsKp/nq6TlXUlXr3tuaINRBH4FR0/QcIafTSYXFVnfExvkjyn2HAb4frOtY0Gjh5E/1bm4XqfydBrKXUINCqMoE+YeUql4h4IgQ8kKrS5b2RnwP5erovRlKrtA/x4PDBtOeq97ny0fBXKqeja2EDjEG/nrb0Hq3GfRaJvTtwNJZtatevt5zji7tI3j5jpEAZMwaxVM/G0RSrNEnT0xqQqTnte5wWr2ixwdPT31htpprae9t56nP97XJEJngA3pDs4SQ2ebA4YQow4VC6BgY4iCyEU0sDTHQcajXPKH2riaHxQEWQl4HrmbvAJxKLpMQcEQIeaFVJkt7o+bkelul0mOo6yXQc5KyZjoLq/+knn2tiCGd4xjauXp23ZQBHYBqkTK4SxzP3lSd6/DTsfPc9M8fsTmUH4+aITG3B+bAOVODniH3a9z3TQ1l1Rdmq7lmsTtZ/tMJ8krNbTpvSPCC3tgsIVRhUULGERfmCBUeh4SetafN+0LXcXB2e72b3B6h4gpLo+30lQY9Qme2KV75xL4BO79QjfTsFmpPrgelx9Duj1zhsk3K+pbXYMgM6NrKPWQBZteZEnafLeHGYSkM6hzLDUM6MSjlDMO6VIujoV2VxxrACew+U0L6ikyGdI7lo22nWXMwj3C9lr99cwiA//tsD1a7k6sHKkNz39t8iqmDkvlmXy6zxqXWsaFmKCspxsB7m095QnLe1gZ3jvOE2cw2R60wm3tNr1VymNzHf3H1Ea4emExSrG/5TEIrR29QOks3Me+m3Kz09anjESo8DvE9G3/AjkOU7zVLeZ2ye7dHqKhcpdDY2e3QeaT0DwoSIoSE6lyhDYsVEQSK+Ck5DZP+D777A+CErx6F+9Y0OKxQ8E7NMNKqfTk8ek0/UtpH8sjVta/6kmIMzJ/ch3C9hue/OYwTZcbSnrMm9pyt24PIXXb/3NcH6dTOyL+3neFscSUfbz9DRLiO5BgDt4zozNmiSk4UlPPwikwAHnx3O3df2p03NmThamHEg+9uY+5lPXnth+M11rbz5PRB7DlbzP1X9OSlNUdJm9iL1344xvShKfzhhoE8sXKvpwDn1+9t5883Komrzga69wptDL0RAxbMTRRCbo9QZHg9HqFulzX+gB2HAE7I3V/nAi8uwKExm91BmdlWvxByOhWPUM2eb0JAESEkKLh7DO3+SBFB7iqyuK6wewXk7lUaLe58F0bNVtvaFkl9oaX6SuCTYo08cnVfTp2vYMn/jniEzsX44WiB5/HH288A8JevD3rWPt15ttb+NoeTNzZkAeA+hc0Br/1w/II1J3/4z95ar138PyVB9d1Npzxr7v2tdif/79M9AGQXVzHEe6NloS0RZiSc5oTGFI9QraoxSzmUnoOEXo0/YIf+oNVDzu46Qsig1xEZrgtYaMw92b7egavl+cpg2E4+9kUSmo0IIaEat2fo1EZFBAHs+Tdc9jB8eq/yfPUfYeCNDU94FurFW2jJG1tOFNYSQfMm9ebSXgmUmm2cKapkw5F81hzKD7TZzeKhD3bwv/SJPvU8Elo5eiPhTkuzc4SianqEChUh36TQWJgREvspzRjroX1kOEUBEkJugVWvR8g9+iN5UEDOLdRFApBCbdw9hkCpIFv5IHz+EPS+WlmrKIB1f1XPvhZMfRVcDXFh6fvPR3fl0t6JTB3UkXsu78Gj1/QD8HSb1nnJFb1mUDLzJvXmlhGdAbi0VwIAo1Lb1dn3+iEdPcdxH25Svw611volRzOue3sAxvdMYNrgjvRLjma4K8+pe433ZbE7m927SGgl6A2E03whVKt8vtA1IDq+CR4hUMJjuXvr3dQuMnBNFYtcx42vr51G3gFlBEj77gE5t1AXEUJeaDPl8964sJKs5HT1+I0trypxeaHRDOsSx/zJfWolR3vDV+H0+DSlf8qfbxpSa9I9KALqiesG8tjUfkwb0gmAq/orjR0fmNjbs797zlmf5BhPiMvtixrWtV2ttVtGdiHT1fV6x6kiFkwbwDePTODPNyvVbr+/fqBPvYuENobeSJjT0uRkaXdorFay9PljYGxk6XxNOg6B3H3gsNfZ1D4yPHBCqNziOUcd8vYr1WKSixk0RAh5oU2Vz9fHhdPq8w8q/YVAuV+zSB27Wjju/B9fK6kuLH2vdSxXUnXf5GgAhnSJ8wineZOUAbpuAVUzUfu5VQc9x3Tv7x4KOyglro44qrnmvm+oW3XN4/o6CkRoA7iEUFM7S7s9QkZ9TY+Qq2KssaXzbjoOVoZP13NhFxcZFrDQWKHruO3qyxHKOwhJAwNyXqF+RAgJ9VPftHqnvbrMdM9HkFO/S1nwH26xkxRjqLvNJario6q3uQVT76ToWs9rJmrXzDtyb++bHOPxVLlFzLM3D6mz9vIdI5k2uNNFPT4NCTihjaI3EuZoemis3GwjMlyHVltD9JScgXZ1W0T4jLsbdT2jNtpHhnlCWP6mqNxCrFFPmO6Cn2CnUwmNJfUPyHmF+hEhJHjHM63e9WOmN8LYB1wbnfC9NFkMNI31IHnD25gON/FR4Z7zuMXLgE6xddY6xRm9huwaEm2CgN6A3mnBYq0bhvKFeueMlZ6DmJSm2xSdBOExyryyC2gfGU5JAD1C9eYHlZwBS6l4hIKMCCGhYeJ7wOz/Qr/rlfsJv4NYJemWw6vg1GZ17RN8EiA1xUvNMR1NpT6Pj79Em9BK0RvR4MRha5q4KLfY6/YQMmVDbDOEkEYDib3h/NE6m+IiAusRal+fEMp3tbtIasTcNKHZiBASLk7XsXD7+8p96bnq0RsA6/+mnl0CUFuA1MwbulAc1SteAuTFEe+QUAe96/+CvWljVyotttoeIXMpmE3NE0IACfULofaR4VRa7VQ10YPVEIXlFuLrS5TOPwhhUUr/NiFotIk+QllZWcydO5fc3Fx0Oh2bNm0iKirq4i8UalOYpZTUu6vJAI5+pzRalOZfIYFbFAEMTLl4ZVrN/T1rfhAx9R1XaOOEKcUXWnvjZty5Kb8wNGY6p9zHdGqeXQl94NiaOsvto5RE5pJKK8Yw/1ZwFZZb6Nkhup4NzUz+FppEm/AI3X333fzxj39k//79rFu3DoNBrlKbRM2S+pps+HvwbRECRn0hrgvFkXh8hEbj8gg1VQhVWuxEGWpcu5dmK/fN9Qgl9lb6o1UW1VqOi1A8NoGoHCuqsNafI1R4XElHEIJKqxdC+/btIywsjCuuuAKA+Ph49Po24QjzP6njIcxVCq2PgAhXtdD+/yj9PIRWy4XiSPKBhEbjKrrQ2JrqEbIRUdMzY3IJoWZ7hJRWExd+hwVy8GphuaX+HkJNHSArNAvVhdD69euZPn06KSkpaDQaVq5cWWefjIwMunfvjtFoZNy4cWzZssXn4x85coTo6GimT5/OyJEjefbZZ/1ofRsjvgc8+BPc9IpSWn/pQ8q60wE/LlHVNOHiiBdHUBWXRyjMacbhaPww3ooLPUKmbIhMUEZlNAd3V+oLKsfcQsXf88ZsdgcllVbioy7oIWSzKFVjIoSCjuqukfLycoYNG8bcuXO55ZZb6mxfsWIF6enpLF26lHHjxrFkyRKmTp3KoUOHSEpSOuQOHz4cm81W57XffvstNpuNH374gczMTJKSkrj22msZM2YMV199dcDfW6skvodyK8xSOrqGR4OlDHatgMlPQVSC2hYKXpC8HUFVXB4hA1YsdgfGRnZOrrDYao/XMGU3r3TejSFaOc4FCdNxEWHotBrOl/tXCLkn2tfxCBWfUi4qRQgFHdWF0LRp05g2bZrX7YsXL+a+++5jzpw5ACxdupQvv/ySZcuW8fjjjwOQmZnp9fWdO3dm9OjRdO2qZOFfd911ZGZmehVCZrMZs7nadWsymRr7llo/NZOmNa4vJrsZdr4Nlz+irm2CIIQmbiGkcQmhRiYgV1jsRNUUQqXnmp8f5CahV/XcMhdarYb4qHAKypoWyvOGe7xGQvQFQsjd3VqEUNBRPTTWEBaLhe3btzNlyhTPmlarZcqUKWzcuNGnY4wZM4a8vDyKiopwOBysX7+eAQO892hYtGgRcXFxnptbQAk1qJk07bTjGc+5dVm9M3sEQRBqeYSa0F26wmwnomYfIdNZiG1mfpCb9t0Uj8wFJARACBV6mzNWeFz5jJqb8yQ0mpAWQgUFBdjtdpKTk2utJycnk5OT49Mx9Ho9zz77LFdeeSVDhw6lT58+3HDDDV73X7BgASUlJZ7b6dOnm/UeWiU155DpI6D7ZcrjklNw+Bv17BIEIXTxCKGmjdmosNhqe4RMzewqXZN23aDoZJ3lDjEGzpf5NzTmrkKrUzVWeFyZOK8N6Z/lVonqobFgcLHwW00MBgMGg4GMjAwyMjKw28XDUQf3HLJTGxVRVHAETmxQtm15Dfpfp659giCEHq5k6SZ7hGr2EbJZoDzPf6Gxdt2UEnpzmZIz5CIx2sCZogr/nMNFYbkVrQZijRckS0vFmGqEtPRMTExEp9ORm5tbaz03N5eOHTsG9Nxtfvr8xYjvAcPvUO4TekFkorJ+fE29c3sEQWjjuDxCRk3jJ9BbbA5sDmf1iI3yPOU+xk+/A+7BrSW1IwCJ0eEUBMAj1D4yvPbwWICiLGgvPYTUIKSFUHh4OKNGjWL16tWeNYfDwerVqxk/fnxAz52RkcHAgQMZM2ZMQM/T4inMglcuU66m3GS+r549giCEJjo9To2+SR6hCotSFRxlcHmEyvOV+6gO/rGtfTfl/oLwWGK0gYJS/+YInS+z0C7yAm+Q06mUzreTnFQ1UF0IlZWVkZmZ6an8ysrKIjMzk1OnlMS19PR0Xn/9dd566y0OHDjAgw8+SHl5uaeKLFCIR8hH6us2vXuFJE0LglAHp97gKZ9vDOUW5fvEkyxd7rrwikr0j2HRHUEXXidhOiHaQKnZ5td5Y/llZjpc2MurohBsVdUDrYWgonqO0LZt25g0qXqIZ3p6OgCzZ89m+fLlzJw5k/z8fBYuXEhOTg7Dhw9n1apVdRKo/Y3kCPmIO3HaVolSPeZUqjlO/AA9J6psnCAIoYRTZ2iSR6jS7RFy5wi5hVCkn4SQVqsMOi2+0COkJDSfL7fQuV2EX06VZ6oi+cKO7KYzyn2cCCE1UF0ITZw4Eaez4S6j8+bNY968eUGySCEtLY20tDRMJhNxcRcfXtlmqZk4bS6Fr3+nrGd+IEJIEIRaOPVGpY9QI4VQudntEaoRGjPENr+rdE3ad6tHCCmem4JSs9+EUH6pmSGdL/hNKTmr3Md28cs5hMahemhMaAW4E6d7TKguqz/wuVKBIQiC4EZvaFL5fIUrNBblCY3lK+M1/Em71Do5Qu4Qlj97CeWVmuvxCJ0FbZj/cp6ERqG6RyhUkdBYIynMgtcmVucLWSsUMTT8juCcv8oEh76Co/9TSvmdTohJVqowRs9RRJpGc/HjCIIQMDRhERiwYm1kjpA7WdpTPl9x3v+ioV032PdZrSV3rx9/CaFys40ys42k2AtyhEpOK60ApIeQKogQ8oKExhpJvUnT/w6OEDrwBXyZDmW12yxQlgPndsH+ldBlDEx5urr5oyAIQUejNyoeoUYLIeWCNNJQwyPkdyGUClUlys2ofOeH6bS0jwzzWwl9nqsCrU6ydMlZiJOwmFqI/BT8Q81u025O/KBUQwQKSzl8ci+smFVbBIXHKG3qNTW60J7ZCm9Nh53vBs4eQRAaRBNmwKCxYm5i+XxEWI0cIX9VjLlxCxF3vo6LhGiD3zxCeaYqAJJi6gmNScWYaogQ8oL0EWok7qTpm16BEb9U1hw2OLwqMOezmWHFnbDno+q1vtfCnK/h/2XBowfhiTy49V+QNFDZ7rTDf9Jg7XNK6EwQhKCi0RsxNqFqrLRKGa+hczchLD/vfyHkFiKm7FrL/myq6PYIJdcJjYlHSE1ECHlB+gg1AXfStFsIAez/3P/nsdvg47lw7HvleXgM3Pwa3P4hdLsUdK5mZTo9DLkNHtgA4x6ofv3aZ2HTP/1vlyAIDRMWQaS28UKozGwj2ugKizmdgQmNxXQENNWl7C782VQx11RFRJiOaEONrBSHHUqzpXReRUQICf6nyxilQRkoYsVc6t/jr/p/cPAL5XFYJNz5MQyb6T0ZWquDa/8CV/+peu27hXB6i3/tEgShYfQGjJrGJ0uXVdmqxYOlXMlH9LcQ0oUpYuiC0FjHWCO5rpBWc8kvNZMUa0BT87uqLE/xnkvpvGqIEBL8T/FJ6NBXeWw3w5Fv/XfsI/+DrW8oj3Xh8Iv3IPUSpWot833lvuZjNxoNXPYbuPwR5bnDBh/drbjYBUEIDnojRmxN9Ai5PL3ucT7+Lp8HJTx2QWgspV0EZ4srL9rvzhfySs0kXZgobXIJL/EIqYZUjXlByuebSGEW/HN87Qqy/Z/D4Fubf+zKYvj8oern056DXlfVPqfO9SVjNyuPr/o9DPiZErYDmPQEnNoMp35SvoA+fwhul9loghAUXB6hxlaNlZptRBsu6CodiJ47sSl1QmMp7SIw2xwUlltIiDZ4eaFv5JVWkXRhD6ES1/kkWVo1xCPkBckRaiL1ldEf+Q6slfXv3xi++b0SSwfoOQlGzal7TrtZubkff7dQEUlu75BOD7ctq/4SPfRlda6RIAiBxV0+31iPUM3QmL8HrtYkrkud0Ji7o3R2cfPDY7mmejxCJWeUEH9E+2YfX2gaIoQE/1KrjN7138tarjQ5bA4nf4JMV+m7IRZufFkJdxVmKV+Mbk+QzgD6C664bJWKWHIT2wmueab6+Te/lyGxghAM9EYMGkujy+fLzTaiDa7QmGfOWLyfjaM6NFYjDJbSTvk+OVvc/Iu5PFOV99J5afiqGiKEBP9Ss4z+ur9Vrx/5runHdDrh+xrC5eo/Kldu7pDYdwur19M2w683KY/dgigsUhmoWDNvaMgMSBmhPM7bDzvfabp9giD4ht7YpM7SZWYbMcYaHqGI9tXVof4kNkW5cKsq9izFR4Vj0GvJbqYQqrTYMVXZ6imdPyP5QSojOUKC/4nvodyqTEqFl8PmSpj+a9OOl7UeTro8Sgm9lfL8wizYsLh2SCyqQ3Uu0GXzldygUxsVEfTejOocInfe0NRn4c1pyv7f/1nJYzLENOutC4LQAHoD4c6m9RGqDo0VBG4mV82miq5QlUajobMrYbo5nC2uAKBL+8jaG0xnocOAZh1baB7iEfKCNFT0A8ZYJVQGUJQF5481/hhOJ6yp4Q2a8Lgyl+eVS2HH29XrYZHV53Lj7mtUcrq2YPpuofL6mE4w8EZlvTwftr/VePsEQfAdvZHwJozYqNVHqDwfIv3cTNGNl6aKndtHNNsjdLpIeX2X9hd04C85Kx4hlREh5AVJlvYTvadUP25KeOzYaji9WXncoT8MvkXx8lgrqvcZeRc8+FO1N+hCUscrQqkm1grlOJN+X722eanSrFEQhMCgNxDmbFyytNPpVISQ2yNUUeD/rtJuopNBo61bORbXfCF0pqgSvVZTe/K8zaKMB5KKMVURISQElj7XVD9uSj+hDUuqH4+eC7tXKKEud0K2PgIuT/cugkDZ9uBPSt6QO6laH6EIpA79qm0sOQ0H/tN4G4U2y/r165k+fTopKSloNBpWrlyptkmhTVgEOhzYrb6PrKiyOrA7nLVzhAIVGtPpFU/xBZVjSi+h5lWNnSmqoFM7Y/WYEIDSc4BTPEIqIzlCQmBJGuCqxDirVI5ZKiA88uKvA8g/pAxuBWjXDb57UglxhUXCrI8U4ZI6vmER5Ca+R+28oZqvGz+vWqT99DIMukUqOASfKC8vZ9iwYcydO5dbbrlFbXNCH71yIeK0+S4qSs1WgODkCEH191UNUtoZKSgzU2W1YwzTeXlhw5wtqqRLu3ryg0C6SquMCCEhsJzZqriaQcnPOfED9J3q22u3Lat+3GUM7P1YeWytUETQ8Dsab487kbsmPa6E5CGQuweydyihuNRLGn9soc0xbdo0pk2bprYZLQdXJafT6rsQKqtSwtXRBr1rzlgAQ2PgaqpYfy+hnJIquidGNemwpwor6N/xgmKMEukqHQpIaEwIHIVZ8NZ0RbS48TU8ZimHzA+Ux3ojXPpQ7XDYhYnRTbHNXU6v0cCl86q3bXqleccWBKF+9DU6v/tImdklhIx6qCoBhzWwQqiepopd4xVPzonz5U06pNPpJCu/nJ4domtvKDkNxjipVlUZ8QgJgePURrjQBX50tW+v3fsJmEuUx32uUXr9NDYc5o2aIzn0EUrfo0G3wLd/gPI8OPQVVBQGpmGb0KYxm82YzdUiwGQyqWiNCrg8QppGhMbcHqEYQxiUu6q5ghEaczo9IfKUdhEY9FqO55czsV/jD1lQZqHUbKPHhd4k01kJi4UA4hHygpTP+4HU8TW6PLtybnwto9/6r+rHh1bBygeVXkDNFUFQeySHu+u0PhyG/lxZs1tgz8fNO4cg1MOiRYuIi4vz3Lp27aq2ScHF5dVtjBAqrekR8gxcDXBozFYFlUWeJZ1WQ4/EKI4XlDXpkFkFiiep54VCSErnQwIRQl6Q8nk/EN8DZv8X+l0P/a+vXr/YbK9zu+FcpvK4XSo4XBUmF47KaCo1x4DoI6q7TvecWL2Pe5yHIPiRBQsWUFJS4rmdPn364i9qTbhCY9rGhMZcHqEogy6wc8bceJoq1i6h79UhmmN5TQuNHc8vQ6uB1IQLk6XPSOl8CCChMSGwdB0LU5+BjLHVa/s/h7H3eX/Nrg+rHw+/Ezb8vTqM1dzcIKgeA3Jh12l9BCQNVMJw53ZBzl7oOLj55xMEFwaDAYOheRPMWzQuD3GjhJDZRrhei0HvEkIabWAHlHqaKp6FTkM9y706RLHlRGGTDnkot5TuCVHKe6hJydnqpq6CaogQEgLPqY1KuMnN6c1gM1cnTtbEboM9HymPdeGKYBr687ol783FXT2W+X7tMFnHoYoQAmXbtc/653xCq6SsrIyjR496nmdlZZGZmUl8fDypqakqWhaiuP7mNY0UQtWl8+chMgG0AQxmRCeBVl/HI9SvYyz5pWYKyswkRjdOzB44Z6J/pwsSoi0VUFkoOUIhgITGhMBTK1cIpWLk1Kb69z2+RklYBkgepFSJuEdl+EsE1bGtRpjskgcVAQZK80a71f/nFFoN27ZtY8SIEYwYoQzwTU9PZ8SIESxcuFBly0KUMOVvTevwvaFi7TljAWym6Earg5i6JfSDUmIB2JfduAR3p9PJgXOlDOgYW3uDe4yH5AipjgghIfC4c4U6Da9eO/q/+vfd9UH14+ydSnWXe2J8oGz79Ua46RXlPmV4dT5TRcHF85mENs3EiRNxOp11bsuXL1fbtNDE5RHS2RtRNWa2XiCEApgo7Sauc50S+tT4SKINevY3UgidK6mipNLKgE4XCiGXx0lyhFSn1QuhQ4cOMXz4cM8tIiJC2uCrQdexcOeneKrH6iujryqBg1/WXvNXgnRDuD1OoITDekys3ibVY4LgP1yeYX0jPELlZnvtgauB9ghBvd2ltVoNA1Ni2XO2uFGH2nFKqT4b2jWu9oYSEUKhQqvPEerXrx+ZmZmAEs/v3r07V199tbpGtVWiEqDzSDi7HfL2Qd4BZQSHm32fVfcd0ujAafdfgvTFqNlbSGcEQyyYTYowa8xYEEEQvKPV40RLOFZsdgd63cWvxUurbMR4Bq6eVwoaAk1cZ6Ur/gWM6d6eFVtP43Q60fg4hmfbiSK6JUSSFGOsvaHkrNIGIMxY/wuFoNHqPUI1+fzzz5k8eTJRUU1rkS74gaEzqx/veLv6sdNZu6Pzdc9Xh6sCkRt0ITV7C9mrlKRpAGs5HP468OcXhLaARoNdZ8CABYvdtwn0ZWarCh6hLkoOj6O2jWN7JFBQZuF4ge9l9NtOFjKqWz1VbqYzkh8UIqguhHyZ3pyRkUH37t0xGo2MGzeOLVu2NOlc//73v5k5c+bFdxQCx5AZ1RPgd32gVI8BHPkO8g9W7/fN//m3SuxipI5XhrmCcj9qdvU2CY8Jgt9w6AwYsGKx+SaESqtsRBn0iiipOB+8HCGHtbpvkYtR3dqj12r48WiBT4fJK61i71kTl/aqx+YS6SodKqguhNzTmzMyMurdvmLFCtLT03nyySfZsWMHw4YNY+rUqeTl5Xn2GT58OIMHD65zy87O9uxjMpn46aefuO666wL+noQGiIyHgT9THlcWwcEvlMc/vVR7v2DkBtUkvgc8+JPihXrwJxh8K8R0UrYd+a5Wl1lBEJqOQ2fAqLH4LIRKKq3ERYQpf4NOR3CEUGyKcm+qXUIfbdBzSc8EvtmX49Nh1hzMQ6OBSf3q8WKZpKt0qKB6jtDFpjcvXryY++67jzlz5gCwdOlSvvzyS5YtW8bjjz8O4MkBaoj//Oc/XHPNNRiNDcdj2/wsoGAwcnZ1r6Adb0N8T2UqfU2ClRtUkwsn0w++FTa+rFwZ7v8PjLo7uPYIQivE6fIImRshhNpFhAWnq7Qbt6em5Cx0HlVr09TBHXnq830+9RP6Yvc5xnSLJ6G+/UrOVnexFlRFdY9QQ1gsFrZv386UKVM8a1qtlilTprBxY+O8Bb6Gxdr8LKBg0P1yRfwAHF8Lb9bw0l31RHBzgxpiyG3VjzM/8L6fIAi+ozf6LITsDielVTbFIxRMIRSVqITwL6gcA5g+tBN6rYYVWxsej3LyfDk/HClg5ph6fkOqSsBSKhVjIUJIC6GCggLsdjvJycm11pOTk8nJ8c01CVBSUsKWLVuYOnXqRfdt87OAgoFGAyN+Wf3cWqHcRybC+HmBa57YWDoNr65QOb0JCo6oao4gtAr0ikeoymq/6K6lVUpD07iIsBoDVxMCaZ2CRqOExy7oLg3QLjKcW0Z2ZtmGLEoqvTdcffF/R0iMNnDdkE51N7qPKx6hkCCkhZC/iIuLIzc3l/Dw8IvuazAYiI2N5Z133uGSSy5h8uTJQbCwjXF6i9JZuuslyqyv+F6QMlLxBLk6z4YEGg2MuLP6+c531LNFEFoLYREYNFYqLBcXQm6hoXiECkAbBsa4i7zKT8R1qdcjBDB/cl8qrXae+nwfTqezzvbVB3L5dOdZHrm6DxHhuroHKHZdYMdJxCEUCGkhlJiYiE6nIzc3t9Z6bm4uHTt2DOi5Zfp8gCjMgremw5FvlAnzs/8Lc76CPtfUGnCoOoVZSnPFrpcoc4dACY/JyA1BaBbaMCNGLFT64BEqrnAJociw6tJ5H/v3NJvYut2l3XSMM7LoliF8tvMsD32wk5Pny3E6nZSZbSz/MYsH39vB1QOTuX2Ml3lzJaeV75WYwP6OCb6herJ0Q4SHhzNq1ChWr17NTTfdBIDD4WD16tXMmzcvoOfOyMggIyMDu/3if6xCIzi1sbppoq0Kvvm9MtJi3V+g0zDoHwJVfTWbK+ojoMcEOLZamYF29H/Qz3tyvyAIDaMJM2KgnMqmeISighAWcxPXGU5s8Lr5xuGd0Wg0LPzPXr7YfQ6tBty+odvHpvLk9IFotV5EW8lpRWhp6/EWCUFHdSF0senN6enpzJ49m9GjRzN27FiWLFlCeXm5p4osUKSlpZGWlobJZCIuLkiu2LaAewCrrUq5Ijr0peIdAvh4Dvx6k/r5QTWbK9oqoUN/RQgB7HhHhJAgNANdmBEDFgp98AjVFkJ5wUmUdhPbGUrPgcPuVbD8bFgKk/sn8dOx8+SVVhGm0zK+ZwJd4y/Sib74NLTz4i0Sgo7qQmjbtm1MmjTJ8zw9PR2A2bNns3z5cmbOnEl+fj4LFy4kJyeH4cOHs2rVqjoJ1P5GPEIBIr4H3PYmfHh79ZrDptzbqhQRorYQck+kd3uERs+BfZ8qX4qHvoKcPdBxiLo2CkILRRtubFSOkE6rUYauluVD++6BN9BNXBdlzE9pToP9fqIMeq4e2Mjfo5LTkNC7mQYK/kL1HCFfpjfPmzePkydPYjab2bx5M+PGjQu4XZIjFEA6j4R+11cLIDd6Y/B7B9XHhRPpE/vAJQ+6NjqVcF49CZKCIFwcjT6CCI3NpxwhdzNFjUaj5AhFB9kjBF4TpptF8WlJlA4hVBdCQhskpiNMfcYzidqTjHzbm+p7g9y4J9K77Rl7P7TrpjzOWgdHvlXPNkFoyeiNRGgsPpXPe7pKgytZOinAxtXAXdpe4ucWKjYzlOVAOxFCoYIIIS9kZGQwcOBAxowZo7YprRN3iAxg+ksw4XHFUxSqhBnh6qern3/7hFSQCUJT0BswaKw+JUufL7MQHxUO1iowmyA6iEIoop1Sql900r/H9fQQEiEUKogQ8oKExoJA55GKAOo9GSYtCM1SUncZfWEWDLwJurrCsgWH4cNZYC5T1TxBaHHojRix+hQaK6pwCaFy12zJYCZLg5KTVHTCv8d0e5gkWTpkECEkqEdMx9AVQFBdRr/yQeW+6ARc+xelqRso1W5vToPiU6qaKQgtCr2BcHxLlj5fbiE+MlxJlIbgeoQgMELI3UxRxmuEDCKEvCChMaFOGf2pjYoX685PwOBqqZCzG/4xCr58DEzZ6tkqCC2FsAjCfRyxUVRuIT66pkeoFQihktMQnayE24WQQISQFyQ0JnjK6EG5d1e09ZwA93wLcS7Xtt0CW1+Hl8fCvs/UsVUQWgp6A+FOs085QoUej1AeoAnOnLGatO+h5PT4Mx+w6KSExUIMEUKC4I0Ly+hrVrQl9Yf718Hlj0BYlLJmKYWP7oavHwebRRWTBSHk0RvRY8dsafhvxGyzU2a2VecIRSaALsit79p3V3oJ+bNyrPCY9BAKMUQICUJDXFhGX5PIeJjyFDy8G4bMqF7f/Ar8d770GhKE+nC1zbCZqxrcrahc8cLER7lyhIKdKA3VDRz9GR47f1QZNC2EDCKEvCA5QoLPRCXCLa/D9YtBF66s7Xofdrytrl2CEIq4hJDdWtngboXlisfI4xEKZjNFN3FdQKPznxCqKITKIkgQIRRKiBDyguQICY1Co4Ex98DNS6vXvvotnNulnk2CEIq4hZClYSFUUGYGanqEgpwoDaALU8RQYZZ/jld4XLkXIRRSqD5rTBBaDIVZSuVY6njvHbAH3wonNyrJ03azkjP04EapEBEEN66/BYelosHd8koVIdQhxqB4hDoNDbhp9RLfw38eofPHAHC274HNapVZls1Ep9Oh1+uVESzNQISQIPiCu6eQexDrhcnTNZn6DJzdDtk7lCvATRlwxaPBtVcQQpVwpbjAcZFmpHmlVcRFhGEM07nGa6gQGgOlcuyMnyID549iiR/AudwiKioCMMOsDRIZGUmnTp0IDw9v8jFECAmCL9TXU8ibENIb4MYMWHoZOB3ww2IYfifENHJCtSC0RsKjAdBaK7A7nOi09V/N55nMJMUYlNL1yqLgN1N0kzQAMt8Du63ZVWuOwiyyRv4endVKSkoK4eHhzfZmtFWcTicWi4X8/HyysrLo06cPWm3Tsn1ECHkhIyODjIwMcV0KCqnjldwGW5Vy7+4p5I3kgTBqDmz7F1jK4Ps/wY0vB8dWQQhlXEIoSlNJWZWNuMiwenfLK60iKdbg6iGE0oRQDZIGKL3CCo9Dh77NOpSlrAhHRHu6pqQQGRnpJwPbLhEREYSFhXHy5EksFgtGY9NSECRZ2guSLC3UIr4HzP4v9Lsebn5N8Qjt+w98cAec3lL/ayb9X3UH6p3vSuK0IIAnNBaFGVOV90aFikfIWN2xPTYlGNbVJWmgy6D9zTuO0wklZ0Eb1mTPhVAXf3yW8q8hCL7SdayS//PZ/cr8sY/ugkNfwlvT668qiUqECb91PXEqjRalt5DQ1nEJoUhNFaVVNq+75ZW6QmMmVy6NWkIoKlHJT8o70LzjmLLBWqZUogkhhQghQWgMNXOF3NiqlPX6GHt/dRfZUz/Bno8Da58ghDpaHQ69kWgqKfXiEXI6na7QmFERQmGRYGwXXDtrkjSg+R6h3H3KvQihkEOEkCA0BneuUE30ERDXFTLfr+sZ0ocrE+vdfPcHuEi1jCC0esKjicTs1SN0vtxCldVB53YRiiclNkXp1aUWSQOb7xHK3Qth0aBtmam5d999NxqNBo1GQ1hYGMnJyVx99dUsW7YMh8MBQGFhIQ899BD9+vUjIiKC1NRUfvOb31BSUlLneG+99RZjxowhMjKSmJgYJkyYwBdffBHstwWIEBKExlEzV2jG28ocslkfwXszlHDZy2Ph7Rtr5w31uRr6TlMel56DtYvUsV0QQoXwaKI0VZSa6/cInSlSvK5d2kcoHqHYzsG0ri5JA5QZYdaGx4I0SO4+SGzZM8auvfZazp07x4kTJ/j666+ZNGkS8+fP54YbbsBms5GdnU12djbPP/88e/fuZfny5axatYp77rmn1nEee+wx7r//fmbOnMnu3bvZsmULl19+OTfeeCMvvxz8opKWKU0FQU26joXb369+nvl+dbjMYYHja+HUJvj1puoS+2ufhWPfK00WN76s5Bxc/nCwLReEkEBriCZG490jdNYlhLq2j1Q8QmrP5koaqLTCyD8IKcObdozsndDvZr+aFWwMBgMdO3YEoHPnzowcOZJLLrmEyZMns3z5cu69914++eQTz/69evXimWee4c4778Rms6HX69m0aRMvvPACL730Eg899JBn32eeeYaqqirS09O58cYb6dq1a9Del3iEvCCzxgSfqS9cdmHeUHxPZUCrm/89Cd8/U10RIwhtifBo2um9C6EzRRVEG/TERuirQ2NqkjxYCWmd3da011cUKh6ljoP9a1cIcNVVVzFs2DA+/fTTereXlJQQGxuLXq/4XT744AOio6O5//776+z76KOPYrVaa4mpYCAeIS+kpaWRlpaGyWQiLi5ObXOEUMYdLlvzDJz4SfEK6SPq9hoa/2vFc7T6j8rz9X9VbnFdlWZxxnbQcQgMuU354pVGa0JrJTyKWG2F1/L5M0WVdGkfgcbpCA0hFB6p/E2e3gpj7m3868/uUO6TBkFx3d50lRY7x/KDnzvYq0M0EeG6Zh+nf//+7N69u856QUEBf/rTn/jVr37lWTt8+DC9evWqtxN0SkoKsbGxHD58uNk2NQYRQoLgD7qOhbv+U3seWXk+fPN7JQTWdayy3xWPAhpY/XT1a0tOKzeAY6vhxyXQYQBMXgj9r/N+ztIc2PYmjJ4DMR0D9MZ8IFTsEFoO4VHEaIspLLPUu/lkYQVd2kcqzRSddvVzhED5Gz76v6a99vQmiEyAdl2h+ESdzcfyy7jhHxuaZ18T+OKhyxncufkX+k6ns06HbJPJxPXXX8/AgQN56qmn6uwfSogQEgR/Et9DuRVmKf2FbFWKuKmZL3RFOvS4Eg59rYimnL1gvqCqIv8AfHg79L9BqTprV0+8/OwOWPcX6DSsYcHUWBorbAJlh9B6CY8mVltFvmvC/IUcyytj+rAU9Zsp1qTbZbDlNSg+Xf/fY0McXwfdr/Dq5e3VIZovHrrcD0Y2jl4dov1ynAMHDtCjR/XIodLSUq699lpiYmL47LPPCAurbhnQt29fNmzYgMViqeMVys7OxmQy0bdv8zp4NxYRQoIQCE5tVEQQVOcL1ZxN1mW0cnPjsENZLhz8EnZ9WJ2LcPAL5Sp0fBpc/ggYYpT1wiz4eI7y+OM5tYVWc3ELm3apUHyqYUEUSDuE1otBqRrLM9UVQuVmG2eLK+mTFA0mV4gkFDxCPSeARgvH18DIu3x/XZVJGcI8/Havu0SE6/zimVGD77//nj179vDII48Aiido6tSpGAwGPv/88zpjL37xi1/w0ksv8eqrr9ZKlgZ4/vnnCQsL49Zbbw2a/SBCSBACQ2Nnk2l1ypdseQHMfBdO/girFkB5nnKMH16ALW9At0uh6xilp0lNofXlo0qJr1YPYRFKA7qwCOXceoNybPfVaE23tEYDaKofl+XDNwuU558/pIQlItpBQh9lu+c4GuX+6Pe17djxNvS5psbncInkOgl1McQQ5awgr7SuEHLnyvROioaz2cr/4cj4YFtYl4j20HkUHP6mcULoyLfK31GvyYGzLUiYzWZycnKw2+3k5uayatUqFi1axA033MBdd92FyWTimmuuoaKignfffReTyYTJZAKgQ4cO6HQ6xo8fz/z58/ntb3+LxWLhpptuwmq18u677/Liiy+yZMmSoFaMQRsRQn//+9954403cDqdTJkyhRdffFEm/gqBxZ1AvWEJ9JlaN1eoPmqGmIbcBr2nwPq/weZXwWFVwmeHv1ZuF3JstXLzJ05XUueqx31/zYbFys3NwkLQND8ZU2hlRLQn4v+3d+9hUZxn/8C/nAU5i5wEBbEaiQp4QG3fSyBikBAbrdqYWk8YNCn2F4Oh1VTENrEmalKiwZDXqJjkSrTmLcQYY1UENVFR0U1E0ZiK9YBAFJGDclrm98c4yy7scpBld2G+n+vaC5l5dvae2WW897mfeUZZgbvVtWhQNsLSoukC5islYiIU4G4PXLxh/MkU1QU+B2S9Ifby9HJs33Mufgl4hwAuA4CaTsxDZAL2798PLy8vWFpawsXFBUFBQdi4cSPmzZsHc3NznD17Frm5uQCAQYM050wqLCyEn58fACAlJQUjRozA5s2bsXLlSlhYWGDkyJHIzMzElClTDL1bPT8R+vnnn/H+++/jwoULsLKywoQJE3Dy5EmMH9/GN3SizpLuTbZ5nPaxQup0lZii1gBjFgI5b4vfLB+WGXYfiLqCrQusGqphITSgrLpOvJXGI9/fLMdAt96wt7EU/y5cBxox0GaenAYcSAIuZACj5rXdvvqO2IP01Mquj62LpaenIz09vdU24eHh7R4IHRsbi9jYWD1E1nk9PhECgIaGBtQ8ysTr6+vh7u5u5IhINnSNFbpxSuwtknqJWhtT5DoQ+M2HYknr58viVP2A+K302rfA0Cnit2ahEWhsEJ9fVw3UPxQncGyoFdcJjY+CelTWEgSxl+nGKfEqtdKLYiz3b4iTRKobEiPOgdKoBCA8Kq89+llXBdz+Qbz039qu2QEwkW/yZFpsXQAATqgWb66qlggpbpQjuL+z+EvZVcDP8IOIdXLyAYZEAyc/AELmAG3d+fzMdvFvLeT3homPHovRE6GjR49i/fr1yMvLw+3bt5GRkYGpU6dqtElNTcX69etRXFyMoKAgbNq0CaGhrZQY1PTt2xevvfYa+vfvD0tLS7z00ksICDDyLKUkH83HCln1Fm/Bce07sdwl9RK1Z0yRmRng/oT4kIxpxzeq1q4Cu7QPyHlL7Lq/mg2ELgKGPCMmQhbWgLJOjCdqjWZPFi+Z19CZc5QsPUqEnM2qcKv8oWqgcE29EheLKjBzlA/Q2AjcK+zYeBxD+NUrwLYo4PvPWk9wqkqB4xuBUfNNY4wT6WT0maWrq6sRFBSE1NRUret37dqFhIQEJCcn4+zZswgKCkJUVBRKS0tVbYKDgzFs2LAWj6KiIty7dw979+7FtWvXcOvWLRw/fhxHjx411O6R3Knfm2za/wIZi8RbcDQ+mkhOvfdHajfvK/1eeSWNPZImdZOol+OOvSP+/GKBmPyELQeeTRGXzdguDrzOXiv2/GSvBX7K0r5NGWrPOYqaeZQI+faqxaXblarFJ67eRUOjgFD/PkBVsfj3YUqlMUC8AGD4b8WLGUovaW/TUAv834vil4mwPxs2PuowoydC0dHRePPNNzFtmvZ7sLz77ruIi4vDggULEBgYiLS0NNjZ2WHbtm2qNgqFAvn5+S0e3t7eOHToEAYNGgRXV1fY2toiJiYGJ0+e1BlPbW2taqS7+oh3oscm3Zusvrqp/CVR7/2R2rU2oFqbymIxOaksbrnsxinNsUdlhU1t1MtxkoYa4O5PQMQKYNBEMSHqN7IpmbqYKf786v+13Ka2OGSgPecoasZW7CF50kWJgttN59jDBaXwcbHFYA978XMImOZ0DDHviDPCb4sCTm8Fqu+KyxtqxXJ1eox4v8GZ29kb1A0YPRFqTV1dHfLy8hAZGalaZm5ujsjISJw4caKVZzbx9fXF8ePHUVNTA6VSiZycHAwZMkRn+7Vr18LJyUn1MPRlfNSDqd+TzNwKGBiun96fymIxOaksbkpGpB6b/P9rOfZIatNnUMt7pKknZg6eYkJU/7Blz1Fjg+Y2dcXRw5MifZyjZMnWGQDwC8cGXCoWE6HaBiW+yS/GpEAP8are0kvi34mp9QgB4hVjC74Wvyx8nQCsHwj8vR/wd28xCaqpAObvFSdOJZNn9DFCrblz5w6USiU8PDw0lnt4eODSJR1dks2MGzcOzzzzDEJCQmBubo6JEyfi17/+tc72K1asQEJCgur3iooKJkOkH+qX1EuDpKWEoTNjbaTZd6WfR94Su+QB4My2prE+FjZAkQKw9xDbDIkWy147XxBv/XHsHfH35omZtp4jiXripC2OIdE9egxRR89RtbW1qK1tmjtHtj3OljaAVW8E2Nfj2qUH+O/dauQWluFOVS1mjx0gtvm5AHAbDFhYtb4tY7F1AWZsA6LWiuPrqu+IJWSvIMB7ZNsDqclkyOKdWrNmDQoKCnDhwgVs3Lix1TmEbGxs4OjoiE8++QTjxo3DxIndfxIsMiHNy1/axu90pDel+WX3RefEfyvrmn6OfjSgemIycOrDpnEN6jez7PtoALa2Wxmo92RJzB99h5ISJ11xSEkRAWCPswZbFzzh1AAnWyv8fV8B1u4rQMxwL3EiRUD8nKpfGGCqHDyAoFnAL5eIU134jGYS1M2Y9Lvl5uYGCwsLlJSUaCwvKSmBp2fXfsuMj4/HxYsXcfr06S59HZKx5smDNNZG1+BmoGWS1Pyy+32vaba37AX4h2kuO7Sq6TWlgdF9nxB/auu9cfUXEx7g0U1jAUT+TfwpJU664mg+LqmH6eg5asWKFbh//77qcePGDUOFanrsXGFVcxevRQ1BVkEp+rnY4o2pw8R1giBO59B3qHFjJFkw6UTI2toao0aNQlZW04y5jY2NyMrK6vIJEVNTUxEYGIgxY8Z06euQjGmbO0hXciRRH4cDNBt3ZNk0dkcyY7s42Dl0cdMd79XH90gDo71GiD91lbGa9xzZ99VcrysO9TFEPVBHz1FSj7P6Q7acfICKW5gzbgDOr47Cnvj/gWvvRyXde4VATTngHWzMCEkmjJ4IVVVVQaFQQKFQABCn4VYoFLh+/ToAICEhAVu2bMGOHTtQUFCAl19+GdXV1ViwYEGXxsUeIepy6smDNNameXL0437NHqDm43DUe2ue2dC0PWmMkKO3mNx4B4uTK6przz3QdLHro9mDpCuOzrxGN2Gsc1S35+QD3L8JQLzpqLm52pAFqTe03ygjBEZyY/RE6MyZMwgJCUFISAgA8aQSEhKCVavE7vvnn38eGzZswKpVqxAcHAyFQoH9+/e3GJyob+wRoi6nnjxIY22aJ0eWvcQeoJ+ygH1/AnbPF9ep9xZJvTXeIU3bm7ha87Wa99iov2Z7OHhqltA8nmzZg6Qtjo68RjdlrHNUt6eWCLVw8wzg4s9Lz03Mzz//jJdffhn9+/eHjY0NPD09ERUVhe+++w4A4OfnBzMzM+zcubPFc5988kmYmZmpbtMxa9YsTJ48WaPN/v37YWZmhtWrV2ssX716Nfr3798l+wSYwFVj7bk3yZIlS7BkyRIDRSSKj49HfHw8Kioq4OTkZNDXJhmRkgfpp5Qc7XwBmPxW0w1P9y5tGgANaE7EKCUp6kmJ+xPae2x2viCO7znwuvaB0bpIl9IDYhmto/vVwxnjHNXtOfYDaiuAmvtAr2bn2GvfihMXkkmZPn066urqsGPHDgwcOBAlJSXIysrC3bt3VW18fX2xfft2zJo1S7Xs5MmTKC4uRu/evVXLIiIi8Nprr6GhoQGWlmIqkp2dDV9fX+Tk5Gi8bnZ2NiIiIrpsv4zeI0Qka9qSGCl5qCppKpNJSZDUm6Ntvh/1bdj10d1j03x8j75o2xciXZweXTF3/5bm8soSoOQ8EPCU4WMincrLy3Hs2DG8/fbbiIiIwIABAxAaGooVK1ZoTEkze/ZsHDlyRONCgG3btmH27NmqhAcQE6GqqiqcOXNGtSwnJwfLly9Hbm6u6v6gNTU1yM3NZSJkDCyNkUFoS2KkhCLgqZaXrUt0lZzak4w0H9+jL+r7wqSI2uL8qNRRdlVz+U+HxJ8Dww0aDrXO3t4e9vb2yMzM1JgLqzkPDw9ERUVhx44dAIAHDx5g165dLe40P3jwYHh7eyM7OxsAUFlZibNnz2LmzJnw8/NTTUh6/Phx1NbWdmkiZPTSmKliaYyMRr0MJZWzJNLVWLpKTurP1bZOGt8zqIvnx2otDiJA/IzYewBFZ4GhzzYt/2EXMOB/AHt348VmaHUPgDs/Gv513QYD1nbtamppaYn09HTExcUhLS0NI0eORFhYGGbNmoURIzTL5bGxsVi2bBn+8pe/4IsvvkBAQACCg4NbbDMiIgI5OTlYsWIFjh07hsGDB6Nv376YMGECcnJyVOv9/f0xYMAAfeyx9n3rsi0TUedJCY9qdmhrzbFCHcHkhEyJmRnQbzRwU+3K3Lv/AQqPAr/eZLy4jOHOj8D/hrXdTt8WHenQFAXTp09HTEwMjh07hpMnT+Kbb77BunXr8NFHH2H+/PmqdjExMVi8eDGOHj2Kbdu2tegNkoSHh2Pp0qWor69HTk4OwsPDAQBhYWH48MMPAUCVEHUlJkI6pKamIjU1FUql0tihEIlXgR14XbwjfPl1lpyoZ/AZLd7apf6heHuKnLXiZ3v4DGNHZlhug8WkxBiv20G9evXCpEmTMGnSJCQlJeHFF19EcnKyRiJkaWmJOXPmIDk5Gbm5ucjIyNC6rYiICFRXV+P06dPIzs5GYmIiADERio2NRVlZGXJzc7F48eLH2r32YiKkA0tjZBKkcpZ0qwGPJ4GQ2caNiUhfnpwKHH4DOLUFsO4NnN8NPJcqJkVyYm3XbSePDAwMRGZmZovlsbGx2LBhA55//nm4uLhofW5AQAB8fX2xZ88eKBQKhIWJvWL9+vVDv3798M4776Curo49QkSyJpWzihTGjoRI/1wHAiFzgINJ4u9jXgSCmeibort372LmzJmIjY3FiBEj4ODggDNnzmDdunV47rnnWrQfOnQo7ty5Azu71scgRUREYPPmzRg0aJDG3FthYWHYtGmTalB1V2IiRNQd8Cos6qmeTQGGRAM2jsCAX4pjh8jk2NvbY+zYsfjHP/6B//znP6ivr4evry/i4uLw+uuva31Onz592txuREQEPv74Y9X4IElYWBi2b9+O3/3ud/oIv1VmQluzGcqU+hihH3/8Effv35f3fYGI9EwqO8v5b4vHQF5qampQWFgIf39/9OqlY2oM6pDWjml7/744j5AOvNcYERFRz8dEiIiIiGSLiRARERHJFhMhIiIiki0mQjrwXmNEREQ9HxMhHThYmoiIugIv1tYffRxLJkJEREQGYGVlBUC8Izvph3QspWP7ODihIhERkQFYWFjA2dkZpaWlAAA7OzuYcQLJxyIIAh48eIDS0lI4OzvDwsLisbfFRIiIiMhAPD3F2eGlZIg6x9nZWXVMHxcTISIiIgMxMzODl5cX3N3dUV9fb+xwujUrK6tO9QRJmAgREREZmIWFhV7+E6fO42BpHXj5PBERUc/HREgHXj5PRETU8zERIiIiItniGKE2SJM1VVRUGDkSop5F+puS8+RyPL8QdZ32nmOYCLWhsrISAODr62vkSIh6psrKSjg5ORk7DKPg+YWo67V1jjET5Px1rB0aGxtRVFQEBwcHVFZWwtfXFzdu3ICjo6NR4xozZozexy897jY78rz2tG2rja717V1eUVFhMu8joP/3sru8j6NHj8bhw4fh7e0Nc3N5VunVzy+tTaxnap9ZU8Jj0zo5Hx9BEFBZWdnmOYY9Qm0wNzeHj48PAKhOVI6Ojkb/QFlYWOg9hsfdZkee1562bbXRtb6jy03hfQT0/152l/fR0tJS9bclV+rnl/Ywlc+sKeKxaZ1cj097epvl+TWsB4iPjzeZbXbkee1p21YbXes7utxU6Du+7v4+EhEZEktjHVBRUQEnJyfcv39flpl1T8H3kbobfmZ147FpHY9P29gj1AE2NjZITk6GjY2NsUOhTuD7SN0NP7O68di0jsenbewRIiIi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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"problem, results = RAT.run(problem, controls)\n",
"RAT.plotting.plot_ref_sld(problem, results)"
diff --git a/RATapi/inputs.py b/RATapi/inputs.py
index 90bb5895..304f5fde 100644
--- a/RATapi/inputs.py
+++ b/RATapi/inputs.py
@@ -5,16 +5,93 @@
import pathlib
from typing import Callable, Union
+import numpy as np
+
import RATapi
import RATapi.controls
import RATapi.wrappers
-from RATapi.rat_core import Cells, Checks, Control, Limits, Priors, ProblemDefinition
+from RATapi.rat_core import Checks, Control, Limits, NameStore, Priors, ProblemDefinition
from RATapi.utils.enums import Calculations, Languages, LayerModels, TypeOptions
-def make_input(
- project: RATapi.Project, controls: RATapi.Controls
-) -> tuple[ProblemDefinition, Cells, Limits, Priors, Control]:
+def get_python_handle(file_name: str, function_name: str, path: Union[str, pathlib.Path] = "") -> Callable:
+ """Get the function handle from a function defined in a python module located anywhere within the filesystem.
+
+ Parameters
+ ----------
+ file_name : str
+ The name of the file containing the function of interest.
+ function_name : str
+ The name of the function we wish to obtain the handle for within the module.
+ path : str
+ The path to the file containing the function (default is "", which represent the working directory).
+
+ Returns
+ -------
+ handle : Callable
+ The handle of the function defined in the python module file.
+
+ """
+ spec = importlib.util.spec_from_file_location(pathlib.Path(file_name).stem, os.path.join(path, file_name))
+ custom_module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(custom_module)
+ handle = getattr(custom_module, function_name)
+ return handle
+
+
+class FileHandles:
+ """Class to defer creation of custom file handles.
+
+ Parameters
+ ----------
+ files : ClassList[CustomFile]
+ A list of custom file models.
+ """
+
+ def __init__(self, files=None):
+ self.index = 0
+ self.files = [] if files is None else [file.dict() for file in files]
+
+ def __iter__(self):
+ self.index = 0
+ return self
+
+ def get_handle(self, index):
+ """Returns file handle for a given custom file.
+
+ Parameters
+ ----------
+ index : int
+ The index of the custom file.
+
+ """
+ custom_file = self.files[index]
+ full_path = os.path.join(custom_file["path"], custom_file["filename"])
+ if custom_file["language"] == Languages.Python:
+ file_handle = get_python_handle(custom_file["filename"], custom_file["function_name"], custom_file["path"])
+ elif custom_file["language"] == Languages.Matlab:
+ file_handle = RATapi.wrappers.MatlabWrapper(full_path).getHandle()
+ elif custom_file["language"] == Languages.Cpp:
+ file_handle = RATapi.wrappers.DylibWrapper(full_path, custom_file["function_name"]).getHandle()
+
+ return file_handle
+
+ def copy(self):
+ handles = FileHandles()
+ handles.files = [file.copy() for file in self.files]
+
+ return handles
+
+ def __next__(self):
+ if self.index < len(self.files):
+ custom_file = self.get_handle(self.index)
+ self.index += 1
+ return custom_file
+ else:
+ raise StopIteration
+
+
+def make_input(project: RATapi.Project, controls: RATapi.Controls) -> tuple[ProblemDefinition, Limits, Priors, Control]:
"""Constructs the inputs required for the compiled RAT code using the data defined in the input project and
controls.
@@ -40,29 +117,26 @@ def make_input(
"""
parameter_field = {
- "parameters": "param",
- "bulk_in": "bulkIn",
- "bulk_out": "bulkOut",
- "scalefactors": "scalefactor",
- "domain_ratios": "domainRatio",
- "background_parameters": "backgroundParam",
- "resolution_parameters": "resolutionParam",
+ "parameters": "params",
+ "bulk_in": "bulkIns",
+ "bulk_out": "bulkOuts",
+ "scalefactors": "scalefactors",
+ "domain_ratios": "domainRatios",
+ "background_parameters": "backgroundParams",
+ "resolution_parameters": "resolutionParams",
}
checks_field = {
- "parameters": "fitParam",
- "bulk_in": "fitBulkIn",
- "bulk_out": "fitBulkOut",
- "scalefactors": "fitScalefactor",
- "domain_ratios": "fitDomainRatio",
- "background_parameters": "fitBackgroundParam",
- "resolution_parameters": "fitResolutionParam",
+ "parameters": "params",
+ "bulk_in": "bulkIns",
+ "bulk_out": "bulkOuts",
+ "scalefactors": "scalefactors",
+ "domain_ratios": "domainRatios",
+ "background_parameters": "backgroundParams",
+ "resolution_parameters": "resolutionParams",
}
prior_id = {"uniform": 1, "gaussian": 2, "jeffreys": 3}
- problem = make_problem(project)
- cells = make_cells(project)
-
checks = Checks()
limits = Limits()
priors = Priors()
@@ -81,9 +155,9 @@ def make_input(
)
# Use dummy values for qzshifts
- checks.fitQzshift = []
- limits.qzshift = []
- priors.qzshift = []
+ checks.qzshifts = []
+ limits.qzshifts = []
+ priors.qzshifts = []
priors.priorNames = [
param.name for class_list in RATapi.project.parameter_class_lists for param in getattr(project, class_list)
@@ -97,12 +171,13 @@ def make_input(
if project.model == LayerModels.CustomXY:
controls.calcSldDuringFit = True
- cpp_controls = make_controls(controls, checks)
+ problem = make_problem(project, checks)
+ cpp_controls = make_controls(controls)
- return problem, cells, limits, priors, cpp_controls
+ return problem, limits, priors, cpp_controls
-def make_problem(project: RATapi.Project) -> ProblemDefinition:
+def make_problem(project: RATapi.Project, checks: Checks) -> ProblemDefinition:
"""Constructs the problem input required for the compiled RAT code.
Parameters
@@ -116,7 +191,21 @@ def make_problem(project: RATapi.Project) -> ProblemDefinition:
The problem input used in the compiled RAT code.
"""
- action_id = {"add": 1, "subtract": 2}
+ hydrate_id = {"bulk in": 1, "bulk out": 2}
+
+ # Set contrast parameters according to model type
+ if project.model == LayerModels.StandardLayers:
+ if project.calculation == Calculations.Domains:
+ contrast_models = [
+ [project.domain_contrasts.index(domain_contrast, True) for domain_contrast in contrast.model]
+ for contrast in project.contrasts
+ ]
+ else:
+ contrast_models = [
+ [project.layers.index(layer, True) for layer in contrast.model] for contrast in project.contrasts
+ ]
+ else:
+ contrast_models = [[]] * len(project.contrasts)
# Set contrast parameters according to model type
if project.model == LayerModels.StandardLayers:
@@ -126,15 +215,32 @@ def make_problem(project: RATapi.Project) -> ProblemDefinition:
# Set background parameters, with -1 used to indicate a data background
contrast_background_params = []
+ contrast_background_types = []
+
+ # Get details of defined layers
+ layer_details = []
+ for layer in project.layers:
+ layer_params = [
+ project.parameters.index(getattr(layer, attribute), True)
+ for attribute in list(layer.model_fields.keys())[1:-2]
+ ]
+ layer_params.append(project.parameters.index(layer.hydration, True) if layer.hydration else float("NaN"))
+ layer_params.append(hydrate_id[layer.hydrate_with])
+
+ layer_details.append(layer_params)
for contrast in project.contrasts:
background = project.backgrounds[contrast.background]
+ contrast_background_types.append(background.type)
if background.type == TypeOptions.Data:
- contrast_background_params.append(-1)
+ contrast_background_params.append([-1])
else:
- contrast_background_params.append(project.background_parameters.index(background.value_1, True))
+ contrast_background_params.append([project.background_parameters.index(background.value_1, True)])
# Set resolution parameters, with -1 used to indicate a data resolution
+ all_data = []
+ data_limits = []
+ simulation_limits = []
contrast_resolution_params = []
for contrast in project.contrasts:
@@ -144,40 +250,75 @@ def make_problem(project: RATapi.Project) -> ProblemDefinition:
else:
contrast_resolution_params.append(project.resolution_parameters.index(resolution.value_1, True))
+ data_index = project.data.index(contrast.data)
+ data = project.data[data_index].data
+ all_data.append(np.column_stack((data, np.zeros((data.shape[0], 6 - data.shape[1])))))
+ data_range = project.data[data_index].data_range
+ simulation_range = project.data[data_index].simulation_range
+
+ if data_range:
+ data_limits.append(data_range)
+ else:
+ data_limits.append([0.0, 0.0])
+
+ if simulation_range:
+ simulation_limits.append(simulation_range)
+ else:
+ simulation_limits.append([0.0, 0.0])
+
problem = ProblemDefinition()
problem.TF = project.calculation
- problem.modelType = project.model
+ problem.resample = make_resample(project)
+ problem.data = all_data
+ problem.dataPresent = make_data_present(project)
+ problem.dataLimits = data_limits
+ problem.simulationLimits = simulation_limits
+ problem.oilChiDataPresent = [0] * len(project.contrasts)
+ problem.numberOfContrasts = len(project.contrasts)
problem.geometry = project.geometry
problem.useImaginary = project.absorption
- problem.params = [param.value for param in project.parameters]
- problem.bulkIn = [param.value for param in project.bulk_in]
- problem.bulkOut = [param.value for param in project.bulk_out]
- problem.qzshifts = [0.0]
- problem.scalefactors = [param.value for param in project.scalefactors]
- problem.domainRatio = [param.value for param in project.domain_ratios]
- problem.backgroundParams = [param.value for param in project.background_parameters]
- problem.resolutionParams = [param.value for param in project.resolution_parameters]
- problem.contrastBulkIns = [project.bulk_in.index(contrast.bulk_in, True) for contrast in project.contrasts]
- problem.contrastBulkOuts = [project.bulk_out.index(contrast.bulk_out, True) for contrast in project.contrasts]
+ problem.repeatLayers = [[0, 1]] * len(project.contrasts) # This is marked as "to do" in RAT
+ problem.contrastBackgroundParams = contrast_background_params
+ problem.contrastBackgroundTypes = contrast_background_types
+ problem.contrastBackgroundActions = [contrast.background_action for contrast in project.contrasts]
problem.contrastQzshifts = [1] * len(project.contrasts) # This is marked as "to do" in RAT
problem.contrastScalefactors = [
project.scalefactors.index(contrast.scalefactor, True) for contrast in project.contrasts
]
+ problem.contrastBulkIns = [project.bulk_in.index(contrast.bulk_in, True) for contrast in project.contrasts]
+ problem.contrastBulkOuts = [project.bulk_out.index(contrast.bulk_out, True) for contrast in project.contrasts]
+ problem.contrastResolutionParams = contrast_resolution_params
+ problem.backgroundParams = [param.value for param in project.background_parameters]
+ problem.qzshifts = [0.0]
+ problem.scalefactors = [param.value for param in project.scalefactors]
+ problem.bulkIns = [param.value for param in project.bulk_in]
+ problem.bulkOuts = [param.value for param in project.bulk_out]
+ problem.resolutionParams = [param.value for param in project.resolution_parameters]
+ problem.params = [param.value for param in project.parameters]
+ problem.numberOfLayers = len(project.layers)
+ problem.contrastLayers = [contrast_model if contrast_model else [] for contrast_model in contrast_models]
+ problem.layersDetails = layer_details if project.model == LayerModels.StandardLayers else []
+ problem.customFiles = FileHandles(project.custom_files)
+ problem.modelType = project.model
+ problem.contrastCustomFiles = contrast_custom_files
+
problem.contrastDomainRatios = [
project.domain_ratios.index(contrast.domain_ratio, True) if hasattr(contrast, "domain_ratio") else 0
for contrast in project.contrasts
]
- problem.contrastBackgroundParams = contrast_background_params
- problem.contrastBackgroundActions = [action_id[contrast.background_action] for contrast in project.contrasts]
- problem.contrastResolutionParams = contrast_resolution_params
- problem.contrastCustomFiles = contrast_custom_files
- problem.resample = make_resample(project)
- problem.dataPresent = make_data_present(project)
- problem.oilChiDataPresent = [0] * len(project.contrasts)
- problem.numberOfContrasts = len(project.contrasts)
- problem.numberOfLayers = len(project.layers)
+
+ problem.domainRatios = [param.value for param in project.domain_ratios]
problem.numberOfDomainContrasts = len(project.domain_contrasts)
+
+ domain_contrast_models = [
+ [project.layers.index(layer, True) for layer in domain_contrast.model]
+ for domain_contrast in project.domain_contrasts
+ ]
+
+ problem.domainContrastLayers = [
+ domain_contrast_model if domain_contrast_model else [] for domain_contrast_model in domain_contrast_models
+ ]
problem.fitParams = [
param.value
for class_list in RATapi.project.parameter_class_lists
@@ -203,6 +344,20 @@ def make_problem(project: RATapi.Project) -> ProblemDefinition:
if not param.fit
]
+ # Names
+ problem.names = NameStore()
+ problem.names.params = [param.name for param in project.parameters]
+ problem.names.backgroundParams = [param.name for param in project.background_parameters]
+ problem.names.scalefactors = [param.name for param in project.scalefactors]
+ problem.names.qzshifts = [] # Placeholder for qzshifts
+ problem.names.bulkIns = [param.name for param in project.bulk_in]
+ problem.names.bulkOuts = [param.name for param in project.bulk_out]
+ problem.names.resolutionParams = [param.name for param in project.resolution_parameters]
+ problem.names.domainRatios = [param.name for param in project.domain_ratios]
+ problem.names.contrasts = [contrast.name for contrast in project.contrasts]
+
+ # Checks
+ problem.checks = checks
check_indices(problem)
return problem
@@ -253,11 +408,11 @@ def check_indices(problem: ProblemDefinition) -> None:
"""
index_list = {
- "bulkIn": "contrastBulkIns",
- "bulkOut": "contrastBulkOuts",
+ "bulkIns": "contrastBulkIns",
+ "bulkOuts": "contrastBulkOuts",
"scalefactors": "contrastScalefactors",
- "domainRatio": "contrastDomainRatios",
- "backgroundParams": "contrastBackgroundParams",
+ "domainRatios": "contrastDomainRatios",
+ # "backgroundParams": "contrastBackgroundParams",
"resolutionParams": "contrastResolutionParams",
}
@@ -279,179 +434,7 @@ def check_indices(problem: ProblemDefinition) -> None:
)
-class FileHandles:
- """Class to defer creation of custom file handles.
-
- Parameters
- ----------
- files : ClassList[CustomFile]
- A list of custom file models.
- """
-
- def __init__(self, files):
- self.index = 0
- self.files = [*files]
-
- def __iter__(self):
- self.index = 0
- return self
-
- def get_handle(self, index):
- """Returns file handle for a given custom file.
-
- Parameters
- ----------
- index : int
- The index of the custom file.
-
- """
- custom_file = self.files[index]
- full_path = os.path.join(custom_file.path, custom_file.filename)
- if custom_file.language == Languages.Python:
- file_handle = get_python_handle(custom_file.filename, custom_file.function_name, custom_file.path)
- elif custom_file.language == Languages.Matlab:
- file_handle = RATapi.wrappers.MatlabWrapper(full_path).getHandle()
- elif custom_file.language == Languages.Cpp:
- file_handle = RATapi.wrappers.DylibWrapper(full_path, custom_file.function_name).getHandle()
-
- return file_handle
-
- def __next__(self):
- if self.index < len(self.files):
- custom_file = self.get_handle(self.index)
- self.index += 1
- return custom_file
- else:
- raise StopIteration
-
-
-def make_cells(project: RATapi.Project) -> Cells:
- """Constructs the cells input required for the compiled RAT code.
-
- Note that the order of the inputs (i.e, f1 to f20) has been hard--coded into the compiled RAT code.
-
- Parameters
- ----------
- project : RAT.Project
- The project model, which defines the physical system under study.
-
- Returns
- -------
- cells : RAT.rat_core.Cells
- The set of inputs that are defined in MATLAB as cell arrays.
-
- """
- hydrate_id = {"bulk in": 1, "bulk out": 2}
-
- # Set contrast parameters according to model type
- if project.model == LayerModels.StandardLayers:
- if project.calculation == Calculations.Domains:
- contrast_models = [
- [project.domain_contrasts.index(domain_contrast, True) for domain_contrast in contrast.model]
- for contrast in project.contrasts
- ]
- else:
- contrast_models = [
- [project.layers.index(layer, True) for layer in contrast.model] for contrast in project.contrasts
- ]
- else:
- contrast_models = [[]] * len(project.contrasts)
-
- # Get details of defined layers
- layer_details = []
- for layer in project.layers:
- layer_params = [
- project.parameters.index(getattr(layer, attribute), True)
- for attribute in list(layer.model_fields.keys())[1:-2]
- ]
- layer_params.append(project.parameters.index(layer.hydration, True) if layer.hydration else float("NaN"))
- layer_params.append(hydrate_id[layer.hydrate_with])
-
- layer_details.append(layer_params)
-
- # Find contrast data in project.data classlist
- all_data = []
- data_limits = []
- simulation_limits = []
-
- for contrast in project.contrasts:
- data_index = project.data.index(contrast.data)
- all_data.append(project.data[data_index].data)
- data_range = project.data[data_index].data_range
- simulation_range = project.data[data_index].simulation_range
-
- if data_range:
- data_limits.append(data_range)
- else:
- data_limits.append([0.0, 0.0])
-
- if simulation_range:
- simulation_limits.append(simulation_range)
- else:
- simulation_limits.append([0.0, 0.0])
-
- # Populate the set of cells
- cells = Cells()
- cells.f1 = [[0, 1]] * len(project.contrasts) # This is marked as "to do" in RAT
- cells.f2 = all_data
- cells.f3 = data_limits
- cells.f4 = simulation_limits
- cells.f5 = [contrast_model if contrast_model else [] for contrast_model in contrast_models]
- cells.f6 = layer_details if project.model == LayerModels.StandardLayers else []
- cells.f7 = [param.name for param in project.parameters]
- cells.f8 = [param.name for param in project.background_parameters]
- cells.f9 = [param.name for param in project.scalefactors]
- cells.f10 = [] # Placeholder for qzshifts
- cells.f11 = [param.name for param in project.bulk_in]
- cells.f12 = [param.name for param in project.bulk_out]
- cells.f13 = [param.name for param in project.resolution_parameters]
- cells.f14 = FileHandles(project.custom_files)
- cells.f15 = [param.type for param in project.backgrounds]
- cells.f16 = [param.type for param in project.resolutions]
-
- cells.f17 = [[[]]] * len(project.contrasts) # Placeholder for oil chi data
- cells.f18 = [[0, 1]] * len(project.domain_contrasts) # This is marked as "to do" in RAT
-
- domain_contrast_models = [
- [project.layers.index(layer, True) for layer in domain_contrast.model]
- for domain_contrast in project.domain_contrasts
- ]
- cells.f19 = [
- domain_contrast_model if domain_contrast_model else [] for domain_contrast_model in domain_contrast_models
- ]
-
- cells.f20 = [param.name for param in project.domain_ratios]
- cells.f21 = [contrast.name for contrast in project.contrasts]
-
- return cells
-
-
-def get_python_handle(file_name: str, function_name: str, path: Union[str, pathlib.Path] = "") -> Callable:
- """Get the function handle from a function defined in a python module located anywhere within the filesystem.
-
- Parameters
- ----------
- file_name : str
- The name of the file containing the function of interest.
- function_name : str
- The name of the function we wish to obtain the handle for within the module.
- path : str
- The path to the file containing the function (default is "", which represent the working directory).
-
- Returns
- -------
- handle : Callable
- The handle of the function defined in the python module file.
-
- """
- spec = importlib.util.spec_from_file_location(pathlib.Path(file_name).stem, os.path.join(path, file_name))
- custom_module = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(custom_module)
- handle = getattr(custom_module, function_name)
- return handle
-
-
-def make_controls(input_controls: RATapi.Controls, checks: Checks) -> Control:
+def make_controls(input_controls: RATapi.Controls) -> Control:
"""Converts the controls object to the format required by the compiled RAT code.
Parameters
@@ -501,8 +484,6 @@ def make_controls(input_controls: RATapi.Controls, checks: Checks) -> Control:
controls.pUnitGamma = input_controls.pUnitGamma
controls.boundHandling = input_controls.boundHandling
controls.adaptPCR = input_controls.adaptPCR
- # Checks
- controls.checks = checks
# IPC
controls.IPCFilePath = ""
diff --git a/RATapi/outputs.py b/RATapi/outputs.py
index f8ee3e68..54ed27a2 100644
--- a/RATapi/outputs.py
+++ b/RATapi/outputs.py
@@ -68,7 +68,6 @@ class CalculationResults(RATResult):
@dataclass
class ContrastParams(RATResult):
- backgroundParams: np.ndarray
scalefactors: np.ndarray
bulkIn: np.ndarray
bulkOut: np.ndarray
@@ -174,7 +173,6 @@ def make_results(
sumChi=output_results.calculationResults.sumChi,
)
contrast_params = ContrastParams(
- backgroundParams=output_results.contrastParams.backgroundParams,
scalefactors=output_results.contrastParams.scalefactors,
bulkIn=output_results.contrastParams.bulkIn,
bulkOut=output_results.contrastParams.bulkOut,
diff --git a/RATapi/project.py b/RATapi/project.py
index 12887908..9751128f 100644
--- a/RATapi/project.py
+++ b/RATapi/project.py
@@ -126,7 +126,7 @@ class Project(BaseModel, validate_assignment=True, extra="forbid"):
"""
name: str = ""
- calculation: Calculations = Calculations.NonPolarised
+ calculation: Calculations = Calculations.Normal
model: LayerModels = LayerModels.StandardLayers
geometry: Geometries = Geometries.AirSubstrate
absorption: bool = False
@@ -259,7 +259,7 @@ def discriminate_ambiguous_dicts(cls, data: Any) -> Any:
# if it's not a dict, just return and let the library handle it
if isinstance(data, dict):
layer_model = RATapi.models.AbsorptionLayer if data.get("absorption", False) else RATapi.models.Layer
- if data.get("calculation", Calculations.NonPolarised) == Calculations.Domains:
+ if data.get("calculation", Calculations.Normal) == Calculations.Domains:
contrast_model = RATapi.models.ContrastWithRatio
else:
contrast_model = RATapi.models.Contrast
diff --git a/RATapi/run.py b/RATapi/run.py
index 69ae651b..f2a2e017 100644
--- a/RATapi/run.py
+++ b/RATapi/run.py
@@ -94,17 +94,17 @@ def run(project, controls):
"""Run RAT for the given project and controls inputs."""
parameter_field = {
"parameters": "params",
- "bulk_in": "bulkIn",
- "bulk_out": "bulkOut",
+ "bulk_in": "bulkIns",
+ "bulk_out": "bulkOuts",
"scalefactors": "scalefactors",
- "domain_ratios": "domainRatio",
+ "domain_ratios": "domainRatios",
"background_parameters": "backgroundParams",
"resolution_parameters": "resolutionParams",
}
horizontal_line = "\u2500" * 107 + "\n"
display_on = controls.display != Display.Off
- problem_definition, cells, limits, priors, cpp_controls = make_input(project, controls)
+ problem_definition, limits, priors, cpp_controls = make_input(project, controls)
if display_on:
print("Starting RAT " + horizontal_line)
@@ -113,7 +113,6 @@ def run(project, controls):
with ProgressBar(display=display_on), TextOutput(display=display_on):
problem_definition, output_results, bayes_results = RATapi.rat_core.RATMain(
problem_definition,
- cells,
limits,
cpp_controls,
priors,
diff --git a/RATapi/utils/enums.py b/RATapi/utils/enums.py
index dcefd3e2..dd8e8660 100644
--- a/RATapi/utils/enums.py
+++ b/RATapi/utils/enums.py
@@ -112,7 +112,7 @@ class Priors(RATEnum):
# Project
class Calculations(RATEnum):
- NonPolarised = "non polarised"
+ Normal = "normal"
Domains = "domains"
diff --git a/cpp/RAT b/cpp/RAT
index 8bcffd98..9a2e2701 160000
--- a/cpp/RAT
+++ b/cpp/RAT
@@ -1 +1 @@
-Subproject commit 8bcffd98722d0c7b1e69a51d357b6f81cd1613ec
+Subproject commit 9a2e2701a88cccacac048f7dfb11b2ab9aa2404b
diff --git a/cpp/rat.cpp b/cpp/rat.cpp
index 67fd1fac..aa80abd8 100644
--- a/cpp/rat.cpp
+++ b/cpp/rat.cpp
@@ -366,27 +366,27 @@ struct BayesResults
struct Priors
{
- py::list param;
- py::list backgroundParam;
- py::list resolutionParam;
- py::list bulkIn;
- py::list bulkOut;
- py::list qzshift;
- py::list scalefactor;
- py::list domainRatio;
+ py::list params;
+ py::list backgroundParams;
+ py::list scalefactors;
+ py::list qzshifts;
+ py::list bulkIns;
+ py::list bulkOuts;
+ py::list resolutionParams;
+ py::list domainRatios;
py::list priorNames;
py::array_t priorValues;
};
struct Checks {
- py::array_t fitParam;
- py::array_t fitBackgroundParam;
- py::array_t fitQzshift;
- py::array_t fitScalefactor;
- py::array_t fitBulkIn;
- py::array_t fitBulkOut;
- py::array_t fitResolutionParam;
- py::array_t fitDomainRatio;
+ py::array_t params;
+ py::array_t backgroundParams;
+ py::array_t qzshifts;
+ py::array_t scalefactors;
+ py::array_t bulkIns;
+ py::array_t bulkOuts;
+ py::array_t resolutionParams;
+ py::array_t domainRatios;
};
struct Calculation
@@ -397,7 +397,6 @@ struct Calculation
struct ContrastParams
{
- py::array_t backgroundParams;
py::array_t scalefactors;
py::array_t bulkIn;
py::array_t bulkOut;
@@ -410,60 +409,54 @@ struct OutputResult {
py::list reflectivity;
py::list simulation;
py::list shiftedData;
+ py::list backgrounds;
py::list layerSlds;
py::list sldProfiles;
py::list resampledLayers;
Calculation calculationResults {};
- ContrastParams contrastParams;
+ ContrastParams contrastParams {};
py::array_t fitParams;
py::list fitNames;
};
struct Limits {
- py::array_t param;
- py::array_t backgroundParam;
- py::array_t scalefactor;
- py::array_t qzshift;
- py::array_t bulkIn;
- py::array_t bulkOut;
- py::array_t resolutionParam;
- py::array_t domainRatio;
+ py::array_t params;
+ py::array_t backgroundParams;
+ py::array_t scalefactors;
+ py::array_t qzshifts;
+ py::array_t bulkIns;
+ py::array_t bulkOuts;
+ py::array_t resolutionParams;
+ py::array_t domainRatios;
};
-struct Cells {
- py::list f1;
- py::list f2;
- py::list f3;
- py::list f4;
- py::list f5;
- py::list f6;
- py::list f7;
- py::list f8;
- py::list f9;
- py::list f10;
- py::list f11;
- py::list f12;
- py::list f13;
- py::object f14;
- py::list f15;
- py::list f16;
- py::list f17;
- py::list f18;
- py::list f19;
- py::list f20;
- py::list f21;
+struct NameStore {
+ py::list params;
+ py::list backgroundParams;
+ py::list scalefactors;
+ py::list qzshifts;
+ py::list bulkIns;
+ py::list bulkOuts;
+ py::list resolutionParams;
+ py::list domainRatios;
+ py::list contrasts;
};
struct ProblemDefinition {
- py::array_t contrastBackgroundParams;
- py::array_t contrastBackgroundActions;
- std::string TF {};
+ std::string TF {};
py::array_t resample;
+ py::list data;
py::array_t dataPresent;
+ py::list dataLimits;
+ py::list simulationLimits;
py::array_t oilChiDataPresent;
real_T numberOfContrasts;
- std::string geometry {};
- bool useImaginary {};
+ std::string geometry {};
+ boolean_T useImaginary {};
+ py::list repeatLayers;
+ py::list contrastBackgroundParams;
+ py::list contrastBackgroundTypes;
+ py::list contrastBackgroundActions;
py::array_t contrastQzshifts;
py::array_t contrastScalefactors;
py::array_t contrastBulkIns;
@@ -472,20 +465,26 @@ struct ProblemDefinition {
py::array_t backgroundParams;
py::array_t qzshifts;
py::array_t scalefactors;
- py::array_t bulkIn;
- py::array_t bulkOut;
+ py::array_t bulkIns;
+ py::array_t bulkOuts;
py::array_t resolutionParams;
py::array_t params;
real_T numberOfLayers {};
- std::string modelType {};
+ py::list contrastLayers;
+ py::list layersDetails;
+ py::object customFiles;
+ std::string modelType {};
py::array_t contrastCustomFiles;
py::array_t contrastDomainRatios;
- py::array_t domainRatio;
+ py::array_t domainRatios;
real_T numberOfDomainContrasts {};
+ py::list domainContrastLayers;
py::array_t fitParams;
py::array_t otherParams;
py::array_t fitLimits;
py::array_t otherLimits;
+ NameStore names;
+ Checks checks {};
};
struct Control {
@@ -517,12 +516,11 @@ struct Control {
real_T pUnitGamma {};
std::string boundHandling {};
boolean_T adaptPCR;
- Checks checks {};
std::string IPCFilePath {};
};
-void stringToRatArray(std::string value, char_T result_data[], int32_T result_size[2])
+void stringToRatBoundedArray(std::string value, char_T result_data[], int32_T result_size[2])
{
result_size[0] = 1;
result_size[1] = value.length();
@@ -541,6 +539,12 @@ void stringToRatCharArray(std::string value, coder::array& result)
}
}
+void stringFromRatBoundedArray(const char_T array_data[], const int32_T array_size[2], std::string& result)
+{
+ result.resize(array_size[1]);
+ memcpy(&result[0], array_data, array_size[1]);
+}
+
coder::array pyArrayToRatRowArray1d(py::array_t value)
{
coder::array result;
@@ -602,6 +606,27 @@ coder::bounded_array pyArrayToRatBoundedArray(py::array_t pyArrayToRatBoundedArray3(py::array_t value)
+{
+ coder::bounded_array result {};
+
+ py::buffer_info buffer_info = value.request();
+
+ if (buffer_info.size == 0)
+ return result;
+
+ if (buffer_info.ndim != 1)
+ throw std::runtime_error("Expects a 1D numeric array");
+
+ result.size[0] = 1;
+ result.size[1] = buffer_info.shape[0];
+ for (int32_T idx0{0}; idx0 < buffer_info.shape[0]; idx0++) {
+ result.data[idx0] = value.at(idx0);
+ }
+
+ return result;
+}
+
coder::array pyArrayToRatArray2d(py::array_t value)
{
coder::array result;
@@ -627,9 +652,9 @@ coder::array pyArrayToRatArray2d(py::array_t value)
return result;
}
-coder::array pyListToUnboundedCell0(py::list values)
+coder::array pyListToUnboundedCell0(py::list values)
{
- coder::array result;
+ coder::array result;
result.set_size(values.size());
int32_T idx {0};
for (py::handle list: values)
@@ -640,8 +665,8 @@ coder::array pyListToUnboundedCell0(py::list values)
throw std::runtime_error("Expects a 2D list where each row must contain 4 elements. "
"Columns 1 and 2 must be strings and Columns 3 and 4 must be numeric arrays");
- stringToRatArray(value[0].cast(), result[idx].f1.data, result[idx].f1.size);
- stringToRatArray(value[1].cast(), result[idx].f2.data, result[idx].f2.size);
+ stringToRatBoundedArray(value[0].cast(), result[idx].f1.data, result[idx].f1.size);
+ stringToRatBoundedArray(value[1].cast(), result[idx].f2.data, result[idx].f2.size);
result[idx].f3 = value[2].cast();
result[idx].f4 = value[3].cast();
idx++;
@@ -650,9 +675,9 @@ coder::array pyListToUnboundedCell0(py::list values)
return result;
}
-coder::array pyListToUnboundedCell1(py::list values)
+coder::array pyListToUnboundedCell1(py::list values)
{
- coder::array result;
+ coder::array result;
result.set_size(values.size());
int32_T idx {0};
for (py::handle list: values)
@@ -668,96 +693,19 @@ coder::array pyListToUnboundedCell1(py::list values)
return result;
}
-
-RAT::struct0_T createStruct0(const ProblemDefinition& problem)
+coder::array pyListToRatCellWrap1(py::list values)
{
- RAT::struct0_T problem_struct;
-
- problem_struct.useImaginary = problem.useImaginary;
-
- problem_struct.numberOfLayers = problem.numberOfLayers;
- problem_struct.numberOfDomainContrasts = problem.numberOfDomainContrasts;
- problem_struct.numberOfContrasts = problem.numberOfContrasts;
-
- stringToRatArray(problem.modelType, problem_struct.modelType.data, problem_struct.modelType.size);
- stringToRatArray(problem.geometry, problem_struct.geometry.data, problem_struct.geometry.size);
- stringToRatArray(problem.TF, problem_struct.TF.data, problem_struct.TF.size);
-
- problem_struct.contrastBackgroundParams = customCaller("Problem.contrastBackgroundParams", pyArrayToRatColArray1d, problem.contrastBackgroundParams);
- problem_struct.contrastBackgroundActions = customCaller("Problem.contrastBackgroundActions", pyArrayToRatColArray1d, problem.contrastBackgroundActions);
- problem_struct.resample = customCaller("Problem.resample", pyArrayToRatColArray1d, problem.resample);
- problem_struct.dataPresent = customCaller("Problem.dataPresent", pyArrayToRatColArray1d, problem.dataPresent);
- problem_struct.oilChiDataPresent = customCaller("Problem.oilChiDataPresent", pyArrayToRatColArray1d, problem.oilChiDataPresent);
- problem_struct.contrastQzshifts = customCaller("Problem.contrastQzshifts", pyArrayToRatColArray1d, problem.contrastQzshifts);
- problem_struct.contrastScalefactors = customCaller("Problem.contrastScalefactors", pyArrayToRatColArray1d, problem.contrastScalefactors);
- problem_struct.contrastBulkIns = customCaller("Problem.contrastBulkIns", pyArrayToRatColArray1d, problem.contrastBulkIns);
- problem_struct.contrastBulkOuts = customCaller("Problem.contrastBulkOuts", pyArrayToRatColArray1d, problem.contrastBulkOuts);
- problem_struct.contrastResolutionParams = customCaller("Problem.contrastResolutionParams", pyArrayToRatColArray1d, problem.contrastResolutionParams);
- problem_struct.backgroundParams = customCaller("Problem.backgroundParams", pyArrayToRatColArray1d, problem.backgroundParams);
- problem_struct.qzshifts = customCaller("Problem.qzshifts", pyArrayToRatColArray1d, problem.qzshifts);
- problem_struct.scalefactors = customCaller("Problem.scalefactors", pyArrayToRatColArray1d, problem.scalefactors);
- problem_struct.bulkIn = customCaller("Problem.bulkIn", pyArrayToRatColArray1d, problem.bulkIn);
- problem_struct.bulkOut = customCaller("Problem.bulkOut", pyArrayToRatColArray1d, problem.bulkOut);
- problem_struct.resolutionParams = customCaller("Problem.resolutionParams", pyArrayToRatColArray1d, problem.resolutionParams);
- problem_struct.params = customCaller("Problem.params", pyArrayToRatColArray1d, problem.params);
-
- problem_struct.contrastCustomFiles = customCaller("Problem.contrastCustomFiles", pyArrayToRatColArray1d, problem.contrastCustomFiles);
- problem_struct.contrastDomainRatios = customCaller("Problem.contrastDomainRatios", pyArrayToRatColArray1d, problem.contrastDomainRatios);
- problem_struct.domainRatio = customCaller("Problem.domainRatio", pyArrayToRatColArray1d, problem.domainRatio);
-
- problem_struct.fitParams = customCaller("Problem.fitParams", pyArrayToRatRowArray1d, problem.fitParams);
- problem_struct.otherParams = customCaller("Problem.otherParams", pyArrayToRatRowArray1d, problem.otherParams);
- problem_struct.fitLimits = customCaller("Problem.fitLimits", pyArrayToRatArray2d, problem.fitLimits);
- problem_struct.otherLimits = customCaller("Problem.otherLimits", pyArrayToRatArray2d, problem.otherLimits);
-
- return problem_struct;
-}
-
-RAT::struct1_T createStruct1(const Limits& limits)
-{
- RAT::struct1_T limits_struct;
- limits_struct.param = customCaller("Limits.param", pyArrayToRatArray2d, limits.param);
- limits_struct.backgroundParam = customCaller("Limits.backgroundParam", pyArrayToRatArray2d, limits.backgroundParam);
- limits_struct.qzshift = customCaller("Limits.qzshift", pyArrayToRatArray2d, limits.qzshift);
- limits_struct.scalefactor = customCaller("Limits.scalefactor", pyArrayToRatArray2d, limits.scalefactor);
- limits_struct.bulkIn = customCaller("Limits.bulkIn", pyArrayToRatArray2d, limits.bulkIn);
- limits_struct.bulkOut = customCaller("Limits.bulkOut", pyArrayToRatArray2d, limits.bulkOut);
- limits_struct.resolutionParam = customCaller("Limits.resolutionParam", pyArrayToRatArray2d, limits.resolutionParam);
- limits_struct.domainRatio = customCaller("Limits.domainRatio", pyArrayToRatArray2d, limits.domainRatio);
-
- return limits_struct;
-}
-
-RAT::struct3_T createStruct3(const Checks& checks)
-{
- RAT::struct3_T checks_struct;
- checks_struct.fitParam = customCaller("Checks.fitParam", pyArrayToRatColArray1d, checks.fitParam);
- checks_struct.fitBackgroundParam = customCaller("Checks.fitBackgroundParam", pyArrayToRatColArray1d, checks.fitBackgroundParam);
- checks_struct.fitQzshift = customCaller("Checks.fitQzshift", pyArrayToRatColArray1d, checks.fitQzshift);
- checks_struct.fitScalefactor = customCaller("Checks.fitScalefactor", pyArrayToRatColArray1d, checks.fitScalefactor);
- checks_struct.fitBulkIn = customCaller("Checks.fitBulkIn", pyArrayToRatColArray1d, checks.fitBulkIn);
- checks_struct.fitBulkOut = customCaller("Checks.fitBulkOut", pyArrayToRatColArray1d, checks.fitBulkOut);
- checks_struct.fitResolutionParam = customCaller("Checks.fitResolutionParam", pyArrayToRatColArray1d, checks.fitResolutionParam);
- checks_struct.fitDomainRatio = customCaller("Checks.fitDomainRatio", pyArrayToRatColArray1d, checks.fitDomainRatio);
-
- return checks_struct;
-}
+ coder::array result;
+ result.set_size(1, values.size());
+ int32_T idx {0};
+ for (py::handle array: values)
+ {
+ py::array_t casted_array = py::cast(array);
+ result[idx].f1 = customCaller("$id[" + std::to_string(idx) +"]", pyArrayToRatArray2d, casted_array);
+ idx++;
+ }
-RAT::struct4_T createStruct4(const Priors& priors)
-{
- RAT::struct4_T priors_struct;
- priors_struct.param = customCaller("Priors.param", pyListToUnboundedCell0, priors.param);
- priors_struct.backgroundParam = customCaller("Priors.backgroundParam", pyListToUnboundedCell0, priors.backgroundParam);
- priors_struct.resolutionParam = customCaller("Priors.resolutionParam", pyListToUnboundedCell0, priors.resolutionParam);
- priors_struct.qzshift = customCaller("Priors.qzshift", pyListToUnboundedCell0, priors.qzshift);
- priors_struct.scalefactor = customCaller("Priors.scalefactor", pyListToUnboundedCell0, priors.scalefactor);
- priors_struct.bulkIn = customCaller("Priors.bulkIn", pyListToUnboundedCell0, priors.bulkIn);
- priors_struct.bulkOut = customCaller("Priors.bulkOut", pyListToUnboundedCell0, priors.bulkOut);
- priors_struct.domainRatio = customCaller("Priors.domainRatio", pyListToUnboundedCell0, priors.domainRatio);
- priors_struct.priorNames = customCaller("Priors.priorNames", pyListToUnboundedCell1, priors.priorNames);
- priors_struct.priorValues = customCaller("Priors.priorValues", pyArrayToRatArray2d, priors.priorValues);
-
- return priors_struct;
+ return result;
}
coder::array pyListToRatCellWrap2(py::list values)
@@ -778,6 +726,7 @@ coder::array pyListToRatCellWrap2(py::list values)
return result;
}
+
coder::array pyListToRatCellWrap3(py::list values)
{
coder::array result;
@@ -786,7 +735,7 @@ coder::array pyListToRatCellWrap3(py::list values)
for (py::handle array: values)
{
py::array_t casted_array = py::cast(array);
- result[idx].f1 = customCaller("$id[" + std::to_string(idx) +"]", pyArrayToRatArray2d, casted_array);
+ result[idx].f1 = customCaller("$id[" + std::to_string(idx) +"]", pyArrayToRatBoundedArray3, casted_array);
idx++;
}
@@ -808,10 +757,10 @@ coder::array pyListToRatCellWrap4(py::list values)
return result;
}
-coder::array pyListToRatCellWrap5(py::list values)
+coder::array pyListToRatCellWrap5(py::list values)
{
- coder::array result;
- result.set_size(values.size());
+ coder::array result;
+ result.set_size(1, values.size());
int32_T idx {0};
for (py::handle array: values)
{
@@ -823,16 +772,16 @@ coder::array pyListToRatCellWrap5(py::list values)
return result;
}
-coder::array pyListToRatCellWrap6(py::list values)
+coder::array pyListToRatCellWrap0(py::list values)
{
- coder::array result;
+ coder::array result;
result.set_size(1, values.size());
int32_T idx {0};
for (py::handle array: values)
{
if (py::isinstance(array)) {
std::string name = py::cast(array);
- stringToRatArray(name, result[idx].f1.data, result[idx].f1.size);
+ stringToRatBoundedArray(name, result[idx].f1.data, result[idx].f1.size);
idx++;
}
else
@@ -842,54 +791,142 @@ coder::array pyListToRatCellWrap6(py::list values)
return result;
}
-coder::array py_function_array_to_rat_cell_wrap_6(py::object values)
+coder::array py_function_array_to_rat_cell_wrap_0(py::object values)
{
auto handles = py::cast(values);
- coder::array result;
+ coder::array result;
result.set_size(1, handles.size());
int32_T idx {0};
for (py::handle array: handles)
{
auto func = py::cast(array);
std::string func_ptr = convertPtr2String(new Library(func));
- stringToRatArray(func_ptr, result[idx].f1.data, result[idx].f1.size);
+ stringToRatBoundedArray(func_ptr, result[idx].f1.data, result[idx].f1.size);
idx++;
}
return result;
}
-RAT::cell_7 createCell7(const Cells& cells)
+RAT::struct1_T createStruct1(const NameStore& names)
+{
+ RAT::struct1_T names_struct;
+ names_struct.params = customCaller("NameStore.params", pyListToRatCellWrap0, names.params);
+ names_struct.backgroundParams = customCaller("NameStore.backgroundParams", pyListToRatCellWrap0, names.backgroundParams);
+ names_struct.scalefactors = customCaller("NameStore.scalefactors", pyListToRatCellWrap0, names.scalefactors);
+ names_struct.qzshifts = customCaller("NameStore.qzshifts", pyListToRatCellWrap0, names.qzshifts);
+ names_struct.bulkIns = customCaller("NameStore.bulkIns", pyListToRatCellWrap0, names.bulkIns);
+ names_struct.bulkOuts = customCaller("NameStore.bulkOuts", pyListToRatCellWrap0, names.bulkOuts);
+ names_struct.resolutionParams = customCaller("NameStore.resolutionParams", pyListToRatCellWrap0, names.resolutionParams);
+ names_struct.domainRatios = customCaller("NameStore.domainRatios", pyListToRatCellWrap0, names.domainRatios);
+ names_struct.contrasts = customCaller("NameStore.contrasts", pyListToRatCellWrap0, names.contrasts);
+
+ return names_struct;
+}
+
+RAT::struct2_T createStruct2(const Checks& checks)
+{
+ RAT::struct2_T checks_struct;
+ checks_struct.params = customCaller("Checks.params", pyArrayToRatColArray1d, checks.params);
+ checks_struct.backgroundParams = customCaller("Checks.backgroundParams", pyArrayToRatColArray1d, checks.backgroundParams);
+ checks_struct.scalefactors = customCaller("Checks.scalefactors", pyArrayToRatColArray1d, checks.scalefactors);
+ checks_struct.qzshifts = customCaller("Checks.qzshifts", pyArrayToRatColArray1d, checks.qzshifts);
+ checks_struct.bulkIns = customCaller("Checks.bulkIns", pyArrayToRatColArray1d, checks.bulkIns);
+ checks_struct.bulkOuts = customCaller("Checks.bulkOuts", pyArrayToRatColArray1d, checks.bulkOuts);
+ checks_struct.resolutionParams = customCaller("Checks.resolutionParams", pyArrayToRatColArray1d, checks.resolutionParams);
+ checks_struct.domainRatios = customCaller("Checks.domainRatios", pyArrayToRatColArray1d, checks.domainRatios);
+
+ return checks_struct;
+}
+
+RAT::struct0_T createStruct0(const ProblemDefinition& problem)
+{
+ RAT::struct0_T problem_struct;
+
+ stringToRatBoundedArray(problem.TF, problem_struct.TF.data, problem_struct.TF.size);
+ problem_struct.resample = customCaller("Problem.resample", pyArrayToRatColArray1d, problem.resample);
+ problem_struct.data = customCaller("Problem.data", pyListToRatCellWrap1, problem.data);
+ problem_struct.dataPresent = customCaller("Problem.dataPresent", pyArrayToRatColArray1d, problem.dataPresent);
+ problem_struct.dataLimits = customCaller("Problem.dataLimits", pyListToRatCellWrap2, problem.dataLimits);
+ problem_struct.simulationLimits = customCaller("Problem.simulationLimits", pyListToRatCellWrap2, problem.simulationLimits);
+ problem_struct.oilChiDataPresent = customCaller("Problem.oilChiDataPresent", pyArrayToRatColArray1d, problem.oilChiDataPresent);
+ problem_struct.numberOfContrasts = problem.numberOfContrasts;
+ stringToRatBoundedArray(problem.geometry, problem_struct.geometry.data, problem_struct.geometry.size);
+ problem_struct.useImaginary = problem.useImaginary;
+ problem_struct.repeatLayers = customCaller("Problem.repeatLayers", pyListToRatCellWrap2, problem.repeatLayers);
+ problem_struct.contrastBackgroundParams = customCaller("Problem.contrastBackgroundParams", pyListToRatCellWrap3, problem.contrastBackgroundParams);
+ problem_struct.contrastBackgroundTypes = customCaller("Problem.contrastBackgroundTypes", pyListToRatCellWrap0, problem.contrastBackgroundTypes);
+ problem_struct.contrastBackgroundActions = customCaller("Problem.contrastBackgroundActions", pyListToRatCellWrap0, problem.contrastBackgroundActions);
+ problem_struct.contrastQzshifts = customCaller("Problem.contrastQzshifts", pyArrayToRatColArray1d, problem.contrastQzshifts);
+ problem_struct.contrastScalefactors = customCaller("Problem.contrastScalefactors", pyArrayToRatColArray1d, problem.contrastScalefactors);
+ problem_struct.contrastBulkIns = customCaller("Problem.contrastBulkIns", pyArrayToRatColArray1d, problem.contrastBulkIns);
+ problem_struct.contrastBulkOuts = customCaller("Problem.contrastBulkOuts", pyArrayToRatColArray1d, problem.contrastBulkOuts);
+ problem_struct.contrastResolutionParams = customCaller("Problem.contrastResolutionParams", pyArrayToRatColArray1d, problem.contrastResolutionParams);
+ problem_struct.backgroundParams = customCaller("Problem.backgroundParams", pyArrayToRatColArray1d, problem.backgroundParams);
+ problem_struct.qzshifts = customCaller("Problem.qzshifts", pyArrayToRatColArray1d, problem.qzshifts);
+ problem_struct.scalefactors = customCaller("Problem.scalefactors", pyArrayToRatColArray1d, problem.scalefactors);
+ problem_struct.bulkIns = customCaller("Problem.bulkIns", pyArrayToRatColArray1d, problem.bulkIns);
+ problem_struct.bulkOuts = customCaller("Problem.bulkOuts", pyArrayToRatColArray1d, problem.bulkOuts);
+ problem_struct.resolutionParams = customCaller("Problem.resolutionParams", pyArrayToRatColArray1d, problem.resolutionParams);
+ problem_struct.params = customCaller("Problem.params", pyArrayToRatColArray1d, problem.params);
+ problem_struct.numberOfLayers = problem.numberOfLayers;
+ problem_struct.contrastLayers = customCaller("Problem.contrastLayers", pyListToRatCellWrap4, problem.contrastLayers);
+ problem_struct.layersDetails = customCaller("Problem.layersDetails", pyListToRatCellWrap5, problem.layersDetails);
+ problem_struct.customFiles = customCaller("Problem.customFiles", py_function_array_to_rat_cell_wrap_0, problem.customFiles);
+ stringToRatBoundedArray(problem.modelType, problem_struct.modelType.data, problem_struct.modelType.size);
+ problem_struct.contrastCustomFiles = customCaller("Problem.contrastCustomFiles", pyArrayToRatColArray1d, problem.contrastCustomFiles);
+ problem_struct.contrastDomainRatios = customCaller("Problem.contrastDomainRatios", pyArrayToRatColArray1d, problem.contrastDomainRatios);
+ problem_struct.domainRatios = customCaller("Problem.domainRatios", pyArrayToRatColArray1d, problem.domainRatios);
+ problem_struct.numberOfDomainContrasts = problem.numberOfDomainContrasts;
+ problem_struct.domainContrastLayers = customCaller("Problem.domainContrastLayers", pyListToRatCellWrap4, problem.domainContrastLayers);
+ problem_struct.fitParams = customCaller("Problem.fitParams", pyArrayToRatRowArray1d, problem.fitParams);
+ problem_struct.otherParams = customCaller("Problem.otherParams", pyArrayToRatRowArray1d, problem.otherParams);
+ problem_struct.fitLimits = customCaller("Problem.fitLimits", pyArrayToRatArray2d, problem.fitLimits);
+ problem_struct.otherLimits = customCaller("Problem.otherLimits", pyArrayToRatArray2d, problem.otherLimits);
+
+ problem_struct.names = createStruct1(problem.names);
+ problem_struct.checks = createStruct2(problem.checks);
+
+
+ return problem_struct;
+}
+
+
+RAT::struct3_T createStruct3(const Limits& limits)
+{
+ RAT::struct3_T limits_struct;
+ limits_struct.params = customCaller("Limits.params", pyArrayToRatArray2d, limits.params);
+ limits_struct.backgroundParams = customCaller("Limits.backgroundParams", pyArrayToRatArray2d, limits.backgroundParams);
+ limits_struct.scalefactors = customCaller("Limits.scalefactors", pyArrayToRatArray2d, limits.scalefactors);
+ limits_struct.qzshifts = customCaller("Limits.qzshifts", pyArrayToRatArray2d, limits.qzshifts);
+ limits_struct.bulkIns = customCaller("Limits.bulkIns", pyArrayToRatArray2d, limits.bulkIns);
+ limits_struct.bulkOuts = customCaller("Limits.bulkOuts", pyArrayToRatArray2d, limits.bulkOuts);
+ limits_struct.resolutionParams = customCaller("Limits.resolutionParams", pyArrayToRatArray2d, limits.resolutionParams);
+ limits_struct.domainRatios = customCaller("Limits.domainRatios", pyArrayToRatArray2d, limits.domainRatios);
+
+ return limits_struct;
+}
+
+RAT::struct5_T createStruct5(const Priors& priors)
{
- RAT::cell_7 cells_struct;
- cells_struct.f1 = customCaller("Cells.f1", pyListToRatCellWrap2, cells.f1);
- cells_struct.f2 = customCaller("Cells.f2", pyListToRatCellWrap3, cells.f2);
- cells_struct.f3 = customCaller("Cells.f3", pyListToRatCellWrap2, cells.f3);
- cells_struct.f4 = customCaller("Cells.f4", pyListToRatCellWrap2, cells.f4);
- cells_struct.f5 = customCaller("Cells.f5", pyListToRatCellWrap4, cells.f5);
- cells_struct.f6 = customCaller("Cells.f6", pyListToRatCellWrap5, cells.f6);
- cells_struct.f7 = customCaller("Cells.f7", pyListToRatCellWrap6, cells.f7);
- cells_struct.f8 = customCaller("Cells.f8", pyListToRatCellWrap6, cells.f8);
- cells_struct.f9 = customCaller("Cells.f9", pyListToRatCellWrap6, cells.f9);
- cells_struct.f10 = customCaller("Cells.f10", pyListToRatCellWrap6, cells.f10);
- cells_struct.f11 = customCaller("Cells.f11", pyListToRatCellWrap6, cells.f11);
- cells_struct.f12 = customCaller("Cells.f12", pyListToRatCellWrap6, cells.f12);
- cells_struct.f13 = customCaller("Cells.f13", pyListToRatCellWrap6, cells.f13);
- cells_struct.f14 = customCaller("Cells.f14", py_function_array_to_rat_cell_wrap_6, cells.f14);
- cells_struct.f15 = customCaller("Cells.f15", pyListToRatCellWrap6, cells.f15);
- cells_struct.f16 = customCaller("Cells.f16", pyListToRatCellWrap6, cells.f16);
- cells_struct.f17 = customCaller("Cells.f17", pyListToRatCellWrap3, cells.f17);
- cells_struct.f18 = customCaller("Cells.f18", pyListToRatCellWrap2, cells.f18);
- cells_struct.f19 = customCaller("Cells.f19", pyListToRatCellWrap4, cells.f19);
- cells_struct.f20 = customCaller("Cells.f20", pyListToRatCellWrap6, cells.f20);
- cells_struct.f21 = customCaller("Cells.f21", pyListToRatCellWrap6, cells.f21);
-
- return cells_struct;
+ RAT::struct5_T priors_struct;
+ priors_struct.params = customCaller("Priors.params", pyListToUnboundedCell0, priors.params);
+ priors_struct.backgroundParams = customCaller("Priors.backgroundParams", pyListToUnboundedCell0, priors.backgroundParams);
+ priors_struct.scalefactors = customCaller("Priors.scalefactors", pyListToUnboundedCell0, priors.scalefactors);
+ priors_struct.qzshifts = customCaller("Priors.qzshifts", pyListToUnboundedCell0, priors.qzshifts);
+ priors_struct.bulkIns = customCaller("Priors.bulkIns", pyListToUnboundedCell0, priors.bulkIns);
+ priors_struct.bulkOuts = customCaller("Priors.bulkOuts", pyListToUnboundedCell0, priors.bulkOuts);
+ priors_struct.resolutionParams = customCaller("Priors.resolutionParams", pyListToUnboundedCell0, priors.resolutionParams);
+ priors_struct.domainRatios = customCaller("Priors.domainRatios", pyListToUnboundedCell0, priors.domainRatios);
+ priors_struct.priorNames = customCaller("Priors.priorNames", pyListToUnboundedCell1, priors.priorNames);
+ priors_struct.priorValues = customCaller("Priors.priorValues", pyArrayToRatArray2d, priors.priorValues);
+
+ return priors_struct;
}
-RAT::struct2_T createStruct2T(const Control& control)
+RAT::struct4_T createStruct4(const Control& control)
{
- RAT::struct2_T control_struct;
+ RAT::struct4_T control_struct;
control_struct.funcTolerance = control.funcTolerance;
control_struct.maxFuncEvals = control.maxFuncEvals;
control_struct.maxIterations = control.maxIterations;
@@ -910,16 +947,15 @@ RAT::struct2_T createStruct2T(const Control& control)
control_struct.nChains = control.nChains;
control_struct.jumpProbability = control.jumpProbability;
control_struct.pUnitGamma = control.pUnitGamma;
- stringToRatArray(control.parallel, control_struct.parallel.data, control_struct.parallel.size);
- stringToRatArray(control.procedure, control_struct.procedure.data, control_struct.procedure.size);
- stringToRatArray(control.display, control_struct.display.data, control_struct.display.size);
+ stringToRatBoundedArray(control.parallel, control_struct.parallel.data, control_struct.parallel.size);
+ stringToRatBoundedArray(control.procedure, control_struct.procedure.data, control_struct.procedure.size);
+ stringToRatBoundedArray(control.display, control_struct.display.data, control_struct.display.size);
control_struct.xTolerance = control.xTolerance;
control_struct.resampleMinAngle = control.resampleMinAngle;
control_struct.resampleNPoints = control.resampleNPoints;
- stringToRatArray(control.boundHandling, control_struct.boundHandling.data, control_struct.boundHandling.size);
+ stringToRatBoundedArray(control.boundHandling, control_struct.boundHandling.data, control_struct.boundHandling.size);
control_struct.adaptPCR = control.adaptPCR;
- control_struct.checks = createStruct3(control.checks);
- stringToRatArray(control.IPCFilePath, control_struct.IPCFilePath.data, control_struct.IPCFilePath.size);
+ stringToRatBoundedArray(control.IPCFilePath, control_struct.IPCFilePath.data, control_struct.IPCFilePath.size);
return control_struct;
}
@@ -943,32 +979,133 @@ py::array_t pyArrayFromRatArray2d(coder::array array)
return result_array;
}
+py::list pyListFromRatCellWrap0(coder::array values)
+{
+ py::list result;
+ for (int32_T idx0{0}; idx0 < values.size(1); idx0++) {
+ std::string tmp;
+ stringToRatBoundedArray(tmp, values[idx0].f1.data, values[idx0].f1.size);
+ result.append(tmp);
+ }
+
+ return result;
+}
+
+py::list pyListFromRatCellWrap2(coder::array values)
+{
+ py::list result;
+
+ for (int32_T idx0{0}; idx0 < values.size(1); idx0++) {
+ py::list inner = py::make_tuple(values[idx0].f1[0], values[idx0].f1[1]);
+ result.append(inner);
+ }
+
+ return result;
+}
+
+template
+py::list pyList1DFromRatCellWrap2D(const T& values)
+{
+ py::list result;
+
+ for (int32_T idx0{0}; idx0 < values.size(1); idx0++) {
+ result.append(pyArrayFromRatArray2d(values[idx0].f1));
+ }
+
+ return result;
+}
+
+template
+py::list pyList2dFromRatCellWrap(const T& values)
+{
+ py::list result;
+ int32_T idx {0};
+ for (int32_T idx0{0}; idx0 < values.size(0); idx0++) {
+ py::list inner;
+ for (int32_T idx1{0}; idx1 < values.size(1); idx1++) {
+ idx = idx0 + values.size(0) * idx1;
+ inner.append(pyArrayFromRatArray2d(values[idx].f1));
+ }
+ result.append(inner);
+ }
+
+ return result;
+}
+
+template
+py::list pyListFromBoundedCellWrap(const T& values)
+{
+ py::list result;
+
+ for (int32_T idx0{0}; idx0 < values.size(1); idx0++) {
+ auto array = py::array_t({values[idx0].f1.size[0]});
+ std::memcpy(array.request().ptr, values[idx0].f1.data, array.nbytes());
+
+ result.append(array);
+ }
+
+ return result;
+}
+
+template
+py::array_t pyArray1dFromBoundedArray(const T& array)
+{
+ auto result_array = py::array_t({array.size[0]});
+ std::memcpy(result_array.request().ptr, array.data, result_array.nbytes());
+
+ return result_array;
+}
+
+template
+py::array_t pyArray2dFromBoundedArray(const T& array)
+{
+ auto result_array = py::array_t({array.size[0], array.size[1]});
+ std::memcpy(result_array.request().ptr, array.data, result_array.nbytes());
+
+ return result_array;
+}
+
+py::array_t pyArrayFromRatArray3d(coder::array array)
+{
+ auto result_array = py::array_t({array.size(0), array.size(1), array.size(2)});
+ std::memcpy(result_array.request().ptr, array.data(), result_array.nbytes());
-OutputResult OutputResultFromStruct5T(const RAT::struct5_T result)
+ return result_array;
+}
+
+OutputResult OutputResultFromStruct6T(const RAT::struct6_T result)
{
// Copy problem to output
OutputResult output_result;
for (int32_T idx0{0}; idx0 < result.reflectivity.size(0); idx0++) {
auto tmp = result.reflectivity[idx0];
auto array = py::array_t({tmp.f1.size(0), tmp.f1.size(1)});
- std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
+ std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
output_result.reflectivity.append(array);
}
for (int32_T idx0{0}; idx0 < result.simulation.size(0); idx0++) {
- auto tmp = result.simulation[idx0];
- auto array = py::array_t({tmp.f1.size(0), tmp.f1.size(1)});
- std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
- output_result.simulation.append(array);
+ auto tmp = result.simulation[idx0];
+ auto array = py::array_t({tmp.f1.size(0), tmp.f1.size(1)});
+ std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
+ output_result.simulation.append(array);
}
for (int32_T idx0{0}; idx0 < result.shiftedData.size(0); idx0++) {
- auto tmp = result.shiftedData[idx0];
- auto array = py::array_t({tmp.f1.size(0), tmp.f1.size(1)});
- std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
- output_result.shiftedData.append(array);
+ auto tmp = result.shiftedData[idx0];
+ auto array = py::array_t({tmp.f1.size(0), tmp.f1.size(1)});
+ std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
+ output_result.shiftedData.append(array);
}
+ for (int32_T idx0{0}; idx0 < result.backgrounds.size(0); idx0++) {
+ auto tmp = result.backgrounds[idx0];
+ auto array = py::array_t({tmp.f1.size(0), tmp.f1.size(1)});
+ std::memcpy(array.request().ptr, tmp.f1.data(), array.nbytes());
+ output_result.backgrounds.append(array);
+ }
+
+
for (int32_T idx0{0}; idx0 < result.layerSlds.size(0); idx0++) {
py::list inner_list;
for (int32_T idx1{0}; idx1 < result.layerSlds.size(1); idx1++) {
@@ -1012,10 +1149,6 @@ OutputResult OutputResultFromStruct5T(const RAT::struct5_T result)
auto buffer = output_result.fitParams.request();
std::memcpy(buffer.ptr, result.fitParams.data(), output_result.fitParams.size()*sizeof(real_T));
- output_result.contrastParams.backgroundParams = py::array_t(result.contrastParams.backgroundParams.size(0));
- buffer = output_result.contrastParams.backgroundParams.request();
- std::memcpy(buffer.ptr, result.contrastParams.backgroundParams.data(), output_result.contrastParams.backgroundParams.size()*sizeof(real_T));
-
output_result.contrastParams.scalefactors = py::array_t(result.contrastParams.scalefactors.size(0));
buffer = output_result.contrastParams.scalefactors.request();
std::memcpy(buffer.ptr, result.contrastParams.scalefactors.data(), output_result.contrastParams.scalefactors.size()*sizeof(real_T));
@@ -1052,24 +1185,20 @@ ProblemDefinition problemDefinitionFromStruct0T(const RAT::struct0_T problem)
{
ProblemDefinition problem_def;
- problem_def.useImaginary = problem.useImaginary;
-
- problem_def.numberOfLayers = problem.numberOfLayers;
- problem_def.numberOfDomainContrasts = problem.numberOfDomainContrasts;
- problem_def.numberOfContrasts = problem.numberOfContrasts;
-
- problem_def.modelType.resize(problem.modelType.size[1]);
- memcpy(&problem_def.modelType[0], problem.modelType.data, problem.modelType.size[1]);
- problem_def.geometry.resize(problem.geometry.size[1]);
- memcpy(&problem_def.geometry[0], problem.geometry.data, problem.geometry.size[1]);
- problem_def.TF.resize(problem.TF.size[1]);
- memcpy(&problem_def.TF[0], problem.TF.data, problem.TF.size[1]);
-
- problem_def.contrastBackgroundParams = pyArrayFromRatArray1d>(problem.contrastBackgroundParams);
- problem_def.contrastBackgroundActions = pyArrayFromRatArray1d>(problem.contrastBackgroundActions);
+ stringFromRatBoundedArray(problem.TF.data, problem.TF.size, problem_def.TF);
problem_def.resample = pyArrayFromRatArray1d>(problem.resample);
+ problem_def.data = pyList1DFromRatCellWrap2D>(problem.data);
problem_def.dataPresent = pyArrayFromRatArray1d>(problem.dataPresent);
+ problem_def.dataLimits = pyListFromRatCellWrap2(problem.dataLimits);
+ problem_def.simulationLimits = pyListFromRatCellWrap2(problem.simulationLimits);
problem_def.oilChiDataPresent = pyArrayFromRatArray1d>(problem.oilChiDataPresent);
+ problem_def.numberOfContrasts = problem.numberOfContrasts;
+ stringFromRatBoundedArray(problem.geometry.data, problem.geometry.size, problem_def.geometry);
+ problem_def.useImaginary = problem.useImaginary;
+ problem_def.repeatLayers = pyListFromRatCellWrap2(problem.repeatLayers);
+ problem_def.contrastBackgroundParams = pyListFromBoundedCellWrap>(problem.contrastBackgroundParams);
+ problem_def.contrastBackgroundTypes = pyListFromRatCellWrap0(problem.contrastBackgroundTypes);
+ problem_def.contrastBackgroundActions = pyListFromRatCellWrap0(problem.contrastBackgroundActions);
problem_def.contrastQzshifts = pyArrayFromRatArray1d>(problem.contrastQzshifts);
problem_def.contrastScalefactors = pyArrayFromRatArray1d>(problem.contrastScalefactors);
problem_def.contrastBulkIns = pyArrayFromRatArray1d>(problem.contrastBulkIns);
@@ -1078,85 +1207,54 @@ ProblemDefinition problemDefinitionFromStruct0T(const RAT::struct0_T problem)
problem_def.backgroundParams = pyArrayFromRatArray1d>(problem.backgroundParams);
problem_def.qzshifts = pyArrayFromRatArray1d>(problem.qzshifts);
problem_def.scalefactors = pyArrayFromRatArray1d>(problem.scalefactors);
- problem_def.bulkIn = pyArrayFromRatArray1d>(problem.bulkIn);
- problem_def.bulkOut = pyArrayFromRatArray1d>(problem.bulkOut);
+ problem_def.bulkIns = pyArrayFromRatArray1d>(problem.bulkIns);
+ problem_def.bulkOuts = pyArrayFromRatArray1d>(problem.bulkOuts);
problem_def.resolutionParams = pyArrayFromRatArray1d>(problem.resolutionParams);
problem_def.params = pyArrayFromRatArray1d>(problem.params);
-
+ problem_def.numberOfLayers = problem.numberOfLayers;
+ problem_def.contrastLayers = pyList1DFromRatCellWrap2D>(problem.contrastLayers);
+ problem_def.layersDetails = pyListFromBoundedCellWrap>(problem.layersDetails);
+ // problem_def.customFiles is not set here since the object has been converted to function handles
+ stringFromRatBoundedArray(problem.modelType.data, problem.modelType.size, problem_def.modelType);
problem_def.contrastCustomFiles = pyArrayFromRatArray1d>(problem.contrastCustomFiles);
problem_def.contrastDomainRatios = pyArrayFromRatArray1d>(problem.contrastDomainRatios);
- problem_def.domainRatio = pyArrayFromRatArray1d>(problem.domainRatio);
-
+ problem_def.domainRatios = pyArrayFromRatArray1d>(problem.domainRatios);
+ problem_def.numberOfDomainContrasts = problem.numberOfDomainContrasts;
+ problem_def.domainContrastLayers = pyList1DFromRatCellWrap2D>(problem.domainContrastLayers);
problem_def.fitParams = pyArrayFromRatArray1d>(problem.fitParams, false);
problem_def.otherParams = pyArrayFromRatArray1d>(problem.otherParams, false);
problem_def.fitLimits = pyArrayFromRatArray2d(problem.fitLimits);
problem_def.otherLimits = pyArrayFromRatArray2d(problem.otherLimits);
-
- return problem_def;
-}
-
-template
-py::list pyList1DFromRatCellWrap(const T& values)
-{
- py::list result;
-
- for (int32_T idx0{0}; idx0 < values.size(0); idx0++) {
- result.append(pyArrayFromRatArray2d(values[idx0].f1));
- }
-
- return result;
-}
-
-template
-py::list pyList2dFromRatCellWrap(const T& values)
-{
- py::list result;
- int32_T idx {0};
- for (int32_T idx0{0}; idx0 < values.size(0); idx0++) {
- py::list inner;
- for (int32_T idx1{0}; idx1 < values.size(1); idx1++) {
- idx = idx0 + values.size(0) * idx1;
- inner.append(pyArrayFromRatArray2d(values[idx].f1));
- }
- result.append(inner);
- }
-
- return result;
-}
-
-template
-py::array_t pyArray1dFromBoundedArray(const T& array)
-{
- auto result_array = py::array_t({array.size[0]});
- std::memcpy(result_array.request().ptr, array.data, result_array.nbytes());
- return result_array;
-}
-
-template
-py::array_t pyArray2dFromBoundedArray(const T& array)
-{
- auto result_array = py::array_t({array.size[0], array.size[1]});
- std::memcpy(result_array.request().ptr, array.data, result_array.nbytes());
+ problem_def.names.params = pyListFromRatCellWrap0(problem.names.params);
+ problem_def.names.backgroundParams = pyListFromRatCellWrap0(problem.names.backgroundParams);
+ problem_def.names.scalefactors = pyListFromRatCellWrap0(problem.names.scalefactors);
+ problem_def.names.qzshifts = pyListFromRatCellWrap0(problem.names.qzshifts);
+ problem_def.names.bulkIns = pyListFromRatCellWrap0(problem.names.bulkIns);
+ problem_def.names.bulkOuts = pyListFromRatCellWrap0(problem.names.bulkOuts);
+ problem_def.names.resolutionParams = pyListFromRatCellWrap0(problem.names.resolutionParams);
+ problem_def.names.domainRatios = pyListFromRatCellWrap0(problem.names.domainRatios);
+ problem_def.names.contrasts = pyListFromRatCellWrap0(problem.names.contrasts);
- return result_array;
-}
+ problem_def.checks.params = pyArrayFromRatArray1d>(problem.checks.params);
+ problem_def.checks.backgroundParams = pyArrayFromRatArray1d>(problem.checks.backgroundParams);
+ problem_def.checks.scalefactors = pyArrayFromRatArray1d>(problem.checks.scalefactors);
+ problem_def.checks.qzshifts = pyArrayFromRatArray1d>(problem.checks.qzshifts);
+ problem_def.checks.bulkIns = pyArrayFromRatArray1d>(problem.checks.bulkIns);
+ problem_def.checks.bulkOuts = pyArrayFromRatArray1d>(problem.checks.bulkOuts);
+ problem_def.checks.resolutionParams = pyArrayFromRatArray1d>(problem.checks.resolutionParams);
+ problem_def.checks.domainRatios = pyArrayFromRatArray1d>(problem.checks.domainRatios);
-py::array_t pyArrayFromRatArray3d(coder::array array)
-{
- auto result_array = py::array_t({array.size(0), array.size(1), array.size(2)});
- std::memcpy(result_array.request().ptr, array.data(), result_array.nbytes());
-
- return result_array;
+ return problem_def;
}
-BayesResults bayesResultsFromStruct8T(const RAT::struct8_T results)
+BayesResults bayesResultsFromStruct9T(const RAT::struct9_T results)
{
BayesResults bayesResults;
bayesResults.chain = pyArrayFromRatArray2d(results.chain);
- bayesResults.predictionIntervals.reflectivity = pyList1DFromRatCellWrap>(results.predictionIntervals.reflectivity);
+ bayesResults.predictionIntervals.reflectivity = pyList1DFromRatCellWrap2D>(results.predictionIntervals.reflectivity);
bayesResults.predictionIntervals.sld = pyList2dFromRatCellWrap>(results.predictionIntervals.sld);
bayesResults.predictionIntervals.sampleChi = pyArray1dFromBoundedArray>(results.predictionIntervals.sampleChi);
@@ -1200,27 +1298,23 @@ BayesResults bayesResultsFromStruct8T(const RAT::struct8_T results)
return bayesResults;
}
-py::tuple RATMain(const ProblemDefinition& problem_def, const Cells& cells, const Limits& limits, const Control& control,
- const Priors& priors)
+py::tuple RATMain(const ProblemDefinition& problem_def, const Limits& limits, const Control& control, const Priors& priors)
{
RAT::struct0_T problem_def_struct = createStruct0(problem_def);
- RAT::cell_7 cells_struct = createCell7(cells);
- RAT::struct1_T limits_struct = createStruct1(limits);
- RAT::struct2_T control_struct = createStruct2T(control);
- RAT::struct4_T priors_struct = createStruct4(priors);
-
+ RAT::struct3_T limits_struct = createStruct3(limits);
+ RAT::struct4_T control_struct = createStruct4(control);
+ RAT::struct5_T priors_struct = createStruct5(priors);
// Output
- RAT::struct5_T results;
- RAT::struct8_T bayesResults;
-
+ RAT::struct6_T results;
+ RAT::struct9_T bayesResults;
// Call the entry-point
- RAT::RATMain(&problem_def_struct, &cells_struct, &limits_struct, &control_struct,
- &priors_struct, &results, &bayesResults);
-
+ RAT::RATMain(&problem_def_struct, &limits_struct, &control_struct, &priors_struct, &results, &bayesResults);
// Copy result to output
- return py::make_tuple(problemDefinitionFromStruct0T(problem_def_struct),
- OutputResultFromStruct5T(results),
- bayesResultsFromStruct8T(bayesResults));
+ auto out_problem_def = problemDefinitionFromStruct0T(problem_def_struct);
+ out_problem_def.customFiles = problem_def.customFiles.attr("copy")();
+ return py::make_tuple(out_problem_def,
+ OutputResultFromStruct6T(results),
+ bayesResultsFromStruct9T(bayesResults));
}
py::array_t makeSLDProfileXY(real_T bulk_in,
@@ -1401,7 +1495,6 @@ PYBIND11_MODULE(rat_core, m) {
py::class_(m, "ContrastParams")
.def(py::init<>())
- .def_readwrite("backgroundParams", &ContrastParams::backgroundParams)
.def_readwrite("scalefactors", &ContrastParams::scalefactors)
.def_readwrite("bulkIn", &ContrastParams::bulkIn)
.def_readwrite("bulkOut", &ContrastParams::bulkOut)
@@ -1414,6 +1507,7 @@ PYBIND11_MODULE(rat_core, m) {
.def_readwrite("reflectivity", &OutputResult::reflectivity)
.def_readwrite("simulation", &OutputResult::simulation)
.def_readwrite("shiftedData", &OutputResult::shiftedData)
+ .def_readwrite("backgrounds", &OutputResult::backgrounds)
.def_readwrite("layerSlds", &OutputResult::layerSlds)
.def_readwrite("sldProfiles", &OutputResult::sldProfiles)
.def_readwrite("resampledLayers", &OutputResult::resampledLayers)
@@ -1422,21 +1516,58 @@ PYBIND11_MODULE(rat_core, m) {
.def_readwrite("fitParams", &OutputResult::fitParams)
.def_readwrite("fitNames", &OutputResult::fitNames);
+ py::class_(m, "NameStore")
+ .def(py::init<>())
+ .def_readwrite("params", &NameStore::params)
+ .def_readwrite("backgroundParams", &NameStore::backgroundParams)
+ .def_readwrite("scalefactors", &NameStore::scalefactors)
+ .def_readwrite("qzshifts", &NameStore::qzshifts)
+ .def_readwrite("bulkIns", &NameStore::bulkIns)
+ .def_readwrite("bulkOuts", &NameStore::bulkOuts)
+ .def_readwrite("resolutionParams", &NameStore::resolutionParams)
+ .def_readwrite("domainRatios", &NameStore::domainRatios)
+ .def_readwrite("contrasts", &NameStore::contrasts)
+ .def(py::pickle(
+ [](const NameStore &names) { // __getstate__
+ /* Return a tuple that fully encodes the state of the object */
+ return py::make_tuple(names.params, names.backgroundParams, names.scalefactors, names.qzshifts, names.bulkIns, names.bulkOuts, names.resolutionParams,
+ names.domainRatios, names.contrasts);
+ },
+ [](py::tuple t) { // __setstate__
+ if (t.size() != 9)
+ throw std::runtime_error("Encountered invalid state unpickling NameStore object!");
+
+ /* Create a new C++ instance */
+ NameStore names;
+
+ names.params = t[0].cast();
+ names.backgroundParams = t[1].cast();
+ names.scalefactors = t[2].cast();
+ names.qzshifts = t[3].cast();
+ names.bulkIns = t[4].cast();
+ names.bulkOuts = t[5].cast();
+ names.resolutionParams = t[6].cast();
+ names.domainRatios = t[7].cast();
+ names.contrasts = t[8].cast();
+
+ return names;
+ }));
+
py::class_(m, "Checks")
.def(py::init<>())
- .def_readwrite("fitParam", &Checks::fitParam)
- .def_readwrite("fitBackgroundParam", &Checks::fitBackgroundParam)
- .def_readwrite("fitQzshift", &Checks::fitQzshift)
- .def_readwrite("fitScalefactor", &Checks::fitScalefactor)
- .def_readwrite("fitBulkIn", &Checks::fitBulkIn)
- .def_readwrite("fitBulkOut", &Checks::fitBulkOut)
- .def_readwrite("fitResolutionParam", &Checks::fitResolutionParam)
- .def_readwrite("fitDomainRatio", &Checks::fitDomainRatio)
+ .def_readwrite("params", &Checks::params)
+ .def_readwrite("backgroundParams", &Checks::backgroundParams)
+ .def_readwrite("scalefactors", &Checks::scalefactors)
+ .def_readwrite("qzshifts", &Checks::qzshifts)
+ .def_readwrite("bulkIns", &Checks::bulkIns)
+ .def_readwrite("bulkOuts", &Checks::bulkOuts)
+ .def_readwrite("resolutionParams", &Checks::resolutionParams)
+ .def_readwrite("domainRatios", &Checks::domainRatios)
.def(py::pickle(
[](const Checks &chk) { // __getstate__
/* Return a tuple that fully encodes the state of the object */
- return py::make_tuple(chk.fitParam, chk.fitBackgroundParam, chk.fitQzshift, chk.fitScalefactor, chk.fitBulkIn, chk.fitBulkOut,
- chk.fitResolutionParam, chk.fitDomainRatio);
+ return py::make_tuple(chk.params, chk.backgroundParams, chk.scalefactors, chk.qzshifts, chk.bulkIns, chk.bulkOuts,
+ chk.resolutionParams, chk.domainRatios);
},
[](py::tuple t) { // __setstate__
if (t.size() != 8)
@@ -1445,33 +1576,33 @@ PYBIND11_MODULE(rat_core, m) {
/* Create a new C++ instance */
Checks chk;
- chk.fitParam = t[0].cast>();
- chk.fitBackgroundParam = t[1].cast>();
- chk.fitQzshift = t[2].cast>();
- chk.fitScalefactor = t[3].cast>();
- chk.fitBulkIn = t[4].cast>();
- chk.fitBulkOut = t[5].cast>();
- chk.fitResolutionParam = t[6].cast>();
- chk.fitDomainRatio = t[7].cast>();
+ chk.params = t[0].cast>();
+ chk.backgroundParams = t[1].cast>();
+ chk.scalefactors = t[2].cast>();
+ chk.qzshifts = t[3].cast>();
+ chk.bulkIns = t[4].cast>();
+ chk.bulkOuts = t[5].cast>();
+ chk.resolutionParams = t[6].cast>();
+ chk.domainRatios = t[7].cast>();
return chk;
}));
py::class_(m, "Limits")
.def(py::init<>())
- .def_readwrite("param", &Limits::param)
- .def_readwrite("backgroundParam", &Limits::backgroundParam)
- .def_readwrite("qzshift", &Limits::qzshift)
- .def_readwrite("scalefactor", &Limits::scalefactor)
- .def_readwrite("bulkIn", &Limits::bulkIn)
- .def_readwrite("bulkOut", &Limits::bulkOut)
- .def_readwrite("resolutionParam", &Limits::resolutionParam)
- .def_readwrite("domainRatio", &Limits::domainRatio)
+ .def_readwrite("params", &Limits::params)
+ .def_readwrite("backgroundParams", &Limits::backgroundParams)
+ .def_readwrite("scalefactors", &Limits::scalefactors)
+ .def_readwrite("qzshifts", &Limits::qzshifts)
+ .def_readwrite("bulkIns", &Limits::bulkIns)
+ .def_readwrite("bulkOuts", &Limits::bulkOuts)
+ .def_readwrite("resolutionParams", &Limits::resolutionParams)
+ .def_readwrite("domainRatios", &Limits::domainRatios)
.def(py::pickle(
[](const Limits &lim) { // __getstate__
/* Return a tuple that fully encodes the state of the object */
- return py::make_tuple(lim.param, lim.backgroundParam, lim.qzshift, lim.scalefactor, lim.bulkIn, lim.bulkOut,
- lim.resolutionParam, lim.domainRatio);
+ return py::make_tuple(lim.params, lim.backgroundParams, lim.scalefactors, lim.qzshifts, lim.bulkIns, lim.bulkOuts,
+ lim.resolutionParams, lim.domainRatios);
},
[](py::tuple t) { // __setstate__
if (t.size() != 8)
@@ -1480,35 +1611,35 @@ PYBIND11_MODULE(rat_core, m) {
/* Create a new C++ instance */
Limits lim;
- lim.param = t[0].cast>();
- lim.backgroundParam = t[1].cast>();
- lim.qzshift = t[2].cast>();
- lim.scalefactor = t[3].cast>();
- lim.bulkIn = t[4].cast>();
- lim.bulkOut = t[5].cast>();
- lim.resolutionParam = t[6].cast>();
- lim.domainRatio = t[7].cast>();
+ lim.params = t[0].cast>();
+ lim.backgroundParams = t[1].cast>();
+ lim.scalefactors = t[2].cast>();
+ lim.qzshifts = t[3].cast>();
+ lim.bulkIns = t[4].cast>();
+ lim.bulkOuts = t[5].cast>();
+ lim.resolutionParams = t[6].cast>();
+ lim.domainRatios = t[7].cast>();
return lim;
}));
py::class_(m, "Priors")
.def(py::init<>())
- .def_readwrite("param", &Priors::param)
- .def_readwrite("backgroundParam", &Priors::backgroundParam)
- .def_readwrite("qzshift", &Priors::qzshift)
- .def_readwrite("scalefactor", &Priors::scalefactor)
- .def_readwrite("bulkIn", &Priors::bulkIn)
- .def_readwrite("bulkOut", &Priors::bulkOut)
- .def_readwrite("resolutionParam", &Priors::resolutionParam)
- .def_readwrite("domainRatio", &Priors::domainRatio)
+ .def_readwrite("params", &Priors::params)
+ .def_readwrite("backgroundParams", &Priors::backgroundParams)
+ .def_readwrite("scalefactors", &Priors::scalefactors)
+ .def_readwrite("qzshifts", &Priors::qzshifts)
+ .def_readwrite("bulkIns", &Priors::bulkIns)
+ .def_readwrite("bulkOuts", &Priors::bulkOuts)
+ .def_readwrite("resolutionParams", &Priors::resolutionParams)
+ .def_readwrite("domainRatios", &Priors::domainRatios)
.def_readwrite("priorNames", &Priors::priorNames)
.def_readwrite("priorValues", &Priors::priorValues)
.def(py::pickle(
[](const Priors &prior) { // __getstate__
/* Return a tuple that fully encodes the state of the object */
- return py::make_tuple(prior.param, prior.backgroundParam, prior.qzshift, prior.scalefactor, prior.bulkIn,
- prior.bulkOut, prior.resolutionParam, prior.domainRatio, prior.priorNames, prior.priorValues);
+ return py::make_tuple(prior.params, prior.backgroundParams, prior.scalefactors, prior.qzshifts, prior.bulkIns,
+ prior.bulkOuts, prior.resolutionParams, prior.domainRatios, prior.priorNames, prior.priorValues);
},
[](py::tuple t) { // __setstate__
if (t.size() != 10)
@@ -1517,80 +1648,19 @@ PYBIND11_MODULE(rat_core, m) {
/* Create a new C++ instance */
Priors prior;
- prior.param = t[0].cast();
- prior.backgroundParam = t[1].cast