Rover Model Explanation and Preliminaries

This notebook covers the setup of a lane-following rover fault model for understanding the effects of faults in AI-driven systems. This model uses the fmdtools simulation toolkit to simulate the nominal and faulty behaviors of the rover over a set of fault scenarios and classify/assess risk.

Copyright © 2024, United States Government, as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.

The “"Fault Model Design tools - fmdtools version 2"” software is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
[1]:
import fmdtools.sim.propagate as prop
import multiprocessing as mp

This model is defined in rover_model.py. - Rover is the class defining the model, - RoverParam is the class used to generate model parameters (given design variables), and - plot_map is used to visualize the trajectory of the rover over time

[2]:
from rover_model import Rover, RoverParam, GroundParam

Model Setup

[3]:
mdl = Rover()

The functions and flows of the model are shown below, and were taken from the design of the system:

[4]:
from fmdtools.define.architecture.function import FunctionArchitectureFxnGraph
mg = FunctionArchitectureFxnGraph(mdl)
fig, ax = mg.draw()
../../_images/examples_rover_Rover_Setup_Notebook_7_0.png

The functions are: - Operator, the operator of the rover who turns it on/off and takes control if needed (not fully implemented) - Power, the battery and power supply - Communications, the radio used to relay back position/etc. to the operator - Avionics, the computer/control system which determines where to direct the given position information - Override, the system that enables the operator to control the rover instead - Perception, the camera/AI system which percieves the ground and then (not fully implemented) - Environment, which defines the lines and/or changes to the environment based on environmental conditions and/or the movement of the system

The flows are: - Control, the physical interactions between the operator and the rover (i.e. on/off) - Comms, the communications between the operator and the rover (position, video, etc.) - OverrideComms, the communications between the operator and the - Pos_Signal, the rover’s internal idea of its position and velocity - EE5, EE12, EE15, the electrical power provided by the battery - AvionicsControl, the contol signals from the avionics to the drive system - Video, the video feed/signal from the camera to the avionics - MotorControl, the control signals to the drive system(s) - Ground, the real position of the rover and the ground/environment/etc.

The model is presently a mixed static/dynamic propagation model in which most function behaviors propagate over time, except for the power system, which propagates in a dynamic step. This may change depending on the necessity to model interactions between these systems. This is shown below.

[5]:
mg.set_exec_order(mdl)
fig, ax = mg.draw()
../../_images/examples_rover_Rover_Setup_Notebook_10_0.png

The run order for this model is additionally shown below.

[6]:
mdl.plot_dynamic_run_order(rotateticks=True)
[6]:
(<Figure size 640x480 with 1 Axes>, <Axes: >)
../../_images/examples_rover_Rover_Setup_Notebook_12_1.png

Model simulation

Currently, the model can be simulated in a few situations for lane-tracking: a sine wave and a 90-degree turn.

Below shows the 90-degree turn. As shown, the centerline tracking is not perfect, with a fairly large deviation in distance (current limit for viewing the line in the model is 1 meter). This should be controlled in the future by lowering the timestep (enabling more corrections) or enabling some reduction to velocity when going around corners.

[7]:
mdl = Rover(p=RoverParam(ground = GroundParam(linetype='turn')))
endresults, mdlhist = prop.nominal(mdl)
mdlhist.plot_trajectories('pos.s.x', 'pos.s.y')
[7]:
(<Figure size 400x400 with 1 Axes>, <Axes: >)
../../_images/examples_rover_Rover_Setup_Notebook_14_1.png
[8]:
mdlhist['time']
[8]:
array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
        11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
        22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,
        33.,  34.,  35.,  36.,  37.,  38.,  39.,  40.,  41.,  42.,  43.,
        44.,  45.,  46.,  47.,  48.,  49.,  50.,  51.,  52.,  53.,  54.,
        55.,  56.,  57.,  58.,  59.,  60.,  61.,  62.,  63.,  64.,  65.,
        66.,  67.,  68.,  69.,  70.,  71.,  72.,  73.,  74.,  75.,  76.,
        77.,  78.,  79.,  80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,
        88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,  97.,  98.,
        99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,
       110., 111., 112., 113., 114., 115., 116., 117., 118., 119., 120.])

Below shows the sine wave. As shown, this curve has a relatively low amplitude (see the y-axis), which results in low tracking error.

[9]:
mdl = Rover(p=RoverParam(ground = GroundParam(linetype='sine')))
endresults, mdlhist = prop.nominal(mdl)
mdlhist.plot_trajectories('pos.s.x', 'pos.s.y')
[9]:
(<Figure size 400x400 with 1 Axes>, <Axes: >)
../../_images/examples_rover_Rover_Setup_Notebook_17_1.png
[10]:
mdlhist['time']
[10]:
array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
        11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
        22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,
        33.,  34.,  35.,  36.,  37.,  38.,  39.,  40.,  41.,  42.,  43.,
        44.,  45.,  46.,  47.,  48.,  49.,  50.,  51.,  52.,  53.,  54.,
        55.,  56.,  57.,  58.,  59.,  60.,  61.,  62.,  63.,  64.,  65.,
        66.,  67.,  68.,  69.,  70.,  71.,  72.,  73.,  74.,  75.,  76.,
        77.,  78.,  79.,  80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,
        88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,  97.,  98.,
        99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,
       110., 111., 112.])

The performance of the rover in these situations is dependent on the parameters of the situation (e.g., the radius of the curve and the amplitude of the sine wave). Thus, it is important to define the operational envelope for the system. This can be done using a ParameterSample and ParameterDomain, which can be used to define ranges of variables to simulate the system under.

[11]:
from fmdtools.sim.sample import ParameterDomain, ParameterSample
pd_turn = ParameterDomain(RoverParam)
pd_turn.add_constant("ground.linetype", "turn")
pd_turn.add_variables("ground.radius", "ground.x_start", lims={"ground.radius": (5, 25), "ground.x_start": (0, 5)})

pd_turn
[11]:
ParameterDomain with:
 - variables: {'ground.radius': (5, 25), 'ground.x_start': (0, 5)}
 - constants: {'ground.linetype': 'turn'}
 - parameter_initializer: RoverParam
[12]:
pd_sine = ParameterDomain(RoverParam)
pd_sine.add_constant("ground.linetype", "sine")
pd_sine.add_variables("ground.amp", "ground.period", lims={"ground.amp":(0, 8), "ground.period": (10, 50)})

pd_sine
[12]:
ParameterDomain with:
 - variables: {'ground.amp': (0, 8), 'ground.period': (10, 50)}
 - constants: {'ground.linetype': 'sine'}
 - parameter_initializer: RoverParam

In this sample we then sample two major situations–a wavelength and amplitude for the sine wave, and a radius and start location for the turn.

[13]:
ps_sine = ParameterSample(pd_sine)
ps_sine.add_variable_ranges(comb_kwargs={'resolutions':{'ground.amp': 0.2, "ground.period": 10}})

ps_sine.scenarios()
[13]:
[ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.0, 1: 10}, rangeid='', name='rep0_range_0'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.0, 1: 20}, rangeid='', name='rep0_range_1'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.0, 1: 30}, rangeid='', name='rep0_range_2'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.0, 1: 40}, rangeid='', name='rep0_range_3'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.0, 1: 50}, rangeid='', name='rep0_range_4'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.2, 1: 10}, rangeid='', name='rep0_range_5'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.2, 1: 20}, rangeid='', name='rep0_range_6'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.2, 1: 30}, rangeid='', name='rep0_range_7'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.2, 1: 40}, rangeid='', name='rep0_range_8'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.2, 1: 50}, rangeid='', name='rep0_range_9'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.4, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.4, 1: 10}, rangeid='', name='rep0_range_10'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.4, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.4, 1: 20}, rangeid='', name='rep0_range_11'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.4, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.4, 1: 30}, rangeid='', name='rep0_range_12'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.4, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.4, 1: 40}, rangeid='', name='rep0_range_13'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.4, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.4, 1: 50}, rangeid='', name='rep0_range_14'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.6000000000000001, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.6000000000000001, 1: 10}, rangeid='', name='rep0_range_15'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.6000000000000001, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.6000000000000001, 1: 20}, rangeid='', name='rep0_range_16'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.6000000000000001, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.6000000000000001, 1: 30}, rangeid='', name='rep0_range_17'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.6000000000000001, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.6000000000000001, 1: 40}, rangeid='', name='rep0_range_18'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.6000000000000001, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.6000000000000001, 1: 50}, rangeid='', name='rep0_range_19'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.8, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.8, 1: 10}, rangeid='', name='rep0_range_20'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.8, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.8, 1: 20}, rangeid='', name='rep0_range_21'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.8, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.8, 1: 30}, rangeid='', name='rep0_range_22'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.8, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.8, 1: 40}, rangeid='', name='rep0_range_23'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 0.8, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 0.8, 1: 50}, rangeid='', name='rep0_range_24'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.0, 1: 10}, rangeid='', name='rep0_range_25'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.0, 1: 20}, rangeid='', name='rep0_range_26'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.0, 1: 30}, rangeid='', name='rep0_range_27'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.0, 1: 40}, rangeid='', name='rep0_range_28'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.0, 1: 50}, rangeid='', name='rep0_range_29'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.2000000000000002, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.2000000000000002, 1: 10}, rangeid='', name='rep0_range_30'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.2000000000000002, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.2000000000000002, 1: 20}, rangeid='', name='rep0_range_31'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.2000000000000002, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.2000000000000002, 1: 30}, rangeid='', name='rep0_range_32'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.2000000000000002, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.2000000000000002, 1: 40}, rangeid='', name='rep0_range_33'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.2000000000000002, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.2000000000000002, 1: 50}, rangeid='', name='rep0_range_34'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.4000000000000001, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.4000000000000001, 1: 10}, rangeid='', name='rep0_range_35'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.4000000000000001, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.4000000000000001, 1: 20}, rangeid='', name='rep0_range_36'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.4000000000000001, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.4000000000000001, 1: 30}, rangeid='', name='rep0_range_37'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.4000000000000001, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.4000000000000001, 1: 40}, rangeid='', name='rep0_range_38'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.4000000000000001, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.4000000000000001, 1: 50}, rangeid='', name='rep0_range_39'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.6, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.6, 1: 10}, rangeid='', name='rep0_range_40'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.6, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.6, 1: 20}, rangeid='', name='rep0_range_41'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.6, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.6, 1: 30}, rangeid='', name='rep0_range_42'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.6, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.6, 1: 40}, rangeid='', name='rep0_range_43'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.6, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.6, 1: 50}, rangeid='', name='rep0_range_44'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.8, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.8, 1: 10}, rangeid='', name='rep0_range_45'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.8, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.8, 1: 20}, rangeid='', name='rep0_range_46'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.8, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.8, 1: 30}, rangeid='', name='rep0_range_47'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.8, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.8, 1: 40}, rangeid='', name='rep0_range_48'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 1.8, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 1.8, 1: 50}, rangeid='', name='rep0_range_49'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.0, 1: 10}, rangeid='', name='rep0_range_50'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.0, 1: 20}, rangeid='', name='rep0_range_51'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.0, 1: 30}, rangeid='', name='rep0_range_52'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.0, 1: 40}, rangeid='', name='rep0_range_53'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.0, 1: 50}, rangeid='', name='rep0_range_54'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.2, 1: 10}, rangeid='', name='rep0_range_55'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.2, 1: 20}, rangeid='', name='rep0_range_56'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.2, 1: 30}, rangeid='', name='rep0_range_57'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.2, 1: 40}, rangeid='', name='rep0_range_58'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.2, 1: 50}, rangeid='', name='rep0_range_59'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.4000000000000004, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.4000000000000004, 1: 10}, rangeid='', name='rep0_range_60'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.4000000000000004, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.4000000000000004, 1: 20}, rangeid='', name='rep0_range_61'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.4000000000000004, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.4000000000000004, 1: 30}, rangeid='', name='rep0_range_62'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.4000000000000004, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.4000000000000004, 1: 40}, rangeid='', name='rep0_range_63'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.4000000000000004, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.4000000000000004, 1: 50}, rangeid='', name='rep0_range_64'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.6, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.6, 1: 10}, rangeid='', name='rep0_range_65'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.6, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.6, 1: 20}, rangeid='', name='rep0_range_66'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.6, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.6, 1: 30}, rangeid='', name='rep0_range_67'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.6, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.6, 1: 40}, rangeid='', name='rep0_range_68'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.6, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.6, 1: 50}, rangeid='', name='rep0_range_69'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.8000000000000003, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.8000000000000003, 1: 10}, rangeid='', name='rep0_range_70'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.8000000000000003, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.8000000000000003, 1: 20}, rangeid='', name='rep0_range_71'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.8000000000000003, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.8000000000000003, 1: 30}, rangeid='', name='rep0_range_72'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.8000000000000003, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.8000000000000003, 1: 40}, rangeid='', name='rep0_range_73'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 2.8000000000000003, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 2.8000000000000003, 1: 50}, rangeid='', name='rep0_range_74'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.0, 1: 10}, rangeid='', name='rep0_range_75'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.0, 1: 20}, rangeid='', name='rep0_range_76'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.0, 1: 30}, rangeid='', name='rep0_range_77'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.0, 1: 40}, rangeid='', name='rep0_range_78'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.0, 1: 50}, rangeid='', name='rep0_range_79'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.2, 1: 10}, rangeid='', name='rep0_range_80'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.2, 1: 20}, rangeid='', name='rep0_range_81'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.2, 1: 30}, rangeid='', name='rep0_range_82'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.2, 1: 40}, rangeid='', name='rep0_range_83'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.2, 1: 50}, rangeid='', name='rep0_range_84'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.4000000000000004, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.4000000000000004, 1: 10}, rangeid='', name='rep0_range_85'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.4000000000000004, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.4000000000000004, 1: 20}, rangeid='', name='rep0_range_86'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.4000000000000004, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.4000000000000004, 1: 30}, rangeid='', name='rep0_range_87'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.4000000000000004, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.4000000000000004, 1: 40}, rangeid='', name='rep0_range_88'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.4000000000000004, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.4000000000000004, 1: 50}, rangeid='', name='rep0_range_89'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.6, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.6, 1: 10}, rangeid='', name='rep0_range_90'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.6, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.6, 1: 20}, rangeid='', name='rep0_range_91'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.6, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.6, 1: 30}, rangeid='', name='rep0_range_92'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.6, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.6, 1: 40}, rangeid='', name='rep0_range_93'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.6, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.6, 1: 50}, rangeid='', name='rep0_range_94'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.8000000000000003, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.8000000000000003, 1: 10}, rangeid='', name='rep0_range_95'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.8000000000000003, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.8000000000000003, 1: 20}, rangeid='', name='rep0_range_96'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.8000000000000003, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.8000000000000003, 1: 30}, rangeid='', name='rep0_range_97'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.8000000000000003, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.8000000000000003, 1: 40}, rangeid='', name='rep0_range_98'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 3.8000000000000003, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 3.8000000000000003, 1: 50}, rangeid='', name='rep0_range_99'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.0, 1: 10}, rangeid='', name='rep0_range_100'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.0, 1: 20}, rangeid='', name='rep0_range_101'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.0, 1: 30}, rangeid='', name='rep0_range_102'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.0, 1: 40}, rangeid='', name='rep0_range_103'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.0, 1: 50}, rangeid='', name='rep0_range_104'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.2, 1: 10}, rangeid='', name='rep0_range_105'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.2, 1: 20}, rangeid='', name='rep0_range_106'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.2, 1: 30}, rangeid='', name='rep0_range_107'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.2, 1: 40}, rangeid='', name='rep0_range_108'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.2, 1: 50}, rangeid='', name='rep0_range_109'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.4, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.4, 1: 10}, rangeid='', name='rep0_range_110'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.4, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.4, 1: 20}, rangeid='', name='rep0_range_111'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.4, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.4, 1: 30}, rangeid='', name='rep0_range_112'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.4, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.4, 1: 40}, rangeid='', name='rep0_range_113'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.4, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.4, 1: 50}, rangeid='', name='rep0_range_114'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.6000000000000005, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.6000000000000005, 1: 10}, rangeid='', name='rep0_range_115'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.6000000000000005, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.6000000000000005, 1: 20}, rangeid='', name='rep0_range_116'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.6000000000000005, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.6000000000000005, 1: 30}, rangeid='', name='rep0_range_117'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.6000000000000005, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.6000000000000005, 1: 40}, rangeid='', name='rep0_range_118'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.6000000000000005, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.6000000000000005, 1: 50}, rangeid='', name='rep0_range_119'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.800000000000001, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.800000000000001, 1: 10}, rangeid='', name='rep0_range_120'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.800000000000001, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.800000000000001, 1: 20}, rangeid='', name='rep0_range_121'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.800000000000001, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.800000000000001, 1: 30}, rangeid='', name='rep0_range_122'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.800000000000001, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.800000000000001, 1: 40}, rangeid='', name='rep0_range_123'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 4.800000000000001, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 4.800000000000001, 1: 50}, rangeid='', name='rep0_range_124'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.0, 1: 10}, rangeid='', name='rep0_range_125'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.0, 1: 20}, rangeid='', name='rep0_range_126'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.0, 1: 30}, rangeid='', name='rep0_range_127'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.0, 1: 40}, rangeid='', name='rep0_range_128'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.0, 1: 50}, rangeid='', name='rep0_range_129'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.2, 1: 10}, rangeid='', name='rep0_range_130'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.2, 1: 20}, rangeid='', name='rep0_range_131'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.2, 1: 30}, rangeid='', name='rep0_range_132'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.2, 1: 40}, rangeid='', name='rep0_range_133'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.2, 1: 50}, rangeid='', name='rep0_range_134'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.4, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.4, 1: 10}, rangeid='', name='rep0_range_135'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.4, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.4, 1: 20}, rangeid='', name='rep0_range_136'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.4, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.4, 1: 30}, rangeid='', name='rep0_range_137'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.4, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.4, 1: 40}, rangeid='', name='rep0_range_138'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.4, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.4, 1: 50}, rangeid='', name='rep0_range_139'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.6000000000000005, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.6000000000000005, 1: 10}, rangeid='', name='rep0_range_140'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.6000000000000005, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.6000000000000005, 1: 20}, rangeid='', name='rep0_range_141'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.6000000000000005, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.6000000000000005, 1: 30}, rangeid='', name='rep0_range_142'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.6000000000000005, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.6000000000000005, 1: 40}, rangeid='', name='rep0_range_143'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.6000000000000005, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.6000000000000005, 1: 50}, rangeid='', name='rep0_range_144'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.800000000000001, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.800000000000001, 1: 10}, rangeid='', name='rep0_range_145'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.800000000000001, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.800000000000001, 1: 20}, rangeid='', name='rep0_range_146'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.800000000000001, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.800000000000001, 1: 30}, rangeid='', name='rep0_range_147'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.800000000000001, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.800000000000001, 1: 40}, rangeid='', name='rep0_range_148'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 5.800000000000001, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 5.800000000000001, 1: 50}, rangeid='', name='rep0_range_149'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.0, 1: 10}, rangeid='', name='rep0_range_150'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.0, 1: 20}, rangeid='', name='rep0_range_151'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.0, 1: 30}, rangeid='', name='rep0_range_152'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.0, 1: 40}, rangeid='', name='rep0_range_153'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.0, 1: 50}, rangeid='', name='rep0_range_154'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.2, 1: 10}, rangeid='', name='rep0_range_155'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.2, 1: 20}, rangeid='', name='rep0_range_156'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.2, 1: 30}, rangeid='', name='rep0_range_157'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.2, 1: 40}, rangeid='', name='rep0_range_158'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.2, 1: 50}, rangeid='', name='rep0_range_159'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.4, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.4, 1: 10}, rangeid='', name='rep0_range_160'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.4, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.4, 1: 20}, rangeid='', name='rep0_range_161'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.4, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.4, 1: 30}, rangeid='', name='rep0_range_162'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.4, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.4, 1: 40}, rangeid='', name='rep0_range_163'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.4, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.4, 1: 50}, rangeid='', name='rep0_range_164'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.6000000000000005, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.6000000000000005, 1: 10}, rangeid='', name='rep0_range_165'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.6000000000000005, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.6000000000000005, 1: 20}, rangeid='', name='rep0_range_166'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.6000000000000005, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.6000000000000005, 1: 30}, rangeid='', name='rep0_range_167'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.6000000000000005, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.6000000000000005, 1: 40}, rangeid='', name='rep0_range_168'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.6000000000000005, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.6000000000000005, 1: 50}, rangeid='', name='rep0_range_169'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.800000000000001, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.800000000000001, 1: 10}, rangeid='', name='rep0_range_170'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.800000000000001, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.800000000000001, 1: 20}, rangeid='', name='rep0_range_171'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.800000000000001, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.800000000000001, 1: 30}, rangeid='', name='rep0_range_172'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.800000000000001, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.800000000000001, 1: 40}, rangeid='', name='rep0_range_173'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 6.800000000000001, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 6.800000000000001, 1: 50}, rangeid='', name='rep0_range_174'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.0, 1: 10}, rangeid='', name='rep0_range_175'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.0, 1: 20}, rangeid='', name='rep0_range_176'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.0, 1: 30}, rangeid='', name='rep0_range_177'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.0, 1: 40}, rangeid='', name='rep0_range_178'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.0, 1: 50}, rangeid='', name='rep0_range_179'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.2, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.2, 1: 10}, rangeid='', name='rep0_range_180'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.2, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.2, 1: 20}, rangeid='', name='rep0_range_181'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.2, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.2, 1: 30}, rangeid='', name='rep0_range_182'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.2, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.2, 1: 40}, rangeid='', name='rep0_range_183'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.2, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.2, 1: 50}, rangeid='', name='rep0_range_184'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.4, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.4, 1: 10}, rangeid='', name='rep0_range_185'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.4, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.4, 1: 20}, rangeid='', name='rep0_range_186'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.4, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.4, 1: 30}, rangeid='', name='rep0_range_187'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.4, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.4, 1: 40}, rangeid='', name='rep0_range_188'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.4, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.4, 1: 50}, rangeid='', name='rep0_range_189'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.6000000000000005, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.6000000000000005, 1: 10}, rangeid='', name='rep0_range_190'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.6000000000000005, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.6000000000000005, 1: 20}, rangeid='', name='rep0_range_191'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.6000000000000005, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.6000000000000005, 1: 30}, rangeid='', name='rep0_range_192'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.6000000000000005, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.6000000000000005, 1: 40}, rangeid='', name='rep0_range_193'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.6000000000000005, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.6000000000000005, 1: 50}, rangeid='', name='rep0_range_194'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.800000000000001, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.800000000000001, 1: 10}, rangeid='', name='rep0_range_195'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.800000000000001, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.800000000000001, 1: 20}, rangeid='', name='rep0_range_196'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.800000000000001, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.800000000000001, 1: 30}, rangeid='', name='rep0_range_197'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.800000000000001, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.800000000000001, 1: 40}, rangeid='', name='rep0_range_198'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 7.800000000000001, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 7.800000000000001, 1: 50}, rangeid='', name='rep0_range_199'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 8.0, 'period': 10, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 8.0, 1: 10}, rangeid='', name='rep0_range_200'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 8.0, 'period': 20, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 8.0, 1: 20}, rangeid='', name='rep0_range_201'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 8.0, 'period': 30, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 8.0, 1: 30}, rangeid='', name='rep0_range_202'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 8.0, 'period': 40, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 8.0, 1: 40}, rangeid='', name='rep0_range_203'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'amp': 8.0, 'period': 50, 'linetype': 'sine'}}, r={}, sp={}, prob=0.004878048780487805, inputparams={0: 8.0, 1: 50}, rangeid='', name='rep0_range_204')]
[14]:
ps_turn = ParameterSample(pd_turn)
ps_turn.add_variable_ranges(comb_kwargs={'resolutions':{'ground.radius': 5.0, "ground.start": 5}})

ps_turn.scenarios()
[14]:
[ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 5.0, 'x_start': 0, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 5.0, 1: 0}, rangeid='', name='rep0_range_0'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 5.0, 'x_start': 1, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 5.0, 1: 1}, rangeid='', name='rep0_range_1'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 5.0, 'x_start': 2, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 5.0, 1: 2}, rangeid='', name='rep0_range_2'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 5.0, 'x_start': 3, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 5.0, 1: 3}, rangeid='', name='rep0_range_3'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 5.0, 'x_start': 4, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 5.0, 1: 4}, rangeid='', name='rep0_range_4'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 5.0, 'x_start': 5, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 5.0, 1: 5}, rangeid='', name='rep0_range_5'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 10.0, 'x_start': 0, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 10.0, 1: 0}, rangeid='', name='rep0_range_6'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 10.0, 'x_start': 1, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 10.0, 1: 1}, rangeid='', name='rep0_range_7'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 10.0, 'x_start': 2, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 10.0, 1: 2}, rangeid='', name='rep0_range_8'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 10.0, 'x_start': 3, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 10.0, 1: 3}, rangeid='', name='rep0_range_9'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 10.0, 'x_start': 4, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 10.0, 1: 4}, rangeid='', name='rep0_range_10'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 10.0, 'x_start': 5, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 10.0, 1: 5}, rangeid='', name='rep0_range_11'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 15.0, 'x_start': 0, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 15.0, 1: 0}, rangeid='', name='rep0_range_12'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 15.0, 'x_start': 1, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 15.0, 1: 1}, rangeid='', name='rep0_range_13'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 15.0, 'x_start': 2, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 15.0, 1: 2}, rangeid='', name='rep0_range_14'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 15.0, 'x_start': 3, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 15.0, 1: 3}, rangeid='', name='rep0_range_15'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 15.0, 'x_start': 4, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 15.0, 1: 4}, rangeid='', name='rep0_range_16'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 15.0, 'x_start': 5, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 15.0, 1: 5}, rangeid='', name='rep0_range_17'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 20.0, 'x_start': 0, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 20.0, 1: 0}, rangeid='', name='rep0_range_18'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 20.0, 'x_start': 1, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 20.0, 1: 1}, rangeid='', name='rep0_range_19'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 20.0, 'x_start': 2, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 20.0, 1: 2}, rangeid='', name='rep0_range_20'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 20.0, 'x_start': 3, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 20.0, 1: 3}, rangeid='', name='rep0_range_21'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 20.0, 'x_start': 4, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 20.0, 1: 4}, rangeid='', name='rep0_range_22'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 20.0, 'x_start': 5, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 20.0, 1: 5}, rangeid='', name='rep0_range_23'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 25.0, 'x_start': 0, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 25.0, 1: 0}, rangeid='', name='rep0_range_24'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 25.0, 'x_start': 1, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 25.0, 1: 1}, rangeid='', name='rep0_range_25'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 25.0, 'x_start': 2, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 25.0, 1: 2}, rangeid='', name='rep0_range_26'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 25.0, 'x_start': 3, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 25.0, 1: 3}, rangeid='', name='rep0_range_27'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 25.0, 'x_start': 4, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 25.0, 1: 4}, rangeid='', name='rep0_range_28'),
 ParameterScenario(sequence={}, times=(), p={'ground': {'radius': 25.0, 'x_start': 5, 'linetype': 'turn'}}, r={}, sp={}, prob=0.03333333333333333, inputparams={0: 25.0, 1: 5}, rangeid='', name='rep0_range_29')]

These samples can then be run using prop.parameter_sample

[15]:
res_turn, hist_turn = prop.parameter_sample(mdl, ps_turn, pool = mp.Pool(5))
SCENARIOS COMPLETE: 100%|██████████| 30/30 [00:04<00:00,  7.33it/s]
[16]:
res_sine, hist_sine = prop.parameter_sample(mdl, ps_sine, pool=mp.Pool(5))
SCENARIOS COMPLETE: 100%|██████████| 205/205 [00:15<00:00, 12.96it/s]

We can then use these results to visualize the operational envelope for the system–which sets of parameters lead to the system getting lost/going off track, and which sets of parameters the system is capable of accomodating.

[17]:
from fmdtools.analyze.tabulate import NominalEnvelope
na = NominalEnvelope(ps_sine, res_sine, 'at_finish', 'p.ground.amp', 'p.ground.period', func=lambda x: x == True)
na.as_plot()
[17]:
(<Figure size 600x400 with 1 Axes>,
 <Axes: xlabel='p.ground.amp', ylabel='p.ground.period'>)
../../_images/examples_rover_Rover_Setup_Notebook_29_1.png

As shown, if the amplitude of the sine curve is too high at low wavelength, it causes the rover to go off track and not be able to complete the mission.

[18]:
na = NominalEnvelope(ps_turn, res_turn, 'at_finish', 'p.ground.x_start', 'p.ground.radius', func=lambda x: x == True)
na.as_plot()
[18]:
(<Figure size 600x400 with 1 Axes>,
 <Axes: xlabel='p.ground.x_start', ylabel='p.ground.radius'>)
../../_images/examples_rover_Rover_Setup_Notebook_31_1.png

Similarly, if the radius of the curve is too small, it can additionally lead to the rover going off course by overshooting the curve.

[19]:
fig = hist_turn.plot_trajectories('flows.pos.s.x','flows.pos.s.y')
../../_images/examples_rover_Rover_Setup_Notebook_33_0.png
[20]:
fig = hist_sine.plot_trajectories('flows.pos.s.x','flows.pos.s.y')
../../_images/examples_rover_Rover_Setup_Notebook_34_0.png
[ ]:

[ ]: