{"cells":[{"metadata":{"_uuid":"00942451f681f653faa92feb2c05952a61015149"},"cell_type":"markdown","source":"# About\n\nThis notebook is a basic example for looking at individual events, events, creating a solution and submitting it. It walks through some of the library function for accessing the data and writing a submission file. \nThis example uses DBScan to solve the tracking problem. "},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"0bee86255243664f24e4bcf48af2228a3100a8b7"},"cell_type":"code","source":"%matplotlib inline\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nimport os\n\nfrom trackml.dataset import load_event, load_dataset\nfrom trackml.score import score_event","execution_count":1,"outputs":[]},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"63414de98667e95f60407c9155899a25a321cffc"},"cell_type":"code","source":"# Change this according to your directory preferred setting\npath_to_train = \"../input/train_1\"","execution_count":2,"outputs":[]},{"metadata":{"_uuid":"ba582f8999ef55c648c8599361c923ca3f329ff2"},"cell_type":"markdown","source":"#  Working on one event"},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"3e45554ab05c14faf63a2c423f69ebbe7c108541"},"cell_type":"code","source":"# This event is in Train_1\nevent_prefix = \"event000001000\"","execution_count":3,"outputs":[]},{"metadata":{"_uuid":"1d922ce1a4dab9afd831e29a7324f6e438d60344"},"cell_type":"markdown","source":"## Read and look"},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"0ace6a8761680565b177f0a1b12f85949fecb599"},"cell_type":"code","source":"hits, cells, particles, truth = load_event(os.path.join(path_to_train, event_prefix))","execution_count":4,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"e95ce87d0f786d9438365fef374cd4096a030e79"},"cell_type":"code","source":"hits.head()","execution_count":5,"outputs":[]},{"metadata":{"_uuid":"c05b12ca539279524e506814e04cefde8c92dab2"},"cell_type":"markdown","source":"## Identify tracks \n\nIn this example the track pattern recognition is solved as clustering problem. Each of the clusters corresponds to one track. \nFirstly we preprocess hit coordinates in order to highlight the fact that a track is (approximatly) an arc of helix. \n\n\n$$ \nr_{1} = \\sqrt{x^{2}+y^{2}+z^{2}}\n$$\n\n$$\nx_{2} = x / r_{1}\n$$\n$$\ny_{2} = y / r_{1}\n$$\n\n$$\nr_{2} = \\sqrt{x^{2}+y^{2}}\n$$\n\n$$\nz_{2} = z / r_{2}\n$$\n\n\n\n![dbscan_pic.png](attachment:dbscan_pic.png)\n\nThen, DBSCAN is used to recognize hit clusters. ","attachments":{"dbscan_pic.png":{"image/png":"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"}}},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"c2f70ae63abffcc09a534bb17fb89df8ffddb722"},"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\nfrom sklearn.cluster import DBSCAN\n\nclass Clusterer(object):\n    \n    def __init__(self, eps):\n        self.eps = eps\n        \n    \n    def _preprocess(self, hits):\n        \n        x = hits.x.values\n        y = hits.y.values\n        z = hits.z.values\n\n        r = np.sqrt(x**2 + y**2 + z**2)\n        hits['x2'] = x/r\n        hits['y2'] = y/r\n\n        r = np.sqrt(x**2 + y**2)\n        hits['z2'] = z/r\n\n        ss = StandardScaler()\n        X = ss.fit_transform(hits[['x2', 'y2', 'z2']].values)\n        \n        return X\n    \n    \n    def predict(self, hits):\n        \n        X = self._preprocess(hits)\n        \n        cl = DBSCAN(eps=self.eps, min_samples=1, algorithm='kd_tree')\n        labels = cl.fit_predict(X)\n        \n        return labels","execution_count":6,"outputs":[]},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"a54437d6f946cc3aca44b6579d2ab80e873dba68"},"cell_type":"code","source":"model = Clusterer(eps=0.008)\nlabels = model.predict(hits)","execution_count":7,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"1b6880954ae9dddc5004762002f80b25f9baaa34"},"cell_type":"code","source":"print(labels)","execution_count":8,"outputs":[]},{"metadata":{"_uuid":"82c45674e66fc2052cca8a342c8eb8983ec506a3"},"cell_type":"markdown","source":"## Score\n\nCompute the score for this event. The dummy submission output of create_one_event_submission  is created only to be the second parameter of the score_event function. It should not be confused with a well-behaved submission for the test set. "},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"1669b4554eb287c888cc9357cf735763e2ee69d4"},"cell_type":"code","source":"def create_one_event_submission(event_id, hits, labels):\n    sub_data = np.column_stack(([event_id]*len(hits), hits.hit_id.values, labels))\n    submission = pd.DataFrame(data=sub_data, columns=[\"event_id\", \"hit_id\", \"track_id\"]).astype(int)\n    return submission","execution_count":9,"outputs":[]},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"31d2ad6bbcafff3dc64ff126daa11857bfe348e6"},"cell_type":"code","source":"submission = create_one_event_submission(0, hits, labels)\nscore = score_event(truth, submission)","execution_count":10,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"50396d1ba8601bc50fd69418464af02d90cff710"},"cell_type":"code","source":"print(\"Your score: \", score)","execution_count":11,"outputs":[]},{"metadata":{"_uuid":"98d43131869c72924e35d87ffa8bfee26a68ce0b"},"cell_type":"markdown","source":"# Recognize tracks in all events of a dataset\nIn this example, the dataset is the whole training set.   \nThis is a simple loop over the one-event actions: because of the use of DBScan, there is no actual training.\n\nThis may take a very long time. To run on only a subset, use\n\n     load_dataset(path_to_train, skip=1000, nevents=5)\n\nIt will skip the first 1000 events, and select the next 5 ones."},{"metadata":{"trusted":false,"_uuid":"648e0f6b8febc10899dd500700b59a93cd9f1f8f"},"cell_type":"code","source":"dataset_submissions = []\ndataset_scores = []\n\nfor event_id, hits, cells, particles, truth in load_dataset(path_to_train, skip=0, nevents=5):\n        \n    # Track pattern recognition\n    model = Clusterer(eps=0.008)\n    labels = model.predict(hits)\n        \n    # Prepare submission for an event\n    one_submission = create_one_event_submission(event_id, hits, labels)\n    dataset_submissions.append(one_submission)\n    \n    # Score for the event\n    score = score_event(truth, one_submission)\n    dataset_scores.append(score)\n    \n    print(\"Score for event %d: %.3f\" % (event_id, score))\n    \nprint('Mean score: %.3f' % (np.mean(dataset_scores)))","execution_count":12,"outputs":[]},{"metadata":{"_uuid":"b9f03893e50ca325c3a4a063ee82164bd08d3eda"},"cell_type":"markdown","source":"# Create a submission\n\nCreate a submission file. "},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"7f8de52b9022581bf10aa813d2db005b842f0be7"},"cell_type":"code","source":"path_to_test = \"../input/test\"\ntest_dataset_submissions = []\n\ncreate_submission = False # True for submission \n\nif create_submission:\n    for event_id, hits, cells in load_dataset(path_to_test, parts=['hits', 'cells']):\n\n        # Track pattern recognition\n        model = Clusterer(eps=0.008)\n        labels = model.predict(hits)\n\n        # Prepare submission for an event\n        one_submission = create_one_event_submission(event_id, hits, labels)\n        test_dataset_submissions.append(one_submission)\n        \n        print('Event ID: ', event_id)\n\n    # Create submission file\n    submussion = pd.concat(test_dataset_submissions, axis=0)\n    submussion.to_csv('submission.csv.gz', index=False, compression='gzip')","execution_count":13,"outputs":[]},{"metadata":{"trusted":false,"collapsed":true,"_uuid":"70ce31d93086e022159d6227f35c6488bf80eb22"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"anaconda-cloud":{},"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.0"}},"nbformat":4,"nbformat_minor":1}