From 299e21b770835d45214e851d3fdb073d36fe4106 Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Fri, 19 May 2023 12:18:16 +0200 Subject: [PATCH 01/11] feature: ability to only detect features if all previous thresholds have been met --- tobac/feature_detection.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index d36b83bc..f3999e80 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -538,6 +538,7 @@ def feature_detection_multithreshold_timestep( vertical_axis=None, dxy=-1, wavelength_filtering=None, + strict_thresholding=False, ): """Find features in each timestep. @@ -591,6 +592,9 @@ def feature_detection_multithreshold_timestep( wavelength_filtering: tuple, optional Minimum and maximum wavelength for spectral filtering in meter. Default is None. + strict_tresholding: Bool, optional + If True, a feature can only be detected if all previous thresholds have been met. + Default is False. Returns ------- @@ -610,8 +614,8 @@ def feature_detection_multithreshold_timestep( FutureWarning, ) - # get actual numpy array - track_data = data_i.core_data() + # get actual numpy array and make a copy so as not to change the data in the iris cube + track_data = data_i.core_data().copy() track_data = gaussian_filter( track_data, sigma=sigma_threshold @@ -702,6 +706,24 @@ def feature_detection_multithreshold_timestep( features_thresholds = remove_parents( features_thresholds, regions_i, regions_old ) + + if strict_thresholding: + if regions_i: + # remove data in regions where no features were detected + valid_regions: np.ndarray = np.zeros_like(track_data) + region_indices = list(regions_i.values())[0] # linear indices + valid_regions.ravel()[region_indices] = 1 + track_data = np.multiply(valid_regions, track_data) + else: + # since regions_i is empty no further features can be detected + logging.debug( + "Finished feature detection for threshold " + + str(i_threshold) + + " : " + + str(threshold_i) + ) + return features_thresholds + regions_old = regions_i logging.debug( From 7cc4b9d20b48b972487e4b6e99b514df9d396e41 Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Fri, 26 May 2023 13:58:58 +0200 Subject: [PATCH 02/11] chore: added kwarg to feature_detection_multithreshold --- tobac/feature_detection.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index f3999e80..45f8927c 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -592,7 +592,7 @@ def feature_detection_multithreshold_timestep( wavelength_filtering: tuple, optional Minimum and maximum wavelength for spectral filtering in meter. Default is None. - strict_tresholding: Bool, optional + strict_thresholding: Bool, optional If True, a feature can only be detected if all previous thresholds have been met. Default is False. @@ -752,6 +752,7 @@ def feature_detection_multithreshold( detect_subset=None, wavelength_filtering=None, dz=None, + strict_thresholding=False, ): """Perform feature detection based on contiguous regions. @@ -829,6 +830,10 @@ def feature_detection_multithreshold( that it is the constant z spacing between points, even if ```z_coordinate_name``` is specified. + strict_thresholding: Bool, optional + If True, a feature can only be detected if all previous thresholds have been met. + Default is False. + Returns ------- features : pandas.DataFrame @@ -952,6 +957,7 @@ def feature_detection_multithreshold( vertical_axis=vertical_axis, dxy=dxy, wavelength_filtering=wavelength_filtering, + strict_thresholding=strict_thresholding, ) # check if list of features is not empty, then merge features from different threshold values # into one DataFrame and append to list for individual timesteps: From c103b009f1f1fb278aa8267268c4ded6fc68e601 Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Wed, 31 May 2023 11:15:14 +0200 Subject: [PATCH 03/11] chore: added remaining type hints --- tobac/feature_detection.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index 45f8927c..764232fe 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -711,9 +711,9 @@ def feature_detection_multithreshold_timestep( if regions_i: # remove data in regions where no features were detected valid_regions: np.ndarray = np.zeros_like(track_data) - region_indices = list(regions_i.values())[0] # linear indices + region_indices: list[int] = list(regions_i.values())[0] # linear indices valid_regions.ravel()[region_indices] = 1 - track_data = np.multiply(valid_regions, track_data) + track_data: np.ndarray = np.multiply(valid_regions, track_data) else: # since regions_i is empty no further features can be detected logging.debug( From 57585dc6a60549b38c851ce145bb3a5eecc783d0 Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Wed, 31 May 2023 11:38:43 +0200 Subject: [PATCH 04/11] chore: code reformatting --- tobac/feature_detection.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index 764232fe..8c88c0f3 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -711,7 +711,9 @@ def feature_detection_multithreshold_timestep( if regions_i: # remove data in regions where no features were detected valid_regions: np.ndarray = np.zeros_like(track_data) - region_indices: list[int] = list(regions_i.values())[0] # linear indices + region_indices: list[int] = list(regions_i.values())[ + 0 + ] # linear indices valid_regions.ravel()[region_indices] = 1 track_data: np.ndarray = np.multiply(valid_regions, track_data) else: From c3e6af1b92e67a760ca7d904cd36442885d398cc Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Wed, 31 May 2023 14:21:19 +0200 Subject: [PATCH 05/11] chore: added unit test for strict thresholding --- tobac/tests/test_feature_detection.py | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tobac/tests/test_feature_detection.py b/tobac/tests/test_feature_detection.py index c01c780b..3bf7bd71 100644 --- a/tobac/tests/test_feature_detection.py +++ b/tobac/tests/test_feature_detection.py @@ -564,3 +564,54 @@ def test_feature_detection_coords(): for coord in test_data_iris.coords(): assert coord.name() in fd_output_first + + +def test_strict_thresholding(): + """Tests that strict_thresholding prevents detection of features that have not met all + previous n_min_threshold values""" + + # Generate test dataset + test_dset_size = (100, 100) + test_hdim_1_pt = 50.0 + test_hdim_2_pt = 50.0 + test_hdim_1_sz = 10 + test_hdim_2_sz = 10 + test_amp = 10 + test_data = np.zeros(test_dset_size) + test_data = tbtest.make_feature_blob( + test_data, + test_hdim_1_pt, + test_hdim_2_pt, + h1_size=test_hdim_1_sz, + h2_size=test_hdim_2_sz, + amplitude=test_amp, + ) + test_data_iris = tbtest.make_dataset_from_arr(test_data, data_type="iris") + + # All of these thresholds will be met + tresholds = [1, 5, 7.5] + + # The second n_min threshold can never be met + n_min_thresholds = [0, test_data.size + 1, 0] + + # This will detect 2 features (first and last threshold value) + features = feat_detect.feature_detection_multithreshold_timestep( + test_data_iris, + 0, + dxy=1, + threshold=tresholds, + n_min_threshold=n_min_thresholds, + strict_thresholding=False, + ) + assert len(features) == 2 + + # Since the second n_min_thresholds value is not met this will only detect 1 feature + features = feat_detect.feature_detection_multithreshold_timestep( + test_data_iris, + 0, + dxy=1, + threshold=tresholds, + n_min_threshold=n_min_thresholds, + strict_thresholding=True, + ) + assert len(features) == 1 From 5addd4320216f8f1c7400695f4bdc3cdf9ecf210 Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Thu, 1 Jun 2023 13:08:24 +0200 Subject: [PATCH 06/11] chore: added example for strict_thresholding to documentation notebook --- .../notebooks/n_min_threshold_example.ipynb | 318 +++++++++++------- 1 file changed, 191 insertions(+), 127 deletions(-) diff --git a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb index 2c44f851..61c5b66c 100644 --- a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb +++ b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -43,31 +43,20 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3iElEQVR4nO3df3TU1Z3/8ddAYEggREGYYSo/Ao2CBASNTYnYpEdIi8Da0tUiWEOxu9igJaUtirQysJIo3WbTmoqF0hCXRtyuYKlWTKway0aWiEQxekC/pCGljNlaSIJAIpn7/YNmyhAyfiYzSWbI83HOPcfcz495X6LOm/e9n/uxGWOMAAAAOtCnpwMAAACRjWQBAAAERLIAAAACIlkAAAABkSwAAICASBYAAEBAJAsAACAgkgUAABAQyQIAAAiIZAH4uy1btshms/m1YcOGKSMjQ88991xPhxe0RYsWacyYMZ269vHHH9eWLVvCGg+A6EWyAFygqKhIr7/+uioqKrRx40b17dtXc+fO1e9+97ueDq3bkCwAOF9MTwcARJrk5GSlpKT4fv7yl7+syy+/XE899ZTmzp3bg5EBQM+gsgB8igEDBqh///7q16+fX/+aNWuUmpqqIUOGaPDgwbruuuu0efNmXfhutpdfflkZGRkaOnSoYmNjNWrUKH3ta1/TqVOnfOe0tLTo4Ycf1vjx42W32zVs2DB985vf1P/93/9ZinHLli26+uqrZbfbNWHCBD355JMXPc9KzGPGjFF1dbXKy8t90zFt0xlnzpzR9773PU2ZMkUJCQkaMmSIpk2bpt/+9reW4gQQnagsABdobW3V2bNnZYzRhx9+qB//+Mf6+OOPtWDBAr/z/vSnP2nJkiUaNWqUJGnPnj267777dPToUT300EO+c2bPnq2bbrpJv/rVr3TZZZfp6NGj2rVrl1paWhQXFyev16tbb71Vf/zjH7VixQqlpaWptrZWq1evVkZGht544w3FxsZ2GO+WLVv0zW9+U7feeqt+8pOfqKGhQW63W83NzerTx//vA1Zi3rFjh/75n/9ZCQkJevzxxyVJdrtdktTc3Ky//e1v+v73v6/PfOYzamlp0UsvvaR58+apqKhId911Vxh+AwAijgFgjDGmqKjISGrX7Ha7efzxxwNe29raaj755BOzdu1aM3ToUOP1eo0xxvz3f/+3kWSqqqo6vPapp54ykswzzzzj119ZWWkkBfzs1tZW43K5zHXXXef7TGOM+dOf/mT69etnRo8eHXTMxhgzceJEk56eHnDMxhhz9uxZ88knn5i7777bTJ069VPPBxCdmIYALvDkk0+qsrJSlZWVeuGFF5SVlaWlS5eqsLDQ77yXX35ZM2bMUEJCgvr27at+/frpoYce0kcffaT6+npJ0pQpU9S/f3/967/+q4qLi3X48OF2n/fcc8/psssu09y5c3X27FlfmzJlipxOp1599dUOYz148KD+8pe/aMGCBbLZbL7+0aNHKy0trd35VmL+NL/5zW904403atCgQYqJiVG/fv20efNmvffee5auBxB9SBaAC0yYMEEpKSlKSUnRl7/8Zf3iF79QZmamVqxYoRMnTkiS9u7dq8zMTEnSpk2b9D//8z+qrKzUqlWrJEmnT5+WJI0bN04vvfSShg8frqVLl2rcuHEaN26cfvrTn/o+78MPP9SJEyd86yLObx6PR3/96187jPWjjz6SJDmdznbHLuyzGnMg27dv1+23367PfOYz2rp1q15//XVVVlZq8eLFOnPmzKdeDyA6sWYBsGDy5Ml68cUXdejQIX3uc5/Ttm3b1K9fPz333HMaMGCA77xnn3223bU33XSTbrrpJrW2tuqNN97QY489ppycHDkcDs2fP19XXHGFhg4dql27dl30s+Pj4zuMa+jQoZIkj8fT7tiFfcHE3JGtW7cqMTFRTz/9tF8lo7m52fI9AEQfKguABVVVVZKkYcOGSZJsNptiYmLUt29f3zmnT5/Wf/7nf3Z4j759+yo1NVU///nPJUlvvvmmJGnOnDn66KOP1Nra6qtonN+uvvrqDu959dVXa8SIEXrqqaf8nmiora1VRUWF37nBxGy32y9aabDZbOrfv79fouDxeHgaArjEkSwAF3jnnXe0Z88e7dmzR88//7zuvvtulZWV6atf/aoSExMlSbNnz9bJkye1YMEClZWVadu2bbrpppt8Tw20eeKJJ3T77beruLhYr7zyil544QV961vfkiTNmDFDkjR//nzNmjVLt9xyi9auXatdu3bpD3/4g4qLi7Vo0SLt2LGjw1j79Omjf/u3f9O+ffv01a9+Vc8//7x+/etfa8aMGe2mIazGLEmTJk3SW2+9paefflqVlZU6cOCApHOJzcGDB5Wdna2XX35ZxcXFmj59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88477xhjIj/+i9m7d68ZM2aMmTx5slm2bJmvPxrGsnr1ajNx4kRz7NgxX6uvr/cdj4Yx/O1vfzOjR482ixYtMv/7v/9rampqzEsvvWQ++OAD3znRMI76+nq/30NZWZmRZF555RVjTHSM4eGHHzZDhw41zz33nKmpqTG/+c1vzKBBg0xBQYHvnGgYRzSLqGThc5/7nLnnnnv8+saPH28eeOCBHoooOBcmC16v1zidTvPII4/4+s6cOWMSEhLME0880QMRWlNfX28kmfLycmNM9I7j8ssvN7/85S+jMv6mpiaTlJRkysrKTHp6ui9ZiJaxrF692lx77bUXPRYtY7j//vvN9OnTOzweLeO40LJly8y4ceOM1+uNmjHMnj3bLF682K9v3rx55s477zTGRO/vIppEzDRE23u7MzMz/fp74r3d4VJTUyOPx+M3JrvdrvT09IgeU0NDgyT53uIWbeNobW3Vtm3b9PHHH2vatGlRF78kLV26VLNnz9aMGTP8+qNpLO+//75cLpcSExM1f/58HT58WFL0jGHnzp1KSUnRbbfdpuHDh2vq1KnatGmT73i0jON8LS0t2rp1qxYvXiybzRY1Y5g+fbr+8Ic/6NChQ5Kkt956S7t379Ytt9wiKTp/F9Gmy15RHaxIem93uLTFfbEx1dbW9kRIn8oYo+XLl2v69OlKTk6WFD3jOHDggKZNm6YzZ85o0KBB2rFjh6655hrf/ywiPf4227Zt05tvvqnKysp2x6Lld5Gamqonn3xSV111lT788EM9/PDDSktLU3V1ddSM4fDhw9qwYYOWL1+uBx98UHv37tV3vvMd2e123XXXXVEzjvM9++yzOnHihBYtWiQpev59uv/++9XQ0KDx48erb9++am1t1bp163THHXdIip5xRLOISRbaRMJ7u8MtmsZ077336u2339bu3bvbHYv0cVx99dWqqqrSiRMn9MwzzygrK0vl5eW+45EevyTV1dVp2bJlKi0tDfg63Egfy6xZs3z/PGnSJE2bNk3jxo1TcXGxPv/5z0uK/DF4vV6lpKQoNzdXkjR16lRVV1drw4YNuuuuu3znRfo4zrd582bNmjVLLpfLrz/Sx/D0009r69atKikp0cSJE1VVVaWcnBy5XC5lZWX5zov0cUSziJmGiKT3dodL2+rvaBnTfffdp507d+qVV17RlVde6euPlnH0799fn/3sZ5WSkqK8vDxde+21+ulPfxo18UvSvn37VF9fr+uvv14xMTGKiYlReXm5fvaznykmJsYXbzSM5XwDBw7UpEmT9P7770fN72PEiBG65ppr/PomTJigI0eOSIqe/y7a1NbW6qWXXtK3vvUtX1+0jOEHP/iBHnjgAc2fP1+TJk3SN77xDX33u99VXl6epOgZRzSLmGQhkt7bHS6JiYlyOp1+Y2ppaVF5eXlEjckYo3vvvVfbt2/Xyy+/rMTERL/j0TKOCxlj1NzcHFXx33zzzTpw4ICqqqp8LSUlRQsXLlRVVZXGjh0bNWM5X3Nzs9577z2NGDEian4fN954Y7tHiA8dOuR721+0jKNNUVGRhg8frtmzZ/v6omUMp06dUp8+/l9Xffv29T06GS3jiGo9s67y4toendy8ebN59913TU5Ojhk4cKD505/+1NOhdaipqcns37/f7N+/30gy+fn5Zv/+/b7HPR955BGTkJBgtm/fbg4cOGDuuOOOiHuc59vf/rZJSEgwr776qt8jVqdOnfKdE+njWLlypXnttddMTU2Nefvtt82DDz5o+vTpY0pLS40xkR9/IOc/DWFMdIzle9/7nnn11VfN4cOHzZ49e8ycOXNMfHy877/laBjD3r17TUxMjFm3bp15//33za9//WsTFxdntm7d6jsnGsZhjDGtra1m1KhR5v777293LBrGkJWVZT7zmc/4Hp3cvn27ueKKK8yKFSt850TDOKJZRCULxhjz85//3IwePdr079/fXHfddb7H9yLVK6+8YiS1a1lZWcaYc4/0rF692jidTmO3280XvvAFc+DAgZ4N+gIXi1+SKSoq8p0T6eNYvHix79+bYcOGmZtvvtmXKBgT+fEHcmGyEA1jaXvGvV+/fsblcpl58+aZ6upq3/FoGIMxxvzud78zycnJxm63m/Hjx5uNGzf6HY+Wcbz44otGkjl48GC7Y9EwhsbGRrNs2TIzatQoM2DAADN27FizatUq09zc7DsnGsYRzWzGGNMjJQ0AABAVImbNAgAAiEwkCwAAICCSBQAAEBDJAgAACIhkAQAABESyAAAAAiJZAAAAAZEsAACAgEgWAABAQCQLAAAgIJIFAAAQ0P8HoOjTerjxWN0AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Dimensions here are time, y, x.\n", - "input_field_arr = np.zeros((1,80,80))\n", + "input_field_arr = np.zeros((1, 80, 80))\n", "# small 5x5 feature, area of 25 points\n", - "input_field_arr[0, 15:20, 10:15]=50\n", + "input_field_arr[0, 15:20, 10:15] = 50\n", "# larger 30x30 feature, area of 900\n", - "input_field_arr[0, 40:70, 10:30]=50\n", + "input_field_arr[0, 40:70, 10:30] = 50\n", "# small 2x2 feature within larger 30x30 feature, area of 4 points\n", - "input_field_arr[0, 52:54, 22:24]=100\n", + "input_field_arr[0, 52:54, 22:24] = 100\n", "# small 4x4 feature within larger 30x30 feature, area of 16 points\n", - "input_field_arr[0, 60:64, 15:19]=100\n", + "input_field_arr[0, 60:64, 15:19] = 100\n", "\n", "plt.pcolormesh(input_field_arr[0])\n", "plt.colorbar()\n", @@ -77,14 +66,18 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# We now need to generate an Iris DataCube out of this dataset to run tobac feature detection. \n", - "# One can use xarray to generate a DataArray and then convert it to Iris, as done here. \n", - "input_field_iris = xr.DataArray(input_field_arr, dims=['time', 'Y', 'X'], coords={'time': [np.datetime64('2019-01-01T00:00:00')]}).to_iris()\n", - "# Version 2.0 of tobac (currently in development) will allow the use of xarray directly with tobac. " + "# We now need to generate an Iris DataCube out of this dataset to run tobac feature detection.\n", + "# One can use xarray to generate a DataArray and then convert it to Iris, as done here.\n", + "input_field_iris = xr.DataArray(\n", + " input_field_arr,\n", + " dims=[\"time\", \"Y\", \"X\"],\n", + " coords={\"time\": [np.datetime64(\"2019-01-01T00:00:00\")]},\n", + ").to_iris()\n", + "# Version 2.0 of tobac (currently in development) will allow the use of xarray directly with tobac." ] }, { @@ -104,29 +97,30 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "thresholds = [50, 100]\n", "# Using 'center' here outputs the feature location as the arithmetic center of the detected feature.\n", "# All filtering is off in this example, although that is not usually recommended.\n", - "single_threshold_features = tobac.feature_detection_multithreshold(field_in = input_field_iris, dxy = 1000, threshold=thresholds, target='maximum', position_threshold='center', sigma_threshold=0)\n", + "single_threshold_features = tobac.feature_detection_multithreshold(\n", + " field_in=input_field_iris,\n", + " dxy=1000,\n", + " threshold=thresholds,\n", + " target=\"maximum\",\n", + " position_threshold=\"center\",\n", + " sigma_threshold=0,\n", + ")\n", "plt.pcolormesh(input_field_arr[0])\n", "plt.colorbar()\n", "# Plot all features detected\n", - "plt.scatter(x=single_threshold_features['hdim_2'].values, y=single_threshold_features['hdim_1'].values, color='r', label=\"Detected Features\")\n", + "plt.scatter(\n", + " x=single_threshold_features[\"hdim_2\"].values,\n", + " y=single_threshold_features[\"hdim_1\"].values,\n", + " color=\"r\",\n", + " label=\"Detected Features\",\n", + ")\n", "plt.legend()\n", "plt.title(\"n_min_threshold=0\")\n", "plt.show()" @@ -149,31 +143,32 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGFElEQVR4nO3de1iUZf4/8PfDaQA5mKcZJlFRUUswTQ1FC0qhn6JZ9LUSLVy3wtCSrPVE5egqGG1EaWK4RVSStaumW6lQKq6LbmRSRi1qEpI6UYaAiiDM/fuDeHIExmeYAWbg/bqu+8q5n9Pnhmo+3qdHEkIIEBERETXDob0DICIiItvGZIGIiIhMYrJAREREJjFZICIiIpOYLBAREZFJTBaIiIjIJCYLREREZBKTBSIiIjKJyQIRERGZxGSBOqV9+/ZBkiTs27evVe6fmZmJlJSURvU//vgjJEnC3/72t1Z5rrlaI563334bkiThxx9/vO65oaGhCA0NtfiZDe1oqmzevNni+xN1dk7tHQBRe7j11ltx8OBB3Hzzza1y/8zMTHz77beIi4trlftT05588klERUUZ1fn7+7dTNEQdB5MF6pS8vLwwZsyY9g7DbJcuXYK7u3t7h2Gz+vTpY5e/VyJbx2EIalM6nQ6SJKGgoAAzZsyAt7c31Go15syZg/LycsX3mT17Njw8PPC///0Pd999N7p06QIfHx+sWbMGAHDo0CGMHz8eXbp0waBBg5CRkWF0fVPDEA33PHHiBCZPngwPDw/4+vrimWeeQXV1teLYQkND8cknn6C4uNioO/xaycnJ8PPzg4eHB8aOHYtDhw412cajR48iPDwcnp6emDBhAgCgpqYGq1atwpAhQ6BSqdCzZ0/86U9/wi+//GJ0jz179iA0NBTdu3eHm5sb+vTpg/vvvx+XLl0yOx4A2LFjB8aOHQt3d3d4enoiLCwMBw8evO7PRAiBpKQk9O3bF66urrj11luxc+fO615HRLaByQK1i/vvvx+DBg3Cli1bsGTJEmRmZuLpp5826x5XrlxBZGQkIiIisH37dkyaNAlLly7FsmXLEB0djTlz5mDbtm0YPHgwZs+ejcOHDyu65z333IMJEyZg+/btmDNnDl555RW8+OKLiuNav349xo0bB41Gg4MHD8rlaq+//jqys7ORkpKCTZs24eLFi5g8eXKjhKmmpgb33HMP7rrrLmzfvh0rVqyAwWDAtGnTsGbNGkRFReGTTz7BmjVrkJ2djdDQUFRVVQGoH8ePiIiAi4sL3nrrLezatQtr1qxBly5dUFNTY3Y8mZmZmDZtGry8vPD+++/jzTffRFlZGUJDQ3HgwAGTP5MVK1Zg8eLFCAsLw0cffYQnnngCjz32GAoLCxudW1tbq6g09cLcNWvWwMXFBe7u7hg/fjx27Nhh+pdFRMoIoja0fPlyAUAkJSUZ1cfGxgpXV1dhMBgU3Sc6OloAEFu2bJHrrly5Inr27CkAiK+++kquP3funHB0dBQLFy6U6/bu3SsAiL179za654cffmj0rMmTJ4vBgweb00wREREh+vbt26i+qKhIABCBgYGitrZWrv/iiy8EAPH+++83iuett94yusf777/fqO1CCJGXlycAiPXr1wshhPjnP/8pAIj8/Pxm41QaT11dndBqtSIwMFDU1dXJ51VWVopevXqJ4OBguS49PV0AEEVFRUIIIcrKyoSrq6u47777jJ79n//8RwAQISEhRvUAFJX09HT5mjNnzojHHntMfPjhh+Lf//632LRpkxgzZowAIDZu3Nhs+4lIGc5ZoHZxzz33GH0eNmwYLl++jNLSUqjVakX3kCQJkydPlj87OTlh4MCBcHJywogRI+T6bt26oVevXiguLlZ0z6lTpzaKbc+ePYpiUioiIgKOjo5GzwDQZIz333+/0eePP/4YXbt2xdSpU1FbWyvXDx8+HBqNBvv27cMTTzyB4cOHw8XFBY8//jhiY2Nx++23o3///i2Kp7CwEGfOnEFcXBwcHP7okPTw8MD999+PN954o9n5FAcPHsTly5cxc+ZMo/rg4GD07du30fl5eXlNxngtPz8/+c8+Pj5IS0szOj59+nQEBQVhyZIlmD17Npyc+L87opbifz3ULrp37270WaVSAYDcha6Eu7s7XF1djepcXFzQrVu3Rue6uLjg8uXLLbqnSqVSdK05lLbf3d0dXl5eRnU///wzzp8/DxcXlybv/euvvwIABgwYgM8++wxJSUmYN28eLl68iP79++Opp57CggULzIrn3LlzAOq/lK+l1WphMBhQVlbWZLLQcK1Go2l0rKm64cOHN9mua12d3DTF2dkZDz74IJYsWYLjx4/jpptuUnRfImqMyQKRDWtqYmSPHj3QvXt37Nq1q8lrPD095T/f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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "thresholds = [50, 100]\n", "n_min_threshold = 5\n", "# Using 'center' here outputs the feature location as the arithmetic center of the detected feature.\n", "# All filtering is off in this example, although that is not usually recommended.\n", - "single_threshold_features = tobac.feature_detection_multithreshold(field_in = input_field_iris, dxy = 1000, threshold=thresholds, target='maximum', position_threshold='center', sigma_threshold=0,\n", - " n_min_threshold=n_min_threshold)\n", + "single_threshold_features = tobac.feature_detection_multithreshold(\n", + " field_in=input_field_iris,\n", + " dxy=1000,\n", + " threshold=thresholds,\n", + " target=\"maximum\",\n", + " position_threshold=\"center\",\n", + " sigma_threshold=0,\n", + " n_min_threshold=n_min_threshold,\n", + ")\n", "plt.pcolormesh(input_field_arr[0])\n", "plt.colorbar()\n", "# Plot all features detected\n", - "plt.scatter(x=single_threshold_features['hdim_2'].values, y=single_threshold_features['hdim_1'].values, color='r', label=\"Detected Features\")\n", + "plt.scatter(\n", + " x=single_threshold_features[\"hdim_2\"].values,\n", + " y=single_threshold_features[\"hdim_1\"].values,\n", + " color=\"r\",\n", + " label=\"Detected Features\",\n", + ")\n", "plt.legend()\n", "plt.title(\"n_min_threshold={0}\".format(n_min_threshold))\n", "plt.show()" @@ -188,31 +183,32 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "thresholds = [50, 100]\n", "n_min_threshold = 20\n", "# Using 'center' here outputs the feature location as the arithmetic center of the detected feature.\n", "# All filtering is off in this example, although that is not usually recommended.\n", - "single_threshold_features = tobac.feature_detection_multithreshold(field_in = input_field_iris, dxy = 1000, threshold=thresholds, target='maximum', position_threshold='center', sigma_threshold=0,\n", - " n_min_threshold=n_min_threshold)\n", + "single_threshold_features = tobac.feature_detection_multithreshold(\n", + " field_in=input_field_iris,\n", + " dxy=1000,\n", + " threshold=thresholds,\n", + " target=\"maximum\",\n", + " position_threshold=\"center\",\n", + " sigma_threshold=0,\n", + " n_min_threshold=n_min_threshold,\n", + ")\n", "plt.pcolormesh(input_field_arr[0])\n", "plt.colorbar()\n", "# Plot all features detected\n", - "plt.scatter(x=single_threshold_features['hdim_2'].values, y=single_threshold_features['hdim_1'].values, color='r', label=\"Detected Features\")\n", + "plt.scatter(\n", + " x=single_threshold_features[\"hdim_2\"].values,\n", + " y=single_threshold_features[\"hdim_1\"].values,\n", + " color=\"r\",\n", + " label=\"Detected Features\",\n", + ")\n", "plt.legend()\n", "plt.title(\"n_min_threshold={0}\".format(n_min_threshold))\n", "plt.show()" @@ -227,31 +223,32 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHI0lEQVR4nO3de1iUZf4/8PfDwQHk4CGdYRIVFbUE09RFUYNS6KtoFv2sPCTmHjC0JDNPVI6ugtFGlCamW0glWZuadtCgVFwX3UiliAo1CUmdKENARRDm/v1BPOsIjM8wA8zA+3Vd97XO/Zw+N7rNh/v0SEIIASIiIqJGOLR2AERERGTbmCwQERGRSUwWiIiIyCQmC0RERGQSkwUiIiIyickCERERmcRkgYiIiExiskBEREQmMVkgIiIik5gsUJty4MABSJKEAwcONMv909LSkJSUVK/+p59+giRJ+Mc//tEszzVXc8SzZcsWSJKEn3766abnhoSEICQkxCrPffbZZzFp0iTceuutkCQJs2fPbvTc06dPIyIiAp06dYK7uztCQ0Nx7NixBs/dtm0bhgwZAhcXF2i1WsTExODSpUtWiZmorWGyQG3KnXfeicOHD+POO+9slvs3lixQ83n55Zdx4cIF3HfffejQoUOj5/36668YO3YsTpw4gTfffBPvv/8+rl69ipCQEOTn5xudu3XrVkybNg0jRozAnj17sGLFCmzZsgURERHN3Rwiu+TU2gEQWZOnpydGjhzZ2mGY7cqVK3Bzc2vtMGxSeXk5HBxqf695++23Gz3vxRdfxK+//oqsrCz06tULADBmzBj07dsXzz//PN577z0AQE1NDZ555hmEhYVh8+bNAIC7774bHh4emDFjBvbs2YMJEyY0c6uI7At7FsgqdDodJElCXl4epk2bBi8vL6jVasyZMwelpaWK7zN79my4u7vjhx9+wL333ouOHTvC29sba9euBQAcOXIEY8aMQceOHdG/f3+kpqYaXd/QMETdPU+dOoWJEyfC3d0dPj4+ePrpp1FZWak4tpCQEHzyyScoLCyEJElyuVFiYiJ8fX3h7u6OUaNG4ciRIw22MTc3F2FhYfDw8MC4ceMAAFVVVVi9ejUGDhwIlUqFbt264bHHHsOvv/5qdI99+/YhJCQEXbt2haurK3r27IkHH3wQV65cMTseANi9ezdGjRoFNzc3eHh4IDQ0FIcPH77pz0QIgYSEBPTq1QsuLi648847sWfPnpteZ466ROFmdu7ciXvuuUdOFIDa5DEiIgIfffQRqqurAdT+Gzp//jwee+wxo+unTp0Kd3d37Ny503rBE7URTBbIqh588EH0798f27dvx9KlS5GWloannnrKrHtcu3YNERERCA8Px65duzBhwgQsW7YMy5cvR2RkJObMmYOdO3diwIABmD17No4eParonvfddx/GjRuHXbt2Yc6cOXj55ZfxwgsvKI5rw4YNGD16NDQaDQ4fPiyX67322mvIyMhAUlIStm7disuXL2PixIn1Eqaqqircd999uOeee7Br1y6sXLkSBoMBU6ZMwdq1azF9+nR88sknWLt2LTIyMhASEoKKigoAtfMRwsPD0aFDB7z55pvYu3cv1q5di44dO6KqqsrseNLS0jBlyhR4enri3XffxRtvvIGSkhKEhITg0KFDJn8mK1euxJIlSxAaGooPP/wQjz/+OP7617/W6/YHgOrqakWlKS/CraiowI8//ojBgwfXOzZ48GBUVFTg9OnTAIBvv/1Wrr+es7MzBg4cKB8nousIIitYsWKFACASEhKM6qOjo4WLi4swGAyK7hMZGSkAiO3bt8t1165dE926dRMAxLFjx+T6CxcuCEdHR7Fw4UK5bv/+/QKA2L9/f717vv/++0bPmjhxohgwYIA5zRTh4eGiV69e9eoLCgoEABEQECCqq6vl+i+//FIAEO+++269eN58802je7z77rv12i6EENnZ2QKA2LBhgxBCiA8++EAAEDk5OY3GqTSempoaodVqRUBAgKipqZHPKy8vF927dxdBQUFyXUpKigAgCgoKhBBClJSUCBcXF/HAAw8YPfs///mPACCCg4ON6gEoKikpKY22q2PHjiIyMrJe/dmzZwUAER8fX+9YWlqaACCysrKEEEKsWbNGABDnz5+vd25YWJjo379/o88naq84Z4Gs6r777jP6PHjwYFy9ehXFxcVQq9WK7iFJEiZOnCh/dnJyQr9+/eDk5IShQ4fK9V26dEH37t1RWFio6J6TJ0+uF9u+ffsUxaRUeHg4HB0djZ4BoMEYH3zwQaPPH3/8MTp16oTJkyfLXeYAMGTIEGg0Ghw4cACPP/44hgwZgg4dOuBvf/sboqOjMXbsWPTp06dJ8eTn5+PcuXOIiYkx6u53d3fH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6NEDa9euRb9+/QAAqampmDJlCo4fP45BgwbJm0Ns2bIF/fv3x+rVqxEaGor8/HyrB05ERNSSbOHdEAcOHDC+nyRBp9NBp9NZduObMKtnYfLkyZg4cSL69++P/v37Y82aNXB3d8eRI0dadHMIIiKiFtfK2z23piZPcKypqcG2bdtw+fJljBo1qsmbQ1RWVtbbyYqIiIhsh9nJQm5uLtzd3aFSqTB37lzs3LkTt99+u8nNIW5c1nG9+Ph4o12sfHx8zA2JiIio+bFnQbkBAwYgJycHR44cweOPP47IyEh899138nFzN4dYtmwZSktL5VJUVGRuSERERM1OslKxR2YvnezQoYM8wXH48OHIzs7GK6+8giVLlgCo3RzC29tbPv9mm0OoVKpGt7kkIiKi1mfxpkxCCFRWVsLX17fFNocgIiJqce14GMKsnoXly5djwoQJ8PHxQXl5ObZt24YDBw5g7969kCSpxTaHICIiamm2sHSytZiVLPzyyy949NFHcf78eXh5eWHw4MHYu3cvQkNDAdRuDlFRUYHo6GiUlJQgMDCwWTaHICIianEtvIOjLTErWXjjjTdMHm+pzSGIiIio5fDdEERERErZac+ApZgsEBERKdCe5yzwFdVERERkEnsWiIiIlOAERyIiIjKFwxBEREREjWDPAhERkRIchiAiIiJTOAxBRERE1Aj2LBARESnBYQgiIiIyickCERERmcI5C0RERESNYM8CERGREhyGICIiIlMkISAJy77tLb2+tXAYgoiIiExizwIREZESHIYgIiIiU7gagoiIiKgR7FkgIiJSgsMQREREZAqHIYiIiIgawZ4FIiIiJTgMQURERKa052EIJgtERERKtOOeBc5ZICIiIpPYs0BERKSQvQ4jWIrJAhERkRJC1BZL72GHOAxBREREJrFngYiISAGuhiAiIiLTuBqCiIiIqGHsWSAiIlJAMtQWS+9hj5gsEBERKcFhCCIiIqKGmZUsxMfHY8SIEfDw8ED37t1x//33Iz8/3+gcIQR0Oh20Wi1cXV0REhKCvLw8qwZNRETU0upWQ1ha7JFZyUJmZibmzZuHI0eOICMjA9XV1QgLC8Ply5flcxISEpCYmIj169cjOzsbGo0GoaGhKC8vt3rwRERELaZuUyZLix0ya87C3r17jT6npKSge/fuOHr0KO666y4IIZCUlITY2FhE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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "thresholds = [50, 100]\n", "n_min_threshold = 100\n", "# Using 'center' here outputs the feature location as the arithmetic center of the detected feature.\n", "# All filtering is off in this example, although that is not usually recommended.\n", - "single_threshold_features = tobac.feature_detection_multithreshold(field_in = input_field_iris, dxy = 1000, threshold=thresholds, target='maximum', position_threshold='center', sigma_threshold=0,\n", - " n_min_threshold=n_min_threshold)\n", + "single_threshold_features = tobac.feature_detection_multithreshold(\n", + " field_in=input_field_iris,\n", + " dxy=1000,\n", + " threshold=thresholds,\n", + " target=\"maximum\",\n", + " position_threshold=\"center\",\n", + " sigma_threshold=0,\n", + " n_min_threshold=n_min_threshold,\n", + ")\n", "plt.pcolormesh(input_field_arr[0])\n", "plt.colorbar()\n", "# Plot all features detected\n", - "plt.scatter(x=single_threshold_features['hdim_2'].values, y=single_threshold_features['hdim_1'].values, color='r', label=\"Detected Features\")\n", + "plt.scatter(\n", + " x=single_threshold_features[\"hdim_2\"].values,\n", + " y=single_threshold_features[\"hdim_1\"].values,\n", + " color=\"r\",\n", + " label=\"Detected Features\",\n", + ")\n", "plt.legend()\n", "plt.title(\"n_min_threshold={0}\".format(n_min_threshold))\n", "plt.show()" @@ -275,68 +272,135 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "thresholds = [50, 100]\n", "\n", - "# defining multiple n_min_threshold: \n", - "n_min_threshold = [100,5]\n", + "# defining multiple n_min_threshold:\n", + "n_min_threshold = [100, 5]\n", "# alternatively, these could be given as a dictionary: n_min_threshold = {50:100,100: 5}\n", "\n", "# let's add another larger 30x30 feature, area of 900 to make the example more clear\n", - "input_field_iris.data[0, 40:70, 40:60]=50\n", + "input_field_iris.data[0, 40:70, 40:60] = 50\n", "\n", "# Using 'center' here outputs the feature location as the arithmetic center of the detected feature.\n", "# All filtering is off in this example, although that is not usually recommended.\n", - "single_threshold_features = tobac.feature_detection_multithreshold(field_in = input_field_iris, dxy = 1000, threshold=thresholds, target='maximum', position_threshold='center', sigma_threshold=0,\n", - " n_min_threshold=n_min_threshold)\n", + "single_threshold_features = tobac.feature_detection_multithreshold(\n", + " field_in=input_field_iris,\n", + " dxy=1000,\n", + " threshold=thresholds,\n", + " target=\"maximum\",\n", + " position_threshold=\"center\",\n", + " sigma_threshold=0,\n", + " n_min_threshold=n_min_threshold,\n", + ")\n", "\n", "\n", "plt.pcolormesh(input_field_iris.data[0])\n", "plt.colorbar()\n", "# Plot all features detected\n", - "plt.scatter(x=single_threshold_features['hdim_2'].values, y=single_threshold_features['hdim_1'].values, color='r', label=\"Detected Features\")\n", + "plt.scatter(\n", + " x=single_threshold_features[\"hdim_2\"].values,\n", + " y=single_threshold_features[\"hdim_1\"].values,\n", + " color=\"r\",\n", + " label=\"Detected Features\",\n", + ")\n", "plt.legend()\n", "plt.title(\"n_min_threshold={0}\".format(n_min_threshold))\n", - "plt.show() \n" + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Strict Thresholding (`strict_thresholding`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sometimes it may be desirable to detect only features that satisfy *all* specified `n_min_threshold` thresholds. This can be achieved with the optional argument `strict_thresholding=True`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# As above, we create test data to demonstrate the effect of strict_thresholding\n", + "input_field_arr = np.zeros((1, 101, 101))\n", + "\n", + "for idx, side in enumerate([40, 20, 10, 5]):\n", + " input_field_arr[\n", + " :,\n", + " (50 - side - 4 * idx) : (50 + side - 4 * idx),\n", + " (50 - side - 4 * idx) : (50 + side - 4 * idx),\n", + " ] = (\n", + " 50 - side\n", + " )\n", + "\n", + "input_field_iris = xr.DataArray(\n", + " input_field_arr,\n", + " dims=[\"time\", \"Y\", \"X\"],\n", + " coords={\"time\": [np.datetime64(\"2019-01-01T00:00:00\")]},\n", + ").to_iris()\n", + "\n", + "plt.pcolormesh(input_field_arr[0])\n", + "plt.colorbar()\n", + "plt.title(\"Base data\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "thresholds = [8, 29, 39, 44]\n", + "\n", + "n_min_thresholds = [79**2, input_field_arr.size, 8**2, 3**2]\n", + "\n", + "f = plt.figure(figsize=(10, 5))\n", + "\n", + "# perform feature detection with and without strict thresholding and display the results side by side\n", + "\n", + "for idx, strict in enumerate((False, True)):\n", + " features_demo = tobac.feature_detection_multithreshold(\n", + " input_field_iris,\n", + " dxy=1000,\n", + " threshold=thresholds,\n", + " n_min_threshold=n_min_thresholds,\n", + " strict_thresholding=strict,\n", + " )\n", + " ax = f.add_subplot(121 + idx)\n", + " ax.pcolormesh(input_field_iris.data[0])\n", + " ax.set_title(f\"strict_thresholding={strict}\")\n", + " ax.scatter(\n", + " x=features_demo[\"hdim_2\"].values,\n", + " y=features_demo[\"hdim_1\"].values,\n", + " marker=\"x\",\n", + " color=\"r\",\n", + " label=\"Detected Features\",\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The effect of `strict_thresholding` can be observed in the plot above: Since the second `n_min_threshold` is not reached, no further features can be detected at higher `threshold` values. In the case of non strict thresholding, the feature with the highest value is still detected even though a previous `n_min_threshold` was not reached." ] } ], "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.5" - }, - "vscode": { - "interpreter": { - "hash": "25a19fbe0a9132dfb9279d48d161753c6352f8f9478c2e74383d340069b907c3" - } + "name": "python" } }, "nbformat": 4, From fa3a3428227fa520d3363c2331dcb3706ed4a788 Mon Sep 17 00:00:00 2001 From: Kolya Lettl Date: Thu, 8 Jun 2023 10:21:03 +0200 Subject: [PATCH 07/11] chore: re-executed documentation notebook --- .../notebooks/n_min_threshold_example.ipynb | 143 +++++++++++++++--- 1 file changed, 124 insertions(+), 19 deletions(-) diff --git a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb index 61c5b66c..ad3db8b9 100644 --- a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb +++ b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -43,9 +43,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3iElEQVR4nO3df3TU1Z3/8ddAYEggREGYYSo/Ao2CBASNTYnYpEdIi8Da0tUiWEOxu9igJaUtirQysJIo3WbTmoqF0hCXRtyuYKlWTKway0aWiEQxekC/pCGljNlaSIJAIpn7/YNmyhAyfiYzSWbI83HOPcfcz495X6LOm/e9n/uxGWOMAAAAOtCnpwMAAACRjWQBAAAERLIAAAACIlkAAAABkSwAAICASBYAAEBAJAsAACAgkgUAABAQyQIAAAiIZAH4uy1btshms/m1YcOGKSMjQ88991xPhxe0RYsWacyYMZ269vHHH9eWLVvCGg+A6EWyAFygqKhIr7/+uioqKrRx40b17dtXc+fO1e9+97ueDq3bkCwAOF9MTwcARJrk5GSlpKT4fv7yl7+syy+/XE899ZTmzp3bg5EBQM+gsgB8igEDBqh///7q16+fX/+aNWuUmpqqIUOGaPDgwbruuuu0efNmXfhutpdfflkZGRkaOnSoYmNjNWrUKH3ta1/TqVOnfOe0tLTo4Ycf1vjx42W32zVs2DB985vf1P/93/9ZinHLli26+uqrZbfbNWHCBD355JMXPc9KzGPGjFF1dbXKy8t90zFt0xlnzpzR9773PU2ZMkUJCQkaMmSIpk2bpt/+9reW4gQQnagsABdobW3V2bNnZYzRhx9+qB//+Mf6+OOPtWDBAr/z/vSnP2nJkiUaNWqUJGnPnj267777dPToUT300EO+c2bPnq2bbrpJv/rVr3TZZZfp6NGj2rVrl1paWhQXFyev16tbb71Vf/zjH7VixQqlpaWptrZWq1evVkZGht544w3FxsZ2GO+WLVv0zW9+U7feeqt+8pOfqKGhQW63W83NzerTx//vA1Zi3rFjh/75n/9ZCQkJevzxxyVJdrtdktTc3Ky//e1v+v73v6/PfOYzamlp0UsvvaR58+apqKhId911Vxh+AwAijgFgjDGmqKjISGrX7Ha7efzxxwNe29raaj755BOzdu1aM3ToUOP1eo0xxvz3f/+3kWSqqqo6vPapp54ykswzzzzj119ZWWkkBfzs1tZW43K5zHXXXef7TGOM+dOf/mT69etnRo8eHXTMxhgzceJEk56eHnDMxhhz9uxZ88knn5i7777bTJ069VPPBxCdmIYALvDkk0+qsrJSlZWVeuGFF5SVlaWlS5eqsLDQ77yXX35ZM2bMUEJCgvr27at+/frpoYce0kcffaT6+npJ0pQpU9S/f3/967/+q4qLi3X48OF2n/fcc8/psssu09y5c3X27FlfmzJlipxOp1599dUOYz148KD+8pe/aMGCBbLZbL7+0aNHKy0trd35VmL+NL/5zW904403atCgQYqJiVG/fv20efNmvffee5auBxB9SBaAC0yYMEEpKSlKSUnRl7/8Zf3iF79QZmamVqxYoRMnTkiS9u7dq8zMTEnSpk2b9D//8z+qrKzUqlWrJEmnT5+WJI0bN04vvfSShg8frqVLl2rcuHEaN26cfvrTn/o+78MPP9SJEyd86yLObx6PR3/96187jPWjjz6SJDmdznbHLuyzGnMg27dv1+23367PfOYz2rp1q15//XVVVlZq8eLFOnPmzKdeDyA6sWYBsGDy5Ml68cUXdejQIX3uc5/Ttm3b1K9fPz333HMaMGCA77xnn3223bU33XSTbrrpJrW2tuqNN97QY489ppycHDkcDs2fP19XXHGFhg4dql27dl30s+Pj4zuMa+jQoZIkj8fT7tiFfcHE3JGtW7cqMTFRTz/9tF8lo7m52fI9AEQfKguABVVVVZKkYcOGSZJsNptiYmLUt29f3zmnT5/Wf/7nf3Z4j759+yo1NVU///nPJUlvvvmmJGnOnDn66KOP1Nra6qtonN+uvvrqDu959dVXa8SIEXrqqaf8nmiora1VRUWF37nBxGy32y9aabDZbOrfv79fouDxeHgaArjEkSwAF3jnnXe0Z88e7dmzR88//7zuvvtulZWV6atf/aoSExMlSbNnz9bJkye1YMEClZWVadu2bbrpppt8Tw20eeKJJ3T77beruLhYr7zyil544QV961vfkiTNmDFDkjR//nzNmjVLt9xyi9auXatdu3bpD3/4g4qLi7Vo0SLt2LGjw1j79Omjf/u3f9O+ffv01a9+Vc8//7x+/etfa8aMGe2mIazGLEmTJk3SW2+9paefflqVlZU6cOCApHOJzcGDB5Wdna2XX35ZxcXFmj59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88477xhjIj/+i9m7d68ZM2aMmTx5slm2bJmvPxrGsnr1ajNx4kRz7NgxX6uvr/cdj4Yx/O1vfzOjR482ixYtMv/7v/9rampqzEsvvWQ++OAD3znRMI76+nq/30NZWZmRZF555RVjTHSM4eGHHzZDhw41zz33nKmpqTG/+c1vzKBBg0xBQYHvnGgYRzSLqGThc5/7nLnnnnv8+saPH28eeOCBHoooOBcmC16v1zidTvPII4/4+s6cOWMSEhLME0880QMRWlNfX28kmfLycmNM9I7j8ssvN7/85S+jMv6mpiaTlJRkysrKTHp6ui9ZiJaxrF692lx77bUXPRYtY7j//vvN9OnTOzweLeO40LJly8y4ceOM1+uNmjHMnj3bLF682K9v3rx55s477zTGRO/vIppEzDRE23u7MzMz/fp74r3d4VJTUyOPx+M3JrvdrvT09IgeU0NDgyT53uIWbeNobW3Vtm3b9PHHH2vatGlRF78kLV26VLNnz9aMGTP8+qNpLO+//75cLpcSExM1f/58HT58WFL0jGHnzp1KSUnRbbfdpuHDh2vq1KnatGmT73i0jON8LS0t2rp1qxYvXiybzRY1Y5g+fbr+8Ic/6NChQ5Kkt956S7t379Ytt9wiKTp/F9Gmy15RHaxIem93uLTFfbEx1dbW9kRIn8oYo+XLl2v69OlKTk6WFD3jOHDggKZNm6YzZ85o0KBB2rFjh6655hrf/ywiPf4227Zt05tvvqnKysp2x6Lld5Gamqonn3xSV111lT788EM9/PDDSktLU3V1ddSM4fDhw9qwYYOWL1+uBx98UHv37tV3vvMd2e123XXXXVEzjvM9++yzOnHihBYtWiQpev59uv/++9XQ0KDx48erb9++am1t1bp163THHXdIip5xRLOISRbaRMJ7u8MtmsZ077336u2339bu3bvbHYv0cVx99dWqqqrSiRMn9MwzzygrK0vl5eW+45EevyTV1dVp2bJlKi0tDfg63Egfy6xZs3z/PGnSJE2bNk3jxo1TcXGxPv/5z0uK/DF4vV6lpKQoNzdXkjR16lRVV1drw4YNuuuuu3znRfo4zrd582bNmjVLLpfLrz/Sx/D0009r69atKikp0cSJE1VVVaWcnBy5XC5lZWX5zov0cUSziJmGiKT3dodL2+rvaBnTfffdp507d+qVV17RlVde6euPlnH0799fn/3sZ5WSkqK8vDxde+21+ulPfxo18UvSvn37VF9fr+uvv14xMTGKiYlReXm5fvaznykmJsYXbzSM5XwDBw7UpEmT9P7770fN72PEiBG65ppr/PomTJigI0eOSIqe/y7a1NbW6qWXXtK3vvUtX1+0jOEHP/iBHnjgAc2fP1+TJk3SN77xDX33u99VXl6epOgZRzSLmGQhkt7bHS6JiYlyOp1+Y2ppaVF5eXlEjckYo3vvvVfbt2/Xyy+/rMTERL/j0TKOCxlj1NzcHFXx33zzzTpw4ICqqqp8LSUlRQsXLlRVVZXGjh0bNWM5X3Nzs9577z2NGDEian4fN954Y7tHiA8dOuR721+0jKNNUVGRhg8frtmzZ/v6omUMp06dUp8+/l9Xffv29T06GS3jiGo9s67y4toendy8ebN59913TU5Ojhk4cKD505/+1NOhdaipqcns37/f7N+/30gy+fn5Zv/+/b7HPR955BGTkJBgtm/fbg4cOGDuuOOOiHuc59vf/rZJSEgwr776qt8jVqdOnfKdE+njWLlypXnttddMTU2Nefvtt82DDz5o+vTpY0pLS40xkR9/IOc/DWFMdIzle9/7nnn11VfN4cOHzZ49e8ycOXNMfHy877/laBjD3r17TUxMjFm3bp15//33za9//WsTFxdntm7d6jsnGsZhjDGtra1m1KhR5v777293LBrGkJWVZT7zmc/4Hp3cvn27ueKKK8yKFSt850TDOKJZRCULxhjz85//3IwePdr079/fXHfddb7H9yLVK6+8YiS1a1lZWcaYc4/0rF692jidTmO3280XvvAFc+DAgZ4N+gIXi1+SKSoq8p0T6eNYvHix79+bYcOGmZtvvtmXKBgT+fEHcmGyEA1jaXvGvV+/fsblcpl58+aZ6upq3/FoGIMxxvzud78zycnJxm63m/Hjx5uNGzf6HY+Wcbz44otGkjl48GC7Y9EwhsbGRrNs2TIzatQoM2DAADN27FizatUq09zc7DsnGsYRzWzGGNMjJQ0AABAVImbNAgAAiEwkCwAAICCSBQAAEBDJAgAACIhkAQAABESyAAAAAiJZAAAAAZEsAACAgEgWAABAQCQLAAAgIJIFAAAQ0P8HoOjTerjxWN0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Dimensions here are time, y, x.\n", "input_field_arr = np.zeros((1, 80, 80))\n", @@ -66,9 +77,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_8075/1759418141.py:3: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.\n", + " input_field_iris = xr.DataArray(\n" + ] + } + ], "source": [ "# We now need to generate an Iris DataCube out of this dataset to run tobac feature detection.\n", "# One can use xarray to generate a DataArray and then convert it to Iris, as done here.\n", @@ -97,9 +117,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "thresholds = [50, 100]\n", "# Using 'center' here outputs the feature location as the arithmetic center of the detected feature.\n", @@ -143,9 +174,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGFElEQVR4nO3de1iUZf4/8PfDaQA5mKcZJlFRUUswTQ1FC0qhn6JZ9LUSLVy3wtCSrPVE5egqGG1EaWK4RVSStaumW6lQKq6LbmRSRi1qEpI6UYaAiiDM/fuDeHIExmeYAWbg/bqu+8q5n9Pnhmo+3qdHEkIIEBERETXDob0DICIiItvGZIGIiIhMYrJAREREJjFZICIiIpOYLBAREZFJTBaIiIjIJCYLREREZBKTBSIiIjKJyQIRERGZxGSBOqV9+/ZBkiTs27evVe6fmZmJlJSURvU//vgjJEnC3/72t1Z5rrlaI563334bkiThxx9/vO65oaGhCA0NtfiZDe1oqmzevNni+xN1dk7tHQBRe7j11ltx8OBB3Hzzza1y/8zMTHz77beIi4trlftT05588klERUUZ1fn7+7dTNEQdB5MF6pS8vLwwZsyY9g7DbJcuXYK7u3t7h2Gz+vTpY5e/VyJbx2EIalM6nQ6SJKGgoAAzZsyAt7c31Go15syZg/LycsX3mT17Njw8PPC///0Pd999N7p06QIfHx+sWbMGAHDo0CGMHz8eXbp0waBBg5CRkWF0fVPDEA33PHHiBCZPngwPDw/4+vrimWeeQXV1teLYQkND8cknn6C4uNioO/xaycnJ8PPzg4eHB8aOHYtDhw412cajR48iPDwcnp6emDBhAgCgpqYGq1atwpAhQ6BSqdCzZ0/86U9/wi+//GJ0jz179iA0NBTdu3eHm5sb+vTpg/vvvx+XLl0yOx4A2LFjB8aOHQt3d3d4enoiLCwMBw8evO7PRAiBpKQk9O3bF66urrj11luxc+fO615HRLaByQK1i/vvvx+DBg3Cli1bsGTJEmRmZuLpp5826x5XrlxBZGQkIiIisH37dkyaNAlLly7FsmXLEB0djTlz5mDbtm0YPHgwZs+ejcOHDyu65z333IMJEyZg+/btmDNnDl555RW8+OKLiuNav349xo0bB41Gg4MHD8rlaq+//jqys7ORkpKCTZs24eLFi5g8eXKjhKmmpgb33HMP7rrrLmzfvh0rVqyAwWDAtGnTsGbNGkRFReGTTz7BmjVrkJ2djdDQUFRVVQGoH8ePiIiAi4sL3nrrLezatQtr1qxBly5dUFNTY3Y8mZmZmDZtGry8vPD+++/jzTffRFlZGUJDQ3HgwAGTP5MVK1Zg8eLFCAsLw0cffYQnnngCjz32GAoLCxudW1tbq6g09cLcNWvWwMXFBe7u7hg/fjx27Nhh+pdFRMoIoja0fPlyAUAkJSUZ1cfGxgpXV1dhMBgU3Sc6OloAEFu2bJHrrly5Inr27CkAiK+++kquP3funHB0dBQLFy6U6/bu3SsAiL179za654cffmj0rMmTJ4vBgweb00wREREh+vbt26i+qKhIABCBgYGitrZWrv/iiy8EAPH+++83iuett94yusf777/fqO1CCJGXlycAiPXr1wshhPjnP/8pAIj8/Pxm41QaT11dndBqtSIwMFDU1dXJ51VWVopevXqJ4OBguS49PV0AEEVFRUIIIcrKyoSrq6u47777jJ79n//8RwAQISEhRvUAFJX09HT5mjNnzojHHntMfPjhh+Lf//632LRpkxgzZowAIDZu3Nhs+4lIGc5ZoHZxzz33GH0eNmwYLl++jNLSUqjVakX3kCQJkydPlj87OTlh4MCBcHJywogRI+T6bt26oVevXiguLlZ0z6lTpzaKbc+ePYpiUioiIgKOjo5GzwDQZIz333+/0eePP/4YXbt2xdSpU1FbWyvXDx8+HBqNBvv27cMTTzyB4cOHw8XFBY8//jhiY2Nx++23o3///i2Kp7CwEGfOnEFcXBwcHP7okPTw8MD999+PN954o9n5FAcPHsTly5cxc+ZMo/rg4GD07du30fl5eXlNxngtPz8/+c8+Pj5IS0szOj59+nQEBQVhyZIlmD17Npyc+L87opbifz3ULrp37270WaVSAYDcha6Eu7s7XF1djepcXFzQrVu3Rue6uLjg8uXLLbqnSqVSdK05lLbf3d0dXl5eRnU///wzzp8/DxcXlybv/euvvwIABgwYgM8++wxJSUmYN28eLl68iP79++Opp57CggULzIrn3LlzAOq/lK+l1WphMBhQVlbWZLLQcK1Go2l0rKm64cOHN9mua12d3DTF2dkZDz74IJYsWYLjx4/jpptuUnRfImqMyQKRDWtqYmSPHj3QvXt37Nq1q8lrPD095T/f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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "thresholds = [50, 100]\n", "n_min_threshold = 5\n", @@ -183,9 +225,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "thresholds = [50, 100]\n", "n_min_threshold = 20\n", @@ -223,9 +276,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHI0lEQVR4nO3de1iUZf4/8PfDwQHk4CGdYRIVFbUE09RFUYNS6KtoFv2sPCTmHjC0JDNPVI6ugtFGlCamW0glWZuadtCgVFwX3UiliAo1CUmdKENARRDm/v1BPOsIjM8wA8zA+3Vd97XO/Zw+N7rNh/v0SEIIASIiIqJGOLR2AERERGTbmCwQERGRSUwWiIiIyCQmC0RERGQSkwUiIiIyickCERERmcRkgYiIiExiskBEREQmMVkgIiIik5gsUJty4MABSJKEAwcONMv909LSkJSUVK/+p59+giRJ+Mc//tEszzVXc8SzZcsWSJKEn3766abnhoSEICQkxCrPffbZZzFp0iTceuutkCQJs2fPbvTc06dPIyIiAp06dYK7uztCQ0Nx7NixBs/dtm0bhgwZAhcXF2i1WsTExODSpUtWiZmorWGyQG3KnXfeicOHD+POO+9slvs3lixQ83n55Zdx4cIF3HfffejQoUOj5/36668YO3YsTpw4gTfffBPvv/8+rl69ipCQEOTn5xudu3XrVkybNg0jRozAnj17sGLFCmzZsgURERHN3Rwiu+TU2gEQWZOnpydGjhzZ2mGY7cqVK3Bzc2vtMGxSeXk5HBxqf695++23Gz3vxRdfxK+//oqsrCz06tULADBmzBj07dsXzz//PN577z0AQE1NDZ555hmEhYVh8+bNAIC7774bHh4emDFjBvbs2YMJEyY0c6uI7At7FsgqdDodJElCXl4epk2bBi8vL6jVasyZMwelpaWK7zN79my4u7vjhx9+wL333ouOHTvC29sba9euBQAcOXIEY8aMQceOHdG/f3+kpqYaXd/QMETdPU+dOoWJEyfC3d0dPj4+ePrpp1FZWak4tpCQEHzyyScoLCyEJElyuVFiYiJ8fX3h7u6OUaNG4ciRIw22MTc3F2FhYfDw8MC4ceMAAFVVVVi9ejUGDhwIlUqFbt264bHHHsOvv/5qdI99+/YhJCQEXbt2haurK3r27IkHH3wQV65cMTseANi9ezdGjRoFNzc3eHh4IDQ0FIcPH77pz0QIgYSEBPTq1QsuLi648847sWfPnpteZ466ROFmdu7ciXvuuUdOFIDa5DEiIgIfffQRqqurAdT+Gzp//jwee+wxo+unTp0Kd3d37Ny503rBE7URTBbIqh588EH0798f27dvx9KlS5GWloannnrKrHtcu3YNERERCA8Px65duzBhwgQsW7YMy5cvR2RkJObMmYOdO3diwIABmD17No4eParonvfddx/GjRuHXbt2Yc6cOXj55ZfxwgsvKI5rw4YNGD16NDQaDQ4fPiyX67322mvIyMhAUlIStm7disuXL2PixIn1Eqaqqircd999uOeee7Br1y6sXLkSBoMBU6ZMwdq1azF9+nR88sknWLt2LTIyMhASEoKKigoAtfMRwsPD0aFDB7z55pvYu3cv1q5di44dO6KqqsrseNLS0jBlyhR4enri3XffxRtvvIGSkhKEhITg0KFDJn8mK1euxJIlSxAaGooPP/wQjz/+OP7617/W6/YHgOrqakWlKS/CraiowI8//ojBgwfXOzZ48GBUVFTg9OnTAIBvv/1Wrr+es7MzBg4cKB8nousIIitYsWKFACASEhKM6qOjo4WLi4swGAyK7hMZGSkAiO3bt8t1165dE926dRMAxLFjx+T6CxcuCEdHR7Fw4UK5bv/+/QKA2L9/f717vv/++0bPmjhxohgwYIA5zRTh4eGiV69e9eoLCgoEABEQECCqq6vl+i+//FIAEO+++269eN58802je7z77rv12i6EENnZ2QKA2LBhgxBCiA8++EAAEDk5OY3GqTSempoaodVqRUBAgKipqZHPKy8vF927dxdBQUFyXUpKigAgCgoKhBBClJSUCBcXF/HAAw8YPfs///mPACCCg4ON6gEoKikpKY22q2PHjiIyMrJe/dmzZwUAER8fX+9YWlqaACCysrKEEEKsWbNGABDnz5+vd25YWJjo379/o88naq84Z4Gs6r777jP6PHjwYFy9ehXFxcVQq9WK7iFJEiZOnCh/dnJyQr9+/eDk5IShQ4fK9V26dEH37t1RWFio6J6TJ0+uF9u+ffsUxaRUeHg4HB0djZ4BoMEYH3zwQaPPH3/8MTp16oTJkyfLXeYAMGTIEGg0Ghw4cACPP/44hgwZgg4dOuBvf/sboqOjMXbsWPTp06dJ8eTn5+PcuXOIiYkx6u53d3fH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6NEDa9euRb9+/QAAqampmDJlCo4fP45BgwbJm0Ns2bIF/fv3x+rVqxEaGor8/HyrB05ERNSSbOHdEAcOHDC+nyRBp9NBp9NZduObMKtnYfLkyZg4cSL69++P/v37Y82aNXB3d8eRI0dadHMIIiKiFtfK2z23piZPcKypqcG2bdtw+fJljBo1qsmbQ1RWVtbbyYqIiIhsh9nJQm5uLtzd3aFSqTB37lzs3LkTt99+u8nNIW5c1nG9+Ph4o12sfHx8zA2JiIio+bFnQbkBAwYgJycHR44cweOPP47IyEh899138nFzN4dYtmwZSktL5VJUVGRuSERERM1OslKxR2YvnezQoYM8wXH48OHIzs7GK6+8giVLlgCo3RzC29tbPv9mm0OoVKpGt7kkIiKi1mfxpkxCCFRWVsLX17fFNocgIiJqce14GMKsnoXly5djwoQJ8PHxQXl5ObZt24YDBw5g7969kCSpxTaHICIiamm2sHSytZiVLPzyyy949NFHcf78eXh5eWHw4MHYu3cvQkNDAdRuDlFRUYHo6GiUlJQgMDCwWTaHICIianEtvIOjLTErWXjjjTdMHm+pzSGIiIio5fDdEERERErZac+ApZgsEBERKdCe5yzwFdVERERkEnsWiIiIlOAERyIiIjKFwxBEREREjWDPAhERkRIchiAiIiJTOAxBRERE1Aj2LBARESnBYQgiIiIyickCERERmcI5C0RERESNYM8CERGREhyGICIiIlMkISAJy77tLb2+tXAYgoiIiExizwIREZESHIYgIiIiU7gagoiIiKgR7FkgIiJSgsMQREREZAqHIYiIiIgawZ4FIiIiJTgMQURERKa052EIJgtERERKtOOeBc5ZICIiIpPYs0BERKSQvQ4jWIrJAhERkRJC1BZL72GHOAxBREREJrFngYiISAGuhiAiIiLTuBqCiIiIqGHsWSAiIlJAMtQWS+9hj5gsEBERKcFhCCIiIqKGmZUsxMfHY8SIEfDw8ED37t1x//33Iz8/3+gcIQR0Oh20Wi1cXV0REhKCvLw8qwZNRETU0upWQ1ha7JFZyUJmZibmzZuHI0eOICMjA9XV1QgLC8Ply5flcxISEpCYmIj169cjOzsbGo0GoaGhKC8vt3rwRERELaZuUyZLix0ya87C3r17jT6npKSge/fuOHr0KO666y4IIZCUlITY2FhE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "thresholds = [50, 100]\n", "n_min_threshold = 100\n", @@ -272,9 +336,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "thresholds = [50, 100]\n", "\n", @@ -328,9 +403,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_8075/418987827.py:13: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.\n", + " input_field_iris = xr.DataArray(\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3UUlEQVR4nO3df1yV9f3H/+dJ5YgKGBocSCRsmCX5I2mmWWAp08yVtvVD13Rr++jHH5O5ZplbnvokmFt+3MZy0zXEmeJ3H7NcmUpz4PqYCzEWuX3NbqGykvjMKaAiKOf9/cNxfTshxwPnAg74uN9u79s87+t9XdebK+d58Xr/uBzGGCMAAIAmXNXeHQAAAMGNYAEAAPhEsAAAAHwiWAAAAD4RLAAAAJ8IFgAAgE8ECwAAwCeCBQAA4BPBAgAA8IlgAWiGdevWyeFweJVrrrlGqampev3119u7e802c+ZMXXfddS0698UXX9S6dets7Q+A4ESwALRAdna23nnnHe3du1dr1qxRly5dNHnyZP3hD39o7661GYIF4MrRtb07AHRESUlJSk5Otj5PmDBBV199tTZt2qTJkye3Y88AwH5kFgAbdO/eXSEhIerWrZtX/TPPPKORI0cqMjJS4eHhuuWWW/TSSy/pi+9v2717t1JTU9WnTx+Fhoaqf//+euCBB3T27FmrTV1dnZ577jkNGjRITqdT11xzjb71rW/p//7v//zq47p163TDDTfI6XTqxhtv1Pr16y/Zzp8+X3fddTp48KAKCgqs4ZiG4Yxz587pBz/4gYYNG6aIiAhFRkZq1KhReu211/zqJ4DgQ2YBaIH6+npduHBBxhh99tln+slPfqIzZ85o2rRpXu2OHDmiWbNmqX///pKkffv2af78+frkk0/09NNPW20mTZqkO+64Q7/97W/Vu3dvffLJJ9qxY4fq6urUo0cPeTwe3Xffffrzn/+sRYsWafTo0Tp69KiWLl2q1NRU7d+/X6GhoU32d926dfrWt76l++67Ty+88IIqKyvldrtVW1urq67y/p3Bnz5v3bpVX/va1xQREaEXX3xRkuR0OiVJtbW1+te//qXHH39c1157rerq6vTWW29p6tSpys7O1je/+U0b/gsAaFMGgN+ys7ONpEbF6XSaF1980ee59fX15vz58+bZZ581ffr0MR6PxxhjzP/8z/8YSaa4uLjJczdt2mQkmS1btnjVFxYWGkk+711fX29iY2PNLbfcYt3TGGOOHDliunXrZuLj45vdZ2OMGTx4sElJSfH5MxtjzIULF8z58+fNY489ZoYPH37Z9gCCD8MQQAusX79ehYWFKiws1JtvvqkZM2Zo7ty5ysrK8mq3e/dujRs3ThEREerSpYu6deump59+WidOnFBFRYUkadiwYQoJCdF//Md/KCcnRx9//HGj+73++uvq3bu3Jk+erAsXLlhl2LBhcrlcys/Pb7Kvhw4d0qeffqpp06bJ4XBY9fHx8Ro9enSj9v70+XJ+//vf6/bbb1evXr3UtWtXdevWTS+99JL+/ve/+3U+gOBCsAC0wI033qjk5GQlJydrwoQJ+vWvf620tDQtWrRIp06dkiS9++67SktLkyStXbtW//u//6vCwkItWbJEklRTUyNJuv766/XWW28pKipKc+fO1fXXX6/rr79eP/vZz6z7ffbZZzp16pQ1L+Lzpby8XP/85z+b7OuJEyckSS6Xq9GxL9b522dfXnnlFT344IO69tprtWHDBr3zzjsqLCzUt7/9bZ07d+6y5wMIPsxZAGwyZMgQ7dy5Ux9++KG+/OUvKzc3V926ddPrr7+u7t27W+1effXVRufecccduuOOO1RfX6/9+/frF7/4hdLT0xUdHa2HH35Yffv2VZ8+fbRjx45L3jssLKzJfvXp00eSVF5e3ujYF+ua0+embNiwQQkJCdq8ebNXJqO2ttbvawAILmQWAJsUFxdLkq655hpJksPhUNeuXdWlSxerTU1NjX73u981eY0uXbpo5MiR+uUvfylJOnDggCTp3nvv1YkTJ1RfX29lND5fbrjhhiavecMNNygmJkabNm3yWtFw9OhR7d2716ttc/rsdDovmWlwOBwKCQnxChTKy8tZDQF0YAQLQAt88MEH2rdvn/bt26c33nhDjz32mPLy8jRlyhQlJCRIkiZNmqTTp09r2rRpysvLU25uru644w5r1UCDX/3qV3rwwQeVk5OjP/3pT3rzzTf1ne98R5I0btw4SdLDDz+siRMn6p577tGzzz6rHTt26I9//KNycnI0c+ZMbd26tcm+XnXVVfqv//ovFRUVacqUKXrjjTf08ssva9y4cY2GIfztsyTdfPPN+utf/6rNmzersLBQJSUlki4GNocOHdKcOXO0e/du5eTkaMyYMYqJiWn5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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# As above, we create test data to demonstrate the effect of strict_thresholding\n", "input_field_arr = np.zeros((1, 101, 101))\n", @@ -358,9 +452,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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hMnNzXWPlZSUmA4dOhhJJjs726Oevn37uh+X//66dOliSkpK3OMff/yxkWReeeUV9/m7XC7Tq1cvj/pycnJMWFiY199N69atjaQKN/s8ymvxtWVkZHitbUlJiSkuLjb333+/6datm9fPHz16tPvx4MGDzZVXXun1HLaBAweaFi1amPz8fI/xiRMnmvDwcHPkyJHzHg/g56NP0adqc5+yrVixwkgyWVlZ7rGZM2caSeZ3v/ud1/yzz6vc6NGjPWp75ZVXjCTz6quveszLysoyksySJUt81oPqxztJdVjPnj21cuVKxcbG6oYbblD37t0VFhZW6eNvvvnmCuefPHlSmZmZuv/++3XppZf+3JIviMvlUs+ePT3Gunbtql27dnnNvfXWWz0eb9u2TUeOHNHo0aO93s341a9+pfnz5+vEiRNq0KBBpdezMvW899576tSpk9e8MWPGaOnSpXrvvffUrl07n+e7detW9e/fX3Fxce6xkJAQ3XHHHZo1a5bPY842aNAghYSEeNQnSTk5OZKkvXv3Kjc3V4899pjHca1atVLv3r2VnZ3tMf7666/7fOXubPHx8V5jkyZN0siRIz3G2rdvL0lav369Fi5cqE8//dTj1bnw8PDz/pyePXvqzTff1IQJEzR06FBdc801io6Odu8/ffq03n33XY0fP16RkZEev/ubbrpJixcv1kcffaRf//rXFZ4TgAtHn9rlNZc+dUZt6lMVOft3VhVvvPGGGjVqpCFDhnj8fq+88kq5XC69//77Gj9+/AU/Py4cIakOW7dunebMmaP/+q//0pNPPqmGDRvqN7/5jebPny+Xy1Xh8c2aNatwztGjR1VaWhrQu7vExsZ6jTmdTp06dcpr/Oxz+v777yVJw4cPP+fzHzlyRA0aNKj0elamnsOHD/u8Xrr8H+ezL42wHT582OfvrzK/03PV6HQ6JcldY/nPtxtcubi4OK/m06lTp0pfxnC2Fi1a+PwQ7IYNG3T77bfrtttu02OPPSaXy6XQ0FAtXbpUf/zjH8/7c6ZPn64GDRpo9erVevHFFxUSEqLrrrtO8+bNU48ePXT48GGVlJRo0aJFWrRokc/n+OGHHyo8HwA/D32KPnUutalPVaQyf4fn8v333+vYsWOqX7++z/30osAhJNVhTZo00cKFC7Vw4ULt379fmzZt0rRp05SXl6e33367wuPL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vXu3li5dqlGjRrnnBdu6rFu3TqtXr9aaNWt0+eWXa9euXUpJSVF8fLxGjx7tnhds63K2Czn/YFsjW7D/vZSjN51BX/KNvuQbfanyaqo3XVSX2zVp0kQhISFeSTAvL88rVdZ1Dz74oDZt2qStW7eqRYsW7nGXyyVJQbdG27dvV15enrp3767Q0FCFhoYqMzNTzz//vEJDQ93nHmzr0qxZM3Xq1MljrGPHjtq/f7+k4P17eeyxxzRt2jTdeeed6tKli+655x49/PDDSk9PlxS861KuMufvcrlUVFSko0ePnnNOsKA3/YTe9BP6km/0Jd/oSxWr6d50UYWk+vXrq3v37srIyPAYz8jIUFJSUoCqqlnGGE2cOFEbNmzQe++9p4SEBI/9CQkJcrlcHmtUVFSkzMzMOr1G/fv312effaZdu3a5tx49eujuu+/Wrl271LZt26Bcl969e3vdhvfLL79U69atJQXv38vJkydVr57nP38hISHuW60G67qUq8z5d+/eXWFhYR5zDh48qM8//zwo1shGb6I3+UJf8o2+5Bt9qWI13puqdJuHWqD8Nqv//d//bfbs2WNSUlJMgwYNzL59+wJdWo0YP368iYmJMe+//745ePCgezt58qR7zlNPPWViYmLMhg0bzGeffWbuuuuuOneLyMqw7yJkTHCuy8cff2xCQ0PN3LlzzVdffWX+/Oc/m8jISLN69Wr3nGBcl9GjR5vmzZu7b7W6YcMG06RJEzNlyhT3nLq+LsePHzc7d+40O3fuNJLMggULzM6dO923rK7M+Y8bN860aNHCbNmyxezYscNcf/31QX8LcHoTvel86Ev0pXOhL51Rm3rTRReSjDHmhRdeMK1btzb169c3v/zlL923GA0GknxuK1ascM8pKyszM2fONC6XyzidTnPdddeZzz77LHBFB8jZzShY1+X11183nTt3Nk6n03To0MEsW7bMY38wrktBQYGZNGmSadWqlQkPDzdt27Y1M2bMMIWFhe45dX1dtm7d6vPfktGjRxtjKnf+p06dMhMnTjSNGzc2ERERZvDgwWb//v0BOJvagd5Eb6oIfekM+pI3+tIZtak3OYwxpmrvPQEAAABA3XVRfSYJAAAAAKobIQkAAAAALIQkAAAAALAQkgAAAADAQkgCAAAAAAshCQAAAAAshCQAAAAAsBCSAAAAAMBCSAIAAAAACyEJAAAAACyEJAAAAACwEJIAAAAAwPL/ATxukDzboyiiAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "thresholds = [8, 29, 39, 44]\n", "\n", From 5371099cd47d5d27be084916dbd32aff51bd871c Mon Sep 17 00:00:00 2001 From: William Jones Date: Sat, 10 Jun 2023 16:52:47 +0100 Subject: [PATCH 08/11] Feature detection now removes parent features found at all previous thresholds --- .../notebooks/n_min_threshold_example.ipynb | 236 ++++++++++++++++-- tobac/feature_detection.py | 13 +- tobac/tests/test_feature_detection.py | 10 +- 3 files changed, 233 insertions(+), 26 deletions(-) diff --git a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb index ad3db8b9..48ccbd25 100644 --- a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb +++ b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb @@ -79,16 +79,7 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_8075/1759418141.py:3: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.\n", - " input_field_iris = xr.DataArray(\n" - ] - } - ], + "outputs": [], "source": [ "# We now need to generate an Iris DataCube out of this dataset to run tobac feature detection.\n", "# One can use xarray to generate a DataArray and then convert it to Iris, as done here.\n", @@ -406,14 +397,6 @@ "execution_count": 9, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_8075/418987827.py:13: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.\n", - " input_field_iris = xr.DataArray(\n" - ] - }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGxCAYAAADs5vVAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3UUlEQVR4nO3df1yV9f3H/+dJ5YgKGBocSCRsmCX5I2mmWWAp08yVtvVD13Rr++jHH5O5ZplbnvokmFt+3MZy0zXEmeJ3H7NcmUpz4PqYCzEWuX3NbqGykvjMKaAiKOf9/cNxfTshxwPnAg74uN9u79s87+t9XdebK+d58Xr/uBzGGCMAAIAmXNXeHQAAAMGNYAEAAPhEsAAAAHwiWAAAAD4RLAAAAJ8IFgAAgE8ECwAAwCeCBQAA4BPBAgAA8IlgAWiGdevWyeFweJVrrrlGqampev3119u7e802c+ZMXXfddS0698UXX9S6dets7Q+A4ESwALRAdna23nnnHe3du1dr1qxRly5dNHnyZP3hD39o7661GYIF4MrRtb07AHRESUlJSk5Otj5PmDBBV199tTZt2qTJkye3Y88AwH5kFgAbdO/eXSEhIerWrZtX/TPPPKORI0cqMjJS4eHhuuWWW/TSSy/pi+9v2717t1JTU9WnTx+Fhoaqf//+euCBB3T27FmrTV1dnZ577jkNGjRITqdT11xzjb71rW/p//7v//zq47p163TDDTfI6XTqxhtv1Pr16y/Zzp8+X3fddTp48KAKCgqs4ZiG4Yxz587pBz/4gYYNG6aIiAhFRkZq1KhReu211/zqJ4DgQ2YBaIH6+npduHBBxhh99tln+slPfqIzZ85o2rRpXu2OHDmiWbNmqX///pKkffv2af78+frkk0/09NNPW20mTZqkO+64Q7/97W/Vu3dvffLJJ9qxY4fq6urUo0cPeTwe3Xffffrzn/+sRYsWafTo0Tp69KiWLl2q1NRU7d+/X6GhoU32d926dfrWt76l++67Ty+88IIqKyvldrtVW1urq67y/p3Bnz5v3bpVX/va1xQREaEXX3xRkuR0OiVJtbW1+te//qXHH39c1157rerq6vTWW29p6tSpys7O1je/+U0b/gsAaFMGgN+ys7ONpEbF6XSaF1980ee59fX15vz58+bZZ581ffr0MR6PxxhjzP/8z/8YSaa4uLjJczdt2mQkmS1btnjVFxYWGkk+711fX29iY2PNLbfcYt3TGGOOHDliunXrZuLj45vdZ2OMGTx4sElJSfH5MxtjzIULF8z58+fNY489ZoYPH37Z9gCCD8MQQAusX79ehYWFKiws1JtvvqkZM2Zo7ty5ysrK8mq3e/dujRs3ThEREerSpYu6deump59+WidOnFBFRYUkadiwYQoJCdF//Md/KCcnRx9//HGj+73++uvq3bu3Jk+erAsXLlhl2LBhcrlcys/Pb7Kvhw4d0qeffqpp06bJ4XBY9fHx8Ro9enSj9v70+XJ+//vf6/bbb1evXr3UtWtXdevWTS+99JL+/ve/+3U+gOBCsAC0wI033qjk5GQlJydrwoQJ+vWvf620tDQtWrRIp06dkiS9++67SktLkyStXbtW//u//6vCwkItWbJEklRTUyNJuv766/XWW28pKipKc+fO1fXXX6/rr79eP/vZz6z7ffbZZzp16pQ1L+Lzpby8XP/85z+b7OuJEyckSS6Xq9GxL9b522dfXnnlFT344IO69tprtWHDBr3zzjsqLCzUt7/9bZ07d+6y5wMIPsxZAGwyZMgQ7dy5Ux9++KG+/OUvKzc3V926ddPrr7+u7t27W+1effXVRufecccduuOOO1RfX6/9+/frF7/4hdLT0xUdHa2HH35Yffv2VZ8+fbRjx45L3jssLKzJfvXp00eSVF5e3ujYF+ua0+embNiwQQkJCdq8ebNXJqO2ttbvawAILmQWAJsUFxdLkq655hpJksPhUNeuXdWlSxerTU1NjX73u981eY0uXbpo5MiR+uUvfylJOnDggCTp3nvv1YkTJ1RfX29lND5fbrjhhiavecMNNygmJkabNm3yWtFw9OhR7d2716ttc/rsdDovmWlwOBwKCQnxChTKy8tZDQF0YAQLQAt88MEH2rdvn/bt26c33nhDjz32mPLy8jRlyhQlJCRIkiZNmqTTp09r2rRpysvLU25uru644w5r1UCDX/3qV3rwwQeVk5OjP/3pT3rzzTf1ne98R5I0btw4SdLDDz+siRMn6p577tGzzz6rHTt26I9//KNycnI0c+ZMbd26tcm+XnXVVfqv//ovFRUVacqUKXrjjTf08ssva9y4cY2GIfztsyTdfPPN+utf/6rNmzersLBQJSUlki4GNocOHdKcOXO0e/du5eTkaMyYMYqJiWn5AwfQvtp7hiXQkVxqNURERIQZNmyYWblypTl37pxX+9/+9rfmhhtuME6n0wwYMMBkZmaal156yUgypaWlxhhj3nnnHTNlyhQTHx9vnE6n6dOnj0lJSTHbtm3zutb58+fNT3/6UzN06FDTvXt306tXLzNo0CAza9Ysc/jw4cv2/Te/+Y1JTEw0ISEhZuDAgea3v/2tmTFjRqPVEP702ZiLqynS0tJMWFiYkeR1neXLl5vrrrvOOJ1Oc+ONN5q1a9eapUuXGv7JATomhzFf2B0GAADgcxiGAAAAPhEsAAAAnwgWAACATwQLAAB0EpmZmXI4HEpPT7fqZs6cab3wraHcdtttzboumzIBANAJFBYWas2aNRoyZEijYxMmTFB2drb1OSQkpFnXJrMAAEAHd/r0aU2fPl1r167V1Vdf3ei40+mUy+WySmRkZLOu3+zMwp49e/STn/xERUVFOn78uLZu3ar777/fOm6M0TPPPKM1a9bo5MmT1m50gwcPttrU1tbq8ccf16ZNm1RTU6O7775bL774ovr16+dXHzwejz799FOFhYV57RIHAMAXGWNUXV2t2NjYRq9kt9O5c+dUV1cX8HWMMY2+25xO5yU3R2swd+5cTZo0SePGjdNzzz3X6Hh+fr6ioqLUu3dvpaSkaNmyZYqKimpWp5pl+/btZsmSJWbLli1Gktm6davX8eXLl5uwsDCzZcsWU1JSYh566CETExNjqqqqrDazZ8821157rcnLyzMHDhwwY8eONUOHDjUXLlzwqw9lZWWXfE0whUKhUChNlbKysuZ+5fmtpqbGuKK62NLPXr16NapbunRpk/fetGmTSUpKMjU1NcYYY1JSUsyCBQus47m5ueb11183JSUlZtu2bWbo0KFm8ODBjTaR8yWgTZkcDodXZsEYo9jYWKWnp+uJJ56QdDGLEB0dreeff16zZs1SZWWlrrnmGv3ud7/TQw89JEn69NNPFRcXp+3bt+srX/nKZe9bWVmp3r17a4zuUVd1a2n3AQBXgAs6r7e1XadOnVJERESr3KOqqkoREREqLYpXeFjLsxdV1R4ljDiqsrIyhYeHW/VNZRbKysqUnJysXbt2aejQoZKk1NRUDRs2TKtWrbrkPY4fP674+Hjl5uZq6tSpfvXL1gmOpaWlKi8vt15xK138AVNSUrR3717NmjVLRUVFOn/+vFeb2NhYJSUlae/evZcMFmpra73eWFddXf3vzndTVwfBAgDAh3//StwWw9bhYVcFFCxY1wkP9woWmlJUVKSKigqNGDHCqquvr9eePXuUlZWl2tparxfDSVJMTIzi4+N1+PBhv/tja7DQ8Lrb6Ohor/ro6GgdPXrUahMSEtJoAkZ0dPQlX6ErXVwK8swzz9jZVQAAbFdvPKpvcb7+4vnNcffdd1svcWvwrW99S4MGDdITTzzRKFCQpBMnTqisrKxZL3drlaWTX4zezCUma3yRrzaLFy/WwoULrc9VVVWKi4sLvKMAANjIIyOPWh4tNPfcsLAwJSUledX17NlTffr0UVJSkk6fPi23260HHnhAMTExOnLkiJ566in17dtXU6ZM8fs+tgYLDa+7LS8v94pYKioqrGyDy+VSXV2dTp486ZVdqKio0OjRoy953cvNAgUAIBh45FHzcgONz7dTly5dVFJSovXr1+vUqVOKiYnR2LFjtXnzZoWFhfl9HVuDhYSEBLlcLuXl5Wn48OGSpLq6OhUUFOj555+XJI0YMULdunVTXl6eHnzwQUkXJ1t88MEHWrFihZ3dAQDgipOfn2/9OTQ0VDt37gz4ms0OFk6fPq2PPvrI+lxaWqri4mJFRkaqf//+Sk9PV0ZGhhITE5WYmKiMjAz16NFD06ZNkyRFREToscce0w9+8AP16dNHkZGRevzxx3XzzTdr3LhxAf9AAAC0l3pjVN/yRYYBnduamh0s7N+/X2PHjrU+N8wlmDFjhtatW6dFixappqZGc+bMsTZl2rVrl1e647//+7/VtWtXPfjgg9amTOvWrbvkRAwAADqKtp6z0FYC2mehvTSsZ03VfSydBAD4dMGcV75eU2VlpV/LEVui4Xvp6P8bG/A+C/GDPm3VvrYEL5ICAMAmHhnVd8LMAsECAAA26azDELx1EgAA+ERmAQAAm7AaAgAA+OT5dwnk/GDEMAQAAPCJzAIAADapD3A1RCDntiaCBQAAbFJvFOBbJ+3ri50IFgAAsAlzFgAAwBWJzAIAADbxyKF6OQI6PxgRLAAAYBOPuVgCOT8YMQwBAAB8IrMAAIBN6gMchgjk3NZEsAAAgE06a7DAMAQAAPCJzAIAADbxGIc8JoDVEAGc25oIFgAAsAnDEAAA4IpEZgEAAJvU6yrVB/B7eL2NfbETwQIAADYxAc5ZMMxZAACgc2POAgAAuCKRWQAAwCb15irVmwDmLATpuyEIFgAAsIlHDnkCSNp7FJzRAsMQAADAJzILAADYhAmOAADAp4Y5C4GUQGRmZsrhcCg9Pd2qM8bI7XYrNjZWoaGhSk1N1cGDB5t1XYIFAAA6gcLCQq1Zs0ZDhgzxql+xYoVWrlyprKwsFRYWyuVyafz48aqurvb72gQLAADY5OIEx8BKS5w+fVrTp0/X2rVrdfXVV1v1xhitWrVKS5Ys0dSpU5WUlKScnBydPXtWGzdu9Pv6zFloJXUTbm3vLgBAqwrZUdjeXQg6ngC3e25YDVFVVeVV73Q65XQ6mzxv7ty5mjRpksaNG6fnnnvOqi8tLVV5ebnS0tK8rpWSkqK9e/dq1qxZfvWLzAIAAEEmLi5OERERVsnMzGyybW5urg4cOHDJNuXl5ZKk6Ohor/ro6GjrmD/ILAAAYJPAN2W6mFkoKytTeHi4Vd9UVqGsrEwLFizQrl271L179yav63B4D28YYxrV+UKwAACATTy6ypZNmcLDw72ChaYUFRWpoqJCI0aMsOrq6+u1Z88eZWVl6dChQ5IuZhhiYmKsNhUVFY2yDb4wDAEAgE3qjSPg0hx33323SkpKVFxcbJXk5GRNnz5dxcXFGjBggFwul/Ly8qxz6urqVFBQoNGjR/t9HzILAAB0UGFhYUpKSvKq69mzp/r06WPVp6enKyMjQ4mJiUpMTFRGRoZ69OihadOm+X0fggUAAGxSH+BqiPpWeDfEokWLVFNTozlz5ujkyZMaOXKkdu3apbCwML+vQbAAAIBNPOYqeQKY4OgxgQcL+fn5Xp8dDofcbrfcbneLr8mcBQAA4BOZBQAAbBKMwxB2IFgAAMAmHqnZKxq+eH4wYhgCAAD4RGYBAACbBL4pU3D+Dk+wAACATQLf7jk4g4Xg7BUAAAgaZBYAALCJRw55FMgEx5af25oIFgAAsElnHYYgWAAAwCaB77MQnMFCcPYKAAAEDTILAADYxGMc8gSyKVMA57YmggUAAGziCXAYIlj3WQjOXgEAgKBBZgEAAJsE/orq4PwdnmABAACb1Muh+gD2Sgjk3NYUnCEMAAAIGmQWAACwCcMQAADAp3oFNpRQb19XbBWcIQwAAAgaZBYAALAJwxAAAMAnXiQFAAB8MgG+otqwdBIAAHREZBYAALBJZx2GsL1XFy5c0I9+9CMlJCQoNDRUAwYM0LPPPiuPx2O1McbI7XYrNjZWoaGhSk1N1cGDB+3uCgAAbarhrZOBlGBke7Dw/PPP61e/+pWysrL097//XStWrNBPfvIT/eIXv7DarFixQitXrlRWVpYKCwvlcrk0fvx4VVdX290dAAAQINuHId555x3dd999mjRpkiTpuuuu06ZNm7R//35JF7MKq1at0pIlSzR16lRJUk5OjqKjo7Vx40bNmjXL7i4BANAm6gN8RXUg57Ym23s1ZswY/fGPf9SHH34oSfrrX/+qt99+W/fcc48kqbS0VOXl5UpLS7POcTqdSklJ0d69ey95zdraWlVVVXkVAACCTWcdhrA9s/DEE0+osrJSgwYNUpcuXVRfX69ly5bpkUcekSSVl5dLkqKjo73Oi46O1tGjRy95zczMTD3zzDN2dxUAAPjB9szC5s2btWHDBm3cuFEHDhxQTk6OfvrTnyonJ8erncPhHT0ZYxrVNVi8eLEqKyutUlZWZne3AQAImEdXBVyaY/Xq1RoyZIjCw8MVHh6uUaNG6c0337SOz5w5Uw6Hw6vcdtttzf65bM8s/PCHP9STTz6phx9+WJJ088036+jRo8rMzNSMGTPkcrkkXcwwxMTEWOdVVFQ0yjY0cDqdcjqddncVAABb1RuH6gMYSmjuuf369dPy5cv1pS99SdLFOYD33Xef3nvvPQ0ePFiSNGHCBGVnZ1vnhISENLtftmcWzp49q6uu8r5sly5drKWTCQkJcrlcysvLs47X1dWpoKBAo0ePtrs7AAB0WpMnT9Y999yjgQMHauDAgVq2bJl69eqlffv2WW2cTqdcLpdVIiMjm30f2zMLkydP1rJly9S/f38NHjxY7733nlauXKlvf/vbki4OP6SnpysjI0OJiYlKTExURkaGevTooWnTptndHQAA2kygkxQbzv3iRH5/Muz19fX6/e9/rzNnzmjUqFFWfX5+vqKiotS7d2+lpKRo2bJlioqKala/bA8WfvGLX+jHP/6x5syZo4qKCsXGxmrWrFl6+umnrTaLFi1STU2N5syZo5MnT2rkyJHatWuXwsLC7O4OAABtxgT41knz73Pj4uK86pcuXSq3233Jc0pKSjRq1CidO3dOvXr10tatW3XTTTdJkiZOnKivf/3rio+PV2lpqX784x/rrrvuUlFRUbOG9x3GGNOyH6n9VFVVKSIiQqm6T10d3dq7O5dUN+HW9u4CALSqkB2F7d0Fv1ww55Wv11RZWanw8PBWuUfD99JjBQ8qpFfLv5fqTp/XSyn/j8rKyrz66iuzUFdXp2PHjunUqVPasmWLfvOb36igoMAKGD7v+PHjio+PV25urrXXkT94NwQAAEGmYXWDP0JCQqwJjsnJySosLNTPfvYz/frXv27UNiYmRvHx8Tp8+HCz+kOwAACATTxGAc5ZCLwPxhjV1tZe8tiJEydUVlbmtRrRHwQLAADYxBPgnIXmnvvUU09p4sSJiouLU3V1tXJzc5Wfn68dO3bo9OnTcrvdeuCBBxQTE6MjR47oqaeeUt++fTVlypRm3YdgAQCADuqzzz7To48+quPHjysiIkJDhgzRjh07NH78eNXU1KikpETr16/XqVOnFBMTo7Fjx2rz5s3NXlBAsAAAgE08csijAIYhmnnuSy+91OSx0NBQ7dy5s8V9+TyCBQAAbNLWOzi2leB8FyYAAAgaZBYAALBJW09wbCsECwAA2MSjALd7DmC+Q2sKzhAGAAAEDTILAADYxAS4GsIEaWaBYAEAAJvY9dbJYEOwAACATTrrBMfg7BUAAAgaZBYAALAJwxAAAMCntt7uua0wDAEAAHwiswAAgE0YhgAAAD511mCBYQgAAOATmQUAAGzSWTMLBAsAANikswYLDEMAAACfyCwAAGATo8D2SjD2dcVWBAsAANiksw5DECwAAGCTzhosMGcBAAD4RGYBAACbdNbMAsECAAA26azBAsMQAADAJzILAADYxBiHTADZgUDObU0ECwAA2MQjR0D7LARybmtiGAIAAPhEZgEAAJt01gmOBAsAANiks85ZYBgCAIAOavXq1RoyZIjCw8MVHh6uUaNG6c0337SOG2PkdrsVGxur0NBQpaam6uDBg82+D8ECAAA2aRiGCKQ0R79+/bR8+XLt379f+/fv11133aX77rvPCghWrFihlStXKisrS4WFhXK5XBo/fryqq6ubdR+CBQAAbNIwDBFIaY7Jkyfrnnvu0cCBAzVw4EAtW7ZMvXr10r59+2SM0apVq7RkyRJNnTpVSUlJysnJ0dmzZ7Vx48Zm3YdgAQAAm5gAswoNwUJVVZVXqa2tvey96+vrlZubqzNnzmjUqFEqLS1VeXm50tLSrDZOp1MpKSnau3dvs34uggUAAIJMXFycIiIirJKZmdlk25KSEvXq1UtOp1OzZ8/W1q1bddNNN6m8vFySFB0d7dU+OjraOuYvVkMAAGATI8mYwM6XpLKyMoWHh1v1TqezyXNuuOEGFRcX69SpU9qyZYtmzJihgoIC67jD4T20YYxpVHc5BAsAANjEI4ccNuzg2LC6wR8hISH60pe+JElKTk5WYWGhfvazn+mJJ56QJJWXlysmJsZqX1FR0SjbcDkMQwAA0IkYY1RbW6uEhAS5XC7l5eVZx+rq6lRQUKDRo0c365pkFgAAsElbb8r01FNPaeLEiYqLi1N1dbVyc3OVn5+vHTt2yOFwKD09XRkZGUpMTFRiYqIyMjLUo0cPTZs2rVn3IViArWq+d6q9u4ArUOjPe7d3FwBJF/dZcLThds+fffaZHn30UR0/flwREREaMmSIduzYofHjx0uSFi1apJqaGs2ZM0cnT57UyJEjtWvXLoWFhTXrPgQLAAB0UC+99JLP4w6HQ263W263O6D7ECwAAGATYwJcDRHAua2JYAEAAJvwIikAAHBFIrMAAIBNOmtmgWABAACbtPVqiLZCsAAAgE066wRH5iwAAACfyCwAAGCTi5mFQOYs2NgZGxEsAABgk846wZFhCAAA4BOZBQAAbGL+XQI5PxgRLAAAYBOGIQAAwBWJzAIAAHbppOMQBAsAANglwGEIBekwBMECAAA2YQfHZvjkk0/0jW98Q3369FGPHj00bNgwFRUVWceNMXK73YqNjVVoaKhSU1N18ODB1ugKAAAIkO3BwsmTJ3X77berW7duevPNN/W3v/1NL7zwgnr37m21WbFihVauXKmsrCwVFhbK5XJp/Pjxqq6utrs7AAC0mYbVEIGUYGT7MMTzzz+vuLg4ZWdnW3XXXXed9WdjjFatWqUlS5Zo6tSpkqScnBxFR0dr48aNmjVrlt1dAgCgbRhHYPMOgjRYsD2zsG3bNiUnJ+vrX/+6oqKiNHz4cK1du9Y6XlpaqvLycqWlpVl1TqdTKSkp2rt37yWvWVtbq6qqKq8CAADahu3Bwscff6zVq1crMTFRO3fu1OzZs/W9731P69evlySVl5dLkqKjo73Oi46Oto59UWZmpiIiIqwSFxdnd7cBAAhYwwTHQEowsj1Y8Hg8uuWWW5SRkaHhw4dr1qxZ+u53v6vVq1d7tXM4vFMtxphGdQ0WL16syspKq5SVldndbQAAAmdsKEHI9mAhJiZGN910k1fdjTfeqGPHjkmSXC6XJDXKIlRUVDTKNjRwOp0KDw/3KgAAoG3YHizcfvvtOnTokFfdhx9+qPj4eElSQkKCXC6X8vLyrON1dXUqKCjQ6NGj7e4OAABthtUQfvr+97+v0aNHKyMjQw8++KDeffddrVmzRmvWrJF0cfghPT1dGRkZSkxMVGJiojIyMtSjRw9NmzbN7u4AANC2gnQoIRC2Bwu33nqrtm7dqsWLF+vZZ59VQkKCVq1apenTp1ttFi1apJqaGs2ZM0cnT57UyJEjtWvXLoWFhdndHQAAEKBW2e753nvv1b333tvkcYfDIbfbLbfb3Rq3BwCgXXTWV1TzbggAAOzCWycBAIBvjn+XQM4PPq3yIikAANB5ECwAAGCXNt6UKTMzU7feeqvCwsIUFRWl+++/v9H2BTNnzpTD4fAqt912W7PuQ7AAAIBd2jhYKCgo0Ny5c7Vv3z7l5eXpwoULSktL05kzZ7zaTZgwQcePH7fK9u3bm3Uf5iwAANBB7dixw+tzdna2oqKiVFRUpDvvvNOqdzqd1g7KLUFmAQAAuzS8ojqQIjV603Jtba1ft6+srJQkRUZGetXn5+crKipKAwcO1He/+11VVFQ068ciWAAAwCZ2vXUyLi7O623LmZmZftzbaOHChRozZoySkpKs+okTJ+rll1/W7t279cILL6iwsFB33XWX3wGIxDAEAABBp6yszOuliU6n87LnzJs3T++//77efvttr/qHHnrI+nNSUpKSk5MVHx+vN954Q1OnTvWrPwQLAADYxaZNmZr7huX58+dr27Zt2rNnj/r16+ezbUxMjOLj43X48GG/r0+wAACAXT4376DF5zenuTGaP3++tm7dqvz8fCUkJFz2nBMnTqisrEwxMTF+34c5CwAAdFBz587Vhg0btHHjRoWFham8vFzl5eWqqamRJJ0+fVqPP/643nnnHR05ckT5+fmaPHmy+vbtqylTpvh9HzILAADYxGEulkDOb47Vq1dLklJTU73qs7OzNXPmTHXp0kUlJSVav369Tp06pZiYGI0dO1abN29u1pueCRYAALBLG79IyhjfJ4SGhmrnzp0BdOgiggUAAOzSxnMW2gpzFgAAgE9kFgAAsEsbD0O0FYIFAADs0kmDBYYhAACAT2QWAACwSyfNLBAsAABgF1ZDAACAKxGZBXQo7hu2tXcXOiz3oa+2dxeATq+td3BsKwQLAADYpZPOWWAYAgAA+ESwAAAAfGIYAgAAmzgU4JwF23piL4IFAADswtJJAABwJSKzAACAXTrpagiCBQAA7NJJgwWGIQAAgE9kFgAAsAk7OAIAAN8YhgAAAFciMgsAANilk2YWCBYAALBJZ52zwDAEAADwicwCAAB26aTbPRMsAABgF+YsAAAAX5izAAAArkhkFgAAsAvDEAAAwKcAhyGCNVhgGAIAgA4qMzNTt956q8LCwhQVFaX7779fhw4d8mpjjJHb7VZsbKxCQ0OVmpqqgwcPNus+BAsAANjF2FCaoaCgQHPnztW+ffuUl5enCxcuKC0tTWfOnLHarFixQitXrlRWVpYKCwvlcrk0fvx4VVdX+30fhiEAALBLG89Z2LFjh9fn7OxsRUVFqaioSHfeeaeMMVq1apWWLFmiqVOnSpJycnIUHR2tjRs3atasWX7dh8wCAABBpqqqyqvU1tb6dV5lZaUkKTIyUpJUWlqq8vJypaWlWW2cTqdSUlK0d+9ev/tDsAAAgE0a9lkIpEhSXFycIiIirJKZmXnZextjtHDhQo0ZM0ZJSUmSpPLycklSdHS0V9vo6GjrmD8YhgAAIMiUlZUpPDzc+ux0Oi97zrx58/T+++/r7bffbnTM4fDeRtoY06jOF4IFAACCTHh4uFewcDnz58/Xtm3btGfPHvXr18+qd7lcki5mGGJiYqz6ioqKRtkGXxiGAADALm28GsIYo3nz5umVV17R7t27lZCQ4HU8ISFBLpdLeXl5Vl1dXZ0KCgo0evRov+9DZgEAAJu09bsh5s6dq40bN+q1115TWFiYNQ8hIiJCoaGhcjgcSk9PV0ZGhhITE5WYmKiMjAz16NFD06ZN8/s+BAsAANipDXdhXL16tSQpNTXVqz47O1szZ86UJC1atEg1NTWaM2eOTp48qZEjR2rXrl0KCwvz+z4ECwAAdFDGXD4ycTgccrvdcrvdLb4PwQI6tAmhde3dhSbtqAlp7y4AaGu8SAoAAPjS1nMW2gqrIQAAgE9kFgAAsAvDEAAAwBeGIQAAwBWJzAIAAHbppMMQrZ5ZyMzMtHaQamCMkdvtVmxsrEJDQ5WamqqDBw+2dlcAAGhdbbzdc1tp1WChsLBQa9as0ZAhQ7zqV6xYoZUrVyorK0uFhYVyuVwaP368qqurW7M7AACgBVotWDh9+rSmT5+utWvX6uqrr7bqjTFatWqVlixZoqlTpyopKUk5OTk6e/asNm7c2FrdAQCg1TVMcAykBKNWCxbmzp2rSZMmady4cV71paWlKi8vV1pamlXndDqVkpKivXv3XvJatbW1qqqq8ioAAASdTjoM0SoTHHNzc3XgwAEVFhY2OtbwRqwvvkc7OjpaR48eveT1MjMz9cwzz9jfUQAA7MQER/+UlZVpwYIF2rBhg7p3795kO4fD4fXZGNOorsHixYtVWVlplbKyMlv7DAAAmmZ7ZqGoqEgVFRUaMWKEVVdfX689e/YoKytLhw4dknQxwxATE2O1qaioaJRtaOB0OuV0Ou3uKgAAtmJTJj/dfffdKikpUXFxsVWSk5M1ffp0FRcXa8CAAXK5XMrLy7POqaurU0FBgUaPHm13dwAAaDvMWfBPWFiYkpKSvOp69uypPn36WPXp6enKyMhQYmKiEhMTlZGRoR49emjatGl2dwcAAASoXXZwXLRokWpqajRnzhydPHlSI0eO1K5duxQWFtYe3QEAwBaddRiiTYKF/Px8r88Oh0Nut1tut7stbg8AQNtgNQQAALgS8SIpAADs0kkzCwQLAADYxPHvEsj5wYhhCAAA4BOZBQAA7MIwBAAA8IWlkwAAwLdOmllgzgIAAPCJzAIAAHYK0uxAIAgWAACwSWeds8AwBAAA8InMAgAAdmGCIwAA8KVhGCKQ0lx79uzR5MmTFRsbK4fDoVdffdXr+MyZM+VwOLzKbbfd1qx7ECwAANCBnTlzRkOHDlVWVlaTbSZMmKDjx49bZfv27c26B8MQAADYpR2GISZOnKiJEyf6bON0OuVyuVrYKTILAADYxq5hiKqqKq9SW1sbUL/y8/MVFRWlgQMH6rvf/a4qKiqadT7BAgAAQSYuLk4RERFWyczMbPG1Jk6cqJdfflm7d+/WCy+8oMLCQt11113NCkAYhgAAwC42DUOUlZUpPDzcqnY6nS2+5EMPPWT9OSkpScnJyYqPj9cbb7yhqVOn+nUNggUAAOxiU7AQHh7uFSzYKSYmRvHx8Tp8+LDf5xAsoEPbURPS3l0AAEtH2MHxxIkTKisrU0xMjN/nECwAANCBnT59Wh999JH1ubS0VMXFxYqMjFRkZKTcbrceeOABxcTE6MiRI3rqqafUt29fTZkyxe97ECwAAGCXdlg6uX//fo0dO9b6vHDhQknSjBkztHr1apWUlGj9+vU6deqUYmJiNHbsWG3evFlhYWF+34NgAR2K+9BX27sLANAkhzFymJZHCy05NzU1VcbHeTt37mxxfxqwdBIAAPhEZgEAALt00hdJESwAAGCTjrAaoiUYhgAAAD6RWQAAwC4MQwAAAF8YhgAAAFckMgsAANiFYQgAAOBLZx2GIFgAAMAunTSzwJwFAADgE5kFAABsFKxDCYEgWAAAwC7GXCyBnB+EGIYAAAA+kVkAAMAmrIYAAAC+sRoCAABcicgsAABgE4fnYgnk/GBEsAAAgF0YhgAAAFciMgsAANiE1RCAH0J/3ru9uwAA7aeTbspEsAAAgE06a2aBOQsAAMAnMgsAANilk66GIFgAAMAmDEMAAIArEpkFAADswmoIAADgC8MQAADgikSwAACAXYwNpZn27NmjyZMnKzY2Vg6HQ6+++qp3l4yR2+1WbGysQkNDlZqaqoMHDzbrHgQLAADYpGEYIpDSXGfOnNHQoUOVlZV1yeMrVqzQypUrlZWVpcLCQrlcLo0fP17V1dV+34M5CwAAdGATJ07UxIkTL3nMGKNVq1ZpyZIlmjp1qiQpJydH0dHR2rhxo2bNmuXXPcgsAABgF48JvEiqqqryKrW1tS3qTmlpqcrLy5WWlmbVOZ1OpaSkaO/evX5fh2ABAAC72DRnIS4uThEREVbJzMxsUXfKy8slSdHR0V710dHR1jF/MAwBAIBNHApw6eS//7esrEzh4eFWvdPpDKxfDofXZ2NMozpfCBYAAAgy4eHhXsFCS7lcLkkXMwwxMTFWfUVFRaNsgy8MQwAAYJeGHRwDKTZKSEiQy+VSXl6eVVdXV6eCggKNHj3a7+uQWQAAwCbtsYPj6dOn9dFHH1mfS0tLVVxcrMjISPXv31/p6enKyMhQYmKiEhMTlZGRoR49emjatGl+38P2zEJmZqZuvfVWhYWFKSoqSvfff78OHTrk1caODSIAAIC0f/9+DR8+XMOHD5ckLVy4UMOHD9fTTz8tSVq0aJHS09M1Z84cJScn65NPPtGuXbsUFhbm9z1sDxYKCgo0d+5c7du3T3l5ebpw4YLS0tJ05swZq40dG0QAABB02mEHx9TUVBljGpV169ZJuji50e126/jx4zp37pwKCgqUlJTUrHvYPgyxY8cOr8/Z2dmKiopSUVGR7rzzTts2iAAAINg4jJEjgHkHgZzbmlp9gmNlZaUkKTIyUlLLNoiora1ttEEFAABoG60aLBhjtHDhQo0ZM8ZKebRkg4jMzEyvzSni4uJas9sAALSMx4YShFo1WJg3b57ef/99bdq0qdGx5mwQsXjxYlVWVlqlrKysVfoLAEAgGoYhAinBqNWWTs6fP1/btm3Tnj171K9fP6u+JRtEOJ3OgHevAgAALWN7ZsEYo3nz5umVV17R7t27lZCQ4HXcrg0iAAAIOu2wGqIt2J5ZmDt3rjZu3KjXXntNYWFh1jyEiIgIhYaGyuFw2LJBBAAAQSfQXRivlGGI1atXS7q47vPzsrOzNXPmTEkXN4ioqanRnDlzdPLkSY0cObLZG0QAABBs2mMHx7Zge7Bg/IiKGjaIcLvddt8eAADYjHdDAABgF4YhAACALw7PxRLI+cGIV1QDAACfyCwAAGAXhiEAAIBPge6VEJyxAsMQAADANzILAADYpLO+oppgAQAAu3TSOQsMQwAAAJ/ILAAAYBcjKZC9EoIzsUCwAACAXZizAAAAfDMKcM6CbT2xFXMWAACAT2QWAACwSyddDUGwAACAXTySHAGeH4QYhgAAAD6RWQAAwCashgAAAL510jkLDEMAAACfyCwAAGCXTppZIFgAAMAunTRYYBgCAIAOyu12y+FweBWXy2X7fcgsAABgl3bYZ2Hw4MF66623rM9dunQJoAOXRrAAAIBN2mPpZNeuXVslm/B5DEMAAGCXhjkLgRRJVVVVXqW2trbJWx4+fFixsbFKSEjQww8/rI8//tj2H4tgAQCAIBMXF6eIiAirZGZmXrLdyJEjtX79eu3cuVNr165VeXm5Ro8erRMnTtjaH4YhAACwi8dIjgBWNHgunltWVqbw8HCr2ul0XrL5xIkTrT/ffPPNGjVqlK6//nrl5ORo4cKFLe/HFxAsAABgF5uWToaHh3sFC/7q2bOnbr75Zh0+fLjlfbgEhiEAAOgkamtr9fe//10xMTG2XpdgAQAA2wQ6ubF5WYnHH39cBQUFKi0t1V/+8hd97WtfU1VVlWbMmGHrT8UwRCsJ2VHY3l0AALS1Nt7B8R//+IceeeQR/fOf/9Q111yj2267Tfv27VN8fHzL+3AJBAsAAHRQubm5bXIfggUAAOziaf5QQuPzgw/BAgAAdjGeiyWQ84MQExwBAIBPZBYAALBLJ31FNcECAAB2Yc4CAADwqZNmFpizAAAAfCKzAACAXYwCzCzY1hNbESwAAGAXhiEAAMCViMwCAAB28XgkBbCxkic4N2UiWAAAwC4MQwAAgCsRmQUAAOzSSTMLBAsAANilk+7gyDAEAADwicwCAAA2McYjE8BrpgM5tzURLAAAYBdjAhtKYM4CAACdnAlwzkKQBgvMWQAAAD6RWQAAwC4ej+QIYN4BcxYAAOjkGIYAAABXIjILAADYxHg8MgEMQ7B0EgCAzo5hCAAAcCUiswAAgF08RnJ0vswCwQIAAHYxRlIgSyeDM1hgGAIAAPhEZgEAAJsYj5EJYBjCkFlo7MUXX1RCQoK6d++uESNG6M9//nN7dgcAgMAYT+ClBVr7+7TdgoXNmzcrPT1dS5Ys0Xvvvac77rhDEydO1LFjx9qrSwAABMR4TMCludri+7TdgoWVK1fqscce03e+8x3deOONWrVqleLi4rR69er26hIAAB1OW3yftsuchbq6OhUVFenJJ5/0qk9LS9PevXsbta+trVVtba31ubKyUpJ0QecD2vsCAND5XdB5SW0zH+CCqQ3oZVANfa2qqvKqdzqdcjqdjdo39/u0pdolWPjnP/+p+vp6RUdHe9VHR0ervLy8UfvMzEw988wzjerf1vZW6yMAoHOprq5WREREq1w7JCRELpdLb5cH/r3Uq1cvxcXFedUtXbpUbre7Udvmfp+2VLuuhnA4HF6fjTGN6iRp8eLFWrhwofX51KlTio+P17Fjx1rtP3xnVVVVpbi4OJWVlSk8PLy9u9Nh8NxajmfXcjy7lvniczPGqLq6WrGxsa12z+7du6u0tFR1dXUBX+tS34WXyip8nr/fpy3VLsFC37591aVLl0ZRT0VFRaPoSGo6/RIREcH/gVooPDycZ9cCPLeW49m1HM+uZT7/3NriF8vu3bure/furX6fz2vu92lLtcsEx5CQEI0YMUJ5eXle9Xl5eRo9enR7dAkAgA6nrb5P220YYuHChXr00UeVnJysUaNGac2aNTp27Jhmz57dXl0CAKDDaYvv03YLFh566CGdOHFCzz77rI4fP66kpCRt375d8fHxlz3X6XRq6dKllx3DQWM8u5bhubUcz67leHYtc6U9t0C+T/3lMMG6tyQAAAgKvEgKAAD4RLAAAAB8IlgAAAA+ESwAAACfCBYAAIBPHTJYaO33dnd0mZmZuvXWWxUWFqaoqCjdf//9OnTokFcbY4zcbrdiY2MVGhqq1NRUHTx4sJ16HJwyMzPlcDiUnp5u1fHcmvbJJ5/oG9/4hvr06aMePXpo2LBhKioqso7z7C7twoUL+tGPfqSEhASFhoZqwIABevbZZ+Xx/P8vI+LZSXv27NHkyZMVGxsrh8OhV1991eu4P8+otrZW8+fPV9++fdWzZ0999atf1T/+8Y82/Ck6MNPB5Obmmm7dupm1a9eav/3tb2bBggWmZ8+e5ujRo+3dtaDxla98xWRnZ5sPPvjAFBcXm0mTJpn+/fub06dPW22WL19uwsLCzJYtW0xJSYl56KGHTExMjKmqqmrHngePd99911x33XVmyJAhZsGCBVY9z+3S/vWvf5n4+Hgzc+ZM85e//MWUlpaat956y3z00UdWG57dpT333HOmT58+5vXXXzelpaXm97//venVq5dZtWqV1YZnZ8z27dvNkiVLzJYtW4wks3XrVq/j/jyj2bNnm2uvvdbk5eWZAwcOmLFjx5qhQ4eaCxcutPFP0/F0uGDhy1/+spk9e7ZX3aBBg8yTTz7ZTj0KfhUVFUaSKSgoMMYY4/F4jMvlMsuXL7fanDt3zkRERJhf/epX7dXNoFFdXW0SExNNXl6eSUlJsYIFnlvTnnjiCTNmzJgmj/PsmjZp0iTz7W9/26tu6tSp5hvf+IYxhmd3KV8MFvx5RqdOnTLdunUzubm5VptPPvnEXHXVVWbHjh1t1veOqkMNQzS8tzstLc2r3u73dnc2lZWVkqTIyEhJUmlpqcrLy72eo9PpVEpKCs9R0ty5czVp0iSNGzfOq57n1rRt27YpOTlZX//61xUVFaXhw4dr7dq11nGeXdPGjBmjP/7xj/rwww8lSX/961/19ttv65577pHEs/OHP8+oqKhI58+f92oTGxurpKQknqMf2vUV1c3VVu/t7kyMMVq4cKHGjBmjpKQkSbKe1aWe49GjR9u8j8EkNzdXBw4cUGFhYaNjPLemffzxx1q9erUWLlyop556Su+++66+973vyel06pvf/CbPzocnnnhClZWVGjRokLp06aL6+notW7ZMjzzyiCT+3vnDn2dUXl6ukJAQXX311Y3a8P1xeR0qWGjQ2u/t7kzmzZun999/X2+//XajYzxHb2VlZVqwYIF27drl8zWzPLfGPB6PkpOTlZGRIUkaPny4Dh48qNWrV+ub3/ym1Y5n19jmzZu1YcMGbdy4UYMHD1ZxcbHS09MVGxurGTNmWO14dpfXkmfEc/RPhxqGaKv3dncW8+fP17Zt2/SnP/1J/fr1s+pdLpck8Ry/oKioSBUVFRoxYoS6du2qrl27qqCgQD//+c/VtWtX69nw3BqLiYnRTTfd5FV344036tixY5L4O+fLD3/4Qz355JN6+OGHdfPNN+vRRx/V97//fWVmZkri2fnDn2fkcrlUV1enkydPNtkGTetQwUJbvbe7ozPGaN68eXrllVe0e/duJSQkeB1PSEiQy+Xyeo51dXUqKCi4op/j3XffrZKSEhUXF1slOTlZ06dPV3FxsQYMGMBza8Ltt9/eaHnuhx9+aL31jr9zTTt79qyuusr7n+IuXbpYSyd5dpfnzzMaMWKEunXr5tXm+PHj+uCDD3iO/mi3qZUt1LB08qWXXjJ/+9vfTHp6uunZs6c5cuRIe3ctaPznf/6niYiIMPn5+eb48eNWOXv2rNVm+fLlJiIiwrzyyiumpKTEPPLII1fcUix/fH41hDE8t6a8++67pmvXrmbZsmXm8OHD5uWXXzY9evQwGzZssNrw7C5txowZ5tprr7WWTr7yyiumb9++ZtGiRVYbnt3FVUrvvfeeee+994wks3LlSvPee+9Zy+b9eUazZ882/fr1M2+99ZY5cOCAueuuu1g66acOFywYY8wvf/lLEx8fb0JCQswtt9xiLQnERZIuWbKzs602Ho/HLF261LhcLuN0Os2dd95pSkpK2q/TQeqLwQLPrWl/+MMfTFJSknE6nWbQoEFmzZo1Xsd5dpdWVVVlFixYYPr372+6d+9uBgwYYJYsWWJqa2utNjw7Y/70pz9d8t+1GTNmGGP8e0Y1NTVm3rx5JjIy0oSGhpp7773XHDt2rB1+mo7HYYwx7ZPTAAAAHUGHmrMAAADaHsECAADwiWABAAD4RLAAAAB8IlgAAAA+ESwAAACfCBYAAIBPBAsAAMAnggUAAOATwQIAAPCJYAEAAPj0/wFSbly0qu6AkgAAAABJRU5ErkJggg==", @@ -457,7 +440,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAHBCAYAAAC8BfDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0VklEQVR4nO3de3RU5b3/8c+QhEkCSZAgGcI12HATUAqCBpQgCq2AWMQbIqCeUy6iRFQuoiVQSAQVqSAonFPAUoTDEo54OUpQTLXUGrlYhZ+obQioxCCXBLnk+vz+oBmfYQaS4CQTMu/XWnst59nPnnz3k8h3fWb27HEYY4wAAAAAAJKkeoEuAAAAAABqE0ISAAAAAFgISQAAAABgISQBAAAAgIWQBAAAAAAWQhIAAAAAWAhJAAAAAGAhJAEAAACAhZAEAAAAABZCUhBbs2aNFi5cWKVj9u3bJ4fDoZUrV1bpuD179ig1NVX79u2r0nEVHZucnKzOnTtX+TmrS3XU43A4lJqaWuG8lStXyuFweKxTcnKykpOT/VqPv5T/LfnaevToUaXnatOmjcaMGVM9hQIIGPqU/9GnKic5OfmcPcreKnPeuDiFBroABM6aNWv0+eefKyUlpdLHNGvWTH/729902WWXVeln7dmzR7NmzVJycrLatGlTY8cGuyVLlgS6hAo9+OCDGjFihMdYw4YNA1QNgNqEPlX31dY+tWTJEhUUFLgfv/nmm5ozZ45WrFihDh06uMdbtGgRiPJQAwhJqJTS0lKVlJTI6XTq6quvDnQ5flFcXCyHw6HQ0Lr7v0GnTp0CXUKFWrVqVWf+pgAEDn3q4lRb+9TZdX3xxReSpM6dO5/3aoeTJ08qMjKyWmtDzeByuzrs0KFD+u1vf6uWLVvK6XTq0ksvVe/evbVlyxYlJyfrzTffVE5OjsfbxtJPlyrMnz9fc+bMUUJCgpxOp7Zu3XrOyxi++OIL3XXXXYqLi5PT6VSrVq00atQoFRYWauXKlbrtttskSf369XP/rMpcClHZY7OysnTttdcqMjJSbdu21VNPPaWysjL3/vfff18Oh0N/+tOf9Mgjj6h58+ZyOp36+uuvJUlbtmxR//79FR0drcjISPXu3VvvvvtupdfzbBXVI0n79+/XyJEj1bRpUzmdTnXs2FHPPvus1zxfPvroI/Xu3Vvh4eGKj4/X9OnTVVxc7DXv7MsYyn9/zzzzjBYsWKCEhAQ1bNhQ11xzjT766COv45cvX6527drJ6XSqU6dOWrNmjcaMGVMjr5SePn1ajzzyiK688krFxMSocePGuuaaa/Taa69VeGxZWZnmzJmj9u3bKyIiQo0aNVLXrl31hz/8wWPeV199pREjRnj8Dl544YXqOiUAZ6FP0acu5j6Vmpoqh8OhHTt2aPjw4brkkkvc72Ce6zJCX7UVFRVpzpw56tChg/v3du+99+rQoUPVfg44t7r70gR0zz33aMeOHZo7d67atWunY8eOaceOHTp8+LCWLFmi3/72t/rnP/+pjRs3+jz++eefV7t27fTMM88oOjpaiYmJPud9+umn6tOnj5o0aaLZs2crMTFRBw8e1KZNm1RUVKRBgwYpLS1Njz/+uF544QX98pe/lKRKXQpRmWNzc3N1991365FHHtHMmTO1ceNGTZ8+XfHx8Ro1apTH802fPl3XXHONXnzxRdWrV09NmzbV6tWrNWrUKA0dOlSrVq1SWFiYXnrpJQ0cOFDvvPOO+vfvX+F62ipTz6FDh5SUlKSioiL9/ve/V5s2bfTGG2/o0Ucf1T//+c/zXn6wZ88e9e/fX23atNHKlSsVGRmpJUuWaM2aNRWuZ7kXXnhBHTp0cF/r/+STT+qmm25Sdna2YmJiJEnLli3T2LFjdeutt+q5555Tfn6+Zs2apcLCQq/nKy0tlTGmwp9br1491avn+dpMWVmZSkpKPMZCQkJUWFioI0eO6NFHH1Xz5s1VVFSkLVu2aNiwYVqxYoXX79Y2f/58paam6oknntB1112n4uJiffHFFzp27Jh7zp49e5SUlKRWrVrp2Weflcvl0jvvvKOHHnpIP/zwg2bOnFnh+QD4eehT9KlzqU19qiLDhg3TnXfeqXHjxunEiRNVOrasrExDhw7VBx98oClTpigpKUk5OTmaOXOmkpOT9cknnygiIqJKzwk/MaizGjZsaFJSUs65f9CgQaZ169Ze49nZ2UaSueyyy0xRUZHPfStWrHCPXX/99aZRo0YmLy/vnD9r/fr1RpLZunVrVU/jvMf27dvXSDJ///vfPcY7depkBg4c6H68detWI8lcd911HvNOnDhhGjdubIYMGeIxXlpaaq644grTs2dP91hF61mVeqZNm+Zz3vjx443D4TB79+51j0kyM2fOdD++4447TEREhMnNzXWPlZSUmA4dOhhJJjs726Oevn37uh+X//66dOliSkpK3OMff/yxkWReeeUV9/m7XC7Tq1cvj/pycnJMWFiY199N69atjaQKN/s8ymvxtWVkZHitbUlJiSkuLjb333+/6datm9fPHz16tPvx4MGDzZVXXun1HLaBAweaFi1amPz8fI/xiRMnmvDwcHPkyJHzHg/g56NP0adqc5+yrVixwkgyWVlZ7rGZM2caSeZ3v/ud1/yzz6vc6NGjPWp75ZVXjCTz6quveszLysoyksySJUt81oPqxztJdVjPnj21cuVKxcbG6oYbblD37t0VFhZW6eNvvvnmCuefPHlSmZmZuv/++3XppZf+3JIviMvlUs+ePT3Gunbtql27dnnNvfXWWz0eb9u2TUeOHNHo0aO93s341a9+pfnz5+vEiRNq0KBBpdezMvW899576tSpk9e8MWPGaOnSpXrvvffUrl07n+e7detW9e/fX3Fxce6xkJAQ3XHHHZo1a5bPY842aNAghYSEeNQnSTk5OZKkvXv3Kjc3V4899pjHca1atVLv3r2VnZ3tMf7666/7fOXubPHx8V5jkyZN0siRIz3G2rdvL0lav369Fi5cqE8//dTj1bnw8PDz/pyePXvqzTff1IQJEzR06FBdc801io6Odu8/ffq03n33XY0fP16RkZEev/ubbrpJixcv1kcffaRf//rXFZ4TgAtHn9rlNZc+dUZt6lMVOft3VhVvvPGGGjVqpCFDhnj8fq+88kq5XC69//77Gj9+/AU/Py4cIakOW7dunebMmaP/+q//0pNPPqmGDRvqN7/5jebPny+Xy1Xh8c2aNatwztGjR1VaWhrQu7vExsZ6jTmdTp06dcpr/Oxz+v777yVJw4cPP+fzHzlyRA0aNKj0elamnsOHD/u8Xrr8H+ezL42wHT582OfvrzK/03PV6HQ6JcldY/nPtxtcubi4OK/m06lTp0pfxnC2Fi1a+PwQ7IYNG3T77bfrtttu02OPPSaXy6XQ0FAtXbpUf/zjH8/7c6ZPn64GDRpo9erVevHFFxUSEqLrrrtO8+bNU48ePXT48GGVlJRo0aJFWrRokc/n+OGHHyo8HwA/D32KPnUutalPVaQyf4fn8v333+vYsWOqX7++z/30osAhJNVhTZo00cKFC7Vw4ULt379fmzZt0rRp05SXl6e33367wuPL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vXu3li5dqlGjRrnnBdu6rFu3TqtXr9aaNWt0+eWXa9euXUpJSVF8fLxGjx7tnhds63K2Czn/YFsjW7D/vZSjN51BX/KNvuQbfanyaqo3XVSX2zVp0kQhISFeSTAvL88rVdZ1Dz74oDZt2qStW7eqRYsW7nGXyyVJQbdG27dvV15enrp3767Q0FCFhoYqMzNTzz//vEJDQ93nHmzr0qxZM3Xq1MljrGPHjtq/f7+k4P17eeyxxzRt2jTdeeed6tKli+655x49/PDDSk9PlxS861KuMufvcrlUVFSko0ePnnNOsKA3/YTe9BP6km/0Jd/oSxWr6d50UYWk+vXrq3v37srIyPAYz8jIUFJSUoCqqlnGGE2cOFEbNmzQe++9p4SEBI/9CQkJcrlcHmtUVFSkzMzMOr1G/fv312effaZdu3a5tx49eujuu+/Wrl271LZt26Bcl969e3vdhvfLL79U69atJQXv38vJkydVr57nP38hISHuW60G67qUq8z5d+/eXWFhYR5zDh48qM8//zwo1shGb6I3+UJf8o2+5Bt9qWI13puqdJuHWqD8Nqv//d//bfbs2WNSUlJMgwYNzL59+wJdWo0YP368iYmJMe+//745ePCgezt58qR7zlNPPWViYmLMhg0bzGeffWbuuuuuOneLyMqw7yJkTHCuy8cff2xCQ0PN3LlzzVdffWX+/Oc/m8jISLN69Wr3nGBcl9GjR5vmzZu7b7W6YcMG06RJEzNlyhT3nLq+LsePHzc7d+40O3fuNJLMggULzM6dO923rK7M+Y8bN860aNHCbNmyxezYscNcf/31QX8LcHoTvel86Ev0pXOhL51Rm3rTRReSjDHmhRdeMK1btzb169c3v/zlL923GA0GknxuK1ascM8pKyszM2fONC6XyzidTnPdddeZzz77LHBFB8jZzShY1+X11183nTt3Nk6n03To0MEsW7bMY38wrktBQYGZNGmSadWqlQkPDzdt27Y1M2bMMIWFhe45dX1dtm7d6vPfktGjRxtjKnf+p06dMhMnTjSNGzc2ERERZvDgwWb//v0BOJvagd5Eb6oIfekM+pI3+tIZtak3OYwxpmrvPQEAAABA3XVRfSYJAAAAAKobIQkAAAAALIQkAAAAALAQkgAAAADAQkgCAAAAAAshCQAAAAAshCQAAAAAsBCSAAAAAMBCSAIAAAAACyEJAAAAACyEJAAAAACwEJIAAAAAwPL/ATxukDzboyiiAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAHBCAYAAAC8BfDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0LUlEQVR4nO3deXxU9b3/8feQhEkCSZAgGcIabNgElIKgAU0QhVZALOKGCKj3lkWUiMoiWpZCIqiYCoLCvQUsRbg8hCsuVwmKqZZaI4tV+InahoBKDLIkyJL1+/uDZvwOM5AEJ0zIvJ6Px3k8Ot/zPTOf803k0/fMyRmHMcYIAAAAACBJqhfoAgAAAACgNiEkAQAAAICFkAQAAAAAFkISAAAAAFgISQAAAABgISQBAAAAgIWQBAAAAAAWQhIAAAAAWAhJAAAAAGAhJAWx1atXKyMjo1rH7N27Vw6HQytWrKjWcbt379bMmTO1d+/eah1X2bEpKSnq3LlztZ+zptREPQ6HQzNnzqx03ooVK+RwODzWKSUlRSkpKX6tx18qfpd8bT169KjWc7Vp00ajR4+umUIBBAx9yv/oU1WTkpJy1h5lb1U5b1ycQgNdAAJn9erV+vzzz5WamlrlY5o1a6a//e1vuuyyy6r1Wrt379asWbOUkpKiNm3aXLBjg93ixYsDXUKlHnzwQQ0fPtxjrGHDhgGqBkBtQp+q+2prn1q8eLEKCwvdj998803NmTNHy5cvV4cOHdzjLVq0CER5uAAISaiSsrIylZaWyul06uqrrw50OX5RUlIih8Oh0NC6+59Bp06dAl1CpVq1alVnfqcABA596uJUW/vUmXV98cUXkqTOnTuf82qHEydOKDIyskZrw4XB5XZ12MGDB/Xb3/5WLVu2lNPp1KWXXqrevXtr8+bNSklJ0Ztvvqnc3FyPj42lny5VmD9/vubMmaOEhAQ5nU5t2bLlrJcxfPHFF7rrrrsUFxcnp9OpVq1aaeTIkSoqKtKKFSt02223SZL69u3rfq2qXApR1WOzs7N17bXXKjIyUm3bttVTTz2l8vJy9/73339fDodDf/rTn/TII4+oefPmcjqd+vrrryVJmzdvVr9+/RQdHa3IyEj17t1b7777bpXX80yV1SNJ+/bt04gRI9S0aVM5nU517NhRzz77rNc8Xz766CP17t1b4eHhio+P17Rp01RSUuI178zLGCp+fs8884wWLFighIQENWzYUNdcc40++ugjr+OXLVumdu3ayel0qlOnTlq9erVGjx59Qd4pPXXqlB555BFdeeWViomJUePGjXXNNdfotddeq/TY8vJyzZkzR+3bt1dERIQaNWqkrl276g9/+IPHvK+++krDhw/3+Bm88MILNXVKAM5An6JPXcx9aubMmXI4HNq+fbuGDRumSy65xP0J5tkuI/RVW3FxsebMmaMOHTq4f2733nuvDh48WOPngLOru29NQPfcc4+2b9+uuXPnql27djp69Ki2b9+uQ4cOafHixfrtb3+rf/7zn9qwYYPP459//nm1a9dOzzzzjKKjo5WYmOhz3qeffqo+ffqoSZMmmj17thITE3XgwAFt3LhRxcXFGjhwoNLS0vT444/rhRde0C9/+UtJqtKlEFU5Ni8vT3fffbceeeQRzZgxQxs2bNC0adMUHx+vkSNHejzftGnTdM011+jFF19UvXr11LRpU61atUojR47UkCFDtHLlSoWFhemll17SgAED9M4776hfv36VrqetKvUcPHhQSUlJKi4u1u9//3u1adNGb7zxhh599FH985//POflB7t371a/fv3Upk0brVixQpGRkVq8eLFWr15d6XpWeOGFF9ShQwf3tf5PPvmkbrrpJuXk5CgmJkaStHTpUo0ZM0a33nqrnnvuORUUFGjWrFkqKiryer6ysjIZYyp93Xr16qlePc/3ZsrLy1VaWuoxFhISoqKiIh0+fFiPPvqomjdvruLiYm3evFlDhw7V8uXLvX62tvnz52vmzJl64okndN1116mkpERffPGFjh496p6ze/duJSUlqVWrVnr22Wflcrn0zjvv6KGHHtIPP/ygGTNmVHo+AH4e+hR96mxqU5+qzNChQ3XnnXdq7NixOn78eLWOLS8v15AhQ/TBBx9o8uTJSkpKUm5urmbMmKGUlBR98sknioiIqNZzwk8M6qyGDRua1NTUs+4fOHCgad26tdd4Tk6OkWQuu+wyU1xc7HPf8uXL3WPXX3+9adSokcnPzz/ra61bt85IMlu2bKnuaZzz2OTkZCPJ/P3vf/cY79SpkxkwYID78ZYtW4wkc91113nMO378uGncuLEZPHiwx3hZWZm54oorTM+ePd1jla1ndeqZOnWqz3njxo0zDofD7Nmzxz0mycyYMcP9+I477jAR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", "text/plain": [ "
" ] @@ -495,17 +478,230 @@ " )" ] }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features_demo[\"threshold_value\"].item()" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "The effect of `strict_thresholding` can be observed in the plot above: Since the second `n_min_threshold` is not reached, no further features can be detected at higher `threshold` values. In the case of non strict thresholding, the feature with the highest value is still detected even though a previous `n_min_threshold` was not reached." ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "from tobac.testing import (\n", + " make_sample_data_2D_3blobs,\n", + " make_sample_data_2D_3blobs_inv,\n", + " make_sample_data_3D_3blobs,\n", + ")\n", + "from tobac import (\n", + " feature_detection_multithreshold,\n", + " linking_trackpy,\n", + " get_spacings,\n", + " segmentation_2D,\n", + " segmentation_3D,\n", + ")\n", + "from iris.analysis import MEAN, MAX, MIN\n", + "from pandas.testing import assert_frame_equal\n", + "from numpy.testing import assert_allclose\n", + "import pandas as pd\n", + "\n", + "def test_tracking_coord_order():\n", + " \"\"\"\n", + " Test a tracking applications to make sure that coordinate order does not lead to different results\n", + " \"\"\"\n", + " sample_data = make_sample_data_2D_3blobs()\n", + " sample_data_inv = make_sample_data_2D_3blobs_inv()\n", + " # Keyword arguments for feature detection step:\n", + " parameters_features = {}\n", + " parameters_features[\"position_threshold\"] = \"weighted_diff\"\n", + " parameters_features[\"sigma_threshold\"] = 0.5\n", + " parameters_features[\"min_distance\"] = 0\n", + " parameters_features[\"sigma_threshold\"] = 1\n", + " parameters_features[\"threshold\"] = [3, 5, 10] # m/s\n", + " parameters_features[\"n_erosion_threshold\"] = 0\n", + " parameters_features[\"n_min_threshold\"] = 3\n", + "\n", + " # calculate dxy,dt\n", + " dxy, dt = get_spacings(sample_data)\n", + " dxy_inv, dt_inv = get_spacings(sample_data_inv)\n", + "\n", + " # Test that dt and dxy are the same for different order of coordinates\n", + " assert_allclose(dxy, dxy_inv)\n", + " assert_allclose(dt, dt_inv)\n", + "\n", + " # Test that dt and dxy are as expected\n", + " assert_allclose(dt, 60)\n", + " assert_allclose(dxy, 1000)\n", + "\n", + " # Find features\n", + " Features = feature_detection_multithreshold(sample_data, dxy, **parameters_features)\n", + " Features_inv = feature_detection_multithreshold(\n", + " sample_data_inv, dxy_inv, **parameters_features\n", + " )\n", + "\n", + " # Assert that output of feature detection not empty:\n", + " assert type(Features) == pd.core.frame.DataFrame\n", + " assert type(Features_inv) == pd.core.frame.DataFrame\n", + " assert not Features.empty\n", + " assert not Features_inv.empty\n", + "\n", + " # perform watershedding segmentation\n", + " parameters_segmentation = {}\n", + " parameters_segmentation[\"target\"] = \"maximum\"\n", + " parameters_segmentation[\"method\"] = \"watershed\"\n", + "\n", + " segmentation_mask, features_segmentation = segmentation_2D(\n", + " Features, sample_data, dxy=dxy, **parameters_segmentation\n", + " )\n", + " segmentation_mask_inv, features_segmentation = segmentation_2D(\n", + " Features_inv, sample_data_inv, dxy=dxy_inv, **parameters_segmentation\n", + " )\n", + "\n", + " # perform trajectory linking\n", + "\n", + " parameters_linking = {}\n", + " parameters_linking[\"method_linking\"] = \"predict\"\n", + " parameters_linking[\"adaptive_stop\"] = 0.2\n", + " parameters_linking[\"adaptive_step\"] = 0.95\n", + " parameters_linking[\"extrapolate\"] = 0\n", + " parameters_linking[\"order\"] = 1\n", + " parameters_linking[\"subnetwork_size\"] = 100\n", + " parameters_linking[\"memory\"] = 0\n", + " parameters_linking[\"time_cell_min\"] = 5 * 60\n", + " parameters_linking[\"method_linking\"] = \"predict\"\n", + " parameters_linking[\"v_max\"] = 100\n", + "\n", + " Track = linking_trackpy(Features, sample_data, dt=dt, dxy=dxy, **parameters_linking)\n", + " Track_inv = linking_trackpy(\n", + " Features_inv, sample_data_inv, dt=dt_inv, dxy=dxy_inv, **parameters_linking\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'idx'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/indexes/base.py:3802\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3801\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'idx'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[17], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m test_tracking_coord_order()\n", + "Cell \u001b[0;32mIn[16], line 47\u001b[0m, in \u001b[0;36mtest_tracking_coord_order\u001b[0;34m()\u001b[0m\n\u001b[1;32m 44\u001b[0m assert_allclose(dxy, \u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 46\u001b[0m \u001b[38;5;66;03m# Find features\u001b[39;00m\n\u001b[0;32m---> 47\u001b[0m Features \u001b[38;5;241m=\u001b[39m feature_detection_multithreshold(sample_data, dxy, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparameters_features)\n\u001b[1;32m 48\u001b[0m Features_inv \u001b[38;5;241m=\u001b[39m feature_detection_multithreshold(\n\u001b[1;32m 49\u001b[0m sample_data_inv, dxy_inv, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparameters_features\n\u001b[1;32m 50\u001b[0m )\n\u001b[1;32m 52\u001b[0m \u001b[38;5;66;03m# Assert that output of feature detection not empty:\u001b[39;00m\n", + "File \u001b[0;32m~/python/tobac/tobac/feature_detection.py:955\u001b[0m, in \u001b[0;36mfeature_detection_multithreshold\u001b[0;34m(field_in, dxy, threshold, min_num, target, position_threshold, sigma_threshold, n_erosion_threshold, n_min_threshold, min_distance, feature_number_start, vertical_coord, vertical_axis, detect_subset, wavelength_filtering, dz, strict_thresholding)\u001b[0m\n\u001b[1;32m 952\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i_time, data_i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(data_time):\n\u001b[1;32m 953\u001b[0m time_i \u001b[38;5;241m=\u001b[39m data_i\u001b[38;5;241m.\u001b[39mcoord(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39munits\u001b[38;5;241m.\u001b[39mnum2date(data_i\u001b[38;5;241m.\u001b[39mcoord(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mpoints[\u001b[38;5;241m0\u001b[39m])\n\u001b[0;32m--> 955\u001b[0m features_thresholds \u001b[38;5;241m=\u001b[39m feature_detection_multithreshold_timestep(\n\u001b[1;32m 956\u001b[0m data_i,\n\u001b[1;32m 957\u001b[0m i_time,\n\u001b[1;32m 958\u001b[0m threshold\u001b[38;5;241m=\u001b[39mthreshold,\n\u001b[1;32m 959\u001b[0m sigma_threshold\u001b[38;5;241m=\u001b[39msigma_threshold,\n\u001b[1;32m 960\u001b[0m min_num\u001b[38;5;241m=\u001b[39mmin_num,\n\u001b[1;32m 961\u001b[0m target\u001b[38;5;241m=\u001b[39mtarget,\n\u001b[1;32m 962\u001b[0m position_threshold\u001b[38;5;241m=\u001b[39mposition_threshold,\n\u001b[1;32m 963\u001b[0m n_erosion_threshold\u001b[38;5;241m=\u001b[39mn_erosion_threshold,\n\u001b[1;32m 964\u001b[0m n_min_threshold\u001b[38;5;241m=\u001b[39mn_min_threshold,\n\u001b[1;32m 965\u001b[0m min_distance\u001b[38;5;241m=\u001b[39mmin_distance,\n\u001b[1;32m 966\u001b[0m feature_number_start\u001b[38;5;241m=\u001b[39mfeature_number_start,\n\u001b[1;32m 967\u001b[0m vertical_axis\u001b[38;5;241m=\u001b[39mvertical_axis,\n\u001b[1;32m 968\u001b[0m dxy\u001b[38;5;241m=\u001b[39mdxy,\n\u001b[1;32m 969\u001b[0m wavelength_filtering\u001b[38;5;241m=\u001b[39mwavelength_filtering,\n\u001b[1;32m 970\u001b[0m strict_thresholding\u001b[38;5;241m=\u001b[39mstrict_thresholding,\n\u001b[1;32m 971\u001b[0m )\n\u001b[1;32m 972\u001b[0m \u001b[38;5;66;03m# check if list of features is not empty, then merge features from different threshold values\u001b[39;00m\n\u001b[1;32m 973\u001b[0m \u001b[38;5;66;03m# into one DataFrame and append to list for individual timesteps:\u001b[39;00m\n\u001b[1;32m 974\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m features_thresholds\u001b[38;5;241m.\u001b[39mempty:\n\u001b[1;32m 975\u001b[0m \u001b[38;5;66;03m# Loop over DataFrame to remove features that are closer than distance_min to each other:\u001b[39;00m\n", + "File \u001b[0;32m~/python/tobac/tobac/feature_detection.py:732\u001b[0m, in \u001b[0;36mfeature_detection_multithreshold_timestep\u001b[0;34m(data_i, i_time, threshold, min_num, target, position_threshold, sigma_threshold, n_erosion_threshold, n_min_threshold, min_distance, feature_number_start, vertical_axis, dxy, wavelength_filtering, strict_thresholding)\u001b[0m\n\u001b[1;32m 727\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m features_thresholds\n\u001b[1;32m 729\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m i_threshold \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 730\u001b[0m \u001b[38;5;66;03m# Work out which regions are still in feature_thresholds to keep\u001b[39;00m\n\u001b[1;32m 731\u001b[0m \u001b[38;5;66;03m# This is faster than calling \"in\" for every idx\u001b[39;00m\n\u001b[0;32m--> 732\u001b[0m keep_old_keys \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39misin(\u001b[38;5;28mlist\u001b[39m(regions_old\u001b[38;5;241m.\u001b[39mkeys()), features_thresholds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124midx\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 733\u001b[0m regions_old \u001b[38;5;241m=\u001b[39m {k:v \u001b[38;5;28;01mfor\u001b[39;00m i,(k,v) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(regions_old\u001b[38;5;241m.\u001b[39mitems()) \u001b[38;5;28;01mif\u001b[39;00m keep_old_keys[i]}\n\u001b[1;32m 734\u001b[0m regions_old\u001b[38;5;241m.\u001b[39mupdate(regions_i)\n", + "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/frame.py:3807\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3805\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 3807\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mget_loc(key)\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 3809\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", + "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/indexes/base.py:3804\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3804\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3805\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3809\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[0;31mKeyError\u001b[0m: 'idx'" + ] + } + ], + "source": [ + "test_tracking_coord_order()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> \u001b[0;32m/Users/jonesw/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/indexes/base.py\u001b[0m(3804)\u001b[0;36mget_loc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32m 3802 \u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 3803 \u001b[0;31m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m-> 3804 \u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 3805 \u001b[0;31m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 3806 \u001b[0;31m \u001b[0;31m# If we have a listlike key, _check_indexing_error will raise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\n", + "ipdb> u\n", + "> \u001b[0;32m/Users/jonesw/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m(3807)\u001b[0;36m__getitem__\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32m 3805 \u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 3806 \u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m-> 3807 \u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 3808 \u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 3809 \u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\n", + "ipdb> u\n", + "> \u001b[0;32m/Users/jonesw/python/tobac/tobac/feature_detection.py\u001b[0m(732)\u001b[0;36mfeature_detection_multithreshold_timestep\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32m 730 \u001b[0;31m \u001b[0;31m# Work out which regions are still in feature_thresholds to keep\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 731 \u001b[0;31m \u001b[0;31m# This is faster than calling \"in\" for every idx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m--> 732 \u001b[0;31m \u001b[0mkeep_old_keys\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mregions_old\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeatures_thresholds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"idx\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 733 \u001b[0;31m \u001b[0mregions_old\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mregions_old\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkeep_old_keys\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0;32m 734 \u001b[0;31m \u001b[0mregions_old\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mregions_i\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0m\n", + "ipdb> features_thresholds\n", + "Empty DataFrame\n", + "Columns: []\n", + "Index: []\n" + ] + } + ], + "source": [ + "import pdb; pdb.pm()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" } }, "nbformat": 4, diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index 8c88c0f3..9d254ef7 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -234,7 +234,7 @@ def remove_parents(features_thresholds, regions_i, regions_old): old_feat_arr[curr_loc : curr_loc + len(regions_old[idx_old])] = idx_old curr_loc += len(regions_old[idx_old]) - common_pts, common_ix_new, common_ix_old = np.intersect1d( + _, _, common_ix_old = np.intersect1d( all_curr_pts, all_old_pts, return_indices=True ) list_remove = np.unique(old_feat_arr[common_ix_old]) @@ -725,8 +725,17 @@ def feature_detection_multithreshold_timestep( + str(threshold_i) ) return features_thresholds + + if i_threshold > 0 and regions_old: + if not features_thresholds.empty: + # Work out which regions are still in feature_thresholds to keep + # This is faster than calling "in" for every idx + keep_old_keys = np.isin(list(regions_old.keys()), features_thresholds["idx"]) + regions_old = {k:v for i,(k,v) in enumerate(regions_old.items()) if keep_old_keys[i]} + regions_old.update(regions_i) + else: + regions_old = regions_i - regions_old = regions_i logging.debug( "Finished feature detection for threshold " diff --git a/tobac/tests/test_feature_detection.py b/tobac/tests/test_feature_detection.py index 3bf7bd71..9b10d48b 100644 --- a/tobac/tests/test_feature_detection.py +++ b/tobac/tests/test_feature_detection.py @@ -589,7 +589,7 @@ def test_strict_thresholding(): test_data_iris = tbtest.make_dataset_from_arr(test_data, data_type="iris") # All of these thresholds will be met - tresholds = [1, 5, 7.5] + thresholds = [1, 5, 7.5] # The second n_min threshold can never be met n_min_thresholds = [0, test_data.size + 1, 0] @@ -599,19 +599,21 @@ def test_strict_thresholding(): test_data_iris, 0, dxy=1, - threshold=tresholds, + threshold=thresholds, n_min_threshold=n_min_thresholds, strict_thresholding=False, ) - assert len(features) == 2 + assert len(features) == 1 + assert features["threshold_value"].item() == thresholds[-1] # Since the second n_min_thresholds value is not met this will only detect 1 feature features = feat_detect.feature_detection_multithreshold_timestep( test_data_iris, 0, dxy=1, - threshold=tresholds, + threshold=thresholds, n_min_threshold=n_min_thresholds, strict_thresholding=True, ) assert len(features) == 1 + assert features["threshold_value"].item() == thresholds[0] From eb896db08e0f69dfbf4b42c9848b32b7c611f535 Mon Sep 17 00:00:00 2001 From: William Jones Date: Sat, 10 Jun 2023 17:01:38 +0100 Subject: [PATCH 09/11] Reformatting --- doc/conf.py | 1 + tobac/analysis.py | 1 - tobac/feature_detection.py | 17 ++++++++++------- tobac/plotting.py | 10 ---------- tobac/wrapper.py | 1 - 5 files changed, 11 insertions(+), 19 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index 2b8c717a..0f5e48ea 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -34,6 +34,7 @@ # allow dropdowns collapse_navigation = False + # Include our custom CSS (currently for special table config) def setup(app): app.add_css_file("theme_overrides.css") diff --git a/tobac/analysis.py b/tobac/analysis.py index cfbb73b0..3322a4cb 100644 --- a/tobac/analysis.py +++ b/tobac/analysis.py @@ -244,7 +244,6 @@ def cell_statistics( cube_masked = mask_cube_cell(cube, mask_cell_i, cell, track_i) coords_remove = [] for coordinate in cube_masked.coords(dim_coords=False): - if coordinate.name() not in dimensions: for dim in dimensions: if set(cube_masked.coord_dims(coordinate)).intersection( diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index 9d254ef7..1621b4c9 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -234,9 +234,7 @@ def remove_parents(features_thresholds, regions_i, regions_old): old_feat_arr[curr_loc : curr_loc + len(regions_old[idx_old])] = idx_old curr_loc += len(regions_old[idx_old]) - _, _, common_ix_old = np.intersect1d( - all_curr_pts, all_old_pts, return_indices=True - ) + _, _, common_ix_old = np.intersect1d(all_curr_pts, all_old_pts, return_indices=True) list_remove = np.unique(old_feat_arr[common_ix_old]) # remove parent regions: @@ -725,18 +723,23 @@ def feature_detection_multithreshold_timestep( + str(threshold_i) ) return features_thresholds - + if i_threshold > 0 and regions_old: if not features_thresholds.empty: # Work out which regions are still in feature_thresholds to keep # This is faster than calling "in" for every idx - keep_old_keys = np.isin(list(regions_old.keys()), features_thresholds["idx"]) - regions_old = {k:v for i,(k,v) in enumerate(regions_old.items()) if keep_old_keys[i]} + keep_old_keys = np.isin( + list(regions_old.keys()), features_thresholds["idx"] + ) + regions_old = { + k: v + for i, (k, v) in enumerate(regions_old.items()) + if keep_old_keys[i] + } regions_old.update(regions_i) else: regions_old = regions_i - logging.debug( "Finished feature detection for threshold " + str(i_threshold) diff --git a/tobac/plotting.py b/tobac/plotting.py index 01e83f73..ed9ce7df 100644 --- a/tobac/plotting.py +++ b/tobac/plotting.py @@ -356,7 +356,6 @@ def plot_tracks_mask_field( if np.any( ~np.isnan(field.data) ): # check if field to plot is not only nan, which causes error: - plot_field = iplt.contourf( field, coords=["longitude", "latitude"], @@ -584,7 +583,6 @@ def plot_mask_cell_track_follow( track_cell = track[track["cell"] == cell] for i_row, row in track_cell.iterrows(): - constraint_time = Constraint(time=row["time"]) constraint_x = Constraint( projection_x_coordinate=lambda cell: row["projection_x_coordinate"] - width @@ -838,7 +836,6 @@ def plot_mask_cell_individual_follow( ) if cog is not None: - for i_row, row in cog.iterrows(): cell = row["cell"] @@ -857,7 +854,6 @@ def plot_mask_cell_individual_follow( ) if features is not None: - for i_row, row in features.iterrows(): color = "purple" axes.plot( @@ -934,7 +930,6 @@ def plot_mask_cell_track_static( ) time_cell = time[slice(i_start, i_end)] for time_i in time_cell: - # for i_row,row in track_cell.iterrows(): # time_i=row['time'] # constraint_time = Constraint(time=row['time']) @@ -1208,7 +1203,6 @@ def plot_mask_cell_individual_static( linewidth=1, ) if cog is not None: - for i_row, row in cog.iterrows(): cell = row["cell"] @@ -1227,7 +1221,6 @@ def plot_mask_cell_individual_static( ) if features is not None: - for i_row, row in features.iterrows(): color = "purple" axes.plot( @@ -1307,7 +1300,6 @@ def plot_mask_cell_track_2D3Dstatic( ) time_cell = time[slice(i_start, i_end)] for time_i in time_cell: - # for i_row,row in track_cell.iterrows(): # time_i=row['time'] # constraint_time = Constraint(time=row['time']) @@ -1485,7 +1477,6 @@ def plot_mask_cell_track_3Dstatic( ) time_cell = time[slice(i_start, i_end)] for time_i in time_cell: - # for i_row,row in track_cell.iterrows(): # time_i=row['time'] # constraint_time = Constraint(time=row['time']) @@ -1857,7 +1848,6 @@ def plot_mask_cell_track_static_timeseries( ) time_cell = time[slice(i_start, i_end)] for time_i in time_cell: - constraint_time = Constraint(time=time_i) constraint_x = Constraint( projection_x_coordinate=lambda cell: x_min < cell < x_max diff --git a/tobac/wrapper.py b/tobac/wrapper.py index 138063af..af367fdc 100644 --- a/tobac/wrapper.py +++ b/tobac/wrapper.py @@ -12,7 +12,6 @@ def tracking_wrapper( parameters_tracking=None, parameters_segmentation=None, ): - from .feature_detection import feature_detection_multithreshold from .tracking import linking_trackpy from .segmentation import segmentation_3D, segmentation_2D From d070867f7b65d8f46f0a3ca16c392a2859dacc64 Mon Sep 17 00:00:00 2001 From: William Jones Date: Sat, 10 Jun 2023 17:05:07 +0100 Subject: [PATCH 10/11] Save notebook output --- .../notebooks/n_min_threshold_example.ipynb | 199 ------------------ 1 file changed, 199 deletions(-) diff --git a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb index 48ccbd25..7f7cd043 100644 --- a/doc/feature_detection/notebooks/n_min_threshold_example.ipynb +++ b/doc/feature_detection/notebooks/n_min_threshold_example.ipynb @@ -478,211 +478,12 @@ " )" ] }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "8" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "features_demo[\"threshold_value\"].item()" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ "The effect of `strict_thresholding` can be observed in the plot above: Since the second `n_min_threshold` is not reached, no further features can be detected at higher `threshold` values. In the case of non strict thresholding, the feature with the highest value is still detected even though a previous `n_min_threshold` was not reached." ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "from tobac.testing import (\n", - " make_sample_data_2D_3blobs,\n", - " make_sample_data_2D_3blobs_inv,\n", - " make_sample_data_3D_3blobs,\n", - ")\n", - "from tobac import (\n", - " feature_detection_multithreshold,\n", - " linking_trackpy,\n", - " get_spacings,\n", - " segmentation_2D,\n", - " segmentation_3D,\n", - ")\n", - "from iris.analysis import MEAN, MAX, MIN\n", - "from pandas.testing import assert_frame_equal\n", - "from numpy.testing import assert_allclose\n", - "import pandas as pd\n", - "\n", - "def test_tracking_coord_order():\n", - " \"\"\"\n", - " Test a tracking applications to make sure that coordinate order does not lead to different results\n", - " \"\"\"\n", - " sample_data = make_sample_data_2D_3blobs()\n", - " sample_data_inv = make_sample_data_2D_3blobs_inv()\n", - " # Keyword arguments for feature detection step:\n", - " parameters_features = {}\n", - " parameters_features[\"position_threshold\"] = \"weighted_diff\"\n", - " parameters_features[\"sigma_threshold\"] = 0.5\n", - " parameters_features[\"min_distance\"] = 0\n", - " parameters_features[\"sigma_threshold\"] = 1\n", - " parameters_features[\"threshold\"] = [3, 5, 10] # m/s\n", - " parameters_features[\"n_erosion_threshold\"] = 0\n", - " parameters_features[\"n_min_threshold\"] = 3\n", - "\n", - " # calculate dxy,dt\n", - " dxy, dt = get_spacings(sample_data)\n", - " dxy_inv, dt_inv = get_spacings(sample_data_inv)\n", - "\n", - " # Test that dt and dxy are the same for different order of coordinates\n", - " assert_allclose(dxy, dxy_inv)\n", - " assert_allclose(dt, dt_inv)\n", - "\n", - " # Test that dt and dxy are as expected\n", - " assert_allclose(dt, 60)\n", - " assert_allclose(dxy, 1000)\n", - "\n", - " # Find features\n", - " Features = feature_detection_multithreshold(sample_data, dxy, **parameters_features)\n", - " Features_inv = feature_detection_multithreshold(\n", - " sample_data_inv, dxy_inv, **parameters_features\n", - " )\n", - "\n", - " # Assert that output of feature detection not empty:\n", - " assert type(Features) == pd.core.frame.DataFrame\n", - " assert type(Features_inv) == pd.core.frame.DataFrame\n", - " assert not Features.empty\n", - " assert not Features_inv.empty\n", - "\n", - " # perform watershedding segmentation\n", - " parameters_segmentation = {}\n", - " parameters_segmentation[\"target\"] = \"maximum\"\n", - " parameters_segmentation[\"method\"] = \"watershed\"\n", - "\n", - " segmentation_mask, features_segmentation = segmentation_2D(\n", - " Features, sample_data, dxy=dxy, **parameters_segmentation\n", - " )\n", - " segmentation_mask_inv, features_segmentation = segmentation_2D(\n", - " Features_inv, sample_data_inv, dxy=dxy_inv, **parameters_segmentation\n", - " )\n", - "\n", - " # perform trajectory linking\n", - "\n", - " parameters_linking = {}\n", - " parameters_linking[\"method_linking\"] = \"predict\"\n", - " parameters_linking[\"adaptive_stop\"] = 0.2\n", - " parameters_linking[\"adaptive_step\"] = 0.95\n", - " parameters_linking[\"extrapolate\"] = 0\n", - " parameters_linking[\"order\"] = 1\n", - " parameters_linking[\"subnetwork_size\"] = 100\n", - " parameters_linking[\"memory\"] = 0\n", - " parameters_linking[\"time_cell_min\"] = 5 * 60\n", - " parameters_linking[\"method_linking\"] = \"predict\"\n", - " parameters_linking[\"v_max\"] = 100\n", - "\n", - " Track = linking_trackpy(Features, sample_data, dt=dt, dxy=dxy, **parameters_linking)\n", - " Track_inv = linking_trackpy(\n", - " Features_inv, sample_data_inv, dt=dt_inv, dxy=dxy_inv, **parameters_linking\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'idx'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/indexes/base.py:3802\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3801\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", - "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'idx'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[17], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m test_tracking_coord_order()\n", - "Cell \u001b[0;32mIn[16], line 47\u001b[0m, in \u001b[0;36mtest_tracking_coord_order\u001b[0;34m()\u001b[0m\n\u001b[1;32m 44\u001b[0m assert_allclose(dxy, \u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 46\u001b[0m \u001b[38;5;66;03m# Find features\u001b[39;00m\n\u001b[0;32m---> 47\u001b[0m Features \u001b[38;5;241m=\u001b[39m feature_detection_multithreshold(sample_data, dxy, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparameters_features)\n\u001b[1;32m 48\u001b[0m Features_inv \u001b[38;5;241m=\u001b[39m feature_detection_multithreshold(\n\u001b[1;32m 49\u001b[0m sample_data_inv, dxy_inv, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparameters_features\n\u001b[1;32m 50\u001b[0m )\n\u001b[1;32m 52\u001b[0m \u001b[38;5;66;03m# Assert that output of feature detection not empty:\u001b[39;00m\n", - "File \u001b[0;32m~/python/tobac/tobac/feature_detection.py:955\u001b[0m, in \u001b[0;36mfeature_detection_multithreshold\u001b[0;34m(field_in, dxy, threshold, min_num, target, position_threshold, sigma_threshold, n_erosion_threshold, n_min_threshold, min_distance, feature_number_start, vertical_coord, vertical_axis, detect_subset, wavelength_filtering, dz, strict_thresholding)\u001b[0m\n\u001b[1;32m 952\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i_time, data_i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(data_time):\n\u001b[1;32m 953\u001b[0m time_i \u001b[38;5;241m=\u001b[39m data_i\u001b[38;5;241m.\u001b[39mcoord(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39munits\u001b[38;5;241m.\u001b[39mnum2date(data_i\u001b[38;5;241m.\u001b[39mcoord(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mpoints[\u001b[38;5;241m0\u001b[39m])\n\u001b[0;32m--> 955\u001b[0m features_thresholds \u001b[38;5;241m=\u001b[39m feature_detection_multithreshold_timestep(\n\u001b[1;32m 956\u001b[0m data_i,\n\u001b[1;32m 957\u001b[0m i_time,\n\u001b[1;32m 958\u001b[0m threshold\u001b[38;5;241m=\u001b[39mthreshold,\n\u001b[1;32m 959\u001b[0m sigma_threshold\u001b[38;5;241m=\u001b[39msigma_threshold,\n\u001b[1;32m 960\u001b[0m min_num\u001b[38;5;241m=\u001b[39mmin_num,\n\u001b[1;32m 961\u001b[0m target\u001b[38;5;241m=\u001b[39mtarget,\n\u001b[1;32m 962\u001b[0m position_threshold\u001b[38;5;241m=\u001b[39mposition_threshold,\n\u001b[1;32m 963\u001b[0m n_erosion_threshold\u001b[38;5;241m=\u001b[39mn_erosion_threshold,\n\u001b[1;32m 964\u001b[0m n_min_threshold\u001b[38;5;241m=\u001b[39mn_min_threshold,\n\u001b[1;32m 965\u001b[0m min_distance\u001b[38;5;241m=\u001b[39mmin_distance,\n\u001b[1;32m 966\u001b[0m feature_number_start\u001b[38;5;241m=\u001b[39mfeature_number_start,\n\u001b[1;32m 967\u001b[0m vertical_axis\u001b[38;5;241m=\u001b[39mvertical_axis,\n\u001b[1;32m 968\u001b[0m dxy\u001b[38;5;241m=\u001b[39mdxy,\n\u001b[1;32m 969\u001b[0m wavelength_filtering\u001b[38;5;241m=\u001b[39mwavelength_filtering,\n\u001b[1;32m 970\u001b[0m strict_thresholding\u001b[38;5;241m=\u001b[39mstrict_thresholding,\n\u001b[1;32m 971\u001b[0m )\n\u001b[1;32m 972\u001b[0m \u001b[38;5;66;03m# check if list of features is not empty, then merge features from different threshold values\u001b[39;00m\n\u001b[1;32m 973\u001b[0m \u001b[38;5;66;03m# into one DataFrame and append to list for individual timesteps:\u001b[39;00m\n\u001b[1;32m 974\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m features_thresholds\u001b[38;5;241m.\u001b[39mempty:\n\u001b[1;32m 975\u001b[0m \u001b[38;5;66;03m# Loop over DataFrame to remove features that are closer than distance_min to each other:\u001b[39;00m\n", - "File \u001b[0;32m~/python/tobac/tobac/feature_detection.py:732\u001b[0m, in \u001b[0;36mfeature_detection_multithreshold_timestep\u001b[0;34m(data_i, i_time, threshold, min_num, target, position_threshold, sigma_threshold, n_erosion_threshold, n_min_threshold, min_distance, feature_number_start, vertical_axis, dxy, wavelength_filtering, strict_thresholding)\u001b[0m\n\u001b[1;32m 727\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m features_thresholds\n\u001b[1;32m 729\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m i_threshold \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 730\u001b[0m \u001b[38;5;66;03m# Work out which regions are still in feature_thresholds to keep\u001b[39;00m\n\u001b[1;32m 731\u001b[0m \u001b[38;5;66;03m# This is faster than calling \"in\" for every idx\u001b[39;00m\n\u001b[0;32m--> 732\u001b[0m keep_old_keys \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39misin(\u001b[38;5;28mlist\u001b[39m(regions_old\u001b[38;5;241m.\u001b[39mkeys()), features_thresholds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124midx\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 733\u001b[0m regions_old \u001b[38;5;241m=\u001b[39m {k:v \u001b[38;5;28;01mfor\u001b[39;00m i,(k,v) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(regions_old\u001b[38;5;241m.\u001b[39mitems()) \u001b[38;5;28;01mif\u001b[39;00m keep_old_keys[i]}\n\u001b[1;32m 734\u001b[0m regions_old\u001b[38;5;241m.\u001b[39mupdate(regions_i)\n", - "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/frame.py:3807\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3805\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 3807\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mget_loc(key)\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 3809\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", - "File \u001b[0;32m~/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/indexes/base.py:3804\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3804\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3805\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3809\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", - "\u001b[0;31mKeyError\u001b[0m: 'idx'" - ] - } - ], - "source": [ - "test_tracking_coord_order()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> \u001b[0;32m/Users/jonesw/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/indexes/base.py\u001b[0m(3804)\u001b[0;36mget_loc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32m 3802 \u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 3803 \u001b[0;31m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m-> 3804 \u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 3805 \u001b[0;31m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 3806 \u001b[0;31m \u001b[0;31m# If we have a listlike key, _check_indexing_error will raise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\n", - "ipdb> u\n", - "> \u001b[0;32m/Users/jonesw/mambaforge-pypy3/envs/tobac_v1.5/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m(3807)\u001b[0;36m__getitem__\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32m 3805 \u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 3806 \u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m-> 3807 \u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 3808 \u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 3809 \u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\n", - "ipdb> u\n", - "> \u001b[0;32m/Users/jonesw/python/tobac/tobac/feature_detection.py\u001b[0m(732)\u001b[0;36mfeature_detection_multithreshold_timestep\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32m 730 \u001b[0;31m \u001b[0;31m# Work out which regions are still in feature_thresholds to keep\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 731 \u001b[0;31m \u001b[0;31m# This is faster than calling \"in\" for every idx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m--> 732 \u001b[0;31m \u001b[0mkeep_old_keys\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mregions_old\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeatures_thresholds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"idx\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 733 \u001b[0;31m \u001b[0mregions_old\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mregions_old\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkeep_old_keys\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\u001b[0;32m 734 \u001b[0;31m \u001b[0mregions_old\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mregions_i\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\n", - "ipdb> features_thresholds\n", - "Empty DataFrame\n", - "Columns: []\n", - "Index: []\n" - ] - } - ], - "source": [ - "import pdb; pdb.pm()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 2dbabb0a57cec2eedc07c96db865f7892c9945ac Mon Sep 17 00:00:00 2001 From: William Jones Date: Sat, 10 Jun 2023 22:01:50 +0100 Subject: [PATCH 11/11] Update logic for updating regions_old to throw out all old values in feature_thresholds is empty --- tobac/feature_detection.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/tobac/feature_detection.py b/tobac/feature_detection.py index 1621b4c9..902b2efe 100644 --- a/tobac/feature_detection.py +++ b/tobac/feature_detection.py @@ -724,18 +724,15 @@ def feature_detection_multithreshold_timestep( ) return features_thresholds - if i_threshold > 0 and regions_old: - if not features_thresholds.empty: - # Work out which regions are still in feature_thresholds to keep - # This is faster than calling "in" for every idx - keep_old_keys = np.isin( - list(regions_old.keys()), features_thresholds["idx"] - ) - regions_old = { - k: v - for i, (k, v) in enumerate(regions_old.items()) - if keep_old_keys[i] - } + if i_threshold > 0 and not features_thresholds.empty and regions_old: + # Work out which regions are still in feature_thresholds to keep + # This is faster than calling "in" for every idx + keep_old_keys = np.isin( + list(regions_old.keys()), features_thresholds["idx"] + ) + regions_old = { + k: v for i, (k, v) in enumerate(regions_old.items()) if keep_old_keys[i] + } regions_old.update(regions_i) else: regions_old = regions_i