{"cells":[{"metadata":{"_cell_guid":"10b8957c-761b-40d5-aa15-f65710b7a3b1","_uuid":"00942451f681f653faa92feb2c05952a61015149"},"cell_type":"markdown","source":"## Particle trajectories in spherical coordinates\nref.https://www.kaggle.com/wesamelshamy/trackml-problem-explanation-and-data-exploration  \nref.https://www.kaggle.com/afaist/hdbscan-and-scaling-of-the-coordinates"},{"metadata":{"_cell_guid":"e081740e-8169-4481-b1df-f5dd5488314f","_uuid":"0bee86255243664f24e4bcf48af2228a3100a8b7","trusted":true,"collapsed":true},"cell_type":"code","source":"import os\n\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\n%matplotlib inline\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\n\nfrom trackml.dataset import load_event, load_dataset\nfrom trackml.score import score_event\n\nimport operator","execution_count":74,"outputs":[]},{"metadata":{"_uuid":"e98cebcca8d55adfd573effb1c479484c32d85c8"},"cell_type":"markdown","source":"### Read one event."},{"metadata":{"_cell_guid":"572fcbb6-8c7b-4a09-8916-8ec76689130f","_uuid":"63414de98667e95f60407c9155899a25a321cffc","collapsed":true,"trusted":true},"cell_type":"code","source":"event_prefix = 'event000001000'\nhits, cells, particles, truth = load_event(os.path.join('../input/train_1', event_prefix))","execution_count":2,"outputs":[]},{"metadata":{"_uuid":"dcace8e32700129341c0cdcdbc7853f5f857b5bf"},"cell_type":"markdown","source":"### Method to convert to spherical coordinate."},{"metadata":{"_cell_guid":"48ac6293-76df-407d-8fba-88868eee7194","_uuid":"1f6d1895932fd7aac71505179e3b5f762ca4b014","collapsed":true,"trusted":true},"cell_type":"code","source":"def cart2spherical(cart):\n    r = np.linalg.norm(cart, axis=0)\n    theta = np.degrees(np.arccos(cart[2] / r))\n    phi = np.degrees(np.arctan2(cart[1], cart[0]))\n    return np.vstack((r, theta, phi))","execution_count":75,"outputs":[]},{"metadata":{"_uuid":"d79df996ef6290a4973f1eef025dc34d4acf3104"},"cell_type":"markdown","source":"### Compare trajectories between Cartesian and spherical coordinates."},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"db7d6a91ca00ce9b405391e70c63e573ae5404dd"},"cell_type":"code","source":"# Get particle id with highest weights\nNUM_PARTICLES = 100\ntruth_dedup = truth.drop_duplicates('particle_id')\ntruth_sort = truth_dedup.sort_values('weight', ascending=False)\ntruth_head = truth_sort.head(NUM_PARTICLES)\n\n# Get points where the same particle intersected subsequent layers of the observation material\np_traj_list = []\nfor _, tr in truth_head.iterrows():\n    p_traj = truth[truth.particle_id == tr.particle_id][['tx', 'ty', 'tz']]\n    # Add initial position.\n    #p_traj = (p_traj\n    #          .append({'tx': particle.vx, 'ty': particle.vy, 'tz': particle.vz}, ignore_index=True)\n    #          .sort_values(by='tz'))\n    p_traj_list.append(p_traj)\n    \n# Convert to spherical coordinate.\nrtp_list = []\nfor p_traj in p_traj_list:\n    xyz = p_traj.loc[:, ['tx', 'ty', 'tz']].values.transpose()\n    rtp = cart2spherical(xyz).transpose()\n    rtp_df = pd.DataFrame(rtp, columns=('r', 'theta', 'phi'))\n    rtp_list.append(rtp_df)\n\n# Plot with Cartesian coordinates.\nfig = plt.figure(figsize=(10, 10))\nax = fig.add_subplot(111, projection='3d')\nfor p_traj in p_traj_list:\n    ax.plot(\n        xs=p_traj.tx,\n        ys=p_traj.ty,\n        zs=p_traj.tz,\n        marker='o')\nax.set_xlabel('X (mm)')\nax.set_ylabel('Y (mm)')\nax.set_zlabel('Z (mm) -- Detection layers')\nplt.title('Trajectories of top weights particles in Cartesian coordinates.')\n\n# Plot with spherical coordinates.\nfig2 = plt.figure(figsize=(10, 10))\nax = fig2.add_subplot(111, projection='3d')\nfor rtp_df in rtp_list:\n    ax.plot(\n        xs=rtp_df.theta,\n        ys=rtp_df.phi,\n        zs=rtp_df.r,\n        marker='o')\nax.set_xlabel('Theta (deg)')\nax.set_ylabel('Phi (deg)')\nax.set_zlabel('R  (mm) -- Detection layers')\nplt.title('Trajectories of top weights particles in spherical coordinates.')\nplt.show()","execution_count":96,"outputs":[]}],"metadata":{"anaconda-cloud":{},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}