{"cells":[{"metadata":{"_uuid":"2994bd78215a183be0efaa58b29297a61d36c59a","_cell_guid":"1569a4d7-59b0-475d-bef0-19830b5b575e"},"cell_type":"markdown","source":"![](https://image.ibb.co/iPr7g7/tracks.png)\n**Preface**\n\n*This notebook is simply to deliver a view of the detector and a single event's path data based on individual particle tracks.*\n\n**Background**\n> Physicists from the ATLAS, CMS and LHCb collaborations have just launched the TrackML challenge – your chance to develop new machine-learning solutions for the next generation of particles detectors.\nThe Large Hadron Collider (LHC) produces hundreds of millions of collisions every second, generating tens of petabytes of data a year. Handling this flood of data is a major challenge for the physicists, who have developed tools to process and filter the events online within a fraction of a second and select the most promising collision events.\n[*Challenge Home Page*](https://home.cern/about/updates/2018/05/are-you-trackml-challenge)\n\n**Data**\n> Each event contains simulated measurements (essentially 3D points) of particles generated in a collision between proton bunches at the Large Hadron Collider at CERN. \n\nThe two pieces of data on display will be the detector geometry and the tracks of the truth data. "},{"metadata":{"_kg_hide-input":false,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":false,"collapsed":true},"cell_type":"code","source":"# Alan Vitullo, May 9,2018\n# TML_VA Reconstructor\nimport numpy as np\nimport pandas as pd\nimport os, os.path\n# Extract detector geometery\ndetector_geometery = pd.read_csv('../input/trackml-particle-identification/detectors.csv')\nprint('Dectector Geometery <size> :', detector_geometery.size)\ndetector_geometery.head(10)","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":false,"_uuid":"40292138334c52e2f9520bfa862428e80d561877","_cell_guid":"23617af7-7ab7-4b5d-887a-a2020bb3a3ca","trusted":false,"collapsed":true},"cell_type":"code","source":"# Extract track coordinates\ntruth_path = pd.read_csv('../input/truth-paths/truth_paths.csv')\nprint('Truth Path <size> :', truth_path.size)\nprint('Truth Path <shape> :', truth_path.shape)\ntruth_path.head(10)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b061dc0a72320ba7cf0f8d5f733261a1dae5bf3f","_cell_guid":"1a2ec9de-dc0a-4422-90cd-41ab924ca4f0"},"cell_type":"markdown","source":"**Imaging**\n\nThe first image in the group is the detector. The second image in each group is every 100th track and the third is every 10th track.\n\n*First Group:*"},{"metadata":{"_kg_hide-input":false,"_uuid":"b66f91034b178920777c3d54755eef5322f73dab","_cell_guid":"76c43c74-261f-4801-accf-6a67c51fc631","collapsed":true,"trusted":false},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport matplotlib.colors as colors\nfrom mpl_toolkits.mplot3d import Axes3D\n# Set figure width and height\nfig_size = plt.rcParams[\"figure.figsize\"]\nfig_size[0] = 40\nfig_size[1] = 40\nplt.rcParams[\"figure.figsize\"] = fig_size","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"bbb091ddd6fb125b6464fc33d2958600bea7938b","_cell_guid":"ed6038e5-d7e5-48d5-b0c8-f6dcf7fb8457","trusted":false,"collapsed":true},"cell_type":"code","source":"# Create Map\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=45, elev=30)\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('detector_ex.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"47a0e2846fec73e92e31e14dadacd64e8dc5380f","_cell_guid":"01ac1d86-57a6-4cfd-9d4e-3b147e6e3215","collapsed":true,"trusted":false},"cell_type":"code","source":"#\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=45, elev=30)\n#\ncut_off = truth_path.shape[0]-1\ntp_ind = np.arange(cut_off)\nnorms = colors.Normalize(vmin=0 , vmax=truth_path.track_id[cut_off])\nprev_id = truth_path.track_id[0]\nfor tpi in tp_ind:\n    x = []\n    y = []\n    z = []\n    while(truth_path.track_id[tpi] == prev_id):\n        x.append(truth_path.tx[tpi])\n        y.append(truth_path.ty[tpi])\n        z.append(truth_path.tz[tpi])\n        if(tpi+1 != cut_off):\n            if(truth_path.track_id[tpi+1] != prev_id):\n                prev_id = truth_path.track_id[tpi+1]\n            else:\n                tpi = tpi+1\n        else:\n            break\n    if(truth_path.track_id[tpi-1] % 100 == 0):\n        ax.plot(z, y, x, c=plt.cm.jet(norms(truth_path.track_id[tpi-1])) )\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('truth_path_100ex.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"48e9114d9c6f6fa2f4cbff060dd410e04c3aec82","_cell_guid":"0767be3a-682b-43be-aa3d-b309c1452d0f","collapsed":true,"trusted":false},"cell_type":"code","source":"#\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=45, elev=30)\n#\ncut_off = truth_path.shape[0]-1\ntp_ind = np.arange(cut_off)\nnorms = colors.Normalize(vmin=0 , vmax=truth_path.track_id[cut_off])\nprev_id = truth_path.track_id[0]\nfor tpi in tp_ind:\n    x = []\n    y = []\n    z = []\n    while(truth_path.track_id[tpi] == prev_id):\n        x.append(truth_path.tx[tpi])\n        y.append(truth_path.ty[tpi])\n        z.append(truth_path.tz[tpi])\n        if(tpi+1 != cut_off):\n            if(truth_path.track_id[tpi+1] != prev_id):\n                prev_id = truth_path.track_id[tpi+1]\n            else:\n                tpi = tpi+1\n        else:\n            break\n    if(truth_path.track_id[tpi-1] % 10 == 0):\n        ax.plot(z, y, x, c=plt.cm.jet(norms(truth_path.track_id[tpi-1])) )\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('truth_path_10ex.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"03374a870c8a72ee30ed6a57de0d9f8503c549df","_cell_guid":"2dd65c97-af7b-4e2e-b056-e9750096a1ac"},"cell_type":"markdown","source":"*Second Group:*"},{"metadata":{"_kg_hide-input":true,"_uuid":"c457a88623e7f4c06aa11240781de8dac053366e","_cell_guid":"1ed8cb00-6f97-4070-89fc-d0fd4b6f0207","collapsed":true,"trusted":false},"cell_type":"code","source":"# Create Map\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=135, elev=30)\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='Reds', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greens', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('detector_ex180.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"e53240b5462554fa21dc82d9aad371f646fc2cd9","_cell_guid":"7e451b29-7fd0-4667-8538-5e1b30c48caf","trusted":false,"collapsed":true},"cell_type":"code","source":"#\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=135, elev=30)\n#\ncut_off = truth_path.shape[0]-1\ntp_ind = np.arange(cut_off)\nnorms = colors.Normalize(vmin=0 , vmax=truth_path.track_id[cut_off])\nprev_id = truth_path.track_id[0]\nfor tpi in tp_ind:\n    x = []\n    y = []\n    z = []\n    while(truth_path.track_id[tpi] == prev_id):\n        x.append(truth_path.tx[tpi])\n        y.append(truth_path.ty[tpi])\n        z.append(truth_path.tz[tpi])\n        if(tpi+1 != cut_off):\n            if(truth_path.track_id[tpi+1] != prev_id):\n                prev_id = truth_path.track_id[tpi+1]\n            else:\n                tpi = tpi+1\n        else:\n            break\n    if(truth_path.track_id[tpi-1] % 100 == 0):\n        ax.plot(z, y, x, c=plt.cm.jet(norms(truth_path.track_id[tpi-1])) )\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('truth_path_100ex180.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"36746659d10813cdcbb08e311a5d09c1cee6550b","_cell_guid":"cbe0c712-82cf-4ef9-b920-cdef2cf6034b","trusted":false,"collapsed":true},"cell_type":"code","source":"#\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=135, elev=30)\n#\ncut_off = truth_path.shape[0]-1\ntp_ind = np.arange(cut_off)\nnorms = colors.Normalize(vmin=0 , vmax=truth_path.track_id[cut_off])\nprev_id = truth_path.track_id[0]\nfor tpi in tp_ind:\n    x = []\n    y = []\n    z = []\n    while(truth_path.track_id[tpi] == prev_id):\n        x.append(truth_path.tx[tpi])\n        y.append(truth_path.ty[tpi])\n        z.append(truth_path.tz[tpi])\n        if(tpi+1 != cut_off):\n            if(truth_path.track_id[tpi+1] != prev_id):\n                prev_id = truth_path.track_id[tpi+1]\n            else:\n                tpi = tpi+1\n        else:\n            break\n    if(truth_path.track_id[tpi-1] % 10 == 0):\n        ax.plot(z, y, x, c=plt.cm.jet(norms(truth_path.track_id[tpi-1])) )\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('truth_path_100ex180.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3d52766d064dc1637a653d384e4212e949ddc573","_cell_guid":"bb4f515a-23f3-4167-86ac-972968a2b8ba"},"cell_type":"markdown","source":"Showing the first tenth and quarter of the tracks respectively."},{"metadata":{"_kg_hide-input":true,"_uuid":"7a9e839e662195caba879757fdfa234156a5cb46","collapsed":true,"_cell_guid":"ca90bf28-375b-4852-a89c-ecaf75487227","trusted":false},"cell_type":"code","source":"#\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=45, elev=30)\n#\ncut_off = (int(truth_path.shape[0]/10))\ntp_ind = np.arange(cut_off)\nnorms = colors.Normalize(vmin=0 , vmax=truth_path.track_id[cut_off])\nprev_id = truth_path.track_id[0]\nfor tpi in tp_ind:\n    x = []\n    y = []\n    z = []\n    while(truth_path.track_id[tpi] == prev_id):\n        x.append(truth_path.tx[tpi])\n        y.append(truth_path.ty[tpi])\n        z.append(truth_path.tz[tpi])\n        if(truth_path.track_id[tpi+1] != prev_id):\n            prev_id = truth_path.track_id[tpi+1]\n        else:\n            tpi = tpi+1\n    ax.plot(z, y, x, c=plt.cm.jet(norms(truth_path.track_id[tpi])) )\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('truth_path_ex.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"fcead830a2af351ed732b22a6a992e0a63f0c458","collapsed":true,"_cell_guid":"02f38279-6fd1-40e2-aa78-75f031c54a9e","trusted":false},"cell_type":"code","source":"#\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\nax.view_init(azim=45, elev=30)\n#\ncut_off = (int(truth_path.shape[0]/4))\ntp_ind = np.arange(cut_off)\nnorms = colors.Normalize(vmin=0 , vmax=truth_path.track_id[cut_off])\nprev_id = truth_path.track_id[0]\nfor tpi in tp_ind:\n    x = []\n    y = []\n    z = []\n    while(truth_path.track_id[tpi] == prev_id):\n        x.append(truth_path.tx[tpi])\n        y.append(truth_path.ty[tpi])\n        z.append(truth_path.tz[tpi])\n        if(truth_path.track_id[tpi+1] != prev_id):\n            prev_id = truth_path.track_id[tpi+1]\n        else:\n            tpi = tpi+1\n    ax.plot(z, y, x, c=plt.cm.jet(norms(truth_path.track_id[tpi])) )\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.volume_id, cmap='tab20c', marker='o', label='volume')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.layer_id, cmap='Blues', marker='x', label='layer')\nax.scatter(detector_geometery.cz, detector_geometery.cy, detector_geometery.cx, c=detector_geometery.module_id, cmap='Greys', marker='.', label='module')\nax.legend()\nplt.show()\nplt.savefig('truth_path_ex.png', dpi = 200) #Output","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"7ac7d76a1c4c5ad0c11d4d5c7d0e87a2ee3658c9","_cell_guid":"ded226c0-2b84-44fa-a9f2-61f30565450e"},"cell_type":"markdown","source":"**Final Thoughts**\n\nBeing able to see the features of the event has helped me understand how I want to build my model. \n\n**Acknowledgements**\n\nThank you [Moritz Kiehn](https://www.kaggle.com/msmk00) for the trackml lib."}],"metadata":{"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}