{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Run an EasyVVUQ campaign to analyze the sensitivity for the Ishigami function\n", "\n", "This is done with SC." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.463066Z", "start_time": "2021-06-07T14:15:16.010020Z" }, "code_folding": [ 0 ] }, "outputs": [], "source": [ "# Run an EasyVVUQ campaign to analyze the sensitivity for the Ishigami function\n", "# This is done with SC.\n", "import os\n", "import easyvvuq as uq\n", "import chaospy as cp\n", "import pickle\n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "import time\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.476480Z", "start_time": "2021-06-07T14:15:21.468639Z" } }, "outputs": [ { "data": { "text/plain": [ "'1.20.3'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.__version__" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.500137Z", "start_time": "2021-06-07T14:15:21.486267Z" }, "code_folding": [ 0, 1 ] }, "outputs": [], "source": [ "# Define the Ishigami function\n", "def ishigamiSA(a,b):\n", " '''Exact sensitivity indices of the Ishigami function for given a and b.\n", " From https://openturns.github.io/openturns/master/examples/meta_modeling/chaos_ishigami.html\n", " '''\n", " var = 1.0/2 + a**2/8 + b*np.pi**4/5 + b**2*np.pi**8/18\n", " S1 = (1.0/2 + b*np.pi**4/5+b**2*np.pi**8/50)/var\n", " S2 = (a**2/8)/var\n", " S3 = 0\n", " S13 = b**2*np.pi**8/2*(1.0/9-1.0/25)/var\n", " exact = {\n", " 'expectation' : a/2,\n", " 'variance' : var,\n", " 'S1' : (1.0/2 + b*np.pi**4/5+b**2*np.pi**8.0/50)/var,\n", " 'S2' : (a**2/8)/var,\n", " 'S3' : 0,\n", " 'S12' : 0,\n", " 'S23' : 0,\n", " 'S13' : S13,\n", " 'S123' : 0,\n", " 'ST1' : S1 + S13,\n", " 'ST2' : S2,\n", " 'ST3' : S3 + S13\n", " }\n", " return exact\n", "\n", "Ishigami_a = 7.0\n", "Ishigami_b = 0.1\n", "exact = ishigamiSA(Ishigami_a, Ishigami_b)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.510035Z", "start_time": "2021-06-07T14:15:21.505751Z" }, "code_folding": [ 0 ] }, "outputs": [], "source": [ "# define a model to run the Ishigami code directly from python, expecting a dictionary and returning a dictionary\n", "def run_ishigami_model(input):\n", " import Ishigami\n", " qois = [\"Ishigami\"]\n", " del input['out_file']\n", " return {qois[0]: Ishigami.evaluate(**input)}" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.520594Z", "start_time": "2021-06-07T14:15:21.515444Z" }, "code_folding": [ 0 ] }, "outputs": [], "source": [ "# Define parameter space\n", "def define_params():\n", " return {\n", " \"x1\": {\"type\": \"float\", \"min\": -np.pi, \"max\": np.pi, \"default\": 0.0},\n", " \"x2\": {\"type\": \"float\", \"min\": -np.pi, \"max\": np.pi, \"default\": 0.0},\n", " \"x3\": {\"type\": \"float\", \"min\": -np.pi, \"max\": np.pi, \"default\": 0.0},\n", " \"a\": {\"type\": \"float\", \"min\": Ishigami_a, \"max\": Ishigami_a, \"default\": Ishigami_a},\n", " \"b\": {\"type\": \"float\", \"min\": Ishigami_b, \"max\": Ishigami_b, \"default\": Ishigami_b},\n", " \"out_file\": {\"type\": \"string\", \"default\": \"output.csv\"}\n", " }" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.530671Z", "start_time": "2021-06-07T14:15:21.525407Z" }, "code_folding": [ 0 ] }, "outputs": [], "source": [ "# Define parameter space\n", "def define_vary():\n", " return {\n", " \"x1\": cp.Uniform(-np.pi, np.pi),\n", " \"x2\": cp.Uniform(-np.pi, np.pi),\n", " \"x3\": cp.Uniform(-np.pi, np.pi)\n", " }" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:15:21.547702Z", "start_time": "2021-06-07T14:15:21.534015Z" }, "code_folding": [ 0 ] }, "outputs": [], "source": [ "# Set up and run a campaign\n", "def run_campaign(sc_order=2, use_files=False):\n", "\n", " times = np.zeros(7)\n", "\n", " time_start = time.time()\n", " time_start_whole = time_start\n", "\n", " # Set up a fresh campaign called \"Ishigami_sc.\"\n", " my_campaign = uq.Campaign(name='Ishigami_sc.')\n", "\n", "\n", " # Create an encoder and decoder for SC test app\n", " if use_files:\n", " encoder = uq.encoders.GenericEncoder(template_fname='Ishigami.template',\n", " delimiter='$',\n", " target_filename='Ishigami_in.json')\n", "\n", " decoder = uq.decoders.SimpleCSV(target_filename=\"output.csv\",\n", " output_columns=[\"Ishigami\"])\n", "\n", " execute = uq.actions.ExecuteLocal('python3 %s/Ishigami.py Ishigami_in.json' % (os.getcwd()))\n", "\n", " actions = uq.actions.Actions(uq.actions.CreateRunDirectory('/tmp'), \n", " uq.actions.Encode(encoder), execute, uq.actions.Decode(decoder))\n", " else:\n", " actions = uq.actions.Actions(uq.actions.ExecutePython(run_ishigami_model))\n", "\n", " # Add the app (automatically set as current app)\n", " my_campaign.add_app(name=\"Ishigami\", params=define_params(), actions=actions)\n", "\n", " # Create the sampler\n", " time_end = time.time()\n", " times[1] = time_end-time_start\n", " print('Time for phase 1 = %.3f' % (times[1]))\n", "\n", " time_start = time.time()\n", " # Associate a sampler with the campaign\n", " my_campaign.set_sampler(uq.sampling.SCSampler(vary=define_vary(), polynomial_order=sc_order))\n", "\n", " # Will draw all (of the finite set of samples)\n", " my_campaign.draw_samples()\n", " print('Number of samples = %s' % my_campaign.get_active_sampler().count)\n", "\n", " time_end = time.time()\n", " times[2] = time_end-time_start\n", " print('Time for phase 2 = %.3f' % (times[2]))\n", "\n", " time_start = time.time()\n", " # Run the cases\n", " my_campaign.execute(sequential=True).collate(progress_bar=True)\n", "\n", " time_end = time.time()\n", " times[3] = time_end-time_start\n", " print('Time for phase 3 = %.3f' % (times[3]))\n", "\n", " time_start = time.time()\n", " # Get the results\n", " results_df = my_campaign.get_collation_result()\n", "\n", " time_end = time.time()\n", " times[4] = time_end-time_start\n", " print('Time for phase 4 = %.3f' % (times[4]))\n", "\n", " time_start = time.time()\n", " # Post-processing analysis\n", " results = my_campaign.analyse(qoi_cols=[\"Ishigami\"])\n", " \n", " time_end = time.time()\n", " times[5] = time_end-time_start\n", " print('Time for phase 5 = %.3f' % (times[5]))\n", "\n", " time_start = time.time()\n", " # Save the results\n", " pickle.dump(results, open('Ishigami_results.pickle','bw'))\n", " time_end = time.time()\n", " times[6] = time_end-time_start\n", " print('Time for phase 6 = %.3f' % (times[6]))\n", "\n", " times[0] = time_end - time_start_whole\n", "\n", " return results_df, results, times, sc_order, my_campaign.get_active_sampler().count" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:17:40.849526Z", "start_time": "2021-06-07T14:15:21.555355Z" }, "code_folding": [ 0 ], "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 8/8 [00:00<00:00, 940.64it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 1 = 0.044\n", "Number of samples = 8\n", "Time for phase 2 = 0.045\n", "Time for phase 3 = 0.027\n", "Time for phase 4 = 0.016\n", "Time for phase 5 = 0.023\n", "Time for phase 6 = 0.002\n", "Time for phase 1 = 0.019\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n", "100%|██████████| 27/27 [00:00<00:00, 2785.54it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 27\n", "Time for phase 2 = 0.076\n", "Time for phase 3 = 0.019\n", "Time for phase 4 = 0.004\n", "Time for phase 5 = 0.040\n", "Time for phase 6 = 0.003\n", "Time for phase 1 = 0.018\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 64/64 [00:00<00:00, 2152.86it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 64\n", "Time for phase 2 = 0.145\n", "Time for phase 3 = 0.044\n", "Time for phase 4 = 0.009\n", "Time for phase 5 = 0.105\n", "Time for phase 6 = 0.003\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 1 = 0.044\n", "Number of samples = 125\n", "Time for phase 2 = 0.210\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 125/125 [00:00<00:00, 2963.33it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 0.060\n", "Time for phase 4 = 0.009\n", "Time for phase 5 = 0.131\n", "Time for phase 6 = 0.002\n", "Time for phase 1 = 0.017\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 216/216 [00:00<00:00, 3375.84it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 216\n", "Time for phase 2 = 0.238\n", "Time for phase 3 = 0.078\n", "Time for phase 4 = 0.008\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 5 = 0.293\n", "Time for phase 6 = 0.003\n", "Time for phase 1 = 0.024\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 343/343 [00:00<00:00, 4233.40it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 343\n", "Time for phase 2 = 0.348\n", "Time for phase 3 = 0.103\n", "Time for phase 4 = 0.011\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 5 = 0.457\n", "Time for phase 6 = 0.005\n", "Time for phase 1 = 0.034\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 512/512 [00:00<00:00, 4486.04it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 512\n", "Time for phase 2 = 0.563\n", "Time for phase 3 = 0.137\n", "Time for phase 4 = 0.014\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 5 = 0.545\n", "Time for phase 6 = 0.008\n", "Time for phase 1 = 0.037\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 729/729 [00:00<00:00, 4553.03it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 729\n", "Time for phase 2 = 0.456\n", "Time for phase 3 = 0.194\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 4 = 0.018\n", "Time for phase 5 = 0.721\n", "Time for phase 6 = 0.005\n", "Time for phase 1 = 0.026\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 44%|████▍ | 442/1000 [00:00<00:00, 4418.19it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 1000\n", "Time for phase 2 = 0.612\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:00<00:00, 4381.37it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 0.266\n", "Time for phase 4 = 0.029\n", "Time for phase 5 = 1.033\n", "Time for phase 6 = 0.006\n", "Time for phase 1 = 0.025\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 30%|███ | 405/1331 [00:00<00:00, 4035.10it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 1331\n", "Time for phase 2 = 0.931\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1331/1331 [00:00<00:00, 3897.26it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 0.390\n", "Time for phase 4 = 0.031\n", "Time for phase 5 = 1.407\n", "Time for phase 6 = 0.012\n", "Time for phase 1 = 0.033\n", "Number of samples = 1728\n", "Time for phase 2 = 1.003\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1728/1728 [00:00<00:00, 3370.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 0.753\n", "Time for phase 4 = 0.053\n", "Time for phase 5 = 2.527\n", "Time for phase 6 = 0.011\n", "Time for phase 1 = 0.028\n", "Number of samples = 2197\n", "Time for phase 2 = 1.260\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 2197/2197 [00:00<00:00, 4021.69it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 0.773\n", "Time for phase 4 = 0.079\n", "Time for phase 5 = 2.388\n", "Time for phase 6 = 0.007\n", "Time for phase 1 = 0.019\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 19%|█▊ | 514/2744 [00:00<00:00, 5130.82it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Number of samples = 2744\n", "Time for phase 2 = 1.476\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 2744/2744 [00:00<00:00, 5031.89it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 0.630\n", "Time for phase 4 = 0.135\n", "Time for phase 5 = 3.027\n", "Time for phase 6 = 0.055\n", "Time for phase 1 = 0.041\n", "Number of samples = 3375\n", "Time for phase 2 = 1.584\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3375/3375 [00:00<00:00, 3976.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 1.068\n", "Time for phase 4 = 0.079\n", "Time for phase 5 = 4.012\n", "Time for phase 6 = 0.018\n", "Time for phase 1 = 0.025\n", "Number of samples = 4096\n", "Time for phase 2 = 2.015\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 4096/4096 [00:00<00:00, 4329.78it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 1.173\n", "Time for phase 4 = 0.240\n", "Time for phase 5 = 6.876\n", "Time for phase 6 = 0.022\n", "Time for phase 1 = 0.029\n", "Number of samples = 4913\n", "Time for phase 2 = 3.027\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 4913/4913 [00:01<00:00, 2775.14it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 2.001\n", "Time for phase 4 = 0.284\n", "Time for phase 5 = 8.112\n", "Time for phase 6 = 0.025\n", "Time for phase 1 = 0.034\n", "Number of samples = 5832\n", "Time for phase 2 = 2.935\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 5832/5832 [00:01<00:00, 4304.04it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 1.595\n", "Time for phase 4 = 0.317\n", "Time for phase 5 = 11.989\n", "Time for phase 6 = 0.048\n", "Time for phase 1 = 0.064\n", "Number of samples = 6859\n", "Time for phase 2 = 4.160\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 6859/6859 [00:01<00:00, 3865.79it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 2.020\n", "Time for phase 4 = 0.296\n", "Time for phase 5 = 11.716\n", "Time for phase 6 = 0.030\n", "Time for phase 1 = 0.034\n", "Number of samples = 8000\n", "Time for phase 2 = 4.110\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 8000/8000 [00:02<00:00, 3496.31it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 2.624\n", "Time for phase 4 = 0.206\n", "Time for phase 5 = 15.051\n", "Time for phase 6 = 0.043\n", "Time for phase 1 = 0.034\n", "Number of samples = 9261\n", "Time for phase 2 = 4.660\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 9261/9261 [00:02<00:00, 3531.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time for phase 3 = 2.939\n", "Time for phase 4 = 0.264\n", "Time for phase 5 = 18.864\n", "Time for phase 6 = 0.139\n" ] } ], "source": [ "# Calculate the stochastic collocation expansion for a range of orders\n", "\n", "R = {}\n", "for sc_order in range(1, 21):\n", " R[sc_order] = {}\n", " (R[sc_order]['results_df'], \n", " R[sc_order]['results'], \n", " R[sc_order]['times'], \n", " R[sc_order]['order'], \n", " R[sc_order]['number_of_samples']) = run_campaign(sc_order=sc_order, use_files=False)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:17:41.284212Z", "start_time": "2021-06-07T14:17:40.854979Z" }, "code_folding": [ 0 ] }, "outputs": [], "source": [ "# save the results\n", "\n", "pickle.dump(R, open('collected_results.pickle','bw'))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-06-07T14:17:41.753581Z", "start_time": "2021-06-07T14:17:41.285527Z" }, "code_folding": [ 0 ] }, "outputs": [ { "data": { "text/html": [ "
\n", " | Total | \n", "Phase 1 | \n", "Phase 2 | \n", "Phase 3 | \n", "Phase 4 | \n", "Phase 5 | \n", "Phase 6 | \n", "
---|---|---|---|---|---|---|---|
1 | \n", "0.158249 | \n", "0.044463 | \n", "0.045157 | \n", "0.027455 | \n", "0.015654 | \n", "0.023364 | \n", "0.001825 | \n", "
2 | \n", "0.159667 | \n", "0.018620 | \n", "0.075858 | \n", "0.018592 | \n", "0.003819 | \n", "0.039893 | \n", "0.002594 | \n", "
3 | \n", "0.323880 | \n", "0.017593 | \n", "0.145160 | \n", "0.044086 | \n", "0.008541 | \n", "0.104988 | \n", "0.003109 | \n", "
4 | \n", "0.454608 | \n", "0.043664 | \n", "0.209539 | \n", "0.059554 | \n", "0.008784 | \n", "0.131073 | \n", "0.001588 | \n", "
5 | \n", "0.637004 | \n", "0.016862 | \n", "0.237678 | \n", "0.078054 | \n", "0.008347 | \n", "0.293213 | \n", "0.002509 | \n", "
6 | \n", "0.949501 | \n", "0.023694 | \n", "0.348445 | \n", "0.103378 | \n", "0.011489 | \n", "0.457311 | \n", "0.004618 | \n", "
7 | \n", "1.301590 | \n", "0.034174 | \n", "0.562767 | \n", "0.137497 | \n", "0.013694 | \n", "0.545244 | \n", "0.007882 | \n", "
8 | \n", "1.432124 | \n", "0.037351 | \n", "0.456433 | \n", "0.193846 | \n", "0.018405 | \n", "0.720531 | \n", "0.004730 | \n", "
9 | \n", "1.974014 | \n", "0.025784 | \n", "0.611962 | \n", "0.265501 | \n", "0.029102 | \n", "1.033048 | \n", "0.005515 | \n", "
10 | \n", "2.797863 | \n", "0.024832 | \n", "0.930756 | \n", "0.390384 | \n", "0.031481 | \n", "1.407211 | \n", "0.011949 | \n", "
11 | \n", "4.380687 | \n", "0.032555 | \n", "1.002752 | \n", "0.752780 | \n", "0.053494 | \n", "2.526922 | \n", "0.010974 | \n", "
12 | \n", "4.536749 | \n", "0.028437 | \n", "1.259950 | \n", "0.773154 | \n", "0.078727 | \n", "2.388321 | \n", "0.007400 | \n", "
13 | \n", "5.343889 | \n", "0.018555 | \n", "1.476173 | \n", "0.630431 | \n", "0.135218 | \n", "3.027458 | \n", "0.054535 | \n", "
14 | \n", "6.803688 | \n", "0.040932 | \n", "1.584220 | \n", "1.068493 | \n", "0.079370 | \n", "4.012036 | \n", "0.017829 | \n", "
15 | \n", "10.351328 | \n", "0.024677 | \n", "2.015312 | \n", "1.172575 | \n", "0.240019 | \n", "6.875905 | \n", "0.021886 | \n", "
16 | \n", "13.479355 | \n", "0.028786 | \n", "3.027048 | \n", "2.000618 | \n", "0.284229 | \n", "8.112038 | \n", "0.024901 | \n", "
17 | \n", "16.928440 | \n", "0.033623 | \n", "2.935383 | \n", "1.595398 | \n", "0.317334 | \n", "11.989267 | \n", "0.048347 | \n", "
18 | \n", "18.287801 | \n", "0.064279 | \n", "4.160151 | \n", "2.020112 | \n", "0.295770 | \n", "11.715884 | \n", "0.030149 | \n", "
19 | \n", "22.068392 | \n", "0.033853 | \n", "4.109619 | \n", "2.624097 | \n", "0.205618 | \n", "15.050779 | \n", "0.043160 | \n", "
20 | \n", "26.902022 | \n", "0.034284 | \n", "4.659992 | \n", "2.939169 | \n", "0.264200 | \n", "18.864318 | \n", "0.139383 | \n", "