Created
February 26, 2019 19:16
-
-
Save epifanio/2d6bb1a8c454fa3d09ab7942bbe0ca6e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import datetime as dt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "st_time = dt.datetime.now()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "**to speed up the loading and minimize the size of the data I used the `feather format`**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "em_data = pd.read_feather('em_df.ft')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>X</th>\n", | |
| " <th>Y</th>\n", | |
| " <th>Z</th>\n", | |
| " <th>GpsTime</th>\n", | |
| " <th>Amplitude</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>count</th>\n", | |
| " <td>1.226761e+07</td>\n", | |
| " <td>1.226761e+07</td>\n", | |
| " <td>1.226761e+07</td>\n", | |
| " <td>1.226761e+07</td>\n", | |
| " <td>1.226761e+07</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>mean</th>\n", | |
| " <td>-6.890380e+01</td>\n", | |
| " <td>4.100966e+01</td>\n", | |
| " <td>-7.718564e+01</td>\n", | |
| " <td>5.955593e+10</td>\n", | |
| " <td>-2.601706e+01</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>std</th>\n", | |
| " <td>8.014719e-01</td>\n", | |
| " <td>4.787278e-01</td>\n", | |
| " <td>9.581520e+00</td>\n", | |
| " <td>3.322059e+05</td>\n", | |
| " <td>7.345970e+00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>min</th>\n", | |
| " <td>-6.909418e+01</td>\n", | |
| " <td>-1.320920e-03</td>\n", | |
| " <td>-1.473200e+02</td>\n", | |
| " <td>5.955550e+10</td>\n", | |
| " <td>-6.400000e+01</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>25%</th>\n", | |
| " <td>-6.899785e+01</td>\n", | |
| " <td>4.096217e+01</td>\n", | |
| " <td>-8.258000e+01</td>\n", | |
| " <td>5.955559e+10</td>\n", | |
| " <td>-3.100000e+01</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>50%</th>\n", | |
| " <td>-6.891094e+01</td>\n", | |
| " <td>4.101923e+01</td>\n", | |
| " <td>-7.606000e+01</td>\n", | |
| " <td>5.955588e+10</td>\n", | |
| " <td>-2.475000e+01</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>75%</th>\n", | |
| " <td>-6.883640e+01</td>\n", | |
| " <td>4.107753e+01</td>\n", | |
| " <td>-7.054000e+01</td>\n", | |
| " <td>5.955639e+10</td>\n", | |
| " <td>-2.075000e+01</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>max</th>\n", | |
| " <td>2.546906e-03</td>\n", | |
| " <td>4.114448e+01</td>\n", | |
| " <td>-3.808000e+01</td>\n", | |
| " <td>5.955648e+10</td>\n", | |
| " <td>3.750000e+00</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y Z GpsTime Amplitude\n", | |
| "count 1.226761e+07 1.226761e+07 1.226761e+07 1.226761e+07 1.226761e+07\n", | |
| "mean -6.890380e+01 4.100966e+01 -7.718564e+01 5.955593e+10 -2.601706e+01\n", | |
| "std 8.014719e-01 4.787278e-01 9.581520e+00 3.322059e+05 7.345970e+00\n", | |
| "min -6.909418e+01 -1.320920e-03 -1.473200e+02 5.955550e+10 -6.400000e+01\n", | |
| "25% -6.899785e+01 4.096217e+01 -8.258000e+01 5.955559e+10 -3.100000e+01\n", | |
| "50% -6.891094e+01 4.101923e+01 -7.606000e+01 5.955588e+10 -2.475000e+01\n", | |
| "75% -6.883640e+01 4.107753e+01 -7.054000e+01 5.955639e+10 -2.075000e+01\n", | |
| "max 2.546906e-03 4.114448e+01 -3.808000e+01 5.955648e+10 3.750000e+00" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "em_data.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>X</th>\n", | |
| " <th>Y</th>\n", | |
| " <th>Z</th>\n", | |
| " <th>GpsTime</th>\n", | |
| " <th>Amplitude</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>-34.527571</td>\n", | |
| " <td>20.512344</td>\n", | |
| " <td>-80.39</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-40.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>-34.527742</td>\n", | |
| " <td>20.512322</td>\n", | |
| " <td>-80.92</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-43.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>-34.527914</td>\n", | |
| " <td>20.512300</td>\n", | |
| " <td>-79.79</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-43.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>-34.528039</td>\n", | |
| " <td>20.512284</td>\n", | |
| " <td>-80.02</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-39.50</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>-34.528134</td>\n", | |
| " <td>20.512273</td>\n", | |
| " <td>-81.11</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-37.00</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y Z GpsTime Amplitude\n", | |
| "0 -34.527571 20.512344 -80.39 5.955646e+10 -40.75\n", | |
| "1 -34.527742 20.512322 -80.92 5.955646e+10 -43.75\n", | |
| "2 -34.527914 20.512300 -79.79 5.955646e+10 -43.75\n", | |
| "3 -34.528039 20.512284 -80.02 5.955646e+10 -39.50\n", | |
| "4 -34.528134 20.512273 -81.11 5.955646e+10 -37.00" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "em_data.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "---\n", | |
| "**Group by `GpsTime`**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "gtimer = em_data.groupby(['GpsTime'], sort=False)['X'].count().reset_index()\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>GpsTime</th>\n", | |
| " <th>X</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>54</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>56</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>59</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>59</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>58</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " GpsTime X\n", | |
| "0 5.955646e+10 54\n", | |
| "1 5.955646e+10 56\n", | |
| "2 5.955646e+10 59\n", | |
| "3 5.955646e+10 59\n", | |
| "4 5.955646e+10 58" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "gtimer.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "**Compute the index for the nadir beam of each ping**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "| Beam Count | Nadir Index | integer resulting from: |\n", | |
| "|------|------|------------------------------------------------|\n", | |
| "| 54 | 27| $\\frac{54}{2}$ |\n", | |
| "| 56 | 82| $54+\\frac{56}{2}$ |\n", | |
| "| 59 | 139| $54+56+\\frac{59}{2}$ |\n", | |
| "| 59 | 198| $54+56+59+\\frac{59}{2}$ |\n", | |
| "| 58 | 257| $54+56+59+59+\\frac{58}{2}$ |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "beam_list = list(gtimer['X'].values)\n", | |
| "#beam_list[0:5]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "beam_indexes = [[i,v] for i,v in enumerate(beam_list)]\n", | |
| "#beam_indexes[0:5]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# consider using np.cumsum(beamlist) \n", | |
| "# and then add the alf part to get the middlepoint\n", | |
| "def getNadirIndex(beam_index, beam_list):\n", | |
| " if beam_index[0] == 0:\n", | |
| " nadir_index = int( beam_index[1]/2)\n", | |
| " if beam_index[0] != 0:\n", | |
| " nadir_index = int(sum(beam_list[0:beam_index[0]])+(beam_index[1]/2))\n", | |
| " return nadir_index" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#beam_indexes" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "**Test getNadirIndex**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#for i in range(5):\n", | |
| "# mdp = getNadirIndex(beam_indexes[i], beam_list)\n", | |
| "# print(mdp)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "**Parallelize `getNadirIndex` to loop over `beamlist`**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import parmap\n", | |
| "#nadir_indexs = parmap.map(getNadirIndex, beam_indexes, beam_list, pm_processes=48, pm_pbar=True)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#nadir_indexs = parmap.map(getNadirIndex, beam_indexes, beam_list, pm_processes=48, pm_pbar=True, pm_chunksize=4000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#import pickle" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#nadirIndex_pickle = open(\"nadirIndex.pickle\",\"wb\")\n", | |
| "#pickle.dump(nadirIndex, nadirIndex_pickle)\n", | |
| "#nadirIndex_pickle.close()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "---\n", | |
| "**Transform the Longitude and Latitude to UTM**" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from pyproj import Proj, transform" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from scipy.spatial import distance" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "wgs84 = Proj(\"+init=EPSG:4326\")\n", | |
| "UTM19N = Proj(\"+init=EPSG:32619\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "xy = em_data[['X','Y']].values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "em_data['XUTM'], em_data['YUTM'] = transform(wgs84, UTM19N,xy[:,0], xy[:,1])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>X</th>\n", | |
| " <th>Y</th>\n", | |
| " <th>Z</th>\n", | |
| " <th>GpsTime</th>\n", | |
| " <th>Amplitude</th>\n", | |
| " <th>XUTM</th>\n", | |
| " <th>YUTM</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>-34.527571</td>\n", | |
| " <td>20.512344</td>\n", | |
| " <td>-80.39</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-40.75</td>\n", | |
| " <td>4.266364e+06</td>\n", | |
| " <td>2.702726e+06</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>-34.527742</td>\n", | |
| " <td>20.512322</td>\n", | |
| " <td>-80.92</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-43.75</td>\n", | |
| " <td>4.266344e+06</td>\n", | |
| " <td>2.702718e+06</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>-34.527914</td>\n", | |
| " <td>20.512300</td>\n", | |
| " <td>-79.79</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-43.75</td>\n", | |
| " <td>4.266325e+06</td>\n", | |
| " <td>2.702711e+06</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>-34.528039</td>\n", | |
| " <td>20.512284</td>\n", | |
| " <td>-80.02</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-39.50</td>\n", | |
| " <td>4.266310e+06</td>\n", | |
| " <td>2.702705e+06</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>-34.528134</td>\n", | |
| " <td>20.512273</td>\n", | |
| " <td>-81.11</td>\n", | |
| " <td>5.955646e+10</td>\n", | |
| " <td>-37.00</td>\n", | |
| " <td>4.266299e+06</td>\n", | |
| " <td>2.702701e+06</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " X Y Z GpsTime Amplitude XUTM \\\n", | |
| "0 -34.527571 20.512344 -80.39 5.955646e+10 -40.75 4.266364e+06 \n", | |
| "1 -34.527742 20.512322 -80.92 5.955646e+10 -43.75 4.266344e+06 \n", | |
| "2 -34.527914 20.512300 -79.79 5.955646e+10 -43.75 4.266325e+06 \n", | |
| "3 -34.528039 20.512284 -80.02 5.955646e+10 -39.50 4.266310e+06 \n", | |
| "4 -34.528134 20.512273 -81.11 5.955646e+10 -37.00 4.266299e+06 \n", | |
| "\n", | |
| " YUTM \n", | |
| "0 2.702726e+06 \n", | |
| "1 2.702718e+06 \n", | |
| "2 2.702711e+06 \n", | |
| "3 2.702705e+06 \n", | |
| "4 2.702701e+06 " | |
| ] | |
| }, | |
| "execution_count": 24, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "em_data.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "---" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#gtimer['X'].iloc[0], nadir_indexs[0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#midpoint = em_data[['XUTM','YUTM']].iloc[nadir_indexs[0]].values\n", | |
| "#midpoint" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#coords = em_data[['XUTM','YUTM']].values\n", | |
| "#coords" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#mid_points = []\n", | |
| "#for i in range(len(nadir_indexs)):\n", | |
| "# mid_points.append(coords[nadir_indexs[i]])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#Z = em_data['Z'].values\n", | |
| "#Z" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "xyz = em_data[['XUTM','YUTM', 'Z']].values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "ping_indexes = np.cumsum(beam_list)\n", | |
| "#ping_indexes" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def getAngle(ping_index, xyz, ping_indexes, beam_indexes):\n", | |
| " if ping_index == 0:\n", | |
| " start=0\n", | |
| " stop=ping_indexes[ping_index]\n", | |
| " shape=ping_indexes[ping_index]\n", | |
| " nadir_index = int( beam_indexes[ping_index][1]/2)\n", | |
| " else:\n", | |
| " start=ping_indexes[ping_index-1]\n", | |
| " stop=ping_indexes[ping_index]\n", | |
| " shape=ping_indexes[ping_index] - ping_indexes[ping_index-1]\n", | |
| " nadir_index = int(sum(beam_list[0: beam_indexes[ping_index][0]])+( beam_indexes[ping_index][1]/2))\n", | |
| " #coords = xyz[:, 0:2]\n", | |
| " Z = xyz[:, 2]\n", | |
| " #midpoint = coords[nadir_index]\n", | |
| " midpoint = xyz[:, 0:2][nadir_index] \n", | |
| " \n", | |
| " pings = coords[start:stop]\n", | |
| " Zi = Z[start:stop] \n", | |
| " XY = [tuple(midpoint)]\n", | |
| " coord = [tuple(j) for j in tuple(pings)]\n", | |
| " d = distance.cdist(XY, coord, 'euclidean')\n", | |
| " angle = np.rad2deg(np.arctan2(np.abs(Zi),d)).reshape(shape,)\n", | |
| " return angle" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#ping_indexes" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#beam_indexes" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "# consider using np.cumsum(beamlist) \n", | |
| "# and then add the alf part to get the middlepoint\n", | |
| "def getNadirIndex(beam_index, beam_list):\n", | |
| " if beam_index[0] == 0:\n", | |
| " nadir_index = int( beam_index[1]/2)\n", | |
| " if beam_index[0] != 0:\n", | |
| " nadir_index = int(sum(beam_list[0:beam_index[0]])+(beam_index[1]/2))\n", | |
| " #print(beam_list[0:beam_index[0]], beam_index[1]/2, '\\n')\n", | |
| " #print(beam_index[1])\n", | |
| " return nadir_index\n", | |
| "\n", | |
| "for i in range(5):\n", | |
| " mdp = getNadirIndex(beam_indexes[i], beam_list)\n", | |
| " print(mdp)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#getAngle(2, xyz, ping_indexes, beam_indexes)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "input_indexes = list(range(len(ping_indexes)))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| " 76%|███████▌ | 157905/209062 [03:44<01:13, 699.78it/s]" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "angles = parmap.map(getAngle, input_indexes, xyz, ping_indexes, beam_indexes, pm_processes=48, pm_pbar=True)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "raw", | |
| "metadata": {}, | |
| "source": [ | |
| "em_data['angle']=\"\"\n", | |
| "angles=[]\n", | |
| "\n", | |
| "for i in range(len(ping_indexes)):\n", | |
| " if i == 0:\n", | |
| " start=0\n", | |
| " stop=ping_indexes[i]\n", | |
| " shape=ping_indexes[i]\n", | |
| " else:\n", | |
| " start=ping_indexes[i-1]\n", | |
| " stop=ping_indexes[i]\n", | |
| " shape=ping_indexes[i] - ping_indexes[i-1]\n", | |
| " \n", | |
| " midpoint = coords[nadir_indexs[i]]\n", | |
| " pings = coords[start:stop]\n", | |
| " Zi = Z[start:stop] \n", | |
| " XY = [tuple(midpoint)]\n", | |
| " coord = [tuple(j) for j in tuple(pings)]\n", | |
| " d = distance.cdist(XY, coord, 'euclidean')\n", | |
| " angle = np.rad2deg(np.arctan2(np.abs(Zi),d)).reshape(shape,)\n", | |
| " angles.append(angle)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#ping_indexes\n", | |
| "#nadir_indexs\n", | |
| "#coord\n", | |
| "#Z" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "angle_values = [beam for ping in angles for beam in ping]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "em_data['angle'] = angle_values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "end_time = dt.datetime.now()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "end_time-st_time" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "em_data.head(60)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "plt.plot(em_data['angle'].iloc[0:54].values, em_data['Amplitude'].iloc[0:54].values, '-');" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#!gist PDAL_EM1000.ipynb" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#em_data.to_csv('em_data.csv')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "em_data.describe()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "em_data.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# need to start to discard some bad data ...\n", | |
| "em_data['Amplitude'][em_data['Amplitude']>=0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "---" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "!gist PDAL_EM1000.ipynb" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.6.7" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment